Artos 99 Опубликовано 5 Апреля 2011 Поделиться Опубликовано 5 Апреля 2011 (изменено) Zander_driver, теперь немного попонятнее из какой области твой вопрос и куда стоит 'копать'. Несложно найти, что clsid у подобных разрушающихся ящиков и пр. (секция из конфига [physic_destroyable_object]) - P_DSTRBL / clsid.obj_phys_destroyable. Если среди подобных объектов встречаются не нужные тебе - придется фильтровать по маскам имени. С "ящиками поменьше" (т.е. железными и иже ...) посложнее тебе будет (clsid.inventory_box), т.к. коллбэк на хит или разрушение для них не обрабатывается. Логика (точнее секция 'drop_box') - подразумевает обработку данного объекта схемой 'xr_box.script' и конечно же подразумевает что-то дропить ... Но(!) ни что не мешает замутить что-то типа 'фейк-дропа', т.е. спавн фейкового предмета или даже спавн 'ничего'. Ведь даже изначально секция дефолтного спавна подразумевает спавн предметов в кол-ве 0. Запретив рандомный спавн (по какой-дибо метке/признаку/условию/...), можно получить просто всегда разрушаемые ящики без спавна. И все же стОит помнить, что включение объектов в обработку различными биндераит/схемами - расходование ресурсов. Мелочовкой можно пренебречь, но ... море состоит из капель и не следует об этом забывать и увлекаться ... Изменено 5 Апреля 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Zander_driver 10 333 Опубликовано 5 Апреля 2011 Поделиться Опубликовано 5 Апреля 2011 Можно конечно и не увлекаться. Но, если уж основная часть урона, наносимого оружием, высчитывается скриптом а не движком - а у меня именно так - то приходится А то получается, ящик в котором что-то есть, разваливается с 2 пуль ПМ, а ящик в котором ничего нет - не разломать и за 10, При том что внешне они выглядят абсолютно одинаково и игрок может изначально и не знать, в каком из них что-то есть. Спасибо за ответы буду размышлять над разными вариантами. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Artos 99 Опубликовано 5 Апреля 2011 Поделиться Опубликовано 5 Апреля 2011 (изменено) Svoboда При прописывании своего НПС в all.spawn'е ты допустил ошибку НЕ указав ничего про 'smart_terrains', а только указал наличие секции. Дополни пустую секцию до: [smart_terrains] none = true и тогда твой НПС не будет попадать под гулаги, получая там иную работу, чем ты ему предписываешь. Или же можешь включить 'свое патрулирование' в работы (например ближайшего к точкам) гулага, обусловив 'именно для твоего НПС', и пусть патрулирует, заодно и может чего еще надумаешь в контексте гулага (не все ж ему разгуливать ...). --- Zander_driver ИМХО, схожесть визуалов далеко не основной критерий одинаковости для разрушения. Важна точка приложения силы, а не столь сама сила и уж конечно же не внешний вид. Для меня, например, более странным будет, если каждый ящик будет разрушаться всегда с одного и того же кол-ва выстрелов (если более 1). Но это уже лирика пошла ... :-) Изменено 5 Апреля 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Zander_driver 10 333 Опубликовано 5 Апреля 2011 Поделиться Опубликовано 5 Апреля 2011 Теперь еще один вопрос, уже не от меня, а.. от нашего квестовика. У менє проблема. Facepalm.gif . создал гулаг..но не могу его проверить тк игра зависает после нескольких минут игры dry.gif (максимум 1,5).. Зависает с таким логом: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...r. - shadow of chernobyl\gamedata\scripts\amk.script:1795: attempt to index local 'respawner' (a function value) stack trace: Не могу раздуплить.. этот скрипт я даже не трогал. unsure.gif . но когда попытался изменить данные о респауне сталкеров то ничего не изменилось.. Я конечно пытался сам разобраться, но все что смог понять - что это какая то сложная скриптовая система управления спавном нпс, из амк, и ей чем то не нравится то как наш квестовик создает гулаг. Вобщем, я конечно понимаю что информации маловато... но сам не располагаю. Надеюсь на подсказки, в какую сторону копать, где может быть причина вылета. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Artos 99 Опубликовано 5 Апреля 2011 Поделиться Опубликовано 5 Апреля 2011 (изменено) Zander_driver Задавая вопрос озаботься тем, чтобы предоставить достаточную информацию для ответа. Упомянутый в логе 'amk.script' явно отличен от оригинального (из чистого АМК) и далее только погадалки предстоят ... В таких случаях стОит предоставлять 'неизвестный' скрипт или хотя бы ссылку на 'где его увидеть можно' (может кто и поможет ...). Лог ошибки говорит, что переменная/аргумент 'respawner' в 1795-ой строке является функцией, а от нее хотят нечто иное. В АМК-моде это должен быть объект (юзердата класса "se_respawn"). Не помню достаточно точно всего амк-алгоритма респавна, могу только предположить, что кто-то накосячил в 'se_respawn.script', в коем и организован амк-контроль за респавном объектов (неписи/монстры) и вызов из 'amk.script' перевода объекта в он(офф)лайн. Если ваш квестовик оперирует своими неписями/монстрами (не прописанными в конфигах респавна) и они у него ... исчезают - то пусть не методом тыка ковыряет скрипты. Это не конфиги с цифирьками, нахрапом тут не пройдет. Варианта два: а) отключать мешающий амк'шный контроль или б) корректно прописывать своих неписей/монстров в конфиги респавна (благо примеров предостаточно). Изменено 5 Апреля 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
RayTwitty 492 Опубликовано 8 Апреля 2011 Поделиться Опубликовано 8 Апреля 2011 Zander_driver, возможно стоит посмотреть еще и это: http://www.amk-team.ru/forum/index.php?s=&...st&p=451270 Это правка по аналогичному вылету в Солянке. Может поможет... Ссылка на комментарий
Arhara 32 Опубликовано 8 Апреля 2011 Поделиться Опубликовано 8 Апреля 2011 Artos, У него - 100% косяк в написании гулага. Если гулаги, прописанные в данном гулажном скрипте (при условии, что это не индивидуальный скрипт) не разбредаются и новый гулаг спавнится без кондишена - 100% ошибка в алл спавне. Если неписи разбредаются - это ошибка прописи в скрипте. При иных вариантах - вылет в винду. Если не прописан смарт - да, непися засосёт в свободный гулаг на любой локе, пусть она буде даже через полЗоны. Но иногда - можно сделать спецом такую ошибочку - и непись как Семецкий будет таскаться по зоне - в любом направлении. Если назначить такому гулаг - он рано или поздно осядет навсегда в последнем смарте. Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка Ссылка на комментарий
strelok200 0 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 Я создал нпц а они сидят и не встают.Какую логику им нужно написать чтобы они не садились? :ny_ph34r_1: Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
=VENOM= 50 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 Создал - это хорошо. А под какой схемой логики они "не встают"? Они walker'ы? Camper'ы? Или сидят вокруг костра? Что прописано у них в путях в all.spawn (анимации)? Ссылка на комментарий
ZeeK 57 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 Приветствую всех, возник вопрос: может ли быть такая функция и как она будет выглядеть? Проверка-обьект ли пси пес Если да то есть у него в радиусе собаки Если есть + им к урону и скорости? Не соответствует. N6260 Ссылка на комментарий
strelok200 0 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 Я прописал им простую логику: [logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true Но когда они встречают врагов они приседают и начинают стрелять а потом не встают Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
AKKK1 6 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 strelok200 [logic] active = walker [walker] path_walk = ....._...... (полное наименование точки пути wAy в ал спавне) это самое простое остальные параметры будут использованны по умолчанию. Ссылка на комментарий
Zander_driver 10 333 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 (изменено) ZeeK Функция такая может быть, но выглядеть будет сложно. 1. Проверка-обьект ли пси пес - я так понял, имеется в виду является ли объект определенной разновидностью моба. Если у него нет разных профилей, то просто по его секции можно опознать. Если профили разные, то наподобие этого: if string.find(self.object:section(),"chimera") then 2. Если да то есть у него в радиусе собаки - перебор всех объектов на уровне, с аналогичной проверкой - является ли объект собакой (а у них профили разные). Если является, узнаем дистанцию local chimera_dist = nte:position():distance_to(self.object:bone_position("bip01_spine")) тут вместо nte надо будет подставлять объект пси пса. Дальше начинается более муторная часть... вышеуказанными способами получится отобрать набор объектов, являющихся собаками и расположенных на нужной дистанции от пси-собаки. запихиваем их в список (лучше записывать их id). список лучше объявить вне функций, чтобы к нему могли обращаться другие функции, а не только та что его создала. 3. Если есть + им к урону и скорости? насчет скорости не могу ничего придумать, а насчет урона можно. В хит-коллбэк всех объектов, которых могут кусать собаки (актор, нпс, мобы) - вводим проверку, кто нанес хит - не обнаружится ли его ид в списке "усиленных собак". Если да, то наносим пострадавшему от собаки дополнительный хит скриптом. local ch_h = hit() ch_h.impulse = 50 ch_h.draftsman = self.object ch_h.direction = vector():set(1,0,0) --ch_h:bone("bip01_spine") -- хитовать будет и без указания костей ch_h.power = 0.85 ch_h.type = hit.wound nte:hit(ch_h) При желании величину хита можно высчитывать в зависимости от "родной" атаки собаки, которую можно прочитать в ее конфиге по ее же секции ltx. Вот как то таким образом. Вопросик у меня созрел. пустяковый, но терзающий. методом alife():create("все что полагается") можно ли спавнить объекты за пределами онлайн-радиуса? Изменено 9 Апреля 2011 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
KD87 718 Опубликовано 9 Апреля 2011 Поделиться Опубликовано 9 Апреля 2011 (изменено) Zander_driver, ну фантом ли объект определяется гораздо проще: local obj_clsid == self.object:clsid() if obj_clsid == clsid.psy_dog_phantom_s then Являются ли окружающие неписи собаками также очень просто проверяются по clsid. С помощью alife():create() можно спавнить вне онлайн-радиуса, да. Изменено 9 Апреля 2011 пользователем KD87 Ссылка на комментарий
SEA_CAT 106 Опубликовано 10 Апреля 2011 Поделиться Опубликовано 10 Апреля 2011 (изменено) Я прописал им простую логику: [logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true Но когда они встречают врагов они приседают и начинают стрелять а потом не встают Это "не логика", такую я обычно использую только для тестов (так как при малейшей опасности НПС теряют управление прописанное в remark1 и переходят на пародию "универсального комбата"). Поэтому, ты определись чего от них хочешь (патруль - walker или снайпер - camper) и можешь им прописать в кастомдате эти "универсальные для всех локаций" (только снайпер там одноразовый - из расчёта, что ты всё же дашь ему бой при первой встрече иначе вставляй ему свои пути path_walk = ... path_look = ... ) 1. Патруль который при виде врага или друга сперва говорит по рации (в зависимости от дистанции) и после атакует (бывает сразу): [logic] active = remark@raciya danger = danger_condition meet = meet [remark@raciya] anim = backoff2 snd = killer_vrag_enemy no_move = true target = actor meet = meet@raciya on_signal = sound_end| walker@patrol danger = danger_condition [meet@raciya] meet_state = 35|guard_rac@killer_vrag_enemy meet_state_wpn = 45|guard_rac@killer_vrag_enemy victim = 35|actor victim_wpn = 35|actor use = true use_wpn = true meet_dialog = escape_lager_guard_start_dialog [walker@patrol] path_walk = bar_dolg_veterans_guard_bunker_1_walk path_look = bar_dolg_veterans_guard_bunker_1_look def_state_moving1 = patrol_fire def_state_moving2 = patrol_fire def_state_moving3 = patrol_fire on_info = {=npc_distance_to_waypoint(bar_dolg_veterans_guard_bunker_1_walk:60)} nil danger = danger_condition show_spot = false ;true [danger_condition] ignore_distance_corpse = 0 ignore_distance = 0 [smart_terrains] none = true 2. Снайпер (сидячий-стоячий), тоже при виде врага говорит по рации (от дистанции к цели), затем атакует - да и постоянно держит ГГ на мушке [smart_terrains] none = true [logic] active = remark@start combat_ignor = combat_ignore meet = meet [remark@start] no_move = true radius = 0 anim = hide snd = cit_jail_guard_sneer target = actor ;on_info = {=health_le(0.5)} remark@search ;on_timer = 80000| remark@search on_signal = sound_end| remark@search wounded = wounded@work meet = meet danger = danger_condition [remark@search] anim = hide target = actor on_info = {=see_actor} camper@snyper wounded = wounded@work [meet] meet_state = 28|hide_s_left@wait| 4|hide_s_right@wait meet_state_wpn = 28|hide_rac@mil_ara_ambush victim = 28|actor victim_wpn = 28|actor use = true use_wpn = true meet_dialog = escape_lager_guard_start_dialog [wounded@work] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false [camper@snyper] path_walk = mil_zomb_stalker_walk1 path_look = mil_zomb_stalker_look1 sniper = true def_state_moving = assault def_state_campering = hide_na ;threat_na def_state_campering_fire = threat_sniper_fire radius = 60 no_retreat = true shoot = always danger = danger_ignore show_spot = false ;true [combat_ignore] combat_ignore_cond = {!actor_enemy} combat_ignore_keep_when_attacked = false [danger_ignore] ignore_distance = 5 [danger_condition] ignore_distance_corpse = 0 ignore_distance = 0 Изменено 10 Апреля 2011 пользователем SEA_CAT Ссылка на комментарий
strelok200 0 Опубликовано 10 Апреля 2011 Поделиться Опубликовано 10 Апреля 2011 А какую логику прописать торговцу? Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
=VENOM= 50 Опубликовано 10 Апреля 2011 Поделиться Опубликовано 10 Апреля 2011 strelok200, в секции [logic] указывают обычно: inv_max_weight = 10000 trade = <путь к конфигурационному ltx-файлу настроек торговли NPC> И укажи в профиле непися минимальное и максимальное кол-во денег у торговца. И чтобы у NPC деньги не заканчивались, укажи там же infinitive = "1". Ссылка на комментарий
TRAMP14 1 Опубликовано 10 Апреля 2011 Поделиться Опубликовано 10 Апреля 2011 Как можно скриптом "вскрыть" ltx файл? Я смотрел примеры но чтото так и не понял. Мне надо чтото вроде "предмет" = "x", "y", "z", "lv", "gv" = "вероятнось". Такое можно устроить вообще? Если да то как? Ссылка на комментарий
Garry_Galler 7 Опубликовано 10 Апреля 2011 Поделиться Опубликовано 10 Апреля 2011 Пример скрипта, который парсит ltx файл и выбирает случайные строчки: --//-- парсим файл со списком хабара function parse_list() local ini = ini_file("misc\\items_link.ltx") if not ini then ini=system_ini() end if ini:section_exist("generic_list") then local n = ini:line_count("generic_list") local key = math.random(0,n-1) local result, item, num = ini:r_line("generic_list",key,"","") return item, num end end пример файла, из которого читаются данные [generic_list] af_dummy_pellicle = 0.3 af_dummy_battery = 0.3 af_dummy_dummy = 0.3 af_dummy_spring = 0.3 af_fuzz_kolobok = 0.3 wpn_addon_scope = 0.4 wpn_addon_scope_susat = 0.4 wpn_addon_silencer = 0.4 wpn_addon_grenade_launcher = 0.4 wpn_addon_grenade_launcher_m203 = 0.4 novice_outfit = 0.2 bandit_outfit = 0.2 killer_outfit = 0.2 monolit_outfit = 0.2 soldier_outfit = 0.2 Методы чтения ltx описаны в справочнике malandrinus'a с предельно простыми и понятными примерами. ЗЫ:а вот все это - "предмет" = "x", "y", "z", "lv", "gv" = "вероятнось" - гораздо проще засунуть в обычный lua-массив. И не лазить ни в какие ltx. Ссылка на комментарий
midichs 1 Опубликовано 11 Апреля 2011 Поделиться Опубликовано 11 Апреля 2011 Помогите пожалуйста поменять точки переходов местами(на одной локе) : меняю координаты в вейе- на карте точки меняются а в алайф- остается также, может что-то еще нужно поменять? или так нельзя? Спасибо. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти