Crafty
6 March 2016 | 19:49
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
6 March 2016 | 21:00
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
6 March 2016 | 23:45
Хватит мучать меня скриптами, я даже синтаксис языка не знаю ;-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
7 March 2016 | 01:23
QUOTE |
Хватит мучать меня скриптами, |
Тогда давай перейдем к водным процедурам)
А чего у тебя подсветка предметов/контейнеров разными цветами сделана серый/желтый/розовый нафига такой дикий раскрас?)
вместо розового бы зеленый сделал а то розовый это как-то не из мира фоллаута))
Fakeman
7 March 2016 | 15:02
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
7 March 2016 | 17:07
QUOTE |
чего у тебя подсветка предметов/контейнеров разными цветами сделана серый/желтый/розовый нафига такой дикий раскрас?) вместо розового бы зеленый сделал а то розовый это как-то не из мира фоллаута)) |
Ну какие цвета свободные были, те в ход и пошли. Выбор там всяко скудный.
QUOTE |
Это нужно через ини опцию фиксить, потому как функция в игре определяет держит ли игрок в активной руке оружие понимаешь смысл?! Т.е. к примеру в неваде охраники будут кричать гг 'убери оружие' хотя он его не держит в активной руке, и придется убирать его из слота вообще. невада то писалась не под сфалл где без Active_Hand() нет возможности определить активную руку. |
Весьма топорный способ функции в движке для получения предмета в активной руке игрока, когда исправлял так почекал скрипты оригинального F2 и увидел только использование с зеркальными очками, причём это опция для дополнительной ветки разговора доступная с очками в активной руке.
Через ини делать не буду ненужная суета с выбором названия переменной и описания :-p Прокомментировать переменную как "включённая требует убирания оружия из обеих рук, в противном случае только оружия в активной руке" и никто её включать не будет. Потому отключу.
QUOTE |
а без аргументов есть такая же функция? чтобы можно было вызывать из оригинального сфала call_offset_v0 |
Не, нема. Дак напиши на
гитхабе чтобы в следующей версии исправили чтение аргументов для v# функций.
Не знаю, кстати, чего ты так с небезопасными функциями возишься требуют отладочного режима и
AllowUnsafeScripting=1, что может вызвать проблемы у конечного пользователя, Лучше на том же гитхабе понапрягай на предмет добавления новых опкодов для этих дел.
Fakeman
7 March 2016 | 19:45
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
7 March 2016 | 21:10
QUOTE |
Плохо чекал там еще макросы на это дело надо чекать. Есть Стивен и охранники в брокенхилз которые говорят чтобы игрок спрятал свое оружие иначе говорить отказываются. |
Макросы тоже и с оружием понятно, меня интересовало есть ли в скриптах именно проверка наличия не_оружия в активной руке, чтобы после "исправления" это не оказалось сломанным. Обнаружились только очки если в активной руке, то в диалоге с левым мужиком добавлялся несущественный вопрос. Это можно игнорировать (я даже посчитал это исправлением), ну с оружием игроку конечно пришлось бы возиться, убирая из правой и левой руки при всяких critter_is_armed.
А оригинальную доработать нельзя она в движке. Только через новый опкод.
Для аналога зеркальных очков просто такой же pid присваивай своему предмету, получишь +1 удачу, ну как амулет дикарей в Неваде сделан.
QUOTE |
А чем отличается вызов по этим адресам, от введения нового опкода который как я понимаю будет ссылаться на этот адрес? |
Именно что ничем ;) От AllowUnsafeScripting нужно отказаться, перевести небезопасные функции в обычные, чтобы была возможность эмулировать нужный функционал при отсутствии аналога в виде опкода.
QUOTE |
ps научи меня ковыряться в движке) |
Доступна же IDB-база с оригинальными названиями функций и переменных.
Fakeman
7 March 2016 | 21:39
QUOTE |
Для аналога зеркальных очков просто такой же pid присваивай своему предмету, получишь +1 удачу, ну как амулет дикарей в Неваде сделан. |
В неваде амулет вместо очков, и поменяли в двиге с харизмы на удачу.
А я говорю о добавлении к очкам еще какого-либо предмета аналогично очкам который может давать к примеру +1 к восприятию.
И что значит "просто такой же pid присваивай своему предмету получишь +1 удачу" не совсем понял это, типа два предмета с одним и тем-же пидом? это что-то новенькое)
Crafty
7 March 2016 | 22:59
QUOTE |
В неваде амулет вместо очков, и поменяли в двиге с харизмы на удачу. А я говорю о добавлении к очкам еще какого-либо предмета аналогично очкам который может давать к примеру +1 к восприятию. И что значит "просто такой же pid присваивай своему предмету получишь +1 удачу" не совсем понял это, типа два предмета с одним и тем-же пидом? это что-то новенькое) |
Да, запамятовал уже какой там стат в оригинале. У очков и амулета одинаковый пид, поэтому амулет движково обрабатывается. Хочешь себе перстень с нужным статом меняй название/описание очков, правь чутка байт в движке для нужного стата и выйдет "такой же pid присваивай своему предмету". А для нового предмета через скрипт конечно, те же хуки.
А чем бы critter_inven_obj помог в этом случае?
Мне вот что интересно использует кто-то sfall'овские функции, а в скрипте делают проверку что sfall, да ещё и нужной версии установлен? Чекнул sfall_ver_* сломаны.
Fakeman
8 March 2016 | 00:21
QUOTE |
А для нового предмета через скрипт конечно, те же хуки. А чем бы critter_inven_obj помог в этом случае?
Мне вот что интересно использует кто-то sfall'овские функции, а в скрипте делают проверку что sfall, да ещё и нужной версии установлен? Чекнул sfall_ver_* сломаны. |
Не нашел подходящего хука для этого дела, только если hs_inventorymove (не тестировал его в деле конечно) но я так понял в теории оно не сработает если скриптом убрать предметы из рук игрока, т.е. если там будет лежать наш предмет то вероятно стата так и останется в +1 (до очередного срабатывания хука).
а critter_inven_obj сейчас вполне выполняет эту поставленную задачу.
Я как то хотел делать проверку на версию сфала, но потом плюнул посчитал это лишним. думаю навряд ли ее кто-то юзает иначе бы ее починили)
Кстати вот хотел тебе предложить чтобы с помощью этой команды твоя версия возвращала какой-нибудь опознавательный знак, что используется длл не оригинальна ну мало ли вдруг в коде скрипта придется обходить какой-либо код завязанный на не оригинал.
Phobos
8 March 2016 | 15:39
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока?
С уважением, "ленивый зарубежный друг" :)
@Fakeman:
QUOTE |
Я попросил это доработать для того чтобы можно было использовать эту функц. к примеру для реализации скриптового предмета на подобии зеркальных очков которые на двиг завязаны. В идеале конечно для этого нужно бы новый опкод делать но кто это будет делать?! |
Можешь напомнить о чем речь?
Fakeman
8 March 2016 | 16:48
QUOTE |
С уважением, "ленивый зарубежный друг" :) |
о я накастовал нашего "зарубежного" друга).
©Phobos теперь будем знать это магическое слово))
QUOTE |
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока? |
Гуру скриптов, подскажи как получить указатель на предмет который лежит в неактивном слоте(руки) у игрока может я не знаю секрета, да голову тут всем забиваю.
знаю, что через хук hs_inventorymove можно получить указатель, НО только тогда когда игрок его кладет в слот.
А в определении неактивного слота проблем нет, спасибо за Active_Hand()
QUOTE |
Я попросил это доработать |
QUOTE |
Можешь напомнить о чем речь? |
Эмм, я вроде тебя не о чем не просил, по крайней здесь и в этом году)
to Crafty
QUOTE |
А оригинальную доработать нельзя она в движке. Только через новый опкод. |
Так я чего-то не понял, ты же ее(critter_inven_obj) уже доработал.
(dll от 6-го марта).
Crafty
8 March 2016 | 17:45
Fakeman
QUOTE |
но я так понял в теории оно не сработает если скриптом убрать предметы из рук игрока |
hs_removeinvenobj ещё к hs_inventorymove, но видимо нужно просто свои обработчики через register_hook_proc вешать.
QUOTE |
Так я чего-то не понял, ты же ее(critter_inven_obj) уже доработал |
А на следующий день закомментировал в коде это "изменение":
Потому как изменение удобно для скриптописателя, но для простого игрока потребует убирания оружия из рук, а если добавить переменную в ini, то игрок её включать не будет из-за лени.
В общем нужно или оставить изменение или добавить новый опкод (конечно если аналога нет).
Phobos
QUOTE |
Если не трудно, не могли бы вы вкратце пояснить суть проблемы с определением неактивного слота для игрока? |
critter_inven_obj для не_игрока вернёт указатель на предмет (если он конечно есть в руке) лежащий в любой опрашиваемой руке, но для игрока указатель вернётся только если опрашиваемая рука является активной, в противном случае вернёт NULL (даже если в опрашиваемой неактивной руке есть предмет).
Fakeman
8 March 2016 | 19:51
QUOTE |
Потому как изменение удобно для скриптописателя, но для простого игрока потребует убирания оружия из рук, а если добавить переменную в ini, то игрок её включать не будет из-за лени. В общем нужно или оставить изменение или добавить новый опкод (конечно если аналога нет). |
так я к тому и клоню, что обычным юзерам ее включать и не стоит это для скриптеров такое баловство позволено)
А аналога нету(или я по крайней мере не в курсах как можно это реализовать) можно конечно было бы на хуке hs_inventorymove сделать, но он не сработает если применить скриптово unwield к ГГ и даже совместно с новым хуком hs_invenwield ситуации не поможет ибо у ГГ он не возвращает указатель на объект который был снят со слота. arg2 всегда равен НУЛЮ.
CODE |
Obj arg2 - item being wielded or unwielded (weapon/armor), may be 0 when unwielding |
Или что бы мне тебе мозги этим не пудрить покажи мне, что необходимо будет раскоментить в коде я сделаю свой сфал под свои нужды)
это не то. из описания следует что хук срабатывает при удалении/перемещении предмета из инвентаря объектов слоты там не приделах.
Crafty
8 March 2016 | 23:45
QUOTE |
ибо у ГГ он не возвращает указатель на объект который был снят со слота. arg2 всегда равен НУЛЮ. |
А это ты хорошо заметил, я поправил чтобы всегда возвращался указатель на снимаемый предмет, конечно если он там есть.
QUOTE |
Или что бы мне тебе мозги этим не пудрить покажи мне, что необходимо будет раскоментить в коде я сделаю свой сфал под свои нужды) |
Bugs.cpp, в конце файла. Но я включил это изменение в отладочной версии dll.
QUOTE |
это не то. из описания следует что хук срабатывает при удалении/перемещении предмета из инвентаря объектов слоты там не приделах. |
То-то, попробуй :-p (тебя должен заинтересовать 4 аргумент описанный как RMOBJ_DROP в sfall.h, не хочу убивать кучу времени на попытку написания скриптового примера).
Это для игрока предметы в слотах выглядят как отдельные, а фактически они лежат в инвентаре, только у них стоят флажки принадлежности слоту (броня, правая/левая рука) по которым движок определяет что рисовать в слотах.
Fakeman
9 March 2016 | 00:32
Да не я то тестил hs_removeinvenobj не срабатывает он когда делаешь скриптово unwield ГГ и вообще странно он работает в интерфейсе игрока.
когда помещаешь в слот предмет срабатывает, убираешь уже не срабатывает
при открывании интерфейса если в слотах есть предметы тоже срабатывает.
не для этих целей он придуман)
раз ты пофиксил новый хук тогда уже и проблема думаю решена.
QUOTE |
Но я включил это изменение в отладочной версии dll. |
кстати зачем ты создаешь две версии длл?
kotmatposkin
9 March 2016 | 21:47
Добрый вечер всем! Подскажите пожалуйста, столкнулся с ошибкой после замены sfall на новую версию ERROR saving extented savegame information! Check if other programs interfere with savegame files\folders and try again!
Выскакивает во время сохранения в Глобал Моде, но при этом сохранение создается. До этого стояла версия 1.5 такого не было, настройки изменил под старый sfall. Мультисэйвы активированы и были активированы до этого. Запускал с админ правами тоже самое. Виндоус 7.
Заранее спасибо!!!
Crafty
10 March 2016 | 01:42
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
10 March 2016 | 10:29
Поставил старую версию 1.5 всё норм, в этой сборке так же есть: правленные карты и hi-res 4.1.8 и Crafty's sFall mod 1.5 и Sfall configurator tool 1.01. На новой версии ошибка, есть идеи в какую сторону копать?))
И как проверить может это глюк просто? Поскольку сэйв то создаётся и загружается.
P.s. Проверил, действительно на новой версии не создаётся sfallgv.sav.
Crafty
10 March 2016 | 22:49
QUOTE |
На новой версии ошибка, есть идеи в какую сторону копать?)) |
То есть если
отсюда скачать архив, заменить ddraw.dll в каталоге игры на dll из архива, то перестаёт sfallgv.sav создавать?
QUOTE |
P.s. Проверил, действительно на новой версии не создаётся sfallgv.sav. |
А sfallfs.sav создаётся?
Fakeman
10 March 2016 | 22:59
Здрасьте!
В 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
11 March 2016 | 00:52
sFall2 v1.5
Megamod 2.44.2 (пока только здесь, о других отпишусь позже) при использовании dll от Crafty, машину невозможно заправить. Меняю на обычный 3.6 все работает.
Fakeman
11 March 2016 | 00:59
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
11 March 2016 | 02:19
QUOTE |
Megamod 2.44.2 (пока только здесь, о других отпишусь позже) при использовании dll от Crafty, машину невозможно заправить. Меняю на обычный 3.6 все работает. |
Pid'ы машины(33555441) и багажника(455) там что ли поменяли? (фикс заключается в проверке конкретных пидов).
Fakeman
11 March 2016 | 02:43
скорей всего поменяли, так как в 3.7 тоже не робит.
kotmatposkin
11 March 2016 | 10:09
Собственно да, перестает создаваться sfallgv.sav на новых версиях (последнюю перекачал попробовал, тоже самое, та же ошибка), на старой 1.5 такого нет и всё нормально создается и ошибки нет.
Fakeman
11 March 2016 | 15:24
QUOTE |
Собственно да, перестает создаваться sfallgv.sav на новых версиях |
Может проблема в том что ты сохранился на старой, а теперь на новой имеешь проблемы?
У меня нет никаких проблем с новым 1.5.6
Nordan
11 March 2016 | 17:49
ЕМНИП, в сфалле есть 2 вида сохранения глобальных переменных старый и новый. По умолчанию в новых версиях стоит новый вид сохранения, но в ИНИ файле есть возможность использовать старый метод сохранения, может это поможет.
kotmatposkin
11 March 2016 | 18:55
При сохранении новой игры на новом сфалле, то же самое, ошибка. А не могли бы подсказать где сия строка в ини файле (использовать старый формат сохранения)? arraysBehavior вот это? Менял толку нет, вообще интересно почему такая проблема. С чем может конфликтовать в теории сфалл?
И ещё вопрос, что может быть соббсно без файла sfallgv.sav?
Заранее, еще раз Всем Спасибо!
Pyran
11 March 2016 | 22:55
И так, попробовал новый sFall 1.5.6
Все вроде работает и с настройками из 1.5 и с дефолтными настройками 1.5.6
но при сохранении (быстром) выдает такое сообщение
фотоно спокойно сохраняется/загружается.
p.s.
кажется все дело в конфиге (ini), заменил только dll оставив нетронутый конфиг, такого срама не вылезает.
Nordan
11 March 2016 | 23:56
QUOTE |
И ещё вопрос, что может быть соббсно без файла sfallgv.sav? |
Судя по названию, там хранятся данные о глобальных переменных сфалла, которые используются в скриптах. И это критически важно, поскольку, если он не может их сохранить, то и в скриптах при вызове той или иной сфаллической глобальной переменной она будет возвращать только 0.
Я предполагаю, сия ситуация произошла потому что в ранних версиях сфалла синтаксис функций по работе с глобальными переменными и массивами возможно был другим, и поэтому происходит что то вроде рассинхронизации, но это только моя теория.
Fakeman
12 March 2016 | 14:54
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
12 March 2016 | 18:12
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
12 March 2016 | 18:26
Еще какие-то проблемы всплыли в версии 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
12 March 2016 | 19:37
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
12 March 2016 | 19:43
QUOTE |
Это всё не то, сообщение о ошибке выводится только если не получается [пере]создать sfallgv.sav (другой процесс "держит" его): |
Путь проверят атрибут только чтение на папке.
QUOTE |
Так и задумано, у всех контейнеров этот флаг стоит. |
меня это как бы не напрягает. но а что нельзя проверять по item_subtype ? (есть же под тип контейнеров)
Отправлено: 12 мар 16 20:09
QUOTE |
Я же просто переписал его вариант (сравни Combat_p_procFix в оригинальном sfall с apply_damage_hook в моём main.cpp). |
ну разница в коде большая) все равно я в этом как в темном лесу.
Меня больше интересует механика от этого как-то поменялась?
Ты у себя в конфиге arraysBehavior подефолту лучше поставь в 1
kotmatposkin
12 March 2016 | 23:10
Собственно забавно, перекачал, текстового лога нет и походу не создается, проверил. Ошибка возникает и при новой игре (запись) и при старой (записывает и загружает, но файла sfall нет в сохранении)
Я вот что думаю, может мне архивом сборку эту скинуть? Возможно как то облегчит?
Crafty
12 March 2016 | 23:13
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
12 March 2016 | 23:30
QUOTE |
Вроде раньше это тут обсуждали, но не помню к чему пришли :-p |
на 16 странице.
фобос писал
QUOTE |
Не согласен. Массивы в старом стиле потенциально опасны и замусоривают сохраненки. И какие многие моды их используют? Из всех тех что я видел, почти никто не использует, за исключением временных массивов (temp_array), которые данная настройка не касается. |
в 3.7 там в 1 поставлено.
Crafty
12 March 2016 | 23:34
QUOTE |
в 3.7 там в 1 поставлено. |
0 backward compatible with pre-3.4, 1 permanent arrays don't get stored in savegames by default ©.
Fakeman
12 March 2016 | 23:48
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
13 March 2016 | 00:32
Само собой не из 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
13 March 2016 | 00:57
QUOTE |
Loading save game: patch000.dat\savegame\slot21\sfallgv.sav |
patch000.dat чего это за путь такой дебильный?
должен быть
Loading save game: data\savegame\slot05\sfallgv.sav
kotmatposkin
13 March 2016 | 01:10
Проблема оказалась простой, вернее решение) Просто удалил patch000.dat.
Спасибо большое всем в решении проблемы)
Fakeman
13 March 2016 | 01:41
QUOTE |
Проблема оказалась простой, вернее решение) Просто удалил patch000.dat. |
Создал такую папку и получил ошибку при записи.
Тут вопрос почему сфалл пишет в папку patch000.dat а не в data ?
Crafty
13 March 2016 | 02:47
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
13 March 2016 | 03:21
QUOTE |
- Исправлен приводящий к крашу баг с форсированным (подбросить взрывчатку и покинуть карту до взрыва) использованием взрывчатки если взрыв задевает кого-либо рядом, возвратом на карту и снова выходом с карты. |
Я тут потестил бомбочки (с подкидыванием и покиданием карты до взрыва) выяснилось что у уничтоженного непеся при выходе из карты не срабатывает damage_p_proc(и соответственно не извещает столько ему нанесло повреждений) но срабатывает destroy_p_proc.
Тебе тут еще по хорошему нужно в source_obj передавать указатель, чтобы в обработчике destroy_p_proc это можно было получить его, и узнать отчего умер непесь.
только я во тут даже не знаю какой указатель передавать предмета или самого гг, надо логически подумать... Правильнее будет указатель на ГГ.
kotmatposkin
13 March 2016 | 13:01
critter_patches=data и master_patches=data (указал точный путь до игры, все равно ошибка если не удалять patch000.dat)
Так и не понял, new arrays behavior ставить единицу?) Или оставить по умолчанию как и есть ноль?
Fakeman
13 March 2016 | 14:31
Чего напали на crafty Папки патчдат не должно быть в игре, возьмите sfall оригинала и получите такую же ошибку при сохранении.
QUOTE |
Вырубай эту бяку теперь после загрузки они просто стоят) Сейчас точно исправил, зуб даю :-p |
Ну бой больше не глючит.
НО 1 раз было такое, что во время загрузки нпс "отошел по своим делам" т.е. у нпс в скрипте указано вернуться на свое место на карте, и пока там что-то происходит(во время загрузки как будто игра принудительно ГГ выводит из боя и потом снова входит в бой) в этот момент нпс успел отойти от меня на некоторое расстояние, пока игра опять не вошла в режим боя.
может конечно это сам двиг так иногда глючит по крайней мере больше такого эффекта не появлялось.