add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,386 @@
ix.util.Include("cl_plugin.lua")
ix.util.Include("sv_plugin.lua")
local PLUGIN = PLUGIN
PLUGIN.name = "Admin Mode"
PLUGIN.author = "Scripty"
PLUGIN.description = "Перекид игрока по команде в админ фракцию"
local accessAdminGroups = {
["superadmin"] = true,
["super admin"] = true,
["projectteam"] = true,
["teh.admin"] = true,
["curator"] = true,
["sudo-curator"] = true,
["asist-sudo"] = true,
["admin"] = true,
["st.admin"] = true,
["ivent"] = true,
["st.event"] = true,
["event"] = true,
["disp"] = true,
["assistant"] = true,
["specadmin"] = true
}
local playerMeta = FindMetaTable("Player")
function playerMeta:IsAdminMode()
return self:GetNetVar("AdminMode", false)
end
local function CanUseAdminMode(ply)
return accessAdminGroups[ply:GetUserGroup()] == true
end
local function CanUseNoclip(ply)
if ply:IsAdminMode() then return true end
if ply:GetUserGroup() == "superadmin" then return true end
return false
end
local function GetWeaponsList(ply)
local list = {}
for _, wep in ipairs(ply:GetWeapons()) do
if IsValid(wep) then
list[#list + 1] = wep:GetClass()
end
end
return list
end
if (SERVER) then
util.AddNetworkString("AdminMode_Groups")
hook.Add("PlayerInitialSpawn", "AdminMode_SendGroups", function(ply)
net.Start("AdminMode_Groups")
net.WriteTable(accessAdminGroups)
net.Send(ply)
end)
function PLUGIN:PlayerDisconnected(ply)
if ply:IsAdminMode() then
local char = ply:GetCharacter()
if char then
local oldFaction = char:GetData("AdminMode_OldFaction")
if oldFaction then char:SetFaction(oldFaction) end
local oldPodr = char:GetData("AdminMode_OldPodr")
if oldPodr then char:SetPodr(oldPodr) end
local oldSpec = char:GetData("AdminMode_OldSpec")
if oldSpec then char:SetSpec(oldSpec) end
local oldRank = char:GetData("AdminMode_OldRank")
if oldRank then char:SetRank(oldRank) end
end
ply:SetNetVar("HideFromTab", false)
ply:SetNetVar("AdminMode", false)
end
end
function PLUGIN:PlayerLoadedCharacter(ply, char)
local squads = ix.plugin.list["squads"]
if ply:IsAdminMode() and squads then
local squad, squadID = squads:GetPlayerSquad(ply)
if squad then
if squad.leader == ply:SteamID() then
squads:DisbandSquad(squadID)
else
squads:LeaveSquad(ply)
end
net.Start("ixSquadSync")
net.WriteString("{}")
net.Send(ply)
end
end
if char:GetFaction() == FACTION_ADMIN and not ply:IsAdminMode() then
local oldFaction = char:GetData("AdminMode_OldFaction")
local oldPodr = char:GetData("AdminMode_OldPodr")
local oldSpec = char:GetData("AdminMode_OldSpec")
local oldRank = char:GetData("AdminMode_OldRank")
if oldFaction then char:SetFaction(oldFaction) end
if oldPodr then char:SetPodr(oldPodr) end
if oldSpec then char:SetSpec(oldSpec) end
if oldRank then char:SetRank(oldRank) end
char:SetData("AdminMode_OldFaction", nil)
char:SetData("AdminMode_OldPodr", nil)
char:SetData("AdminMode_OldSpec", nil)
char:SetData("AdminMode_OldRank", nil)
char:SetData("AdminMode_OldModel", nil)
char:SetData("AdminMode_OldWeapons", nil)
ply:SetNetVar("AdminMode", false)
ply:SetNetVar("HideFromTab", false)
local radio = ix.plugin.list["radio"]
if radio then
radio:SyncRadioState(ply, radio.defaultFrequency, false, false)
end
elseif ply:IsAdminMode() and char:GetFaction() ~= FACTION_ADMIN then
self:ToggleAdminMode(ply)
end
if ply:IsAdminMode() then
local radio = ix.plugin.list["radio"]
if radio then
radio:SyncRadioState(ply, radio.defaultFrequency, false, false)
end
end
end
function PLUGIN:OnCharacterSave(char)
local ply = char:GetPlayer()
if not IsValid(ply) then return end
if ply:IsAdminMode() then
local oldFaction = char:GetData("AdminMode_OldFaction")
if oldFaction then char:SetFaction(oldFaction) end
local oldPodr = char:GetData("AdminMode_OldPodr")
if oldPodr then char:SetPodr(oldPodr) end
local oldSpec = char:GetData("AdminMode_OldSpec")
if oldSpec then char:SetSpec(oldSpec) end
local oldRank = char:GetData("AdminMode_OldRank")
if oldRank then char:SetRank(oldRank) end
ply:SetNetVar("AdminMode", false)
end
end
function PLUGIN:ToggleAdminMode(ply)
if not IsValid(ply) then return end
if not CanUseAdminMode(ply) then
ply:ChatPrint("[!] У вас нет доступа к админ-моду.")
return
end
local char = ply:GetCharacter()
if not char then
ply:ChatPrint("[!] У вас нет активного персонажа.")
return
end
local enable = not ply:IsAdminMode()
ply:SetNetVar("AdminMode", enable)
if enable then
local squads = ix.plugin.list["squads"]
if squads then
local squad, squadID = squads:GetPlayerSquad(ply)
if squad then
if squad.leader == ply:SteamID() then
squads:DisbandSquad(squadID)
else
squads:LeaveSquad(ply)
end
end
end
char:SetData("AdminMode_OldFaction", char:GetFaction())
char:SetData("AdminMode_OldPodr", char:GetPodr())
char:SetData("AdminMode_OldSpec", char:GetSpec())
char:SetData("AdminMode_OldRank", char:GetRank())
char:SetData("AdminMode_OldModel", ply:GetModel())
char:SetData("AdminMode_OldWeapons", GetWeaponsList(ply))
ply:SetModel("models/ft/ft_admin.mdl")
if FACTION_ADMIN then
char:SetFaction(FACTION_ADMIN)
end
ply:GodEnable()
ply:SetNoDraw(true)
ply:SetMoveType(MOVETYPE_NOCLIP)
ply:StripWeapons()
ply:Give("weapon_physgun")
ply:Give("gmod_tool")
ply:Give("ix_hands")
ply:SelectWeapon("ix_hands")
ply:SetNetVar("HideFromTab", true)
ply:ChatPrint("[!] Админ-мод включен.")
else
local oldFaction = char:GetData("AdminMode_OldFaction")
local oldPodr = char:GetData("AdminMode_OldPodr")
local oldSpec = char:GetData("AdminMode_OldSpec")
local oldRank = char:GetData("AdminMode_OldRank")
if oldFaction and char:GetFaction() == FACTION_ADMIN then char:SetFaction(oldFaction) end
if oldPodr then char:SetPodr(oldPodr) end
if oldSpec then char:SetSpec(oldSpec) end
if oldRank then char:SetRank(oldRank) end
local oldModel = char:GetData("AdminMode_OldModel")
if oldModel then
ply:SetModel(oldModel)
end
local oldWeapons = char:GetData("AdminMode_OldWeapons") or {}
ply:StripWeapons()
for _, class in ipairs(oldWeapons) do
ply:Give(class)
end
if ply.sam_uncloak then
ply:sam_uncloak()
end
ply:SetNoDraw(false)
ply:SetRenderMode(RENDERMODE_NORMAL)
ply:SetColor(Color(255, 255, 255, 255))
ply:Fire("alpha", 255, 0)
ply:DrawWorldModel(true)
ply:SetMaterial("")
ply:SetNetVar("ixNoDraw", false)
ply:DrawShadow(true)
ply:SetupHands()
if #oldWeapons == 0 then
ply:Give("ix_hands")
end
ply:GodDisable()
ply:SetMoveType(MOVETYPE_WALK)
local restoredFaction = char:GetFaction()
local class = char:GetClass() or "default"
local spawnPlugin = ix.plugin.list["spawns"]
if spawnPlugin and spawnPlugin.spawns then
local factionTable = ix.faction.indices[restoredFaction]
if factionTable then
local factionID = factionTable.uniqueID
local factionSpawns = spawnPlugin.spawns[factionID]
if factionSpawns then
local className = "default"
for _, v in ipairs(ix.class.list) do
if v.index == class then
className = v.uniqueID
break
end
end
local points = factionSpawns[className] or factionSpawns["default"]
if points and not table.IsEmpty(points) then
local pos = table.Random(points)
timer.Simple(0.1, function()
if IsValid(ply) then
ply:SetPos(pos)
end
end)
end
end
end
end
char:SetData("AdminMode_OldFaction", nil)
char:SetData("AdminMode_OldPodr", nil)
char:SetData("AdminMode_OldSpec", nil)
char:SetData("AdminMode_OldRank", nil)
char:SetData("AdminMode_OldModel", nil)
char:SetData("AdminMode_OldWeapons", nil)
ply:SetNetVar("HideFromTab", false)
local radio = ix.plugin.list["radio"]
if radio then
radio:SyncRadioState(ply, radio.defaultFrequency, false, false)
end
ply:ChatPrint("[!] Админ-мод выключен.")
end
hook.Run("PlayerAdminModeToggled", ply, enable)
end
function PLUGIN:EntityTakeDamage(target, dmg)
if IsValid(target) and target:IsPlayer() and target:IsAdminMode() then
return true
end
local attacker = dmg:GetAttacker()
if IsValid(attacker) and attacker:IsPlayer() and attacker:IsAdminMode() then
return true
end
end
function PLUGIN:OnCharacterVarChanged(char, key, oldValue, newValue)
if (key == "faction") then
local ply = char:GetPlayer()
if (IsValid(ply) and ply:IsAdminMode() and newValue ~= FACTION_ADMIN) then
self:ToggleAdminMode(ply)
end
end
end
function PLUGIN:PlayerNoClip(ply, desiredState)
if not IsValid(ply) then return false end
if CanUseNoclip(ply) then
ply:SetNoDraw(desiredState)
if desiredState then
ply:SetRenderMode(RENDERMODE_NONE)
ply:SetColor(Color(255, 255, 255, 0))
else
ply:SetRenderMode(RENDERMODE_NORMAL)
ply:SetColor(Color(255, 255, 255, 255))
end
if desiredState then
ply:SetNetVar("HideFromTab", true)
ply:SetNetVar("ixNoDraw", true)
else
if not ply:IsAdminMode() then
ply:SetNetVar("HideFromTab", false)
ply:SetNetVar("ixNoDraw", false)
end
end
return true
end
return false
end
ix.command.Add("admin", {
description = "Включить/выключить админ-мод.",
OnRun = function(self, ply)
PLUGIN:ToggleAdminMode(ply)
end
})
ix.command.Add("adm", {
description = "Синоним /admin.",
OnRun = function(self, ply)
PLUGIN:ToggleAdminMode(ply)
end
})
end
CLIENT_ADMIN_GROUPS = CLIENT_ADMIN_GROUPS or {}
if CLIENT then
net.Receive("AdminMode_Groups", function()
CLIENT_ADMIN_GROUPS = net.ReadTable()
end)
end