Advertisement
HR_Shaft

Take Weapons v1 for Phasor v2

Apr 8th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.57 KB | None | 0 0
  1. --[[ ###      Take Weapons v1      ###]]--
  2. --[[ ### by H® Shaft for Phasor v2 ###]]--
  3.  
  4. -- allows admins to remove or restore a players weapons by chat or rcon, and view player list with rcon id's.
  5. -- logs command usage in the RconLog.log
  6. -- all weapons are blocked for that player (except oddball and flag) until the next game, even if they quit and rejoin
  7. -- primarily intended for Halo PC, can be adapted to CE if there is a need for it.
  8.  
  9. -- commands:
  10. -- Show list of commands: type:  /commands or @commands
  11. -- Show player names and ID's: type: /players    --| or use rcon sv_players
  12. -- Take Weapons: type: /takeweaps [player id]    --| or use rcon sv_takeweapons
  13. -- Restore Weapons: type: /giveweaps [player id] --| or use rcon sv_giveweapons
  14.  
  15. -- Edit this section: When weapons are restored, what weapons are they? if only one weapon, put "nil" on weapon 2 (without quotes)
  16. weapon1 = "weapons\\pistol\\pistol"
  17. weapon2 = "weapons\\assault rifle\\assault rifle"
  18. frags = 2
  19. plasmas = 0
  20.  
  21. -- weapon tag names for convenience of the above section --
  22.  
  23. -- "weapons\\assault rifle\\assault rifle"
  24. -- "weapons\\flamethrower\\flamethrower"
  25. -- "weapons\\needler\\mp_needler"
  26. -- "weapons\\pistol\\pistol"
  27. -- "weapons\\plasma pistol\\plasma pistol"
  28. -- "weapons\\plasma rifle\\plasma rifle"
  29. -- "weapons\\plasma_cannon\\plasma_cannon"
  30. -- "weapons\\rocket launcher\\rocket launcher"
  31. -- "weapons\\shotgun\\shotgun"
  32. -- "weapons\\sniper rifle\\sniper rifle"
  33.  
  34. -- don't edit --
  35. noweapons = {}
  36.    
  37. function GetRequiredVersion()
  38.     return 200
  39. end
  40.  
  41. function OnScriptLoad(process, game, persistent)
  42.     for i=0,15 do
  43.         if getplayer(i) then
  44.             local ip = getip(i)
  45.             noweapons[ip] = nil    
  46.         end
  47.     end
  48. end
  49.  
  50. function OnNewGame(map)
  51.     for i=0,15 do
  52.         if getplayer(i) then
  53.             local ip = getip(i)
  54.             noweapons[ip] = nil    
  55.         end
  56.     end
  57. end
  58.  
  59. function OnPlayerJoin(player)
  60.     if getplayer(player) then
  61.         if isadmin(player) then
  62.             privatesay(player, "To see a list of commands: type:  /commands or @commands ")
  63.         end
  64.     end    
  65. end
  66.                    
  67. function HoldingFlagOrOddball(player)
  68.     local response = false
  69.     local m_player = getplayer(player)
  70.     local m_objectId = readdword(m_player + 0x34)
  71.     local m_object = getobject(m_objectId)
  72.     if m_player and not isinvehicle(player) then
  73.         for i = 0,3 do
  74.             local m_weaponId = readdword(m_object, 0x2F8 + (i * 4))
  75.             local m_weapon = getobject(m_weaponId)
  76.             if m_weapon then
  77.                 local mapId = readdword(m_weapon)
  78.                 local tagname = gettaginfo(mapId)
  79.                 if string.find(tagname, "ball") or string.find(tagname, "flag") then
  80.                     response = true
  81.                     break
  82.                 end
  83.             end
  84.         end
  85.     end    
  86.     return response
  87. end
  88.  
  89. function OnPlayerSpawn(player, m_objectId)
  90.     if getplayer(player) then
  91.         local m_objectId = getplayerobjectid(player)
  92.         local ip = getip(player)
  93.         if noweapons[ip] then
  94.             takeweapons = registertimer(0, "TakeWeapons", player)
  95.         end
  96.     end
  97. end
  98.  
  99. function OnServerChat(player, type, message)
  100.     local response = nil
  101.    
  102.     local t = tokenizestring(message, " ")
  103.     local count = #t
  104.     if t[1] == nil then
  105.         return true
  106.     end
  107.    
  108.     if t[1] == "/players" then
  109.         response = false
  110.         if isadmin(player) then
  111.             sendresponse("[ID# - Name]", player)
  112.             for i = 0,15 do
  113.                 if getplayer(i) then
  114.                     local name = getname(i)
  115.                     local id = resolveplayer(i)
  116.                     sendresponse(id .. " - " .. name, player)
  117.                     log_msg(3, getname(player) .. " used the players list command.")   
  118.                 end
  119.             end    
  120.         else
  121.             sendresponse("You're not an admin. Logging attempt.", player)
  122.             log_msg(3, getname(player) .. " attempted use of the players list command.")
  123.         end
  124.     elseif t[1] == "/takeweaps" then
  125.         response = false
  126.         if isadmin(player) then
  127.             if t[2] and rresolveplayer(t[2]) then
  128.                 local id = rresolveplayer(t[2])
  129.                 local ip = getip(id)
  130.                 local player2 = tonumber(t[2])
  131.                 if getplayer(player2) then
  132.                     if isinvehicle(player2) or HoldingFlagOrOddball(player2) then
  133.                         noweapons[ip] = {} -- because take weapons timer is not called
  134.                         kill(player2)
  135.                         goto FINISHED -- skip remaining functions                  
  136.                     end
  137.                 end
  138.                 noweapons[ip] = {}  -- insert into noweapons table         
  139.                 takeweapons = registertimer(0, "TakeWeapons", id)
  140.                 sendresponse("The players weapons have been removed.", player)
  141.                 log_msg(3, getname(player) .. " used the take weapons command.")   
  142.             else
  143.                 sendresponse("The specified player is invalid: /takeweaps [player #]", player)
  144.             end
  145.             ::FINISHED::   
  146.         else
  147.             response = true
  148.             log_msg(3, getname(player) .. " attempted use of the take weapons command.")
  149.         end
  150.     elseif t[1] == "/giveweaps" then
  151.         response = false
  152.         if isadmin(player) then
  153.             if t[2] and rresolveplayer(t[2]) then
  154.                 local id = rresolveplayer(t[2])
  155.                 local ip = getip(id)           
  156.                 noweapons[ip] = nil -- remove from noweapons table 
  157.                 giveweapons = registertimer(0, "GiveWeapons", id)
  158.                 sendresponse("The players weapons have been restored.", player)
  159.                 log_msg(3, getname(player) .. " used the give weapons command.")   
  160.             else
  161.                 sendresponse("The specified player is invalid: /giveweaps [player #]", player)
  162.             end
  163.         else
  164.             response = true
  165.             log_msg(3, getname(player) .. " attempted use of the give weapons command.")
  166.         end
  167.     end
  168.    
  169.     if string.lower(message) == "/commands" or string.lower(message) == "@commands" then
  170.         if isadmin(player) then
  171.             response = false
  172.             privatesay(player, "Show player names and ID's: type:  /players")
  173.             privatesay(player, "Take Weapons: type:  /takeweaps [player id]")
  174.             privatesay(player, "Restore Weapons: type   /giveweaps [player id]")
  175.             privatesay(player, "See this list again: type:  /commands")
  176.         else
  177.             response = true
  178.         end
  179.     end
  180.    
  181.     return response
  182. end
  183.  
  184. function AssignGameWeapons(id, count, player)
  185.     if getplayer(player) then
  186.         if getplayerobjectid(player) then
  187.             if weapon1 ~= nil then
  188.                 assignweapon(player, createobject(gettagid("weap", weapon1), 0, 30, false, 0, 0, 0))
  189.             end
  190.             if weapon2 ~= nil then 
  191.                 assignweapon(player, createobject(gettagid("weap", weapon2), 0, 30, false, 0, 0, 0))
  192.             end    
  193.         end
  194.     end
  195.     return false
  196. end
  197.  
  198. function OnObjectInteraction(player, objId, mapId)
  199.     local response = nil
  200.     local name, type = gettaginfo(mapId)
  201.     local ip = getip(player)
  202.     if type == "weap" and noweapons[ip] then
  203.         if name == "weapons\\ball\\ball" or name == "weapons\\flag\\flag" then
  204.             response = true
  205.         elseif name ~= "weapons\\ball\\ball" or name ~= "weapons\\flag\\flag" then
  206.             response = false
  207.         end
  208.     elseif type == "weap" and not noweapons[ip] then
  209.         response = true
  210.     end
  211.     if type == "eqip" and noweapons[ip] then
  212.         if name == "weapons\\plasma grenade\\plasma grenade" or name == "weapons\\frag grenade\\frag grenade" then
  213.             response = false
  214.         elseif name ~= "weapons\\plasma grenade\\plasma grenade" or name ~= "weapons\\frag grenade\\frag grenade" then
  215.             Pass = true
  216.         end
  217.     elseif type == "eqip" and not noweapons[ip] then
  218.         response = true
  219.     end
  220.     return response
  221. end
  222.  
  223. function GiveWeapons(id, count, player)
  224.     if count == 1 then
  225.         if getplayer(player) then
  226.             local m_player = getplayer(player)
  227.             local ip = getip(player)
  228.             local m_object = getobject(getplayerobjectid(player))
  229.             if m_object then
  230.                 if m_object then
  231.                     writebyte(m_object, 0x31E, frags)
  232.                     writebyte(m_object, 0x31F, plasmas)
  233.                 end
  234.                 if isinvehicle(player) then
  235.                     exitvehicle(player) -- weapons can't be assigned if they are driver or gunner in a vehicle
  236.                     gameweap = registertimer(1100, "AssignGameWeapons", player) -- delayed because exiting vehicle is not immediate
  237.                 else
  238.                     gameweap = registertimer(0, "AssignGameWeapons", player)
  239.                 end    
  240.             end
  241.             sayExcept(getname(player) .. " had weapons restored by an admin.", m_player)
  242.             privatesay(player, getname(player) .. " Your weapons have been restored.")
  243.             log_msg(3, getname(player) .. " used the give weapons command.")   
  244.         end
  245.     end
  246.     return false
  247. end
  248.  
  249. function TakeWeapons(id, count, player)
  250.     if count == 1 then 
  251.         if getplayer(player) then
  252.             local m_player = getplayer(player)
  253.             local ip = getip(player)
  254.             if isinvehicle(player) or HoldingFlagOrOddball(player) then
  255.                 kill(player)
  256.                 goto COMPLETE -- skip remaining functions
  257.             end
  258.             local m_object = getobject(getplayerobjectid(player))
  259.             if m_object then
  260.                 writebyte(m_object, 0x31E, 0)
  261.                 writebyte(m_object, 0x31F, 0)
  262.                 for j = 0, 3 do
  263.                     local m_weapId = readdword(m_object, 0x2F8 + j * 4)
  264.                     local m_weapon = getobject(m_weapId)
  265.                     if m_weapon then
  266.                         destroyobject(m_weapId)
  267.                     end
  268.                 end    
  269.             end
  270.             sayExcept(getname(player) .. " had weapons removed by an admin.", m_player)
  271.             privatesay(player, getname(player) .. " Your weapons have been removed until next game.")
  272.             log_msg(3, getname(player) .. " used the take weapons command.")   
  273.         end
  274.     end
  275.     ::COMPLETE::
  276.     return false
  277. end
  278.  
  279. function sendresponse(message, player)
  280.     if player then
  281.         sendconsoletext(player, message)
  282.     else
  283.         hprintf(message)
  284.     end
  285. end
  286.  
  287. function sayExcept(message, except)
  288.     for i=0,15 do
  289.         if getplayer(i) and except ~= i then
  290.             privatesay(i, message)
  291.         end
  292.     end
  293. end
  294.  
  295. function OnServerCommand(player, command)
  296.     local response = nil
  297.     t = tokenizecmdstring(command)
  298.     local count = #t
  299.     if t[1] == "sv_takeweapons" then
  300.         response = false
  301.         if t[2] and rresolveplayer(t[2]) then
  302.             local id = rresolveplayer(t[2])
  303.             local ip = getip(id)
  304.             noweapons[ip] = {}  -- insert into noweapons table         
  305.             takeweapons = registertimer(0, "TakeWeapons", id)
  306.             sendresponse("The players weapons have been removed.", player)
  307.         else
  308.             sendresponse("The specified player is invalid", player)
  309.         end
  310.     elseif t[1] == "sv_giveweapons" then
  311.         response = false
  312.         if t[2] and rresolveplayer(t[2]) then
  313.             local id = rresolveplayer(t[2])
  314.             local ip = getip(id)           
  315.             noweapons[ip] = nil -- remove from noweapons table 
  316.             giveweapons = registertimer(0, "GiveWeapons", id)
  317.             sendresponse("The players weapons have been restored.", player)
  318.         else
  319.             sendresponse("The specified player is invalid", player)
  320.         end
  321.     end
  322.     return response
  323. end
  324.  
  325. function OnGameEnd(stage)
  326.     if stage == 1 then
  327.         for i = 0,15 do
  328.             if getplayer(i) then
  329.                 local ip = getip(i)
  330.                 noweapons[ip] = nil
  331.             end
  332.         end
  333.         if gameweap then
  334.             removetimer(gameweap)
  335.             gameweap = nil
  336.         end
  337.         if takeweapons then
  338.             removetimer(takeweapons)
  339.             takeweapons = nil
  340.         end
  341.         if giveweapons then
  342.             removetimer(giveweapons)
  343.             giveweapons = nil
  344.         end        
  345.     end
  346. end
  347.  
  348. -- Created by H® Shaft thank you to Oxide, AelitePrime, Nugget & Wizard.
  349. -- Visit http://halorace.org/forum/index.php?topic=514.0 or
  350. -- Visit http://pastebin.com/u/HR_Shaft for more phasor scripts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement