mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
158 lines
3.2 KiB
Lua
158 lines
3.2 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
|
|
|
|
PLUGIN.name = "Spawns"
|
|
PLUGIN.description = "Points d'apparition pour les factions et les classes."
|
|
PLUGIN.author = "Chessnut"
|
|
PLUGIN.spawns = PLUGIN.spawns or {}
|
|
|
|
function PLUGIN:PlayerLoadout(client)
|
|
local character = client:GetCharacter()
|
|
|
|
if (self.spawns and !table.IsEmpty(self.spawns) and character) then
|
|
local class = character:GetClass()
|
|
local points
|
|
local className = "default"
|
|
|
|
for k, v in ipairs(ix.faction.indices) do
|
|
if (k == client:Team()) then
|
|
points = self.spawns[v.uniqueID] or {}
|
|
|
|
break
|
|
end
|
|
end
|
|
|
|
if (points) then
|
|
for _, v in ipairs(ix.class.list) do
|
|
if (class == v.index) then
|
|
className = v.uniqueID
|
|
|
|
break
|
|
end
|
|
end
|
|
|
|
points = points[className] or points["default"]
|
|
|
|
if (points and !table.IsEmpty(points)) then
|
|
local position = table.Random(points)
|
|
|
|
client:SetPos(position)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PLUGIN:LoadData()
|
|
self.spawns = self:GetData() or {}
|
|
end
|
|
|
|
function PLUGIN:SaveSpawns()
|
|
self:SetData(self.spawns)
|
|
end
|
|
|
|
ix.command.Add("SpawnAdd", {
|
|
description = "@cmdSpawnAdd",
|
|
privilege = "Manage Spawn Points",
|
|
adminOnly = true,
|
|
arguments = {
|
|
ix.type.string,
|
|
bit.bor(ix.type.text, ix.type.optional)
|
|
},
|
|
OnRun = function(self, client, name, class)
|
|
local info = ix.faction.indices[name:lower()]
|
|
local info2
|
|
local faction
|
|
|
|
if (!info) then
|
|
for _, v in ipairs(ix.faction.indices) do
|
|
if (ix.util.StringMatches(v.uniqueID, name) or ix.util.StringMatches(L(v.name, client), name)) then
|
|
faction = v.uniqueID
|
|
info = v
|
|
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
if (info) then
|
|
if (class and class != "") then
|
|
local found = false
|
|
|
|
for _, v in ipairs(ix.class.list) do
|
|
if (v.faction == info.index and
|
|
(v.uniqueID:lower() == class:lower() or ix.util.StringMatches(L(v.name, client), class))) then
|
|
class = v.uniqueID
|
|
info2 = v
|
|
found = true
|
|
|
|
break
|
|
end
|
|
end
|
|
|
|
if (!found) then
|
|
return "@invalidClass"
|
|
end
|
|
else
|
|
class = "default"
|
|
end
|
|
|
|
PLUGIN.spawns[faction] = PLUGIN.spawns[faction] or {}
|
|
PLUGIN.spawns[faction][class] = PLUGIN.spawns[faction][class] or {}
|
|
|
|
table.insert(PLUGIN.spawns[faction][class], client:GetPos())
|
|
|
|
PLUGIN:SaveSpawns()
|
|
|
|
name = L(info.name, client)
|
|
|
|
if (info2) then
|
|
name = name .. " (" .. L(info2.name, client) .. ")"
|
|
end
|
|
|
|
return "@spawnAdded", name
|
|
else
|
|
return "@invalidFaction"
|
|
end
|
|
end
|
|
})
|
|
|
|
ix.command.Add("SpawnRemove", {
|
|
description = "@cmdSpawnRemove",
|
|
privilege = "Manage Spawn Points",
|
|
adminOnly = true,
|
|
arguments = bit.bor(ix.type.number, ix.type.optional),
|
|
OnRun = function(self, client, radius)
|
|
radius = radius or 120
|
|
|
|
local position = client:GetPos()
|
|
local i = 0
|
|
|
|
for _, v in pairs(PLUGIN.spawns) do
|
|
for _, v2 in pairs(v) do
|
|
for k3, v3 in pairs(v2) do
|
|
if (v3:Distance(position) <= radius) then
|
|
v2[k3] = nil
|
|
i = i + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (i > 0) then
|
|
PLUGIN:SaveSpawns()
|
|
end
|
|
|
|
return "@spawnDeleted", i
|
|
end
|
|
})
|