Вообщем есть система. Вроде всё правильно, но при вводе команды delol ничего не происходит.
Помогите исправить
Помогите исправить
Серверная часть:
-- Серверная часть скрипта
util.AddNetworkString("GetPlayerInfo")
util.AddNetworkString("OpenPlayerInfo")
-- Функция для получения информации об игроке из файла
local function GetPlayerInfo(target, ply)
local path = "player_info/" .. target .. ".txt"
if not file.Exists(path, "DATA") then return end
local info = {}
info.steamid = target
info.job = file.Read("player_info/" .. target .. ".txt", "DATA")
info.notes = ""
net.Start("OpenPlayerInfo")
net.WriteTable(info)
net.Send(ply)
end
-- Функция для сохранения информации об игроке в файл
function SavePlayerInfoPD(target, job, notes)
local path = "player_info/" .. target .. ".txt"
file.Write(path, job)
end
-- Серверная функция для проверки профессии игрока
function CanEditPlayerInfoPD(ply)
local team = ply:Team()
return team == TEAM_GENERAL or team == TEAM_CHIEF
end
-- Серверная функция для обработки изменения личного дела игрока
net.Receive("SavePlayerInfo", function(len, ply)
if not CanEditPlayerInfoPD(ply) then return end
local target = net.ReadString()
local job = net.ReadString()
local notes = net.ReadString()
SavePlayerInfoPD(target, job, notes)
end)
-- Сетевое сообщение для получения информации об игроке
net.Receive("GetPlayerInfo", function(len, ply)
if not CanEditPlayerInfoPD(ply) then return end
local target = net.ReadString()
GetPlayerInfo(target, ply)
end)
Клиенсткая часть:
-- Клиентская часть скрипта
surface.CreateFont("PlayerInfoTitle", {
font = "Arial",
size = 24,
weight = 500
})
surface.CreateFont("PlayerInfoText", {
font = "Arial",
size = 18,
weight = 400
})
-- Функция для создания Derma меню с информацией об игроке
local function CreatePlayerInfoMenu(info)
local frame = vgui.Create("DFrame")
frame:SetSize(400, 300)
frame:Center()
frame:SetTitle("Личное дело")
frame:SetVisible(true)
frame:SetDraggable(false)
frame:ShowCloseButton(true)
frame:MakePopup()
local title = vgui.Create("DLabel", frame)
title:SetPos(10, 30)
title:SetFont("PlayerInfoTitle")
title:SetText(info.name)
title:SizeToContents()
local jobLabel = vgui.Create("DLabel", frame)
jobLabel:SetPos(10, 70)
jobLabel:SetFont("PlayerInfoText")
jobLabel:SetText("Работа: " .. info.job)
jobLabel:SizeToContents()
local steamidLabel = vgui.Create("DLabel", frame)
steamidLabel:SetPos(10, 100)
steamidLabel:SetFont("PlayerInfoText")
steamidLabel:SetText("Steam ID: " .. info.steamid)
steamidLabel:SizeToContents()
local notesLabel = vgui.Create("DLabel", frame)
notesLabel:SetPos(10, 130)
notesLabel:SetFont("PlayerInfoText")
notesLabel:SetText("Примечания: " .. info.notes)
notesLabel:SizeToContents()
if CanEditPlayerInfo(LocalPlayer()) then
local editButton = vgui.Create("DButton", frame)
editButton:SetPos(10, 200)
editButton:SetSize(100, 30)
editButton:SetText("Изменить")
editButton.DoClick = function()
local editFrame = vgui.Create("DFrame")
editFrame:SetSize(300, 200)
editFrame:Center()
editFrame:SetTitle("Изменить личное дело")
editFrame:SetVisible(true)
editFrame:SetDraggable(false)
editFrame:ShowCloseButton(true)
editFrame:MakePopup()
local jobLabel = vgui.Create("DLabel", editFrame)
jobLabel:SetPos(10, 30)
jobLabel:SetFont("PlayerInfoText")
jobLabel:SetText("Должность:")
jobLabel:SizeToContents()
local jobEntry = vgui.Create("DTextEntry", editFrame)
jobEntry:SetPos(10, 50)
jobEntry:SetSize(280, 20)
jobEntry:SetText(info.job)
local notesLabel = vgui.Create("DLabel", editFrame)
notesLabel:SetPos(10, 80)
notesLabel:SetFont("PlayerInfoText")
notesLabel:SetText("Примечания:")
notesLabel:SizeToContents()
local notesEntry = vgui.Create("DTextEntry", editFrame)
notesEntry:SetPos(10, 100)
notesEntry:SetSize(280, 20)
notesEntry:SetText(info.notes)
local saveButton = vgui.Create("DButton", editFrame)
saveButton:SetPos(10, 150)
saveButton:SetSize(100, 30)
saveButton:SetText("Сохранить")
saveButton.DoClick = function()
net.Start("SavePlayerInfo")
net.WriteString(info.steamid)
net.WriteString(jobEntry:GetValue())
net.WriteString(notesEntry:GetValue())
net.SendToServer()
editFrame:Close()
end
end
end
end
-- Сетевое сообщение для получения информации об игроке
net.Receive("OpenPlayerInfo", function()
local info = net.ReadTable()
CreatePlayerInfoMenu(info)
end)
concommand.Add("delol", function(ply, cmd, args)
if not args[1] then return end
net.Start("GetPlayerInfo")
net.WriteString(args[1])
net.SendToServer()
end)