Artos 99 Опубликовано 18 Февраля 2012 Поделиться Опубликовано 18 Февраля 2012 (изменено) AndreySol, именно БУДУ придираться к словам в вопросах заданным подобным образом. Если ты считаешь, что отвечающий все должен переварить, понять и ответить, то я и не считаю так и, как куратор, против лишних погадалок/споров в топике о том, что и не спрашивается. Ответ не "по делу" от Капрал Хикс, тому пример ... 1. Коллбэки выполняются в отдельных потоках и никак не связаны с апдейтом актора. 2. Если заспавнишь предметы в одном вызове некоей функции или трансфер-функции, то и сработает коллбэк на появление у актора этих объектов для КАЖДОГО объекта в отдельности и конечно же разнесенными по времени (которым можно пренебречь в твоем случае). Причем порядок спавна объектов не обязательно повторяется в порядке срабатывания коллбэка на эти предметы. 3. Если будешь ловить эти коллбэки - то вероятность, что они будут в одном цикле апдейта актора довольно высока, т.е. по сути 100%. Изменено 18 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
-=Krovosos=- 64 Опубликовано 18 Февраля 2012 Поделиться Опубликовано 18 Февраля 2012 (изменено) Доброго времени суток. Подскажите, пожалуйста, что не так в этом скрипте: function change_item_loc() for a=1,65534 do local obj = alife():object(a) if obj then if obj:section_name()=="bread" then local pos=obj:position() local gv=obj:game_vertex_id() local lv=obj:level_vertex_id() alife():release(obj, true) alife():create("kolbasa",pos,gv,lv) break end end end end Что в результате его исполнения возникает вылет с логом: [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: No such operator defined Если это важно - скрипт пытался активировать из диалога с НПС... Заранее спасибо. Изменено 18 Февраля 2012 пользователем ColR_iT Карусель-карусель - это радость для нас, прокатись на нашей ка-ру-се-ли!-=Krovosos Mod=- 4.0 Final для S.T.A.L.K.E.R. SHoC 1.0004 (336 Мб): Мод Финальный патч для -=Krovosos Mod=- (1 Мб): Патч Адаптация -=Krovosos Mod=- под S.T.A.L.K.E.R. SHoC 1.0006 (1 Мб): Адаптация Ссылка на комментарий
Artos 99 Опубликовано 18 Февраля 2012 Поделиться Опубликовано 18 Февраля 2012 (изменено) -=Krovosos=-: скрипт пытался активировать из диалога с НПС... Скорее всего очередная "придирка" к словам будет ключем к ответу: 1. Почему функцию ты называешь скриптом? Что значит "из диалога активирую скрипт"? 2. Если эта функция и есть все, что имеется в некоем my_script.script. то неплохо бы было и это упомянуть ... 3. Если из диалога вызываешь типа так: <action>my_script.change_item_loc</action> и ранее этот твой скрипт (my_script) не был где-либо в кодах инициализирован, т.е. не включен в глобальную метатаблицу _G, то удивляться вылету не стОит. Варианты лечения: а) включить свою функцию в заведомо используемый в игре скрипт и обращаться уже туда. б) перед диалогом или даже в начале игры просто инициализируй свой скрипт типа: if my_script then return end , что занесет твой скрипт-файл вместе с функцией в глобальную таблицу _G ифункция станет доступной из диалогов. P.S. Ниже KD87 дал как минимум еще одну причину твоей ошибки. Изменено 18 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 18 Февраля 2012 Поделиться Опубликовано 18 Февраля 2012 (изменено) -=Krovosos=-, с помощью alife():object(a) ты получаешь серверный объект энтити. А методы position(), game_vertex_id(), level_vertex_id() - это методы клиентских объектов, к серверным они не могут быть применены. Получить соответствующие параметры серверного объекта можно через его свойства, то есть примерно так: local pos=obj.position local gv=obj.m_game_vertex_id local lv=obj.m_level_vertex_id В общем, всегда сверяйся с lua_help.script. Опять же, не претендую на объяснение вылета. Но тем не менее, описанная ошибка имеет место быть. Изменено 18 Февраля 2012 пользователем KD87 Ссылка на комментарий
Policai 0 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 Народ!!!! Нужна помощь гуру! Сам в скриптах полный ноль, и поэтому прошу помощи у вас. В максе сделал обьект, создал анимированный динамический обьект, добавляю его через спавн, анимация работает. Как мне сделать запуск анимации? Это сдвигающаяся каменная стена, мне нужно чтоб анимация отработала по команде например с кодового устройства, или допустим при попадании непися в спейс рестриктор. Платформа ЗП. Ссылка на комментарий
*Shoker* 322 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) Пару страниц назад писал о вылете при удалении аномалий в ЧН: 001B:067D486E xrGame.dll 001B:067D49D9 xrGame.dll 001B:0682EEE1 xrGame.dll Пока смог обнаружить что вылет происходит тока при удалении какой то из грави-аномалий (ещё не определился какой\каких) Решил проверить теорию, что вылет происходит из за рестрикторов. Удалил все трупы на локации (животных\монстров) Но вылет остался. Пошёл дальше - удалил всё живое на локации. Вылет пропал. Сам я в рестрикторы НПС ничего не добавляю, есть ли у кого нить идеи из за чего это может быть ещё? Есть ещё такой нюанс, что "грави" аномалии после убийства сталкера разрывают его труп. Это удаляет сталкера из игры или формально он ещё там? И как вообще определить что аномалия у кого то прописана в рестриктор? Я так понял, судя по нет-пакетам, у НПС одновременно тока 1 in и 1 out может быть? Если я переберу всех НПС и проверю их in\out рестрикторы на совпадение с аномалией (я так понял там хранится id аномалии\рестриктора же?), то теоретически я могу определить из за какого\каких НПС происходит вылет? ЗЫ: Ради интереса, вчера убил несколько сталкеров в электре (грави не проверил), чтобы их трупы остались там, удалил потом аномалию, загрузился - вылета небыло.... хотя по идее НПС-у должен был присвоится in-рестриктор если верить Artos-у и при удалении аномалии - вызвать вылет без лога, если я ничего не путаю конечно. ЗЫЫ: Ещё пробовал не удалять сразу аномалии, а просто их выключать, а удалять уже при последующей загрузке игры - аналогичный вылет. Дополнение: Протестировал сейчас все 3 грави аномалии. Убил в них и сталкера и монстра, удалил аномалию, сделал сохранение, загрузился - всё пучком, всё работает Изменено 19 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
eMphaticBG 0 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) Я хотел бы написать скрипт, который заменяет лагерях, потому что я не функционируют лагеря. Я старался, чтобы написать script здесь он будет работать PS Я не русский так извините за мой плохой язык local npc = { mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter } local npc_spawn_data = { mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182 mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134 mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134 } local npc_respawn_counter = { mar_clear_sky_respawn_1_counter = 3 mar_ clear_sky_respawn_2_counter = 5 mar_clear_sky_respawn_3_counter = 2 } local npc_spawn = Respawn_NPC() function start() npc_spawn:LoadConfig() end class "Respawn_NPC" function Respawn_NPC:__init() self.init_done = false self.respawn_npc_tabel = nil self.respawn_counter = nil self.respawn_counter_name = nil self.respawn_npc = nil self.respawn_npc_point = nil self.respawn_timer = 0 if level.name() ~= "marsh" then self.enabled = false else self.enabled = true self:LoadConfig() end self.init_done = true end function Respawn_NPC:__finalize() self.init_done = nil self.enabled = nil self.respawn_counter = nil self.respawn_npc_tabel = nil self.respawn_counter_name = nil self.respawn_npc = nil self.respawn_npc_point = nil end function Respawn_NPC:LoadConfig() self.respawn_npc .. "_" .. count = 0 local npc_1 = npc local npc_respawn_counter_1 = npc_respawn_counter local npc_spawn_data_1 = npc_spawn_data self.respawn_counter = {} self.respawn_counter_name = {} self.respawn_npc = {} self.respawn_npc_point = {} for k,v in pairs ("npc_1")do self.respawn_npc(k) self.respawn_counter_name(v) end for k,v in pairs("npc_respawn_counter_1") do if k == respawn_counter_name then self.respawn_counter(v) end end for k,v in pairs("npc_spawn_data_1") do if k == respawn_npc then if respawn_npc .. "_" .. count < respawn_counter then self.respawn_npc_point(v) else return end end end end function Respawn_NPC:Timer() if respawn_timer == false then if respawn_timer == 0 then respawn_timer = level.get_time_hours() + math.random(3, 4) if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end end if db.actor:alive() then if level.get_time_hours() > respawn_timer then respawn_timer = 0 respawn_timer_a = true end end end function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point) if respawn_timer_a == true then if respawn_timer == 0 then if not respawn_counter and not respawn_npc_point then return false end end self.respawn_npc_tabel = {} if npc_respawn_counter < respawn_counter then self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point) respawn_npc_tabel[spwan.id] = true end end function Respawn_NPC:Counter(respawn_npc_tabel) if not respawn_npc_tabel then return false end local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel for k,v in pairs(respawn_npc_tabel) do obj = alife():object(k) if obj == nil then v = nil respawn_npc .. "_" .. count = respawn_npc .. "_" .. count - 1 end end if respawn_npc .. "_" .. count < respawn_counter then respawn_timer = false respawn_timer = 0 end end If you possess the English, then write on it yet, so it will be easier for you to understand. ColR_iT Изменено 19 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
AndreySol 215 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 Вопрос по перезарядке оружия. Для примера, имеем в руках ПМ с полной обоймой обычных патронов и в инвентаре полную пачку обычных и полную пачку бронебойных. Добавил в 'on_item_drop' и в 'on_item_take' вывод сообщений на худ, и выявил следующее - при перезарядке с обычного боеприпаса на бронебойный приходит 1 сообщение из 'on_item_drop' о потере пачки бронебойных патронов. А при перезарядке обратно, с бронебойных на обычные - 1 сообщение из 'on_item_take' о получении пачки бронебойных патронов. Непонятно, почему так ? Ведь по логике, движок должени изъять пачку бронебойных и вернуть в инвентарь неполную пачку обычных, разряженных из магазина оружия, и пачку с остатком от заряженных в магазин бронебойных. Соответственно сообщений должно быть больше. Или я не так предполагаю ? Подскажите. Ссылка на комментарий
Artos 99 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) AndreySol, отчего таие странные предположения? Неужели ты думаешь, что разработчики игры всего лишь для подзарядки оружия готовы удалять один объект и спавнить вместо него другой? Для чего такие затраты, если всего лишь берется подходящий объект - пачка патронов и из него изымаетется столько, сколько требуется для полного магазина/обоймы. Остальное остается в пачке (объекте). Вот если кол-во в пачке останется 0, то тогда и будет удален этот объект-пачка и будут браться из следующего, если для подзарядки не хватило. Соответственно коллбэки срабатывают по появлению или исчезновению у актора пачек ... Добавлено через 11 мин.: *Shoker*, так и не хочешь читать полностью написанное и хотя бы самому проверять ... *Shoker*: Я так понял, судя по нет-пакетам, у НПС одновременно тока 1 in и 1 out может быть? И из чего такой вывод? Из того, что этих параметров (dynamic_in_restrictions,dynamic_out_restrictions) в нет-пакетах у неписей всего по одному? А то, что в одной строке могут быть перечислены десятки имен - недоступно для понимания? Ведь и посмотреть мог бы сам (коды были указаны) сколько же там может быть перечислено имен рестрикторов. Чаще всего далеко не одно. *Shoker*: ... если верить Artos-у и при удалении аномалии - вызвать вылет без лога, если я ничего не путаю конечно. Ты не путаешь, а глаголишь тебе желаемое и далекое от мною сказанного: При удалении не выключенной аномалии, прописанной в dynamic_in_restrictions объекта - произойдет вылет. Как видишь, кое что существенное тобою пропущено и уж про безлоговый - это твоя выдумка. В логе как раз должна быть запись о виновнике ошибки - несущесвующем рестрикторе, который апдейт (или схема) непися попытается обработать. Изменено 19 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Макс Болт 0 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) Всем добрый день . У меня возник такой вопрос : а можно ли как нибудь адаптировать sgm v 2.1. под повелитель зоны . Мне чит режим В sgm конечно понравился, но в нём нельзя спаунить сталкеров и монстров .P.S. Если написал не в эту тему,то подскажите куда писать,а то я на форуме еще новичок . "Как нибудь адаптировать" конечно же можно, но ... Ты как минимум ошибся разделом. Тут "Школа моддинга", т.е. подразумевается (само)обучение, а не стол заказов и не бюро находок. Если будешь адаптировать и не будет что-то получаться - задавай вопросы, ну а если ждешь что кто-то тебе сделает - проси, например, в "Свободное общение для мододелов и модолюбителей". --/Artos Изменено 19 Февраля 2012 пользователем Artos Ссылка на комментарий
AndreySol 215 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) если всего лишь берется подходящий объект - пачка патронов и из него изымаетется столько, сколько требуется для полного магазина/обоймы. Остальное остается в пачке (объекте). Тогда откуда вообще сообщения 'on_item_drop' и 'on_item_take' если пачки полные - по 20 патронов, а в ПМ берется всего по 8 патронов ? Изменено 19 Февраля 2012 пользователем AndreySol Ссылка на комментарий
Artos 99 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) AndreySol Когда перезаряжаешь - разряжаемые патроны спавнятся (->on_take!) пачкой (полной иль нет) в рюкзак актору. Если кол-во патрон в пачке заряжаемых патронов меньше чем требуется для полной зарядки - опустевшая пачка удаляется (->on_drop!). B вообще, если у тебя в рюкзаке десяток пачек по 1 (одному) патрону - то подзарядка может дать десяток срабатываний коллбэка on_drop. Движек в этом случае "тупой" и берет, вроде как, последнюю "взятую" актором пачку, а не ту, которая самая полная ... Если уверен (откуда такая уверенность?), что берется из полной пачки(20) всего 8 патронов - то никак не может быть on_drop. Изменено 19 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 Если уверен (откуда такая уверенность?), что берется из полной пачки(20) всего 8 патронов - то никак не может быть on_dropНе на 100%, буду еще тестить. разряжаемые патроны спавнятся (on_take!) пачкой (полной иль нет) в рюкзак актору А ведь не спавнятся ! Нет сообщения. Может движок их дополняет в подходящую неполную пачку ? Ссылка на комментарий
Макс Болт 0 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) Я как бы сам хотел адаптировать его , но не знаю как,поскольку никаких инструкций по адаптации нет . Вот и решил спросить . Настоятельно рекомендую ознакомиться с правилами форума и соблюдать их. Оверквотинг (чрезмерное цитирование) - наказуемы. --/Artos Изменено 19 Февраля 2012 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 (изменено) Макс Болт, и не может быть инструкций по адаптации для каждого иминимода под каждый сторонний мод. Изучай основы моддинга/скриптов, читай статьи, смотри как это делают другие, каким инструментом пользуются. Ссылки имеются и в шапке топика и в различных ФАКах по игре в инете. Добавлено через 5 мин.: AndreySol, если зарядка была уже из некоей пачки, которая осталась в рюкзаке у актора - то разряжаемые патроны будут добавлены именно в нее - вот и нет коллбэка on_take. Если же эту пачку выкинешь - то коллбэк сработает (хотя тут полной уверенности нет, может и в другую этого же типа неполную добавит ...). Ну а по 100% - вот когда уверен - тогда и спрашивай, а погадалки не стОит устраивать. Ведь проверить то просто и быстро - выкинь все патроны и заспавни (иль возьми заведомо полную) 1 (одну) пачку - и смотри, будет ли on_drop при перезарядке. Изменено 19 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 19 Февраля 2012 Поделиться Опубликовано 19 Февраля 2012 Сделал проверку - в инвентаре 1 пачка обычных с 18 патронами и 1 пачка бронебойных с 20 патронами, в магазине ПМ - 8 патронов. При смене типа патрона получил сообщение 'on_item_take', после чего в инвентаре оказалось две пачки обычных патронов - с 20 и с 6 патронами соответственно, и пачка бронебойных с 12 патронами. Получается движок дополнил существующую пачку до полной и создал еще пачку с остатком, а при взятии патронов из инвентаря действительно берет из подходящей пачки, пока она не кончится. Ссылка на комментарий
Zander_driver 10 334 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) 3. Если из диалога вызываешь типа так: <action>my_script.change_item_loc</action> и ранее этот твой скрипт (my_script) не был где-либо в кодах инициализирован, т.е. не включен в глобальную метатаблицу _G, то удивляться вылету не стОит. Варианты лечения: а) включить свою функцию в заведомо используемый в игре скрипт и обращаться уже туда. б) перед диалогом или даже в начале игры просто инициализируй свой скрипт типа: if my_script then return end , что занесет твой скрипт-файл вместе с функцией в глобальную таблицу _G ифункция станет доступной из диалогов. Эмм, или я только что узнал ранее мне неведомое, или я чего-то не понял. Разве должен быть вылет при таком обращении к функции из диалога? У меня его не происходит. Поясню ситуацию: в моде Жесть к примеру, существует такая штука как бартерная торговля. Диалог торговли генерируется скриптом, функция-генератор вписывает в диалог экшены и прекондишены... а функции для них лежат "отдельной кучкой" в некоторых файлах скриптов, которые никто нигде не помянул, только вот этот означенный генератор их в диалог вставляет. Запускаем игру и все работает. Аналогично устроена и система апгрейда оружия/брони в этом моде. Если то, что вы сказали, правда, то почему у меня не происходит вылета? Да кстати сам генератор диалога лежит в файле скрипта, первое упоминание о котором игра встречает, когда возникает надобность начать диалог с соответствующим НПС (я не в курсе когда именно происходит генерация - при нажатии "F - говорить" с НПС, или при его входе в онлайн) Изменено 20 Февраля 2012 пользователем 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. Ссылка на комментарий
Artos 99 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 Zander_driver, у меня нет желания разжевывать сказанное. Если чего-то не понял по тому, что тэги из xml-диалогов читаются движком напрямую, а не через скрипты, и то, что обращение идет не к собственно скрипту, а к его (скрипта) таблице в метатаблице _G, которая может быть еще не подключена ... то есть ли причина тебе заморачиваться с этим если не имеешь проблем? Вот когда может быть столкнешься - вспомнишь. Ну а аргументация в стиле "а у меня (не)работает" - изначально порочна применительно и к Сталкеру и к подобным играм/приложениям. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Zander_driver 10 334 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 У вас нет желания разжевывать - ваше право. Однако у меня есть желание вникать и разбираться... Если я правильно понял, получается так: Когда мы в xml-описании диалога обращаемся тем или иным тегом к функции - она должна находиться в одном из скриптов, подключенных (не уверен в правильности терминологии...) к метатаблице _G. Когда же диалог генерируется скриптом, и скриптом же вставляется в него экшен, то вызываемая функция в вышеописанном скрипте находиться не обязана, а может быть в любом скрипте. Имеются в виду методы AddAction, AddPrecondition. Просто как бы в свое время изучал скриптовые диалоги по статьям malandrinus-a, упомянутые там факторы учел - в итоге получилась работающая система. Да, я понял что если работает у меня - еще ни о чем не говорит. По вашим словам выходит что тут есть еще некий "подводный камень" которого я избежал лишь благодаря везению и удаче. Мне то хочется знать о нем, чтобы и впредь избегать уже при помощи знания. Верно или нет мое предположение... ? Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) Zander_driver: Однако у меня есть желание вникать и разбираться... (без желания задеть/обидеть) Заметь, что желание то ты имеешь, но ты НЕ разбираешься и не вникаешь, а именно ждешь, когда кто-то тебе растолкует до состояния, когда ты или поймешь или примешь на веру. А пока довольствуешься по сути эмперическим опытом (работает - ну и ладно). Если же имеешь желание именно разобраться, то следует все же по чистому Lua поштудировать мануалы. Ведь исходные данные у тебя есть: - принимаем как аксиому (иль смотри изучай коды игры), что в игре имеется глобальная метатаблица _G и именно в нее линкуются все задействованные в игре скрипты. - принимаем на веру (если не верится - проверяй сам), что драфт диалога из xml-конфига читается и выполняется движком напрямую (из _G), т.е. без обращения (инициализации) сторонних скриптов. - любой скрипт-файл, просто помещенный в папку скриптов, НЕ попадает в метатаблицу _G сам по себе ... Мне совершенно не хочется сейчас возврашаться на четыре с лишним года назад (когда начинал ковырять скрипты) и лично для тебя пытаться воспроизводить ситуацию, когда одна и та же функция будучи вызванной из написанного скрипта или из того-же gulag_escape.script в первом случае приводила к вылету с пустым логом, а во втором прекрасно работала. Хочется понять почему - вникай и разбирайся, исходные данные у тебя есть. Ну а чтобы "и впредь избегать" - например я, пошел по иному пути, т.е. при старте игры проверяю в папке скриптов все файлы (исключая заведомо непотребные), тем самым инициализируя их заранее (включая в _G) и исключая запуск игры с синтаксическими ошибками ... Может быть и неоптимально с точки зрения ресурсов, но позволяет не задумываться ни об ошибках в синтаксисе ни о непроинициализированных скриптах/функциях, что для постоянно изменяющегся мода достатосно весомый (ИМХО) агрумент. Добавлено через 21 мин.: P.S. Zander_driver: Когда же диалог генерируется скриптом, и скриптом же вставляется в него экшен, то вызываемая функция в вышеописанном скрипте находиться не обязана, а может быть в любом скрипте. Конечно же необязательно, и не только для скриптовых диалогов! Важно чтобы в созданном драфте диалога были ссылки на файлы/функции, которые при обращении по этим ссылкам были заведомо доступны через _G (о чем и разговор идет выше), т.е. этот твой "любой" файл должен быть подключен к игре. Изменено 20 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти