add game&rawdata
This commit is contained in:
parent
0133cd976c
commit
49b34b5546
45731 changed files with 709831 additions and 0 deletions
869
gamedata/scripts/_g.script
Normal file
869
gamedata/scripts/_g.script
Normal file
|
|
@ -0,0 +1,869 @@
|
|||
if (jit == nil) then
|
||||
profiler.setup_hook ()
|
||||
end
|
||||
|
||||
|
||||
function empty (container)
|
||||
if (type(container) == "function") then
|
||||
for i in container do
|
||||
return (false)
|
||||
end
|
||||
return (true)
|
||||
end
|
||||
assert (type(container) == "table")
|
||||
if (container[1] ~= nil) then
|
||||
return (false)
|
||||
end
|
||||
for i,j in pairs(container) do
|
||||
return (false)
|
||||
end
|
||||
return (true)
|
||||
end
|
||||
|
||||
|
||||
schemes = {} -- ñîîòâåòñòâèå ñõåì ìîäóëÿì
|
||||
stypes = {} -- òèïv ñõåì
|
||||
|
||||
-- ³àãðóæàåò ñõåìó èç ôàéëà íà äèñêå è àêòèâèðóåò â ìîòèâàòîðå.
|
||||
-- ³äåñü:
|
||||
-- filename - èìÿ ôàéëà, â êîòîðîì ðåàëèçîâàíà ñõåìà, áåç ðàñøèðåíèÿ
|
||||
-- scheme - èìÿ ñõåì
|
||||
function load_scheme(filename, scheme, stype)
|
||||
schemes[scheme] = filename
|
||||
stypes[scheme] = stype
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------
|
||||
dev_debug = false
|
||||
sim_debug = false
|
||||
mus_vol = 0
|
||||
amb_vol = 0
|
||||
b_discard_settings_shown = false
|
||||
----------------------------------------------------------------------
|
||||
local scripts_to_print = {
|
||||
["stalker_generic"] = true,
|
||||
["xr_smartcover"] = true,
|
||||
["xr_logic"] = true,
|
||||
["xr_conditions"] = true,
|
||||
["xr_cover"] = true,
|
||||
["xr_motivator"] = true,
|
||||
["xr_walker"] = true,
|
||||
["xr_camper"] = true,
|
||||
["xr_kamp"] = true,
|
||||
["restrictor_manager"] = true,
|
||||
["sim_board"] = true,
|
||||
["sim_faction"] = true,
|
||||
["post_combat_idle"] = true,
|
||||
["xr_death"] = true,
|
||||
["xr_sound"] = true,
|
||||
["utils"] = true,
|
||||
["treasure_manager"] = true,
|
||||
["object_collection"] = true,
|
||||
["se_actor"] = true,
|
||||
["smart_terrain"] = true,
|
||||
["bind_physic_object"] = true,
|
||||
["bind_heli"] = true,
|
||||
["bind_anomaly_zone"] = true,
|
||||
["bind_stalker"] = true,
|
||||
["state_mgr_animation"] = true,
|
||||
["se_stalker"] = true,
|
||||
["db"] = true,
|
||||
["sim_squad_generic"] = true,
|
||||
["sim_squad_scripted"] = true,
|
||||
["se_smart_cover"] = true,
|
||||
["se_monster"] = true,
|
||||
["dialog_manager"] = true,
|
||||
["xr_combat_ignore"] = true,
|
||||
["xr_remark"] = true,
|
||||
["cover_manager"] = true,
|
||||
["xr_danger"] = true,
|
||||
["task_manager"] = true,
|
||||
["task_objects"] = true
|
||||
}
|
||||
function printf(fmt,...)
|
||||
|
||||
local is_g = 0
|
||||
local result = fmt
|
||||
if debug == nil then
|
||||
log(string.format(fmt,...))
|
||||
return
|
||||
end
|
||||
local info_table = debug.getinfo(2)
|
||||
local script_name = string.gsub(info_table.short_src, "%.script", "")
|
||||
script_name = string.gsub(script_name, "gamedata\\scripts\\", "")
|
||||
|
||||
if scripts_to_print[script_name] == false then return end
|
||||
|
||||
script_name,is_g = string.gsub(script_name, "_g", "")
|
||||
if is_g == 0 then
|
||||
result = script_name..":("..info_table.currentline.."):"..fmt
|
||||
else
|
||||
result = fmt
|
||||
end
|
||||
log(string.format(result,...))
|
||||
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------
|
||||
if nil == time_global then
|
||||
time_global = function () return device():time_global() end
|
||||
end
|
||||
|
||||
function wait_game(time_to_wait)
|
||||
verify_if_thread_is_running()
|
||||
if (time_to_wait == nil) then
|
||||
coroutine.yield()
|
||||
else
|
||||
local time_to_stop = game.time() + time_to_wait
|
||||
while game.time() <= time_to_stop do
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function wait(time_to_wait)
|
||||
verify_if_thread_is_running()
|
||||
if (time_to_wait == nil) then
|
||||
coroutine.yield()
|
||||
else
|
||||
local time_to_stop = time_global() + time_to_wait
|
||||
while time_global() <= time_to_stop do
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function action(obj,...)
|
||||
local arg = {...}
|
||||
local act = entity_action()
|
||||
local i = 1
|
||||
while true do
|
||||
if (arg[i] ~= nil) then
|
||||
act:set_action(arg[i])
|
||||
else
|
||||
break
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
if (obj ~= nil) then
|
||||
obj:command(act,false)
|
||||
end
|
||||
return entity_action(act)
|
||||
end
|
||||
|
||||
function action_first(obj,...)
|
||||
local arg = {...}
|
||||
local act = entity_action()
|
||||
local i = 1
|
||||
while true do
|
||||
if (arg[i] ~= nil) then
|
||||
act:set_action(arg[i])
|
||||
else
|
||||
break
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
if (obj ~= nil) then
|
||||
obj:command(act,true)
|
||||
end
|
||||
return entity_action(act)
|
||||
end
|
||||
|
||||
function round (value)
|
||||
local min = math.floor (value)
|
||||
local max = min + 1
|
||||
if value - min > max - value then return max end
|
||||
return min
|
||||
end
|
||||
|
||||
|
||||
function distance_between(obj1, obj2)
|
||||
return obj1:position():distance_to(obj2:position())
|
||||
end
|
||||
|
||||
-- +ñëè îäèí îáúåêò nil, íàïðèìåð íåò àêòåðà, òî ñ÷èòàåì, ÷òî îí äàëåêî
|
||||
function distance_between_safe(obj1, obj2)
|
||||
if(obj1 == nil or obj2 == nil) then return 100000 end
|
||||
return obj1:position():distance_to(obj2:position())
|
||||
end
|
||||
|
||||
local aa = nil
|
||||
--' ³ðîâåðêà íà èíôîïîðøív, äàæå åñëè èãðîêà íå ñó åñòâóåò
|
||||
function has_alife_info(info_id)
|
||||
if aa == nil then
|
||||
return false
|
||||
end
|
||||
return aa:has_info(0, info_id)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function reset_action (npc, script_name)
|
||||
if npc:get_script () then
|
||||
npc:script (false, script_name)
|
||||
end
|
||||
npc:script (true, script_name)
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- Functions and variables added by Zmey
|
||||
--------------------------------------------------
|
||||
|
||||
-- ³îíñòàíòà, êîòîðó³ èñïîëüçîâàòü â ìåñòàõ, ãäå íóæíî çàäàòü íåîãðàíè÷åííîå âðåìÿ äåéñòâèÿ
|
||||
time_infinite = 100000000
|
||||
|
||||
-- +ñëè â äàíívé ìîìåíò âvïîëíÿåòñÿ êàêîå-òî äåéñòâèå, ïðåðvâàåò åãî è îòêë³÷àåò ñêðèïòîâvé ðåæèì
|
||||
function interrupt_action(who, script_name)
|
||||
if who:get_script() then
|
||||
who:script(false, script_name)
|
||||
end
|
||||
end
|
||||
|
||||
function random_choice(...)
|
||||
local arg = {...}
|
||||
local r = math.random(1, #arg)
|
||||
return arg[r]
|
||||
end
|
||||
|
||||
function if_then_else(cond, if_true, if_false)
|
||||
if cond then
|
||||
return if_true
|
||||
end
|
||||
return if_false
|
||||
end
|
||||
|
||||
|
||||
function set_current_time (hour, min, sec)
|
||||
local current_time_factor = level.get_time_factor ()
|
||||
printf ("Need time : %d:%d:%d", hour, min, sec)
|
||||
local current_time = game.time ()
|
||||
local c_day = math.floor (current_time / 86400000)
|
||||
local c_time = current_time - c_day * 86400000
|
||||
local n_time = (sec + min * 60 + hour * 3600) * 1000
|
||||
|
||||
if c_time > n_time then c_day = c_day + 1 end
|
||||
n_time = n_time + c_day * 86400000
|
||||
level.set_time_factor (10000)
|
||||
while game.time () < n_time do wait () end
|
||||
level.set_time_factor (current_time_factor)
|
||||
end
|
||||
|
||||
function random_number (min_value, max_value)
|
||||
math.randomseed (device ():time_global ())
|
||||
if min_value == nil and max_value == nil then
|
||||
return math.random ()
|
||||
else
|
||||
return math.random (min_value, max_value)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function parse_names( s )
|
||||
local t = {}
|
||||
for name in string.gfind( s, "([%w_\\]+)%p*" ) do
|
||||
--for name in string.gfind( s, "%s*([^%,]+)%s*" ) do
|
||||
table.insert( t, name )
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
function parse_key_value( s )
|
||||
local t = {}
|
||||
if s == nil then
|
||||
return nil
|
||||
end
|
||||
local key, nam = nil, nil
|
||||
for name in string.gfind( s, "([%w_\\]+)%p*" ) do
|
||||
if key == nil then
|
||||
key = name
|
||||
else
|
||||
t[key] = name
|
||||
key = nil
|
||||
end
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
function parse_nums( s )
|
||||
local t = {}
|
||||
for entry in string.gfind( s, "([%-%d%.]+)%,*" ) do
|
||||
table.insert( t, tonumber( entry ) )
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
-- Íàõîäèòñÿ ëè îáüåêò â îíëàéíå.
|
||||
function is_object_online(obj_id)
|
||||
return level.object_by_id(obj_id) ~= nil
|
||||
end
|
||||
|
||||
function get_clsid(npc)
|
||||
if npc == nil then return nil end
|
||||
return npc:clsid()
|
||||
end
|
||||
|
||||
--Tv÷èñëÿåò yaw â ðàäèàíàõ
|
||||
function yaw( v1, v2 )
|
||||
return math.acos( ( (v1.x*v2.x) + (v1.z*v2.z ) ) / ( math.sqrt(v1.x*v1.x + v1.z*v1.z ) * math.sqrt(v2.x*v2.x + v2.z*v2.z ) ) )
|
||||
end
|
||||
function yaw_degree( v1, v2 )
|
||||
return (math.acos( ( (v1.x*v2.x) + (v1.z*v2.z ) ) / ( math.sqrt(v1.x*v1.x + v1.z*v1.z ) * math.sqrt(v2.x*v2.x + v2.z*v2.z ) ) ) * 57.2957)
|
||||
end
|
||||
function yaw_degree3d( v1, v2 )
|
||||
return (math.acos((v1.x*v2.x + v1.y*v2.y + v1.z*v2.z)/(math.sqrt(v1.x*v1.x + v1.y*v1.y + v1.z*v1.z )*math.sqrt(v2.x*v2.x + v2.y*v2.y + v2.z*v2.z)))*57.2957)
|
||||
end
|
||||
function vector_cross(v1, v2)
|
||||
return vector():set(v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x)
|
||||
end
|
||||
|
||||
--Ïîâîðà÷èâàåò âåêòîð âîêðóã îñè y ïðîòèâ ÷àñîâîé ñòðåëêè.
|
||||
function vector_rotate_y(v, angle)
|
||||
angle = angle * 0.017453292519943295769236907684886
|
||||
local c = math.cos (angle)
|
||||
local s = math.sin (angle)
|
||||
return vector ():set (v.x * c - v.z * s, v.y, v.x * s + v.z * c)
|
||||
end
|
||||
|
||||
-- î÷èñòêà òàáëèöû.
|
||||
function clear_table (t)
|
||||
while #t > 0 do
|
||||
table.remove (t, #t)
|
||||
end
|
||||
end
|
||||
|
||||
function stop_play_sound(obj)
|
||||
if obj:alive() == true then
|
||||
obj:set_sound_mask(-1)
|
||||
obj:set_sound_mask(0)
|
||||
end
|
||||
end
|
||||
|
||||
-- Ïå÷àòàåò òàáëèöó êàê äåðåâî.
|
||||
function print_table(table, subs)
|
||||
local sub
|
||||
if subs ~= nil then
|
||||
sub = subs
|
||||
else
|
||||
sub = ""
|
||||
end
|
||||
for k,v in pairs(table) do
|
||||
if type(v) == "table" then
|
||||
printf(sub.."%s:", tostring(k))
|
||||
print_table(v, sub.." ")
|
||||
elseif type(v) == "function" then
|
||||
printf(sub.."%s:function", tostring(k))
|
||||
elseif type(v) == "userdata" then
|
||||
printf(sub.."%s:userdata", tostring(k))
|
||||
elseif type(v) == "boolean" then
|
||||
if v == true then
|
||||
if(type(k)~="userdata") then
|
||||
printf(sub.."%s:true", tostring(k))
|
||||
else
|
||||
printf(sub.."userdata:true")
|
||||
end
|
||||
else
|
||||
if(type(k)~="userdata") then
|
||||
printf(sub.."%s:false", tostring(k))
|
||||
else
|
||||
printf(sub.."userdata:false")
|
||||
end
|
||||
end
|
||||
else
|
||||
if v ~= nil then
|
||||
printf(sub.."%s:%s", tostring(k),v)
|
||||
else
|
||||
printf(sub.."%s:nil", tostring(k),v)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function store_table(table, subs)
|
||||
local sub
|
||||
if subs ~= nil then
|
||||
sub = subs
|
||||
else
|
||||
sub = ""
|
||||
end
|
||||
printf(sub.."{")
|
||||
for k,v in pairs(table) do
|
||||
if type(v) == "table" then
|
||||
printf(sub.."%s = ", tostring(k))
|
||||
store_table(v, sub.." ")
|
||||
elseif type(v) == "function" then
|
||||
printf(sub.."%s = \"func\",", tostring(k))
|
||||
elseif type(v) == "userdata" then
|
||||
printf(sub.."%s = \"userdata\",", tostring(k))
|
||||
elseif type(v) == "string" then
|
||||
printf(sub.."%s = \"%s\",", tostring(k), tostring(v))
|
||||
else
|
||||
printf(sub.."%s = %s,", tostring(k), tostring(v))
|
||||
end
|
||||
end
|
||||
printf(sub.."},")
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
local monster_classes = {}
|
||||
local stalker_classes = {}
|
||||
local weapon_classes = {}
|
||||
local artefact_classes = {}
|
||||
|
||||
function IsMonster (object, class_id)
|
||||
local id = class_id or get_clsid(object)
|
||||
return monster_classes[id] == true
|
||||
end
|
||||
function IsStalker (object, class_id)
|
||||
local id = class_id or get_clsid(object)
|
||||
return stalker_classes[id] == true
|
||||
end
|
||||
|
||||
function isWeapon(object, class_id)
|
||||
local id = class_id or get_clsid(object)
|
||||
return weapon_classes[id] == true
|
||||
end
|
||||
|
||||
function isArtefact(object, class_id)
|
||||
local id = class_id or get_clsid(object)
|
||||
return artefact_classes[id] == true
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
function get_object_community(obj)
|
||||
if type(obj.id) == "function" then
|
||||
return character_community(obj)
|
||||
else
|
||||
return alife_character_community(obj)
|
||||
end
|
||||
end
|
||||
|
||||
function character_community (obj)
|
||||
if IsStalker(obj) then
|
||||
return obj:character_community()
|
||||
end
|
||||
return "monster"
|
||||
end
|
||||
|
||||
function alife_character_community (obj)
|
||||
if IsStalker(obj, obj:clsid()) then
|
||||
return obj:community()
|
||||
end
|
||||
return "monster"
|
||||
end
|
||||
|
||||
-- ïîëó÷èòü ãåéìîáæåêò ïî ñòîðè_àéäè.
|
||||
function level_object_by_sid( sid )
|
||||
local sim = alife()
|
||||
if sim then
|
||||
local se_obj = sim:story_object( sid )
|
||||
if se_obj then
|
||||
return level.object_by_id( se_obj.id )
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
-- Ïîëó÷èòü àéäèøíèê îáüåêòà ïî ñòîðè àéäè.
|
||||
function id_by_sid( sid )
|
||||
local sim = alife()
|
||||
if sim then
|
||||
local se_obj = sim:story_object( sid )
|
||||
if se_obj then
|
||||
return se_obj.id
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Êðåøíóòü èãðó (ïîñëå âûâîäà ñîîáùåíèÿ îá îøèáêå â ëîã)
|
||||
function abort(fmt, ...)
|
||||
local reason = string.format(fmt, ...)
|
||||
--error_log(reason)
|
||||
end
|
||||
|
||||
function set_inactivate_input_time(delta)
|
||||
db.storage[db.actor:id()].disable_input_time = game.get_game_time()
|
||||
db.storage[db.actor:id()].disable_input_idle = delta
|
||||
level.disable_input()
|
||||
end
|
||||
|
||||
-- ³ðèíèìàåò: ïîçèöè³ ïîëîæåíèÿ, ïîçèöè³ êóäà ñìîòðåòü, âðåìÿ ñíà â ìèíóòàõ.
|
||||
--[[
|
||||
function set_sleep_relocate(point, look, timeout)
|
||||
db.storage[db.actor:id()].sleep_relocate_time = game.get_game_time()
|
||||
db.storage[db.actor:id()].sleep_relocate_idle = timeout*60
|
||||
db.storage[db.actor:id()].sleep_relocate_point = point
|
||||
db.storage[db.actor:id()].sleep_relocate_look = look
|
||||
end
|
||||
]]--
|
||||
|
||||
-- ïðîâåðÿåò öåëóþ ÷àñòü ÷èñëà íà íå÷åòíîñòü
|
||||
function odd( x )
|
||||
return math.floor( x * 0.5 ) * 2 == math.floor( x )
|
||||
end
|
||||
|
||||
--' íàõîäèòñÿ ëè NPC âî ôðóñòðóìå èãðîêà
|
||||
function npc_in_actor_frustrum(npc)
|
||||
local actor_dir = device().cam_dir
|
||||
--local actor_dir = db.actor:direction()
|
||||
local npc_dir = npc:position():sub(db.actor:position())
|
||||
local yaw = yaw_degree3d(actor_dir, npc_dir)
|
||||
--printf("YAW %s", tostring(yaw))
|
||||
return yaw < 35
|
||||
end
|
||||
|
||||
function start_game_callback()
|
||||
aa = alife()
|
||||
|
||||
squad_community_by_behaviour = {
|
||||
["stalker"] = "stalker",
|
||||
["bandit"] = "bandit",
|
||||
["dolg"] = "dolg",
|
||||
["freedom"] = "freedom",
|
||||
["army"] = "army",
|
||||
["ecolog"] = "ecolog",
|
||||
["killer"] = "killer",
|
||||
["zombied"] = "zombied",
|
||||
["monolith"] = "monolith",
|
||||
["monster"] = "monster",
|
||||
["monster_predatory_day"] = "monster",
|
||||
["monster_predatory_night"] = "monster",
|
||||
["monster_vegetarian"] = "monster",
|
||||
["monster_zombied_day"] = "monster",
|
||||
["monster_zombied_night"] = "monster",
|
||||
["monster_special"] = "monster"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
monster_classes = {
|
||||
[clsid.bloodsucker_s] = true,
|
||||
[clsid.boar_s] = true,
|
||||
[clsid.dog_s] = true,
|
||||
[clsid.flesh_s] = true,
|
||||
[clsid.pseudodog_s] = true,
|
||||
[clsid.burer_s] = true,
|
||||
-- [clsid.cat_s] = true,
|
||||
[clsid.chimera_s] = true,
|
||||
[clsid.controller_s] = true,
|
||||
-- [clsid.fracture_s] = true,
|
||||
[clsid.poltergeist_s] = true,
|
||||
[clsid.gigant_s] = true,
|
||||
-- [clsid.zombie_s] = true,
|
||||
[clsid.snork_s] = true,
|
||||
[clsid.tushkano_s] = true,
|
||||
[clsid.psy_dog_s] = true,
|
||||
[clsid.psy_dog_phantom_s] = true}
|
||||
|
||||
stalker_classes = {
|
||||
[clsid.script_actor] = true,
|
||||
[clsid.script_stalker] = true}
|
||||
|
||||
weapon_classes = {
|
||||
[clsid.wpn_vintorez_s] = true,
|
||||
[clsid.wpn_ak74_s] = true,
|
||||
[clsid.wpn_lr300_s] = true,
|
||||
[clsid.wpn_hpsa_s] = true,
|
||||
[clsid.wpn_pm_s] = true,
|
||||
[clsid.wpn_shotgun_s] = true,
|
||||
[clsid.wpn_auto_shotgun_s] = true,
|
||||
[clsid.wpn_bm16_s] = true,
|
||||
[clsid.wpn_svd_s] = true,
|
||||
[clsid.wpn_svu_s] = true,
|
||||
[clsid.wpn_rg6_s] = true,
|
||||
[clsid.wpn_rpg7_s] = true,
|
||||
[clsid.wpn_val_s] = true,
|
||||
[clsid.wpn_walther_s] = true,
|
||||
[clsid.wpn_usp45_s] = true,
|
||||
[clsid.wpn_groza_s] = true,
|
||||
[clsid.wpn_knife_s] = true,
|
||||
[clsid.wpn_grenade_f1_s] = true,
|
||||
[clsid.wpn_grenade_rgd5_s] = true,
|
||||
[clsid.wpn_grenade_launcher] = true,
|
||||
[clsid.wpn_grenade_fake] = true}
|
||||
|
||||
artefact_classes = {
|
||||
[clsid.art_bast_artefact] = true,
|
||||
[clsid.art_black_drops] = true,
|
||||
[clsid.art_dummy] = true,
|
||||
[clsid.art_electric_ball] = true,
|
||||
[clsid.art_faded_ball] = true,
|
||||
[clsid.art_galantine] = true,
|
||||
[clsid.art_gravi] = true,
|
||||
[clsid.art_gravi_black] = true,
|
||||
[clsid.art_mercury_ball] = true,
|
||||
[clsid.art_needles] = true,
|
||||
[clsid.art_rusty_hair] = true,
|
||||
[clsid.art_thorn] = true,
|
||||
[clsid.art_zuda] = true,
|
||||
[clsid.artefact] = true,
|
||||
[clsid.artefact_s] = true}
|
||||
|
||||
printf ("start_game_callback called")
|
||||
smart_names.init_smart_names_table()
|
||||
task_manager.clear_task_manager()
|
||||
sound_theme.load_sound()
|
||||
xr_sound.start_game_callback()
|
||||
dialog_manager.fill_phrase_table()
|
||||
xr_s.init()
|
||||
sim_objects.clear()
|
||||
sim_board.clear()
|
||||
sr_light.clean_up ()
|
||||
pda.add_quick_slot_items_on_game_start()
|
||||
-- Tåñòèðîâàíèå îïòèìèçàöèè
|
||||
--local test_object = test_object.test_object_class()
|
||||
--test_object:test()
|
||||
end
|
||||
|
||||
--' Lñòàëîñòü
|
||||
function on_actor_critical_power()
|
||||
|
||||
end
|
||||
|
||||
function on_actor_critical_max_power()
|
||||
end
|
||||
|
||||
--' ³ðîâîòå÷åíèå
|
||||
function on_actor_bleeding()
|
||||
|
||||
end
|
||||
|
||||
function on_actor_satiety()
|
||||
end
|
||||
|
||||
--' ³àäèàöèÿ
|
||||
function on_actor_radiation()
|
||||
|
||||
end
|
||||
|
||||
--' ³àêëèíèëî îðóæèå
|
||||
function on_actor_weapon_jammed()
|
||||
|
||||
end
|
||||
|
||||
--' íå ìîæåò õîäèòü èççà âåñà
|
||||
function on_actor_cant_walk_weight()
|
||||
|
||||
end
|
||||
|
||||
--' ïñè âîçäåéñòâèå
|
||||
function on_actor_psy()
|
||||
end
|
||||
|
||||
function give_info (info)
|
||||
db.actor:give_info_portion(info)
|
||||
end
|
||||
function disable_info (info)
|
||||
if has_alife_info(info) then
|
||||
printf("*INFO*: disabled npc='single_player' id='%s'", info)
|
||||
db.actor:disable_info_portion(info)
|
||||
end
|
||||
end
|
||||
|
||||
function create_ammo(section, position, lvi, gvi, pid, num)
|
||||
local ini = system_ini()
|
||||
|
||||
local num_in_box = ini:r_u32(section, "box_size")
|
||||
local t = {}
|
||||
while num > num_in_box do
|
||||
local obj = alife():create_ammo(section, position, lvi, gvi, pid, num_in_box)
|
||||
table.insert(t, obj)
|
||||
num = num - num_in_box
|
||||
end
|
||||
local obj = alife():create_ammo(section, position, lvi, gvi, pid, num)
|
||||
table.insert(t, obj)
|
||||
return t
|
||||
end
|
||||
|
||||
ammo_section = {}
|
||||
ammo_section["ammo_9x18_fmj"] = true
|
||||
ammo_section["ammo_9x18_pmm"] = true
|
||||
ammo_section["ammo_9x19_fmj"] = true
|
||||
ammo_section["ammo_9x19_pbp"] = true
|
||||
ammo_section["ammo_5.45x39_fmj"] = true
|
||||
ammo_section["ammo_5.45x39_ap"] = true
|
||||
ammo_section["ammo_5.56x45_ss190"] = true
|
||||
ammo_section["ammo_5.56x45_ap"] = true
|
||||
ammo_section["ammo_5.7x28_fmj"] = true
|
||||
ammo_section["ammo_5.7x28_ap"] = true
|
||||
ammo_section["ammo_7.62x54_7h1"] = true
|
||||
ammo_section["ammo_9x39_pab9"] = true
|
||||
ammo_section["ammo_gauss"] = true
|
||||
ammo_section["ammo_9x39_ap"] = true
|
||||
ammo_section["ammo_11.43x23_fmj"] = true
|
||||
ammo_section["ammo_11.43x23_hydro"] = true
|
||||
ammo_section["ammo_12x70_buck"] = true
|
||||
ammo_section["ammo_12x76_zhekan"] = true
|
||||
ammo_section["ammo_pkm_100"] = true
|
||||
|
||||
quest_section = {}
|
||||
-- ïðåîáðàçóåò ñòðîêó â ñîîòâåòñòâèè ñî çíà÷åíèåì
|
||||
function get_param_string(src_string , obj)
|
||||
--printf("src_string is [%s] obj name is [%s]", tostring(src_string), obj:name())
|
||||
local script_ids = db.script_ids[obj:id()]
|
||||
local out_string, num = string.gsub(src_string, "%$script_id%$", tostring(script_ids))
|
||||
if num > 0 then
|
||||
return out_string , true
|
||||
else
|
||||
return src_string , false
|
||||
end
|
||||
end
|
||||
|
||||
local save_markers = {}
|
||||
|
||||
-- Ôóíêöèè äëÿ ïðîâåðêè êîððåêòíîñòè ñåéâ ëîàä
|
||||
function set_save_marker(p, mode, check, prefix)
|
||||
|
||||
-- îïðåäåëÿåì êëþ÷ ìàðêåðà.
|
||||
local result = ""
|
||||
-- if debug ~= nil then
|
||||
-- local info_table = debug.getinfo(2)
|
||||
-- local script_name = string.gsub(info_table.short_src, "%.script", "")
|
||||
-- script_name = string.gsub(script_name, "gamedata\\scripts\\", "")
|
||||
-- result = script_name
|
||||
-- end
|
||||
|
||||
-- if prefix ~= nil then
|
||||
result = result .. "_" .. prefix
|
||||
-- end
|
||||
|
||||
if check == true then
|
||||
if save_markers[result] == nil then
|
||||
abort("Trying to check without marker %s", result)
|
||||
end
|
||||
|
||||
if mode == "save" then
|
||||
local dif = p:w_tell() - save_markers[result]
|
||||
printf(result..": SAVE DIF: %s", dif)
|
||||
if dif >= 8000 then
|
||||
printf("WARNING! may be this is problem save point")
|
||||
end
|
||||
if dif >= 10240 then
|
||||
-- abort("You are saving too much")
|
||||
end
|
||||
p:w_u16(dif)
|
||||
else
|
||||
local c_dif = p:r_tell() - save_markers[result]
|
||||
local dif = p:r_u16()
|
||||
if dif ~= c_dif then
|
||||
abort("INCORRECT LOAD [%s].[%s][%s]", result, dif, c_dif)
|
||||
else
|
||||
printf(result..": LOAD DIF: %s", dif)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if mode == "save" then
|
||||
printf(result..": set save marker: %s", p:w_tell())
|
||||
save_markers[result] = p:w_tell()
|
||||
if p:w_tell() > 16000 then
|
||||
abort("You are saving too much")
|
||||
end
|
||||
else
|
||||
printf(result..": set load marker: %s", p:r_tell())
|
||||
save_markers[result] = p:r_tell()
|
||||
end
|
||||
|
||||
end
|
||||
-- ïåðåâîäèò âåêòîð â ñòðîêó.
|
||||
function vec_to_str (vector)
|
||||
if vector == nil then return "nil" end
|
||||
return string.format("[%s:%s:%s]", vector.x, vector.y, vector.z)
|
||||
end
|
||||
-- âûâîäèò â ëîã ñòýê âûçîâà ôóíêöèé.
|
||||
function callstack()
|
||||
if debug ~= nil then
|
||||
log(debug.traceback(2))
|
||||
end
|
||||
end
|
||||
-- ìåíÿåò team:squad:group îáüåêòà.
|
||||
function change_team_squad_group(se_obj, team, squad, group)
|
||||
local cl_obj = db.storage[se_obj.id] and db.storage[se_obj.id].object
|
||||
if cl_obj ~= nil then
|
||||
cl_obj:change_team(team, squad, group)
|
||||
else
|
||||
se_obj.team = team
|
||||
se_obj.squad = squad
|
||||
se_obj.group = group
|
||||
end
|
||||
--printf("_G:TSG: [%s][%s][%s]", tostring(se_obj.team), tostring(se_obj.squad), tostring(se_obj.group))
|
||||
end
|
||||
-- Story_ID -------------------------------------------------------------
|
||||
function add_story_object(obj_id , story_obj_id)
|
||||
story_objects.get_story_objects_registry():register(obj_id , story_obj_id)
|
||||
end
|
||||
|
||||
function get_story_object(story_obj_id)
|
||||
local obj_id = story_objects.get_story_objects_registry():get(story_obj_id)
|
||||
if obj_id == nil then return nil end
|
||||
return (db.storage[obj_id] and db.storage[obj_id].object) or (level ~= nil and level.object_by_id(obj_id))
|
||||
end
|
||||
|
||||
function get_object_story_id(obj_id)
|
||||
return story_objects.get_story_objects_registry():get_story_id(obj_id)
|
||||
end
|
||||
|
||||
function get_story_object_id(story_obj_id)
|
||||
return story_objects.get_story_objects_registry().id_by_story_id[story_obj_id]
|
||||
end
|
||||
|
||||
function unregister_story_object_by_id(obj_id)
|
||||
story_objects.get_story_objects_registry():unregister_by_id(obj_id)
|
||||
end
|
||||
|
||||
function unregister_story_id(story_id)
|
||||
story_objects.get_story_objects_registry():unregister_by_story_id(story_id)
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- Ïîëó÷èòü ñêâàä îáüåêòà!!!!!
|
||||
function get_object_squad(object)
|
||||
if object == nil then abort("You are trying to get squad_object from NIL object!!!") end
|
||||
local obj_id = nil
|
||||
if type(object.id) == "function" then
|
||||
obj_id = object:id()
|
||||
else
|
||||
obj_id = object.id
|
||||
end
|
||||
local se_obj = alife():object(obj_id)
|
||||
if se_obj and se_obj.group_id ~= 65535 then
|
||||
return alife():object(se_obj.group_id)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function get_story_squad(story_id)
|
||||
local squad_id = get_story_object_id(story_id)
|
||||
return squad_id and alife():object(squad_id)
|
||||
end
|
||||
|
||||
--Ïðîâåðêà ïî âðåìåííîìó èíòåðâàëó.
|
||||
function in_time_interval(val1, val2)
|
||||
local game_hours = level.get_time_hours()
|
||||
if val1 >= val2 then
|
||||
return game_hours < val2 or game_hours >= val1
|
||||
else
|
||||
return game_hours < val2 and game_hours >= val1
|
||||
end
|
||||
end
|
||||
|
||||
function show_all_ui(show)
|
||||
local hud = get_hud()
|
||||
if(show) then
|
||||
level.show_indicators()
|
||||
-- db.actor:restore_weapon()
|
||||
db.actor:disable_hit_marks(false)
|
||||
hud:show_messages()
|
||||
else
|
||||
if db.actor:is_talking() then
|
||||
db.actor:stop_talk()
|
||||
end
|
||||
level.hide_indicators_safe()
|
||||
hud:HideActorMenu()
|
||||
hud:HidePdaMenu()
|
||||
hud:hide_messages()
|
||||
-- db.actor:hide_weapon()
|
||||
db.actor:disable_hit_marks(true)
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue