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

Скриптование


Svoboда

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

Создал что-то типо сверхскромного мини-меню. В нем если параметр helltime равен 0 происходит вызов noupdate.zzz()-пустой функции простоя. Если же helltime = 1 то по идее произойдет то что под звездами на пример спавн мутантов. Верен ли скрипт воопще и будет ли работать??

 

 

function helltime_update()

 

local helltime = 0

 

if helltime == 0 then

 

noupdate.zzz()

 

else

 

helltime == 1

---

***

---

 

end

end

 

 

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

Поделиться этим сообщением


Ссылка на сообщение

Нашел старый скрипт от колгомора для возрождения НПЦ. Вот он-

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 нету?

Изменено пользователем ColR_iT

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

Поделиться этим сообщением


Ссылка на сообщение

Shoker

Обрывается на этом -

amk.convert_npc[id] = true
local sim = alife ()
sim:set_switch_online (id, false)
sim:set_switch_offline (id, true)

Как понял? Кргда ложиш стаалкеру в инвертарь арт он исправно закрывается. А далее простой.

 

Раз уж взялся писать в данную тему - "шапку" прочти, пожалуйста!

ColR_iT

Изменено пользователем ColR_iT

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

Поделиться этим сообщением


Ссылка на сообщение

Добрый день. Такая проблема. Есть описанный класс дешифратора( на GUI-элементах)

 

 

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 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

 

 

Класс зарегестрирован в 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)

 

 

Изменено пользователем CRAZY_STALKER666

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

Поделиться этим сообщением


Ссылка на сообщение

@Sla-Sla, вызывал в точности, как у вас. Вылет:

 

[error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index global 'Deshifrator' (a nil value)

 

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

Поделиться этим сообщением


Ссылка на сообщение

@Sla-Sla, функцию вписал в deshifrator.script(там где и описание этого класса идет).

Вызывал как обычно, из bind_stalker

Вот вызов - Deshifrator.main()

Изменено пользователем CRAZY_STALKER666

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

Поделиться этим сообщением


Ссылка на сообщение

@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

 

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

 

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

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

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

Поделиться этим сообщением


Ссылка на сообщение

Добрый вечер. Такой вопрос - имеем таблицу с предметами

 

 

  local item_list = { "medkit",

"bread",

"vodka" } 

 

Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ? Знаю что через math.random работать надо, но как - не знаю.

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

Поделиться этим сообщением


Ссылка на сообщение

Сама функция работает, но наемники нейтралами не становяться.

Где может быть проблема?

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

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

Поделиться этим сообщением


Ссылка на сообщение

Подскажите, с чем может быть связан вылет?

 

 

 

[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

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

Поделиться этим сообщением


Ссылка на сообщение

Привет ребята! Сам в Lua мало понимаю, так что спрошу тут)

Требуется сделать небольшую вещь - нужно выполнять произвольный код 3 раза за игровые сутки. Без условий.

И да, 3 раза рандомно за 24 часа, т.е в какой час - только math.random.

 

Я максимум что смогу время игровое получить, но как потом проверку в игре делать, в bind_stalker.update() записать -  не всегда прокатывает...

В общем жду от вас помощи :)  

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

Поделиться этим сообщением


Ссылка на сообщение

Можно ли получить список всех артефактов на уровне в данный момент времени, и удалить их?

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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