Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ ### Take Weapons v1 ###]]--
- --[[ ### by H® Shaft for Phasor v2 ###]]--
- -- allows admins to remove or restore a players weapons by chat or rcon, and view player list with rcon id's.
- -- logs command usage in the RconLog.log
- -- all weapons are blocked for that player (except oddball and flag) until the next game, even if they quit and rejoin
- -- primarily intended for Halo PC, can be adapted to CE if there is a need for it.
- -- commands:
- -- Show list of commands: type: /commands or @commands
- -- Show player names and ID's: type: /players --| or use rcon sv_players
- -- Take Weapons: type: /takeweaps [player id] --| or use rcon sv_takeweapons
- -- Restore Weapons: type: /giveweaps [player id] --| or use rcon sv_giveweapons
- -- Edit this section: When weapons are restored, what weapons are they? if only one weapon, put "nil" on weapon 2 (without quotes)
- weapon1 = "weapons\\pistol\\pistol"
- weapon2 = "weapons\\assault rifle\\assault rifle"
- frags = 2
- plasmas = 0
- -- weapon tag names for convenience of the above section --
- -- "weapons\\assault rifle\\assault rifle"
- -- "weapons\\flamethrower\\flamethrower"
- -- "weapons\\needler\\mp_needler"
- -- "weapons\\pistol\\pistol"
- -- "weapons\\plasma pistol\\plasma pistol"
- -- "weapons\\plasma rifle\\plasma rifle"
- -- "weapons\\plasma_cannon\\plasma_cannon"
- -- "weapons\\rocket launcher\\rocket launcher"
- -- "weapons\\shotgun\\shotgun"
- -- "weapons\\sniper rifle\\sniper rifle"
- -- don't edit --
- noweapons = {}
- function GetRequiredVersion()
- return 200
- end
- function OnScriptLoad(process, game, persistent)
- for i=0,15 do
- if getplayer(i) then
- local ip = getip(i)
- noweapons[ip] = nil
- end
- end
- end
- function OnNewGame(map)
- for i=0,15 do
- if getplayer(i) then
- local ip = getip(i)
- noweapons[ip] = nil
- end
- end
- end
- function OnPlayerJoin(player)
- if getplayer(player) then
- if isadmin(player) then
- privatesay(player, "To see a list of commands: type: /commands or @commands ")
- end
- end
- end
- function HoldingFlagOrOddball(player)
- local response = false
- local m_player = getplayer(player)
- local m_objectId = readdword(m_player + 0x34)
- local m_object = getobject(m_objectId)
- if m_player and not isinvehicle(player) then
- for i = 0,3 do
- local m_weaponId = readdword(m_object, 0x2F8 + (i * 4))
- local m_weapon = getobject(m_weaponId)
- if m_weapon then
- local mapId = readdword(m_weapon)
- local tagname = gettaginfo(mapId)
- if string.find(tagname, "ball") or string.find(tagname, "flag") then
- response = true
- break
- end
- end
- end
- end
- return response
- end
- function OnPlayerSpawn(player, m_objectId)
- if getplayer(player) then
- local m_objectId = getplayerobjectid(player)
- local ip = getip(player)
- if noweapons[ip] then
- takeweapons = registertimer(0, "TakeWeapons", player)
- end
- end
- end
- function OnServerChat(player, type, message)
- local response = nil
- local t = tokenizestring(message, " ")
- local count = #t
- if t[1] == nil then
- return true
- end
- if t[1] == "/players" then
- response = false
- if isadmin(player) then
- sendresponse("[ID# - Name]", player)
- for i = 0,15 do
- if getplayer(i) then
- local name = getname(i)
- local id = resolveplayer(i)
- sendresponse(id .. " - " .. name, player)
- log_msg(3, getname(player) .. " used the players list command.")
- end
- end
- else
- sendresponse("You're not an admin. Logging attempt.", player)
- log_msg(3, getname(player) .. " attempted use of the players list command.")
- end
- elseif t[1] == "/takeweaps" then
- response = false
- if isadmin(player) then
- if t[2] and rresolveplayer(t[2]) then
- local id = rresolveplayer(t[2])
- local ip = getip(id)
- local player2 = tonumber(t[2])
- if getplayer(player2) then
- if isinvehicle(player2) or HoldingFlagOrOddball(player2) then
- noweapons[ip] = {} -- because take weapons timer is not called
- kill(player2)
- goto FINISHED -- skip remaining functions
- end
- end
- noweapons[ip] = {} -- insert into noweapons table
- takeweapons = registertimer(0, "TakeWeapons", id)
- sendresponse("The players weapons have been removed.", player)
- log_msg(3, getname(player) .. " used the take weapons command.")
- else
- sendresponse("The specified player is invalid: /takeweaps [player #]", player)
- end
- ::FINISHED::
- else
- response = true
- log_msg(3, getname(player) .. " attempted use of the take weapons command.")
- end
- elseif t[1] == "/giveweaps" then
- response = false
- if isadmin(player) then
- if t[2] and rresolveplayer(t[2]) then
- local id = rresolveplayer(t[2])
- local ip = getip(id)
- noweapons[ip] = nil -- remove from noweapons table
- giveweapons = registertimer(0, "GiveWeapons", id)
- sendresponse("The players weapons have been restored.", player)
- log_msg(3, getname(player) .. " used the give weapons command.")
- else
- sendresponse("The specified player is invalid: /giveweaps [player #]", player)
- end
- else
- response = true
- log_msg(3, getname(player) .. " attempted use of the give weapons command.")
- end
- end
- if string.lower(message) == "/commands" or string.lower(message) == "@commands" then
- if isadmin(player) then
- response = false
- privatesay(player, "Show player names and ID's: type: /players")
- privatesay(player, "Take Weapons: type: /takeweaps [player id]")
- privatesay(player, "Restore Weapons: type /giveweaps [player id]")
- privatesay(player, "See this list again: type: /commands")
- else
- response = true
- end
- end
- return response
- end
- function AssignGameWeapons(id, count, player)
- if getplayer(player) then
- if getplayerobjectid(player) then
- if weapon1 ~= nil then
- assignweapon(player, createobject(gettagid("weap", weapon1), 0, 30, false, 0, 0, 0))
- end
- if weapon2 ~= nil then
- assignweapon(player, createobject(gettagid("weap", weapon2), 0, 30, false, 0, 0, 0))
- end
- end
- end
- return false
- end
- function OnObjectInteraction(player, objId, mapId)
- local response = nil
- local name, type = gettaginfo(mapId)
- local ip = getip(player)
- if type == "weap" and noweapons[ip] then
- if name == "weapons\\ball\\ball" or name == "weapons\\flag\\flag" then
- response = true
- elseif name ~= "weapons\\ball\\ball" or name ~= "weapons\\flag\\flag" then
- response = false
- end
- elseif type == "weap" and not noweapons[ip] then
- response = true
- end
- if type == "eqip" and noweapons[ip] then
- if name == "weapons\\plasma grenade\\plasma grenade" or name == "weapons\\frag grenade\\frag grenade" then
- response = false
- elseif name ~= "weapons\\plasma grenade\\plasma grenade" or name ~= "weapons\\frag grenade\\frag grenade" then
- Pass = true
- end
- elseif type == "eqip" and not noweapons[ip] then
- response = true
- end
- return response
- end
- function GiveWeapons(id, count, player)
- if count == 1 then
- if getplayer(player) then
- local m_player = getplayer(player)
- local ip = getip(player)
- local m_object = getobject(getplayerobjectid(player))
- if m_object then
- if m_object then
- writebyte(m_object, 0x31E, frags)
- writebyte(m_object, 0x31F, plasmas)
- end
- if isinvehicle(player) then
- exitvehicle(player) -- weapons can't be assigned if they are driver or gunner in a vehicle
- gameweap = registertimer(1100, "AssignGameWeapons", player) -- delayed because exiting vehicle is not immediate
- else
- gameweap = registertimer(0, "AssignGameWeapons", player)
- end
- end
- sayExcept(getname(player) .. " had weapons restored by an admin.", m_player)
- privatesay(player, getname(player) .. " Your weapons have been restored.")
- log_msg(3, getname(player) .. " used the give weapons command.")
- end
- end
- return false
- end
- function TakeWeapons(id, count, player)
- if count == 1 then
- if getplayer(player) then
- local m_player = getplayer(player)
- local ip = getip(player)
- if isinvehicle(player) or HoldingFlagOrOddball(player) then
- kill(player)
- goto COMPLETE -- skip remaining functions
- end
- local m_object = getobject(getplayerobjectid(player))
- if m_object then
- writebyte(m_object, 0x31E, 0)
- writebyte(m_object, 0x31F, 0)
- for j = 0, 3 do
- local m_weapId = readdword(m_object, 0x2F8 + j * 4)
- local m_weapon = getobject(m_weapId)
- if m_weapon then
- destroyobject(m_weapId)
- end
- end
- end
- sayExcept(getname(player) .. " had weapons removed by an admin.", m_player)
- privatesay(player, getname(player) .. " Your weapons have been removed until next game.")
- log_msg(3, getname(player) .. " used the take weapons command.")
- end
- end
- ::COMPLETE::
- return false
- end
- function sendresponse(message, player)
- if player then
- sendconsoletext(player, message)
- else
- hprintf(message)
- end
- end
- function sayExcept(message, except)
- for i=0,15 do
- if getplayer(i) and except ~= i then
- privatesay(i, message)
- end
- end
- end
- function OnServerCommand(player, command)
- local response = nil
- t = tokenizecmdstring(command)
- local count = #t
- if t[1] == "sv_takeweapons" then
- response = false
- if t[2] and rresolveplayer(t[2]) then
- local id = rresolveplayer(t[2])
- local ip = getip(id)
- noweapons[ip] = {} -- insert into noweapons table
- takeweapons = registertimer(0, "TakeWeapons", id)
- sendresponse("The players weapons have been removed.", player)
- else
- sendresponse("The specified player is invalid", player)
- end
- elseif t[1] == "sv_giveweapons" then
- response = false
- if t[2] and rresolveplayer(t[2]) then
- local id = rresolveplayer(t[2])
- local ip = getip(id)
- noweapons[ip] = nil -- remove from noweapons table
- giveweapons = registertimer(0, "GiveWeapons", id)
- sendresponse("The players weapons have been restored.", player)
- else
- sendresponse("The specified player is invalid", player)
- end
- end
- return response
- end
- function OnGameEnd(stage)
- if stage == 1 then
- for i = 0,15 do
- if getplayer(i) then
- local ip = getip(i)
- noweapons[ip] = nil
- end
- end
- if gameweap then
- removetimer(gameweap)
- gameweap = nil
- end
- if takeweapons then
- removetimer(takeweapons)
- takeweapons = nil
- end
- if giveweapons then
- removetimer(giveweapons)
- giveweapons = nil
- end
- end
- end
- -- Created by H® Shaft thank you 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement