Полная Версия: (sfall) дополнения
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Fakeman
CODE
0000003C combat_state dd ?                           ; 1 - бой, 2 - враги вне зоны, 4 - убегает

Это для каждого криттера на карте нужно проверить его флаг 3С на значение 1. так — read(obj + 0x3c) ?
Crafty
QUOTE (Fakeman)
Это для каждого криттера на карте нужно проверить его флаг 3С на значение 1.
Нет, всё сложнее ;)
Fakeman
Что сложнее, мне надо узнать может ли выйти игрок из боя или нет, как это проверить?
не нужны мне тут никакие combatai_want_to_join и п.р.


QUOTE
тут нужно прыгать на add esp, 8 или add esp тоже надо пропускать?
Второе.

Первое. :)

Отправлено: 3 дек 17 20:33
QUOTE
sneak_success

Потестил твое исправление — чето фигня какая-то, криво работает.
Пока не включишь/выключишь навык скрытность всегда будет показывать одно зависшее значение "success", можно выйти из укрытия и ходить под носом у криттера и функция будет возвращать всегда "success" (при включенном навыке в 20%) пока не передернешь) — короче багнутая функция в движке.

CODE
В F2 посложнее — проверка через минуту если предыдущий результат >= ROLL_SUCCESS, в противном случае там зависимость от скилла — чем выше скилл, тем чаще будет следующая проверка при неудаче в последней проверке (если скилл <= 80, то через минуту, а при скилле > 250 через 10 секунд).

Хм, минуту говоришь надо ждать? ) щас проверить...
Эм точно при 20% около 2х минут можно ходить под криттером и будет "success" :)
Как-то это неправильно, должно быть чем меньше скил тем быстрее проверка.
Crafty
QUOTE (Fakeman)
не нужны мне тут никакие combatai_want_to_join и п.р.
Там нет переменной а-ля dude_can_end_combat — при попытке завершения боя (Enter или все трупики) движок проверяет всех персонажей, то же самое скриптово нужно сделать тебе, опустив вывод сообщения "Бой не может закончиться, если рядом есть враждебные существа." и установку флага выхода из боя.

QUOTE (Fakeman)
Первое. :)
Второе :-p Если убивать проверку по 0x452712 (заменив 0x740B на 0xEB1C). Первое, если (как видимо ты и сделал) по 0x45271E (0x9 -> 0xE).

QUOTE (Fakeman)
Пока не включишь/выключишь навык скрытность всегда будет показывать одно зависшее значение "success", можно выйти из укрытия и ходить под носом у криттера и функция будет возвращать всегда "success" (при включенном навыке в 20%)
Вообще не понимаю о чём речь и причём тут ходьба под носом у криттера :-p
sneak_success возвращает состояние активности скрытности.

Нажимая "1" ты включаешь скрытность, но это не значит что она активна — в момент нажатия делается roll_vs_skill(dude_obj, SKILL_SNEAK, 0) и при удаче (ROLL_SUCCESS или ROLL_CRITICAL_SUCCESS) скрытность становится активной на 1 минуту, а при неудаче неактивной на 1 минуту в F1 или на время в зависимости от уровня скрытности в F2 (чем выше скилл, тем быстрее будет новая проверка). Когда закончится время [не]активности будет сделана новая проверка с теми же последствиями. Само собой [не]активность скрытности влияет на видимость ГГ другими персонажами:
CODE
if sneak_success then begin // Если скрытность активна
 distance := distance / 4; // то расстояние видимости уменьшается в 4 раза
 if has_skill(target, SKILL_SNEAK) > 120 then distance := distance - 1; // и если скрытность > 120, то уменьшается ещё на 1 гекс
end else if using_skill(target, SKILL_SNEAK) then distance := distance * 2 / 3; // Если скрытность неактивна, но включена, то расстояние уменьшается на 1/3

В своё время я делал чтобы в индикаторе при включённой скрытности менялся цвет текста "СКРЫТНОСТЬ" на красный для неактивности и зелёный для активности, но это очень читерно (особенно с учётом возможности выключения/включения скрытности до получения нужного результата).

QUOTE (Fakeman)
Как-то легенда жаловалось на твой сфалл что ломает скрытность.
Аналогичная фигня — вообще не понимаю о чём речь :-p
Fakeman
QUOTE
Вообще не понимаю о чём речь и причём тут ходьба под носом у криттера :-p
sneak_success возвращает состояние активности скрытности.
Нажимая "1" ты включаешь скрытность, но это не значит что она активна — в момент нажатия делается roll_vs_skill(dude_obj, SKILL_SNEAK, 0) и при удаче (ROLL_SUCCESS или ROLL_CRITICAL_SUCCESS) скрытность становится активной на 1 минуту

хех, теперь понял принцип работы, просто кидаем кубики-рубики и смотрим результат))
а я то думал это зависит от того видят ли тебя другие нпс и если не видят то SUCCESS.

QUOTE
Если убивать проверку по 0x452712

Ну ты не внимательный, это же первая проверка, в случае отсутствия такого файла будет выводится ошибка в лог, а я убрал второе то которое просто тупо пишет что звук проигран.
Crafty
QUOTE (Fakeman)
хех, теперь понял принцип работы, просто кидаем кубики-рубики и смотрим результат))
Дак прелесть же, все думают что включил скрытность и получил плюшку, а оказывается она ещё должна прокнуть для полного эффекта ;)
Fakeman
QUOTE
при попытке завершения боя (Enter или все трупики) движок проверяет всех персонажей

Мне не нужна полная аналогия движковой проверки (не нужно проверять трупиков/в отключке и пр) мне нужно тупо проверить у криттера находятся ли он в бою. Какое значение я у него должен проверить? даже если он уже труп, мне этого будет достаточно.
за что отвечает pobj.combat_state, это то что мне надо, или нет?

QUOTE
Дак прелесть же, все думают что включил скрытность и получил плюшку

да вот это обломище, так обломище))
Crafty
QUOTE (Fakeman)
мне нужно тупо проверить у криттера находятся ли он в бою.
Так то да — read_int(source+0x3C) bwand 1.
QUOTE (Fakeman)
даже если он уже труп
critter_state(source) bwand 1.
QUOTE (Fakeman)
мне этого будет достаточно.
Но не удивляйся если что-то пойдёт не так (убегающий нпс тоже находится в бою, но через Enter можно завершить бой) ;) Кстати, ещё есть terminate_combat и critter_stop_attacking(source) (всех в цикле).
Fakeman
Спасибо.
Да мне просто нужно узнать атаковал ли игрок/или игрока НПС,
то что там нпс убегает это его личные проблемы, это Dude не волнует :)

Слушай а что может быть такое, в неваде сохраняю игру на твоей версии (1.8 / 1.7.31), меняю сфалл на ориг, и после загрузки игры на твоем сфале получаю краш игры, также наоборот сохраняю на оригинал сфале(3.8.4 / 4.0.1) меняю на твой и тоже после загрузки игра вываливается с крашем, причем на разных картах такое.
Че за несовместимость между сфалами такая в неваде?
Невада фоксовская сборка, единственное я для него в движке менял маркер(версию) для сохраненок, т.е. другие сохранки от ф2 не будут грузится будет писать "старая версия", но я что-то не думаю что из-за этого.
Это что за прикол такой ты там для невады ничего не менял?
Crafty
QUOTE (Fakeman)
Да мне просто нужно узнать атаковал ли игрок/или игрока НПС,
то что там нпс убегает это его личные проблемы, это Dude не волнует :)
А как быть со случайками, когда одна группа нпс нападает на другую?
Ещё есть сфалловские get_last_attacker и get_last_target.
QUOTE (Fakeman)
Че за несовместимость между сфалами такая в неваде?
В ddraw.ini есть MultiPatches и DataLoadOrderPatch? Скорее всего достаточно включить только вторую переменную.
QUOTE (Fakeman)
Это что за прикол такой ты там для невады ничего не менял?
А чего сразу я? ;)
Fakeman
QUOTE
А как быть со случайками, когда одна группа нпс нападает на другую?

Т.е. у них не будет установлено то значение? — это даже хорошо, ибо если бы оно установилось была бы новая большая проблема :)

QUOTE
В ddraw.ini есть MultiPatches и DataLoadOrderPatch?

Я таких и не знаю, есть только в 4.0 вроде, а я сохранялся в 3.8.4
можешь сам попробовать скачай сборку, там твой стоит 1.8 по умолчанию, начни игру и сохранись, потом поменяй сфалл.
Я даже не знаю может это лично у меня такой глюк.
Crafty
QUOTE (Fakeman)
Т.е. у них не будет установлено то значение? — это даже хорошо, ибо если бы оно установилось была бы новая большая проблема :)
Будет, о том и речь — они в бою, но ГГ не их враг.

QUOTE (Fakeman)
Я таких и не знаю, есть только в 4.0 вроде, а я сохранялся в 3.8.4
Их добавили ещё в 3.7.4 если верить ридми. И конечно я проверил ( только на новой игре), ну и добавив и включив в ини эти две переменные (без них краш, что вполне логично).
Foxx
Crafty
Можешь данный баг поправить?
Foxx
Похоже этот баг и перка "Прицел ночного видения" тоже касается.
Fakeman
Кстати баг решается простым передергиванием кнопки пип-боя (те открыть/закрыть) ;p
Foxx
Fakeman
У перка "Прицел ночного видения", тоже баг решается. У 10мм пистолета с фонариком в Неваде, даже в описание добавили:
QUOTE
Правда, иногда он не горит — нужно потрясти.

Можно активную руку сменить на неактивную и обратно. Но хотело бы без лишних телодвижений)))
Fakeman
Крафти выложи пожалуйста к замороженной верии исходники.
Fakeman
У тебя в новых сфалах баг в работе функции: party_member_list(0) //макрос party_member_list_critters
Пропускает некоторых партийцев и возвращает нули в массиве.
CODE
Lookup Party. num: 5
Party:36704520 Name: Bucho
Party:0 Name: Bucho
Party:0 Name: Bucho
Party:35231816 Name: Vic
Party:35208536 Name: Cassidy

с party_member_list_all проблем нет, возвращает всех.
Fakeman
Крафти как разморозишься ) сделай еще отключалку твоих правок для obj_can_hear_obj из-за нее появляются нежелательные нападения на игрока.
И может ее доработать можно чтобы адекватно работала, а не за километр через стены срабатывала.
Fakeman
Баг движка:
При переходе с карты на карту через сетки переходов или юзанья лестниц, когда гекс гг при переходе совпадет с гексом зоны сетки перехода на загружаемой карте, то происходит переход на гекс указываемый в сетки перехода на загружаемой карте, а не на гекс изначальной сетки.
Происходит как бы двойной переход. Подозреваю, что и spatial скрипты тоже при этом сработают, но не проверял.

Баг Ассеблера: Не работает/или вырезана опция в ddraw
CODE
;Additional game msg files added by ExtraGameMsgFileList setting will have consecutive fileIds assigned beginning from 0x2000.
ExtraGameMsgFileList=
Fakeman
Еще баг ассемблера:
Перестали добавляться контейнеры в инвентарь игрока используя скрипт фильтра.
Думаю ошибка опять в массивах, так как добавление происходит по указателям из массива.
Shifu
Очень прошу, сделайте оригинальные кнопки (стрелочки "листания") в слотах сохраний.. Перфекционист орет, не могу угомонить..
Fakeman
QUOTE
Очень прошу, сделайте оригинальные кнопки (стрелочки "листания") в слотах сохраний.. Перфекционист орет, не могу угомонить.

+1 — очень ужасные кнопки, зачем их нужно было трогать непонятно, как и все другое вырезать.
Foxx
А мне кнопки в "объеме" больше нравятся. Те мелкие стрелки, никто и не замечал ни когда — если их носом не тыкнуть. Я это не так просто говорю, а по наблюдению скидывания сейвов. Раньше (до внедрения больших кнопок) только номера сохранок от 1-10 скидывали, а сейчас и 60 и 200 попадаются)))
А вообще, мне кажется  — это связано с тех.стороной (как и задний план у "Мода внешности"). И смотреть на такие мелочи)))
Fakeman
Раньше просто позиция не запоминалась и всегда сбрасывалась в 1, теперь запоминается и игрок просто делает запись в текущей позиции или +/- одна позиция.
Обычному игроку на игру с головой хватает всего 20 слотов, модеру конечно нужно побольше всяких разных сейвов))
Foxx
QUOTE ("Fakeman")
модеру конечно нужно побольше всяких разных сейвов))

И не говори, не давно удалил около 700мб чужих сейвов — пользователи скидывали)))
Я просто стал путаться в этих сотнях сохранок и решил по новой их собирать — но уже подписывать, где и какой баг в названии сейва при скачке.
Crafty
QUOTE (Fakeman)
Крафти как разморозишься ) сделай еще отключалку твоих правок для obj_can_hear_obj из-за нее появляются нежелательные нападения на игрока.
Лишнее, проще скрипт исправить.
QUOTE (Fakeman)
И может ее доработать можно чтобы адекватно работала, а не за километр через стены срабатывала.
QUOTE
После включения (CanSeeAndHearFix=1) source может не видеть, но слышать (особенно когда он слепой), нормально работает obj_can_hear_obj.

QUOTE (Fakeman)
Баг движка:При переходе с карты на карту через сетки переходов или юзанья лестниц
Больше похоже на плохой дизайн создателя карты, не?

QUOTE (Fakeman)
Баг Ассеблера: Не работает/или вырезана опция в ddraw
Чё?: Не существует :-p

QUOTE (Fakeman)
Перестали добавляться контейнеры в инвентарь игрока используя скрипт фильтра.
Без дупля пока скрипт не увижу :-p

QUOTE (Shifu)
Перфекционист орет, не могу угомонить..
Тю, кликни по номеру между кнопок (или "p" нажми), потом вбей 9999, нажми Enter и перфекциониста хватит удар ;-p

QUOTE (Fakeman)
+1 — очень ужасные кнопки, зачем их нужно было трогать непонятно
Чтобы не создавать и не обрабатывать их (отрисовку/нажатия) самому, когда в движке уже есть функции для этого.
Fakeman
QUOTE
Больше похоже на плохой дизайн создателя карты, не?

Да, но это проблема есть как у меня так у Невады и в Соноре.
приходится перепланировать карту или загораживать этот гекс.

QUOTE
Чё?: Не существует :-p

Нет блин, Ты попьяне ее чикнул))

QUOTE
Чтобы не создавать и не обрабатывать их (отрисовку/нажатия) самому, когда в движке уже есть функции для этого.

Слушай а в библу есть возможность паковать ресурсы? почему нельзя прикрутить картинку к кнопкам.

Отправлено: 26 мар 18 21:38
QUOTE
obj_can_hear_obj

Имхо очень долеко слышат, наверное с прослушкой в ушах стоят))
Crafty
QUOTE (Fakeman)
приходится перепланировать карту или загораживать этот гекс.
Можно подправить, но поможет только если ГГ будет попадать на гекс перехода и один из соседних гексов не будет сеткой перехода, чтобы через него уйти дальше на карту, а если полностью будет окружён сеткой перехода, то любой шаг всяко будет кидать на карту из этой сетки.

QUOTE (Fakeman)
Нет блин, Ты попьяне ее чикнул))
Просто не делал :-p

QUOTE (Fakeman)
почему нельзя прикрутить картинку к кнопкам.
Можно, но картинок нет, да и не время сейчас ;)

QUOTE (Fakeman)
Имхо очень долеко слышат, наверное с прослушкой в ушах стоят))
Так нужно страшную опцию (CanSeeAndHearFix=1) включить ;-p
Fakeman
QUOTE
Можно подправить, но поможет только если ГГ будет попадать на гекс перехода и один из соседних гексов не будет сеткой перехода, чтобы через него уйти дальше на карту, а если полностью будет окружён сеткой перехода, то любой шаг всяко будет кидать на карту из этой сетки.

Че то не понял твоей сути. опишу по пунктам.
1. Игрок заходит на сетку перехода расположенной на гексе Х
2. грузится карта
3. карта загрузилась, игрок стоит на загруженной карте на гексе Х.
4. Если на гексе X есть сетка, то прыгаем на гекс указываемой этой сеткой.
5. Если на гексе X есть сетка и она является выходом на глобал то прыгаем на стартовый гекс карты.
6. Если на гексе X нет сетки, то переходим как положено на гекс из первой сетки пункта 1.

Не понятно причем тут шаги?)
Мне кажется в пунке 3 или до, надо перемещать гг на другой гекс нулевой к примеру, если нет возможности заблокировать переход в пункте 4 (5).
Crafty
QUOTE (Fakeman)
1. Игрок заходит на сетку перехода расположенной на гексе Х
2. грузится карта
3. карта загрузилась, игрок стоит на загруженной карте на гексе Х.

4. Если на гексе X есть сетка, то она игнорируется и ГГ может уйти с гекса Х, но если на следующем гексе в том направлении куда пошёл ГГ будет сетка перехода, то будет переход.

Мне всяко не на чем проверять, я сделал — сам проверяй :-p
Fakeman
Проверю, но я все равно непонял..
CODE
Гекс Х — это номер гекса где расположена сетка на карте пункта 1, зачем с него уходить гг на загруженной карте?, должен же быть перелет с гекса X на гекс Z записанный в секте карты из п1.


UPD: Проверил все нормально. Но вот это >> "и ГГ может уйти с гекса Х" осталось для меня загадкой)
Crafty
QUOTE (Fakeman)
ГГ может уйти с гекса Х" осталось для меня загадкой)
Та забил баки этим гексом Х :-p
Fakeman
Вопрос по IDA
Вот к примеру я ставлю два брекпоинта и в режиме отладки запускаю...
Происходит остановка на первом брекпоинте, далее я нажимаю Run(F9) или прохожусь по коду F8, чтобы посмотреть алгоритм, до второго брекпоинта.
В общем в ida есть возможность посмотреть список какие вызовы(call) были сделаны между двумя брекпоинтами/текущим положением?
ибо запоминать ветвление в голове проходом по F7/F8 это просто не реально.
Есть какой-то call стек но он всегда пустой не непонятно зачем нужен)
Crafty
QUOTE (Fakeman)
Вопрос по IDA
Есть Tracing, но я не пользуюсь, потому подробнее не скажу. Загляни в хелп идовский.
Fakeman
Нашел окно Functions Call показывает вызовы которые были сделаны, и похоже в порядке их вызова.
А не это тоже фигня, просто список Call'сов имеющихся в текущей функции.
Ладно посмотрю Тrасе но там что-то сложно все.
Wozrogdenec
Я вижу, что есть некоторая проблематика по сейвам — оформил к вам вопросы-предложения в отдельную тему Модерское сейвоведение
Fakeman
Crafty, как узнать, что в данный момент ход в бою передан игроку?.
В 4.0 есть hook позволяющий это узнать, или из скрипта duda,
а нужно это узнать без этого, напрямую.

Кстати перенеси новые Hook'и из 4 версии в свой.
И не помешало бы добавить новые скриптовые функции из 4 версии.
Crafty
QUOTE (Fakeman)
как узнать, что в данный момент ход в бою передан игроку?.
CODE
if call_offset_r0(0x4217D4) == dude_obj then // combat_whose_turn, возвращает 0 если не в бою

QUOTE (Fakeman)
Кстати перенеси новые Hook'и из 4 версии в свой.
И не помешало бы добавить новые скриптовые функции из 4 версии.
Не время сейчас, а там как карты лягут ;)
Fakeman
QUOTE
Не время сейчас, а там как карты лягут ;)

Это что перво апрельская шутка?))
Foxx
Fakeman
Да там просто много работы, а у Crafty своих дел хватает (весна — рассада, огород и т.д.) :)))
Fakeman
CODE
skill_contest

Эта фигня работает?) если да то для чего она.

И почему how_much во втором фоле не работает, выключили за ненадобностью?
Crafty
QUOTE (Fakeman)
CODE
skill_contest
Эта фигня работает?) если да то для чего она.
"unimplemented", что касается остального, то "меньше знаешь — крепче спишь" :-p

QUOTE (Fakeman)
И почему how_much во втором фоле не работает, выключили за ненадобностью?
Всё работает :-p
Вот так выглядит do_check:
CODE
procedure do_check(variable who, variable check, variable modifier)
begin
 variable roll;
 if check >= STAT_st and check <= STAT_lu then begin
  modifier := modifier + get_critter_stat(who, check);
  roll := random(1, 10);
  Script.how_much := modifier - roll;
  if roll <= modifier then return ROLL_SUCCESS; else return ROLL_FAILURE;
 end
 return 0; // что действительно является ROLL_CRITICAL_FAILURE
end

Использование result := how_much(пофик_что_но_int) вернёт ту разницу.
Для roll_vs_skill использование how_much тоже вернёт разницу:
CODE
modifier := modifier + has_skill(who, skill);
if who == dude_obj and skill == SKILL_STEAL and sneak_success then modifier := modifier + 30;
roll := random(1, 100);
Script.how_much := modifier - roll;
Fakeman
Минут 10 пытался понять смысл и как использовать how_much нифига не понял.
Напиши своими словами а не псевдо кодом из движка.
....
В общем я так понял раз ей на аргумент пофиг то предполагаю, что её надо использовать сразу после do_check/roll_skill для оценки разницы между значением броска кубика и проверяемого стата/скилла, все верно?
Crafty
QUOTE (Fakeman)
В общем я так понял раз ей на аргумент пофиг то предполагаю, что её надо использовать после do_check/roll_skill и возвращает она разницу, разницу чего?
Да, после.
Вот у тебя 5 харизмы, а random(1,10) выбросил 1 — вернётся 4, а если выбросил 9, то вернётся -4.
QUOTE (Fakeman)
Минут 10 пытался понять смысл и как использовать how_much нифига не понял.
Напиши своими словами а не псевдо кодом из движка.
Ну я вот тоже хз какое у неё практическое применение, хотя в связке с roll_vs_skill вроде был какой-то смысл, но я не помню уже какой.
Fakeman
Понятненько, в принцепи применение ей можно найти — специфическое :-)
Fakeman
Действительно do_check не возвращает критические состояния...
Меня жестко обманули, я разочарован, я ухожу)

Отправлено: 7 апр 18 05:08
QUOTE
Поэтому последующие проверки на is_critical всегда неудачны. Их нужно заменить или на проверку результата с помощью how_much

Эээм, а каким таким местом how_much сможет вернуть вам критическую (не)удачу?
Crafty
QUOTE (Fakeman)
Действительно do_check не возвращает критические состояния...
Меня жестко обманули, я разочарован, я ухожу)
Прикол в том, что она активно используется в скриптах совместно с is_critical (двери/ловушки) и этот код никогда не выполнится.

QUOTE (Fakeman)
Эээм, а каким таким местом how_much сможет вернуть вам критическую (не)удачу?
Никаким, но если разница очень велика, то можно считать это критической [не]удачей. Понятное дело что при "крайних" значениях стата нужно что-то придумывать дополнительно. Потому и хз где её практически использовать.
Fakeman
Кстати how_much какая-то багованная, ломает последнюю объявленную переменную в процедуре, так что эта переменна похоже содержит неизвестное значение))
как бы еще чего серьезного она не натворила.

CODE
procedure roll_vs_stat(variable who, variable check_stat, variable modifier) begin

variable result     := do_check(who, check_stat, modifier),
          roll      := how_much, // отрицательные значения для неудачного результата броска кубика.
          stat      := get_critter_stat(who, check_stat),
          crit_type := (stat + modifier) - roll, // 1 - критическая удача, 10 - критическая неудача
          r_min     := 0,
          r_max     := 11,
          temp;

display_msg("look temp: " + temp);

в display_msg в лог выведется два раза фраза вот так "look temp: look temp: "
Crafty
QUOTE (Fakeman)
Кстати how_much какая-то багованная, ломает последнюю объявленную переменную в процедуре
Сам ломаешь ;) У how_much есть аргумент "пофик_что_но_int".
Ваш ответ: