Mr.Sталин Опубликовано 17 февраля, 2022 Поделиться Опубликовано 17 февраля, 2022 нет разницы. вроде никто неделал. Ссылка на комментарий
Pyran Опубликовано 17 февраля, 2022 Поделиться Опубликовано 17 февраля, 2022 Всё равно не то.Собственно, удар по затылку как раз-таки может ослепить человека, а вот как это в игре... скорей всего, не играет роли, задницей к вам повернут персонаж или передницей (хотя, могу ошибаться). Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Помогая другим, не забывай о себе =) Ссылка на комментарий
DeKRuS Опубликовано 17 февраля, 2022 Автор Поделиться Опубликовано 17 февраля, 2022 Собственно, удар по затылку как раз-таки может ослепить человека, а вот как это в игре... скорей всего, не играет роли, задницей к вам повернут персонаж или передницей (хотя, могу ошибаться)Именно что будет корковый амавроз, из-за поражения затылочной доли не через глазницу, где обычно меньше "брони", чем на других частях головы(особенно в шлеме), а значит и урон должен быть другой, хоть и оба с вероятностью ослепления, но такого в игре нет. нет разницы. вроде никто неделал.Понятно, спасибо. Ссылка на комментарий
DeKRuS Опубликовано 20 февраля, 2022 Автор Поделиться Опубликовано 20 февраля, 2022 Ну, писец, случайно узнал что если не поставить "SkipOpeningMovies=2" то часть моего скрипта, срабатывает через жопь. Исходные условия: пустая карта с игроком и одним спутником, к ним применен drug который повышает healing_rate на +6 на 1 минуту. После отдыха через пипбой (время отдыха не имеет значение) получается разный результат в зависимости от значения "SkipOpeningMovies" в ddraw.ini. Под спойлером обрубок из моего скрипта, работающий через "HOOK_RESTTIMER".В зависимости от того что стоит в ddraw.ini в SkipOpeningMovies, он выдаёт мне разный результат!И я пока не могу понять почему. procedure rest begin variable critter_array := 0; variable theonecrit := 0; variable theonecrit2 := 0; variable lastdudehr := 0; RegenTickHP2 := 0;//часть с регеном if RegenMod != 0 then begin foreach (critter in list_as_array(0)) begin if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin healingcritarray := array_push(healingcritarray,critter); end //remove from array critter with hr < 5 if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin healingcritarray := remove_array_set(healingcritarray,critter); end theonecrit := array_min(healingcritarray); theonecrit2 := array_max(healingcritarray); //display_msg(obj_name(theonecrit)); if critter == theonecrit andAlso critter == theonecrit2 then begin display_msg("no poison "+obj_name(theonecrit)); end end end//часть с ядом if PoisonMod != 0 andAlso get_critter_stat(critter, STAT_current_hp ) > 0 then begin foreach (critter in list_as_array(0)) begin if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin healingcritarray := array_push(healingcritarray,critter); end theonecrit := array_max(healingcritarray); if critter == theonecrit then begin display_msg(" poison "+obj_name(theonecrit)); end //remove from array critter with hr < 5 if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin healingcritarray := remove_array_set(healingcritarray,critter); end end end clear_array(healingcritarray); healingcritarray := create_array_map; end Под спойлерами скриншоты информационного экрана из игры: Если SkipOpeningMovies= 1 или 0, то выводится такой результат(мне такого ненужно) а если SkipOpeningMovies= 2 то выводится другой, нужный мне результат. Если в скрипте в части с ядом поменять theonecrit := array_MAX(healingcritarray); на theonecrit := array_MIN(healingcritarray);То всё меняется местами и нужный мне результат процедура теперь выдает если стартовые мувики не скипаются! Мистер Сталин, выручай! я реально не понимаю как это всё может быть связанно?И что на самом деле делает SkipOpeningMovies? (я в свою поделку уже добавил проверку скипа интро и замену макс на мин, если он не равен 2, чтобы хоть как-то работало, но это же выглядит бредово!) Ссылка на комментарий
Mr.Sталин Опубликовано 20 февраля, 2022 Поделиться Опубликовано 20 февраля, 2022 Че за бред ты придумал с SkipOpeningMovies, ищи баг а не выдумывай ерунду.SkipOpeningMovies=2 - просто не рисуется картинка при старте игры, вместо нее черный экран.[pluspost=12 сек.]Проверь там display_msg(" poison "+obj_name(theonecrit));Действительно ли theonecrit указывает на неправильный криттер. Пид выводи. 1 Ссылка на комментарий
DeKRuS Опубликовано 20 февраля, 2022 Автор Поделиться Опубликовано 20 февраля, 2022 Согласен, звучит как полный бред! Да и выглядит также!Понятное дело это баг, но почему он возникает только когда SkipOpeningMovies=0 или 1, а при значении 2 всё работает как надо? И я просто не могу понять как SkipOpeningMovies может быть связан с работай скрипта? Конечно тут сразу ответ, что никак не связан, но почему тогда так получается? [pluspost=1 сек.]Проверь там display_msg(" poison "+obj_name(theonecrit));Действительно ли theonecrit указывает на неправильный криттер. Пид выводи.Да, obj_pid выводит также как и obj_name. когда не скип, то обе кричи 16777217в другом случае 16777217 и 16777313 Ссылка на комментарий
Mr.Sталин Опубликовано 20 февраля, 2022 Поделиться Опубликовано 20 февраля, 2022 в другом случае 16777217 и 16777313в каком месте 16777313 Ссылка на комментарий
DeKRuS Опубликовано 20 февраля, 2022 Автор Поделиться Опубликовано 20 февраля, 2022 в каком месте 16777313Если SkipOpeningMovies=2, то выходит вот так Если SkipOpeningMovies=0 или 1, то так Такие странные результаты выдаются только если игрок тоже в массив попадает, если в массиве только НПЦ, то всё работает как надо, в не зависимости от значения SkipOpeningMovies. Проверял на чистой установке F2 Fixed edition, версия sfall 4.3.0.2- extended, на других не проверял. UPD:Попробовал на FE Nevada и Sonora, там такого не случается. (оригинальная + 4.3.3.1 версии sfall) На F2 Fixed edition если обновить сфалл до 4.3.3.1 с заменой ddraw.ini, ничего не меняется и результат всё также зависит от значения SkipOpeningMovies. Ссылка на комментарий
Mr.Sталин Опубликовано 21 февраля, 2022 Поделиться Опубликовано 21 февраля, 2022 Проверял на чистой установке F2 Fixed edition, версия sfall 4.3.0.2- extended, на других не проверял.проверь с какой именно версии sfall это началось.подкинь например 4.2.9 и уходи вниз может на какой-то номально будет. а там я уже разберусь. [pluspost=4 сек.]Попробовал на FE Nevada и Sonora, там такого не случается. (оригинальная + 4.3.3.1 версии sfall) На F2 Fixed edition если обновить сфалл до 4.3.3.1 с заменой ddraw.ini, ничего не меняется и результат всё также зависит от значения SkipOpeningMovies.упс то еcть на одной верии sfall, но на разных играх, разное/баговое поведение? Ссылка на комментарий
DeKRuS Опубликовано 21 февраля, 2022 Автор Поделиться Опубликовано 21 февраля, 2022 "упс то еcть на одной верии sfall, но на разных играх, разное/баговое поведение?"Не, наоборот, на одной версии игры (F2 FE) с разными версиями сфалл 4.3 и нове (и экстендед версия и обычная), получается такое поведение.Но теперь есть подозрение может всё так и должно быть, ну, или я опять факапнул проверку.При проверке я начинал новую игру, но в F2 я после начала сохранился и все тестировал на этом сэйве. А в соноре и Неваде, проверял каждый раз начиная новую игру, но без загрузок сейвов.У меня в скрипте пустой Array_map создаётся в стартовой процедуре. Может если сохранить игру при одном значении SkipOpeningMovies, а загрузить при другом, то только тогда такое разное поведение случается?Как дома буду ещё посмотрю. UPD:С загрузками и сохранением никакой связи не оказалось.Но нашлась другая более вероятная причина. Verte! Ссылка на комментарий
DeKRuS Опубликовано 21 февраля, 2022 Автор Поделиться Опубликовано 21 февраля, 2022 Пока что смог получить вот что:- На чистой установке Fallout 2 Fixed Edition v3.8.1 это странное поведение есть. - На чистой установке Fallout Nevada FE v2.0.3 это странное поведение ТОЖЕ есть! но ТОЛЬКО если запускать игру через NevadaHD_FE.exe. При запуске через Nevada.exe то всё работает всегда одинаково вне зависимости от значения SkipOpeningMovies. Когда увидел что на Неваде такое тоже есть, но только на ехе у которого Hi Res включен, то решил еще раз поставить сфалл 4.3.3.1 на чистую Fallout 2 Fixed Edition v3.8.1 и в этот раз отключить Hi Res.И о чудо! теперь результаты работы скрипта никак не зависят от значения SkipOpeningMovies! скрины из невады при запуске через NevadaHD_FE.exe. Если SkipOpeningMovies=0 или 1, то так: А если SkipOpeningMovies=2, то пишет так: Получаются зеркальные результаты, если сравнивать с F2 FE. Выходит что такие странности могут быть как-то связаны с Hi Res патчем или конкретно ехе'шниками Fixed Edition. Но каким именно образом это всё связано?И как тогда такого избежать? Вот тут текст скрипта которым проверял всё: #define SFALL_SC_EVALUATION (true) // short - circuit evaluation#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\DEFINE.H"#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\define_extra.h"#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h"procedure start;procedure rest;procedure map_enter_p_proc;variable critter;variable healingcritarray;variable stim;procedure start beginif (game_loaded) then beginset_pipboy_available(1);register_hook_proc(HOOK_RESTTIMER, rest);set_global_script_type(3);stim := create_object_sid(40, 0, 0, -1);add_mult_objs_to_inven(dude_obj, stim, 6);healingcritarray := create_array_map;call map_enter_p_proc();endendprocedure rest beginvariable critter_array := 0;variable theonecrit := 0;variable theonecrit2 := 0;variable lastdudehr := 0;foreach (critter in list_as_array(0)) beginif not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then beginhealingcritarray := array_push(healingcritarray,critter);end//remove from array critter with hr < 5if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then beginhealingcritarray := remove_array_set(healingcritarray,critter);endtheonecrit := array_min(healingcritarray);theonecrit2 := array_max(healingcritarray);//display_msg(obj_name(theonecrit));if critter == theonecrit andAlso critter == theonecrit2 then begindisplay_msg("no poison "+obj_pid(theonecrit));endendif get_critter_stat(critter, STAT_current_hp ) > 0 then beginforeach (critter in list_as_array(0)) beginif not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then beginhealingcritarray := array_push(healingcritarray,critter);endtheonecrit := array_max(healingcritarray);if critter == theonecrit then begindisplay_msg(" poison "+obj_pid(theonecrit));end//remove from array critter with hr < 5if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then beginhealingcritarray := remove_array_set(healingcritarray,critter);endendendclear_array(healingcritarray);healingcritarray := create_array_map;endprocedure map_enter_p_proc beginset_proto_data(40, PROTO_DR_STAT_A, -2);set_proto_data(40, PROTO_DR_STAT_B, 35);set_proto_data(40, PROTO_DR_STAT_C, 14);set_proto_data(40, PROTO_DR_AMOUNT_1_A, 1);set_proto_data(40, PROTO_DR_AMOUNT_1_B, 6);set_proto_data(40, 56, 6);set_proto_data(40, 60, 1);set_proto_data(40, 64, 0);set_proto_data(40, 68, 0);set_proto_data(40, 72, -8);set_proto_data(40, 76, 60);set_proto_data(40, 80, 0);set_proto_data(40, 84, 0);set_proto_data(40, 88, 2);end Полезные ссылки:Ссылка на GitHubСсылка на Яндекс.Диск 1 Ссылка на комментарий
Nobi Опубликовано 21 февраля, 2022 Поделиться Опубликовано 21 февраля, 2022 NevadaHD_FE.exe. При запуске через Nevada.exeПопробуйка имена одного и тогоже exe с 8 символов и 11 символов в имени. Nevada.exe 6 символов сойдет для теста и переименуй в Nevada12345.exe для второго теста, хотя скорей всего проблема в hrp mash И как тогда такого избежать?Для начала надо выяснить точно где проблема, hrp, sfall, движок, имя exe, кривой реплейс иконки. Пока что всё указывает на hrp mash. Это крайне серьёзный баг, из-за него куча нехороших правок могло попасть в rpu/ettu 1 HQ/UHQ music for Fallout CrashMonitor v2.16 Ссылка на комментарий
DeKRuS Опубликовано 21 февраля, 2022 Автор Поделиться Опубликовано 21 февраля, 2022 (изменено) Попробуйка имена одного и тогоже exe с 8 символов и 11 символов в имени.Изменение имени eхе ничего не дало( А вот запуск игры в окне (в f2_res.ini поставить WINDOWED=1), убирает зависимость от пропуска стартовых мувиков.С WINDOWED_FULLSCREEN такой фокус не прошёл, помогает только запуск в окне.А вот WIN_DATA может быть любая, на результат не влияет. Надо будет проверить на другом пк, а то вдруг это косяк только у меня встречается. Заставил друга проверить у себя: на мегамоде v2.44.3 скрипт также выдает разные значения и как только включаешь оконный режим вся зависимость от SkipOpeningMovies пропадает и результат работы скрипта становится всегда одинаковым. Изменено 21 февраля, 2022 пользователем DeKRuS Ссылка на комментарий
Nobi Опубликовано 21 февраля, 2022 Поделиться Опубликовано 21 февраля, 2022 @DeKRuS, Ну очевидно что надо удалять f2_res.dll и использовать встроенный в sfall hrp 1 HQ/UHQ music for Fallout CrashMonitor v2.16 Ссылка на комментарий
Mr.Sталин Опубликовано 21 февраля, 2022 Поделиться Опубликовано 21 февраля, 2022 могут быть как-то связаны с Hi Res патчемУточняйте какой именно - их уже два.тот который старый? тогда переключитесь но встроенный и проверьте. Ссылка на комментарий
DeKRuS Опубликовано 22 февраля, 2022 Автор Поделиться Опубликовано 22 февраля, 2022 (изменено) Уточняйте какой именно - их уже два. тот который старый? тогда переключитесь но встроенный и проверьте.Уже проверял) и со встроенным в sfall патчем такого не возникает. Когда увидел что на Неваде такое тоже есть, но только на ехе у которого Hi Res включен, то решил еще раз поставить сфалл 4.3.3.1 на чистую Fallout 2 Fixed Edition v3.8.1 и в этот раз отключить Hi Res. И о чудо! теперь результаты работы скрипта никак не зависят от значения SkipOpeningMovies! Ну очевидно что надо удалять f2_res.dll и использовать встроенный в sfall hrpЖаль только что в новой версии туман войны не будут никогда реализовывать. Но всё равно остался вопрос:- Почему в Неваде и в Ф2, уже после отключение старого hrp, оидн и тот же скрипт может выдавать разные результаты? На одной и той же версии сфалл с одинаковыми настройками в ини, кроме SkipSizeCheck=1 в неваде. в простом Ф2 скрипт работает циклично и в окно выдает такой текст. А в неваде такой: ] Изменено 22 февраля, 2022 пользователем DeKRuS Ссылка на комментарий
Mr.Sталин Опубликовано 22 февраля, 2022 Поделиться Опубликовано 22 февраля, 2022 Уже проверял) и со встроенным в sfall патчем такого не возникает.может во внешнем просто включена опция которая глючит с sfall, там есть такие сомнительные устаревшие опции.[pluspost=24 сек.]Жаль только что в новой версии туман войны не будут никогда реализовывать.добавлю но не скоро (к концу года может быть), но затемнения самой карты не будет)[pluspost=6 сек.]- Почему в Неваде и в Ф2, уже после отключение старого hrp, оидн и тот же скрипт может выдавать разные результаты?блин тебя не понять то ты пишешь, что после отключения HRP все нормально, и тут же пишешь что после отключения по разному....ты уж определись))) так какой вариант правильный в F2 или в неваде? а то по скринщотам с цифрами не понятно.[pluspost=5 сек.]Прилипи сюда этот скрипт я у себя проверю. че там за странное поведение. Ссылка на комментарий
DeKRuS Опубликовано 22 февраля, 2022 Автор Поделиться Опубликовано 22 февраля, 2022 Не всмвсле что нормально,а в смысле что без связи со скипом мувиков) Кидаю с телефона, поэтому сорян что без спойлера #define SFALL_SC_EVALUATION (true) // short - circuit evaluation #include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\DEFINE.H"#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\define_extra.h"#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h" procedure start;procedure rest;procedure map_enter_p_proc; variable critter;variable healingcritarray;variable stim; procedure start beginif (game_loaded) then beginset_pipboy_available(1);register_hook_proc(HOOK_RESTTIMER, rest);set_global_script_type(3);stim := create_object_sid(40, 0, 0, -1);add_mult_objs_to_inven(dude_obj, stim, 6);healingcritarray := create_array_map;call map_enter_p_proc();endend procedure rest beginvariable critter_array := 0;variable theonecrit := 0;variable theonecrit2 := 0;variable lastdudehr := 0;foreach (critter in list_as_array(0)) beginif not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then beginhealingcritarray := array_push(healingcritarray,critter);end//remove from array critter with hr < 5if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then beginhealingcritarray := remove_array_set(healingcritarray,critter);endtheonecrit := array_min(healingcritarray);theonecrit2 := array_max(healingcritarray);//display_msg(obj_name(theonecrit));if critter == theonecrit andAlso critter == theonecrit2 then begindisplay_msg("no poison "+obj_pid(theonecrit));endendif get_critter_stat(critter, STAT_current_hp ) > 0 then beginforeach (critter in list_as_array(0)) beginif not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then beginhealingcritarray := array_push(healingcritarray,critter);endtheonecrit := array_max(healingcritarray);if critter == theonecrit then begindisplay_msg(" poison "+obj_pid(theonecrit));end//remove from array critter with hr < 5if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then beginhealingcritarray := remove_array_set(healingcritarray,critter);endendendclear_array(healingcritarray);healingcritarray := create_array_map;end procedure map_enter_p_proc beginset_proto_data(40, PROTO_DR_STAT_A, -2);set_proto_data(40, PROTO_DR_STAT_B, 35);set_proto_data(40, PROTO_DR_STAT_C, 14);set_proto_data(40, PROTO_DR_AMOUNT_1_A, 1);set_proto_data(40, PROTO_DR_AMOUNT_1_B, 6);set_proto_data(40, 56, 6);set_proto_data(40, 60, 1);set_proto_data(40, 64, 0);set_proto_data(40, 68, 0);set_proto_data(40, 72, -8);set_proto_data(40, 76, 60);set_proto_data(40, 80, 0);set_proto_data(40, 84, 0);set_proto_data(40, 88, 2);end Метод проверки: начать новую игру или загрузить любой сейв, применить стимпак на игрока и на 1 криттера, затем начать отдых(время не важно, хватит и 10 мин) Ссылка на комментарий
Mr.Sталин Опубликовано 22 февраля, 2022 Поделиться Опубликовано 22 февраля, 2022 готовый скрип дай копилировать не хочу[pluspost=31 сек.]#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h"вот это вот фуфло случаем не глючит)я бы этим не пользовался. слишком громоздкие устаревшие конструкцииэто еще писалось при "ленине" годах так в 12х. Ссылка на комментарий
DeKRuS Опубликовано 22 февраля, 2022 Автор Поделиться Опубликовано 22 февраля, 2022 https://disk.yandex.ru/d/EnDc0YbxRsSUaQ вот скомпиленный можно уже не качатьМожет и в либе дело, не проверял без нее, без неё тоже выходит жоп) Ссылка на комментарий
DeKRuS Опубликовано 22 февраля, 2022 Автор Поделиться Опубликовано 22 февраля, 2022 Крч, я разобрался как именно получаются разные результаты, но уверен что точно не смогу понять причину) Вот так теперь выглядит проблемный скрипт:procedure start begin if (game_loaded) then begin set_pipboy_available(1); register_hook_proc(HOOK_RESTTIMER, rest); endendprocedure rest begin foreach (critter in list_as_array(0)) begin display_msg("critter=" + critter +" Pid=" + obj_pid(Critter)); endend и что же тут такое меняется если поменять значение SkipOpeningMovies? На примере Ф2 FE. Скрип выводит пид и указатель на объект-криттер(?) если не стоит пропуск мувиков/оконный режим.а это то же самое, но уже с включенным пропусков мувиков/оконным режимом. Оказалось что меняется "critter", точнее то что я даже не знаю как называется, указатель на обьект? Когда SkipOpeningMovies=2 или отключен hrp или включен оконный режим, то это число в "foreach (critter in list_as_array(0))" для НПЦ начинается с 5, а для игрока с 2.А когда SkipOpeningMovies=0/1, то это число в "foreach (critter in list_as_array(0))" для НПЦ и игрока начинается с 2, но у игрока оно всегда меньше(проверял всего по 4 раза в начальной деревне и 2 раза в кламате, считаю что проверок было мало, так что не исключено, что картина может меняться).от других показателей я такую зависимость не увидел.В неваде игрок начинется на 4, а НПЦ на 2, если SkipOpeningMovies=0/1. а когда SkipOpeningMovies=2, то игрок начинается на 2 и НПЦ тоже начинаются на 2(у меня игрок был меньше по номеру, стоял и с разных краёв карты и между нпц и добавлял других нпц, результат был такойже). Причем такая зависимость только с SkipOpeningMovies, другие значения в ddraw.ini не меняют начальную цифру. ( ну или недостаточно пристально проверял) - Так воооот это нормальное и ожидаемое поведение или это не совсем нормально и может помешать работе не только моего "васянского мода"? - И есть ли какая-то закономерность в том какой номер получит криттер когда пробегаешь по всем криттерам через "foreach (critter in list_as_array(0))"? Ссылка на комментарий
Mr.Sталин Опубликовано 22 февраля, 2022 Поделиться Опубликовано 22 февраля, 2022 Оказалось что меняется "critter", точнее то что я даже не знаю как называется, указатель на обьект?это (указатель на память где лежат данные криттера) и должно меняться, это не нужно выводить на экран или даже пихать в массивы если не временно (до выхода с карты).[pluspost=59 сек.]- И есть ли какая-то закономерность в том какой номер получит криттер когда пробегаешь по всем криттерам через "foreach (critter in list_as_array(0))"?по сути рандом, зависит от многих факторов, сколько у тебя свободной памяти.в общем значение неопределяются какими-то правилами. 1 Ссылка на комментарий
Nobi Опубликовано 22 февраля, 2022 Поделиться Опубликовано 22 февраля, 2022 по сути рандомКак мы видим, не совсем рандом. Может стоит добавить псевдорандомизацию принудительно для всех скриптовых указателей? Или наоборот причесать их чтобы были предсказуемы всегда. Херня это все, а не баг. 1 HQ/UHQ music for Fallout CrashMonitor v2.16 Ссылка на комментарий
DeKRuS Опубликовано 7 марта, 2022 Автор Поделиться Опубликовано 7 марта, 2022 Вернулся из отпуска и решил уже доделать эти скрипты) Мод на восстановление здоровья:- Добавлен бонусный перк "Регенерация", который автоматически добавляется игроку, если базовая "скорость восстановления" будет больше 5, позволяющий с шансом, зависящим от "скорости восстановления", исцелять травмы конечностей при тиках лечения, как в бою так и вне боя.- Изменена механика лечения Суперстимулятором.Суперстимулятор восстанавливает до 60 hp, при этом временно уменьшая "скорость восстановления" в зависимости от фактически восстановленого hp.Если количество лечения превышает доступную "скорость восстановления", то через минуту СС наносит урон.Урон от последействия СС теперь зависит от количества фактически восстановленного здоровья и доступной на момент применения "скорости восстановления". (если СС применен к существу без повреждений или с очень высокой "скоростью восстановления" и низкими повреждениями, то урон наносится не будет.)Также теперь Суперстимулятор лечит сломанные конечности(как игроку, так и НПЦ), при этом увеличивая штраф к "скорости восстановления", а следовательно и возможный урон от последействия, и немного снижая количество восстанавливаемых ХП, в зависимости от количества и вида травм.-Наличие трейта "Ускоренный метаболизм" увеличивает эффективность лечения и снижает штрафы накладываемые стимулятором и суперстимулятором.-Усилено воздействие скорости лечения на количество восстанавливаемого здоровья.- Добавлены "всплывающие цифры" с лечением над существом (лечение - зеленым цветом, урон от яда - красным, сумарный урон+лечение - синим)(только в режиме боя). Мод механики яда:- Добавлен перк "Консервация яда" доступный с 6 уровня и требующий науку 50+ либо навык натуралиста выше 70.Перк увеличивает количество максимально наносимого яда на оружие и количество применений ядовитой железы радскорпиона.Уменьшает шанс потерять стаки яда при атаке отравленным оружием и скорость потери стаков яда пока оружие не активно.Добавляет отравление при стрельбе боеприпасами для инъектора.- Добавлены "всплывающие цифры" с уроном ядом над существом (лечение - зеленым цветом, урон от яда - красным, сумарный урон+лечение - синим)(только в режиме боя). Прицельные промахи:Добавлена опция для изменения эффекта при атаке ножом в зависимости от анимации атаки (резать/колоть), работает как у игрока, так и у НПЦ:-Резать:уменьшает КБ цели на величину, равную (ловкость цели + (навык оружия ближнего боя атакующего/15)).По слабо бронированным целям взмах ножом с большей вероятностью нанесет максимальный урон, а не минимальный.-Колющая атака ножом:Пробивает часть DR и DT цели в зависимости от максимального урона ножа и бонусного урона в ближнем бою атакующего, а также увеличивает шанс критического удара в 1,5 раза от базового шанса(без учета бонуса от прицельных атак). 4 Ссылка на комментарий
DeKRuS Опубликовано 17 марта, 2022 Автор Поделиться Опубликовано 17 марта, 2022 4. Можно ли уменьшить длительность медикаментов ниже 1 игровой минуты(12 ходов)? любые дробные значения в duration_time не приводят к результатуСегодня заметил что при наличии трейта "Chem Resistant" минимальное действие препаратов на игрока становится 30 сек, если в прото файле или в скрипте прописано 1 мин, а значит должен быть способ уменьшить время ещё сильнее и возможно не только для игрока.Нигде не нашёл похожих тем, не на русском, не на англ. языке. В крючках, оригинальных скриптах Ф2 и оп кодах я тоже не нашёл ничего что могло объяснить как можно уменьшить время действия. Решил что плохо искал или это возможно где-то в движке прописано? Крч, кончилось тем что я уже второй час пытаюсь разобраться в ассемблере и там мало что понятно (видимо для этого надо быть программистом), но всё ж смог добиться минимальной длительности препаратов в 15 секунд вот таким очень как мне кажется страшным способом: В свой скрипт в HOOK_USEOBJON я написал такие строчки if read_int(0x479BD4) != 280509755 then begin write_int(0x479BD4,280509755); end if read_int(0x479BE8) != -288292236 then begin write_int(0x479BE8,-288292236); end if objpid == PID_STIMPAK then begin write_int(0x479BD4,read_int(0x479BEA )); write_int(0x479BE8,read_int(0x479BEA )); end если посмотреть на картинку то:вероятно по первому выделенному мной адресу(479BD4) происходит проверка является ли цель dude_objем (в скрипте при применении стимулятора строчка заменяется на значение зеленой строчки и это делит время действия на 2)затем заменяю значение по адресу второй красной строчки(479BE8) на тот же выделенный зелёным сдвиг в право и получаю уменьшение времени действия в 4 раза, с 1 минуты до 15 секунд.Ну, а если применятся не стимулятор, а любой другой предмет, то этим адресам, если они были изменены, возвращается их исходное значение. А теперь вопросы)1.Можно ли так использовать "write_int" или это очень опасно? я видел как переписывают значения в "Pure data", а вот для "Pure code" в чужих скриптах я примеров не нашёл.2.Как узнать или просчитать все возможные осложнения такого метода?3.Есть ли другие, более простые способы уменьшить минимальное время действия препаратов? А ещё я опять не смог подружится со старым Hi Res патчем)Когда включен туман войны то при использовании команды critter_dmg цель в половине случаев становится нивидимой до конца анимации урона/смерти. Может кто знает как такое исправить приключённом тумане? phobos2077 в 2014 году задавал такой же вопрос, но на eng форуме ему не ответили. Ссылка на комментарий
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти