Полная Версия: (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
Crafty
QUOTE
Обновление для цели не корректно работает — нужно поводить мышкой по слоту чтобы нарисовались итемы, аля такой фотошоп получается) в чем проблема?
Приведённый мною вариант абсолютно правильно работает :-p
Покажи свой вариант или сделай простенький скрипт для примера.

QUOTE
а тут это у тебя уже по другому адресу записывается в чем разница?
Расчитывается с учётом вложенных сумок/рюкзаков, то есть если в главном рюкзаке у тебя лежит мешок с вещами и ты его откроешь, прокрутишь инвентарь вниз и нажмёшь F11, то будет вариант нажатия home в мешке.

QUOTE
Не стал проверять на оригинальной длл сфала — это там тоже будет корректно работать?
Именно это будет, остальные call_offset_v# (где # > 0) — нет (сейчас).

QUOTE
Слушай, я наверное тебя уже достал) но давай тогда еще найдем функцию которая обновляет параметры на главной панели игрока такие как AP/AC/HP
call_offset_v0(0x45EB98); /* intface_redraw_ */

QUOTE
А можно доработать еще скриптовую функцию critter_inven_obj чтобы она получала указатель так-же и на предмет который находится в неактивном слоте руки. а то это вроде как баг, но с другой стороны и не баг, поэтому желательно наверное через ini опцию это фиксить, если не трудно будет. :)
Чего-чего доработать?
QUOTE
ObjectPtr (int) critter_inven_obj(ObjectPtr who, int where) — возвращает указатель на объект в слоте инветнтаря или общее число объектов в инвентаре
Аргументы:
who — указатель на криттера
where — номер слота:
INVEN_TYPE_WORN (0) — слот брони
INVEN_TYPE_RIGHT_HAND (1) — слот правой руки
INVEN_TYPE_LEFT_HAND (2) — слот левой руки
INVEN_TYPE_INV_COUNT (-2) — общее число предметов
Возвращаемое значение:
указатель на объект (ObjectPtr), если объект есть в слоте, иначе — NULL.

QUOTE
Еще есть такой баг в двиге — если клацнуть по пустому месту в слоте для предметов интерфейса USE — то игра крашится.
Ага, прикольно — исправил ;)
Fakeman
QUOTE
Приведённый мною вариант абсолютно правильно работает :-p
Покажи свой вариант или сделай простенький скрипт для примера.

а что может быть проще — после того как с контейнером(инвентарь открыт) провел какие либо махинации с его предметами добавил или удалил, в коде скрипта идет код обновления.
вот добавь этот кусок кода к хуку который сделал ты — по F9 перемещает инвентарь игрока в контейнер (аля твоя клавиша положить все)
CODE

variable m, objtype, object_array;

 if ((event == 1) and (keyDX == 67)) then begin
     object_array:=create_array(-1, 0);
     object_array:=tile_get_objs(tile_num_in_direction(dude_tile, dude_cur_rot, 1), dude_elevation);
     m:=0;
     //находим в массиве первый найденный контейнер
     while objtype!=1 and object_array[m] > 0 do begin
       objtype:=obj_item_subtype(object_array[m]);
       m+=1;
     end                                              // тут указатель на контейнер
     if objtype==1 then move_obj_inven_to_obj(dude_obj, object_array[m-1]);
 end

подходишь к любому контейнеру юзаешь его, там нажимаешь F9 и F11 и нифига, нужно мышкой поводить) а для игрока все работает.

Отправлено: 6 мар 16 21:07
А тьфу я понял, почему не работает! потому-что код для цели работает только в связке с кодом для игрока.
т.е. в таком варианте кода, корректно оно не будет обновляться.
CODE
     write_int(target_inventory_offset, 0);
     call_offset_v4(display_target_inventory_, 0, -1, _target_pud, 2);
     //write_int(inventory_offset, 0);
     //call_offset_v3(display_inventory_, 0, -1, 2);

это можно изменить или юзать в связке?

Отправлено: 6 мар 16 21:25
QUOTE
Чего-чего доработать?QUOTE
ObjectPtr (int) critter_inven_obj(ObjectPtr who, int where) — возвращает указатель на объект в слоте инветнтаря или общее число объектов в инвентаре

Ну к примеру когда в неактивном слоте руки(пусть это будет слот левой руки) держишь какой либо предмет то critter_inven_obj не получает указатель на этот предмет.
или critter_inven_obj(dude_obj, INVEN_TYPE_LEFT_HAND) — возвращает NULL хотя предмет там лежит, но оно его не видит пока не поменяешь активный слот руки клавишей 'B' — как-то так.

Отправлено: 6 мар 16 21:36
QUOTE
call_offset_v0(0x45EB98); /* intface_redraw_ */

Замечательно работает!
Не проверял, а AP в режиме боя тоже перерисовывает или нет?
Crafty
Хватит мучать меня скриптами, я даже синтаксис языка не знаю ;-p
QUOTE
вот добавь этот кусок кода к хуку который сделал ты — по F9 перемещает инвентарь игрока в контейнер (аля твоя клавиша положить все)
Скрипт не сработал, да не важно, код процедур поглядел. В display_inventory_ есть вызов функции отрисовки окна, а в display_target_inventory_ почему-то нет. Поэтому для цели после вызова call_offset_v4(display_target_inventory_...
добавляй call_offset_v1(0x4D6F5C, read_int(0x59E964));/* win_draw_ */ (поправлю сейчас пример).

QUOTE
Ну к примеру когда в неактивном слоте руки(пусть это будет слот левой руки) держишь какой либо предмет то critter_inven_obj не получает указатель на этот предмет.
или critter_inven_obj(dude_obj, INVEN_TYPE_LEFT_HAND) — возвращает NULL хотя предмет там лежит, но оно его не видит пока не поменяешь активный слот руки клавишей 'B' — как-то так.
Для неигрока активная рука — правая, для игрока сначала нужно узнать активную с помощью active_hand(). Вот это чудно работает с critter_inven_obj:
CODE
variable hand;
if active_hand == 0 then hand := INVEN_TYPE_LEFT_HAND;
else if active_hand == 1 then hand := INVEN_TYPE_RIGHT_HAND;
display_msg("hand=" + critter_inven_obj(dude_obj, hand));

lol, действительно не видит, сейчас поправлю. Done ;)

QUOTE
Не проверял, а AP в режиме боя тоже перерисовывает или нет?
Нет.
Fakeman
QUOTE
Хватит мучать меня скриптами,

Тогда давай перейдем к водным процедурам)

А чего у тебя подсветка предметов/контейнеров разными цветами сделана серый/желтый/розовый нафига такой дикий раскрас?)
вместо розового бы зеленый сделал — а то розовый это как-то не из мира фоллаута))
Fakeman
QUOTE
действительно не видит, сейчас поправлю. Done

Это нужно через ини опцию фиксить, потому как функция в игре определяет держит ли игрок в активной руке оружие — понимаешь смысл?!
Т.е. к примеру в неваде охраники будут кричать гг 'убери оружие' хотя он его не держит в активной руке, и придется убирать его из слота вообще. — невада то писалась не под сфалл где без Active_Hand() нет возможности определить активную руку.

Отправлено: 7 мар 16 16:53
QUOTE
добавляй call_offset_v1(0x4D6F5C, read_int(0x59E964));/* win_draw_ */

а без аргументов есть такая же функция? чтобы можно было вызывать из оригинального сфала — call_offset_v0
ибо как оказалось к функции display_stats_ тоже нужно применять процедуру win_draw_
Crafty
QUOTE
чего у тебя подсветка предметов/контейнеров разными цветами сделана серый/желтый/розовый нафига такой дикий раскрас?)
вместо розового бы зеленый сделал — а то розовый это как-то не из мира фоллаута))
Ну какие цвета свободные были, те в ход и пошли. Выбор там всяко скудный.
QUOTE
Это нужно через ини опцию фиксить, потому как функция в игре определяет держит ли игрок в активной руке оружие — понимаешь смысл?!
Т.е. к примеру в неваде охраники будут кричать гг 'убери оружие' хотя он его не держит в активной руке, и придется убирать его из слота вообще. — невада то писалась не под сфалл где без Active_Hand() нет возможности определить активную руку.
Весьма топорный способ функции в движке для получения предмета в активной руке игрока, когда исправлял так почекал скрипты оригинального F2 и увидел только использование с зеркальными очками, причём это опция для дополнительной ветки разговора доступная с очками в активной руке.
Через ини делать не буду — ненужная суета с выбором названия переменной и описания :-p Прокомментировать переменную как "включённая требует убирания оружия из обеих рук, в противном случае только оружия в активной руке" и никто её включать не будет. Потому отключу.
QUOTE
а без аргументов есть такая же функция? чтобы можно было вызывать из оригинального сфала — call_offset_v0
Не, нема. Дак напиши на гитхабе чтобы в следующей версии исправили чтение аргументов для v# функций.
Не знаю, кстати, чего ты так с небезопасными функциями возишься — требуют отладочного режима и AllowUnsafeScripting=1, что может вызвать проблемы у конечного пользователя, Лучше на том же гитхабе понапрягай на предмет добавления новых опкодов для этих дел.
Fakeman
QUOTE
когда исправлял так почекал скрипты оригинального F2 и увидел только использование с зеркальными очками.

Плохо чекал там еще макросы на это дело надо чекать. Есть Стивен и охранники в брокенхилз которые говорят чтобы игрок спрятал свое оружие — иначе говорить отказываются.
С одной стороны это правильно, что надо убирать стволы из слотов рук, с другой стороны это лишние телодвижения для игрока.
Я попросил это доработать для того чтобы можно было использовать эту функц. к примеру для реализации скриптового предмета на подобии зеркальных очков которые на двиг завязаны.
В идеале конечно для этого нужно бы новый опкод делать — но кто это будет делать?! — наши зарубежные "друзья" настолько ленивые, что и писать там нет желания — ну или ответят в стиле в этом нет смысла. (с) Phobos :)
вот что написал NovaRain на NMA
QUOTE
Personally I don't plan to add more features from his build. I focus more on bug fixes than 'convenient features'.


зайди почитай, там последние сообщение от меня, я еще полгода назад просил добавить поддержку для LOOT/USE интерфейса.

Отправлено: 7 мар 16 20:03
QUOTE
Не знаю, кстати, чего ты так с небезопасными функциями возишься Лучше на том же гитхабе понапрягай на предмет добавления новых опкодов для этих дел.

А чем отличается вызов по этим адресам, от введения нового опкода который как я понимаю будет ссылаться на этот адрес?

ps научи меня ковыряться в движке)
Crafty
QUOTE
Плохо чекал там еще макросы на это дело надо чекать. Есть Стивен и охранники в брокенхилз которые говорят чтобы игрок спрятал свое оружие — иначе говорить отказываются.
Макросы тоже и с оружием понятно, меня интересовало есть ли в скриптах именно проверка наличия не_оружия в активной руке, чтобы после "исправления" это не оказалось сломанным. Обнаружились только очки — если в активной руке, то в диалоге с левым мужиком добавлялся несущественный вопрос. Это можно игнорировать (я даже посчитал это исправлением), ну с оружием игроку конечно пришлось бы возиться, убирая из правой и левой руки при всяких critter_is_armed.
А оригинальную доработать нельзя — она в движке. Только через новый опкод.
Для аналога зеркальных очков просто такой же pid присваивай своему предмету, получишь +1 удачу, ну как амулет дикарей в Неваде сделан.

QUOTE
А чем отличается вызов по этим адресам, от введения нового опкода который как я понимаю будет ссылаться на этот адрес?
Именно что ничем ;) От AllowUnsafeScripting нужно отказаться, перевести небезопасные функции в обычные, чтобы была возможность эмулировать нужный функционал при отсутствии аналога в виде опкода.

QUOTE
ps научи меня ковыряться в движке)
Доступна же IDB-база с оригинальными названиями функций и переменных.
Fakeman
QUOTE
Для аналога зеркальных очков просто такой же pid присваивай своему предмету, получишь +1 удачу, ну как амулет дикарей в Неваде сделан.

В неваде амулет вместо очков, и поменяли в двиге с харизмы на удачу.
А я говорю о добавлении к очкам еще какого-либо предмета аналогично очкам который может давать к примеру +1 к восприятию.
И что значит "просто такой же pid присваивай своему предмету получишь +1 удачу" не совсем понял это, типа два предмета с одним и тем-же пидом? — это что-то новенькое)
Crafty
QUOTE
В неваде амулет вместо очков, и поменяли в двиге с харизмы на удачу.
А я говорю о добавлении к очкам еще какого-либо предмета аналогично очкам который может давать к примеру +1 к восприятию.
И что значит "просто такой же pid присваивай своему предмету получишь +1 удачу" не совсем понял это, типа два предмета с одним и тем-же пидом? — это что-то новенькое)
Да, запамятовал уже какой там стат в оригинале. У очков и амулета одинаковый пид, поэтому амулет движково обрабатывается. Хочешь себе перстень с нужным статом — меняй название/описание очков, правь чутка байт в движке для нужного стата и выйдет "такой же pid присваивай своему предмету". А для нового предмета через скрипт конечно, те же хуки.
А чем бы critter_inven_obj помог в этом случае?

Мне вот что интересно — использует кто-то sfall'овские функции, а в скрипте делают проверку что sfall, да ещё и нужной версии установлен? Чекнул sfall_ver_* — сломаны.
Fakeman
QUOTE
А для нового предмета через скрипт конечно, те же хуки.
А чем бы critter_inven_obj помог в этом случае?

Мне вот что интересно — использует кто-то sfall'овские функции, а в скрипте делают проверку что sfall, да ещё и нужной версии установлен? Чекнул sfall_ver_* — сломаны.

Не нашел подходящего хука для этого дела, только если hs_inventorymove (не тестировал его в деле конечно) но я так понял в теории оно не сработает если скриптом убрать предметы из рук игрока, т.е. если там будет лежать наш предмет то вероятно стата так и останется в +1 (до очередного срабатывания хука).
а critter_inven_obj сейчас вполне выполняет эту поставленную задачу.

Я как то хотел делать проверку на версию сфала, но потом плюнул — посчитал это лишним. думаю навряд ли ее кто-то юзает иначе бы ее починили)
Кстати вот хотел тебе предложить чтобы с помощью этой команды твоя версия возвращала какой-нибудь опознавательный знак, что используется длл не оригинальна — ну мало ли вдруг в коде скрипта придется обходить какой-либо код завязанный на не оригинал.
Phobos
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока?

С уважением, "ленивый зарубежный друг" :)

@Fakeman:
QUOTE
Я попросил это доработать для того чтобы можно было использовать эту функц. к примеру для реализации скриптового предмета на подобии зеркальных очков которые на двиг завязаны.
В идеале конечно для этого нужно бы новый опкод делать — но кто это будет делать?!


Можешь напомнить о чем речь?
Fakeman
QUOTE
С уважением, "ленивый зарубежный друг" :)

о я накастовал нашего "зарубежного" друга).
©Phobos — теперь будем знать это магическое слово))

QUOTE
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока?

Гуру скриптов, подскажи как получить указатель на предмет который лежит в неактивном слоте(руки) у игрока — может я не знаю секрета, да голову тут всем забиваю.
знаю, что через хук hs_inventorymove можно получить указатель, НО только тогда когда игрок его кладет в слот.
А в определении неактивного слота проблем нет, спасибо за Active_Hand()

QUOTE
Я попросил это доработать

QUOTE
Можешь напомнить о чем речь?

Эмм, я вроде тебя не о чем не просил, по крайней здесь и в этом году)

to Crafty
QUOTE
А оригинальную доработать нельзя — она в движке. Только через новый опкод.

Так я чего-то не понял, ты же ее(critter_inven_obj) уже доработал.
(dll от 6-го марта).
Crafty
Fakeman
QUOTE
но я так понял в теории оно не сработает если скриптом убрать предметы из рук игрока
hs_removeinvenobj ещё к hs_inventorymove, но видимо нужно просто свои обработчики через register_hook_proc вешать.

QUOTE
Так я чего-то не понял, ты же ее(critter_inven_obj) уже доработал
А на следующий день закомментировал в коде это "изменение":
QUOTE
Потому отключу.
Потому как изменение удобно для скриптописателя, но для простого игрока потребует убирания оружия из рук, а если добавить переменную в ini, то игрок её включать не будет из-за лени.
В общем нужно или оставить изменение или добавить новый опкод (конечно если аналога нет).

Phobos
QUOTE
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока?
critter_inven_obj для не_игрока вернёт указатель на предмет (если он конечно есть в руке) лежащий в любой опрашиваемой руке, но для игрока указатель вернётся только если опрашиваемая рука является активной, в противном случае вернёт NULL (даже если в опрашиваемой неактивной руке есть предмет).
Fakeman
QUOTE
Потому как изменение удобно для скриптописателя, но для простого игрока потребует убирания оружия из рук, а если добавить переменную в ini, то игрок её включать не будет из-за лени.
В общем нужно или оставить изменение или добавить новый опкод (конечно если аналога нет).

так я к тому и клоню, что обычным юзерам ее включать и не стоит — это для скриптеров такое баловство позволено)

А аналога нету(или я по крайней мере не в курсах как можно это реализовать) можно конечно было бы на хуке hs_inventorymove сделать, но он не сработает если применить скриптово unwield к ГГ — и даже совместно с новым хуком hs_invenwield ситуации не поможет — ибо у ГГ он не возвращает указатель на объект который был снят со слота. arg2 всегда равен НУЛЮ.
CODE
Obj arg2 - item being wielded or unwielded (weapon/armor), may be 0 when unwielding


Или что бы мне тебе мозги этим не пудрить покажи мне, что необходимо будет раскоментить в коде — я сделаю свой сфал под свои нужды)

QUOTE
hs_removeinvenobj

это не то. из описания следует что хук срабатывает при удалении/перемещении предмета из инвентаря объектов — слоты там не приделах.
Crafty
QUOTE
ибо у ГГ он не возвращает указатель на объект который был снят со слота. arg2 всегда равен НУЛЮ.
А это ты хорошо заметил, я поправил чтобы всегда возвращался указатель на снимаемый предмет, конечно если он там есть.
QUOTE
Или что бы мне тебе мозги этим не пудрить покажи мне, что необходимо будет раскоментить в коде — я сделаю свой сфал под свои нужды)
Bugs.cpp, в конце файла. Но я включил это изменение в отладочной версии dll.
QUOTE
это не то. из описания следует что хук срабатывает при удалении/перемещении предмета из инвентаря объектов — слоты там не приделах.
То-то, попробуй :-p (тебя должен заинтересовать 4 аргумент описанный как RMOBJ_DROP в sfall.h, не хочу убивать кучу времени на попытку написания скриптового примера).
Это для игрока предметы в слотах выглядят как отдельные, а фактически они лежат в инвентаре, только у них стоят флажки принадлежности слоту (броня, правая/левая рука) по которым движок определяет что рисовать в слотах.
Fakeman
Да не я то тестил hs_removeinvenobj не срабатывает он когда делаешь скриптово unwield ГГ и вообще странно он работает в интерфейсе игрока.
когда помещаешь в слот предмет — срабатывает, убираешь уже не срабатывает
при открывании интерфейса если в слотах есть предметы тоже срабатывает.
не для этих целей он придуман)
раз ты пофиксил новый хук — тогда уже и проблема думаю решена.

QUOTE
Но я включил это изменение в отладочной версии dll.

кстати зачем ты создаешь две версии длл?
kotmatposkin
Добрый вечер всем! Подскажите пожалуйста, столкнулся с ошибкой после замены sfall на новую версию — ERROR saving extented savegame information! Check if other programs interfere with savegame files\folders and try again!
Выскакивает во время сохранения в Глобал Моде, но при этом сохранение создается. До этого стояла версия 1.5 такого не было, настройки изменил под старый sfall. Мультисэйвы активированы и были активированы до этого. Запускал с админ правами тоже самое. Виндоус 7.
Заранее спасибо!!!
Crafty
Fakeman
QUOTE
кстати зачем ты создаешь две версии длл?
Я это не делал:
QUOTE
>Merged sfall debugging features into the normal version, thus removing the need of a seperate debugging version for modders

kotmatposkin
QUOTE
Выскакивает во время сохранения в Глобал Моде, но при этом сохранение создается. До этого стояла версия 1.5 такого не было, настройки изменил под старый sfall.
Не может sfallgv.sav создать, а если откат на старую версию сделать?
kotmatposkin
Поставил старую версию 1.5 всё норм, в этой сборке так же есть: правленные карты и hi-res 4.1.8 и Crafty's sFall mod 1.5 и Sfall configurator tool 1.01. На новой версии ошибка, есть идеи в какую сторону копать?))
И как проверить может это глюк просто? Поскольку сэйв то создаётся и загружается.

P.s. Проверил, действительно на новой версии не создаётся sfallgv.sav.
Crafty
QUOTE
На новой версии ошибка, есть идеи в какую сторону копать?))
То есть если отсюда скачать архив, заменить ddraw.dll в каталоге игры на dll из архива, то перестаёт sfallgv.sav создавать?

QUOTE
P.s. Проверил, действительно на новой версии не создаётся sfallgv.sav.
А sfallfs.sav создаётся?
Fakeman
Здрасьте!
В HRP есть очень полезная опция позволяет прокручивать инвентарь цели колесиком мыши предварительно наведя мышь на слот инвентаря цели но при этом не используя зажим клавиши контрл — но вот беда при ее активировании что-то ломается в сфале и перестает работать обработчик хука MouseСlick можно это как-то пофиксить или сделать что-то подобное в самом сфале?
CODE
Set ALT_MOUSE_INPUT=0 to allow Sfalls mouse input functions to work.
; Set ALT_MOUSE_INPUT=1 to enable alternate mouse input control built into the hi-res patch.
ALT_MOUSE_INPUT=0
; Set SCROLLWHEEL_FOCUS_PRIMARY_MENU=1 for inventory, barter, loot screens etc. to make mouse wheel control default to the PC's item list unless the cursor is hovering over another list.
SCROLLWHEEL_FOCUS_PRIMARY_MENU=1
Pyran
sFall2 v1.5
Megamod 2.44.2 (пока только здесь, о других отпишусь позже) — при использовании dll от Crafty, машину невозможно заправить. Меняю на обычный 3.6 все работает.
Fakeman
QUOTE
Меняю на обычный 3.6 все работает.

А в 3.7 или со старым 1.4?
CODE
>Added a fix for the original engine issues with being able to charge the car with using cells on scenary/critters and cells getting consumed even when the car is already fully charged.
Crafty
QUOTE
Megamod 2.44.2 (пока только здесь, о других отпишусь позже) — при использовании dll от Crafty, машину невозможно заправить. Меняю на обычный 3.6 все работает.
Pid'ы машины(33555441) и багажника(455) там что ли поменяли? (фикс заключается в проверке конкретных пидов).
Fakeman
скорей всего поменяли, так как в 3.7 тоже не робит.
kotmatposkin
Собственно да, перестает создаваться sfallgv.sav на новых версиях (последнюю перекачал попробовал, тоже самое, та же ошибка), на старой 1.5 такого нет и всё нормально создается и ошибки нет.
Fakeman
QUOTE
Собственно да, перестает создаваться sfallgv.sav на новых версиях

Может проблема в том что ты сохранился на старой, а теперь на новой имеешь проблемы?
У меня нет никаких проблем с новым 1.5.6
Nordan
ЕМНИП, в сфалле есть 2 вида сохранения глобальных переменных — старый и новый. По умолчанию в новых версиях стоит новый вид сохранения, но в ИНИ файле есть возможность использовать старый метод сохранения, может это поможет.
kotmatposkin
При сохранении новой игры на новом сфалле, то же самое, ошибка. А не могли бы подсказать где сия строка в ини файле (использовать старый формат сохранения)? arraysBehavior — вот это? Менял толку нет, вообще интересно почему такая проблема. С чем может конфликтовать в теории сфалл?
И ещё вопрос, что может быть соббсно без файла sfallgv.sav?
Заранее, еще раз Всем Спасибо!
Pyran
И так, попробовал новый sFall 1.5.6
Все вроде работает и с настройками из 1.5 и с дефолтными настройками 1.5.6
но при сохранении (быстром) выдает такое сообщение
фото
но спокойно сохраняется/загружается.

p.s.
кажется все дело в конфиге (ini), заменил только dll оставив нетронутый конфиг, такого срама не вылезает.
Nordan
QUOTE
И ещё вопрос, что может быть соббсно без файла sfallgv.sav?


Судя по названию, там хранятся данные о глобальных переменных сфалла, которые используются в скриптах. И это критически важно, поскольку, если он не может их сохранить, то и в скриптах при вызове той или иной сфаллической глобальной переменной она будет возвращать только 0.

Я предполагаю, сия ситуация произошла потому что в ранних версиях сфалла синтаксис функций по работе с глобальными переменными и массивами возможно был другим, и поэтому происходит что то вроде рассинхронизации, но это только моя теория.
Fakeman
QUOTE
// Исправление "заправки" не_автомобиля и использования топливных элементов даже когда бак полный
MakeCall(0x49C36D, &protinst_default_use_item_hook, true);
MakeCall(0x49BE70, &obj_use_power_on_car_hook, false);

Можешь для этого сделать вкл/выкл фикса бага в ini?
в мегамоде поменяли пиды на машину.
я же думаю там это не сложно поставить строчку, да? :)
if (GetPrivateProfileIntA("Misc", "CarChargeFix", 0, ini)) { }


Отправлено: 12 мар 16 15:02
И еще если можешь разъясни что за расширение, и что за изменение ты внес
CODE
//Ray's combat_p_proc fix - в действительности это не фикс, а расширение функционала combat_p_proc
//Однако, чтобы получить профит от этого нужно править скрипты
SafeWrite8(0x424DC7, 0x00);
MakeCall(0x424DD9, &apply_damage_hook, false);
// SafeWrite8(0x424EA1, 0x00);
// MakeCall(0x424EB3, &apply_damage_hook, false);


Отправлено: 12 мар 16 16:05
И еще не большое замечание — если на предмете стоит флаг NoHighlight то он подсвечивается как контейнер серым.
Crafty
Fakeman
QUOTE
В HRP есть очень полезная опция позволяет прокручивать инвентарь цели колесиком мыши предварительно наведя мышь на слот инвентаря цели но при этом не используя зажим клавиши контрл — но вот беда при ее активировании что-то ломается в сфале и перестает работать обработчик хука MouseСlick можно это как-то пофиксить или сделать что-то подобное в самом сфале?
Потом попробую дурным способом сделать.
sfall'овский CarChargingFix добавил.

Nordan
QUOTE
ЕМНИП, в сфалле есть 2 вида сохранения глобальных переменных — старый и новый. По умолчанию в новых версиях стоит новый вид сохранения, но в ИНИ файле есть возможность использовать старый метод сохранения, может это поможет
Это всё не то, сообщение о ошибке выводится только если не получается [пере]создать sfallgv.sav (другой процесс "держит" его):
CODE
HANDLE h = CreateFileA(buf, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (h != INVALID_HANDLE_VALUE) {
 пишем всякую сфалловскую информацию в файл
} else {
 cсообщаем о ошибке "ERROR saving extended savegame information... бла-бла-бла"
}

Pyran
QUOTE
Все вроде работает и с настройками из 1.5 и с дефолтными настройками 1.5.6
Отличие в коде между 1.5 и 1.5.6 по части записи сфалловской информации в файл визуально-косметические, ну вроде замены "HANDLE h=CreateFileA..." на "HANDLE h = CreateFileA...". И с ини-файлом такая же история.

Сообщение о ошибке выводится при первой записи игры сразу после загрузки/начале новой игры или же можно загрузить/начать новую игру, один раз нормально записать, а второй и следующие уже пишут про ошибку?

Так или иначе, я добавил в отладочную версию пару информационных строк. В каталоге игры будет создаваться файл sfall-log.txt, из него интерес представляют несколько строчек: "Saving game: D:\Games\Fallout2\data\savegame\slot06\sfallgv.sav" (вид конечно зависит от путей и номера слота) и, если запись невозможна и в информационном окне игры выводится сообщение о ошибке, то добавится ещё две: "ERROR creating sfallgv!" и "sfallgv.sav: номер_ошибки". Вот хочется взглянуть на пути и номер_ошибки.
Fakeman
Еще какие-то проблемы всплыли в версии 1.5.6 при сохранении в бою
и последующей загрузки начинается дикая вакханалия в бою т.е. все нпс начинают мутузить какую-либо рандомную выбранную цель из НПС на карте, при этом на игрока не обращают внимания, типа они думают что это игрок))
После того как они добьют свою выбранную жерту они не реагируют на игрока, тут же в бою делам новое сохранение и загружаемся, все сразу агрятся на игрока, делаем очередное сохранение, загружаемся — НПС не реагируют стоят как вкопанные.
(некоторые НПС (тоже рандомно) все-же не перестают нападать на игрока)

Тут же я меняю сфалл на старый 1.4 (или 3.6 / 3.7) загружаю данный бой все нормально.
даже со старым 1.5 от 27 февраля 2016 г. 1:18:35
такая же беда после сохранения в бою.

Реально ты там что-то серьёзно все поломал! и по ощущениям что-то при загрузке в бою. :)

(на всяк случай в ini установлено SaveInCombatFix=1)

Отправлено: 12 мар 16 18:36
CODE
HANDLE h = CreateFileA(buf, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (h != INVALID_HANDLE_VALUE) {
 пишем всякую сфалловскую информацию в файл
} else {
 cсообщаем о ошибке "ERROR saving extended savegame information... бла-бла-бла"
}

Я эту бяку у тебя нашел здесь...
CODE
void LoadGameHookInit() {
GetPrivateProfileString("sfall", "SaveInCombat", "Cannot save at this time", SaveFailMsg, 128, translationIni);
SaveInCombatFix = GetPrivateProfileInt("Misc", "SaveInCombatFix", 1, ini);
if (SaveInCombatFix < 0 || SaveInCombatFix > 2) SaveInCombatFix = 0;

GetPrivateProfileString("sfall", "SaveSfallDataFail", "ERROR saving extended savegame information! Check if other programs interfere with savegame files/folders and try again!", SaveSfallDataFailMsg, 128, translationIni);


поэтому решил по тестить бой, может чего с ним связанно — и как обнаружилось читай выше)
Crafty
QUOTE
И еще не большое замечание — если на предмете стоит флаг NoHighlight то он подсвечивается как контейнер серым.
Так и задумано, у всех контейнеров этот флаг стоит.

QUOTE
еще если можешь разъясни что за расширение, и что за изменение ты внес
QUOTE
//Ray's combat_p_proc fix — в действительности это не фикс, а расширение функционала combat_p_proc
//Однако, чтобы получить профит от этого нужно править скрипты
В скриптовом define.h определены COMBAT_SUBTYPE_*, но движком все не используются. Ray здесь предложил исправление, чтобы движок помимо COMBAT_SUBTYPE_HIT_SUCCEEDED ещё обрабатывал COMBAT_SUBTYPE_WEAPON_USED. Это нужно, к примеру, для мода в котором учитывается износ оружия при каждом его использовании. Удачные попадания обрабатываются с помощью COMBAT_SUBTYPE_HIT_SUCCEEDED, а вот промахи — нет. Дополнительная обработка COMBAT_SUBTYPE_WEAPON_USED и должна решить эту проблему. Но нужна правка скриптов, что-то вроде:
CODE

procedure combat_p_proc begin
if (fixed_param == COMBAT_SUBTYPE_HIT_SUCCEEDED) then
 begin
  count_weapon_used = count_weapon_used + 1;
 end
else if (fixed_param == COMBAT_SUBTYPE_WEAPON_USED) then
 begin
  count_weapon_used = count_weapon_used + 1;
 end
end

Я же просто переписал его вариант (сравни Combat_p_procFix в оригинальном sfall с apply_damage_hook в моём main.cpp).

QUOTE
Реально ты там что-то серьёзно все поломал! :)
Пичалька конечно. Это фикс рудиментарного бага "с форсированным (подбросить взрывчатку и покинуть карту до взрыва) использованием взрывчатки если взрыв задевает кого-либо рядом, возвратом на карту и снова выходом с карты.". Пока отключил, проверяй. Потом перепишу.
Fakeman
QUOTE
Это всё не то, сообщение о ошибке выводится только если не получается [пере]создать sfallgv.sav (другой процесс "держит" его):

Путь проверят атрибут только чтение на папке.

QUOTE
Так и задумано, у всех контейнеров этот флаг стоит.

меня это как бы не напрягает. но а что нельзя проверять по item_subtype ? (есть же под тип контейнеров)

Отправлено: 12 мар 16 20:09
QUOTE
Я же просто переписал его вариант (сравни Combat_p_procFix в оригинальном sfall с apply_damage_hook в моём main.cpp).

ну разница в коде большая) — все равно я в этом как в темном лесу.
Меня больше интересует механика от этого как-то поменялась?

Ты у себя в конфиге arraysBehavior подефолту лучше поставь в 1
kotmatposkin
Собственно забавно, перекачал, текстового лога нет и походу не создается, проверил. Ошибка возникает и при новой игре (запись) и при старой (записывает и загружает, но файла sfall нет в сохранении)
Я вот что думаю, может мне архивом сборку эту скинуть? Возможно как то облегчит?
Crafty
QUOTE
Реально ты там что-то серьёзно все поломал! :)
QUOTE
Пока отключил, проверяй. Потом перепишу.
Переписал, включил (в F1-версии тоже).

QUOTE
Меня больше интересует механика от этого как-то поменялась?
Если сравнивать функционал моего кода с кодом Ray'а — нет. Но с момента добавления этого фикса (v1.20 оригинального sfall) изменилась обработка скриптовых combat_p_proc, в которых нет точной проверки на COMBAT_SUBTYPE_HIT_SUCCEEDED. То есть до фикса:
CODE
procedure combat_p_proc begin
count = count + 1;
end
срабатывал только при попаданиях, а после фикса ещё и при промахах.

QUOTE
Ты у себя в конфиге arraysBehavior подефолту лучше поставь в 1
Вроде раньше это тут обсуждали, но не помню к чему пришли :-p

Отправлено: 12 мар 16 23:18
QUOTE
Собственно забавно, перекачал, текстового лога нет и походу не создается, проверил. Ошибка возникает и при новой игре (запись) и при старой (записывает и загружает, но файла sfall нет в сохранении)
А dll'ка отладочная (из каталога debugging)?

QUOTE
Я вот что думаю, может мне архивом сборку эту скинуть? Возможно как то облегчит?
Ну если не лень ;)
Fakeman
QUOTE
Вроде раньше это тут обсуждали, но не помню к чему пришли :-p

на 16 странице.
фобос писал
QUOTE
Не согласен. Массивы в старом стиле потенциально опасны и замусоривают сохраненки. И какие многие моды их используют? Из всех тех что я видел, почти никто не использует, за исключением временных массивов (temp_array), которые данная настройка не касается.

в 3.7 там в 1 поставлено.
Crafty
QUOTE
в 3.7 там в 1 поставлено.
0 — backward compatible with pre-3.4, 1 — permanent arrays don't get stored in savegames by default ©.
Fakeman
QUOTE
1 — permanent arrays don't get stored in savegames by default ©.

чаво?
>>> Обратной совместимости ПРИМЕЧАНИЯ <<<
Для тех, кто использовал массивы в своих модов перед sfall 3.4:
1) Существует параметр INI "arraysBehavior" в разделе "Разное" в ddraw.ini. Если установлено в 0, все сценарии, которые используются массивы, прежде чем sfall должно работать. В основном это изменения, которые "create_array" будет создавать постоянные массивы, которые "сохраненные" по умолчанию и их ID также постоянным. Это по умолчанию 1.
2) Как сохраненных игр Совместимость обрабатывается?
Сохраненные массивы хранятся в sfallgv.sav файла (в сохраненной игры) в новом (более гибкого) формате, сразу после старых массивов. Так в основном, когда вы загружаете старую сохраненную игру, sfall будет загружать массивы из старого формата и сохранять их в новом формате на следующей игре энергосбережения. Если вы загрузите сохраненную игру, сделанное с использованием sfall 3.4 sfall 3.3 (например), игра не должна врезаться, но все массивы будут потеряны.
3) Ранее вы были указать размер в байтах для элементов массива. Этот параметр в настоящее время игнорируются, и вы можете хранить строки произвольной длины в массивах.

Отправлено: 13 мар 16 00:15
QUOTE
Реально ты там что-то серьёзно все поломал! :)
Пока отключил, проверяй. Потом перепишу.
Переписал, включил (в F1-версии тоже).

Вырубай эту бяку — теперь после загрузки они просто стоят)
По ощущении после загрузки как будто игра принудительно ГГ выводит из боя и потом снова входит в бой. и можно закончить бой.
В чем фишка этого фикса — недать гг положить бомбу и смыться?
kotmatposkin
Само собой не из debugging добавил) Прошу покорно меня простить))).

Лог такой In DllMain2

Leave DllMain2

Loading save game: patch000.dat\savegame\slot21\sfallgv.sav

Cannot read sfallgv.sav — assuming non-sfall save.

Global script 5bc0390 registered as hook id 20 Global script 5bc0390 registered as hook id 10 Global script 5bc0390 registered as hook id 21 Saving game: patch000.dat\savegame\slot28\sfallgv.sav

ERROR creating sfallgv!

sfallgv.sav: 3

sfallfs.sav: 3

Заранее, огромнейшее спасибо!!!
Fakeman
QUOTE
Loading save game: patch000.dat\savegame\slot21\sfallgv.sav

patch000.dat чего это за путь такой дебильный?
должен быть
Loading save game: data\savegame\slot05\sfallgv.sav
kotmatposkin
Проблема оказалась простой, вернее решение) Просто удалил patch000.dat.
Спасибо большое всем в решении проблемы)
Fakeman
QUOTE
Проблема оказалась простой, вернее решение) Просто удалил patch000.dat.

Создал такую папку и получил ошибку при записи.
Тут вопрос почему сфалл пишет в папку patch000.dat а не в data ?
Crafty
Fakeman
QUOTE
>>> Обратной совместимости ПРИМЕЧАНИЯ <<<
Проще на английском прочитать, чем после гугл-транслейт :)
QUOTE
Вырубай эту бяку — теперь после загрузки они просто стоят)
Сейчас точно исправил, зуб даю :-p
QUOTE
В чем фишка этого фикса — недать гг положить бомбу и смыться?
Устанавливаешь таймер на динамите, подкладываешь жертве, возле которой есть кто-то ещё и его заденет взрыв и он останется жив (я для тестов использовал девицу-крупье в баре-казино Бекки, что в Дыре. Ту, которая ближе к входу в подвал, к ней ещё охранник ходит. Чтобы взрывом задевало всех вокруг, но охранница в углу живой оставалась). После подкладывания бомбы, до взрыва, делаешь ноги в другую зону, возвращаешься назад и снова выбегаешь — ловишь краш.

kotmatposkin
QUOTE
Saving game: patch000.dat\savegame\slot28\sfallgv.sav
ERROR creating sfallgv!
sfallgv.sav: 3
sfallfs.sav: 3
> 3: Системе не удается найти указанный путь.©
А в fallout2.cfg какие строки в critter_patches и в master_patches? (у меня там D:\Games\Fallout2\data).
Fakeman
QUOTE
- Исправлен приводящий к крашу баг с форсированным (подбросить взрывчатку и покинуть карту до взрыва) использованием взрывчатки если взрыв задевает кого-либо рядом, возвратом на карту и снова выходом с карты.

Я тут потестил бомбочки (с подкидыванием и покиданием карты до взрыва) выяснилось что у уничтоженного непеся при выходе из карты не срабатывает damage_p_proc(и соответственно не извещает столько ему нанесло повреждений) — но срабатывает destroy_p_proc.
Тебе тут еще по хорошему нужно в source_obj передавать указатель, чтобы в обработчике destroy_p_proc это можно было получить его, и узнать отчего умер непесь.
только я во тут даже не знаю какой указатель передавать предмета или самого гг, надо логически подумать... Правильнее будет указатель на ГГ.
kotmatposkin
critter_patches=data и master_patches=data (указал точный путь до игры, все равно ошибка если не удалять patch000.dat)
Так и не понял, new arrays behavior ставить единицу?) Или оставить по умолчанию как и есть ноль?
Fakeman
Чего напали на crafty — Папки патчдат не должно быть в игре, возьмите sfall оригинала и получите такую же ошибку при сохранении.

QUOTE
Вырубай эту бяку — теперь после загрузки они просто стоят)
Сейчас точно исправил, зуб даю :-p

Ну бой больше не глючит.
НО 1 раз было такое, что во время загрузки нпс "отошел по своим делам" — т.е. у нпс в скрипте указано вернуться на свое место на карте, и пока там что-то происходит(во время загрузки как будто игра принудительно ГГ выводит из боя и потом снова входит в бой) в этот момент нпс успел отойти от меня на некоторое расстояние, пока игра опять не вошла в режим боя.
может конечно это сам двиг так иногда глючит — по крайней мере больше такого эффекта не появлялось.
Ваш ответ: