Перейти к контенту

Рекомендуемые сообщения

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
Изменено пользователем Kondr48
Ссылка на комментарий
 Deshifrator.main()

Deshifrator судя по всему тут как класс. Вызывай функцию так: имя_твоего_скрипта.main()

Изменено пользователем Sla-Sla
Ссылка на комментарий

@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 then
if obj:section() == "deshifrator" then 
Deshifrator.main()
end
end
end

 

 

Всё равно вылетает с тем же логом - nil value


 

 

Вряд ли Deshifrator есть в actor_binder, однако тут self. Это все в совокупности как-то странно, вы дешифратор хотите запускать когда у вас что-то в слоте активно? (тогда логичнее на апдейт и не парится) или при юзании предмета в инвентаре(что-то не припоминаю, чтобы там был аргумент who? Что он передает?) Может я чего-то не понял...

 

Всё верно, при юзании предмета должно открываться GUI-окно.

Что передает who ? Без понятия, изначально я просто нашел функцию отслеживания использования предмета на wiki inside и не особо заморачивался с аргументами функции.

Не соответствует правилам.

Ссылка на комментарий

@Sla-Sla, ладно, проверяем еще раз

 

Deshifrator.script

 

class "Deshifrator" (CUIScriptWnd)

function Deshifrator:__init() super()
self:InitControls()
self:InitCallBacks()
end

function Deshifrator:__finalize()
end

function 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")

end

function 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)
end

function Deshifrator:edit1_GetText() --/получить введенный текст в edit1
return self.edit1:GetText()
end

function Deshifrator:edit1_edit_text_changed()

end

function Deshifrator:button1_button_clicked()

end

function Deshifrator:button2_button_clicked()

end

function Deshifrator:edit2_GetText() --/получить введенный текст в edit2
return self.edit2:GetText()
end

function Deshifrator:checkbox1_GetCheck() --/true/false - включен/отключен checkbox1
return self.checkbox1:GetCheck()
end

function Deshifrator:checkbox1_button_clicked()

end

function Deshifrator:checkbox2_GetCheck() --/true/false - включен/отключен checkbox2
return self.checkbox2:GetCheck()
end

function Deshifrator:checkbox2_button_clicked()

end

function Deshifrator:Hide()
self:GetHolder():start_stop_menu(self, true)
end

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 then
if obj:section() == "deshifrator" then 
Deshifrator.main()
end
end
end

 

 

Всё вроде верно, но вылет тот же...

Не соответствует правилам.

Ссылка на комментарий
@CRAZY_STALKER666Выложите свою геймдату, так легче найти ошибку Изменено пользователем FonSwong
Ссылка на комментарий

Все-таки попробуйте вот так:

function actor_binder:repair_outfit_start(obj, who)
 if obj:section() == "deshifrator" then 
  level.start_stop_menu(Deshifrator.Deshifrator(),true)
 end
end

P.S. а вообще проверьте на всякий случай правильность написания секции(возможно в конфиге и скрипте опечатка, из-за которой условие и не срабатывает. И в качестве совета, когда что-то работает не так, пихайте в каждое условие вывод сообщения на экран, и смотрите, что и как у вас срабатывает :)

Ссылка на комментарий

Добрый вечер, Интересует тот же вопрос что у Kondr48, Как узнать ID предмета только что заспавненного в рюкзаке ГГ. То есть узнать и запомнить в локальной.


Чтобы потом можно было удалить по этому же ID.

Ссылка на комментарий

@CRAZY_STALKER666, игра не может подгрузить файл Deshifrator.script, т.к. он сохранён в кодировке "UTF-8 BOM". Нужно использовать кодировки "ANSI" или "UTF-8 без BOM".

Изменено пользователем Charsi
  • Нравится 1
  • Полезно 2
Ссылка на комментарий

Проблема с GUI отпала вместе с удалением последнего) Новый вопрос - как заставить ГГ в какой-то момент перестать двигаться?

 

Такое было реализованно в моде Золотой Шар, но скачать и посмотреть как там все работает возможности нет.

Что приходит в голову - прочитать в конкретный момент времени координаты ГГ, записать их в буфер, и методично каждую секунду исать их заного в память. Но выглядеть будет убого. Еще вариант - в опр момент(допустим после пол. поршня) писать в переменную усталости актора 0. Но как реализовать - кхм, не знаю.

 

Есть у кого варианты, или мб готовые решения?

Не соответствует правилам.

Ссылка на комментарий

Просто отключи кнопки передвижения:

 

        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
Ссылка на комментарий
Как заставить ГГ в какой-то момент перестать двигаться?
level.disable_input() -- блокировка управления
level.enable_input() -- разблокировка управления

Блочится даже управление мышью.

Изменено пользователем BoBaH_671
  • Спасибо 1

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

@BoBaH_671, очень понравилась ваша реализация, но хотелось бы мышь отдельно разблочить. А для этого нужны исходные коды disable_input и enable соотв. У меня на компьютере нет level.script, может кто скинет?

Не соответствует правилам.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...