Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2017
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.21 KB | None | 0 0
  1. local ammo_prefix = "ammo_"
  2. local weapon_prefix = "wpn_"
  3.  
  4. local function npc_on_update(npc,st)
  5.     if not (npc:alive()) then
  6.         return
  7.     end
  8.    
  9.     if(is_first_update_done(npc)) then
  10.         return
  11.     end
  12.    
  13.     remove_weapons_and_ammo(npc)
  14.    
  15.     give_weapon_and_ammo(npc)
  16.     give_grenades(2, npc)
  17.    
  18.     utils.se_obj_save_var(npc:id(),npc:name(),"strelocc_de_first_update_done",true)
  19. end
  20.  
  21. function give_weapon_and_ammo(npc)
  22.     local w = get_weapon(npc)
  23.     alife():create(w,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  24.     local a = get_ammo(w)
  25.     alife():create(a,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  26.     --printf("given ammo %s for weapon %s",w,a)
  27. end
  28.  
  29. function concat_2tables(table1, table2)
  30.     local t3 = {}
  31.     local len = table.getn(t3)
  32.     for key, val in pairs(table1)do
  33.         table.insert(t3,val)
  34.     end
  35.     for key, val in pairs(table2)do
  36.         table.insert(t3,val)
  37.     end
  38.     return t3
  39. end
  40.  
  41. function concatenateTables( tableList )
  42.     if tableList==nil then
  43.         return  nil
  44.     elseif table.getn(tableList) == 1 then
  45.         return  tableList[1]
  46.     else
  47.         local table1 = tableList[1]
  48.         local restTableList = {unpack(tableList, 2)}
  49.         return concat_2tables(table1, concatenateTables(restTableList))
  50.     end
  51. end
  52.  
  53.  
  54. local ini = system_ini()
  55. function get_ammo(weapon)
  56.     --local class = system_ini():r_string_ex(weapon,"class")
  57.     local ammo_class = alun_utils.parse_list(ini,weapon,"ammo_class")
  58.     local ammo = ammo_class[math.random(1,#ammo_class)]
  59.     return ammo
  60. end
  61.  
  62. function give_grenades(n, npc)
  63.     local i = 0
  64.     while i<n do
  65.         alife():create(get_nades(npc),npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  66.         i = i+1
  67.     end
  68. end
  69.  
  70. local nine18_pistols = {"wpn_fort","wpn_fort_snag","wpn_pb","wpn_pb_sk1","wpn_pmm","wpn_tt33", "wpn_tt33_sk1"}
  71. local nine18_pistols_auto = {"wpn_aps","wpn_oc33","wpn_oc33_sk1"}
  72.  
  73. local nine18_smg = {"wpn_bizon"}
  74.  
  75. local nine19_pistols_western = {"wpn_beretta", "wpn_beretta_sk1", "wpn_glock", "wpn_hpsa", "wpn_hpsa_sk1","wpn_walther"}
  76. local nine19_pistols_slav = {"wpn_cz75","wpn_mp443", "wpn_gsh18", "wpn_gsh18_sk1"}
  77.  
  78. local fourty5_pistols = {"wpn_colt1911","wpn_colt1911_sk1","wpn_colt1911_sk2","wpn_colt1911_sk3","wpn_sig220","wpn_sig220_sk1","wpn_sig220_sk2","wpn_usp"}
  79.  
  80. --only high tier duty/freedom/monolith
  81. local tacticool_pistols = {"wpn_fn57","wpn_fnp45","wpn_fnx45"}
  82.  
  83. --only high tier bandits
  84. local fancy_pistols = {"wpn_desert_eagle"}
  85.  
  86. local sawn_shotguns = {"wpn_toz34_obrez","wpn_bm16"}
  87. local hunting_shotguns = {"wpn_toz34","wpn_bm16_full"}
  88. local low_shotguns = {"wpn_mp133","wpn_toz194"}
  89. local mid_shotguns = {"wpn_mossberg590","wpn_remington870"}
  90. local semiauto_shotguns = {"wpn_spas12", "wpn_mp153"}
  91. local auto_shotgun = {"wpn_protecta","wpn_saiga","wpn_vepr","wpn_usas12"}
  92.  
  93. local rookie_w = concatenateTables({nine18_smg,hunting_shotguns,low_shotguns,nine18_pistols,nine19_pistols_slav,nine19_pistols_western})  
  94.  
  95. function get_weapon(npc)
  96.  
  97.     --local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith", "csky" }
  98.     --character_community(npc) == "dolg"
  99.    
  100.     --novice, trainee,  experienced,  professional,  veteran,  expert,  master
  101.     --local rank = ranks.get_obj_rank_name(npc)
  102.    
  103.     --game.get_game_time():diffSec(level.get_start_time())
  104.     local pool = {}
  105.     local faction = character_community(npc)
  106.     local rank = ranks.get_obj_rank_name(npc)
  107.    
  108.     --army weapon pool
  109.     if(faction == "army") then
  110.         --if not a basic grunt has good non semiauto shotgun or bizon guaranteed
  111.         if(rank~="novice" and rank~="trainee") then
  112.             pool = concatenateTables({mid_shotguns,nine18_smg})
  113.             return pool[math.random(#pool)]
  114.         end
  115.        
  116.         --else only 9x18 and other slav pistols
  117.         pool = concatenateTables({nine18_pistols,nine19_pistols_slav})
  118.         return pool[math.random(#pool)]
  119.     end
  120.    
  121.     --stalker and bandits have sawn off and hunting shotguns
  122.     if(faction == "stalker" or faction =="bandit") then
  123.            
  124.         --only shitters can have sawn off
  125.         if(rank=="novice") then
  126.             pool = concatenateTables({sawn_shotguns,{}})
  127.         end
  128.        
  129.         --pistols
  130.         pool = concatenateTables({nine18_pistols,nine19_pistols_slav,nine19_pistols_western})
  131.         --shotguns
  132.         pool = concatenateTables({pool,hunting_shotguns,low_shotguns})
  133.        
  134.         return pool[math.random(#pool)]
  135.     end
  136.    
  137.     --fallback pool to not have unarmed people
  138.     return rookie_w[math.random(#rookie_w)]
  139. end
  140.  
  141. function get_nades(npc)
  142.     local faction = character_community(npc)
  143.     local rank = ranks.get_obj_rank_name(npc)
  144.     if(faction == "dolg" or faction == "army" or faction == "killer") then
  145.         if(rank~="novice" and rank~="trainee") then
  146.             return "grenade_f1"
  147.         end
  148.     end
  149.     return "grenade_rgd5"
  150. end
  151.  
  152. function is_first_update_done(npc)
  153.     return utils.se_obj_load_var(npc:id(),npc:name(),"strelocc_de_first_update_done")
  154. end
  155.  
  156. function remove_weapons_and_ammo(npc)
  157.     local function itr(npc,itm)
  158.         if(string.find(itm:name(), ammo_prefix)~=nil or string.find(itm:name(),weapon_prefix)~=nil) then
  159.             local sim = alife()
  160.             local se_obj = sim:object(itm:id())
  161.             alife():release(alife():object(itm:id()), true)
  162.         end
  163.     end
  164.    
  165.     npc:iterate_inventory(itr,npc)
  166. end
  167.  
  168. function on_game_start()
  169.     RegisterScriptCallback("npc_on_update",npc_on_update)
  170. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement