mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
100 lines
3.3 KiB
Lua
100 lines
3.3 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 PLUGIN = PLUGIN
|
|
|
|
function PLUGIN:RegisterSaveEnts()
|
|
ix.saveEnts:RegisterEntity("ix_trashspawner", true, true, true, {
|
|
OnSave = function(entity, data) --OnSave
|
|
return {pos = data.pos, angles = data.angles, motion = false}
|
|
end,
|
|
})
|
|
end
|
|
|
|
-- Called when Helix has loaded all of the entities.
|
|
function PLUGIN:InitPostEntity()
|
|
if (!ix.config.Get("SaveEntsOldLoadingEnabled")) then return end
|
|
|
|
local trashSpawns = ix.data.Get("trashSpawns")
|
|
if trashSpawns then
|
|
for _, v in pairs(trashSpawns) do
|
|
local entity = ents.Create("ix_trashspawner")
|
|
entity:SetAngles(v.angles)
|
|
entity:SetPos(v.position)
|
|
entity:Spawn()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Called just after data should be saved.
|
|
function PLUGIN:SaveData()
|
|
local trashSpawns = {}
|
|
|
|
local entities = ents.GetAll()
|
|
for i = 1, #entities do
|
|
if (entities[i]:GetClass() != "ix_trashspawner") then continue end
|
|
local v = entities[i]
|
|
trashSpawns[#trashSpawns + 1] = {
|
|
angles = v:GetAngles(),
|
|
position = v:GetPos(),
|
|
}
|
|
end
|
|
|
|
ix.data.Set("trashSpawns", trashSpawns)
|
|
end
|
|
|
|
function PLUGIN:CharacterLoaded(char)
|
|
local timerName = "UpdateTrashWindowFor "..tostring(char:GetName())
|
|
local timerWindow = 0
|
|
if (istable(char) and IsValid(char:GetPlayer())) then
|
|
timer.Create(timerName, 1, 0, function ()
|
|
timerWindow = timerWindow + 1
|
|
if (!istable(char) or !IsValid(char:GetPlayer())) then
|
|
timer.Remove(timerName)
|
|
return
|
|
end
|
|
|
|
local cooldownTime = char:GetTrashCooldownTime()
|
|
if (cooldownTime > 0) then
|
|
-- char is already in cooldown
|
|
char:SetTrashCooldownTime(cooldownTime - 1)
|
|
char:SetTrashCooldownWindowAttempts(0)
|
|
timerWindow = 0
|
|
return
|
|
end
|
|
|
|
local attempts = char:GetTrashCooldownWindowAttempts()
|
|
local attemptsMax = ix.config.Get("Trash Cooldown Threshold")
|
|
if (attempts >= attemptsMax) then
|
|
local ply = char:GetPlayer()
|
|
if (!IsValid(ply)) then
|
|
-- shouldn't happen here but we should check anyways
|
|
return
|
|
end
|
|
|
|
local windowTime = ix.config.Get("Trash Cooldown Window")
|
|
if (timerWindow < windowTime) then
|
|
-- attempts > max and within the window means we're putting the char on cooldown
|
|
local cooldown = ix.config.Get("Trash Cooldown Time")
|
|
char:SetTrashCooldownTime(cooldown)
|
|
|
|
ply:NotifyLocalized("You have been put in cooldown for searching through trash.")
|
|
char:SetTrashCooldownWindowAttempts(0)
|
|
|
|
return
|
|
end
|
|
|
|
char:SetTrashCooldownWindowAttempts(0) -- reset back to zero because we're outside the window
|
|
char:SetTrashCooldownTime(0) -- reset back to zero because char should not be in cooldown
|
|
end
|
|
end)
|
|
end
|
|
end
|