Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ ### Gun-Game v2 for Asulum_v2 ###]]--
- --[[ ### by H® Shaft for Phasor v2 ###]]--
- -- Script designed specifically and only for the Halo CE map Asylum_v2: Link: http://www.mediafire.com/download/o5kzzo1u2zjriop/asylum_v2.zip
- -- GUN GAME: Based on the Counter Strike game called 'Gun Game.' Also, derivatives known as 'Global Offensive' & 'Arsenal: Arms Race'
- -- Each time you kill with a weapon, you will be given a new weapon. (oddball and flag excluded weapons)
- -- The first person to kill with each weapon in the game - wins!
- -- There are 9 weapons. Starting with Needler and ending with Sniper Rifle. All weapons have infinite ammo.
- -- When you kill another player, you will only advance if you survive the kill. If you die during the kill, you don't advance.
- -- Other weapons, grenades & powerups are blocked. Vehicle gun and collision damage are blocked.
- -- Melee is instant kill, and WILL advance your level.
- -- If you are on level 9, and get killed by another player, betray or suicide, you go down one level.
- -- Beserk Mode: When reaching level 9, you activate 'Beserk Mode' which temporarily speeds up all other players and heals the injured.
- -- Your player speed is based on your weapon: With a strong weapon, you move slower than you will with a weaker weapon.
- -- edit --
- 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
- -- don't edit --
- team_play = false
- map_reset = false
- showtargets = nil
- roaming_targets = true
- weapons = {}
- level = {}
- last_damage = {}
- team_change = {}
- mybattery = {}
- meleekills = {}
- playerscore = {}
- teamscore = {}
- needler_clip = 36
- shotgun_clip = 6
- assault_clip = 32
- dmr_clip = 15
- flame_clip = 200
- pistol_clip = 12
- needlerifle_clip = 18
- sniper_clip = 4
- battery = 0
- timerCount = 0
- to_win = 1000
- cur_players = 0
- -- prefix globals
- default_script_prefix = "\171GunGame\187 "
- phasor_privatesay = privatesay
- phasor_say = say
- function GetRequiredVersion()
- return 200
- end
- function OnScriptLoad(process, game, persistent)
- GAME = game
- GetGameAddresses(game)
- processid = process
- Persistent = persistent
- ScriptLoad()
- LoadTags()
- end
- function OnScriptUnload()
- writedword(ctf_score_patch, 0xFFFDE9E8)
- writebyte(ctf_score_patch1, 0xFF)
- writebyte(slayer_score_patch, 0x74)
- writebyte(slayer_score_patch2, 0x75)
- end
- function OnNewGame(map)
- ScriptLoad()
- team_play = getteamplay()
- gametype = readbyte(gametype_base + 0x30)
- game_started = false
- LoadTags()
- spawnhp = registertimer(90000, "SpawnHP")
- if not new_game_timer then
- new_game_timer = registertimer(0, "NewGameTimer")
- end
- end
- function ApplyPatches()
- writedword(ctf_score_patch, 0x90909090)
- writebyte(ctf_score_patch1, 0x90)
- writebyte(slayer_score_patch, 0xEB)
- writebyte(slayer_score_patch2, 0xEB)
- end
- function ScriptLoad()
- if Persistent then
- -- edit --
- logging = false -- | true enable full script game logging, false to disable - can be spammy to the log, best used for tournaments/scrims/debugging
- -- don't edit --
- game_started = false
- team_play = false
- beserk = false
- weapons = {}
- level = {}
- last_damage = {}
- team_change = {}
- mybattery = {}
- meleekills = {}
- playerscore = {}
- teamscore = {}
- needler_clip = 36
- shotgun_clip = 6
- assault_clip = 32
- dmr_clip = 15
- flame_clip = 200
- pistol_clip = 12
- needlerifle_clip = 18
- sniper_clip = 4
- battery = 0
- timerCount = 0
- to_win = 1000
- cur_players = 0
- roaming_targets = false
- if new_game_timer == nil then
- new_game_timer = registertimer(0, "NewGameTimer")
- end
- end
- GetGameAddresses(game)
- showtargets = nil
- game_started = false
- team_play = false
- team_play = getteamplay()
- gametype = readbyte(gametype_base + 0x30)
- LoadTags()
- for i = 0,15 do
- if getplayer(i) then
- local hash = gethash(i)
- last_damage[hash] = nil
- mybattery[i] = 1
- weapons[i] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- level[i] = 1
- playerscore[i] = 0
- team_change[i] = false
- cur_players = cur_players + 1
- end
- end
- if gametype ~= 5 and cur_players > 2 then
- roaming_targets = true
- showtargets = registertimer(250, "ShowTargets")
- end
- if gametype == 3 or gametype == 5 then
- for i=0,15 do
- if getplayer(i) then
- privatesay(i, "Race and Oddball are not compatible with Gun-Game. ", false)
- end
- end
- log_msg(4, "##GUN-GAME## Race and Oddball are NOT compatible with Gun-Game: try CTF, Slayer & KOTH.") -- log error in scripts log
- log_msg(1, "##GUN-GAME## Race and Oddball are NOT compatible with Gun-Game: try CTF, Slayer & KOTH.") -- log error in game log
- else
- game_started = false
- if new_game_timer == nil then
- new_game_timer = registertimer(0, "NewGameTimer")
- end
- end
- end
- function OnPlayerJoin(player)
- if getplayer(player) then
- local name = getname(player)
- cur_players = cur_players + 1
- mybattery[player] = 1
- weapons[player] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- level[player] = 1
- playerscore[player] = 0
- team_change[player] = false
- welcome = registertimer(9000, "Welcome", player)
- if game_started and team_play and cur_players > 3 then Balance_Teams() end
- if game_started and cur_players > 2 and roaming_targets and not showtargets then
- if gametype ~= 5 then
- showtargets = registertimer(250, "ShowTargets")
- end
- end
- if logging then log_msg(1, name .. " given needler on spawn.") end
- end
- end
- function Welcome(id, count, player)
- if count == 1 then
- if getplayer(player) then
- sendconsoletext(player, "Welcome to Gun-Game Arms Race for Asylum v2!", 8, 0)
- sendconsoletext(player, "Each time you kill with a weapon, you will be given a new weapon.", 8, 0)
- sendconsoletext(player, "The first person to kill with every weapon in the game - wins!", 8, 0)
- sendconsoletext(player, "There are 9 weapons, good luck! type @help for more info.", 8, 0)
- end
- end
- return false
- end
- function SpawnHP(id, count)
- if game_started then
- if count == 1 or count == 5 or count == 15 then
- local hp_1 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, 16.33, -20.81, 8.02)
- local hp_2 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, 14.74, -1.14, 8)
- local hp_3 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, -8.65, 7.9, 7.95)
- local hp_4 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, -12.95, -11.15, 1.16)
- local hp_5 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, -11.58, -21.43, 10.15)
- local hp_6 = createobject(gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097"), 0, 90, true, 15.23, 8.26, 10.15)
- end
- end
- return true
- end
- function OnPlayerLeave(player)
- if getplayer(player) then
- cur_players = cur_players - 1
- if level[player] == 9 then
- beserk = false
- end
- mybattery[player] = {}
- team_change[player] = {}
- weapons[player] = {}
- level[player] = {}
- playerscore[player] = 0
- if game_started and team_play and cur_players > 3 then Balance_Teams() end
- if cur_players < 3 and showtargets then
- showtargets = nil
- end
- end
- end
- function OnPlayerSpawn(player, m_objectId)
- if getplayer(player) then
- local hash = gethash(player)
- last_damage[hash] = nil
- team_change[player] = false
- ChangeFFAColor(player)
- if game_started then
- gameweap = registertimer(0, "AssignGameWeapons", player)
- end
- end
- end
- function ChangeFFAColor(player)
- if getplayer(player) then
- local m_objectId = getplayerobjectid(player)
- if m_objectId then
- local m_object = getobject(m_objectId)
- if m_object then
- local m_player = getplayer(player)
- local color = getrandomnumber(1, 18)
- writeword(m_player + 0x60, color)
- end
- end
- end
- end
- function OnServerCommand(player, command)
- local allow = nil
- local cmd = tokenizecmdstring(command)
- local tokencount = #cmd
- if tokencount > 0 then
- if cmd[1] == "sv_map_reset" then
- map_reset = true
- showtargets = nil
- ScriptLoad()
- privatesay(player, "**RESET** The game has been reset and scripts reloaded. ")
- if logging then log_msg(1, getname(player) .. " used sv_map_reset command.") end
- for i=0,15 do
- if getplayer(i) then
- kill(i)
- privatesay(i, "The game has been reset. ")
- end
- end
- allow = true
- elseif cmd[1] == "sv_script_reload" then
- map_reset = true
- showtargets = nil
- writedword(gametime_base + 0x10, 0)
- ScriptLoad()
- privatesay(player, "**RELOAD** The game has been reset and scripts reloaded. ")
- if logging then log_msg(1, getname(player) .. " used sv_script_reload command.") end
- for i=0,15 do
- if getplayer(i) then
- kill(i)
- privatesay(i, "The game has been reset. ")
- end
- end
- allow = true
- end
- end
- return allow
- end
- function NewGameTimer(id, count)
- if map_reset == true then
- if team_play and cur_players > 3 then Balance_Teams() end
- map_reset = false
- end
- game_started = true
- team_play = getteamplay()
- cur_players = readword(network_base, 0x1A0)
- if team_play then
- teamscore[0] = 0
- teamscore[1] = 0
- for i=0,15 do
- if getplayer(i) then
- cur_players = cur_players + 1
- end
- end
- if not autobalance and game_started and cur_players > 3 then
- autobalance = registertimer(60000, "AutoBalance")
- end
- end
- if Persistent then
- log_msg(1, "Gun-Game has begun on " .. map_name .. " and running as a persistent script.")
- else
- log_msg(1, "Gun-Game has begun on " .. map_name .. " and running as a non-persistent script.")
- end
- for x = 0,15 do
- if getplayer(x) then
- local hash = gethash(x)
- local name = getname(x)
- local m_objectId = getplayerobjectid(x)
- last_damage[hash] = nil
- team_change[x] = false
- mybattery[x] = 0
- weapons[x] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- level[x] = 1
- playerscore[x] = 0
- speedtimer = registertimer(2000, "SpeedTimer", x)
- if m_objectId ~= nil then
- local m_object = getobject(m_objectId)
- if m_object then
- for i = 0,3 do
- local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
- if weapID ~= 0xFFFFFFFF then
- destroyobject(weapID)
- end
- end
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if level[x] == 1 then
- battery = 0
- weapons[x] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- sendconsoletext(x, "Level 1: Needler - Speed: 150%", 5, 0)
- if m_object then
- writebyte(m_object + 0x31E, 2)
- writebyte(m_object + 0x31F, 0)
- end
- end
- local m_weaponId = createobject(gettagid("weap", weapons[x]), 0, 20, false, 0, 0, 0)
- if m_weaponId then
- local m_weapon = getobject(m_weaponId)
- if m_weapon then
- assignweapon(x, m_weaponId)
- if logging then log_msg(1, name .. " given Needler, 2 plasma on new game.") end
- if m_weapon then
- mybattery[x] = 1
- end
- end
- end
- end
- end
- if not updatescores and game_started then
- updatescores = registertimer(500, "Update_Scores")
- end
- if not checkbattery then
- checkbattery = registertimer(1000, "CheckBattery")
- end
- end
- new_game_timer = nil
- return false
- end
- function AssignGameWeapons(id, count, player)
- if map_reset == true then
- map_reset = false
- end
- local clip = 0
- local ammo = 9999
- if game_started then
- if getplayer(player) then
- local m_objectId = getplayerobjectid(player)
- local name = getname(player)
- local lvl = level[player]
- if m_objectId ~= nil then
- if gametype == 1 or gametype == 2 or gametype == 4 or gametype == 5 then
- speedtimer = registertimer(0, "SpeedTimer", player)
- end
- local m_object = getobject(m_objectId)
- if m_object then
- for i = 0,3 do
- local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
- if weapID ~= 0xFFFFFFFF then
- destroyobject(weapID)
- end
- end
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " weapon assignment initiated - weapons & nades removed. Is level: " .. lvl) end
- if level[player] == nil then
- clip = needler_clip
- level[player] = 1
- weapons[player] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- sendconsoletext(player, "Level 1: Needler - Speed: 150%", 4, 0)
- if m_object then
- writebyte(m_object + 0x31E, 2)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Needler, 2 plasma. Is level: " .. lvl) end
- elseif level[player] == 1 then
- clip = needler_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_766" -- Needler
- sendconsoletext(player, "Level 1: Needler - Speed: 150%", 4, 0)
- if m_object then
- writebyte(m_object + 0x31E, 2)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Needler, 2 plasma. Is level: " .. lvl) end
- elseif level[player] == 2 then
- clip = shotgun_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_578" -- Shotgun
- sendconsoletext(player, "Level 2: Shotgun - Speed: 130%", 4, 0)
- health = registertimer(0, "ApplyHP", player)
- if m_object then
- writebyte(m_object + 0x31E, 1)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Shotgun, 1 frag. Is level: " .. lvl) end
- elseif level[player] == 3 then
- clip = assault_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_1086" -- Assault Rifle
- sendconsoletext(player, "Level 3: Assault Rifle - Speed: 120%", 4, 0)
- health = registertimer(0, "ApplyHP", player)
- if m_object then
- writebyte(m_object + 0x31E, 1)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Assault Rifle, 1 frag. Health bonus. Is level: " .. lvl) end
- elseif level[player] == 4 then
- clip = dmr_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_987" -- Designated Marksman Rifle
- sendconsoletext(player, "Level 4: Designated Marksman Rifle - Speed: 95%", 4, 0)
- if m_object then
- writebyte(m_object + 0x31E, 1)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given DMR, 1 frag. Is level: " .. lvl) end
- elseif level[player] == 5 then
- clip = flame_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_1362" -- Flamethrower
- sendconsoletext(player, "Level 5: Flamethrower - Speed: 85%", 4, 0)
- health = registertimer(0, "ApplyHP", player)
- if m_object then
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Flamethrower. Is level: " .. lvl) end
- elseif level[player] == 6 then
- clip = pistol_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_1534" -- Pistol
- sendconsoletext(player, "Level 6: Pistol - Speed: 75%", 4, 0)
- health = registertimer(0, "ApplyHP", player)
- if m_object then
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Pistol. Is level: " .. lvl) end
- elseif level[player] == 7 then
- weapons[player] = "deathstar\\asylum\\weapon\\tag_940" -- Plasma Rifle
- sendconsoletext(player, "Level 7: Plasma Rifle - Speed: 150%", 4, 0)
- if m_object then
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Plasma Rifle. Is level: " .. lvl) end
- elseif level[player] == 8 then
- clip = needlerifle_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_210" -- Needle Rifle
- sendconsoletext(player, "Level 8: Needle Rifle - Speed: 85%", 4, 0)
- health = registertimer(0, "ApplyHP", player)
- if m_object then
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Needle Rifle. Is level: " .. lvl) end
- elseif level[player] == 9 then
- clip = sniper_clip
- weapons[player] = "deathstar\\asylum\\weapon\\tag_407" -- Sniper Rifle
- sendconsoletext(player, "Level 9: Sniper Rifle - Speed: 75%", 4, 0)
- sendconsoletext(player, "Final Level, Either win the game, or get demoted!", 4, 0)
- say(name .. " has reached Final Level! Gang-up on 'em before it's too late!")
- local m_player = getplayer(player)
- local m_playerObjId = readdword(m_player + 0x34)
- local p_object = getobject(m_playerObjId)
- if p_object then
- local camoFlag = readdword(p_object + 0x204)
- if camoFlag == 0x51 then -- if invis then
- applycamo(player, 1) -- remove camo from prev level
- end
- end
- if m_object then
- writebyte(m_object + 0x31E, 0)
- writebyte(m_object + 0x31F, 0)
- end
- if logging then log_msg(1, name .. " given Sniper Rifle, camo removed, and booster function called. Is level: " .. level[player]) end
- --Health Booster call for all but level 9
- for i=0,15 do
- if getplayer(i) then
- local name = getname(i)
- local lvl = level[i]
- local p_objectId = getplayerobjectid(i)
- if p_objectId ~= nil then
- if lvl <= 9 then
- local p_object = getobject(p_objectId)
- local obj_health = readfloat(p_object + 0xE0)
- if obj_health < 1 then
- p_objectId = registertimer(0, "Booster", {i, m_objectId})
- end
- end
- end
- end
- end
- end
- local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 20, false, 0, 0, 0)
- if m_weaponId then
- local m_weapon = getobject(m_weaponId)
- assignweapon(player, m_weaponId)
- if m_weapon then
- if (level[player] == 7) then
- mybattery[player] = 1
- else
- mybattery[player] = 0
- writeword(m_weapon + 0x2B6, ammo)
- writeword(m_weapon + 0x2B8, clip)
- updateammo(m_weaponId)
- end
- end
- end
- end
- end
- end
- return false
- end
- function OnWeaponReload(player, weapon)
- local reload = nil
- if getplayer(player) then
- local m_player = getplayer(player)
- local m_objectId = readdword(m_player + 0x34)
- local m_object = getobject(m_objectId)
- if m_object then
- local m_weaponId = readdword(m_object + 0x118)
- if m_weaponId then
- local m_weapon = getobject(m_weaponId)
- local weapname = gettaginfo(readdword(m_weapon))
- if m_weapon then
- if weapname == "deathstar\\asylum\\weapon\\tag_1362" then
- writeword(getobject(weapon) + 0x2B8, flame_clip)
- updateammo(weapon)
- reload = false
- elseif weapname == "deathstar\\asylum\\weapon\\tag_766" then
- writeword(getobject(weapon) + 0x2B8, needler_clip)
- updateammo(weapon)
- reload = false
- else
- reload = true
- end
- end
- end
- end
- end
- return reload
- end
- function CheckBattery(id, count, player)
- -- checks battery level for plasma weapons and assigns replacement if low battery: plasma pistol, plasma rifle and plasma cannon
- for i = 0,15 do
- if getplayer(i) then
- if mybattery[i] == 1 then
- local name = getname(i)
- local lvl = level[i]
- local m_objectId = getplayerobjectid(i)
- if m_objectId ~= nil then
- local m_object = getobject(m_objectId)
- if m_object then
- local m_weaponId = readdword(m_object + 0x118)
- if m_weaponId then
- local m_weapon = getobject(m_weaponId)
- if m_weapon then
- if readfloat(m_weapon + 0x240) >= 0.84 then
- destroyplayerweaps(i)
- replaceplasmaweap = registertimer(0, "ReplacePlasmaWeap", i)
- if logging then log_msg(1, name .. " has a low battery on battery check. Is level: " .. lvl) end
- end
- end
- end
- end
- end
- end
- end
- end
- return true
- end
- function ReplacePlasmaWeap(id, count, player)
- -- replaces low battery plasma weapons
- if count == 1 then
- if player ~= nil and game_started then
- local name = getname(player)
- local lvl = level[player]
- if mybattery[player] == 1 then
- local m_weaponId = registertimer(0, "AssignGameWeapons", player)
- if logging then log_msg(1, name .. " was given assigment to replace plasma weapon. Is level: " .. lvl) end
- privatesay(player, "Battery recharged.")
- mybattery[player] = 0
- end
- end
- end
- return false
- end
- function Update_Scores(id, count)
- -- continuous score updating, not conditioned to game_started, updates negative values to 0 to prevent sabotage
- if not team_play then
- for i = 0,15 do
- if getplayer(i) then
- if playerscore[i] == nil or playerscore[i] < 0 then playerscore[i] = 0 end
- Write_Player_Score(i, playerscore[i])
- end
- end
- else
- for i = 0,15 do
- if getplayer(i) then
- if playerscore[i] == nil or playerscore[i] < 0 then playerscore[i] = 0 end
- Write_Player_Score(i, playerscore[i])
- end
- end
- if teamscore[0] == nil or teamscore[0] < 0 then teamscore[0] = 0 end
- if teamscore[1] == nil or teamscore[1] < 0 then teamscore[1] = 0 end
- Write_Team_Score(0, teamscore[0])
- Write_Team_Score(1, teamscore[1])
- end
- return true
- end
- function Write_Player_Score(player, score)
- -- writes the players score
- if gametype == 1 then
- if player then
- local m_player = getplayer(player)
- writeword(m_player + 0xC8, score)
- end
- elseif gametype == 2 then
- if player then
- local m_player = getplayer(player)
- writedword(slayer_globals + 0x40 + player*4, score)
- end
- elseif gametype == 5 then
- if player then
- local m_player = getplayer(player)
- writeword(m_player + 0xC6, 0x0, score)
- end
- end
- end
- function Write_Team_Score(team, score)
- -- writes the team score
- if gametype == 1 then
- writedword(ctf_globals + team*4 + 0x10, score)
- elseif gametype == 2 then
- writedword(slayer_globals + team*4, score)
- elseif gametype == 5 then
- if team == 0 then
- writedword(team_race_scores + 0x0, score)
- elseif team == 1 then
- writedword(team_race_scores + 0x4, score)
- end
- end
- end
- function GetGameAddresses(game)
- if game == "PC" or GAME == "PC" then
- map_name = readstring(0x698F21)
- gametype_base = 0x671340
- network_base = 0x745BA8
- gametime_base = 0x671420
- gametype_name = readwidestring(gametype_base)
- team_race_scores = 0x63A028
- race_globals = 0x639FA0
- ctf_globals = 0x639B98
- ctf_score_patch = 0x488602
- ctf_score_patch1 = 0x488606
- slayer_globals = 0x63A0E8
- slayer_score_patch = 0x48F428
- slayer_score_patch2 = 0x48F23E
- else
- map_name = readstring(0x61D151)
- gametype_base = 0x5F5498
- network_base = 0x6C7988
- gametime_base = 0x5F55BC
- gametype_name = readwidestring(gametype_base)
- team_race_scores = 0x5BD028
- race_globals = 0x5BDFC0
- ctf_globals = 0x5BDBB8
- ctf_score_patch = 0x463472
- ctf_score_patch1 = 0x463476
- slayer_globals = 0x5BE108
- slayer_score_patch = 0x469CF8
- slayer_score_patch2 = 0x4691CE
- end
- end
- function getteamplay()
- if readbyte(gametype_base + 0x34) == 1 then
- to_win = 75
- return true
- else
- to_win = 50
- return false
- end
- end
- function privatesay(player, message, script_prefix)
- if GAME == "PC" then
- phasor_privatesay(player, (script_prefix or default_script_prefix) .. " " .. message, false)
- else
- phasor_privatesay(player, message, false)
- end
- end
- function say(message, script_prefix)
- if GAME == "PC" then
- phasor_say((script_prefix or default_script_prefix) .. " " .. message, false)
- else
- phasor_say(message, false)
- end
- end
- function getweaponobjectid(player, slot)
- local m_objectId = getplayerobjectid(player)
- if m_objectId then return readdword(getobject(m_objectId) + 0x2F8 + slot*4) end
- end
- function destroyplayerweaps(player)
- for i=0,3 do
- local weap_id = getweaponobjectid(player, i)
- if weap_id ~= 0xFFFFFFFF then destroyobject(weap_id) end
- end
- end
- function Booster(id, count, arg)
- if count == 1 and game_started then
- local player = arg[1]
- if getplayer(player) then
- local name = getname(player)
- local lvl = level[player]
- local m_playerObjId = getplayerobjectid(player)
- if m_playerObjId ~= nil and lvl <= 9 then
- local m_object = getobject(m_playerObjId)
- local obj_health = readfloat(m_object + 0xE0)
- if obj_health < 1 then
- writefloat(m_object + 0xE0, 1)
- sendconsoletext(player, "Bonus! Health restored!", 5, 0)
- if logging then log_msg(1, name .. " health restored from booster function. Is level: " .. lvl) end
- end
- end
- end
- end
- return false
- end
- function SpeedTimer(id, count, player)
- if player then
- local name = getname(player)
- local lvl = level[player]
- if level[player] == 1 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 1.5) -- Needler
- end
- if logging then log_msg(1, name .. " speed set at 1.5. Is level: " .. lvl) end
- elseif level[player] == 2 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 1.3) -- Shotgun
- end
- if logging then log_msg(1, name .. " speed set at 1.3. Is level: " .. lvl) end
- elseif level[player] == 3 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 1.2) -- Assault Rifle
- end
- if logging then log_msg(1, name .. " speed set at 1.2. Is level: " .. lvl) end
- elseif level[player] == 4 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.95) -- Designated Marksman Rifle
- end
- if logging then log_msg(1, name .. " speed set at 0.95. Is level: " .. lvl) end
- elseif level[player] == 5 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.85) -- Flamethrower
- end
- if logging then log_msg(1, name .. " speed set at 0.85. Is level: " .. lvl) end
- elseif level[player] == 6 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.75) -- Pistol
- end
- if logging then log_msg(1, name .. " speed set at 0.75. Is level: " .. lvl) end
- elseif level[player] == 7 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.75) -- Plasma Rifle
- end
- if logging then log_msg(1, name .. " speed set at 0.75. Is level: " .. lvl) end
- elseif level[player] == 8 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.85) -- Needle Rifle
- end
- if logging then log_msg(1, name .. " speed set at 0.85. Is level: " .. lvl) end
- elseif level[player] == 9 then
- if beserk then
- setspeed(player, 1.5)
- sendconsoletext(player, "BESERK MODE!", 4, 1)
- else
- setspeed(player, 0.75) -- Sniper Rifle
- end
- if logging then log_msg(1, name .. " speed set at 0.75. Is level: " .. lvl) end
- end
- end
- return false
- end
- function OnServerChat(player, type, message)
- local response = nil
- if player then
- name = getname(player)
- if string.lower(message) == "help" or string.lower(message) == "@help" or string.lower(message) == "/help" then
- privatesay(player, "Each time you kill with a weapon, you will be given a new weapon.")
- privatesay(player, "The first person to kill with each weapon in the game - wins!")
- privatesay(player, "There are 9 weapons. Starting with Needler and ending with Sniper Rifle.")
- privatesay(player, "Other weapons & grenades are blocked, vehicle damage and vehicle guns are blocked")
- privatesay(player, "If you are on level 9, and get killed, you go down one level.")
- say(name .. " is reading the @help menu. ")
- response = false
- end
- if string.lower(message) == "balance" then
- if isadmin(player) then
- balance = registertimer(50, "Balance_Teams")
- end
- response = false
- end
- end
- return response
- end
- function OnPlayerKill(killer, victim, mode)
- local response = false
- if game_started then
- mybattery[victim] = 0
- if mode == 0 then -- player was killed by server
- if getplayer(victim) then
- if team_change[victim] then
- response = false
- else
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- privatesay(victim, "You were killed by the server.")
- if logging then log_msg(1, vname .. " was killed by the server. Is level: " .. vlvl) end
- response = false
- end
- response = false
- end
- elseif mode == 1 then -- player was killed by falling or team-change
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- if not team_change[victim] and not map_reset then
- if string.find(last_damage[vhash], "tag_2677") or string.find(last_damage[vhash], "tag_2678") then
- say(vname .. " fell and died.")
- if logging then log_msg(1, vname .. " was killed by fall damage. Is level: " .. vlvl) end
- response = false
- end
- elseif team_change[victim] and map_reset then
- team_change[victim] = false
- if logging then log_msg(1, vname .. " was killed by team change. Is level: " .. vlvl) end
- response = false
- end
- end
- elseif mode == 2 then -- player was killed by the guardians
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- say(vname .. " was killed by the guardians. ", false)
- if logging then log_msg(1, vname .. " was killed by guardians. Is level: " .. vlvl) end
- response = false
- end
- elseif mode == 3 then -- player was killed by vehicle
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- if logging then log_msg(1, vname .. " was killed by a vehicle. Is level: " .. vlvl) end
- response = false
- end
- elseif mode == 4 then -- player was killed by another player
- if getplayer(killer) then
- klvl = level[killer]
- kname = getname(killer)
- khash = gethash(killer)
- else
- kname = "NULL"
- klvl = NULL
- end
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- if vlvl == 9 then
- privatesay(victim, "Demoted one level! Ain't that a bitch?!")
- say(vname .. " demoted to Level 8 for getting killed.")
- weapons[victim] = "deathstar\\asylum\\weapon\\tag_210" -- Needle Rifle
- level[victim] = 8
- playerscore[victim] = 7
- if logging then log_msg(1, vname .. " level 9 demoted to 8 for being killed by another player.") end
- response = false
- end
- if last_damage[vhash] then
- if getplayer(killer) then
- klvl = level[killer]
- kname = getname(killer)
- khash = gethash(killer)
- local k_objectId = getplayerobjectid(killer)
- if k_objectId ~= nil then
- -- Needler
- if weapons[killer] == "deathstar\\asylum\\weapon\\tag_766" then
- 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
- say(kname .. " killed " .. vname .. " with a Needler. ")
- elseif string.find(last_damage[vhash], "tag_239") then
- say(kname .. " melee'd " .. vname .. " with a Needler.")
- end
- level[killer] = 2
- playerscore[killer] = 1
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Shotgun
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_578" then
- if string.find(last_damage[vhash], "tag_619") then
- say(kname .. " killed " .. vname .. " with a Shotgun. ")
- elseif string.find(last_damage[vhash], "tag_239") then
- say(kname .. " melee'd " .. vname .. " with a Shotgun.")
- end
- level[killer] = 3
- playerscore[killer] = 2
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Assault Rifle
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_1086" then
- if string.find(last_damage[vhash], "tag_1114") then
- say(kname .. " killed " .. vname .. " with a Assault Rifle. ")
- elseif string.find(last_damage[vhash], "tag_1008") then
- say(kname .. " melee'd " .. vname .. " with a Assault Rifle.")
- end
- level[killer] = 4
- playerscore[killer] = 3
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Designated Marksman Rifle
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_987" then
- if string.find(last_damage[vhash], "tag_306") then
- say(kname .. " killed " .. vname .. " with a Designated Marksman Rifle. ")
- elseif string.find(last_damage[vhash], "tag_1008") then
- say(kname .. " melee'd " .. vname .. " with a Designated Marksman Rifle.")
- end
- level[killer] = 5
- playerscore[killer] = 4
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Flamethrower
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_1362" then
- if string.find(last_damage[vhash], "tag_1420") or string.find(last_damage[vhash], "tag_1424") then
- say(kname .. " killed " .. vname .. " with an Flamethrower. ")
- elseif string.find(last_damage[vhash], "tag_1394") then
- say(kname .. " melee'd " .. vname .. " with an Flamethrower.")
- end
- level[killer] = 6
- playerscore[killer] = 5
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Pistol
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_1534" then
- if string.find(last_damage[vhash], "tag_1574") then
- say(kname .. " killed " .. vname .. " with a Pistol. ")
- elseif string.find(last_damage[vhash], "tag_1546") then
- say(kname .. " melee'd " .. vname .. " with a Pistol.")
- end
- level[killer] = 7
- playerscore[killer] = 6
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Plasma Rifle
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_940" then
- if string.find(last_damage[vhash], "tag_980") then
- say(kname .. " killed " .. vname .. " with an Plasma Rifle. ")
- elseif string.find(last_damage[vhash], "tag_239") then
- say(kname .. " melee'd " .. vname .. " with a Plasma Rifle.")
- end
- level[killer] = 8
- playerscore[killer] = 7
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Needle Rifle
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_210" then
- if string.find(last_damage[vhash], "tag_897") then
- say(kname .. " killed " .. vname .. " with a Needle Rifle. ")
- elseif string.find(last_damage[vhash], "tag_239") then
- say(kname .. " melee'd " .. vname .. " with a Needle Rifle.")
- end
- beserk = true
- level[killer] = 9
- playerscore[killer] = 8
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- -- Sniper Rifle
- elseif weapons[killer] == "deathstar\\asylum\\weapon\\tag_407" then
- if string.find(last_damage[vhash], "tag_460") then
- say(kname .. " killed " .. vname .. " with a Sniper Rifle, advanced to WIN! +10 Points!")
- elseif string.find(last_damage[vhash], "tag_429") then
- say(kname .. " melee'd " .. vname .. " with a Sniper Rifle, advanced to WIN! +10 Points!")
- end
- level[killer] = 10
- playerscore[killer] = playerscore[killer] + 10
- if team_play then kteam = getteam(killer) teamscore[kteam] = teamscore[kteam] + 10 end
- gameweap = registertimer(0, "AssignGameWeapons", killer)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. " who is level: " .. klvl) end
- response = false
- end
- -- grenades
- 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
- say(kname .. " killed " .. vname .. " with a grenade.")
- sendconsoletext(killer, "No level advancement for grenade kills.", 4, 0)
- if logging then log_msg(1, vname .. " was killed by " .. kname .. "'s grenade who is level: " .. klvl) end
- response = false
- end
- else
- response = false
- end
- end
- end
- end
- elseif mode == 5 then -- player was killed/betrayed by teammate
- if getplayer(killer) then
- klvl = level[killer]
- kname = getname(killer)
- khash = gethash(killer)
- else
- kname = "NULL"
- klvl = NULL
- end
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- if getplayer(killer) then
- klvl = level[killer]
- kname = getname(killer)
- khash = gethash(killer)
- mybattery[killer] = 0
- if klvl == 9 then
- weapons[killer] = "deathstar\\asylum\\weapon\\tag_210" -- Needle Rifle
- privatesay(killer, "Demoted! Betrayal Karma is a bitch!")
- say(kname .. " demoted to Level 8 for betrayal.")
- level[victim] = 8
- playerscore[victim] = 7
- beserk = false
- if logging then log_msg(1, kname .. " demoted from level 9 to 8 for betrayal. Is level: " .. klvl) end
- response = false
- --goto FINISHED
- else
- if level[killer] ~= nil and level[killer] > 1 then
- if (level[killer] - 1) >= 1 then level[killer] = level[killer] - 1 end
- if (playerscore[killer] - 1) >= 0 then playerscore[killer] = playerscore[killer] - 1 end
- if team_play then if (teamscore[kteam] - 1) >= 0 then teamscore[kteam] = teamscore[kteam] - 1 end end
- mybattery[killer] = 0
- kill(killer)
- say(kname .. " was killed and demoted 1 level for betraying " .. vname)
- if logging then log_msg(1, kname .. " was killed by server for betrayal of " .. vname) end
- response = false
- else
- kill(killer)
- say(kname .. " was killed for betraying " .. vname)
- if logging then log_msg(1, kname .. " was killed by server for betrayal of " .. vname) end
- response = false
- end
- --::FINISHED::
- end
- response = false
- end
- response = false
- end
- elseif mode == 6 then --suicides - killer is self/victim
- if getplayer(victim) then
- vlvl = level[victim]
- vname = getname(victim)
- vhash = gethash(victim)
- vteam = getteam(victim)
- if klvl == 9 then
- weapons[victim] = "deathstar\\asylum\\weapon\\tag_210" -- Needle Rifle
- level[victim] = 8
- playerscore[victim] = 7
- beserk = false
- privatesay(victim, "Demoted a level! Ain't that a bitch?!")
- say(kname .. " demoted to Level 8 for suicide.")
- if logging then log_msg(1, kname .. " demoted from level 9 to 8 for suicide. Is level: " .. klvl) end
- response = false
- else -- one level drop here
- if level[victim] ~= nil and level[victim] > 1 then
- if (level[victim] - 1) >= 1 then level[victim] = level[victim] - 1 end
- if (playerscore[victim] - 1) >= 0 then playerscore[victim] = playerscore[victim] - 1 end
- if team_play then if (teamscore[vteam] - 1) >= 0 then teamscore[vteam] = teamscore[vteam] - 1 end end
- say(vname .. " committed suicide.")
- if logging then log_msg(1, vname .. " demoted one level for suicide. Is level: " .. vlvl) end
- response = false
- end
- response = false
- end
- end
- end
- end
- return response
- end
- function OnDamageApplication(receiving, causing, tagid, hit, backtap)
- if receiving then
- local r_object = getobject(receiving)
- local r_player = objectidtoplayer(receiving)
- local c_player = objectidtoplayer(causing)
- if r_object then
- local receiver = objectaddrtoplayer(r_object)
- if receiver then
- local rhash = gethash(receiver)
- local tagname,tagtype = gettaginfo(tagid)
- last_damage[rhash] = tagname
- if logging then log_msg(1, "dmg tag: " .. tagname .. " to player: " .. getname(r_player)) end
- end
- end
- end
- return nil
- end
- function OnDamageLookup(receiving, causing, tagid)
- if receiving and causing and receiving ~= causing then
- local player = objectidtoplayer(causing)
- local tagname, tagtype = gettaginfo(tagid)
- 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")
- 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")
- local c_player = objectidtoplayer(causing)
- local r_player = objectidtoplayer(receiving)
- --log_msg(1, "tag: " .. tagname)
- if c_player and r_player then
- if melee then odl_multiplier(9999) end
- if needler then odl_multiplier(1.25) end
- end
- end
- return nil
- end
- function OnVehicleEntry(player, veh_id, seat, mapid, relevant)
- if getplayer(player) then
- privatesay(player, getname(player) .. " NOTE: You can't kill players with vehicle or vehicle guns.")
- end
- return nil
- end
- function getplayervehicleid(player)
- local m_objectId = getplayerobjectid(player)
- if m_objectId then return readdword(getobject(m_objectId) + 0x11C) end
- end
- function ApplyHP(id, count, player)
- if count == 1 then
- if player and game_started then
- local name = getname(player)
- local lvl = level[player]
- local m_playerObjId = getplayerobjectid(player)
- if m_playerObjId ~= nil then
- local m_object = getobject(m_playerObjId)
- local obj_health = readfloat(m_object + 0xE0)
- if obj_health < 1 then
- writefloat(m_object + 0xE0, 1)
- sendconsoletext(player, "Bonus: Your health has been restored.", 5, 0)
- log_msg(1, name .. " Health Bonus applied. Is Level: " .. lvl)
- end
- end
- end
- end
- return false
- end
- function OnClientUpdate(player)
- if getplayer(player) then
- local lvl = level[player]
- if lvl ~= nil then
- -- monitors and initiates game win announcement
- if lvl == 10 and game_started then
- game_started = false
- announcewin = registertimer(0, "AnnounceWin", player)
- if logging then log_msg(1, "Game win detected - Announcement called.") end
- end
- end
- end
- end
- function AnnounceWin(id, count, player)
- -- announces game winner
- if player and game_started == false then
- local name = getname(player)
- svcmd("sv_map_next")
- if not team_play then
- say(name .. " WINS THE GAME! ")
- else
- local team = getteam(player)
- if team == 0 then team = "RED TEAM" elseif team == 1 then team = "BLUE TEAM" end
- say(team .. " WINS THE GAME! ")
- end
- log_msg(1, name .. " has won the Gun-Game on " .. map_name .. "!")
- end
- return false
- end
- function OnTeamChange(player, old_team, new_team, relevant)
- -- prevent unbalancing teams by team change
- local response = nil
- if getplayer(player) then
- local newteam = "New Team"
- local oldteam = "Old Team"
- if not team_play then response = false return response end
- if new_team == 0 then
- oldteam = "Blue Team"
- newteam = "Red Team"
- elseif new_team == 1 then
- oldteam = "Red Team"
- newteam = "Blue Team"
- elseif new_team ~= 0 and new_team ~= 1 then
- oldteam = "Old Team"
- newteam = "New Team"
- end
- if relevant == true or relevant == 1 then
- if getteamsize(old_team) == getteamsize(new_team) then
- privatesay(player, "You cannot change teams.")
- response = false
- elseif getteamsize(old_team) + 1 == getteamsize(new_team) then
- privatesay(player, "You cannot change teams.")
- response = false
- elseif getteamsize(old_team) == getteamsize(new_team) + 1 then
- privatesay(player, "You cannot change teams.")
- response = false
- elseif getteamsize(old_team) > getteamsize(new_team) then
- team_change[player] = true
- -- transfer player score to new team score, and deduct new player score from old team score
- if team_play then
- teamscore[new_team] = teamscore[new_team] + playerscore[player]
- teamscore[old_team] = teamscore[old_team] - playerscore[player]
- end
- mybattery[player] = 0
- say(getname(player) .. " switched to the " .. newteam)
- response = true
- elseif getteamsize(old_team) < getteamsize(new_team) then
- team_change[player] = true
- -- transfer player score to new team score, and deduct new player score from old team score
- if team_play then
- teamscore[new_team] = teamscore[new_team] + playerscore[player]
- teamscore[old_team] = teamscore[old_team] - playerscore[player]
- end
- mybattery[player] = 0
- say(getname(player) .. " switched to the " .. newteam)
- response = true
- end
- elseif relevant == false or relevant == 0 then
- team_change[player] = true
- -- transfer player score to new team score, and deduct new player score from old team score
- if team_play then
- teamscore[new_team] = teamscore[new_team] + playerscore[player]
- teamscore[old_team] = teamscore[old_team] - playerscore[player]
- end
- mybattery[player] = 0
- say(getname(player) .. " was team-switched by autobalance to the " .. newteam .. ".")
- response = true
- end
- end
- return response
- end
- function OnObjectInteraction(player, objId, mapId)
- local Pass = nil
- local name, type = gettaginfo(mapId)
- if type == "weap" then
- if gametype == 1 or gametype == 3 then
- if name == "deathstar\\asylum\\weapon\\tag_2103" or name == "deathstar\\asylum\\weapon\\tag_2601" then
- Pass = true
- elseif weapons[player] ~= nil then
- if name ~= weapons[player] then
- Pass = false
- end
- end
- else
- if weapons[player] ~= nil then
- if name ~= weapons[player] then
- Pass = false
- end
- end
- end
- elseif type == "eqip" then
- if name == "deathstar\\asylum\\equipment\\tag_1142" or name == "deathstar\\asylum\\equipment\\tag_1176" then
- Pass = false
- end
- end
- return Pass
- end
- function OnObjectCreationAttempt(mapId, parentId, player)
- local response = nil
- local name, type = gettaginfo(mapId)
- if game_started then
- -- block
- if mapId == gettagid("weap", "deathstar\\asylum\\weapon\\tag_2601") or -- oddball
- mapId == gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1142") or -- frags
- mapId == gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1176") then -- plasma
- response = false
- end
- -- replace
- if mapId == gettagid("weap", "deathstar\\asylum\\weapon\\tag_2103") then -- flag
- return gettagid("weap", "deathstar\\asylum\\weapon\\tag_848") -- ppistol
- end
- elseif not game_started then
- -- allow
- if mapId == gettagid("bipd", "deathstar\\asylum\\biped\\tag_2126") or -- mpbiped
- mapId == gettagid("bipd", "deathstar\\asylum\\biped\\tag_2648") then -- cpbiped
- response = true
- end
- -- block
- if mapId == gettagid("weap", "deathstar\\asylum\\weapon\\tag_2601") or -- oddball
- mapId == gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1142") or -- frags
- mapId == gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1176") then -- plasma
- response = false
- end
- -- replace
- if mapId == gettagid("weap", "deathstar\\asylum\\weapon\\tag_2103") then -- flag
- return gettagid("weap", "deathstar\\asylum\\weapon\\tag_848") -- ppistol
- end
- else
- response = false
- end
- return response
- end
- function LoadTags()
- --weapons
- Shotgun = gettagid("weap", "deathstar\\asylum\\weapon\\tag_578") --#
- Needler = gettagid("weap", "deathstar\\asylum\\weapon\\tag_766") --#
- Arifle = gettagid("weap", "deathstar\\asylum\\weapon\\tag_1086") --#
- NeedRifle = gettagid("weap", "deathstar\\asylum\\weapon\\tag_210") --#
- DMR = gettagid("weap", "deathstar\\asylum\\weapon\\tag_987") --#
- Flamer = gettagid("weap", "deathstar\\asylum\\weapon\\tag_1362") --#
- Pistol = gettagid("weap", "deathstar\\asylum\\weapon\\tag_1534") --#
- PRifle = gettagid("weap", "deathstar\\asylum\\weapon\\tag_940") --#
- Sniper = gettagid("weap", "deathstar\\asylum\\weapon\\tag_407") --#
- Flag = gettagid("weap", "deathstar\\asylum\\weapon\\tag_2103") --#
- Oddball = gettagid("weap", "deathstar\\asylum\\weapon\\tag_2601") --#
- Frag = gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1142") --#
- Plasma = gettagid("eqip", "deathstar\\asylum\\equipment\\tag_1176") --#
- --damage weaps
- Shotgun_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_619") --#
- Needler_d1 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_305") --#
- Needler_d2 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_281") --#
- Needler_d3 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_272") --#
- Needler_d4 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_789") --#
- Arifle_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1114") --#
- NeedRifle_d1 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_306") --#
- NeedRifle_d2 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_305") --#
- DMR_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_306") --#
- Flamer_d1 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1424") --#
- Flamer_d2 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1420") --#
- Pistol_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1574") --#
- PRifle_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_980") --#
- Sniper_d = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_460") --#
- Frag_d1 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1154") --#
- Frag_d2 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1156") --#
- Plasma_d1 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1272") --#
- Plasma_d2 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1199") --#
- Plasma_d3 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1207") --#
- Plasma_d4 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1208") --#
- Plasma_d5 = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1271") --#
- --damage melee
- Shotgun_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_239") --#
- Needler_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_239") --#
- Arifle_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1008") --#
- NeedleRifle_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_239") --#
- DMR_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1008") --#
- Flamer_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1394") --#
- Pistol_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1546") --#
- Prifle_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_239") --#
- Sniper_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_429") --#
- Flag_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1977") --#
- Oddball_m = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_1956") --#
- -- fall/dist
- Fall = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_2677") --#
- Dist = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_2678") --#
- Veh_dmg = gettagid("jpt!", "deathstar\\asylum\\damage effect\\tag_2681") --#
- -- others
- biped1 = gettagid("bipd", "deathstar\\asylum\\biped\\tag_2126") --#
- biped2 = gettagid("bipd", "deathstar\\asylum\\biped\\tag_2648") --#
- Healthp = gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2097") --#
- Acamo = gettagid("eqip", "deathstar\\asylum\\equipment\\tag_2073") --#
- end
- function AutoBalance(id, count)
- if game_started and team_play and cur_players > 3 and TeamsAreUneven then
- Balance_Teams()
- return true
- elseif game_started and team_play and cur_players < 4 then
- return false
- else
- return false
- end
- end
- -- inspired by 002's team balance for Sapp
- function Balance_Teams()
- if game_started and team_play then
- local redteam = getteamsize(0)
- local blueteam = getteamsize(1)
- if redteam > blueteam then
- while TeamsAreUneven() do
- while (getteamsize(0) > getteamsize(1)+1) do
- local randomred = SelectPlayer(0)
- if randomred ~= nil then
- changeteam(randomred, true)
- end
- end
- end
- elseif blueteam > redteam then
- while TeamsAreUneven() do
- while (getteamsize(1) > getteamsize(0)+1) do
- local randomblu = SelectPlayer(1)
- if randomblu ~= nil then
- changeteam(randomblu, true)
- end
- end
- end
- end
- end
- end
- -- inspired by 002's team balance for Sapp
- function TeamsAreUneven()
- local red = getteamsize(0)
- local blue = getteamsize(1)
- if (red > blue + 1 or blue > red + 1) then return true end
- return false
- end
- function SelectPlayer(team)
- local t = {}
- for i=0,15 do
- if getplayer(i) and getteam(i) == team then
- table.insert(t, i)
- end
- end
- if #t > 0 then
- local r = getrandomnumber(1, #t+1)
- return t[r]
- end
- return nil
- end
- function ShowTargets(id, count)
- -- timer to repeatedly call roaming targets function while game is started and players > 0
- Roaming_Targets()
- return true
- end
- function Roaming_Targets(id, count)
- if game_started and cur_players > 2 and gametype ~= 5 then
- if team_play then
- local target = SelectRoamingPlayer(player)
- if target then
- local team = getteam(target)
- for i = 0,15 do
- if getplayer(i) and getplayer(i) ~= getplayer(target) and getteam(i) ~= team then
- writeword(getplayer(i) + 0x88, target)
- end
- end
- return true
- else
- return false
- end
- else
- local target = SelectRoamingPlayer(player)
- if target then
- for i = 0,15 do
- if getplayer(i) and getplayer(i) ~= getplayer(target) then
- writeword(getplayer(i) + 0x88, target)
- end
- end
- return true
- else
- return false
- end
- end
- end
- end
- function SelectRoamingPlayer(player)
- local t = {}
- for i=0,15 do
- if getplayer(i) then
- table.insert(t, i)
- end
- end
- if #t > 0 then
- if (timerCount > #t) then
- timerCount = 0
- else
- timerCount = timerCount + 1
- end
- return t[timerCount]
- end
- end
- function OnGameEnd(stage)
- if stage == 1 then
- game_started = false
- beserk = false
- if gameweap then
- gameweap = nil
- end
- if announcewin then
- announcewin = nil
- end
- if m_weaponId then
- m_weaponId = nil
- end
- if replaceplasmaweap then
- replaceplasmaweap = nil
- end
- if p_objectId then
- p_objectId = nil
- end
- if health then
- health = nil
- end
- if welcome then
- welcome = nil
- end
- if speedtimer then
- speedtimer = nil
- end
- if checkbattery then
- checkbattery = nil
- end
- if updatescores then
- updatescores = nil
- end
- if autobalance then
- autobalance = nil
- end
- if consoletimer then
- consoletimer = nil
- end
- if spawnhp then
- spawnhp = nil
- end
- elseif stage == 3 then
- for i = 0, 15 do
- if getplayer(i) then
- privatesay(i, "Thank you for playing the Gun-Game Arms Race for Asylum v2!")
- privatesay(i, "by H\174 Shaft")
- end
- end
- end
- end
- -- Start sendconsoletext overloaded by Nugget
- console = {}
- console.__index = console
- consoletimer = registertimer(100, "ConsoleTimer")
- phasor_sendconsoletext = sendconsoletext
- function sendconsoletext(player, message, time, order, align, height, func)
- if player then
- console[player] = console[player] or {}
- local temp = {}
- temp.player = player
- temp.id = nextid(player, order)
- temp.message = message or ""
- temp.time = time or 0.7
- temp.remain = temp.time
- temp.align = align or "left"
- temp.height = height or 0
- if type(func) == "function" then
- temp.func = func
- elseif type(func) == "string" then
- temp.func = _G[func]
- end
- console[player][temp.id] = temp
- setmetatable(console[player][temp.id], console)
- return console[player][temp.id]
- end
- end
- function nextid(player, order)
- if not order then
- local x = 0
- for k,v in pairs(console[player]) do
- if k > x + 1 then
- return x + 1
- end
- x = x + 1
- end
- return x + 1
- else
- local original = order
- while console[player][order] do
- order = order + 0.001
- if order == original + 0.999 then break end
- end
- return order
- end
- end
- function getmessage(player, order)
- if console[player] then
- if order then
- return console[player][order]
- end
- end
- end
- function getmessages(player)
- return console[player]
- end
- function getmessageblock(player, order)
- local temp = {}
- for k,v in opairs(console[player]) do
- if k >= order and k < order + 1 then
- table.insert(temp, console[player][k])
- end
- end
- return temp
- end
- function console:getmessage()
- return self.message
- end
- function console:append(message, reset)
- if console[self.player] then
- if console[self.player][self.id] then
- if getplayer(self.player) then
- if reset then
- if reset == true then
- console[self.player][self.id].remain = console[self.player][self.id].time
- elseif tonumber(reset) then
- console[self.player][self.id].time = tonumber(reset)
- console[self.player][self.id].remain = tonumber(reset)
- end
- end
- console[self.player][self.id].message = message or ""
- return true
- end
- end
- end
- end
- function console:shift(order)
- local temp = console[self.player][self.id]
- console[self.player][self.id] = console[self.player][order]
- console[self.player][order] = temp
- end
- function console:pause(time)
- console[self.player][self.id].pausetime = time or 5
- end
- function console:delete()
- console[self.player][self.id] = nil
- end
- function ConsoleTimer(id, count)
- for i,_ in opairs(console) do
- if tonumber(i) then
- if getplayer(i) then
- for k,v in opairs(console[i]) do
- if console[i][k].pausetime then
- console[i][k].pausetime = console[i][k].pausetime - 0.1
- if console[i][k].pausetime <= 0 then
- console[i][k].pausetime = nil
- end
- else
- if console[i][k].func then
- if not console[i][k].func(i) then
- console[i][k] = nil
- end
- end
- if console[i][k] then
- console[i][k].remain = console[i][k].remain - 0.1
- if console[i][k].remain <= 0 then
- console[i][k] = nil
- end
- end
- end
- end
- if table.len(console[i]) > 0 then
- local paused = 0
- for k,v in pairs(console[i]) do
- if console[i][k].pausetime then
- paused = paused + 1
- end
- end
- if paused < table.len(console[i]) then
- local str = ""
- for i = 0,30 do
- str = str .. " \n"
- end
- phasor_sendconsoletext(i, str)
- for k,v in opairs(console[i]) do
- if not console[i][k].pausetime then
- if console[i][k].align == "right" or console[i][k].align == "center" then
- phasor_sendconsoletext(i, consolecenter(string.sub(console[i][k].message, 1, 78)))
- else
- phasor_sendconsoletext(i, string.sub(console[i][k].message, 1, 78))
- end
- end
- end
- end
- end
- else
- console[i] = nil
- end
- end
- end
- return true
- end
- function consolecenter(text)
- if text then
- local len = string.len(text)
- for i = len + 1, 78 do
- text = " " .. text
- end
- return text
- end
- end
- function opairs(t)
- local keys = {}
- for k,v in pairs(t) do
- table.insert(keys, k)
- end
- table.sort(keys,
- function(a,b)
- if type(a) == "number" and type(b) == "number" then
- return a < b
- end
- an = string.lower(tostring(a))
- bn = string.lower(tostring(b))
- if an ~= bn then
- return an < bn
- else
- return tostring(a) < tostring(b)
- end
- end)
- local count = 1
- return function()
- if table.unpack(keys) then
- local key = keys[count]
- local value = t[key]
- count = count + 1
- return key,value
- end
- end
- end
- function table.len(t)
- local count = 0
- for k,v in pairs(t) do
- count = count + 1
- end
- return count
- end
- -- Stop sendconsoletext overloaded
- -- Created by H® Shaft.
- -- Thanks to Oxide, AelitePrime, Nugget & Wizard.
- -- Visit http://halorace.org/forum/index.php?topic=514.0 or
- -- Visit http://pastebin.com/u/HR_Shaft for more phasor scripts
- -- 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.
- -- 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