Advertisement
HR_Shaft

Gun-Game v2 for Asulum_v2 for Phasor v2+

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