87 lines
2.2 KiB
Text
87 lines
2.2 KiB
Text
--[[----------------------------------------------------------------------------
|
|
Õðàíèëèùå òåêñòîâûõ èíòåðïðåòàöèé ðàíãîâ è ôóíêöèè äëÿ ðàáîòû ñ íèì.
|
|
×óãàé Àëåêñàíäð
|
|
------------------------------------------------------------------------------]]
|
|
|
|
-- ðàíãè. ôîðìàò: {novice={0,30}, experienced={30,60}, ...}
|
|
local stalker_rank_intervals
|
|
local monster_rank_intervals
|
|
|
|
local stalker_max_rank_name
|
|
local monster_max_rank_name
|
|
|
|
local ranks_loaded = false
|
|
|
|
-- ïàðñèò çàäàííóþ ñòðîêó ðàíãîâ â çàäàííóþ òàáëèöó.
|
|
-- âîçâðàùàåò íàçâàíèå ìàêñèìàëüíîãî ðàíãà
|
|
function parse_ranks( s, tbl )
|
|
s = "0," .. s .. ",10000"
|
|
|
|
local t = parse_names( s )
|
|
local i = 2
|
|
|
|
while i < #t do
|
|
tbl[t[i]] = { tonumber(t[i-1]), tonumber(t[i+1]) }
|
|
i = i + 2
|
|
end
|
|
|
|
return t[i-2]
|
|
end
|
|
|
|
-- âû÷èòûâàåò ñòàëêåðñêèå è ìîíñòðÿ÷èå ðàíãè èç game_relations.ltx
|
|
function read_all_ranks()
|
|
stalker_rank_intervals = {}
|
|
monster_rank_intervals = {}
|
|
|
|
local ltx = system_ini()
|
|
|
|
stalker_max_rank_name = parse_ranks( ltx:r_string( "game_relations", "rating" ), stalker_rank_intervals )
|
|
monster_max_rank_name = parse_ranks( ltx:r_string( "game_relations", "monster_rating" ), monster_rank_intervals )
|
|
|
|
ranks_loaded = true
|
|
|
|
-- print_table( stalker_rank_intervals )
|
|
end
|
|
|
|
--
|
|
function get_rank_name( rank, tbl )
|
|
for name, interval in pairs( tbl ) do
|
|
if rank >= interval[1] and rank < interval[2] then
|
|
return name
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
-- âîçâðàùàåò íàçâàíèå ðàíãà çàäàííîãî game_object (ïåðñîíàæà)
|
|
function get_obj_rank_name( obj )
|
|
if not ranks_loaded then
|
|
read_all_ranks()
|
|
end
|
|
|
|
local obj_rank
|
|
|
|
-- HACK
|
|
if obj.m_story_id ~= nil then
|
|
obj_rank = obj:rank()
|
|
else
|
|
obj_rank = obj:character_rank()
|
|
end
|
|
|
|
if IsStalker(obj) then
|
|
return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name
|
|
else
|
|
return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name
|
|
end
|
|
end
|
|
|
|
-- âîçâðàùàåò òàáëè÷êó ñ èíòåðâàëîì ðàíãîâ äëÿ çàäàííîãî íàçâàíèÿ èíòåðâàëà
|
|
function get_rank_interval( name )
|
|
if not ranks_loaded then
|
|
read_all_ranks()
|
|
end
|
|
|
|
return stalker_rank_intervals[name] or monster_rank_intervals[name]
|
|
end
|
|
|