Zander_driver 10 334 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 Ох опять я стал похож на потребителя, который хочет все готовое Если я в посте прошу "разжевать" не упоминая при этом о собственных попытках разобраться - это еще не значит что я их не делал. Просто приберег результаты для дальнейшей полемики. Итак Не мудрствуя лукаво, взял за основу один из простеньких диалогов, прописанный Сидору. Добавил в него экшен: <dialog id="tutorial_barter"> <phrase_list> <phrase id="0"> <text>tutorial_barter_0</text> <next>1</next> </phrase> <phrase id="1"> <text>tutorial_barter_1</text> <next>2</next> </phrase> <phrase id="2"> <text>tutorial_barter_2</text> <action>blabla.tralala</action> <next>3</next> </phrase> <phrase id="3"> <text>tutorial_barter_3</text> <next>4</next> </phrase> <phrase id="4"> <text>tutorial_barter_4</text> <next>5</next> </phrase> <phrase id="5"> <text>tutorial_barter_5</text> <next>6</next> </phrase> <phrase id="6"> <text>tutorial_barter_6</text> </phrase> </phrase_list> </dialog> Вон он, в фразе с id = "2". Затем в папке scripts создал файл "blabla.script" Вот все его содержимое: function tralala() news_manager.send_tip(db.actor, "Ох как нам повезло, мы не вылетаем!", nil, nil, 20000) end И, собственно, все. Запустил игру, поболтал с Сидором - результат: Скриншот Вылета не получилось. Я собственно, чего хочу - обрисуйте мне ситуацию в которой должен вылет произойти. Потому как у меня весь мой скриптовый опыт такой - эмпирический. Получается, работает - использую. Неполучается - разбираюсь почему, и как надо чтоб работало. Сейчас я добиваюсь получения вылета по вашим описаниям. Когда получится - приму на веру "вот так делать ненадо". Но пока не получилось. Прошу прощения если чрезмерно надоедаю своими вопросами. И, да, если что - я тоже ни в коей мере не хотел вас задеть/обидеть. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
*Shoker* 322 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) Совершенно аналогичная ситуация. Скрипты, функции которых вызываются из xml-тегов диалогов, и больше нигде не вызываются (как и сам скрипт), тем ни мение они все работает, хотя до вызова из диалога попасть в _G таблицу не могли... Изменено 20 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 Мда-а-а, аргументация "а вот у меня работает, хотя и не знаю почему" - рулить ... Ну так что волнуетесь? Моддьте далее ... ;-) Добавлено через 4 мин.: Zander_driver, найду время, вычищу свои навороты, оставив читую игру и воспроизведу специально для тебя ситуаци., когда ссылка из тега диалога на непроинициализированный скрипт приводит вылету. На сим пока предлагаю прекратить пинг-понг "работает - не работает". "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
kratos888 0 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) Прошу помощи! У меня не работает рандомная погода! Погода постоянная - предвыбросная, как написано в скрипте amk_mod. Я поковырялся и выяснил, что тупо не запускается game.start_tutorial("restore_sun"), т.е. функция, отвечающая за смену погоды на рандомную после перезагрузки. Вызывал даже вручную, напрямую с помощью скрипта ui_main_menu - и после перезагрузки всё опять слетает на предвыбросную. Очень прошу помощи! Уже сколько пытаюсь разобраться - и ничего не получается... Просьба не привносить в моддинг и тем более в топике "Школа ..." принципы натурального обмена "ты мне - я тебе". Есть что предложить другим -выкладываем в общий доступ. Есть вопросы, задаем их в соответствующем топике - и ждем ответы ... --/Artos Изменено 20 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) kratos888, сосершенно непонятно, используется ли тобою собственно AMK-mod или только отдельные файлы взяты. Если отдельные - то требуется касательно твоей проблемы еще взглянуть в gamedata\config\ui\ui_movies.xml (см. <restore_sun>) откуда собственно и запускается amk_mod.restore_sun. Ну а чтобы вызывалась game.start_tutorial("restore_sun") - требуется из amk_mod.script на старте игры запускать check_spawn() ... что делается из amk.script вызовом mod_call("check_spawn") из on_game_load(). Изменено 20 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
kratos888 0 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 Artos, "большое тебе человеческое спасибо...", я и не знал, что можно вызвать через xml - смотрел в основном обычные туториалы в _g скрипте, и в конфигах по информации к энциклопедии... Ссылка на комментарий
olaf1 0 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 (изменено) У меня сделать сценарий. но в этом сценарии любой ложный или отсутствует, но что? 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 LUA мой редактор сказал, что в строке 111 "=" ожидается около `.. '(111) 100 function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, 101respawn_npc_point) 102 if respawn_timer_a == true then 103 if respawn_timer == 0 then 104 if not respawn_counter and not respawn_npc_point then 105 return false 106 end 107 end 108 self.respawn_npc_tabel = {} 109 if npc_respawn_counter < respawn_counter then 110 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point) 111 respawn_npc_tabel[spwan.id] = true 112 end 113end Я надеюсь, кто-нибудь может мне помочь моей проблеме. Я не knwo, что у меня есть реактивный делать. пс почему мой последний вклад был удален?. Сообщение от модератора ColR_iT Please write your question in the native language, you will. Изменено 20 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
Nazgool 250 Опубликовано 20 Февраля 2012 Поделиться Опубликовано 20 Февраля 2012 olaf1 Найди отличие 111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point) 111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point)) Ссылка на комментарий
Nazgool 250 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 HellRatz А что тут непонятного? В файле xr_gulag.script, в строке 1219 переменная 'strn' равна nil. Ищи, откуда она берется, какое значение должно быть ей присвоено. И почему она равна nil. У нас твоих кодов нет, поэтому прийдется тебе самостоятельно это сделать. Ссылка на комментарий
olaf1 0 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 i have correct the script. 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_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 = nil function Start() if NPC == nil then NPC = Respawn_NPC() end return NPC end class "Respawn_NPC" function Respawn_NPC:__init() self.init_done = false self.counter_im_script = nil 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.counter_im_script = nil 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() 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 self.counter_im_script = respawn_npc.."_counter" self.counter_im_script = 0 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 counter_im_script < 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 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 counter_im_script = counter_im_script - 1 end end if counter_im_script < respawn_counter then respawn_timer = false respawn_timer = 0 end end end but when i start the game it comming a crash. 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: ...w of chernobyl\gamedata\scripts\resapwan_npc2.script:128: bad argument #1 to 'pairs' (table expected, got string) stack trace: but i don´t know what i have yet to do. can anyone help me? thank you Ссылка на комментарий
Nazgool 250 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 (изменено) olaf1 Your script not correct! Use some lua checker. For instance. You write : ... for k,v in pairs("npc1") do ... Type "npc1" is string. But must be a table. Изменено 21 Февраля 2012 пользователем Gun12 Ссылка на комментарий
olaf1 0 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 when i use the local tabel name is it then correct? i have use this 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_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 = nil function Start() if NPC == nil then NPC = Respawn_NPC() end return NPC end class "Respawn_NPC" function Respawn_NPC:__init() self.init_done = false self.counter_im_script = nil self.respawn_npc_tabel = nil self.respawn_counter = nil self.respawn_counter_name = nil self.respawn_npc_name = 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.counter_im_script = nil self.init_done = nil self.enabled = nil self.respawn_counter = nil self.respawn_npc_tabel = nil self.respawn_counter_name = nil self.respawn_npc_name = nil self.respawn_npc_point = nil end function Respawn_NPC:LoadConfig() self.respawn_counter = {} self.respawn_counter_name = {} self.respawn_npc_name = {} self.respawn_npc_point = {} for k,v in pairs ("npc")do self.respawn_npc_name(k) self.respawn_counter_name(v) end self.counter_im_script = respawn_npc_name.."_counter" self.counter_im_script = 0 for k,v in pairs("npc_respawn_counter") do if k == respawn_counter_name then self.respawn_counter(v) end end for k,v in pairs("npc_spawn_data") do if k == respawn_npc then if counter_im_script < 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)) counter_im_script = counter_im_script + 1 respawn_npc_tabel[spwan.id] = true end 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 counter_im_script = counter_im_script - 1 end end if counter_im_script < respawn_counter then respawn_timer = false respawn_timer = 0 end end end but it give the same problem. what i must yet do? Ссылка на комментарий
Nazgool 250 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 Study syntax lua. "npc" is string. This string is not some name. The name your table - npc - a link. Use it is necessary so : for k,v in pairs(npc) do Ссылка на комментарий
olaf1 0 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 (изменено) what mean you i donґt understand this. sorry. Сообщение от модератора ColR_iT The function pairs must take as its argument the name of the table, not a string. Добавлено через 24 мин.: when i use it not in a function then i works but when i use it in a function it donґt works but why it donґt work? Сообщение от модератора ColR_iT Here in this line:for k,v in pairs ("npc")do parameter npc should be written without quotation marks. And so everywhere. I advise you read the articles on the syntax of the language Lua, here: http://www.lua.org/ Добавлено через 38 мин.: when i use this function tabel(npc) local npc = { mar_clear_sky_respawn_1 = 232442, mar_clear_sky_respawn_2 = 243544, mar_clear_sky_respawn_3 = 7685686 } for k,v in pairs(npc)do print(k) end end and i starting debugging this then is not output but when i start is to debugging local npc = { mar_clear_sky_respawn_1 = 232442, mar_clear_sky_respawn_2 = 243544, mar_clear_sky_respawn_3 = 7685686 } for k,v in pairs(npc)do print(k) end then spent some. why is it so? I know that it really belongs here, not pure but could you please ask the beantoworten anyway. thank you before Сообщение от модератора ColR_iT It appears that you have no programming experience. Therefore, in order not to mislead either registered users, nor you, encourage you to read the basic principles of programming in Lua, on the official site:http://www.lua.org/ Thank you for your understanding. Добавлено через 32 мин.: i have learn somthing in lua and iґm at the beginning. can anyone explaen me this why this is so? thank you. Добавлено через 37 мин.: i have make it yet in the function. local npc = nil function Start() if npc == nil then npc = Respawn_NPC() end return npc end class "Respawn_NPC" function Respawn_NPC:__init() self.init_done = false self.counter_im_script = nil self.respawn_npc_tabel = nil self.respawn_counter = nil self.respawn_counter_name = nil self.respawn_npc_name = 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.counter_im_script = nil self.init_done = nil self.enabled = nil self.respawn_counter = nil self.respawn_npc_tabel = nil self.respawn_counter_name = nil self.respawn_npc_name = nil self.respawn_npc_point = nil end function Respawn_NPC:LoadConfig() 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_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 } for k,v in pairs(npc)do self.respawn_npc_name = k self.respawn_counter_name = v end self.counter_im_script = respawn_npc_name.."_counter" self.counter_im_script = 0 for k,v in pairs(npc_respawn_counter)do if k == respawn_counter_name then self.respawn_counter(v) end end for k,v in pairs(npc_spawn_data)do if k == respawn_npc then if counter_im_script < 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)) counter_im_script = counter_im_script + 1 respawn_npc_tabel[spwan.id] = true end 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 counter_im_script = counter_im_script - 1 end end if counter_im_script < respawn_counter then respawn_timer = false respawn_timer = 0 end end end but it comming a crash,too. 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: ...ow of chernobyl\gamedata\scripts\respwan_npc2.script:71: attempt to concatenate global 'respawn_npc_name' (a nil value) stack trace: is it to global or what? what i have yet to do? can anyone say me that. thank you Изменено 21 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 (изменено) (оффтопик) "Ох и тяжкая эта работа - из болота тащить бегемота"©Чуковский ;-) [x] Поддержу. Думаю не имеет смысла продолжать переписку с нашим иностранным гостем. Не в обиду никому. ColR_iT Изменено 21 Февраля 2012 пользователем ColR_iT "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
strelok200 0 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 у меня вопрос по логике: в схеме walker обязательно должны присутствовать look_points? Т.е. вот так допустимо? [ras5_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -213.861343383789,2.20881962776184,80.225471496582 p0:game_vertex_id = 3708 p0:level_vertex_id = 354315 [logic] active = walker1 [walker1] path_walk = ras5_walk Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
ColR_iT 171 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 (изменено) strelok200, мог бы и проверить. Не сложно ведь задать такую логику кому либо и глянуть. А вообще - нет. Если НПС находится под логикой walkerа и стоит он на одной точке, то точка look обязательна. Если же он будет ходить по "кругу" из нескольких точек, то можно и не прописывать. По умолчанию, точка взгляда будет следующая точка пути. Изменено 21 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
*Shoker* 322 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 Вообщем я разобрался (но ещё не исправил) от чего был движковый вылет при удалении аномалий. В этом и впрям оказались виноваты рестрикторы. Вылет был из за монстров (оба монстра из оригинала, ставятся через all.spawn, флажок "всегда в онлайне"), когда я глянул их рестрикторы, у обоих в in-рестрикторах была прописана ближайшая (на момент загрузки сейва) к ним грави-аномалия (но расстояние между монстром и аномалией около 10-15 метров). Но что интересно, оба монстра были живы и ходили по локации. Так каким образом к ним могла прописаться эта аномалия в рестрикторы? Возможно аномалия прописывается объекту после нанесения ему хита? (я ещё это не проверил) И кстати, при удалении этих аномалий, рестрикторы которых были прописаны монстрам, сообщение об ошибке в консоль не выводилось в 97% тестов. И вот ещё вопросцы по поводу рестрикторов... 1) Рестрикторы можно удалить в любой момент, или нужно из какой нибудь скриптовой схемы? В ЧН нашёл интересный скрипт restrictor_manager.script, который как раз из xr_logic вызывается. 2) Рестрикторы достаточно удалить только у онлайн объектов, или они могут быть ещё прописаны объекту который в оффлайне? 3) Какие ещё есть подводные камни, связанные с удалением рестрикторов, которые стоит знать? И ещё извиняюсь за тупой вопрос, но щас уже поздно, штудировать мануалы не хочется. In рестрикторы я так понял НЕ впускают в себя объект, а out наоборот НЕ выпускают. А если out-ов несколько прописано? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 21 Февраля 2012 Поделиться Опубликовано 21 Февраля 2012 *Shoker*, ну хоть так, наощупь постепенно начинаешь приближаться к опыту работы с рестрикторами. :-) Вот если бы задался парой общих вопросов, возможно быстрее бы получил ответы на частные. Ты не заметил, что для монтров нет собственно схемы обхода аномалий, как в прочем и для сталкеров в оригинальной игре? А они почему-то не особенно и лезут в аномалии ... Загляни в конфиги монстров/сталкеров и посмотри параметр SpaceRestrictionSection. Ничего не навевают и название и значения? Ну а теперь не столь для тебя, ты уже почти сам нашел ответы: Рестрикторы прописываются неписям/монстрам движком при инициализации объекта в онлайне и из логики (собственно restrictor_manager.script развитие этого). Прописываются все(!) имена рестрикторов, тип/класс которых упомянут в конфиге секции непися/монстра. Соответственно тип рестриктора (restrictor_type) учитывается в in- или в out- записи попадет рестриктор. (упрощенно) Обновляются записи о рестрикторах соответственно по апдейтам, а точнее в ЧН по переключению секций логики. 1. Удалять можешь когда тебе захочется, вот только если рестриктор существует (включен, в онлайне) - то при апдейте иль переключении секций логики, твоя чистка будет опять "замарана". Менеждер рестрикторов в ЧН/ЗП, более организованно позволяет из секций логики управлять записью/удалением соотв.рестрикторов. Как, например, организован в Расширенной арене уход в бар Арни (иль его заместителя)? Довольно просто, ему прописан рестриктор арены и держит его внутри здания арены. Когда этот рестриктор удаляется - Арни идет в Бар. Когда приходит время - рестриктор вновь прописывется и Арни возвращается к работе ... 2. Ответ на это см. в п.1. Пока объект на локации - ему прописаны рестрикторы данной локации, даже трупу, даже если он a оффлайне. 3. Вся игра, ее алгоритм, скрипты - груда подводных камней и попытаться дать заранее ответ о них ... это как описать все варианты развития шахматной партии. ;-) Ну а штудировать мануалы никогда не позно, ты ведь не на самолет опаздываешь. 'in'- рестрикторы определяют зону куда запрещено объекту входить, 'out'- наоборот, предписывают именно в зоне рестриктора находиться. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
SkyLoader 53 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Такой вопрос, давно его задавал: есть ли возможность изменять направление у физ. объектов через нет-пакеты? Обновленные пакеты позволяют это сделать, или движком не добавлено направление для класса физ. объектов? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти