if SERVER then
-- Добавляем сетевую строку для обмена данными между клиентом и сервером
util.AddNetworkString("ShowPlayerMenu")
-- Хук для обработки нажатия кнопки "E" игроком на другого игрока
hook.Add("PlayerUse", "PlayerInteract", function(ply, ent)
-- Проверяем, является ли цель игроком и нажатие производится администратором
if IsValid(ent) and ent:IsPlayer() and ply:IsAdmin() then
-- Отправляем сетевое сообщение клиенту для открытия меню
net.Start("ShowPlayerMenu")
net.Send(ply)
end
end)
-- Получаем сообщение от клиента о необходимости показать меню для определенного игрока
net.Receive("ShowPlayerMenu", function(len, ply)
local target = net.ReadEntity()
-- Проверяем, является ли цель действительным игроком
if IsValid(target) and target:IsPlayer() then
-- Отправляем сетевое сообщение клиенту для открытия меню
net.Start("ShowPlayerMenu")
net.Send(ply)
end
end)
-- Получаем сообщение от клиента о выбранном действии с игроком
net.Receive("PlayerAction", function(len, ply)
local action = net.ReadString() -- Считываем выбранное действие
local target = net.ReadEntity() -- Считываем цель действия
-- Обрабатываем выбранное действие
if action == "Knockout" then
local knockoutTime = math.random(15, 30) -- Генерируем время оглушения
target:Knockout(knockoutTime) -- Вызываем функцию оглушения у цели
elseif action == "ViewInfo" then
-- Добавьте код для показа информации об игроке
elseif action == "ViewDescription" then
-- Добавьте код для показа описания персонажа
elseif action == "Introduce" then
-- Добавьте код для представления игроков друг другу
end
end)
else
-- Получаем сетевое сообщение от сервера для показа меню действий с игроком
net.Receive("ShowPlayerMenu", function(len)
local target = net.ReadEntity() -- Получаем цель действия
-- Проверяем, является ли цель действительным игроком
if IsValid(target) and target:IsPlayer() then
-- Создаем меню с действиями
local actions = {
{"Вырубить игрока", "Knockout"},
{"Посмотреть информацию", "ViewInfo"},
{"Посмотреть описание персонажа", "ViewDescription"},
{"Познакомиться с игроком", "Introduce"}
}
local menu = DermaMenu() -- Создаем контекстное меню
-- Добавляем каждое действие в меню
for _, action in ipairs(actions) do
-- Добавляем опцию в меню, которая отправит выбранное действие на сервер
menu:AddOption(action[1], function()
net.Start("PlayerAction")
net.WriteString(action[2]) -- Отправляем выбранное действие
net.WriteEntity(target) -- Отправляем цель действия
net.SendToServer() -- Отправляем сообщение на сервер
end)
end
menu:Open() -- Открываем меню
end
end)
end