Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ ### Anti-Hog-Camp ###]]--
- --[[ ### by H® Shaft ###]]--
- --[[ ### for Phasor v2+ ###]]--
- -- Script will monitor and eject hog campers (Gunners/Passengers of driverless hogs). Made primarily for race servers.
- -- Optional Parameters:
- -- Edit how long a player may be in the gunner seat of a driverless hog before being warned and ejected (max_time).
- -- Edit if a gunner of a driverless hog will damage other players (gunner_damage).
- -- Edit how long gunners/passengers may remain after their driver dies before being ejected (survivor_time).
- 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)
- 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
- 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.
- -- don't edit --
- vehicles = {}
- call_time = 0.1
- function GetRequiredVersion()
- return 200
- end
- function OnScriptLoad(process, game, persistent)
- camperejection = registertimer(call_time*1000, "CamperEjection")
- survivorejection = registertimer(survivor_time*1000, "SurvivorEjection")
- end
- function OnVehicleEntry(player, m_vehicleId, seat, mapId, relevant)
- if getplayer(player) then
- if seat == 0 then
- vehicles[m_vehicleId] = {}
- settonil = registertimer(20, "setnil", m_vehicleId)
- elseif not getdriverplayer(getobject(m_vehicleId)) then
- setupseattable = registertimer(0, "SetupSeatTable", {m_vehicleId, player})
- end
- end
- end
- function CamperEjection(id, c)
- for k, v in pairs(vehicles) do
- if vehicles[k] ~= {} then
- for key, value in pairs(vehicles[k]) do
- if vehicles[k].players and vehicles[k].players ~= {} then
- vehicles[k].count = (vehicles[k].count or 0) + call_time
- if vehicles[k].count >= max_time then
- for i=1, #vehicles[k].players do
- local player = vehicles[k].players[i]
- local m_objectId = getplayerobjectid(player)
- if player and getplayer(player) and isinvehicle(player) and m_objectId then
- privatesay(player, "** " .. getname(player) .. " ** You cannot gun or passenger without a driver!")
- exitvehicle(player)
- end
- end
- vehicles[k] = {}
- end
- else
- vehicles[k] = {}
- end
- end
- end
- end
- return true
- end
- function SurvivorEjection(id, count)
- for player=0,15 do
- if getplayer(player) then
- if isinvehicle(player) then
- local m_player = getplayer(player)
- local m_objectId = readdword(m_player + 0x34)
- if m_objectId then
- local m_object = getobject(m_objectId)
- if m_object then
- local m_vehicleId = readdword(m_object + 0x11C)
- if m_vehicleId then
- if readdword(getobject(m_vehicleId) + 0x324) == 0xFFFFFFFF then
- if isinvehicle(player) then
- privatesay(player, "** " .. getname(player) .. " ** You cannot gun or passenger without a driver!")
- exitvehicle(player)
- end
- end
- end
- end
- end
- end
- end
- end
- return true
- end
- function OnDamageLookup(receiving, causing, tagid)
- if not gunner_damage and causing then
- local c_player = objectidtoplayer(causing)
- if c_player and isinvehicle(c_player) then
- local m_vehicleId = getplayervehicleid(c_player)
- if m_vehicleId then
- local m_vehicle = getobject(m_vehicleId)
- local driver = readdword(m_vehicle + 0x324)
- local gunner = readdword(m_vehicle + 0x328)
- if driver == 0xFFFFFFFF and gunner == causing then
- return false
- end
- end
- end
- end
- end
- function SetupSeatTable(id, count, arg)
- local m_vehicleId = arg[1]
- vehicles[m_vehicleId] = {}
- vehicles[m_vehicleId].players = {}
- vehicles[m_vehicleId].count = 0
- local driver = getdriverplayer(getobject(m_vehicleId))
- for player=0,15 do
- if getplayer(player) and isinvehicle(player) and getplayervehicleid(player) == m_vehicleId and driver ~= player then
- table.insert(vehicles[m_vehicleId].players, player)
- end
- end
- return false
- end
- function setnil(id, count, m_vehicleId)
- if count >= 20 then return false end
- if vehicles[m_vehicleId] ~= {} then
- vehicles[m_vehicleId] = {}
- end
- return true
- end
- function getdriverplayer(m_vehicle)
- local obj_id = readdword(m_vehicle + 0x324)
- if obj_id and obj_id ~= 0xFFFFFFFF then return objectidtoplayer(obj_id) end
- end
- function getplayervehicleid(player)
- local m_objectId = getplayerobjectid(player)
- if m_objectId then return readdword(getobject(m_objectId) + 0x11C) 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