Dennis_Chikin 3 658 Опубликовано 5 Января 2018 Поделиться Опубликовано 5 Января 2018 function CSurgeManager:play_siren_sound() local snd_obj=self.blowout_sounds["siren"] В таком виде "извне" уже недоступно. Править саму функцию. А поскольку сделано "псевдообъектом" - то еще и его куда-то вытягивать. Проще написать свое. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
vampirnik77 121 Опубликовано 5 Января 2018 Поделиться Опубликовано 5 Января 2018 Есть способ отловить какой скрипт вызывает вылет? Адаптирую улучшенный ai к правленому движку, ловлю вылет, раньше такого не видел. Скрытый текст FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : ..\xrServerEntities\script_storage.cpp [error]Line : 540 [error]Description : game_object:id() threw an exception Официальная страница проекта Neof-One Crew Ссылка на комментарий
Malandrinus 615 Опубликовано 6 Января 2018 Поделиться Опубликовано 6 Января 2018 15 hours ago, vampirnik77 said: разве эти два условия не равносильны? Строго говоря, эти условия не равнозначны. Однако, второе является избыточным, так как либо равно true (и таким образом не влияет на результат вне зависимости от значения p[2]), либо совпадает с первым, когда p[2] равно nil (поскольку в этом случае p[2] эквивалентно false), и соответственно тоже не влияет на результат. Зачем это сделано трудно предположить. Версия, что автор этого кода не знал об особенностях Lua и перестраховывался отпадает, поскольку избыточное условие стоит вторым и значит проверяется после первого и значит никак не страхует от проверки в первом условии потенциального значения nil. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Malandrinus 615 Опубликовано 6 Января 2018 Поделиться Опубликовано 6 Января 2018 5 hours ago, vampirnik77 said: Есть способ отловить какой скрипт вызывает вылет? Если вылет вызван скриптом, то при вылете будет показан стек Lua и соответственно сбойный скрипт. Если этого нет, то напрашивается вывод, что сбой вызван не скриптом. 1 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Metro_Rus 75 Опубликовано 8 Января 2018 Поделиться Опубликовано 8 Января 2018 Решил попробовать восстановить в ЗП конструкцию тайников как в ТЧ/ЧН, в общем такая проблема: н своей локации поставил рестриктор: [logic] active = sr_idle@start [sr_idle@start] on_actor_inside = sr_idle@nil %=give_treasure(esc_treasure_1)% [sr_idle@nil] Условие: при входе в рестриктор получаем информацию о тайнике, при входе в рестриктор - вылет stack trace: 001B:049CB7D0 lua.JIT.1.1.4.dll, lua_yield() Как я понимаю - ошибка скриптов, вот функция выдачи тайника function give_treasure(treasure_id) if treasures[treasure_id] ~= nil then if treasures[treasure_id].active ~= true then treasures[treasure_id]:give_treasure() else local active_treasure = get_active_treasure_by_target(treasures[treasure_id].target) abort("Unable to give treasure [%s] because inventory box is already in use by treasure [%s]", treasure_id, active_treasure) end else abort("There is no treasure with id [%s]", treasure_id) end end function get_active_treasure_by_target(target) for k,v in pairs(treasure_by_target[target]) do if v.active == true then return v.section end end return "nil" end PS: inventory box с названием "esc_treasure_1" на локацию добавил, также прописал ему story_id PS 2: Без story_id ничего не происходит, ни вылета - ни выдачи "Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов Скрытый текст OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ Ссылка на комментарий
AndreySol 215 Опубликовано 8 Января 2018 Поделиться Опубликовано 8 Января 2018 1 час назад, Metro_Rus сказал: %=give_treasure(esc_treasure_1)% esc_treasure_1 - это имя тайника, ID, StoryID ? 1 Ссылка на комментарий
Metro_Rus 75 Опубликовано 8 Января 2018 Поделиться Опубликовано 8 Января 2018 1 час назад, AndreySol сказал: esc_treasure_1 - это имя тайника, ID, StoryID ? И имя тайника/бокса и Story_ID тайника/бокса(одновременно), как я понимаю проблема в этом? По-моему получение айди объекта по его name было вырезано из ЗП - нужно прописывать StoryID PS я пока что в скриптовании нуб Могу понять что в них написано, но не могу написать собственный "Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов Скрытый текст OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 (изменено) treasures[treasure_id].active в данном случае - из того, что мы здесь видим - является попыткой извлечь что-то из nil. Что предполагалось получить таким способом - сложно сказать. Впрочем, для начала, еще интересно, ОТКУДА должно что-то вызываться в on_actor_inside = sr_idle@nil %=give_treasure(esc_treasure_1)% и есть ли оно ТАМ. Изменено 9 Января 2018 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Metro_Rus 75 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 8 часов назад, Dennis_Chikin сказал: ОТКУДА должно что-то вызываться в on_actor_inside = sr_idle@nil %=give_treasure(esc_treasure_1)% и есть ли оно ТАМ. При входе в один из space restrictor поставленных на локации, должно выскакивать смс "получена информация о тайнике" и в invertory box под названием "esc_treasure_1" должны заспавниться вещи прописанные в misc\treasure_manager.ltx(или из подключенного к нему файла) [list_treasure_escape] esc_treasure_1 [esc_treasure_1] target = esc_treasure_1 name = st_esc_cross_2 description = st_esc_cross_2_descr items = medkit, 1, antirad, 1 condlist = {=actor_on_level(escape)} true, false Но при входе в это space restrictor происходит вылет stack trace, также он ИНОГДА происходит при обыске трупов - свидетельство того что возможно работает эта функция: function use(npc) printf("treasure_manager: npc[%s] is used by actor", npc:name()) local available_treasures = {} local selected_treasure = nil for k,v in pairs(treasures) do --[[ printf("found treasure %s", tostring(v.section)) -- Проверить доступность по кондлисту. printf(" condlist %s", tostring(xr_logic.pick_section_from_condlist(db.actor, npc, v.condlist))) -- Проверить доступность по рангу. printf(" rank %s", tostring(v:check_rank_and_community(npc))) -- Проверить не выдан ли он уже. printf(" active %s", tostring(v.active)) -- Проверить не выдан ли другой тайник на этот же таргет. printf(" used %s", tostring(v:check_for_used_target())) printf(" cost=%d", v.treasure_cost) ]] if xr_logic.pick_section_from_condlist(db.actor, npc, v.condlist) == "true" and v:check_rank_and_community(npc) == true and v.active ~= true and v:check_for_used_target() == true and (v.treasure_cost==0) then -- 24.04.08 table.insert(available_treasures, v) end end if #available_treasures == 0 or math.random(100) > 20 then return end selected_treasure = available_treasures[math.random(1, #available_treasures)] selected_treasure:give_treasure() end "Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов Скрытый текст OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ Ссылка на комментарий
Metro_Rus 75 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 PS: как известно все команды в логике space restrictor юзаются из функций в xr_effects.script Команда give_treasure в xr_effects.script function give_treasure (actor, npc, p) if p == nil then abort("Required parameter is [NIL]") end for k,v in pairs(p) do treasure_manager.give_treasure(v) end end 1 "Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов Скрытый текст OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 Гм, ну тогда надо смотреть, как (чем) заполняется treasures[] Ну а потом проверять, точно ли везде передается строка, и является ли она ключом в этой таблице. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
vampirnik77 121 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 Знакомый играет в ПВМ и у него то ли баг, то ли еще что, но квестовый персонаж (торговец) стал вржадебным, как то можно его "помирить" с гг, скриптово конечно? Официальная страница проекта Neof-One Crew Ссылка на комментарий
Graff46 598 Опубликовано 9 Января 2018 Поделиться Опубликовано 9 Января 2018 37 минут назад, vampirnik77 сказал: как то можно его "помирить" с гг, скриптово конечно? set_goodwill_ex(int<who_id>, int<to_whom_id>, int<goodwill>) - устанавливает отношения между персонажами. Это в X-Ray extensions relation_registry.set_community_goodwill ("military", db.actor:id (), 1500) -- прибавить 1500 к дружелюбности военных к ГГ. Ссылка на комментарий
Graff46 598 Опубликовано 10 Января 2018 Поделиться Опубликовано 10 Января 2018 В скрипте по спавну левелЧанжеров есть такой код: Скрытый текст if shape_type == 0 then -- sphere local center = packet:r_vec3() local radius = packet:r_float() else -- box local axis_x_x = packet:r_float() local axis_x_y = packet:r_float() local axis_x_z = packet:r_float() local axis_y_x = packet:r_float() local axis_y_y = packet:r_float() local axis_y_z = packet:r_float() local axis_z_x = packet:r_float() local axis_z_y = packet:r_float() local axis_z_z = packet:r_float() local offset_x = packet:r_float() local offset_y = packet:r_float() local offset_z = packet:r_float() end end Меня интересует бокс и что это за способ его задания по осям, ообенно вот это: ось xx, xy, x, y ?? Картинка Добавлено HellRatz, 10 Января 2018 Объединил. Ссылка на комментарий
BFG 7 582 Опубликовано 10 Января 2018 Поделиться Опубликовано 10 Января 2018 (изменено) @Graff46 Смысл указывать 12 ребер, для построения куба, когда можно задать куб 3 сторонами по осям и диагоналями. Не здесь ли порылся чернобыльский пёс ? Рисунок красивый. Изменено 10 Января 2018 пользователем BFG "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий
Graff46 598 Опубликовано 10 Января 2018 Поделиться Опубликовано 10 Января 2018 14 минут назад, BFG сказал: Смысл указывать 12 ребер Мне надо понять как строится куб по рёбрам! Я то привык по крестьянски по 6 вершинам. Если можно с картинками. Ссылка на комментарий
Rietmon 3 Опубликовано 11 Января 2018 Поделиться Опубликовано 11 Января 2018 Хай, пиплы. Возникла проблема с логикой. Как правильно сделать, что-бы НПС становлися враждебным при наличии поршня + переходил на другую схему логики? У меня получилось так: [logic] active = walker@stay_at_position danger = danger_ignore [danger_ignore] ignore_distance = 5 [walker@stay_at_position] path_walk = jup_zubr_kvest2_stay_at_position_walk path_look = jup_zubr_kvest2_stay_at_position_look corpse_detection_enabled = false gather_items_enabled = false help_wounded_enabled = false on_info = {+zamok_otkaz_ot_oplati} walker@logic2 %=actor_enemy% [walker@logic2] corpse_detection_enabled = false gather_items_enabled = false help_wounded_enabled = false Но в итоге получаю это: [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : ..\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...k.e.r the stumbling block\gamedata\scripts\_g.script:479: bad argument #2 to 'format' (string expected, got nil) Помогите, я уже 3 дня ломаю голову, как сделать этот чертов момент(через сквад нельзя - спавн нпс идет не через него, а заменить тоже нельзя - сама задумка сюжета не получится). Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 11 Января 2018 Поделиться Опубликовано 11 Января 2018 2 часа назад, Rietmon сказал: Хай, пиплы. Возникла проблема с логикой. Как правильно сделать, что-бы НПС становлися враждебным при наличии поршня + переходил на другую схему логики? У меня получилось так: [logic] active = walker@stay_at_position danger = danger_ignore [danger_ignore] ignore_distance = 5 [walker@stay_at_position] path_walk = jup_zubr_kvest2_stay_at_position_walk path_look = jup_zubr_kvest2_stay_at_position_look corpse_detection_enabled = false gather_items_enabled = false help_wounded_enabled = false on_info = {+zamok_otkaz_ot_oplati} walker@logic2 %=actor_enemy% [walker@logic2] corpse_detection_enabled = false gather_items_enabled = false help_wounded_enabled = false Но в итоге получаю это: [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : ..\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...k.e.r the stumbling block\gamedata\scripts\_g.script:479: bad argument #2 to 'format' (string expected, got nil) Помогите, я уже 3 дня ломаю голову, как сделать этот чертов момент(через сквад нельзя - спавн нпс идет не через него, а заменить тоже нельзя - сама задумка сюжета не получится). Судя по логу ошибка расшифровывается следующим образом: в _g.script в строке 479 конфликтует второй аргумент функции (я полагаю), в этом моменте скрипт ожидает строчное значение, а на деле получает пустое(nil) Ссылка на комментарий
Forest Of Shadows 126 Опубликовано 12 Января 2018 Поделиться Опубликовано 12 Января 2018 5 часов назад, Rietmon сказал: Как правильно сделать, что-бы НПС становлися враждебным при наличии поршня + переходил на другую схему логики? Попробуй так: on_info = {+zamok_otkaz_ot_oplati} nil %=killactors% function killactors (actor, npc) npc:set_relation (game_object.enemy, actor) end Ссылка на комментарий
Murarius 10 532 Опубликовано 12 Января 2018 Поделиться Опубликовано 12 Января 2018 (изменено) @Rietmon Не надо постить одно и то же в разных темах. @_Sk8_AsTeR_ оверквотинг показывает Вас технически безграмотным и снижает ценность ответа. Если Вы не можете разобраться с простым цитированием, возникают сомнения в том, что разбираетесь в скриптах. Ознакомьтесь с Правилами форума (в частности, пп. 2.1.2 и 2.6). Спасибо. Изменено 12 Января 2018 пользователем Murarius Литературка (избранное): "Координаты избушки" (2023) --- "Колобок времени" (2019) --- "Пиво и жлоб" (2018) --- "Лекарство против морщин" (2013) --- "Когда все пройдет" (2013) Креатив (бесперспективное): Dominanta --- Сон на земле Досвиданьице (слезное): Смена администратора (2024) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти