HR_Shaft

Anti-Hog-Camp for Race for Phasor V2+

Nov 16th, 2014
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.86 KB | None | 0 0
  1. --[[ ###   Anti-Hog-Camp ###]]--
  2. --[[ ###    by H® Shaft  ###]]--
  3. --[[ ###  for Phasor v2+ ###]]--
  4.  
  5. -- Script will monitor and eject hog campers (Gunners/Passengers of driverless hogs). Made primarily for race servers.
  6. -- Optional Parameters:
  7.     -- Edit how long a player may be in the gunner seat of a driverless hog before being warned and ejected (max_time).
  8.     -- Edit if a gunner of a driverless hog will damage other players (gunner_damage).
  9.     -- Edit how long gunners/passengers may remain after their driver dies before being ejected (survivor_time).
  10.  
  11. max_time = 2.5          -- | amount of time in seconds before a player is ejected after entering a driverless vehicle (2.5 recommended for fast ejection)
  12. survivor_time = 5       -- | amount of time in seconds before a gunner/passenger is ejected from a driverless vehicle (when driver dies eject gunner/passenger) 5 seconds recommended
  13. gunner_damage = false   -- | Toggle on/off damage from a vehicle gunner which has no driver. If false, they cannot kill without a driver, if true they can.
  14.  
  15. -- don't edit --
  16. vehicles = {}
  17. call_time = 0.1
  18.  
  19. function GetRequiredVersion()
  20.     return 200
  21. end
  22.  
  23. function OnScriptLoad(process, game, persistent)
  24.     camperejection = registertimer(call_time*1000, "CamperEjection")
  25.     survivorejection = registertimer(survivor_time*1000, "SurvivorEjection")
  26. end
  27.  
  28. function OnVehicleEntry(player, m_vehicleId, seat, mapId, relevant)
  29.     if getplayer(player) then
  30.         if seat == 0 then
  31.             vehicles[m_vehicleId] = {}
  32.             settonil = registertimer(20, "setnil", m_vehicleId)
  33.         elseif not getdriverplayer(getobject(m_vehicleId)) then
  34.             setupseattable = registertimer(0, "SetupSeatTable", {m_vehicleId, player})
  35.         end
  36.     end
  37. end
  38.  
  39. function CamperEjection(id, c)
  40.     for k, v in pairs(vehicles) do
  41.         if vehicles[k] ~= {} then
  42.             for key, value in pairs(vehicles[k]) do
  43.                 if vehicles[k].players and vehicles[k].players ~= {} then
  44.                     vehicles[k].count = (vehicles[k].count or 0) + call_time
  45.                     if vehicles[k].count >= max_time then
  46.                         for i=1, #vehicles[k].players do
  47.                             local player = vehicles[k].players[i]
  48.                             local m_objectId = getplayerobjectid(player)
  49.                             if player and getplayer(player) and isinvehicle(player) and m_objectId then
  50.                                 privatesay(player, "** " .. getname(player) .. " ** You cannot gun or passenger without a driver!")
  51.                                 exitvehicle(player)
  52.                             end
  53.                         end
  54.                         vehicles[k] = {}
  55.                     end
  56.                 else
  57.                     vehicles[k] = {}
  58.                 end
  59.             end
  60.         end
  61.     end
  62.     return true
  63. end
  64.  
  65. function SurvivorEjection(id, count)
  66.     for player=0,15 do
  67.         if getplayer(player) then
  68.             if isinvehicle(player) then
  69.                 local m_player = getplayer(player)
  70.                 local m_objectId = readdword(m_player + 0x34)
  71.                 if m_objectId then
  72.                     local m_object = getobject(m_objectId)
  73.                     if m_object then
  74.                         local m_vehicleId = readdword(m_object + 0x11C)
  75.                         if m_vehicleId then
  76.                             if readdword(getobject(m_vehicleId) + 0x324) == 0xFFFFFFFF then
  77.                                 if isinvehicle(player) then
  78.                                     privatesay(player, "** " .. getname(player) .. " ** You cannot gun or passenger without a driver!")
  79.                                     exitvehicle(player)                
  80.                                 end
  81.                             end    
  82.                         end
  83.                     end
  84.                 end    
  85.             end
  86.         end
  87.     end
  88.     return true
  89. end
  90.  
  91. function OnDamageLookup(receiving, causing, tagid)
  92.     if not gunner_damage and causing then
  93.         local c_player = objectidtoplayer(causing)
  94.         if c_player and isinvehicle(c_player) then
  95.             local m_vehicleId = getplayervehicleid(c_player)
  96.             if m_vehicleId then
  97.                 local m_vehicle = getobject(m_vehicleId)
  98.                 local driver = readdword(m_vehicle + 0x324)
  99.                 local gunner = readdword(m_vehicle + 0x328)
  100.                 if driver == 0xFFFFFFFF and gunner == causing then
  101.                     return false
  102.                 end
  103.             end
  104.         end
  105.     end
  106. end
  107.  
  108. function SetupSeatTable(id, count, arg)
  109.     local m_vehicleId = arg[1]
  110.     vehicles[m_vehicleId] = {}
  111.     vehicles[m_vehicleId].players = {}
  112.     vehicles[m_vehicleId].count = 0
  113.     local driver = getdriverplayer(getobject(m_vehicleId))
  114.     for player=0,15 do
  115.         if getplayer(player) and isinvehicle(player) and getplayervehicleid(player) == m_vehicleId and driver ~= player then
  116.             table.insert(vehicles[m_vehicleId].players, player)
  117.         end
  118.     end
  119.     return false
  120. end
  121.  
  122. function setnil(id, count, m_vehicleId)
  123.     if count >= 20 then return false end
  124.     if vehicles[m_vehicleId] ~= {} then
  125.         vehicles[m_vehicleId] = {}
  126.     end
  127.     return true
  128. end
  129.  
  130. function getdriverplayer(m_vehicle)
  131.     local obj_id = readdword(m_vehicle + 0x324)
  132.     if obj_id and obj_id ~= 0xFFFFFFFF then return objectidtoplayer(obj_id) end
  133. end
  134.  
  135. function getplayervehicleid(player)
  136.     local m_objectId = getplayerobjectid(player)
  137.     if m_objectId then return readdword(getobject(m_objectId) + 0x11C) end
  138. end
  139.  
  140. -- Created by H® Shaft thank you to Oxide, AelitePrime, Nugget & Wizard.
  141. -- Visit http://halorace.org/forum/index.php?topic=514.0 or
  142. -- Visit http://pastebin.com/u/HR_Shaft for more phasor scripts
Advertisement
Add Comment
Please, Sign In to add comment