Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ammo_prefix = "ammo_"
- local weapon_prefix = "wpn_"
- local function npc_on_update(npc,st)
- if not (npc:alive()) then
- return
- end
- if(is_first_update_done(npc)) then
- return
- end
- remove_weapons_and_ammo(npc)
- give_weapon_and_ammo(npc)
- give_grenades(2, npc)
- utils.se_obj_save_var(npc:id(),npc:name(),"strelocc_de_first_update_done",true)
- end
- function give_weapon_and_ammo(npc)
- local w = get_weapon(npc)
- alife():create(w,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
- local a = get_ammo(w)
- alife():create(a,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
- --printf("given ammo %s for weapon %s",w,a)
- end
- function concat_2tables(table1, table2)
- local t3 = {}
- local len = table.getn(t3)
- for key, val in pairs(table1)do
- table.insert(t3,val)
- end
- for key, val in pairs(table2)do
- table.insert(t3,val)
- end
- return t3
- end
- function concatenateTables( tableList )
- if tableList==nil then
- return nil
- elseif table.getn(tableList) == 1 then
- return tableList[1]
- else
- local table1 = tableList[1]
- local restTableList = {unpack(tableList, 2)}
- return concat_2tables(table1, concatenateTables(restTableList))
- end
- end
- local ini = system_ini()
- function get_ammo(weapon)
- --local class = system_ini():r_string_ex(weapon,"class")
- local ammo_class = alun_utils.parse_list(ini,weapon,"ammo_class")
- local ammo = ammo_class[math.random(1,#ammo_class)]
- return ammo
- end
- function give_grenades(n, npc)
- local i = 0
- while i<n do
- alife():create(get_nades(npc),npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
- i = i+1
- end
- end
- local nine18_pistols = {"wpn_fort","wpn_fort_snag","wpn_pb","wpn_pb_sk1","wpn_pmm","wpn_tt33", "wpn_tt33_sk1"}
- local nine18_pistols_auto = {"wpn_aps","wpn_oc33","wpn_oc33_sk1"}
- local nine18_smg = {"wpn_bizon"}
- local nine19_pistols_western = {"wpn_beretta", "wpn_beretta_sk1", "wpn_glock", "wpn_hpsa", "wpn_hpsa_sk1","wpn_walther"}
- local nine19_pistols_slav = {"wpn_cz75","wpn_mp443", "wpn_gsh18", "wpn_gsh18_sk1"}
- local fourty5_pistols = {"wpn_colt1911","wpn_colt1911_sk1","wpn_colt1911_sk2","wpn_colt1911_sk3","wpn_sig220","wpn_sig220_sk1","wpn_sig220_sk2","wpn_usp"}
- --only high tier duty/freedom/monolith
- local tacticool_pistols = {"wpn_fn57","wpn_fnp45","wpn_fnx45"}
- --only high tier bandits
- local fancy_pistols = {"wpn_desert_eagle"}
- local sawn_shotguns = {"wpn_toz34_obrez","wpn_bm16"}
- local hunting_shotguns = {"wpn_toz34","wpn_bm16_full"}
- local low_shotguns = {"wpn_mp133","wpn_toz194"}
- local mid_shotguns = {"wpn_mossberg590","wpn_remington870"}
- local semiauto_shotguns = {"wpn_spas12", "wpn_mp153"}
- local auto_shotgun = {"wpn_protecta","wpn_saiga","wpn_vepr","wpn_usas12"}
- local rookie_w = concatenateTables({nine18_smg,hunting_shotguns,low_shotguns,nine18_pistols,nine19_pistols_slav,nine19_pistols_western})
- function get_weapon(npc)
- --local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith", "csky" }
- --character_community(npc) == "dolg"
- --novice, trainee, experienced, professional, veteran, expert, master
- --local rank = ranks.get_obj_rank_name(npc)
- --game.get_game_time():diffSec(level.get_start_time())
- local pool = {}
- local faction = character_community(npc)
- local rank = ranks.get_obj_rank_name(npc)
- --army weapon pool
- if(faction == "army") then
- --if not a basic grunt has good non semiauto shotgun or bizon guaranteed
- if(rank~="novice" and rank~="trainee") then
- pool = concatenateTables({mid_shotguns,nine18_smg})
- return pool[math.random(#pool)]
- end
- --else only 9x18 and other slav pistols
- pool = concatenateTables({nine18_pistols,nine19_pistols_slav})
- return pool[math.random(#pool)]
- end
- --stalker and bandits have sawn off and hunting shotguns
- if(faction == "stalker" or faction =="bandit") then
- --only shitters can have sawn off
- if(rank=="novice") then
- pool = concatenateTables({sawn_shotguns,{}})
- end
- --pistols
- pool = concatenateTables({nine18_pistols,nine19_pistols_slav,nine19_pistols_western})
- --shotguns
- pool = concatenateTables({pool,hunting_shotguns,low_shotguns})
- return pool[math.random(#pool)]
- end
- --fallback pool to not have unarmed people
- return rookie_w[math.random(#rookie_w)]
- end
- function get_nades(npc)
- local faction = character_community(npc)
- local rank = ranks.get_obj_rank_name(npc)
- if(faction == "dolg" or faction == "army" or faction == "killer") then
- if(rank~="novice" and rank~="trainee") then
- return "grenade_f1"
- end
- end
- return "grenade_rgd5"
- end
- function is_first_update_done(npc)
- return utils.se_obj_load_var(npc:id(),npc:name(),"strelocc_de_first_update_done")
- end
- function remove_weapons_and_ammo(npc)
- local function itr(npc,itm)
- if(string.find(itm:name(), ammo_prefix)~=nil or string.find(itm:name(),weapon_prefix)~=nil) then
- local sim = alife()
- local se_obj = sim:object(itm:id())
- alife():release(alife():object(itm:id()), true)
- end
- end
- npc:iterate_inventory(itr,npc)
- end
- function on_game_start()
- RegisterScriptCallback("npc_on_update",npc_on_update)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement