CRAZY_STALKER666 36 Опубликовано 4 Февраля 2013 Создал что-то типо сверхскромного мини-меню. В нем если параметр helltime равен 0 происходит вызов noupdate.zzz()-пустой функции простоя. Если же helltime = 1 то по идее произойдет то что под звездами на пример спавн мутантов. Верен ли скрипт воопще и будет ли работать?? function helltime_update() local helltime = 0 if helltime == 0 then noupdate.zzz() else helltime == 1 --- *** --- end end Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 13 Февраля 2013 (изменено) Нашел старый скрипт от колгомора для возрождения НПЦ. Вот он- local need_update = 0 local heart = nil local id function on_item_drop(item) if item:section() ~= "mega_heart" then return end --dbg.log("RES: on_item_drop item=%s", item:name()) heart = item need_update = 1 end function update() if need_update == 0 then return end --dbg.log("RES: update stage=%s", need_update) if need_update == 1 then local obj = heart:parent() if obj == nil then --dbg.log("RES: only drop. return") return end id = obj:id() local inv = level.main_input_receiver() if inv ~= nil then level.start_stop_menu(inv, false) --dbg.log("RES: close inv") end amk.convert_npc[id] = true local sim = alife () sim:set_switch_online (id, false) sim:set_switch_offline (id, true) --dbg.log("RES: [%s] move offline", obj:name()) need_update = 2 elseif need_update == 2 then --dbg.log("RES: update 2") local obj = level.object_by_id(id) if obj == nil then --dbg.log("RES: real move offline") else --dbg.log("RES: wait offline") return end --dbg.log("RES: update 3") local sobj = alife():object(id) --dbg.log("RES: update 4") t = amk.read_stalker_params(sobj) --dbg.log("RES: update 5") t.health=0.1 t.killerid=65535 for i=1,8 do t.game_death_time[i] = 0 end t.updhealth = 0.1 t.skeleton_flags=0 --dbg.log("RES: update 6") amk.write_stalker_params(t, sobj) --dbg.log("RES: repack packet") need_update = 0 end Если положить арт нпц то как и положенно закроется меню рюкзака но нпц возраждатся не хочет. Почему не пойму. Может потому что я этого нпц сам делал и у него id нету? Изменено 14 Февраля 2013 пользователем ColR_iT Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 14 Февраля 2013 (изменено) Shoker Обрывается на этом - amk.convert_npc[id] = true local sim = alife () sim:set_switch_online (id, false) sim:set_switch_offline (id, true) Как понял? Кргда ложиш стаалкеру в инвертарь арт он исправно закрывается. А далее простой. Раз уж взялся писать в данную тему - "шапку" прочти, пожалуйста! ColR_iT Изменено 14 Февраля 2013 пользователем ColR_iT Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 (изменено) Добрый день. Такая проблема. Есть описанный класс дешифратора( на GUI-элементах) class "Deshifrator" (CUIScriptWnd)function Deshifrator:__init() super()self:InitControls()self:InitCallBacks()endfunction Deshifrator:__finalize()endfunction Deshifrator:InitControls()local xml = CScriptXmlInit()self:Init(0,0,1024,768)xml:ParseFile("Deshifrator.xml")self.frame1 = xml:InitFrame("frame1", self)self.edit1 = xml:InitEditBox("frame1:edit1", self.frame1)self:Register(xml:Init3tButton("frame1:button1", self.frame1), "button1")self:Register(xml:Init3tButton("frame1:button2", self.frame1), "button2")self.Static3 = xml:InitStatic("frame1:Static3", self.frame1)self.Static4 = xml:InitStatic("frame1:Static4", self.frame1)self.edit2 = xml:InitEditBox("frame1:edit2", self.frame1)self.checkbox1 = xml:InitCheck("frame1:checkbox1", self.frame1)self:Register(self.checkbox1, "checkbox1")self.checkbox2 = xml:InitCheck("frame1:checkbox2", self.frame1)self:Register(self.checkbox2, "checkbox2")endfunction Deshifrator:InitCallBacks()self:AddCallback("edit1", ui_events.EDIT_TEXT_CHANGED, self.edit1_edit_text_changed, self)self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self)self:AddCallback("button2", ui_events.BUTTON_CLICKED, self.button2_button_clicked, self)self:AddCallback("checkbox1", ui_events.BUTTON_CLICKED, self.checkbox1_button_clicked, self)self:AddCallback("checkbox2", ui_events.BUTTON_CLICKED, self.checkbox2_button_clicked, self)endfunction Deshifrator:edit1_GetText() --/получить введенный текст в edit1return self.edit1:GetText()endfunction Deshifrator:edit1_edit_text_changed()endfunction Deshifrator:button1_button_clicked()endfunction Deshifrator:button2_button_clicked()endfunction Deshifrator:edit2_GetText() --/получить введенный текст в edit2return self.edit2:GetText()endfunction Deshifrator:checkbox1_GetCheck() --/true/false - включен/отключен checkbox1return self.checkbox1:GetCheck()endfunction Deshifrator:checkbox1_button_clicked()endfunction Deshifrator:checkbox2_GetCheck() --/true/false - включен/отключен checkbox2return self.checkbox2:GetCheck()endfunction Deshifrator:checkbox2_button_clicked()endfunction Deshifrator:Hide()self:GetHolder():start_stop_menu(self, true)end Но я не знаю, как правильно его активировать. Я пытаюсь через проверку на активация предмета сделать, сама проверка то работает, а интерфейс не вызываеться. Делаю вот так, но как видно, не работает. function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже--episode_system.def_func() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функцииself.Deshifrator:Hide()endendend Класс зарегестрирован в class_registrator. Вызываеться ф-я repair_outfit_start(obj, who) через bind_stalker. И вот лог ошибки: [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index field 'Deshifrator' (a nil value) Изменено 26 Февраля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 @Sla-Sla, вызывал в точности, как у вас. Вылет: [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index global 'Deshifrator' (a nil value) Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 (изменено) @Sla-Sla, функцию вписал в deshifrator.script(там где и описание этого класса идет). Вызывал как обычно, из bind_stalker Вот вызов - Deshifrator.main() Изменено 26 Февраля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 @Sla-Sla, так я так и делаю. В скрипте дешифратора это: function main()local hud = Deshifrator(get_hud())level.start_stop_menu(hud, true)end В bind_stalker так: function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then Deshifrator.main()endendend Всё равно вылетает с тем же логом - nil value Вряд ли Deshifrator есть в actor_binder, однако тут self. Это все в совокупности как-то странно, вы дешифратор хотите запускать когда у вас что-то в слоте активно? (тогда логичнее на апдейт и не парится) или при юзании предмета в инвентаре(что-то не припоминаю, чтобы там был аргумент who? Что он передает?) Может я чего-то не понял... Всё верно, при юзании предмета должно открываться GUI-окно. Что передает who ? Без понятия, изначально я просто нашел функцию отслеживания использования предмета на wiki inside и не особо заморачивался с аргументами функции. Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 @Sla-Sla, Deshifrator.script Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 @Sla-Sla, ладно, проверяем еще раз Deshifrator.script class "Deshifrator" (CUIScriptWnd)function Deshifrator:__init() super()self:InitControls()self:InitCallBacks()endfunction Deshifrator:__finalize()endfunction Deshifrator:InitControls()local xml = CScriptXmlInit()self:Init(0,0,1024,768)xml:ParseFile("Deshifrator.xml")self.frame1 = xml:InitFrame("frame1", self)self.edit1 = xml:InitEditBox("frame1:edit1", self.frame1)self:Register(xml:Init3tButton("frame1:button1", self.frame1), "button1")self:Register(xml:Init3tButton("frame1:button2", self.frame1), "button2")self.Static3 = xml:InitStatic("frame1:Static3", self.frame1)self.Static4 = xml:InitStatic("frame1:Static4", self.frame1)self.edit2 = xml:InitEditBox("frame1:edit2", self.frame1)self.checkbox1 = xml:InitCheck("frame1:checkbox1", self.frame1)self:Register(self.checkbox1, "checkbox1")self.checkbox2 = xml:InitCheck("frame1:checkbox2", self.frame1)self:Register(self.checkbox2, "checkbox2")endfunction Deshifrator:InitCallBacks()self:AddCallback("edit1", ui_events.EDIT_TEXT_CHANGED, self.edit1_edit_text_changed, self)self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self)self:AddCallback("button2", ui_events.BUTTON_CLICKED, self.button2_button_clicked, self)self:AddCallback("checkbox1", ui_events.BUTTON_CLICKED, self.checkbox1_button_clicked, self)self:AddCallback("checkbox2", ui_events.BUTTON_CLICKED, self.checkbox2_button_clicked, self)endfunction Deshifrator:edit1_GetText() --/получить введенный текст в edit1return self.edit1:GetText()endfunction Deshifrator:edit1_edit_text_changed()endfunction Deshifrator:button1_button_clicked()endfunction Deshifrator:button2_button_clicked()endfunction Deshifrator:edit2_GetText() --/получить введенный текст в edit2return self.edit2:GetText()endfunction Deshifrator:checkbox1_GetCheck() --/true/false - включен/отключен checkbox1return self.checkbox1:GetCheck()endfunction Deshifrator:checkbox1_button_clicked()endfunction Deshifrator:checkbox2_GetCheck() --/true/false - включен/отключен checkbox2return self.checkbox2:GetCheck()endfunction Deshifrator:checkbox2_button_clicked()endfunction Deshifrator:Hide()self:GetHolder():start_stop_menu(self, true)endfunction main()local hud = Deshifrator(get_hud())level.start_stop_menu(hud, true)end И bind_stalker: function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then Deshifrator.main()endendend Всё вроде верно, но вылет тот же... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Вот всё, что редактировалось - https://dropmefiles.com/pj1af Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 @Kondr48, спасибо попробую. Про сообщения знаю, пользуюсь давно. Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Проблема с GUI отпала вместе с удалением последнего) Новый вопрос - как заставить ГГ в какой-то момент перестать двигаться? Такое было реализованно в моде Золотой Шар, но скачать и посмотреть как там все работает возможности нет. Что приходит в голову - прочитать в конкретный момент времени координаты ГГ, записать их в буфер, и методично каждую секунду исать их заного в память. Но выглядеть будет убого. Еще вариант - в опр момент(допустим после пол. поршня) писать в переменную усталости актора 0. Но как реализовать - кхм, не знаю. Есть у кого варианты, или мб готовые решения? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 @kmsk, а на счет пробела не подскажешь? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 28 Февраля 2016 @BoBaH_671, очень понравилась ваша реализация, но хотелось бы мышь отдельно разблочить. А для этого нужны исходные коды disable_input и enable соотв. У меня на компьютере нет level.script, может кто скинет? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 28 Февраля 2016 @Sla-Sla, не имею возможности и навыков) Ну ладно, будем пробовать. Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 9 Марта 2016 Добрый вечер. Такой вопрос - имеем таблицу с предметами local item_list = { "medkit", "bread", "vodka" } Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ? Знаю что через math.random работать надо, но как - не знаю. Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 9 Марта 2016 Сама функция работает, но наемники нейтралами не становяться. Где может быть проблема? P.S Смс-ка выдаеться function rel_hack() relation_registry.change_community_goodwill ("killer", db.actor:id(), (5000)) news_manager.send_tip(db.actor, "relation 0", nil, nil, 20000) end Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 12 Марта 2016 Подскажите, с чем может быть связан вылет? [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: ...adow of chernobyl\gamedata\scripts\se_respawn.script:449: attempt to compare nil with userdata Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 9 Мая 2016 Привет ребята! Сам в Lua мало понимаю, так что спрошу тут) Требуется сделать небольшую вещь - нужно выполнять произвольный код 3 раза за игровые сутки. Без условий. И да, 3 раза рандомно за 24 часа, т.е в какой час - только math.random. Я максимум что смогу время игровое получить, но как потом проверку в игре делать, в bind_stalker.update() записать - не всегда прокатывает... В общем жду от вас помощи Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 14 Мая 2016 Можно ли получить список всех артефактов на уровне в данный момент времени, и удалить их? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение