--[[ Name : Anti-Camping
Version : 1.01
Created by : Idea by «§H»Kennan{Leader}, mostly wrote by Aelite Prime (Thanks both of them)
Short modifications by combre
]]--
players = {}
players.haveflag = nil
weapons = {}
coords = {}
coords_to_move = 8 -- How many coords do they have to move in 30 seconds to be considered camping.
-- If you walk in a stright line for 30 seconds, you can move around 30-40 coords.
-- Also the radius of the circle they must get out of in 30 seconds before they are considered camping.
-- Would want to make this smaller as the map gets small.
punishment = "move" -- What do you want to do to the "campers", methods :
-- "kill" : Kill them
-- "hurt" : Hurt them (20% of their health, on the 5th time, it will kill them)
-- "moove" : Moove them back to teir spawn position
-- Don't touch below this line --
coords = {}
countercamp = 0
function GetRequiredVersion()
return 200
end
function OnScriptLoad(processId, game, persistent)
timer = registertimer(60000, "CoordCheck") -- 30000 or 30 sec, time between each coords checks
end
function OnGameEnd(stage)
if stage == 1 then
removetimer(timer)
end
end
function OnPlayerJoin(player)
coords[gethash(player)] = readfloat(getplayer(player) + 0xF8)
end
function CoordCheck(id, count)
for player = 0,15 do
if getplayer(player) then
local hash = gethash(player)
local m_objectId = getplayerobjectid(player)
local x_diff = (coords[hash] + coords_to_move)
coords[hash] = readfloat(getplayer(player) + 0xF8)
if not isinvehicle(player) then
if m_objectId and coords[hash] ~= nil and coords[hash] <= x_diff then
if countercamp == 0 then
countercamp = countercamp + 1
privatesay(player, "You cannot stand here.")
elseif countercamp == 1 then
countercamp = countercamp + 1
privatesay(player, "Last warning.")
elseif countercamp == 2 and players[hash].haveflag == false then
if punishment == "kill" then
countercamp = 0
kill(player)
privatesay(player, "You were killed for camping!")
elseif punishment == "hurt" then
local m_object = getobject(m_objectId)
local health = readfloat(m_object + 0xE0)
if health <= 0.21 then
countercamp = 0
kill(player)
privatesay(player, "20% of your Health was damaged for camping, thus resulting in your death!")
else
countercamp = 0
writefloat(m_object + 0xE0, health - 0.20)
privatesay(player, "20% of your Health was damaged for camping!")
end
elseif punishment == "move" then
if (m_objectId ~= nil) then
countercamp = 0
movobjectcoords(m_objectId, players[hash].spawns[1], players[hash].spawns[2], players[hash].spawns[3])
privatesay(player, "You were moved for camping!")
end
end
else
countercamp = 0
privatesay(player, "Stop camping...")
end
end
end
end
end
return true
end
function OnPlayerSpawnEnd(player)
coords[gethash(player)] = readfloat(getplayer(player) + 0xF8)
local playerobjId = getplayerobjectid(player)
local x, y, z = getobjectcoords(playerobjId)
local hash = gethash(player)
players[hash] = players[hash] or {}
players[hash].spawns = players[hash].spawns or {}
players[hash].spawns[1] = x
players[hash].spawns[2] = y
players[hash].spawns[3] = z
players[hash].haveflag = false
end
function OnWeaponPickup(player, weapId, slot, mapId)
local hash = gethash(player)
local tagname = gettaginfo(mapId)
if tagname == "weapons\\flag\\flag" then
players[hash].haveflag = true
end
end
function OnWeaponDrop(player, weapId, slot, mapId)
local hash = gethash(player)
local tagname = gettaginfo(mapId)
if tagname == "weapons\\flag\\flag" then
players[hash].haveflag = false
end
end
registertimer(10, "WeaponMonitor")
function WeaponMonitor(id, count)
for player = 0,15 do
weapons[player] = weapons[player] or {}
local m_player = getplayer(player)
if m_player then
local temp = {} --?
local objId = readdword(m_player, 0x34)
local m_object = getobject(objId)
if m_object then
for i = 0,3 do
local weapId = readdword(m_object, 0x2F8 + (i * 4))
local m_weapon = getobject(weapId)
if m_weapon then
local mapId = readdword(m_weapon)
if weapons[player][i] then
if weapons[player][i].weapId ~= weapId then
OnWeaponDrop(player, weapons[player][i].weapId, i, weapons[player][i].mapId)
weapons[player][i] = {}
weapons[player][i].weapId = weapId
weapons[player][i].mapId = mapId
OnWeaponPickup(player, weapId, i, mapId)
end
else
weapons[player][i] = {}
weapons[player][i].weapId = weapId
weapons[player][i].mapId = mapId
OnWeaponPickup(player, weapId, i, mapId)
end
else
if weapons[player][i] then
OnWeaponDrop(player, weapons[player][i].weapId, i, weapons[player][i].mapId)
weapons[player][i] = nil
end
end
end
else
for i = 0,3 do
if weapons[player][i] then
OnWeaponDrop(player, weapons[player][i].weapId, i, weapons[player][i].mapId)
weapons[player][i] = nil
end
end
end
end
end
return true
end
Comments
0 B
|👍
/👎