tt44
01 wrz 2014, 15:46
Posty: 1• Strona 1 z 1
Wyjaśnię tutaj jak stworzyć moduł dla resryktora. Przykładowe przydatne, istniejące już resryktory:
"sr_no_weapon" - odpowiada za chowanie broni aktora w wyznaczonych miejscach
"sr_cutscene" - gdy aktor do niego wejdzie rozpoczyna się cutscenka
"sr_tip" - aktor otrzymuje wiadomość po wejściu do niego
Wszystkie moduły muszą być uwzględnione w skrypcie modules.
[lua]
load_scheme("nazwa_skryptu", "nazwa_modułu", typ_modułu)
-- modułom restryktorów nadajemy typ "stype_restrictor"
load_scheme("nowy_skrypt", "nowy_restryktor", stype_restrictor)
[/lua]
A tak ma wyglądać sam skrypt:
[lua]
local state_nowhere = 0
local state_inside = 1
local state_outside = 2
------------------------------
class "nowy_restryktor"
------------------------------
function nowy_restryktor:__init(obj, storage )
self.object = obj
self.st = storage
end
function nowy_restryktor:reset_scheme()
self.state = state_nowhere
end
function nowy_restryktor:update(delta)
local actor = db.actor
if xr_logic.try_switch_to_another_section(self.object, self.st, actor) then
return false
end
-- Różnicowanie stanu w zależności od tego czy aktor jest wewnątrz restryktora czy przed chwilą go opuścił
local state = self.state
-- Jeśli aktor wkracza w restryktor
if state == state_outside or state == state_nowhere then
if self.object:inside(actor:center()) then
self:zone_enter()
end
end
-- Jeśli aktor opuszcza restryktor
if state == state_inside or state == state_nowhere then
if not self.object:inside(actor:center()) then
self:zone_leave()
end
end
end
-- Funkcja wywoływana po wejściu w restryktor
function nowy_restryktor:zone_enter()
self.state = state_inside
end
-- Funkcja wywoływana po opuszczeniu restryktora
function nowy_restryktor:zone_leave()
self.state = state_outside
end
function add_to_binder(npc, ini, scheme, section, storage)
local new_action = nowy_restryktor(npc, storage)
end
-- Funkcja dodająca schemat
function set_scheme(npc, ini, scheme, section, gulag_name)
local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)
st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc)
end
[/lua]
"sr_no_weapon" - odpowiada za chowanie broni aktora w wyznaczonych miejscach
"sr_cutscene" - gdy aktor do niego wejdzie rozpoczyna się cutscenka
"sr_tip" - aktor otrzymuje wiadomość po wejściu do niego
Wszystkie moduły muszą być uwzględnione w skrypcie modules.
[lua]
load_scheme("nazwa_skryptu", "nazwa_modułu", typ_modułu)
-- modułom restryktorów nadajemy typ "stype_restrictor"
load_scheme("nowy_skrypt", "nowy_restryktor", stype_restrictor)
[/lua]
A tak ma wyglądać sam skrypt:
[lua]
local state_nowhere = 0
local state_inside = 1
local state_outside = 2
------------------------------
class "nowy_restryktor"
------------------------------
function nowy_restryktor:__init(obj, storage )
self.object = obj
self.st = storage
end
function nowy_restryktor:reset_scheme()
self.state = state_nowhere
end
function nowy_restryktor:update(delta)
local actor = db.actor
if xr_logic.try_switch_to_another_section(self.object, self.st, actor) then
return false
end
-- Różnicowanie stanu w zależności od tego czy aktor jest wewnątrz restryktora czy przed chwilą go opuścił
local state = self.state
-- Jeśli aktor wkracza w restryktor
if state == state_outside or state == state_nowhere then
if self.object:inside(actor:center()) then
self:zone_enter()
end
end
-- Jeśli aktor opuszcza restryktor
if state == state_inside or state == state_nowhere then
if not self.object:inside(actor:center()) then
self:zone_leave()
end
end
end
-- Funkcja wywoływana po wejściu w restryktor
function nowy_restryktor:zone_enter()
self.state = state_inside
end
-- Funkcja wywoływana po opuszczeniu restryktora
function nowy_restryktor:zone_leave()
self.state = state_outside
end
function add_to_binder(npc, ini, scheme, section, storage)
local new_action = nowy_restryktor(npc, storage)
end
-- Funkcja dodająca schemat
function set_scheme(npc, ini, scheme, section, gulag_name)
local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)
st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc)
end
[/lua]
Postawili kozaka za ten post (2):
Posty: 1• Strona 1 z 1
