Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ ### Random Weapons Infinite Ammo v1 for The_Cage_un ###]]--
- --[[ ### by H® Shaft for Phasor v2 ###]]--
- -- gametype MUST have weapons set to generic
- -- Script designed specifically and only for the Halo CE map The Cage un: Link: http://www.mediafire.com/download/nx8a3mr370ncz4z/the_cage_un.zip
- team_play = false
- game_started = false
- weapons = {}
- mybattery = {}
- needler_clip = 40
- shotgun_clip = 6
- assault_clip = 32
- dmr_clip = 15
- frgrocket_clip = 5
- pistol_clip = 10
- needlerifle_clip = 18
- glaunch_clip = 5
- sniper_clip = 4
- function GetRequiredVersion()
- return 200
- end
- function OnScriptLoad(process, game, persistent)
- if game == true or game == "PC" then
- GAME = "PC"
- gametype_base = 0x671340
- map_name = readstring(0x698F21)
- else
- GAME = "CE"
- gametype_base = 0x5F5498
- map_name = readstring(0x61D151)
- end
- for i=0,15 do
- if getplayer(i) then
- mybattery[i] = 0
- weapons[i] = {}
- end
- end
- gametype = readbyte(gametype_base + 0x30)
- team_play = getteamplay()
- end
- function OnNewGame(map)
- if GAME == "PC" then
- gametype_base = 0x671340
- map_name = readstring(0x698F21)
- elseif GAME == "CE" then
- gametype_base = 0x5F5498
- map_name = readstring(0x61D151)
- end
- for i=0,15 do
- if getplayer(i) then
- mybattery[i] = 0
- weapons[i] = {}
- end
- end
- game_started = true
- gametype = readbyte(gametype_base + 0x30)
- team_play = getteamplay()
- spawnhp = registertimer(90000, "SpawnHP")
- end
- function getteamplay()
- if readbyte(gametype_base + 0x34) == 1 then
- return true
- else
- return false
- end
- end
- function OnPlayerJoin(player)
- if getplayer(player) then
- mybattery[player] = 0
- weapons[player] = nil
- welcome = registertimer(9000, "Welcome", player)
- end
- 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\\the_cage\\equipment\\tag_2145"), 0, 90, true, 0.307, 18.0, 16.97)
- local hp_2 = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2145"), 0, 90, true, -13.70, 19.72, 16.87)
- local hp_3 = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2145"), 0, 90, true, -4.54, 12.70, 17.69)
- local hp_4 = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2145"), 0, 90, true, 6.07, 0.365, 16.22)
- local hp_5 = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2145"), 0, 90, true, 8.89, 5.71, 18.70)
- local hp_6 = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2145"), 0, 90, true, 2.79, 7.26, 21.18)
- end
- end
- return true
- end
- function ApplyHP(id, count, player)
- if count == 1 then
- if player and game_started then
- local name = getname(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)
- end
- end
- end
- end
- return false
- end
- function Welcome(id, count, player)
- if count == 1 then
- if getplayer(player) then
- sendconsoletext(player, "Welcome to Random Weapons for The Cage!", 10, 0)
- sendconsoletext(player, "Each time you spawn, you will be given a random weapon.", 10, 0)
- end
- end
- return false
- end
- function OnPlayerKill(killer, victim, mode)
- local response = nil
- if getplayer(victim) then
- weapons[victim] = nil
- mybattery[victim] = 0
- if mode == 0 then
- response = false
- else
- response = true
- end
- end
- return response
- end
- function OnPlayerLeave(player)
- if getplayer(player) then
- weapons[player] = nil
- mybattery[player] = nil
- end
- end
- function OnTeamChange(player, old_team, new_team, relevant)
- if getplayer(player) then
- weapons[player] = nil
- mybattery[player] = 1
- end
- return nil
- end
- function OnPlayerSpawnEnd(player, m_objectId)
- if getplayer(player) then
- weapons[player] = nil
- mybattery[player] = 0
- ChangeFFAColor(player)
- local m_objectId = getplayerobjectid(player)
- if m_objectId 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 AssignGameWeapons(id, count, player)
- if getplayer(player) and game_started then
- local m_objectId = getplayerobjectid(player)
- local m_object = getobject(m_objectId)
- local clip = 0
- local ammo = 9999
- local battery = 0
- if m_objectId then
- for i = 0,3 do
- local weapID = readdword(getobject(m_objectId), 0x2F8 + i*4)
- if weapID ~= 0xFFFFFFFF then
- destroyobject(weapID)
- end
- end
- local randomweap = getrandomnumber(1, 9)
- local randomclip = getrandomnumber(1, 20)
- if randomweap == 1 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = shotgun_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_671" -- Shotgun
- sendconsoletext(player, "Shotgun", 5, 0)
- elseif randomweap == 2 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = needler_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_1031" -- Needler
- sendconsoletext(player, "Needler", 5, 0)
- elseif randomweap == 3 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = assault_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_1154" -- Assault Rifle
- sendconsoletext(player, "Assault Rifle", 5, 0)
- elseif randomweap == 4 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = needlerifle_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_958" -- Needle Rifle
- sendconsoletext(player, "Needle Rifle", 5, 0)
- elseif randomweap == 5 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = dmr_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_854" -- Designated Marksman Rifle
- sendconsoletext(player, "Designated Marksman Rifle", 5, 0)
- elseif randomweap == 6 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = frgrocket_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_313" -- Fuelrod Rocket
- sendconsoletext(player, "Fuelrod Rocket", 5, 0)
- elseif randomweap == 7 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = pistol_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_1211" -- Magnum Pistol
- sendconsoletext(player, "Magnum Pistol", 5, 0)
- elseif randomweap == 8 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = glaunch_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_1058" -- Grenade Launcher
- sendconsoletext(player, "Grenade Launcher", 5, 0)
- elseif randomweap == 9 then
- if randomclip > 19 then
- clip = 9999
- sendconsoletext(player, "Bottomless Clip: No Reload!", 5, 0)
- else
- clip = sniper_clip
- end
- weapons[player] = "deathstar\\the_cage\\weapon\\tag_456" -- Sniper Rifle
- sendconsoletext(player, "Sniper Rifle", 5, 0)
- end
- local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 10, false, 0, 0, 0)
- assignweapon(player, m_weaponId)
- local m_weapon = getobject(m_weaponId)
- --[[
- if randomweap == 6 or randomweap == 7 then
- if m_weapon then
- writefloat(m_weapon + 0x240, battery)
- updateammo(m_weaponId)
- infbattery = registertimer(1000, "InfBattery", {m_weapon, player})
- mybattery[player] = 1
- end
- else ]]--
- if m_weapon then
- writeword(m_weapon + 0x2B6, ammo)
- writeword(m_weapon + 0x2B8, clip)
- updateammo(m_weaponId)
- end
- local random_nade = getrandomnumber(1, 7)
- if m_object then
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 0)
- if random_nade == 1 then
- writebyte(m_object, 0x31E, 2)
- writebyte(m_object, 0x31F, 2)
- sendconsoletext(player, "Grenades: 2 of each.", 5, 0)
- elseif random_nade == 2 then
- writebyte(m_object, 0x31E, 1)
- writebyte(m_object, 0x31F, 1)
- sendconsoletext(player, "Grenades: 1 of each.", 5, 0)
- elseif random_nade == 3 then
- writebyte(m_object, 0x31E, 1)
- writebyte(m_object, 0x31F, 0)
- sendconsoletext(player, "Grenades: 1 frag.", 5, 0)
- elseif random_nade == 4 then
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 1)
- sendconsoletext(player, "Grenades: 1 Plasma.", 5, 0)
- elseif random_nade == 5 then
- writebyte(m_object, 0x31E, 2)
- writebyte(m_object, 0x31F, 0)
- sendconsoletext(player, "Grenades: 2 Frags.", 5, 0)
- elseif random_nade == 6 then
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 2)
- sendconsoletext(player, "Grenades: 2 Plasma.", 5, 0)
- elseif random_nade == 7 then
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 0)
- else
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 0)
- end
- end
- local random_camo = getrandomnumber(1, 30)
- local id = resolveplayer(player)
- if random_camo > 29 then
- svcmd("sv_invis " .. id)
- sendconsoletext(player, "You are Invisible!", 5, 0)
- end
- local random_os = getrandomnumber(1, 30)
- if random_os > 29 then
- if readfloat(m_object + 0xE4) <= 1 then
- local x,y,z = getobjectcoords(m_objectId)
- local os = createobject(gettagid("eqip", "deathstar\\the_cage\\equipment\\tag_2139"), 0, 0, false, x, y, z+0.5)
- if os ~= nil then writefloat(getobject(os) + 0x70, -2) end
- else
- writefloat(m_object + 0xE4, 3)
- end
- sendconsoletext(player, "You have an Overshield!", 5, 0)
- end
- if gametype ~= 5 then
- local random_speed = getrandomnumber(1, 30)
- if random_speed >= 29 then
- setspeed(player, 1.5)
- sendconsoletext(player, "150% Speed!", 5, 0)
- elseif random_speed >= 1 and random_speed < 3 then
- setspeed(player, 1.25)
- sendconsoletext(player, "125% Speed!", 5, 0)
- end
- end
- health = registertimer(0, "ApplyHP", player)
- 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\\the_cage\\weapon\\tag_1058" then
- writeword(getobject(weapon) + 0x2B8, glaunch_clip)
- updateammo(weapon)
- reload = false
- elseif weapname == "deathstar\\the_cage\\weapon\\tag_1031" then
- writeword(getobject(weapon) + 0x2B8, needler_clip)
- updateammo(weapon)
- reload = false
- else
- reload = true
- end
- end
- end
- end
- end
- return reload
- end
- function InfBattery(id, count, arg)
- local m_weapon = arg[1]
- local player = arg[2]
- if m_weapon and game_started then
- if readfloat(m_weapon + 0x240) == 1 and mybattery[player] == 1 then
- destroyplayerweaps(player)
- replaceplasmaweap = registertimer(0, "ReplacePlasmaWeap", {player, m_weapon})
- mybattery[player] = 0
- end
- end
- return true
- end
- function ReplacePlasmaWeap(id, count, arg)
- local player = arg[1]
- local m_weapon = arg[2]
- if count == 1 then
- if player and game_started then
- local m_weaponId = createobject(gettagid("weap", weapons[player]), 0, 10, false, 0, 0, 0)
- assignweapon(player, m_weaponId)
- privatesay(player, "Battery recharged.")
- end
- mybattery[player] = 0
- end
- return false
- 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 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_874") or string.find(tagname, "tag_1222") or string.find(tagname, "tag_691") or string.find(tagname, "tag_348") or string.find(tagname, "tag_478") or string.find(tagname, "tag_874")
- local needler = string.find(tagname, "tag_1052") or string.find(tagname, "tag_1002")
- local glaunch = string.find(tagname, "tag_1127") or string.find(tagname, "tag_1126")
- 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
- if glaunch then odl_multiplier(1.25) end
- end
- end
- return nil
- 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\\the_cage\\weapon\\tag_2687" or name == "deathstar\\the_cage\\weapon\\tag_2151" 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\\the_cage\\equipment\\tag_1265" or name == "deathstar\\the_cage\\equipment\\tag_1321" then
- Pass = false
- end
- end
- return Pass
- end
- function OnGameEnd(stage)
- if stage == 1 then
- game_started = false
- if gameweap then
- gameweap = nil
- end
- if infbattery then
- infbattery = nil
- end
- if replaceplasmaweap then
- replaceplasmaweap = 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 Random Weapons for The Cage!")
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement