mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
230 lines
5.5 KiB
Lua
230 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 PLUGIN = PLUGIN
|
||
|
|
|
||
|
|
util.AddNetworkString("ixPTSync")
|
||
|
|
util.AddNetworkString("ixPTCreate")
|
||
|
|
util.AddNetworkString("ixPTDelete")
|
||
|
|
util.AddNetworkString("ixPTJoin")
|
||
|
|
util.AddNetworkString("ixPTLeave")
|
||
|
|
util.AddNetworkString("ixPTOwner")
|
||
|
|
util.AddNetworkString("ixPTReassign")
|
||
|
|
|
||
|
|
function PLUGIN:CreateTeam(client, index, bNetworked, bNoNotif)
|
||
|
|
if (IsValid(client) and client:GetNetVar("ProtectionTeam")) then
|
||
|
|
return "@AlreadyHasTeam"
|
||
|
|
end
|
||
|
|
|
||
|
|
if (self.teams[index]) then
|
||
|
|
return "@TeamAlreadyExists", tostring(index)
|
||
|
|
end
|
||
|
|
|
||
|
|
if (index > 99 or index < 1) then
|
||
|
|
return "@TeamMustClamp"
|
||
|
|
end
|
||
|
|
|
||
|
|
self.teams[index] = {
|
||
|
|
owner = client,
|
||
|
|
members = {client}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (IsValid(client)) then
|
||
|
|
client:SetNetVar("ProtectionTeam", index)
|
||
|
|
client:SetNetVar("ProtectionTeamOwner", true)
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTCreate")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.WriteEntity(client)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnCreateTeam", client, index)
|
||
|
|
|
||
|
|
if (!bNoNotif) then
|
||
|
|
ix.combineNotify:AddNotification("NTC:// " .. client:GetCombineTag() .. " has established Protection-Team " .. index, Color(0, 145, 255, 255))
|
||
|
|
end
|
||
|
|
|
||
|
|
return "@TeamCreated", tostring(index)
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:ReassignTeam(index, newIndex, bNetworked)
|
||
|
|
if (newIndex > 99 or newIndex < 1) then
|
||
|
|
return "@TeamMustClamp"
|
||
|
|
end
|
||
|
|
|
||
|
|
if (self.teams[newIndex]) then
|
||
|
|
return "@TeamAlreadyExists", tostring(index)
|
||
|
|
end
|
||
|
|
|
||
|
|
local curTeam = self.teams[index]
|
||
|
|
|
||
|
|
self:DeleteTeam(index, true, true)
|
||
|
|
|
||
|
|
self:CreateTeam(curTeam["owner"], newIndex, true, true)
|
||
|
|
|
||
|
|
self.teams[newIndex]["members"] = curTeam["members"]
|
||
|
|
|
||
|
|
for _, client in pairs(curTeam["members"]) do
|
||
|
|
client:SetNetVar("ProtectionTeam", newIndex)
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTReassign")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.WriteUInt(newIndex, 8)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnReassignTeam", index, newIndex)
|
||
|
|
|
||
|
|
ix.combineNotify:AddNotification("NTC:// Protection-Team " .. index .. " re-assigned as Protection-Team " .. newIndex, Color(0, 145, 255, 255))
|
||
|
|
|
||
|
|
return "@TeamReassigned", tostring(index), tostring(newIndex)
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:SetTeamOwner(index, client, bNetworked)
|
||
|
|
local curOwner = self.teams[index]["owner"]
|
||
|
|
|
||
|
|
if (IsValid(curOwner)) then
|
||
|
|
curOwner:SetNetVar("ProtectionTeamOwner", nil)
|
||
|
|
end
|
||
|
|
|
||
|
|
self.teams[index]["owner"] = client
|
||
|
|
|
||
|
|
if (IsValid(client)) then
|
||
|
|
client:SetNetVar("ProtectionTeamOwner", true)
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTOwner")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.WriteEntity(client)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnSetTeamOwner", client, index)
|
||
|
|
|
||
|
|
if (IsValid(client)) then
|
||
|
|
ix.combineNotify:AddNotification("NTC:// " .. client:GetCombineTag() .. " designated as Protection-Team " .. index .. " Leader", Color(0, 145, 255, 255))
|
||
|
|
return "@TeamOwnerSet", client:GetName()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:DeleteTeam(index, bNetworked, bNoNotif)
|
||
|
|
self.teams[index] = nil
|
||
|
|
|
||
|
|
for _, client in pairs(self:GetReceivers()) do
|
||
|
|
if (client:GetNetVar("ProtectionTeam") == index) then
|
||
|
|
client:SetNetVar("ProtectionTeam", nil)
|
||
|
|
|
||
|
|
if (client:GetNetVar("ProtectionTeamOwner")) then
|
||
|
|
client:SetNetVar("ProtectionTeamOwner", nil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTDelete")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!bNoNotif) then
|
||
|
|
ix.combineNotify:AddNotification("NTC:// Protection-Team " .. index .. " has been disbanded", Color(0, 145, 255, 255))
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnDeleteTeam", index)
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:JoinTeam(client, index, bNetworked)
|
||
|
|
if (client:GetNetVar("ProtectionTeam")) then
|
||
|
|
return "@TeamMustLeave"
|
||
|
|
end
|
||
|
|
|
||
|
|
if (index > 99 or index < 1) then
|
||
|
|
return "@TeamMustClamp"
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!self.teams[index]) then
|
||
|
|
return "@TeamNonExistent", tostring(index)
|
||
|
|
end
|
||
|
|
|
||
|
|
table.insert(self.teams[index]["members"], client)
|
||
|
|
|
||
|
|
client:SetNetVar("ProtectionTeam", index)
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTJoin")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.WriteEntity(client)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnJoinTeam", client, index)
|
||
|
|
|
||
|
|
ix.combineNotify:AddNotification("NTC:// " .. client:GetCombineTag() .. " has interlocked into Protection-Team " .. index, Color(0, 145, 255, 255))
|
||
|
|
|
||
|
|
return "@JoinedTeam", index
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:LeaveTeam(client, bNetworked)
|
||
|
|
if (!client:GetNetVar("ProtectionTeam")) then
|
||
|
|
return "@NoCurrentTeam"
|
||
|
|
end
|
||
|
|
|
||
|
|
local index = client:GetNetVar("ProtectionTeam")
|
||
|
|
local curTeam = self.teams[index]
|
||
|
|
|
||
|
|
if (curTeam) then
|
||
|
|
table.RemoveByValue(self.teams[index]["members"], client)
|
||
|
|
|
||
|
|
client:SetNetVar("ProtectionTeam", nil)
|
||
|
|
|
||
|
|
if (!bNetworked) then
|
||
|
|
net.Start("ixPTLeave")
|
||
|
|
net.WriteUInt(index, 8)
|
||
|
|
net.WriteEntity(client)
|
||
|
|
net.Send(self:GetReceivers())
|
||
|
|
end
|
||
|
|
|
||
|
|
if (client:GetNetVar("ProtectionTeamOwner")) then
|
||
|
|
self:SetTeamOwner(index, nil)
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Run("OnLeaveTeam", client, index)
|
||
|
|
|
||
|
|
ix.combineNotify:AddNotification("NTC:// " .. client:GetCombineTag() .. " has detached from Protection-Team " .. index, Color(0, 145, 255, 255))
|
||
|
|
|
||
|
|
return "@LeftTeam", index
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:Tick()
|
||
|
|
local curTime = CurTime()
|
||
|
|
|
||
|
|
if (!self.tick or self.tick < curTime) then
|
||
|
|
self.tick = curTime + 30
|
||
|
|
|
||
|
|
for index, teamTbl in pairs(self.teams) do
|
||
|
|
if (table.IsEmpty(teamTbl["members"])) then
|
||
|
|
self:DeleteTeam(index)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:PlayerDisconnected(client)
|
||
|
|
if (client:GetNetVar("ProtectionTeam")) then
|
||
|
|
self:LeaveTeam(client)
|
||
|
|
end
|
||
|
|
end
|