Kondr48 314 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 (изменено) function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "deshifrator" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже --episode_system.def_func() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции self.Deshifrator:Hide() end end end CRAZY_STALKER666, я что-то не пойму, откуда вызывается эта функция? Судя по "actor_binder" этот кусок в bind_stalker.script, однако дальше идет вот это: self.Deshifrator:Hide() Вряд ли Deshifrator есть в actor_binder, однако тут self. Это все в совокупности как-то странно, вы дешифратор хотите запускать когда у вас что-то в слоте активно? (тогда логичнее на апдейт и не парится) или при юзании предмета в инвентаре(что-то не припоминаю, чтобы там был аргумент who? Что он передает?) Может я чего-то не понял... --- [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index field 'Deshifrator' (a nil value) Ну собственно как я и думал, лучше вам из колбека на использование предмета вызывать запуск менюшки своей тогда) --- Как вариант запуска, проще не придумать) function gui_start() --куда нибудь в ваш скрипт GUI level.start_stop_menu(this.название_вашего_класса(),true) end if obj:section() == "ваш_девайс" then -- а такую проверочку в колбек на использование предмета. ваш_скрипт.gui_start() end Изменено 26 Февраля 2016 пользователем Kondr48 Ссылка на комментарий
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) Deshifrator.main() Deshifrator судя по всему тут как класс. Вызывай функцию так: имя_твоего_скрипта.main() Изменено 27 Февраля 2016 пользователем Sla-Sla Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 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 и не особо заморачивался с аргументами функции. Не соответствует правилам. Ссылка на комментарий
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, как называется скрипт с классом дешифратора? Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Sla-Sla, Deshifrator.script Не соответствует правилам. Ссылка на комментарий
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, странно. У меня все работало. 1 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 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 Всё вроде верно, но вылет тот же... Не соответствует правилам. Ссылка на комментарий
FonSwong 33 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) @CRAZY_STALKER666Выложите свою геймдату, так легче найти ошибку Изменено 27 Февраля 2016 пользователем FonSwong Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Вот всё, что редактировалось - https://dropmefiles.com/pj1af Не соответствует правилам. Ссылка на комментарий
Kondr48 314 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Все-таки попробуйте вот так: function actor_binder:repair_outfit_start(obj, who) if obj:section() == "deshifrator" then level.start_stop_menu(Deshifrator.Deshifrator(),true) end end P.S. а вообще проверьте на всякий случай правильность написания секции(возможно в конфиге и скрипте опечатка, из-за которой условие и не срабатывает. И в качестве совета, когда что-то работает не так, пихайте в каждое условие вывод сообщения на экран, и смотрите, что и как у вас срабатывает Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Kondr48, спасибо попробую. Про сообщения знаю, пользуюсь давно. Не соответствует правилам. Ссылка на комментарий
kmsk 2 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Добрый вечер, Интересует тот же вопрос что у Kondr48, Как узнать ID предмета только что заспавненного в рюкзаке ГГ. То есть узнать и запомнить в локальной. Чтобы потом можно было удалить по этому же ID. Ссылка на комментарий
Charsi 440 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) @CRAZY_STALKER666, игра не может подгрузить файл Deshifrator.script, т.к. он сохранён в кодировке "UTF-8 BOM". Нужно использовать кодировки "ANSI" или "UTF-8 без BOM". Изменено 27 Февраля 2016 пользователем Charsi 1 2 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Проблема с GUI отпала вместе с удалением последнего) Новый вопрос - как заставить ГГ в какой-то момент перестать двигаться? Такое было реализованно в моде Золотой Шар, но скачать и посмотреть как там все работает возможности нет. Что приходит в голову - прочитать в конкретный момент времени координаты ГГ, записать их в буфер, и методично каждую секунду исать их заного в память. Но выглядеть будет убого. Еще вариант - в опр момент(допустим после пол. поршня) писать в переменную усталости актора 0. Но как реализовать - кхм, не знаю. Есть у кого варианты, или мб готовые решения? Не соответствует правилам. Ссылка на комментарий
kmsk 2 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Просто отключи кнопки передвижения: get_console():execute("unbind forward") get_console():execute("unbind back") get_console():execute("unbind lstrafe") get_console():execute("unbind rstrafe") А когда надо включи: get_console():execute("bind forward kW") get_console():execute("bind back kS") get_console():execute("bind lstrafe kA") get_console():execute("bind rstrafe kD") 1 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @kmsk, а на счет пробела не подскажешь? Не соответствует правилам. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, get_console():execute("unbind jump") Ссылка на комментарий
Overfirst 631 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) Как заставить ГГ в какой-то момент перестать двигаться? level.disable_input() -- блокировка управления level.enable_input() -- разблокировка управления Блочится даже управление мышью. Изменено 27 Февраля 2016 пользователем BoBaH_671 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, set_inactivate_input_time(number) - блочит вроде бы только клавиатуру на определенное время. 1 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 28 Февраля 2016 Поделиться Опубликовано 28 Февраля 2016 @BoBaH_671, очень понравилась ваша реализация, но хотелось бы мышь отдельно разблочить. А для этого нужны исходные коды disable_input и enable соотв. У меня на компьютере нет level.script, может кто скинет? Не соответствует правилам. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти