mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
193 lines
5.5 KiB
Lua
193 lines
5.5 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
local timer = timer
|
|
local pairs = pairs
|
|
local hook = hook
|
|
local CurTime = CurTime
|
|
local player = player
|
|
local ipairs = ipairs
|
|
local ix = ix
|
|
local IsValid = IsValid
|
|
|
|
local PLUGIN = PLUGIN
|
|
|
|
PLUGIN.disconnects = PLUGIN.disconnects or {}
|
|
|
|
PLUGIN.takeCounter = {}
|
|
timer.Create("ixBastionAntiTakeSpam", 1, 0, function()
|
|
for client, amount in pairs(PLUGIN.takeCounter) do
|
|
if (amount < 10) then continue end
|
|
if (!IsValid(client)) then continue end
|
|
|
|
for _, admin in ipairs(player.GetAll()) do
|
|
if (admin:IsSuperAdmin()) then
|
|
admin:NotifyLocalized("bastionItemTakeKick", client:Name())
|
|
end
|
|
end
|
|
|
|
client:Kick("Item take spam")
|
|
end
|
|
|
|
PLUGIN.takeCounter = {}
|
|
end)
|
|
|
|
function PLUGIN:CanPlayerInteractItem(client, action, item, data)
|
|
if (action == "take") then
|
|
if (self.takeCounter[client] and self.takeCounter[client] >= 5) then
|
|
if (self.takeCounter[client] == 5) then
|
|
for _, v in ipairs(player.GetAll()) do
|
|
if (v:IsSuperAdmin()) then
|
|
v:NotifyLocalized("bastionItemTakeWarn", client:Name())
|
|
end
|
|
end
|
|
client:NotifyLocalized("bastionTakingItemsTooQuickly")
|
|
end
|
|
|
|
self.takeCounter[client] = self.takeCounter[client] + 1
|
|
return false
|
|
end
|
|
elseif (action == "drop" and client.ixAntiItemSpam and client.ixAntiItemSpam > CurTime()) then
|
|
return false
|
|
end
|
|
end
|
|
function PLUGIN:PlayerInteractItem(client, action, item)
|
|
if (action == "take") then
|
|
self.takeCounter[client] = (self.takeCounter[client] or 0) + 1
|
|
end
|
|
end
|
|
|
|
PLUGIN.itemSpawns = {}
|
|
function PLUGIN:OnItemSpawned(entity)
|
|
if (IsValid(self.itemSpawns[entity.ixItemID])) then
|
|
if (self.itemSpawns[entity.ixItemID].ixItemID != entity.ixItemID) then
|
|
return -- just in case
|
|
end
|
|
|
|
--Now we are trying to spawn an item which already has an entity!
|
|
--Check if it is the same person, in case of weird behaviour
|
|
if (entity.ixSteamID == self.itemSpawns[entity.ixItemID]) then
|
|
local client = player.GetBySteamID(entity.ixSteamID)
|
|
if ((client.ixAntiItemSpam or 0) > CurTime()) then
|
|
for _, v in ipairs(player.GetAll()) do
|
|
if (v:IsSuperAdmin()) then
|
|
v:NotifyLocalized("bastionItemDropSpamKick", client:Name())
|
|
end
|
|
end
|
|
|
|
client:Kick("Item drop spam")
|
|
else
|
|
client.ixAntiItemSpam = CurTime() + 10
|
|
|
|
for _, v in ipairs(player.GetAll()) do
|
|
if (v:IsSuperAdmin()) then
|
|
v:NotifyLocalized("bastionItemDropSpamWarn", client:Name())
|
|
end
|
|
end
|
|
|
|
client:NotifyLocalized("bastionItemDropTooQuick")
|
|
end
|
|
end
|
|
|
|
self.itemSpawns[entity.ixItemID]:Remove()
|
|
self.itemSpawns[entity.ixItemID] = entity
|
|
else
|
|
self.itemSpawns[entity.ixItemID] = entity
|
|
end
|
|
end
|
|
|
|
function PLUGIN:CanPlayerCreateCharacter(client)
|
|
if (client.ixNextCharCreate and (client.ixNextCharCreate + ix.config.Get("charCreateInterval") * 60) > CurTime()) then
|
|
return false, "charCreateTooFast", ix.config.Get("charCreateInterval")
|
|
end
|
|
end
|
|
|
|
function PLUGIN:OnCharacterCreated(client)
|
|
if (!client:IsAdmin()) then
|
|
client.ixNextCharCreate = CurTime()
|
|
end
|
|
end
|
|
|
|
function PLUGIN:PlayerSpawnedProp(client, model, entity)
|
|
entity.ownerCharacter = client:GetName()
|
|
entity.ownerName = client:SteamName()
|
|
entity.ownerSteamID = client:SteamID()
|
|
end
|
|
|
|
function PLUGIN:OnPlayerHitGround(client, inWater, onFloater, speed)
|
|
local currentVelocity = client:GetVelocity()
|
|
|
|
client:SetVelocity(-Vector(currentVelocity.x, currentVelocity.y, 0))
|
|
end
|
|
|
|
function PLUGIN:PlayerInitialSpawn(client)
|
|
local receivers
|
|
|
|
if (!ix.config.Get("showConnectMessages", true)) then
|
|
receivers = {}
|
|
|
|
for _, ply in ipairs(player.GetAll()) do
|
|
if (ply:IsAdmin()) then
|
|
receivers[#receivers + 1] = ply
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Give some time for the player's data to be loaded, just in case.
|
|
timer.Simple(1, function()
|
|
ix.chat.Send(nil, "new_connect", client:SteamName(), false, receivers)
|
|
end)
|
|
end
|
|
|
|
function PLUGIN:PlayerDisconnected(client)
|
|
local receivers
|
|
|
|
self.disconnects[client:SteamID64()] = {time = os.time(), charID = client:GetCharacter() and client:GetCharacter():GetID()}
|
|
|
|
if (!ix.config.Get("showDisconnectMessages", true)) then
|
|
receivers = {}
|
|
|
|
for _, ply in ipairs(player.GetAll()) do
|
|
if (ply:IsAdmin()) then
|
|
receivers[#receivers + 1] = ply
|
|
end
|
|
end
|
|
end
|
|
|
|
ix.chat.Send(nil, "new_disconnect", client:SteamName(), false, receivers)
|
|
end
|
|
|
|
function PLUGIN:PlayerLoadedCharacter(client, character, lastChar)
|
|
if (self.disconnects[client:SteamID64()]) then
|
|
local info = self.disconnects[client:SteamID64()]
|
|
if (info.timer) then
|
|
timer.Remove(info.timer)
|
|
if (IsValid(info.bannedBy)) then
|
|
if (info.charID) then
|
|
if (character:GetID() == info.charID) then
|
|
info.bannedBy:Notify(client:SteamName().." has reconnected and is back on their character "..character:GetName()..".")
|
|
end
|
|
else
|
|
info.bannedBy:Notify(client:SteamName().." has reconnected on a different character '"..character:GetName().."'.")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PLUGIN:PlayerDeath(client, inflictor, attacker)
|
|
if (!client:GetCharacter()) then return end
|
|
|
|
ix.chat.Send(client, "bastionPlayerDeath", client:GetName() .. " (" .. client:SteamName() .. ") has died at " .. (client.ixArea and client.ixArea != "" and client.ixArea or "an Uncategorized Location") .. ".")
|
|
end
|
|
|
|
hook.Add("SAM.RanCommand", "BastionSamCommandLogs", function(client, cmd_name, args, cmd)
|
|
ix.log.Add(client, "bastionSamCommand", cmd_name, args, cmd)
|
|
end) |