Advertisement
HR_Shaft

Gun-Game v2 for Pit V2 for Phasor v2+

Jan 15th, 2015
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 70.17 KB | None | 0 0
  1. --[[ ### Gun-Game v2 for Pit V2   ###]]--
  2. --[[ ###  by H® Shaft for Phasor v2    ###]]--
  3.  
  4.  
  5. -- Script designed specifically and only for the Halo CE map Pit V2: Link: http://hce.halomaps.org/index.cfm?fid=6751
  6. -- GUN GAME: Based on the Counter Strike game called 'Gun Game.' Also, derivatives known as 'Global Offensive' & 'Arsenal: Arms Race'
  7.  
  8. -- Each time you kill with a weapon, you will be given a new weapon. (oddball and flag excluded weapons)
  9. -- The first person to kill with each weapon in the game - wins!
  10. -- There are 15 weapons. Starting with Spike Bat and ending with a Pistol. All weapons have infinite ammo.
  11. -- When you kill another player, you will only advance if you survive the kill.  If you die during the kill, you don't advance.
  12. -- Other weapons, grenades are blocked.  Vehicle gun and collision damage are blocked.
  13. -- Melee is instant kill, and WILL advance your level.
  14. -- If you are on level 15, and get killed by another player, betray or suicide, you go down one level.
  15. -- Beserk Mode: When reaching level 15, you activate 'Beserk Mode' which temporarily speeds up all other players and heals the injured.
  16. -- Your player speed is based on your weapon: With a strong weapon, you move slower than you will with a weaker weapon.
  17.  
  18. -- edit --
  19. logging = false             -- | true enable full script game logging, false to disable and on function ScriptLoad() - can be spammy to the log, best used for tournaments/scrims/debugging
  20. -- don't edit --
  21. team_play = false
  22. map_reset = false
  23. showtargets = nil
  24. roaming_targets = true
  25. weapons = {}
  26. level = {}
  27. last_damage = {}
  28. team_change = {}
  29. mybattery = {}
  30. meleekills = {}
  31. playerscore = {}
  32. teamscore = {}
  33. shotgun_clip = 12
  34. spiker_clip = 40
  35. sniper_clip = 4
  36. smg_clip = 60
  37. arifle_clip = 32
  38. flamer_clip = 200
  39. bruteshot_clip = 6
  40. needler_clip = 40
  41. pistol_clip = 10
  42. rocket_clip = 2
  43. pistol_clip = 12
  44. battery = 0
  45. timerCount = 0
  46. to_win = 1000
  47. cur_players = 0
  48.  
  49. -- prefix globals
  50. default_script_prefix = "\171GunGame\187  "
  51. phasor_privatesay = privatesay
  52. phasor_say = say
  53.  
  54. function GetRequiredVersion()
  55.     return 200
  56. end
  57.  
  58. function OnScriptLoad(process, game, persistent)
  59.     GAME = game
  60.     GetGameAddresses(game)
  61.     processid = process
  62.     Persistent = persistent
  63.     ScriptLoad()
  64.     LoadTags()
  65. end
  66.  
  67. function OnScriptUnload()
  68.     writedword(ctf_score_patch, 0xFFFDE9E8)
  69.     writebyte(ctf_score_patch1, 0xFF)
  70.     writebyte(slayer_score_patch, 0x74)
  71.     writebyte(slayer_score_patch2, 0x75)
  72. end
  73.  
  74. function OnNewGame(map)
  75.     ScriptLoad()   
  76.     team_play = getteamplay()
  77.     gametype = readbyte(gametype_base + 0x30)
  78.     game_started = false
  79.     LoadTags()
  80.     spawnhp = registertimer(90000, "SpawnHP") -- update coordinates
  81.     if not new_game_timer then
  82.         new_game_timer = registertimer(0, "NewGameTimer")
  83.     end
  84. end
  85.  
  86. function ApplyPatches()
  87.     writedword(ctf_score_patch, 0x90909090)
  88.     writebyte(ctf_score_patch1, 0x90)
  89.     writebyte(slayer_score_patch, 0xEB)
  90.     writebyte(slayer_score_patch2, 0xEB)   
  91. end
  92.  
  93. function ScriptLoad()
  94.     if Persistent then
  95.         -- edit --
  96.         logging = false             -- | true enable full script game logging, false to disable - can be spammy to the log, best used for tournaments/scrims/debugging
  97.         -- don't edit --
  98.         game_started = false
  99.         team_play = false
  100.         beserk = false     
  101.         weapons = {}
  102.         level = {}
  103.         last_damage = {}
  104.         team_change = {}
  105.         mybattery = {}
  106.         meleekills = {}
  107.         playerscore = {}
  108.         teamscore = {}     
  109.         shotgun_clip = 12
  110.         spiker_clip = 40
  111.         sniper_clip = 4
  112.         smg_clip = 60
  113.         arifle_clip = 32
  114.         flamer_clip = 200
  115.         bruteshot_clip = 6
  116.         needler_clip = 40
  117.         pistol_clip = 10
  118.         rocket_clip = 2
  119.         pistol_clip = 12
  120.         battery = 0
  121.         timerCount = 0
  122.         to_win = 1000
  123.         cur_players = 0
  124.         roaming_targets = false
  125.        
  126.         if new_game_timer == nil then
  127.             new_game_timer = registertimer(0, "NewGameTimer")
  128.         end        
  129.     end
  130.    
  131.     GetGameAddresses(game) 
  132.     showtargets = nil
  133.     game_started = false
  134.     team_play = false  
  135.     team_play = getteamplay()
  136.     gametype = readbyte(gametype_base + 0x30)
  137.     LoadTags()
  138.  
  139.     for i = 0,15 do
  140.         if getplayer(i) then
  141.             local hash = gethash(i)
  142.             last_damage[hash] = nil
  143.             mybattery[i] = 1
  144.             weapons[i] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  145.             level[i] = 1
  146.             playerscore[i] = 0
  147.             team_change[i] = false 
  148.             cur_players = cur_players + 1
  149.         end
  150.     end
  151.  
  152.     if gametype ~= 5 and cur_players > 2 then
  153.         roaming_targets = true
  154.         showtargets = registertimer(250, "ShowTargets")    
  155.     end    
  156.    
  157.     if gametype == 3 or gametype == 5 then
  158.         for i=0,15 do
  159.             if getplayer(i) then
  160.                 privatesay(i, "Race and Oddball are not compatible with Gun-Game. ", false)
  161.             end
  162.         end    
  163.         log_msg(4, "##GUN-GAME## Race and Oddball are NOT compatible with Gun-Game: try CTF, Slayer & KOTH.") -- log error in scripts log
  164.         log_msg(1, "##GUN-GAME## Race and Oddball are NOT compatible with Gun-Game: try CTF, Slayer & KOTH.") -- log error in game log
  165.     else
  166.         game_started = false
  167.         if new_game_timer == nil then
  168.             new_game_timer = registertimer(0, "NewGameTimer")
  169.         end    
  170.     end
  171.        
  172. end
  173.  
  174. function OnPlayerJoin(player)
  175.     if getplayer(player) then
  176.         local name = getname(player)
  177.         cur_players = cur_players + 1
  178.         mybattery[player] = 1
  179.         weapons[player] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  180.         level[player] = 1
  181.         playerscore[player] = 0
  182.         team_change[player] = false
  183.         welcome = registertimer(9000, "Welcome", player)
  184.         if game_started and team_play and cur_players > 3 then Balance_Teams() end
  185.         if game_started and cur_players > 2 and roaming_targets and not showtargets then
  186.             if gametype ~= 5 then
  187.                 showtargets = registertimer(250, "ShowTargets")
  188.             end
  189.         end        
  190.         if logging then log_msg(1, name .. " given Spike Bat on spawn.") end
  191.     end
  192. end
  193.  
  194. function Welcome(id, count, player)
  195.     if count == 1 then
  196.         if getplayer(player) then
  197.             sendconsoletext(player, "Welcome to Gun-Game Arms Race for The Pit V2!", 8, 0)
  198.             sendconsoletext(player, "Each time you kill with a weapon, you will be given a new weapon.", 8, 0)
  199.             sendconsoletext(player, "The first person to kill with every weapon in the game - wins!", 8, 0)
  200.             sendconsoletext(player, "There are 15 weapons, good luck!  type @help for more info.", 8, 0)
  201.         end
  202.     end
  203.     return false   
  204. end
  205.  
  206. function SpawnHP(id, count)
  207.     if game_started then
  208.         if count == 1 or count == 5 or count == 15 then
  209.             local hp_1 = createobject(gettagid("eqip", "powerups\\health pack"), 0, 90, true, -10.44, -102.58, 1.10)
  210.             local hp_2 = createobject(gettagid("eqip", "powerups\\health pack"), 0, 90, true, 23.60, -115.62, 0.70)
  211.             local hp_3 = createobject(gettagid("eqip", "powerups\\health pack"), 0, 90, true, 7.915, -132.47, 0.70)
  212.             local hp_4 = createobject(gettagid("eqip", "powerups\\health pack"), 0, 90, true, -27.17, -108.94, 3.80)
  213.         end
  214.     end
  215.     return true
  216. end
  217.  
  218. function OnPlayerLeave(player)
  219.     if getplayer(player) then
  220.         cur_players = cur_players - 1
  221.         if level[player] == 9 then
  222.             beserk = false
  223.         end
  224.         mybattery[player] = {}
  225.         team_change[player] = {}
  226.         weapons[player] = {}
  227.         level[player] = {}
  228.         playerscore[player] = 0        
  229.         if game_started and team_play and cur_players > 3 then Balance_Teams() end
  230.         if cur_players < 3 and showtargets then
  231.             showtargets = nil
  232.         end        
  233.     end
  234. end
  235.  
  236. function OnPlayerSpawn(player, m_objectId)
  237.     if getplayer(player) then
  238.         local hash = gethash(player)
  239.         last_damage[hash] = nil
  240.         team_change[player] = false
  241.         ChangeFFAColor(player)
  242.         if game_started then
  243.             gameweap = registertimer(0, "AssignGameWeapons", player)
  244.         end    
  245.     end
  246. end
  247.  
  248. function ChangeFFAColor(player)
  249.     if getplayer(player) then
  250.         local m_objectId = getplayerobjectid(player)
  251.         if m_objectId then
  252.             local m_object = getobject(m_objectId)
  253.             if m_object then
  254.                 local m_player = getplayer(player)
  255.                 local color = getrandomnumber(1, 18)
  256.                 writeword(m_player + 0x60, color)
  257.             end
  258.         end
  259.     end
  260. end
  261.  
  262. function OnServerCommand(player, command)
  263.     local allow = nil
  264.     local cmd = tokenizecmdstring(command)
  265.     local tokencount = #cmd
  266.     if tokencount > 0 then
  267.    
  268.         if cmd[1] == "sv_map_reset" then
  269.             map_reset = true
  270.             showtargets = nil          
  271.             ScriptLoad()
  272.             privatesay(player, "**RESET** The game has been reset and scripts reloaded. ")
  273.             if logging then log_msg(1, getname(player) .. " used sv_map_reset command.") end           
  274.             for i=0,15 do  
  275.                 if getplayer(i) then
  276.                     kill(i)
  277.                     privatesay(i, "The game has been reset. ")
  278.                 end
  279.             end        
  280.             allow = true
  281.            
  282.         elseif cmd[1] == "sv_script_reload" then
  283.             map_reset = true
  284.             showtargets = nil  
  285.             writedword(gametime_base + 0x10, 0)
  286.             ScriptLoad()
  287.             privatesay(player, "**RELOAD** The game has been reset and scripts reloaded. ")
  288.             if logging then log_msg(1, getname(player) .. " used sv_script_reload command.") end
  289.             for i=0,15 do  
  290.                 if getplayer(i) then
  291.                     kill(i)
  292.                     privatesay(i, "The game has been reset. ")
  293.                 end
  294.             end        
  295.             allow = true
  296.         end
  297.        
  298.     end
  299.     return allow
  300. end
  301.  
  302. function NewGameTimer(id, count)
  303.     if map_reset == true then
  304.         if team_play and cur_players > 3 then Balance_Teams() end
  305.         map_reset = false
  306.     end
  307.    
  308.     game_started = true
  309.     team_play = getteamplay()
  310.     cur_players = readword(network_base, 0x1A0)
  311.    
  312.     if team_play then
  313.         teamscore[0] = 0
  314.         teamscore[1] = 0
  315.         for i=0,15 do
  316.             if getplayer(i) then
  317.                 cur_players = cur_players + 1
  318.             end
  319.         end        
  320.         if not autobalance and game_started and cur_players > 3 then
  321.             autobalance = registertimer(60000, "AutoBalance")
  322.         end            
  323.     end
  324.    
  325.     if Persistent then
  326.         log_msg(1, "Gun-Game has begun on " .. map_name .. " and running as a persistent script.")
  327.     else
  328.         log_msg(1, "Gun-Game has begun on " .. map_name .. " and running as a non-persistent script.")
  329.     end
  330.    
  331.     for x = 0,15 do
  332.         if getplayer(x) then
  333.             local hash = gethash(x)
  334.             local name = getname(x)
  335.             local m_objectId = getplayerobjectid(x)
  336.             last_damage[hash] = nil
  337.             team_change[x] = false
  338.             mybattery[x] = 0   
  339.             weapons[x] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  340.             level[x] = 1
  341.             playerscore[x] = 0
  342.             speedtimer = registertimer(2000, "SpeedTimer", x)
  343.            
  344.             if m_objectId ~= nil then
  345.                 local m_object = getobject(m_objectId)
  346.                 if m_object then
  347.                     for i = 0,3 do
  348.                         local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
  349.                         if weapID ~= 0xFFFFFFFF then
  350.                             destroyobject(weapID)
  351.                         end
  352.                     end
  353.                     writebyte(m_object + 0x31E, 0)
  354.                     writebyte(m_object + 0x31F, 0) 
  355.                 end
  356.                
  357.                 if level[x] == 1 then
  358.                     battery = 0
  359.                     weapons[x] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  360.                     sendconsoletext(x, "Level 1:   Spike Bat - Speed: 150%", 5, 0)
  361.                     if m_object then
  362.                         writebyte(m_object + 0x31E, 2)
  363.                         writebyte(m_object + 0x31F, 0) 
  364.                     end
  365.                 end
  366.                
  367.                 local m_weaponId = createobject(gettagid("weap", weapons[x]), 0, 20, false, 0, 0, 0)
  368.                
  369.                 if m_weaponId then
  370.                     local m_weapon = getobject(m_weaponId)
  371.                     if m_weapon then
  372.                         assignweapon(x, m_weaponId)
  373.                         if logging then log_msg(1, name .. " given Spike Bat, 2 plasma on new game.")   end
  374.                         if m_weapon then
  375.                             mybattery[x] = 1
  376.                         end
  377.                     end    
  378.                 end
  379.                
  380.             end
  381.         end
  382.  
  383.         if not updatescores and game_started then
  384.             updatescores = registertimer(500, "Update_Scores")
  385.         end
  386.        
  387.         if not checkbattery then
  388.             checkbattery = registertimer(1000, "CheckBattery") 
  389.         end
  390.        
  391.     end
  392.    
  393.     new_game_timer = nil   
  394.     return false
  395. end
  396.  
  397. function AssignGameWeapons(id, count, player)
  398.     if map_reset == true then
  399.         map_reset = false
  400.     end
  401.    
  402.     local clip = 0
  403.     local ammo = 9999
  404.    
  405.     if game_started then   
  406.         if getplayer(player) then      
  407.             local m_objectId = getplayerobjectid(player)
  408.             local name = getname(player)
  409.             local lvl = level[player]
  410.             local id = resolveplayer(player)
  411.            
  412.             if m_objectId ~= nil then
  413.                 if gametype == 1 or gametype == 2 or gametype == 4 or gametype == 5 then
  414.                     speedtimer = registertimer(0, "SpeedTimer", player)
  415.                 end
  416.                
  417.                 local m_object = getobject(m_objectId)
  418.                 if m_object then
  419.                     for i = 0,3 do
  420.                         local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
  421.                         if weapID ~= 0xFFFFFFFF then
  422.                             destroyobject(weapID)
  423.                         end
  424.                     end
  425.                     writebyte(m_object + 0x31E, 0)
  426.                     writebyte(m_object + 0x31F, 0) 
  427.                 end
  428.                 if logging then log_msg(1, name .. " weapon assignment initiated - weapons & nades removed. Is level: " .. lvl) end                
  429.                
  430.                 if level[player] == nil then
  431.                     level[player] = 1
  432.                     weapons[player] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  433.                     sendconsoletext(player, "Level 1:   Spike Bat - Speed: 150%", 4, 0)
  434.                     if m_object then
  435.                         writebyte(m_object + 0x31E, 0)
  436.                         writebyte(m_object + 0x31F, 0) 
  437.                     end
  438.                     if logging then log_msg(1, name .. " given Needler. Is level: " .. lvl) end
  439.                    
  440.                 elseif level[player] == 1 then
  441.                     weapons[player] = "weapons\\spikebat\\spikebat" -- Spike Bat Home Wrecker
  442.                     sendconsoletext(player, "Level 1:  Spike Bat - Speed: 150%", 4, 0)
  443.                     if m_object then
  444.                         writebyte(m_object + 0x31E, 0)
  445.                         writebyte(m_object + 0x31F, 0) 
  446.                     end
  447.                     if logging then log_msg(1, name .. " given Spike Bat. Is level: " .. lvl) end  
  448.                    
  449.                 elseif level[player] == 2 then
  450.                     clip = shotgun_clip
  451.                     weapons[player] = "cmt\\weapons\\human\\shotgun\\shotgun" -- Shotgun
  452.                     sendconsoletext(player, "Level 2:   Shotgun - Speed: 110%", 4, 0)
  453.                     health = registertimer(0, "ApplyHP", player)
  454.                     if m_object then
  455.                         writebyte(m_object + 0x31E, 2)
  456.                         writebyte(m_object + 0x31F, 0)
  457.                     end
  458.                     if logging then log_msg(1, name .. " given Shotgun, 2 frag. Health bonus. Is level: " .. lvl) end
  459.                    
  460.                 elseif level[player] == 3 then
  461.                     clip = spiker_clip
  462.                     weapons[player] = "cmt\\weapons\\covenant\\spiker\\spiker" -- Brute Spiker
  463.                     sendconsoletext(player, "Level 3:   Brute Spiker - Speed: 100%", 4, 0)
  464.                     if m_object then
  465.                         writebyte(m_object + 0x31E, 0)
  466.                         writebyte(m_object + 0x31F, 2)
  467.                     end                
  468.                     if logging then log_msg(1, name .. " given Brute Spiker, 2 plasma. Is level: " .. lvl)  end
  469.                    
  470.                 elseif level[player] == 4 then
  471.                     weapons[player] = "cmt\\weapons\\covenant\\plasma_rifle\\plasma rifle" -- Plasma Rifle
  472.                     sendconsoletext(player, "Level 4:   Plasma Rifle - Speed: 130%", 4, 0)
  473.                     if m_object then
  474.                         writebyte(m_object + 0x31E, 0)
  475.                         writebyte(m_object + 0x31F, 0)
  476.                     end                    
  477.                     if logging then log_msg(1, name .. " given Plasma Rifle. Is level: " .. lvl) end
  478.  
  479.                 elseif level[player] == 5 then
  480.                     clip = sniper_clip
  481.                     weapons[player] = "cmt\\weapons\\human\\sniper_v2\\sniper_v2" -- Sniper Rifle
  482.                     sendconsoletext(player, "Level 5:   Sniper Rifle - Speed: 75%", 4, 0)
  483.                     health = registertimer(0, "ApplyHP", player)
  484.                     if m_object then
  485.                         writebyte(m_object + 0x31E, 0)
  486.                         writebyte(m_object + 0x31F, 0)
  487.                     end                    
  488.                     if logging then log_msg(1, name .. " given Sniper Rifle. Is level: " .. lvl) end
  489.                    
  490.                 elseif level[player] == 6 then
  491.                     clip = smg_clip
  492.                     weapons[player] = "cmt\\weapons\\human\\smg\\smg" -- SMG
  493.                     sendconsoletext(player, "Level 6:   SMG - Speed: 100%", 4, 0)
  494.                     if m_object then
  495.                         writebyte(m_object + 0x31E, 2)
  496.                         writebyte(m_object + 0x31F, 0)
  497.                     end                    
  498.                     if logging then log_msg(1, name .. " given SMG, 2 frags. Is level: " .. lvl) end                   
  499.                    
  500.                 elseif level[player] == 7 then
  501.                     clip = arifle_clip
  502.                     weapons[player] = "cmt\\weapons\\human\\assault_rifle\\assault rifle cc" -- Assault Rifle
  503.                     sendconsoletext(player, "Level 7:   Assault Rifle - Speed: 110%", 4, 0)
  504.                     if m_object then
  505.                         writebyte(m_object + 0x31E, 1)
  506.                         writebyte(m_object + 0x31F, 1)
  507.                     end
  508.                     if logging then log_msg(1, name .. " given Assault Rifle, 1 frag, 1 plasma. Is level: " .. lvl) end
  509.  
  510.                 elseif level[player] == 8 then
  511.                     clip = flamer_clip
  512.                     weapons[player] = "cmt\\weapons\\human\\flamethrower\\flamethrower" -- Flamethrower
  513.                     sendconsoletext(player, "Level 8:   Flamethrower - Speed: 85%", 4, 0)
  514.                     if m_object then
  515.                         writebyte(m_object + 0x31E, 0)
  516.                         writebyte(m_object + 0x31F, 0)
  517.                     end
  518.                     health = registertimer(0, "ApplyHP", player)                   
  519.                     if logging then log_msg(1, name .. " given Flamethrower Is level: " .. lvl) end
  520.  
  521.                 elseif level[player] == 9 then
  522.                     clip = pistol_clip
  523.                     weapons[player] = "reach\\weapons\\magnum\\magnum" -- Magnum Pistol
  524.                     sendconsoletext(player, "Level 9:   Magnum Pistol - Speed: 125%", 4, 0)
  525.                     if m_object then
  526.                         writebyte(m_object + 0x31E, 0)
  527.                         writebyte(m_object + 0x31F, 0)
  528.                     end
  529.                     if logging then log_msg(1, name .. " given Magnum Pistol Is level: " .. lvl) end
  530.  
  531.                 elseif level[player] == 10 then
  532.                     clip = bruteshot_clip
  533.                     weapons[player] = "cmt\\weapons\\covenant\\brute_shot\\brute_shot_6" -- Brute Shot
  534.                     sendconsoletext(player, "Level 10:   Brute Shot - Speed: 100%", 4, 0)
  535.                     if m_object then
  536.                         writebyte(m_object + 0x31E, 0)
  537.                         writebyte(m_object + 0x31F, 0)
  538.                     end
  539.                     if logging then log_msg(1, name .. " given Brute Shot Is level: " .. lvl) end
  540.  
  541.                 elseif level[player] == 11 then
  542.                     weapons[player] = "weapons\\energy_sword\\energy_sword" -- Energy Sword
  543.                     sendconsoletext(player, "Level 11:   Energy Sword - Speed: 150%", 4, 0)
  544.                     if m_object then
  545.                         writebyte(m_object + 0x31E, 0)
  546.                         writebyte(m_object + 0x31F, 0)
  547.                     end
  548.                     if logging then log_msg(1, name .. " given Energy Sword Is level: " .. lvl) end
  549.                     health = registertimer(0, "ApplyHP", player)   
  550.                     applycamo(player, 180)
  551.                     sendconsoletext(player, "You are Invisible!", 5, 0)                                    
  552.  
  553.                 elseif level[player] == 12 then
  554.                     clip = needler_clip
  555.                     weapons[player] = "cmt\\weapons\\covenant\\needler\\needler blue" -- Needler
  556.                     sendconsoletext(player, "Level 12:   Needler - Speed: 85%", 4, 0)
  557.                     if m_object then
  558.                         writebyte(m_object + 0x31E, 1)
  559.                         writebyte(m_object + 0x31F, 1)
  560.                     end
  561.                     applycamo(player, 1)                   
  562.                     if logging then log_msg(1, name .. " given Needler, 1 frag, 1 plasma. Is level: " .. lvl) end
  563.  
  564.                 elseif level[player] == 13 then
  565.                     clip = rocket_clip
  566.                     weapons[player] = "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp" -- Rocket Launcher
  567.                     sendconsoletext(player, "Level 13:   Rocket Launcher - Speed: 75%", 4, 0)
  568.                     if m_object then
  569.                         writebyte(m_object + 0x31E, 0)
  570.                         writebyte(m_object + 0x31F, 0)
  571.                     end
  572.                     if logging then log_msg(1, name .. " given Rocket Launcher Is level: " .. lvl) end                 
  573.  
  574.                 elseif level[player] == 14 then
  575.                     clip = pistol_clip
  576.                     weapons[player] = "cmt\\weapons\\human\\spec pistol\\spec_pistol" -- Spec Pistol
  577.                     sendconsoletext(player, "Level 14:    Spec Pistol - Speed: 95%", 4, 0)
  578.                     sendconsoletext(player, "Final Level, Either win the game, or get demoted!", 4, 0)
  579.                     say(name .. " has reached Final Level! Gang-up on 'em before it's too late!")                          
  580.                     if m_object then
  581.                         writebyte(m_object + 0x31E, 0)
  582.                         writebyte(m_object + 0x31F, 0)
  583.                     end            
  584.                     if logging then log_msg(1, name .. " given Spec Pistol, and booster function called. Is level: " .. level[player]) end
  585.                 end
  586.                 --Health Booster call for all but level 13
  587.                 for i=0,15 do
  588.                     if getplayer(i) then
  589.                         local name = getname(i)
  590.                         local lvl = level[i]
  591.                         local p_objectId = getplayerobjectid(i)
  592.                         if p_objectId ~= nil then
  593.                             if lvl <= 13 then
  594.                                 local p_object = getobject(p_objectId)
  595.                                 local obj_health = readfloat(p_object + 0xE0)
  596.                                 if obj_health < 1 then
  597.                                     p_objectId = registertimer(0, "Booster", {i, m_objectId})
  598.                                 end
  599.                             end
  600.                         end
  601.                     end
  602.                 end
  603.            
  604.                 local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 20, false, 0, 0, 0)
  605.                
  606.                 if m_weaponId then
  607.                     local m_weapon = getobject(m_weaponId)
  608.                     assignweapon(player, m_weaponId)
  609.                     if m_weapon then
  610.                         if (level[player] == 4) then
  611.                             mybattery[player] = 1
  612.                         else                   
  613.                             writeword(m_weapon + 0x2B6, ammo)
  614.                             writeword(m_weapon + 0x2B8, clip)
  615.                             updateammo(m_weaponId)
  616.                         end
  617.                     end
  618.                 end
  619.             end
  620.         end
  621.     end    
  622.     return false
  623. end
  624.  
  625. function OnWeaponReload(player, weapon)
  626.     local reload = nil
  627.         if getplayer(player) then
  628.             local m_player = getplayer(player)
  629.             local m_objectId = readdword(m_player + 0x34)
  630.             local m_object = getobject(m_objectId)
  631.             if m_object then
  632.                 local m_weaponId = readdword(m_object + 0x118)
  633.                 if m_weaponId then
  634.                     local m_weapon = getobject(m_weaponId)         
  635.                     local weapname = gettaginfo(readdword(m_weapon))
  636.                     if m_weapon then
  637.                         if weapname == "cmt\\weapons\\covenant\\spiker\\spiker" then
  638.                             writeword(getobject(weapon) + 0x2B8, spiker_clip)
  639.                             updateammo(weapon)
  640.                             reload = false
  641.                         elseif weapname == "cmt\\weapons\\covenant\\needler\\needler blue" then
  642.                             writeword(getobject(weapon) + 0x2B8, needler_clip)
  643.                             updateammo(weapon)
  644.                             reload = false 
  645.                         else
  646.                             reload = true
  647.                         end
  648.                     end    
  649.                 end
  650.             end
  651.         end
  652.     return reload
  653. end
  654.  
  655. function CheckBattery(id, count, player)
  656.     -- checks battery level for plasma weapons and assigns replacement if low battery: plasma pistol, plasma rifle and plasma cannon
  657.     for i = 0,15 do
  658.         if getplayer(i) then
  659.             if mybattery[i] == 1 then
  660.                 local name = getname(i)
  661.                 local lvl = level[i]
  662.                 local m_objectId = getplayerobjectid(i)
  663.                 if m_objectId ~= nil then
  664.                     local m_object = getobject(m_objectId)
  665.                     if m_object then
  666.                         local m_weaponId = readdword(m_object + 0x118)
  667.                         if m_weaponId then
  668.                             local m_weapon = getobject(m_weaponId)
  669.                             if m_weapon then   
  670.                                 if readfloat(m_weapon + 0x240) >= 0.84 then
  671.                                     destroyplayerweaps(i)
  672.                                     replaceplasmaweap = registertimer(0, "ReplacePlasmaWeap", i)
  673.                                     if logging then log_msg(1, name .. " has a low battery on battery check. Is level: " .. lvl) end
  674.                                 end
  675.                             end
  676.                         end
  677.                     end
  678.                 end
  679.             end
  680.         end
  681.     end
  682.     return true
  683. end
  684.  
  685. function ReplacePlasmaWeap(id, count, player)
  686.     -- replaces low battery plasma weapons
  687.     if count == 1 then 
  688.         if player ~= nil and game_started then
  689.             local name = getname(player)
  690.             local lvl = level[player]  
  691.             if mybattery[player] == 1 then
  692.                 local m_weaponId = registertimer(0, "AssignGameWeapons", player)
  693.                 if logging then log_msg(1, name .. " was given assigment to replace plasma weapon. Is level: " .. lvl) end
  694.                 privatesay(player, "Battery recharged.")
  695.                 mybattery[player] = 0  
  696.             end    
  697.         end
  698.     end
  699.     return false
  700. end
  701.  
  702. function Update_Scores(id, count)
  703.     -- continuous score updating, not conditioned to game_started, updates negative values to 0 to prevent sabotage
  704.     if not team_play then
  705.         for i = 0,15 do
  706.             if getplayer(i) then
  707.                 if playerscore[i] == nil or playerscore[i] < 0 then playerscore[i] = 0 end
  708.                 Write_Player_Score(i, playerscore[i])
  709.             end
  710.         end    
  711.     else
  712.         for i = 0,15 do
  713.             if getplayer(i) then
  714.                 if playerscore[i] == nil or playerscore[i] < 0 then playerscore[i] = 0 end
  715.                 Write_Player_Score(i, playerscore[i])
  716.             end
  717.         end
  718.         if teamscore[0] == nil or teamscore[0] < 0 then teamscore[0] = 0 end
  719.         if teamscore[1] == nil or teamscore[1] < 0 then teamscore[1] = 0 end
  720.         Write_Team_Score(0, teamscore[0])
  721.         Write_Team_Score(1, teamscore[1])
  722.     end
  723.     return true
  724. end                
  725.  
  726. function Write_Player_Score(player, score)
  727.     -- writes the players score
  728.     if gametype == 1 then
  729.         if player then
  730.             local m_player = getplayer(player)
  731.             writeword(m_player + 0xC8, score)
  732.         end
  733.     elseif gametype == 2 then
  734.         if player then
  735.             local m_player = getplayer(player)
  736.             writedword(slayer_globals + 0x40 + player*4, score)
  737.         end
  738.     elseif gametype == 5 then
  739.         if player then
  740.             local m_player = getplayer(player)
  741.             writeword(m_player + 0xC6, 0x0, score)
  742.         end    
  743.     end
  744. end
  745.  
  746. function Write_Team_Score(team, score)
  747.     -- writes the team score
  748.     if gametype == 1 then
  749.         writedword(ctf_globals + team*4 + 0x10, score)
  750.     elseif gametype == 2 then
  751.         writedword(slayer_globals + team*4, score)
  752.     elseif gametype == 5 then
  753.         if team == 0 then
  754.             writedword(team_race_scores + 0x0, score)
  755.         elseif team == 1 then
  756.             writedword(team_race_scores + 0x4, score)
  757.         end
  758.     end    
  759. end
  760.  
  761. function GetGameAddresses(game)
  762.     if game == "PC" or GAME == "PC" then
  763.         map_name = readstring(0x698F21)
  764.         gametype_base = 0x671340   
  765.         network_base = 0x745BA8
  766.         gametime_base = 0x671420
  767.         gametype_name = readwidestring(gametype_base)
  768.         team_race_scores = 0x63A028
  769.         race_globals = 0x639FA0
  770.         ctf_globals = 0x639B98
  771.         ctf_score_patch = 0x488602
  772.         ctf_score_patch1 = 0x488606    
  773.         slayer_globals = 0x63A0E8
  774.         slayer_score_patch = 0x48F428
  775.         slayer_score_patch2 = 0x48F23E         
  776.     else
  777.         map_name = readstring(0x61D151)
  778.         gametype_base = 0x5F5498
  779.         network_base = 0x6C7988
  780.         gametime_base = 0x5F55BC
  781.         gametype_name = readwidestring(gametype_base)
  782.         team_race_scores = 0x5BD028
  783.         race_globals = 0x5BDFC0
  784.         ctf_globals = 0x5BDBB8
  785.         ctf_score_patch = 0x463472
  786.         ctf_score_patch1 = 0x463476
  787.         slayer_globals = 0x5BE108
  788.         slayer_score_patch = 0x469CF8
  789.         slayer_score_patch2 = 0x4691CE     
  790.     end
  791. end
  792.  
  793. function getteamplay()
  794.     if readbyte(gametype_base + 0x34) == 1 then
  795.         to_win = 75
  796.         return true
  797.     else
  798.         to_win = 50
  799.         return false
  800.     end
  801. end
  802.  
  803. function privatesay(player, message, script_prefix)
  804.     if GAME == "PC" then
  805.         phasor_privatesay(player, (script_prefix or default_script_prefix) .. " " .. message, false)
  806.     else
  807.         phasor_privatesay(player, message, false)
  808.     end
  809. end
  810.  
  811. function say(message, script_prefix)
  812.     if GAME == "PC" then
  813.         phasor_say((script_prefix or default_script_prefix) .. " " .. message, false)
  814.     else
  815.         phasor_say(message, false)
  816.     end
  817. end
  818.  
  819. function getweaponobjectid(player, slot)
  820.     local m_objectId = getplayerobjectid(player)
  821.     if m_objectId then return readdword(getobject(m_objectId) + 0x2F8 + slot*4) end
  822. end
  823.  
  824. function destroyplayerweaps(player)
  825.     for i=0,3 do
  826.         local weap_id = getweaponobjectid(player, i)
  827.         if weap_id ~= 0xFFFFFFFF then destroyobject(weap_id) end
  828.     end
  829. end
  830.  
  831. function Booster(id, count, arg)
  832.     if count == 1 and game_started then
  833.         local player = arg[1]
  834.         if getplayer(player) then
  835.             local name = getname(player)
  836.             local lvl = level[player]      
  837.             local m_playerObjId = getplayerobjectid(player)
  838.             if m_playerObjId ~= nil and lvl <= 14 then
  839.                 local m_object = getobject(m_playerObjId)
  840.                 local obj_health = readfloat(m_object + 0xE0)
  841.                 if obj_health < 1 then
  842.                     writefloat(m_object + 0xE0, 1)
  843.                     sendconsoletext(player, "Bonus! Health restored!", 5, 0)
  844.                     if logging then log_msg(1, name .. " health restored from booster function. Is level: " .. lvl) end
  845.                 end
  846.             end
  847.         end
  848.     end
  849.     return false
  850. end
  851.  
  852. function SpeedTimer(id, count, player)
  853.     if player then
  854.         local name = getname(player)
  855.         local lvl = level[player]  
  856.         if level[player] == 1 then
  857.             if beserk then
  858.                 setspeed(player, 1.5)
  859.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  860.             else       
  861.                 setspeed(player, 1.5) -- Spike Bat
  862.             end
  863.             if logging then log_msg(1, name .. " speed set at 1.5. Is level: " .. lvl) end
  864.         elseif level[player] == 2 then
  865.             if beserk then
  866.                 setspeed(player, 1.5)
  867.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  868.             else       
  869.                 setspeed(player, 1.10) -- Shotgun
  870.             end
  871.             if logging then log_msg(1, name .. " speed set at 1.25. Is level: " .. lvl) end
  872.         elseif level[player] == 3 then
  873.             if beserk then
  874.                 setspeed(player, 1.5)
  875.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  876.             else       
  877.                 setspeed(player, 1) -- Brute Spiker
  878.             end
  879.             if logging then log_msg(1, name .. " speed set at 1. Is level: " .. lvl) end
  880.         elseif level[player] == 4 then
  881.             if beserk then
  882.                 setspeed(player, 1.5)
  883.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  884.             else       
  885.                 setspeed(player, 1.3) -- Plasma Rifle
  886.             end
  887.             if logging then log_msg(1, name .. " speed set at 1.3. Is level: " .. lvl) end
  888.         elseif level[player] == 5 then
  889.             if beserk then
  890.                 setspeed(player, 1.5)
  891.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  892.             else       
  893.                 setspeed(player, 0.75) -- Sniper Rifle
  894.             end
  895.             if logging then log_msg(1, name .. " speed set at 0.75. Is level: " .. lvl) end
  896.         elseif level[player] == 6 then
  897.             if beserk then
  898.                 setspeed(player, 1.5)
  899.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  900.             else       
  901.                 setspeed(player, 1) -- SMG
  902.             end
  903.             if logging then log_msg(1, name .. " speed set at 1. Is level: " .. lvl) end
  904.         elseif level[player] == 7 then
  905.             if beserk then
  906.                 setspeed(player, 1.5)
  907.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  908.             else
  909.                 setspeed(player, 1.1) -- Assault Rifle
  910.             end
  911.             if logging then log_msg(1, name .. " speed set at 1.1. Is level: " .. lvl) end
  912.         elseif level[player] == 8 then
  913.             if beserk then
  914.                 setspeed(player, 1.5)
  915.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  916.             else       
  917.                 setspeed(player, 0.85) -- Flamethrower
  918.             end
  919.             if logging then log_msg(1, name .. " speed set at 0.85. Is level: " .. lvl) end
  920.         elseif level[player] == 9 then
  921.             if beserk then
  922.                 setspeed(player, 1.5)
  923.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  924.             else       
  925.                 setspeed(player, 1.25) -- Magnum Pistol
  926.             end
  927.             if logging then log_msg(1, name .. " speed set at 1.25. Is level: " .. lvl) end
  928.         elseif level[player] == 10 then
  929.             if beserk then
  930.                 setspeed(player, 1.5)
  931.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  932.             else       
  933.                 setspeed(player, 1) -- Brute Shot
  934.             end
  935.             if logging then log_msg(1, name .. " speed set at 1. Is level: " .. lvl) end   
  936.         elseif level[player] == 11 then
  937.             if beserk then
  938.                 setspeed(player, 1.5)
  939.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  940.             else       
  941.                 setspeed(player, 1.5) -- Energy Sword
  942.             end
  943.             if logging then log_msg(1, name .. " speed set at 1.5. Is level: " .. lvl) end 
  944.         elseif level[player] == 12 then
  945.             if beserk then
  946.                 setspeed(player, 1.5)
  947.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  948.             else       
  949.                 setspeed(player, 1.10) -- Needler
  950.             end
  951.             if logging then log_msg(1, name .. " speed set at 0.85. Is level: " .. lvl) end
  952.         elseif level[player] == 13 then
  953.             if beserk then
  954.                 setspeed(player, 1.5)
  955.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  956.             else       
  957.                 setspeed(player, 0.75) -- Rocket Launcher
  958.             end
  959.             if logging then log_msg(1, name .. " speed set at 0.75. Is level: " .. lvl) end
  960.         elseif level[player] == 4 then
  961.             if beserk then
  962.                 setspeed(player, 1.5)
  963.                 sendconsoletext(player, "BESERK MODE!", 4, 1)
  964.             else       
  965.                 setspeed(player, 0.95) -- Spec Pistol
  966.             end
  967.             if logging then log_msg(1, name .. " speed set at 0.95. Is level: " .. lvl) end            
  968.         end
  969.     end
  970.     return false
  971. end
  972.  
  973. function OnServerChat(player, type, message)
  974.     local response = nil
  975.    
  976.     if player then
  977.         name = getname(player)
  978.        
  979.         if string.lower(message) == "help" or string.lower(message) == "@help" or string.lower(message) == "/help" then
  980.             privatesay(player, "Each time you kill with a weapon, you will be given a new weapon.")
  981.             privatesay(player, "The first person to kill with each weapon in the game - wins!")
  982.             privatesay(player, "There are 15 weapons. Starting with Spike Bat and ending with Spec Pistol.")
  983.             privatesay(player, "Other weapons & grenades are blocked, vehicle damage and vehicle guns are blocked")
  984.             privatesay(player, "If you are on level 15, and get killed, you go down one level.")
  985.             say(name .. " is reading the @help menu. ")
  986.             response =  false          
  987.         end
  988.        
  989.         if string.lower(message) == "balance" then
  990.             if isadmin(player) then
  991.                 balance = registertimer(50, "Balance_Teams")
  992.             end
  993.             response = false       
  994.         end    
  995.        
  996.     end
  997.     return response
  998. end
  999.  
  1000. function OnPlayerKill(killer, victim, mode)
  1001.     local response = false
  1002.        
  1003.     if game_started then
  1004.         mybattery[victim] = 0
  1005.        
  1006.         if mode == 0 then -- player was killed by server
  1007.             if getplayer(victim) then
  1008.                 if team_change[victim] then
  1009.                     response = false   
  1010.                 else
  1011.                     vlvl = level[victim]
  1012.                     vname = getname(victim)
  1013.                     vhash = gethash(victim)        
  1014.                     privatesay(victim, "You were killed by the server.")
  1015.                     if logging then log_msg(1, vname .. " was killed by the server. Is level: " .. vlvl) end
  1016.                     response = false                       
  1017.                 end
  1018.                 response = false
  1019.             end
  1020.            
  1021.         elseif mode == 1 then -- player was killed by falling or team-change
  1022.             if getplayer(victim) then
  1023.                 vlvl = level[victim]
  1024.                 vname = getname(victim)
  1025.                 vhash = gethash(victim)                    
  1026.                 if not team_change[victim] and not map_reset then
  1027.                     if last_damage[vhash] == "globals\\falling" or last_damage[vhash] == "globals\\distance" then
  1028.                         say(vname .. " fell and died.")                
  1029.                         if logging then log_msg(1, vname .. " was killed by fall damage. Is level: " .. vlvl) end
  1030.                         response = false
  1031.                     end
  1032.                 elseif team_change[victim] and map_reset then
  1033.                     team_change[victim] = false
  1034.                     if logging then log_msg(1, vname .. " was killed by team change. Is level: " .. vlvl) end
  1035.                     response = false                       
  1036.                 end
  1037.             end
  1038.            
  1039.         elseif mode == 2 then -- player was killed by the guardians
  1040.             if getplayer(victim) then
  1041.                 vlvl = level[victim]
  1042.                 vname = getname(victim)
  1043.                 vhash = gethash(victim)
  1044.                 say(vname .. " was killed by the guardians. ", false)
  1045.                 if logging then log_msg(1, vname .. " was killed by guardians. Is level: " .. vlvl) end
  1046.                 response = false
  1047.             end
  1048.            
  1049.         elseif mode == 3 then -- player was killed by vehicle
  1050.             if getplayer(victim) then
  1051.                 vlvl = level[victim]
  1052.                 vname = getname(victim)
  1053.                 if logging then log_msg(1, vname .. " was killed by a vehicle. Is level: " .. vlvl) end
  1054.                 response = false
  1055.             end
  1056.            
  1057.         elseif mode == 4 then -- player was killed by another player
  1058.             if getplayer(killer) then
  1059.                 klvl = level[killer]
  1060.                 kname = getname(killer)
  1061.                 khash = gethash(killer)
  1062.             else   
  1063.                 kname = "NULL"
  1064.                 klvl = NULL
  1065.             end
  1066.            
  1067.             if getplayer(victim) then
  1068.                 vlvl = level[victim]
  1069.                 vname = getname(victim)
  1070.                 vhash = gethash(victim)
  1071.                
  1072.                 if vlvl == 14 then
  1073.                     privatesay(victim, "Demoted one level! Ain't that a bitch?!")
  1074.                     say(vname .. " demoted to Level 13 for getting killed.")
  1075.                     weapons[victim] = "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp" -- Rocket Launcher
  1076.                     level[victim] = 13
  1077.                     playerscore[victim] = 12
  1078.                     if logging then log_msg(1, vname .. " level 15 demoted to 14 for being killed by another player.") end
  1079.                     response = false
  1080.                 end
  1081.  
  1082.                 if last_damage[vhash] then
  1083.                     if getplayer(killer) then
  1084.                         klvl = level[killer]
  1085.                         kname = getname(killer)
  1086.                         khash = gethash(killer)                    
  1087.                         local k_objectId = getplayerobjectid(killer)
  1088.                         if k_objectId ~= nil then
  1089.                        
  1090.                             -- Spike Bat
  1091.                             if weapons[killer] == "weapons\\spikebat\\spikebat" then
  1092.                                 if last_damage[vhash] == "weapons\\unarmed\\melee" or last_damage[vhash] == "weapons\\energy_sword\\lunge" or last_damage[vhash] == "weapons\\unarmed\\melee" then
  1093.                                     say(kname .. " knocked out " .. vname .. " with a Spike Bat.")
  1094.                                 end
  1095.                                 level[killer] = 2
  1096.                                 playerscore[killer] = 1                                
  1097.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1098.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1099.                                 response = false
  1100.                                
  1101.                             -- Shotgun
  1102.                             elseif weapons[killer] == "cmt\\weapons\\human\\shotgun\\shotgun" then
  1103.                                 if last_damage[vhash] == "weapons\\shotgun\\pellet" then
  1104.                                     say(kname .. " killed " .. vname .. " with a Shotgun. ")
  1105.                                 elseif last_damage[vhash] == "weapons\\shotgun\\melee" then
  1106.                                     say(kname .. " melee'd " .. vname .. " with a Shotgun.")
  1107.                                 end
  1108.                                 level[killer] = 3
  1109.                                 playerscore[killer] = 2                                
  1110.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1111.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1112.                                 response = false
  1113.                                
  1114.                             -- Brute Spiker
  1115.                             elseif weapons[killer] == "cmt\\weapons\\covenant\\spiker\\spiker" then
  1116.                                 if last_damage[vhash] == "cmt\\weapons\\covenant\\spiker\\projectile\\nail" then
  1117.                                     say(kname .. " killed " .. vname .. " with a Brute Spiker. ")
  1118.                                 elseif last_damage[vhash] == "cmt\\weapons\\covenant\\spiker\\melee" then
  1119.                                     say(kname .. " melee'd " .. vname .. " with a Brute Spiker.")
  1120.                                 end
  1121.                                 level[killer] = 4
  1122.                                 playerscore[killer] = 3                                
  1123.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1124.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1125.                                 response = false
  1126.  
  1127.                             -- Plasma Rifle
  1128.                             elseif weapons[killer] == "cmt\\weapons\\covenant\\plasma_rifle\\plasma rifle" then
  1129.                                 if last_damage[vhash] == "weapons\\plasma rifle\\bolt" then
  1130.                                     say(kname .. " killed " .. vname .. " with a Plasma Rifle. ")
  1131.                                 elseif last_damage[vhash] == "weapons\\plasma rifle\\melee" then
  1132.                                     say(kname .. " melee'd " .. vname .. " with a Plasma Rifle.")
  1133.                                 end
  1134.                                 level[killer] = 5
  1135.                                 playerscore[killer] = 4                                
  1136.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1137.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1138.                                 response = false
  1139.  
  1140.                             -- Sniper Rifle
  1141.                             elseif weapons[killer] == "cmt\\weapons\\human\\sniper_v2\\sniper_v2" then
  1142.                                 if last_damage[vhash] == "weapons\\sniper rifle\\sniper bullet" then
  1143.                                     say(kname .. " killed " .. vname .. " with a Sniper Rifle. ")
  1144.                                 elseif last_damage[vhash] == "weapons\\sniper rifle\\melee" then
  1145.                                     say(kname .. " melee'd " .. vname .. " with a Sniper Rifle.")
  1146.                                 end
  1147.                                 level[killer] = 6
  1148.                                 playerscore[killer] = 5                                
  1149.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1150.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1151.                                 response = false
  1152.  
  1153.                             -- SMG
  1154.                             elseif weapons[killer] == "cmt\\weapons\\human\\smg\\smg" then
  1155.                                 if last_damage[vhash] == "cmt\\weapons\\human\\smg\\bullet" then
  1156.                                     say(kname .. " killed " .. vname .. " with an SMG. ")
  1157.                                 elseif last_damage[vhash] == "weapons\\assault rifle\\melee" then
  1158.                                     say(kname .. " melee'd " .. vname .. " with an SMG.")
  1159.                                 end
  1160.                                 level[killer] = 7
  1161.                                 playerscore[killer] = 6                        
  1162.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1163.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1164.                                 response = false
  1165.  
  1166.                             -- Assault Rifle
  1167.                             elseif weapons[killer] == "cmt\\weapons\\human\\assault_rifle\\assault rifle cc" then
  1168.                                 if last_damage[vhash] == "weapons\\assault rifle\\bullet" then
  1169.                                     say(kname .. " killed " .. vname .. " with an Assault Rifle. ")
  1170.                                 elseif last_damage[vhash] == "weapons\\assault rifle\\melee" then
  1171.                                     say(kname .. " melee'd " .. vname .. " with an Assault Rifle.")
  1172.                                 end
  1173.                                 level[killer] = 8
  1174.                                 playerscore[killer] = 7                                
  1175.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1176.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1177.                                 response = false
  1178.  
  1179.                             -- Flamethrower
  1180.                             elseif weapons[killer] == "cmt\\weapons\\human\\flamethrower\\flamethrower" then
  1181.                                 if last_damage[vhash] == "weapons\\flamethrower\\effects\\flame detonation" or last_damage[vhash] == "weapons\\flamethrower\\impact damage" or last_damage[vhash] == "weapons\\flamethrower\\explosion" then
  1182.                                     say(kname .. " killed " .. vname .. " with a Flamethrower. ")
  1183.                                 elseif last_damage[vhash] == "weapons\\flamethrower\\melee" then
  1184.                                     say(kname .. " melee'd " .. vname .. " with a Flamethrower.")
  1185.                                 end
  1186.                                 level[killer] = 9
  1187.                                 playerscore[killer] = 8                            
  1188.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1189.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1190.                                 response = false
  1191.                            
  1192.                             -- Magnum Pistol
  1193.                             elseif weapons[killer] == "reach\\weapons\\magnum\\magnum" then
  1194.                                 if last_damage[vhash] == "weapons\\pistol\\bullet" then
  1195.                                     say(kname .. " killed " .. vname .. " with a Magnum Pistol. ")
  1196.                                 elseif last_damage[vhash] == "weapons\\pistol\\melee" then
  1197.                                     say(kname .. " melee'd " .. vname .. " with a Magnum Pistol.")
  1198.                                 end
  1199.                                 level[killer] = 10
  1200.                                 playerscore[killer] = 9                                
  1201.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1202.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1203.                                 response = false
  1204.                            
  1205.                             -- Brute Shot
  1206.                             elseif weapons[killer] == "cmt\\weapons\\covenant\\brute_shot\\brute_shot_6" then
  1207.                                 if last_damage[vhash] == "cmt\\weapons\\covenant\\brute_shot\\projectile\\effects\\explosion" or last_damage[vhash] == "cmt\\weapons\\covenant\\brute_shot\\projectile\\effects\\shockwave" or
  1208.                                 last_damage[vhash] == "cmt\\weapons\\covenant\\brute_shot\\projectile\\effects\\impact" then
  1209.                                     say(kname .. " killed " .. vname .. " with a Brute Shot. ")
  1210.                                 elseif last_damage[vhash] == "cmt\\weapons\\covenant\\brute_shot\\melee" then
  1211.                                     say(kname .. " melee'd " .. vname .. " with a Brute Shot.")
  1212.                                 end
  1213.                                 level[killer] = 11
  1214.                                 playerscore[killer] = 10                                   
  1215.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1216.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1217.                                 response = false
  1218.  
  1219.                             -- Energy Sword        
  1220.                             elseif weapons[killer] == "weapons\\energy_sword\\energy_sword" then
  1221.                                 if last_damage[vhash] == "weapons\\unarmed\\melee" or last_damage[vhash] == "weapons\\energy_sword\\lunge" or last_damage[vhash] == "weapons\\energy_sword\\melee" then
  1222.                                     say(kname .. " gutted " .. vname .. " with an Energy Sword. ")
  1223.                                 end
  1224.                                 level[killer] = 12
  1225.                                 playerscore[killer] = 11                                   
  1226.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1227.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1228.                                 response = false                               
  1229.                            
  1230.                             -- Needler         
  1231.                             elseif weapons[killer] == "cmt\\weapons\\covenant\\needler\\needler blue" then
  1232.                                 if last_damage[vhash] == "cmt\\weapons\\covenant\\needler\\blue\\effects\\explosion" or last_damage[vhash] == "cmt\\weapons\\covenant\\needler\\impact damage"
  1233.                                 or last_damage[vhash] == "cmt\\weapons\\covenant\\needler\\detonation damage" then
  1234.                                     say(kname .. " killed " .. vname .. " with a Needler. ")
  1235.                                 elseif last_damage[vhash] == "cmt\\weapons\\covenant\\needler\\melee" then
  1236.                                     say(kname .. " killed " .. vname .. " with a Needler.")
  1237.                                 end
  1238.                                 level[killer] = 13
  1239.                                 playerscore[killer] = 12                                   
  1240.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1241.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1242.                                 response = false
  1243.                                
  1244.                             -- Rocket Launcher         
  1245.                             elseif weapons[killer] == "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp" then
  1246.                                 if last_damage[vhash] == "cmt\\weapons\\human\\rocket_launcher\\effects\\rocket_explosion" or last_damage[vhash] == "cmt\\weapons\\human\\rocket_launcher\\explosion"
  1247.                                 or last_damage[vhash] == "weapons\\frag grenade\\shock wave" then
  1248.                                     say(kname .. " killed " .. vname .. " with a Rocket Launcher. ")
  1249.                                 elseif last_damage[vhash] == "weapons\\rocket launcher\\melee" then
  1250.                                     say(kname .. " killed " .. vname .. " with a Rocket Launcher.")
  1251.                                 end
  1252.                                 beserk = true
  1253.                                 level[killer] = 14
  1254.                                 playerscore[killer] = 13                                   
  1255.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1256.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1257.                                 response = false                               
  1258.                            
  1259.                             -- Spec Pistol     
  1260.                             elseif weapons[killer] == "cmt\\weapons\\human\\spec pistol\\spec_pistol" then
  1261.                                 if last_damage[vhash] == "weapons\\pistol\\bullet" then
  1262.                                     say(kname .. " killed " .. vname .. " with a Spec Pistol, advanced to WIN! +15 Points!")
  1263.                                 elseif last_damage[vhash] == "weapons\\pistol\\melee" then
  1264.                                     say(kname .. " melee'd " .. vname .. " with a Spec Pistol, advanced to WIN! +15 Points!")                                  
  1265.                                 end
  1266.                                 level[killer] = 15
  1267.                                 playerscore[killer] = playerscore[killer] + 14
  1268.                                 if team_play then kteam = getteam(killer) teamscore[kteam] = teamscore[kteam] + 14 end                                     
  1269.                                 gameweap = registertimer(0, "AssignGameWeapons", killer)
  1270.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
  1271.                                 response = false   
  1272.                                                        
  1273.                             -- grenades
  1274.                             elseif last_damage[vhash] == "halo3\\weapons\\frag-grenade\\spike projectile\\grenade-spike" or last_damage[vhash] == "h2\\weapons\\grenade\\fragmentation_grenade\\explosion_shock_wave"
  1275.                             or last_damage[vhash] == "weapons\\frag grenade\\explosion" or last_damage[vhash] == "weapons\\plasma grenade\\attached" or last_damage[vhash] == "weapons\\plasma grenade\\stick"
  1276.                             or last_damage[vhash] == "halo3\\weapons\\plasma-grenade\\effects\\explosion" or last_damage[vhash] == "halo3\\weapons\\plasma-grenade\\effects\\explosion_shock_wave"
  1277.                             or last_damage[vhash] == "halo3\\weapons\\plasma-grenade\\effects\\explosion_shield_skip" then
  1278.                                 say(kname .. " killed " .. vname .. " with a grenade.")
  1279.                                 sendconsoletext(killer, "No level advancement for grenade kills.", 4, 0)
  1280.                                 if logging then log_msg(1, vname .. " was killed by " .. kname .. "'s grenade who is level: " .. klvl) end
  1281.                                 response = false                           
  1282.                             end
  1283.                         else
  1284.                             response = false
  1285.                         end
  1286.                     end
  1287.                 end
  1288.             end
  1289.            
  1290.         elseif mode == 5 then -- player was killed/betrayed by teammate
  1291.             if getplayer(killer) then
  1292.                 klvl = level[killer]
  1293.                 kname = getname(killer)
  1294.                 khash = gethash(killer)
  1295.             else   
  1296.                 kname = "NULL"
  1297.                 klvl = NULL
  1298.             end
  1299.            
  1300.             if getplayer(victim) then
  1301.                 vlvl = level[victim]
  1302.                 vname = getname(victim)
  1303.                 vhash = gethash(victim)    
  1304.                 if getplayer(killer) then
  1305.                     klvl = level[killer]
  1306.                     kname = getname(killer)
  1307.                     khash = gethash(killer)            
  1308.                     mybattery[killer] = 0
  1309.                    
  1310.                     if klvl == 14 then
  1311.                         weapons[killer] = "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp" -- Rocket Launcher
  1312.                         privatesay(killer, "Demoted! Betrayal Karma is a bitch!")
  1313.                         say(kname .. " demoted to Level 14 for betrayal.")
  1314.                         level[victim] = 13
  1315.                         playerscore[victim] = 12
  1316.                         beserk = false                     
  1317.                         if logging then log_msg(1, kname .. " demoted from level 9 to 8 for betrayal. Is level: " .. klvl) end
  1318.                         response = false
  1319.                         --goto FINISHED
  1320.                     else
  1321.                         if level[killer] ~= nil and level[killer] > 1 then
  1322.                             if (level[killer] - 1) >= 1 then level[killer] = level[killer] - 1 end
  1323.                             if (playerscore[killer] - 1) >= 0 then playerscore[killer] = playerscore[killer] - 1 end
  1324.                             if team_play then if (teamscore[kteam] - 1) >= 0 then teamscore[kteam] = teamscore[kteam] - 1 end end                      
  1325.                             mybattery[killer] = 0
  1326.                             kill(killer)
  1327.                             say(kname .. " was killed and demoted 1 level for betraying " .. vname)
  1328.                             if logging then log_msg(1, kname .. " was killed by server for betrayal of " .. vname) end
  1329.                             response = false
  1330.                         else
  1331.                             kill(killer)
  1332.                             say(kname .. " was killed for betraying " .. vname)
  1333.                             if logging then log_msg(1, kname .. " was killed by server for betrayal of " .. vname) end
  1334.                             response = false
  1335.                         end
  1336.                         --::FINISHED::
  1337.                     end
  1338.                     response = false       
  1339.                 end
  1340.                 response = false   
  1341.             end    
  1342.            
  1343.         elseif mode == 6 then --suicides - killer is self/victim
  1344.             if getplayer(victim) then
  1345.                 vlvl = level[victim]
  1346.                 vname = getname(victim)
  1347.                 vhash = gethash(victim)
  1348.                 vteam = getteam(victim)
  1349.                 if klvl == 14 then
  1350.                     weapons[victim] = "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp" -- Rocket Launcher
  1351.                     level[victim] = 13
  1352.                     playerscore[victim] = 12
  1353.                     beserk = false
  1354.                     privatesay(victim, "Demoted a level! Ain't that a bitch?!")
  1355.                     say(kname .. " demoted to Level 13 for suicide.")
  1356.                     if logging then log_msg(1, kname .. " demoted from level 15 to 14 for suicide. Is level: " .. klvl) end
  1357.                     response = false
  1358.                 else -- one level drop here
  1359.                     if level[victim] ~= nil and level[victim] > 1 then
  1360.                         if (level[victim] - 1) >= 1 then level[victim] = level[victim] - 1 end
  1361.                         if (playerscore[victim] - 1) >= 0 then playerscore[victim] = playerscore[victim] - 1 end
  1362.                         if team_play then if (teamscore[vteam] - 1) >= 0 then teamscore[vteam] = teamscore[vteam] - 1 end end                      
  1363.                         say(vname .. " committed suicide.")
  1364.                         if logging then log_msg(1, vname .. " demoted one level for suicide. Is level: " .. vlvl) end
  1365.                         response = false
  1366.                     end
  1367.                     response = false
  1368.                 end
  1369.             end
  1370.         end
  1371.     end
  1372.    
  1373.     return response
  1374. end
  1375.  
  1376. function OnDamageApplication(receiving, causing, tagid, hit, backtap)
  1377.     if receiving then
  1378.         local r_object = getobject(receiving)
  1379.         local r_player = objectidtoplayer(receiving)
  1380.         local c_player = objectidtoplayer(causing)
  1381.         if r_object then
  1382.             local receiver = objectaddrtoplayer(r_object)
  1383.             if receiver then
  1384.                 local rhash = gethash(receiver)
  1385.                 local tagname,tagtype = gettaginfo(tagid)
  1386.                 last_damage[rhash] = tagname
  1387.                 if logging then log_msg(1, "dmg tag: " .. tagname .. " to player: " .. getname(r_player)) end
  1388.             end
  1389.         end
  1390.     end
  1391.     return nil
  1392. end
  1393.  
  1394. function OnDamageLookup(receiving, causing, tagid)
  1395.    
  1396.     if receiving and causing and receiving ~= causing then
  1397.         local player = objectidtoplayer(causing)
  1398.         local tagname, tagtype = gettaginfo(tagid)
  1399.         local spikerd = string.find(tagname, "cmt\\weapons\\covenant\\spiker\\spiker")
  1400.         local esword = string.find(tagname, "weapons\\unarmed\\melee") or string.find(tagname, "weapons\\energy_sword\\lunge")
  1401.         local ppistol1 = string.find(tagname, "cmt\\weapons\\covenant\\plasma_pistol\\bolt\\bolt") or string.find(tagname, "cmt\\weapons\\covenant\\plasma_pistol\\overcharge\\charged bolt")
  1402.         local plasrifle = string.find(tagname, "weapons\\plasma rifle\\bolt")
  1403.         local spikeb = string.find(tagname, "weapons\\spikebat\\spikebat")         
  1404.         local melee = string.find(tagname, "melee")
  1405.         local needler = string.find(tagname, "cmt\\weapons\\covenant\\needler\\blue\\effects\\explosion") or string.find(tagname, "cmt\\weapons\\covenant\\needler\\impact damage") or string.find(tagname, "cmt\\weapons\\covenant\\needler\\detonation damage")
  1406.         local beam = string.find(tagname, "cmt\\characters\\sentinel\\minor\\beam")
  1407.         local beam_m = string.find(tagname, "cheddars\\weapons\\h3_senitial_beam\\effects\\jpt!1063")
  1408.        
  1409.         local c_player = objectidtoplayer(causing)
  1410.         local r_player = objectidtoplayer(receiving)
  1411.         if c_player and isinvehicle(c_player) then
  1412.             local m_vehicleId = getplayervehicleid(c_player)
  1413.             if m_vehicleId then
  1414.                 local m_vehicle = getobject(m_vehicleId)
  1415.                 local gunner = readdword(m_vehicle + 0x328)
  1416.                 local driver = readdword(m_vehicle + 0x324)
  1417.                 if gunner == causing then
  1418.                     return false
  1419.                 elseif driver == causing then
  1420.                     return false
  1421.                 end            
  1422.             end
  1423.         end
  1424.        
  1425.         --log_msg(1, "tag: " .. tagname)
  1426.         if c_player and r_player then
  1427.             if melee then odl_multiplier(9999) end
  1428.             if ppistol1 then odl_multiplier(1.9) end
  1429.             if plasrifle then odl_multiplier(1.25) end
  1430.             if spikerd then odl_multiplier(1.8) end
  1431.             if needler then odl_multiplier(1.5) end
  1432.             if spikeb then odl_multiplier(9999) end
  1433.             if esword then odl_multiplier(9999) end
  1434.             if beam then odl_multiplier(1.25) end
  1435.             if beam_m then odl_multiplier(9999) end
  1436.         end
  1437.     end
  1438.  
  1439.     return nil
  1440. end
  1441.    
  1442. function OnVehicleEntry(player, veh_id, seat, mapid, relevant)
  1443.     if getplayer(player) then
  1444.         privatesay(player, getname(player) .. " NOTE: You can't kill players with vehicle or vehicle guns.")
  1445.     end
  1446.     return nil
  1447. end
  1448.    
  1449. function getplayervehicleid(player)
  1450.     local m_objectId = getplayerobjectid(player)
  1451.     if m_objectId then return readdword(getobject(m_objectId) + 0x11C) end
  1452. end
  1453.    
  1454. function ApplyHP(id, count, player)
  1455.     if count == 1 then
  1456.         if player and game_started then
  1457.             local name = getname(player)
  1458.             local lvl = level[player]  
  1459.             local m_playerObjId = getplayerobjectid(player)
  1460.             if m_playerObjId ~= nil then
  1461.                 local m_object = getobject(m_playerObjId)
  1462.                 local obj_health = readfloat(m_object + 0xE0)
  1463.                 if obj_health < 1 then
  1464.                     writefloat(m_object + 0xE0, 1)
  1465.                     sendconsoletext(player, "Bonus: Your health has been restored.", 5, 0)
  1466.                     log_msg(1, name .. " Health Bonus applied. Is Level: " .. lvl)
  1467.                 end
  1468.             end
  1469.         end
  1470.     end
  1471.     return false
  1472. end
  1473.  
  1474. function OnClientUpdate(player)
  1475.     if getplayer(player) then
  1476.         local lvl = level[player]
  1477.         if lvl ~= nil then
  1478.             -- monitors and initiates game win announcement
  1479.             if lvl == 15 and game_started then
  1480.                 game_started = false
  1481.                 announcewin = registertimer(0, "AnnounceWin", player)
  1482.                 if logging then log_msg(1, "Game win detected - Announcement called.") end
  1483.             end
  1484.         end
  1485.     end
  1486. end
  1487.  
  1488. function AnnounceWin(id, count, player)
  1489.     -- announces game winner
  1490.     if player and game_started == false then
  1491.         local name = getname(player)   
  1492.         svcmd("sv_map_next")
  1493.         if not team_play then
  1494.             say(name .. " WINS THE GAME! ")
  1495.         else   
  1496.             local team = getteam(player)
  1497.             if team == 0 then team = "RED TEAM" elseif team == 1 then team = "BLUE TEAM" end
  1498.             say(team .. " WINS THE GAME! ")
  1499.         end    
  1500.         log_msg(1, name .. " has won the Gun-Game on " .. map_name .. "!")
  1501.     end    
  1502.     return false
  1503. end    
  1504.  
  1505. function OnTeamChange(player, old_team, new_team, relevant)
  1506.     -- prevent unbalancing teams by team change
  1507.     local response = nil
  1508.     if getplayer(player) then
  1509.         if not team_play then response = false return response end 
  1510.        
  1511.         if relevant == true or relevant == 1 then
  1512.             if getteamsize(old_team) == getteamsize(new_team) then
  1513.                 privatesay(player, "You cannot change teams.")
  1514.                 response = false
  1515.             elseif getteamsize(old_team) + 1 == getteamsize(new_team) then
  1516.                 privatesay(player, "You cannot change teams.")
  1517.                 response = false
  1518.             elseif getteamsize(old_team) == getteamsize(new_team) + 1 then
  1519.                 privatesay(player, "You cannot change teams.")
  1520.                 response = false
  1521.             elseif getteamsize(old_team) > getteamsize(new_team) then
  1522.                 team_change[player] = true
  1523.                 -- transfer player score to new team score, and deduct new player score from old team score
  1524.                 if team_play then
  1525.                     teamscore[new_team] = teamscore[new_team] + playerscore[player]
  1526.                     teamscore[old_team] = teamscore[old_team] - playerscore[player]
  1527.                 end
  1528.                 mybattery[player] = 0
  1529.                 say(getname(player) .. " switched teams.")
  1530.                 response = true
  1531.             elseif getteamsize(old_team) < getteamsize(new_team) then
  1532.                 team_change[player] = true
  1533.                 -- transfer player score to new team score, and deduct new player score from old team score
  1534.                 if team_play then
  1535.                     teamscore[new_team] = teamscore[new_team] + playerscore[player]
  1536.                     teamscore[old_team] = teamscore[old_team] - playerscore[player]
  1537.                 end                            
  1538.                 mybattery[player] = 0
  1539.                 say(getname(player) .. " switched teams.")
  1540.                 response = true
  1541.             end
  1542.         elseif relevant == false or relevant == 0 then
  1543.             team_change[player] = true
  1544.             -- transfer player score to new team score, and deduct new player score from old team score
  1545.             if team_play then
  1546.                 teamscore[new_team] = teamscore[new_team] + playerscore[player]
  1547.                 teamscore[old_team] = teamscore[old_team] - playerscore[player]
  1548.             end        
  1549.             mybattery[player] = 0
  1550.             say(getname(player) .. " was team-switched by autobalance.")
  1551.             response = true
  1552.         end
  1553.        
  1554.     end
  1555.     return response
  1556. end
  1557.  
  1558. function OnObjectInteraction(player, objId, mapId)
  1559.     local Pass = nil
  1560.     local name, type = gettaginfo(mapId)
  1561.     if type == "weap" then
  1562.         if gametype == 1 or gametype == 3 then
  1563.             if name == "weapons\\flag\\flag" or name == "cmt\\weapons\\multiplayer\\ball\\ball" then
  1564.                 Pass = true
  1565.             elseif weapons[player] ~= nil then
  1566.                 if name ~= weapons[player] then
  1567.                     Pass = false
  1568.                 end
  1569.             end
  1570.         else
  1571.             if weapons[player] ~= nil then
  1572.                 if name ~= weapons[player] then
  1573.                     Pass = false
  1574.                 end
  1575.             end
  1576.         end
  1577.     elseif type == "eqip" then
  1578.         if name == "powerups\\health pack" or name == "powerups\\over shield" then
  1579.             Pass = true
  1580.         else
  1581.             Pass = false
  1582.         end
  1583.     end
  1584.     return Pass
  1585. end
  1586.  
  1587. function OnObjectCreationAttempt(mapId, parentId, player)
  1588.     local response = nil
  1589.     local name, type = gettaginfo(mapId)
  1590.     if game_started then
  1591.         -- block
  1592.         if mapId == gettagid("weap", "cmt\\weapons\\multiplayer\\ball\\ball") or -- oddball
  1593.             mapId == gettagid("eqip", "weapons\\frag grenade\\frag grenade") or -- frags
  1594.             mapId == gettagid("eqip", "weapons\\plasma grenade\\plasma grenade") then -- plasma
  1595.             response = false
  1596.         end
  1597.         -- replace
  1598.         if mapId == gettagid("weap", "weapons\\flag\\flag") then -- flag
  1599.             return gettagid("weap", "cmt\\weapons\\covenant\\plasma_pistol\\plasma pistol") -- ppistol
  1600.         end
  1601.  
  1602.         if team_play then  
  1603.             if mapId == gettagid("vehi", "h3_brutechopper\\brute_chopper") or mapId == gettagid("vehi", "h3_mongoose\\h3_mongoose") or mapId == gettagid("vehi", "vehicles\\rwarthog\\new_rwarthog") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog_fast") then
  1604.                 return gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog")
  1605.             end
  1606.         else
  1607.             if mapId == gettagid("vehi", "h3_mongoose\\h3_mongoose") or mapId == gettagid("vehi", "vehicles\\rwarthog\\new_rwarthog") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog_fast") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog") then
  1608.                 return gettagid("vehi", "h3_brutechopper\\brute_chopper")
  1609.             end
  1610.         end    
  1611.  
  1612.     elseif not game_started then
  1613.         -- allow
  1614.         if mapId == gettagid("bipd", "h3_cyborg\\h3_cyborg_mp") or -- mpbiped
  1615.             mapId == gettagid("bipd", "h3_cyborg\\h3_cyborg_sp") then -- cpbiped           
  1616.             response = true
  1617.         end
  1618.         -- block
  1619.         if mapId == gettagid("weap", "cmt\\weapons\\multiplayer\\ball\\ball") or -- oddball
  1620.             mapId == gettagid("eqip", "weapons\\frag grenade\\frag grenade") or -- frags
  1621.             mapId == gettagid("eqip", "weapons\\plasma grenade\\plasma grenade") then -- plasma
  1622.             response = false
  1623.         end
  1624.         -- replace
  1625.         if mapId == gettagid("weap", "weapons\\flag\\flag") then -- flag
  1626.             return gettagid("weap", "cmt\\weapons\\covenant\\plasma_pistol\\plasma pistol") -- ppistol
  1627.         end
  1628.         if team_play then  
  1629.             if mapId == gettagid("vehi", "h3_brutechopper\\brute_chopper") or mapId == gettagid("vehi", "h3_mongoose\\h3_mongoose") or mapId == gettagid("vehi", "vehicles\\rwarthog\\new_rwarthog") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog_fast") then
  1630.                 return gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog")
  1631.             end
  1632.         else
  1633.             if mapId == gettagid("vehi", "h3_mongoose\\h3_mongoose") or mapId == gettagid("vehi", "vehicles\\rwarthog\\new_rwarthog") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog_fast") or mapId == gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog") then
  1634.                 return gettagid("vehi", "h3_brutechopper\\brute_chopper")
  1635.             end
  1636.         end        
  1637.                
  1638.     else
  1639.         response = false
  1640.     end
  1641.     return response    
  1642. end
  1643.  
  1644. function LoadTags()
  1645.     --weapons
  1646.     spikebat = gettagid("weap", "weapons\\spikebat\\spikebat")
  1647.     ppistol = gettagid("weap", "cmt\\weapons\\covenant\\plasma_pistol\\plasma pistol")
  1648.     shotgun = gettagid("weap", "cmt\\weapons\\human\\shotgun\\shotgun")
  1649.     spiker = gettagid("weap", "cmt\\weapons\\covenant\\spiker\\spiker")
  1650.     prifle = gettagid("weap", "cmt\\weapons\\covenant\\plasma_rifle\\plasma rifle")
  1651.     sniper = gettagid("weap", "cmt\\weapons\\human\\sniper_v2\\sniper_v2")
  1652.     smg = gettagid("weap", "cmt\\weapons\\human\\smg\\smg")
  1653.     arifle = gettagid("weap", "cmt\\weapons\\human\\assault_rifle\\assault rifle cc")
  1654.     flamer = gettagid("weap", "cmt\\weapons\\human\\flamethrower\\flamethrower")
  1655.     sbeam = gettagid("weap", "cheddars\\weapons\\h3_senitial_beam\\sentinel beam")
  1656.     mpistol = gettagid("weap", "reach\\weapons\\magnum\\magnum")
  1657.     bshot = gettagid("weap", "cmt\\weapons\\covenant\\brute_shot\\brute_shot_6")
  1658.     esword = gettagid("weap", "weapons\\energy_sword\\energy_sword")
  1659.     needler = gettagid("weap", "cmt\\weapons\\covenant\\needler\\needler blue")
  1660.     rlaunch = gettagid("weap", "cmt\\weapons\\human\\rocket_launcher\\rocket launcher mp")
  1661.     spistol = gettagid("weap", "cmt\\weapons\\human\\spec pistol\\spec_pistol")
  1662.     frag = gettagid("eqip", "weapons\\frag grenade\\frag grenade")
  1663.     plasma = gettagid("eqip", "weapons\\plasma grenade\\plasma grenade")
  1664.     flag = gettagid("weap", "weapons\\flag\\flag")
  1665.     ball = gettagid("weap", "cmt\\weapons\\multiplayer\\ball\\ball")
  1666.  
  1667.     -- fall/dist
  1668.     Fall = gettagid("jpt!", "globals\\falling")
  1669.     Dist = gettagid("jpt!", "globals\\distance")
  1670.     Veh_dmg = gettagid("jpt!", "globals\\vehicle_collision")
  1671.     -- others
  1672.     biped1 = gettagid("bipd", "h3_cyborg\\h3_cyborg_mp")
  1673.     biped2 = gettagid("bipd", "h3_cyborg\\h3_cyborg_sp")
  1674.     Healthp = gettagid("eqip", "powerups\\health pack")
  1675.     Oshield = gettagid("eqip", "powerups\\over shield")
  1676.     Acamo = gettagid("eqip", "powerups\\active camouflage")
  1677.    
  1678.     -- vehicles
  1679.     whog = gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog")
  1680.     bchopper = gettagid("vehi", "h3_brutechopper\\brute_chopper")
  1681.     rhog = gettagid("vehi", "vehicles\\rwarthog\\new_rwarthog")
  1682.     whog2 = gettagid("vehi", "h2\\vehicles\\hogs\\warthog\\warthog_fast")
  1683.     mong = gettagid("vehi", "h3_mongoose\\h3_mongoose")
  1684. end
  1685.  
  1686. function AutoBalance(id, count)
  1687.     if game_started and team_play and cur_players > 3 and TeamsAreUneven then
  1688.         Balance_Teams()
  1689.         return true
  1690.     elseif game_started and team_play and cur_players < 4 then 
  1691.         return false
  1692.     else
  1693.         return false
  1694.     end
  1695. end
  1696.  
  1697. -- inspired by 002's team balance for Sapp
  1698. function Balance_Teams()
  1699.     if game_started and team_play then
  1700.         local redteam = getteamsize(0)
  1701.         local blueteam = getteamsize(1)
  1702.         if redteam > blueteam then
  1703.             while TeamsAreUneven() do
  1704.                 while (getteamsize(0) > getteamsize(1)+1) do
  1705.                     local randomred = SelectPlayer(0)
  1706.                     if randomred ~= nil then
  1707.                         changeteam(randomred, true)
  1708.                     end
  1709.                 end
  1710.             end
  1711.         elseif blueteam > redteam then
  1712.             while TeamsAreUneven() do
  1713.                 while (getteamsize(1) > getteamsize(0)+1) do
  1714.                     local randomblu = SelectPlayer(1)
  1715.                     if randomblu ~= nil then                           
  1716.                         changeteam(randomblu, true)
  1717.                     end
  1718.                 end
  1719.             end    
  1720.         end
  1721.     end
  1722. end
  1723.  
  1724. -- inspired by 002's team balance for Sapp
  1725. function TeamsAreUneven()
  1726.     local red = getteamsize(0)
  1727.     local blue = getteamsize(1)
  1728.     if (red > blue + 1 or blue > red + 1) then return true end
  1729.     return false
  1730. end
  1731.  
  1732. function SelectPlayer(team)
  1733.     local t = {}
  1734.     for i=0,15 do
  1735.         if getplayer(i) and getteam(i) == team then
  1736.             table.insert(t, i)
  1737.         end
  1738.     end
  1739.     if #t > 0 then
  1740.         local r = getrandomnumber(1, #t+1)
  1741.         return t[r]
  1742.     end
  1743.     return nil
  1744. end
  1745.  
  1746. function ShowTargets(id, count)
  1747.     -- timer to repeatedly call roaming targets function while game is started and players > 0
  1748.     Roaming_Targets()
  1749.     return true
  1750. end
  1751.  
  1752. function Roaming_Targets(id, count)
  1753.     if game_started and cur_players > 2 and gametype ~= 5 then
  1754.         if team_play then
  1755.             local target = SelectRoamingPlayer(player)
  1756.             if target then
  1757.                 local team = getteam(target)
  1758.                 for i = 0,15 do
  1759.                     if getplayer(i) and getplayer(i) ~= getplayer(target) and getteam(i) ~= team then
  1760.                         writeword(getplayer(i) + 0x88, target)
  1761.                     end                
  1762.                 end
  1763.                 return true
  1764.             else
  1765.                 return false
  1766.             end
  1767.         else
  1768.             local target = SelectRoamingPlayer(player)
  1769.             if target then
  1770.                 for i = 0,15 do
  1771.                     if getplayer(i) and getplayer(i) ~= getplayer(target) then
  1772.                         writeword(getplayer(i) + 0x88, target)
  1773.                     end                
  1774.                 end
  1775.                 return true
  1776.             else
  1777.                 return false
  1778.             end
  1779.         end
  1780.     end
  1781. end
  1782.  
  1783. function SelectRoamingPlayer(player)
  1784.     local t = {}
  1785.     for i=0,15 do
  1786.         if getplayer(i) then
  1787.             table.insert(t, i)
  1788.         end
  1789.     end
  1790.     if #t > 0 then
  1791.         if (timerCount > #t) then
  1792.             timerCount = 0
  1793.         else
  1794.             timerCount = timerCount + 1
  1795.         end
  1796.         return t[timerCount]
  1797.     end
  1798. end
  1799.  
  1800. function OnGameEnd(stage)
  1801.     if stage == 1 then
  1802.         game_started = false
  1803.         beserk = false     
  1804.         if gameweap then
  1805.             gameweap = nil
  1806.         end
  1807.         if announcewin then
  1808.             announcewin = nil
  1809.         end
  1810.         if m_weaponId then
  1811.             m_weaponId = nil
  1812.         end
  1813.         if replaceplasmaweap then
  1814.             replaceplasmaweap = nil
  1815.         end
  1816.         if p_objectId then
  1817.             p_objectId = nil
  1818.         end
  1819.         if health then
  1820.             health = nil
  1821.         end
  1822.         if welcome then
  1823.             welcome = nil
  1824.         end
  1825.         if speedtimer then
  1826.             speedtimer = nil
  1827.         end
  1828.         if checkbattery then
  1829.             checkbattery = nil
  1830.         end
  1831.         if updatescores then
  1832.             updatescores = nil
  1833.         end
  1834.         if autobalance then
  1835.             autobalance = nil
  1836.         end
  1837.         if consoletimer then
  1838.             consoletimer = nil
  1839.         end
  1840.         if spawnhp then
  1841.             spawnhp = nil
  1842.         end        
  1843.     elseif stage == 3 then
  1844.         for i = 0, 15 do
  1845.             if getplayer(i) then
  1846.                 privatesay(i, "Thank you for playing the Gun-Game Arms Race for Pit v2!")
  1847.                 privatesay(i, "by H\174 Shaft")
  1848.             end
  1849.         end    
  1850.     end
  1851. end
  1852.  
  1853. -- Start sendconsoletext overloaded by Nugget
  1854. console = {}
  1855. console.__index = console
  1856. consoletimer = registertimer(100, "ConsoleTimer")
  1857. phasor_sendconsoletext = sendconsoletext
  1858.  
  1859. function sendconsoletext(player, message, time, order, align, height, func)
  1860.     if player then
  1861.         console[player] = console[player] or {}
  1862.         local temp = {}
  1863.         temp.player = player
  1864.         temp.id = nextid(player, order)
  1865.         temp.message = message or ""
  1866.         temp.time = time or 0.7
  1867.         temp.remain = temp.time
  1868.         temp.align = align or "left"
  1869.         temp.height = height or 0
  1870.         if type(func) == "function" then
  1871.             temp.func = func
  1872.         elseif type(func) == "string" then
  1873.             temp.func = _G[func]
  1874.         end
  1875.         console[player][temp.id] = temp
  1876.         setmetatable(console[player][temp.id], console)
  1877.         return console[player][temp.id]
  1878.     end
  1879. end
  1880.  
  1881. function nextid(player, order)
  1882.     if not order then
  1883.         local x = 0
  1884.         for k,v in pairs(console[player]) do
  1885.             if k > x + 1 then
  1886.                 return x + 1
  1887.             end
  1888.             x = x + 1
  1889.         end
  1890.         return x + 1
  1891.     else
  1892.         local original = order
  1893.         while console[player][order] do
  1894.             order = order + 0.001
  1895.             if order == original + 0.999 then break end
  1896.         end
  1897.         return order
  1898.     end
  1899. end
  1900.  
  1901. function getmessage(player, order)
  1902.     if console[player] then
  1903.         if order then
  1904.             return console[player][order]
  1905.         end
  1906.     end
  1907. end
  1908.  
  1909. function getmessages(player)
  1910.     return console[player]
  1911. end
  1912.  
  1913. function getmessageblock(player, order)
  1914.     local temp = {}
  1915.     for k,v in opairs(console[player]) do
  1916.         if k >= order and k < order + 1 then
  1917.             table.insert(temp, console[player][k])
  1918.         end
  1919.     end
  1920.     return temp
  1921. end
  1922.  
  1923. function console:getmessage()
  1924.     return self.message
  1925. end
  1926.  
  1927. function console:append(message, reset)
  1928.     if console[self.player] then
  1929.         if console[self.player][self.id] then
  1930.             if getplayer(self.player) then
  1931.                 if reset then
  1932.                     if reset == true then
  1933.                         console[self.player][self.id].remain = console[self.player][self.id].time
  1934.                     elseif tonumber(reset) then
  1935.                         console[self.player][self.id].time = tonumber(reset)
  1936.                         console[self.player][self.id].remain = tonumber(reset)
  1937.                     end
  1938.                 end
  1939.                 console[self.player][self.id].message = message or ""
  1940.                 return true
  1941.             end
  1942.         end
  1943.     end
  1944. end
  1945.  
  1946. function console:shift(order)
  1947.     local temp = console[self.player][self.id]
  1948.     console[self.player][self.id] = console[self.player][order]
  1949.     console[self.player][order] = temp
  1950. end
  1951.  
  1952. function console:pause(time)
  1953.     console[self.player][self.id].pausetime = time or 5
  1954. end
  1955.  
  1956. function console:delete()
  1957.     console[self.player][self.id] = nil
  1958. end
  1959.  
  1960. function ConsoleTimer(id, count)
  1961.     for i,_ in opairs(console) do
  1962.         if tonumber(i) then
  1963.             if getplayer(i) then
  1964.                 for k,v in opairs(console[i]) do
  1965.                     if console[i][k].pausetime then
  1966.                         console[i][k].pausetime = console[i][k].pausetime - 0.1
  1967.                         if console[i][k].pausetime <= 0 then
  1968.                             console[i][k].pausetime = nil
  1969.                         end
  1970.                     else
  1971.                         if console[i][k].func then
  1972.                             if not console[i][k].func(i) then
  1973.                                 console[i][k] = nil
  1974.                             end
  1975.                         end
  1976.                         if console[i][k] then
  1977.                             console[i][k].remain = console[i][k].remain - 0.1
  1978.                             if console[i][k].remain <= 0 then
  1979.                                 console[i][k] = nil
  1980.                             end
  1981.                         end
  1982.                     end
  1983.                 end
  1984.                 if table.len(console[i]) > 0 then
  1985.                     local paused = 0
  1986.                     for k,v in pairs(console[i]) do
  1987.                         if console[i][k].pausetime then
  1988.                             paused = paused + 1
  1989.                         end
  1990.                     end
  1991.                     if paused < table.len(console[i]) then
  1992.                         local str = ""
  1993.                         for i = 0,30 do
  1994.                             str = str .. " \n"
  1995.                         end
  1996.                         phasor_sendconsoletext(i, str)
  1997.                         for k,v in opairs(console[i]) do
  1998.                             if not console[i][k].pausetime then
  1999.                                 if console[i][k].align == "right" or console[i][k].align == "center" then
  2000.                                     phasor_sendconsoletext(i, consolecenter(string.sub(console[i][k].message, 1, 78)))
  2001.                                 else
  2002.                                     phasor_sendconsoletext(i, string.sub(console[i][k].message, 1, 78))
  2003.                                 end
  2004.                             end
  2005.                         end
  2006.                     end
  2007.                 end
  2008.             else
  2009.                 console[i] = nil
  2010.             end
  2011.         end
  2012.     end
  2013.    
  2014.     return true
  2015. end
  2016.  
  2017. function consolecenter(text)
  2018.     if text then
  2019.         local len = string.len(text)
  2020.         for i = len + 1, 78 do
  2021.             text = " " .. text
  2022.         end
  2023.         return text
  2024.     end
  2025. end
  2026.  
  2027. function opairs(t)
  2028.     local keys = {}
  2029.     for k,v in pairs(t) do
  2030.         table.insert(keys, k)
  2031.     end    
  2032.     table.sort(keys,
  2033.     function(a,b)
  2034.         if type(a) == "number" and type(b) == "number" then
  2035.             return a < b
  2036.         end
  2037.         an = string.lower(tostring(a))
  2038.         bn = string.lower(tostring(b))
  2039.         if an ~= bn then
  2040.             return an < bn
  2041.         else
  2042.             return tostring(a) < tostring(b)
  2043.         end
  2044.     end)
  2045.     local count = 1
  2046.     return function()
  2047.         if table.unpack(keys) then
  2048.             local key = keys[count]
  2049.             local value = t[key]
  2050.             count = count + 1
  2051.             return key,value
  2052.         end
  2053.     end
  2054. end
  2055.  
  2056. function table.len(t)
  2057.     local count = 0
  2058.     for k,v in pairs(t) do
  2059.         count = count + 1
  2060.     end
  2061.     return count
  2062. end
  2063. -- Stop sendconsoletext overloaded
  2064.  
  2065. -- Created by H® Shaft.
  2066. -- Thanks to Oxide, AelitePrime, Nugget & Wizard.
  2067. -- Visit http://halorace.org/forum/index.php?topic=514.0 or
  2068. -- Visit http://pastebin.com/u/HR_Shaft for more phasor scripts
  2069. -- Special thanks to AelitePrime, as this was an attempt to script patterned after his style similar to his Zombie script 4.1, and other scripts we have mutually developed.
  2070. -- Note: This was written and developed by H® Shaft prior to the release of any other similar script with similar names. Any claims of duplication of concept/script are 100% bullpucky.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement