Foxx Опубликовано 25 января, 2022 Поделиться Опубликовано 25 января, 2022 совсем старым под дос. если в скрипте нет sfall функций.или руками это все можно выправить.Я пробовал проблемный скрипт (depolva.int) декомпилировать из новых версий RPU от Бёрна, а обратно он не компилируется. Возможно ошибка при декомпиляции происходит? А, как ручками поправить?))) Ссылка на комментарий
Mr.Sталин Опубликовано 25 января, 2022 Поделиться Опубликовано 25 января, 2022 Я пробовал проблемный скрипт (depolva.int) декомпилировать из новых версий RPU от Бёрна, а обратно он не компилируется. Возможно ошибка при декомпиляции происходит? А, как ручками поправить?)))ну удалить и вместо этого правильно написать)))дай проблемные скрипты не декомпилированные я исправлю. Ссылка на комментарий
Foxx Опубликовано 26 января, 2022 Поделиться Опубликовано 26 января, 2022 дай проблемные скрипты не декомпилированные я исправлю.На вскидку не вспомню, посмотри вот эти два: Ссыль В hs_ondeath.int ругается на cell Ссылка на комментарий
DeKRuS Опубликовано 26 января, 2022 Автор Поделиться Опубликовано 26 января, 2022 На вскидку не вспомню, посмотри вот эти два: Ссыль В hs_ondeath.int ругается на cellВ hs_ondeath.int он рассматривает имя процедуры "ceil" как математическую функцию sfall, простое переименование в "ceil1" конечно позволяет скомпилится скрипту, но может потом приведет к каким проблемам. А вообще сама процедура ceil в этом скрипте это и есть получение округленного вверх числа через функцию floor и по большому счету нафиг не нужна, как мне кажется. а скрипт сильно старый? может он был написан когда в sfall ещё небыло округления в верх? В скрипте depolva какаято херня с "for (/* O_NOOP */; bot_rebuild_count < 17; bot_rebuild_count := bot_rebuild_count + 1)" , заменить это дело на: while (bot_rebuild_count < 17) do beginспавн ботови в самом конце:bot_rebuild_count := bot_rebuild_count + 1; по идеи должно работать) Вот ссылка на твои теперь компилирующиеся декомпилированные скриты) 1 Ссылка на комментарий
Foxx Опубликовано 26 января, 2022 Поделиться Опубликовано 26 января, 2022 а скрипт сильно старый? может он был написан когда в sfall ещё небыло округления в верх?15 года примерно, но раньше он нормально компилировался и декомпилировался. А на новых версиях sFallScriptEditor уже проблемы. Ссылка на комментарий
DeKRuS Опубликовано 26 января, 2022 Автор Поделиться Опубликовано 26 января, 2022 У меня тут затык с set_fake_perk_npc. Как-то можно их добавить НПЦ которые не сопартийцы? без такого: hs_combatdamageif dmgToTarget > 0 then begin party_add(target);set_fake_perk_npc(target,.,.);party_remove(target);critter_add_trait(target, TRAIT_OBJECT, OBJECT_TEAM_NUM, original_TEAM)); end Может там планируют в след обновлении сфалла "set_fake_perk_npc" для всех криттеров сделать?) Просто вариант с настоящими перками critter_add_trait(target, 0, Х, 1); добавляет перк не только целям но и игроку причем в количестве равном (кол-во целей + 1) ну, если нет, то нет( Ссылка на комментарий
Mr.Sталин Опубликовано 27 января, 2022 Поделиться Опубликовано 27 января, 2022 while (bot_rebuild_count < 17) do begin спавн ботов и в самом конце: bot_rebuild_count := bot_rebuild_count + 1;или как и было for (bot_rebuild_count = 0; bot_rebuild_count < 17; bot_rebuild_count++) then begin ... добавлено через 34 сек.Может там планируют в след обновлении сфалла "set_fake_perk_npc" для всех криттеров сделать?)нет не планируется, потому что нельзя это делать.добалять фак для обычного NPC (как ты делашь через черный обходной путь), вроде проблемы потом могут возникнуть.Надо глянуть, какие последствия будут добавлено через 43 сек.Просто вариант с настоящими перками critter_add_trait(target, 0, Х, 1); добавляет перк не только целям но и игроку причем в количестве равном (кол-во целей + 1)это всегда добавляет перк к игроку если цель-NPC не является партийцем. и то у партийцев перки неработают. Ссылка на комментарий
DeKRuS Опубликовано 2 февраля, 2022 Автор Поделиться Опубликовано 2 февраля, 2022 Хотел при помощи tile_in_tile_rect разбить зоны вокруг целей на подходящие для прицеливания по определенным конечностям, но в итоге сделал через rotation_to_tile 1.Почему при сторонах прямоугольника 11 и больше(а иногда даже и меньше) "tile_in_tile_rect(ul,ur,ll,lr,x)" проводит проверку не по всей площади прямоугольника, а лишь на диагоналях выходящих из углов и на самих углах? ( если сторона меньше 9 то проверка проходит по всей площади прямоугольника, а не только на пересечениях линий выходящих из углов) или это так и работает?) примерные участки проверки отмечены полосками 2. Можно как-то получить номер тайла над или под целью не делая такую громоздкую конструкцию? "tile_num_in_direction(tile_num_in_direction(tile_num(target), 5, 1), 0 , 1 )" (тут он под номером 4) [pluspost=48 сек.]нет не планируется, потому что нельзя это делать.добалять фак для обычного NPC (как ты делашь через черный обходной путь), вроде проблемы потом могут возникнуть.Надо глянуть, какие последствия будут Пока что проблемы были только с тем что иногда! убегающие криттеры теряли враждебность, да и к тому же проверка на наличие фак перков идет только у тех кто в пати. ( но вылетов не наблюдалось)Так что нафиг эту идею) Ссылка на комментарий
Mr.Sталин Опубликовано 2 февраля, 2022 Поделиться Опубликовано 2 февраля, 2022 1.Почему при сторонах прямоугольника 11 и больше(а иногда даже и меньше) "tile_in_tile_rect(ul,ur,ll,lr,x)"не разу не пробывал данную, функцию (или пробовал но лет наверное 10-15 назад)там вроде как написано начало с нижнего левого угла и почасовой стрелке. 2. Можно как-то получить номер тайла над или под целью не делая такую громоздкую конструкцию?неа.была/есть в планах добавить функцию для получения гекса по X/Y координатам, но пока не хватает времении ее родить. 1 Ссылка на комментарий
Mr.Sталин Опубликовано 2 февраля, 2022 Поделиться Опубликовано 2 февраля, 2022 возможно получить математически:получаем X и Y цель_гекс / 200 = Y цель_гекс % 200 = X теперь чтобы получить требуемый гекс делаем такY -/+24 или X -/+32 (взависимости от направления)потом так: Y*200 + X = гекс 1 Ссылка на комментарий
Mr.Sталин Опубликовано 2 февраля, 2022 Поделиться Опубликовано 2 февраля, 2022 "tile_in_tile_rect(ul,ur,ll,lr,x)" проводит проверку не по всей площади прямоугольника, а лишь на диагоналях выходящих из углов и на самих углах? ( если сторона меньше 9 то проверка проходит по всей площади прямоугольника, а не только на пересечениях линий выходящих из углов) или это так и работает?)поковырялся в двиге более тщательно, вобщем порядок у функции такой:tile_in_tile_rect(верхний_левый, верхний_правый, нижний_левый, нижний_правый, , x )отмеченные курсивом углы вообще не проверяются движком (смыла нет их проверять).так что функция нормально работает и проверяет, только по наркомански углы задаются.И я из твоего описания/картинки ничего непонял, что у тебя там по диагонали проверяет. 1 Ссылка на комментарий
Mr.Sталин Опубликовано 3 февраля, 2022 Поделиться Опубликовано 3 февраля, 2022 update 2 Ссылка на комментарий
DeKRuS Опубликовано 3 февраля, 2022 Автор Поделиться Опубликовано 3 февраля, 2022 поковырялся в двиге более тщательно, вобщем порядок у функции такой: tile_in_tile_rect( верхний правый, верхний левый, нижний правый, нижний левый, x )отмеченные курсивом углы вообще не проверяются движком (смыла нет их проверять).так что функция нормально работает и проверяет, только по наркомански углы задаются.И я из твоего описания/картинки ничего непонял, что у тебя там по диагонали проверяет. Я сам не понял что за фигня у меня выходила, а после твоего ответа решил что надо получше разобраться.Набросал на ночном дежурстве идею скрипта на листочке, что бы работа функции стала для меня нагляднее. Суть скрипта и он сам под спойлером: //скрипт при помощи англ. клавиши "К" первым нажатием устанавливает верхний левый угол(и спавнит в //нём стимулятор), вторым нажатием верхний левый(бутылка), третьим - нижний левый (бутылка), 4-ым - //нижний правый(стимулятор)//пятое нажатие спавнит гранаты на всех тайлах входящим в зону проверки(возвращают true) и ещё//обнуляет углы для повторной разметки прямоугольника. #include "define_extra.h"#include "define_lite.h"#include "dik.h" variable corners:=0; variable ul := 0; variable ur := 0; variable ll := 0; variable lr := 0; procedure start;procedure keypress; procedure start begin if game_loaded then begin set_global_script_type(0); set_global_script_repeat(0); register_hook_proc(19, keypress); display_msg("tile_in_rect" ); endend procedure max(variable x, variable y) begin if (x > y) then return x; return y;end procedure min(variable x, variable y) begin if (x < y) then return x; return y;end procedure keypress begin variable event:=get_sfall_arg; variable key:=get_sfall_arg; variable max0 := 0; variable min0 := 0; variable tile_in_rect := 0; if event == 1 then begin if key == DIK_K then begin if corners < 4 then begin if corners == 0 andAlso ul == 0 then begin ul := tile_under_cursor; display_msg("ul"+ ul ); create_object(40, tile_under_cursor, dude_elevation); end if corners == 1 andAlso ul != 0 andalso ur==0 then begin ur := tile_under_cursor; display_msg("ur"+ ur ); create_object(125, tile_under_cursor, dude_elevation); end if corners == 2 andAlso ul != 0 andalso ur!=0 andAlso ll==0 then begin ll := tile_under_cursor; display_msg("ll"+ ll ); create_object(125, tile_under_cursor, dude_elevation); end if corners == 3 andAlso ul != 0 andalso ur!=0 andAlso ll!=0 andAlso lr==0 then begin lr := tile_under_cursor; display_msg("lr"+ lr ); create_object(40, tile_under_cursor, dude_elevation); end corners+=1; end else begin max0 := MAX(MAX(ul, ur), MAX(ll, lr)); min0 :=MIN(MIN(ul, ur), MIN(ll, lr)); tile_in_rect := min0; while tile_in_rect < max0 do begin if tile_in_tile_rect(ul, ur,ll, lr, tile_in_rect) then create_object(26, tile_in_rect, dude_elevation); tile_in_rect+=1; end corners := 0; ul := 0; ur := 0; ll := 0; lr := 0; end end endend Выяснилось что движок проверяет верхний правый и нижний левый углы, но только расстояние между ними (ну, еще расстояние между ними и центром линии соединяющий 2 другие вершины), на их расположение реально всё равно(!) и это расстояние потом используется для расчёта ширины прямоугольника. И да, сам прямоугольник рисуется между A и В tile_in_tile_rect( А, верхний левый, нижний правый, В, x ) и В должен располагаться правее (на экране) чем А. 1. максимальная ширина(макс. расстояние между верх-прав и ниж-лев углами(бутылки). 2.минимальная ширина(с обеих сторон). 3. минимальная ширина снизу, максимальная ширина сверху. Извиняюсь за такой пиксель хантинг, ибо там разница ширины величиной в один ряд сверху и/или снизу. Крч, немного не то что я хотел от этой функции P.S. И спасибо тебе, прям, ОГРОМНОЕ за то, что помогаешь в таком разобраться! 1 Ссылка на комментарий
Mr.Sталин Опубликовано 3 февраля, 2022 Поделиться Опубликовано 3 февраля, 2022 Выяснилось что движок проверяет верхний правый и нижний левый углы, но только расстояние между ними (ну, еще расстояние между ними и центром линии соединяющий 2 другие вершины), на их расположение реально всё равно(!) и это расстояние потом используется для расчёта ширины прямоугольника. И да, сам прямоугольник рисуется между A и В tile_in_tile_rect( А, верхний левый, нижний правый, В, x ) и В должен располагаться правее (на экране) чем А. Незнаю с чего ты взял что там что-то измеряется, в движке стоит одна единственная проверкакоординатов X-гекса и точек A/B if ( T.x <= верхний_левый.x && T.x >= нижний_правый.x && T.y >= верхний_левый.y && T.y <= нижний_правый.y ) { rvalue = 1; // T-гекс в прямоугольнике A B } проверил твой скрип все правильно работает.по всякому пробывал и всегда правильно проверяет прямоугольник.непонятно в чем у тебя была трабла. 1 Ссылка на комментарий
DeKRuS Опубликовано 3 февраля, 2022 Автор Поделиться Опубликовано 3 февраля, 2022 Незнаю с чего ты взял что там что-то измеряется, в движке стоит одна единственная проверка координатов X-гекса и точек A/BДа это всё по глупости) только сейчас понял что мой способ проверки САМ учитывал два других угла, а не движ (facepalm). Ещё раз всё попробовал, но уже с подправленным скриптом и конечно же в игре учитываются только верхний_левый и нижний_правый углы. непонятно в чем у тебя была трабла.Изначально проблема была в недостатке моих знаний. Я подумал что прямоугольник строится по всем 4 углам и может быть любой симметричной формы и в итоге у меня получилось вот такое: Я задал углы двум прямоугольникам, один внутри другого. Но я не знал что каждый из них получился толщиной в 1 гекс, и в итоге tile_in_tile_rect, выдавал true в раномных(как мне казалось) тайлах и то только по диагоналям, ну и я решил что фигня какаято с функцией, а оказалось что это со мной беда Ссылка на комментарий
Mr.Sталин Опубликовано 4 февраля, 2022 Поделиться Опубликовано 4 февраля, 2022 Понятно. А что значит прицельные промахи?) Ссылка на комментарий
DeKRuS Опубликовано 4 февраля, 2022 Автор Поделиться Опубликовано 4 февраля, 2022 "Прицельные промахи" - ничего интересного, просто это крик души, когда прицеливаясь в глаза с 95% меткости, 2 выстрела подряд промахиваются, а на 3й раз оружие взрывается к херам!Вот потому и обозвал так простой скрипт который восстанавливает справедливость)Он с небольшой(до 5%) вероятностью переводит промах при прицельном выстреле в попадание по соседней части тела. Ссылка на комментарий
Mr.Sталин Опубликовано 4 февраля, 2022 Поделиться Опубликовано 4 февраля, 2022 Стрельба по соседям при промахе, хорошая задумка. :-) Ссылка на комментарий
DeKRuS Опубликовано 6 февраля, 2022 Автор Поделиться Опубликовано 6 февраля, 2022 Решил более "реалистично"(но еще не идеально) обрисовать зоны для прицеливания по глазам и паху.А также добавил площади для зоны в которой при промахе может быть выбрана новая случайная цель для получения урона от проджектайла. На скриншоте под спойлером сравнение предыдущей версии с новой. Черной линией ограничена зона для прицельных попаданий в глаза и пах. Зона перед, вокруг и за целью между красными линиями отображает зону в которой пролетевший мимо снаряд может задеть случайную цель(зависит от расстояния до начальной цели, чем ближе к изначальному целевому существу - тем шире конус, чем дальше, тем он сильнее сужается) Ссылка на комментарий
DeKRuS Опубликовано 16 февраля, 2022 Автор Поделиться Опубликовано 16 февраля, 2022 Обновил скрипты исправил баги и добавил пару новых фич. Отравление/регенерация:- Исправлена ошибка, из-за которой персонаж умирал при входе на глобальную карту, если базовая скорость восстановления была увеличена до более чем 5 при помощи save editora.- Исправлена ошибка, приводившая к гибели сопартийцев при выходе на глобальную карту, если они находились под действием стимпака после загрузки игры.- Изменено поведение урона от яда и регенерации сопартийцев. Пока игрок не выйдет на глобальную карту сопартийцы будут восстанавливать здоровье и получать урон от яда в реальном времени, а не как раньше получать весь урон и восстанавливать все жизни при перемещении между локальными картами. Прицельные промахи:- Добавлен включаемый/отключаемый шанс попасть по соседним частям тела при успешном не прицельном попадании. 70% в тело, 11% в ноги, 9% в руки, пах - 7%, голова - 3% (и 2% из этих 3% попадут в глаза, если цель будет стоять лицом к атакующему). Ссылка на комментарий
Mr.Sталин Опубликовано 16 февраля, 2022 Поделиться Опубликовано 16 февраля, 2022 шанс попасть по соседним частям тела при успешном не прицельном попаданиинемного ломает концепцию. для этого и были придуманы прицельные выстрелы.такая механика хороша для перка. попадут в глаза, если цель будет стоять лицом к атакующемуконкреный просчет дизайнеров оригинального движка, ведь нельзя попасть в глаза если цель стоит задом) Ссылка на комментарий
Pyran Опубликовано 16 февраля, 2022 Поделиться Опубликовано 16 февраля, 2022 конкреный просчет дизайнеров оригинального движка, ведь нельзя попасть в глаза если цель стоит задом)в область на уровне глаз.А на счет осечек не думали? Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Помогая другим, не забывай о себе =) Ссылка на комментарий
Mr.Sталин Опубликовано 16 февраля, 2022 Поделиться Опубликовано 16 февраля, 2022 в область на уровне глаз.прострел черепа со спины с попаданием в глаз?)или облет вокруг черепа)) Ссылка на комментарий
Pyran Опубликовано 16 февраля, 2022 Поделиться Опубликовано 16 февраля, 2022 прострел черепа со спины с попаданием в глаз?)или облет вокруг черепа))первый вариант ближе, стрельба по тыкве в затылок на уровне глаз Fallout 2: Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP Nevada Band: Путеводитель по играм серии | FAQ Fallout Tactics: Путеводитель по модам | FAQ База Данных: YD\YD\MF Помогая другим, не забывай о себе =) Ссылка на комментарий
DeKRuS Опубликовано 17 февраля, 2022 Автор Поделиться Опубликовано 17 февраля, 2022 немного ломает концепцию. для этого и были придуманы прицельные выстрелы. такая механика хороша для перка.И баланс тоже страдает, особенно с фаст шотом, поэтому это включается отдельно. И вообще это больше для врагов дополнение, а то у них ни меткости, ни интеллекта для обычных прицельных выстрелов) первый вариант ближе, стрельба по тыкве в затылок на уровне глазВсё равно не то. Вот если бы при стрельбе в затылок с прицелом по глазам применялся бы крит. шанс и крит. таблица как при стрельбе в голову, но с доп. шансом ослепить, тогда претензий бы не было, как и этого мода) Кстати, может кто из вас знает есть ли всё таки разница в статах(дамаг, меткость, крит) между анимацией swing/thrust у ножей? или может кто уже сделал мод с такими изменениями? Ссылка на комментарий
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти