local PLUGIN = PLUGIN -- Таблица для хранения кулдаунов PLUGIN.disguiseCooldowns = PLUGIN.disguiseCooldowns or {} -- Снятие маскировки function PLUGIN:RemoveDisguise(client) if not IsValid(client) then return end local character = client:GetCharacter() if not character then return end -- Возвращаем оригинальную модель local originalModel = character:GetModel() client:SetModel(originalModel) -- Удаляем флаг маскировки character:SetData("disguised", false) character:SetData("disguiseModel", nil) -- Устанавливаем кулдаун self.disguiseCooldowns[client:SteamID64()] = CurTime() + self.disguiseCooldown client:Notify("Маскировка снята! Вы не сможете переодеться в течение 10 минут.") end -- Проверка кулдауна function PLUGIN:CanUseDisguise(client) local steamID = client:SteamID64() local cooldown = self.disguiseCooldowns[steamID] if cooldown and CurTime() < cooldown then local remaining = math.ceil(cooldown - CurTime()) local minutes = math.floor(remaining / 60) local seconds = remaining % 60 return false, string.format("Переодеться можно через %d:%02d", minutes, seconds) end return true end -- Хук на получение урона function PLUGIN:EntityTakeDamage(target, dmg) if not IsValid(target) or not target:IsPlayer() then return end local character = target:GetCharacter() if not character then return end -- Проверяем, в маскировке ли игрок if character:GetData("disguised") then self:RemoveDisguise(target) end end -- Хук на взятие оружия в руки function PLUGIN:PlayerSwitchWeapon(client, oldWeapon, newWeapon) if not IsValid(client) or not IsValid(newWeapon) then return end local character = client:GetCharacter() if not character then return end -- Проверяем, в маскировке ли игрок if character:GetData("disguised") then self:RemoveDisguise(client) end end -- Отправка данных украденного военного билета net.Receive("ixDisguise_ShowStolenID", function(len, client) local targetID = net.ReadUInt(16) local itemID = net.ReadUInt(32) local target = Player(targetID) if not IsValid(target) or target:GetPos():Distance(client:GetPos()) > 200 then client:Notify("Игрок слишком далеко!") return end local item = ix.item.instances[itemID] if not item or item.player ~= client then return end -- Отправляем данные документа целевому игроку local data = { name = item:GetData("name", "Неизвестно"), faction = item:GetData("faction", "Неизвестно"), subdivision = item:GetData("subdivision", "Неизвестно"), specialization = item:GetData("specialization", "Неизвестно"), rank = item:GetData("rank", "Неизвестно") } net.Start("ixDisguise_ViewStolenID") net.WriteTable(data) net.Send(target) client:Notify("Вы предъявили военный билет игроку " .. target:Name()) target:Notify(client:Name() .. " предъявил вам военный билет") end)