226 lines
5.6 KiB
Text
226 lines
5.6 KiB
Text
--' Äèäåíêî Ðóñëàí (Stohe), ×óãàé Àëåêñàíäð (Chugai)
|
|
|
|
|
|
--function printf()
|
|
--end
|
|
|
|
--' â ðàáîòàõ ïîëå object õðàíèò id îáúåêòà
|
|
local pl_gulag_enemy = 0
|
|
|
|
local gulag_tasks_file_name = "misc\\gulag_tasks.ltx"
|
|
local gulag_tasks_ltx = ini_file( gulag_tasks_file_name )
|
|
|
|
local job_position_threshold = 120 --'50 -- ðàññòîÿíèå äî ìåñòà ðàáîòû ïðè êîòîðîì ïåðñîíàæ â îíëàéíå ñ÷èòàåòñÿ äîñòèãøèì ìåñòà ðàáîòû
|
|
local job_idle_after_death = 10 -- â òå÷åíèè òàêîãî ïåðèîäà âðåìåíè ïîñëå ñìåðòè ïåðñîíàæà åãî ðàáîòà áóäåò íåäîñòóïíà
|
|
|
|
idle_nil = nil
|
|
idle_once = -1
|
|
idle_none = -2
|
|
|
|
local path_fields = { "path_walk", "path_main", "path_home", "center_point" }
|
|
|
|
----------------------------------------------------------------------------------------------------------------------
|
|
-- Ôóíêöèè, êîòîðûå ìîãóò âûçûâàòüñÿ èçâíå
|
|
----------------------------------------------------------------------------------------------------------------------
|
|
|
|
-- ïîëó÷èòü ãóëàã ïî èìåíè ñìàðòà.
|
|
-- ðàáîòàåò òîëüêî äëÿ ñìàðòîâ, êîòîðûå â îíëàéíå.
|
|
function get_gulag_by_name(name)
|
|
local strn = sim_board.get_sim_board().smarts_by_names[name]
|
|
if strn then
|
|
return strn
|
|
else
|
|
printf("there is no gulag with name [%s] ",name)
|
|
return nil
|
|
end
|
|
end
|
|
|
|
-- ïîëó÷èòü ãóëàã ïî story id ñìàðòà
|
|
-- ðàáîòàåò âñåãäà
|
|
function get_gulag_by_sid(sid)
|
|
local strn = alife():object(get_story_object_id(sid))
|
|
|
|
return strn
|
|
end
|
|
|
|
-- ïîëó÷èòü ãóëàã ïî èìåíè èëè story id ñìàðòà
|
|
function get_gulag( name_or_sid )
|
|
if type( name_or_sid ) == "number" then
|
|
return get_gulag_by_sid( name_or_sid )
|
|
else
|
|
return get_gulag_by_name( name_or_sid )
|
|
end
|
|
end
|
|
|
|
-- ïîëó÷èòü ãóëàã ïåðñîíàæà
|
|
-- obj=game_object
|
|
function get_npc_smart(obj)
|
|
--printf("npc id is [%s]", obj:id())
|
|
local se_obj = alife():object(obj:id())
|
|
if se_obj == nil then
|
|
return nil
|
|
-- abort("server_obj is nil!!!!!")
|
|
end
|
|
if se_obj.m_smart_terrain_id ~= 65535 then
|
|
return alife():object(se_obj.m_smart_terrain_id)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-- óñòàíîâèòü îòíîøåíèå âñåõ ÷ëåíîâ ñìàðòà ê óêàçàííîìó îáúåêòó
|
|
function setGulagRelation( name_or_sid, relation, target_obj )
|
|
local gulag = get_gulag( name_or_sid )
|
|
|
|
if gulag then
|
|
gulag:set_relation( relation, target_obj )
|
|
end
|
|
end
|
|
|
|
-- óñòàíîâèòü ðàñïîëîæåíèíå âñåõ ÷ëåíîâ ñìàðòà ê óêàçàííîìó îáúåêòó
|
|
function setGulagGoodwill( name_or_sid, goodwill, target_obj )
|
|
local gulag = get_gulag( name_or_sid )
|
|
|
|
if gulag then
|
|
gulag:set_goodwill( goodwill, target_obj )
|
|
end
|
|
end
|
|
|
|
-- ñäåëàòü óêàçàííîãî ïåðñîíàæà âðàãîì âñåõ ïåðñîíàæåé ñìàðòà
|
|
function setGulagEnemy( name_or_sid, target_obj )
|
|
setGulagRelation( name_or_sid, game_object.enemy, target_obj )
|
|
end
|
|
|
|
-- ñäåëàòü óêàçàííîãî ïåðñîíàæà âðàãîì âñåõ ïåðñîíàæåé ñìàðòà, êîòîðûå â îíëàéíå
|
|
function setGulagNeutral( name_or_sid, target_obj )
|
|
setGulagRelation( name_or_sid, game_object.neutral, target_obj )
|
|
end
|
|
|
|
-- îñâîáîäèòü ïåðñîíàæà îò ðàáîòû.
|
|
-- obj=game_object
|
|
function resetJob( obj )
|
|
printf( "gulag resetJob: obj=%s", obj:name() )
|
|
|
|
local gulag = get_npc_smart( obj )
|
|
if gulag then
|
|
gulag:free_obj_and_reinit( obj:id() )
|
|
gulag:update()
|
|
end
|
|
end
|
|
|
|
function free_object( obj )
|
|
printf( "gulag free_object: obj=%s", obj:name() )
|
|
|
|
local gulag = get_npc_smart( obj )
|
|
if gulag then
|
|
gulag:free_obj( obj:id() )
|
|
--gulag:update()
|
|
end
|
|
end
|
|
|
|
|
|
-- íå íàõîäèòñÿ ëè èñòî÷íèê èíôîðìàöèè âíå èíôîðìàöèîííîãî ðåñòðèêòîðà?
|
|
-- åñëè âíå, òî èíôîðìàöèÿ áóäåò çàïðåùåíà
|
|
-- ôóíêöèÿ êåøèðóåò game_object ðåñòðèêòîðà
|
|
function is_info_restricted( obj_id, info_pos )
|
|
local r = db.info_restr[obj_id]
|
|
|
|
if r == nil then
|
|
return false
|
|
end
|
|
|
|
if type(r) == "string" then
|
|
r = db.zone_by_name[r]
|
|
|
|
if r == nil then
|
|
return false
|
|
end
|
|
|
|
db.info_restr[obj_id] = r
|
|
end
|
|
|
|
return not r:inside( info_pos )
|
|
end
|
|
|
|
--' Íàéòè çàìåíó ñòàëêåðó íà ðàáîòå GUARD ïî èñòå÷åíèþ âðåìåíè ðàáîòû.
|
|
function find_stalker_for_job(obj, need_job)
|
|
local smart = get_npc_smart(obj)
|
|
|
|
-- Òóò ìû òèïà âûáèðàåì ÷óâàêà íà êàêîé òî ðàáîòå.
|
|
for k,v in pairs(smart.npc_info) do
|
|
local npc_job = smart.job_data[v.job_id]
|
|
if npc_job ~= nil and npc_job.reserve_job == true then
|
|
local selected_npc_data = smart.npc_info[k]
|
|
-- Ó âûáðàííîãî ÷óâàêà óñòàíàâëèâàåì, ÷òî îí íàì íóæåí êàê çàìåíà ãâàðäó
|
|
selected_npc_data.need_job = need_job
|
|
return
|
|
end
|
|
end
|
|
--abort("Couldnt find reserved job")
|
|
end
|
|
|
|
function switch_to_desired_job(npc)
|
|
-- Ïåðåêëþ÷àåò ÷óâàêà íà ðàáîòó, êîòîðóþ îí õî÷åò (need_job). Ðàáîòà âûáèðàåòñÿ îòäåëüíî.
|
|
local smart = get_npc_smart(npc)
|
|
smart:switch_to_desired_job(npc)
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------
|
|
|
|
-- çàãðóçêà äèíàìè÷åñêèõ ltx
|
|
-- èõ èìåíà: "*èìÿ_ñìàðòòåðåéíà*òèï_ãóëàãà"
|
|
local dynamic_ltx = {}
|
|
function loadLtx(name)
|
|
local h = "*"..name
|
|
local dltx = dynamic_ltx[h]
|
|
|
|
if dltx then
|
|
return dltx, h
|
|
else
|
|
local l
|
|
l = gulag_general.load_ltx(name)
|
|
if l ~= nil then
|
|
dltx = create_ini_file(l)
|
|
dynamic_ltx[h] = dltx
|
|
return dltx, h
|
|
end
|
|
return nil, nil
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function job_in_restrictor(smart, restrictor_name, way_name)
|
|
--printf("SMART [%s] restr [%s]", smart:name(), tostring(restrictor_name))
|
|
|
|
if restrictor_name == nil then
|
|
return nil
|
|
end
|
|
|
|
local restrictor = db.zone_by_name[restrictor_name]
|
|
-- Ðåñòðèêòîð åùå íå ïðîñïîíèëñÿ
|
|
if restrictor == nil then
|
|
return nil
|
|
end
|
|
|
|
local patrol = patrol(way_name)
|
|
local cnt = patrol:count()
|
|
|
|
for pt = 0, cnt - 1 do
|
|
if not restrictor:inside(patrol:point(pt)) then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
|