Вопрос Код

  • 31
  • 0
Контакты для связи отсутствуют.
Как в этом коде (ниже) сделать так, чтобы при использовании команды отправлялось сообщение вроде "Запрашиваю информацию о гражданине (таком то)"
И можно ли сделать, чтобы команда использовалась не по имени игрока, а по CID-номеру? (helix)

do
local COMMAND = {}
COMMAND.description = "View a citizen's data"
COMMAND.arguments = {ix.type.player}
COMMAND.argumentNames = {"Citizen"}
function COMMAND:OnRun(client, ply)
if (!client:IsCombine()) then
client:Notify("You cannot use this command")
elseif ply:IsCombine() then client:Notify("You cannot view a unit's data") else
local char = ply:GetCharacter()
local civRecord = char:GetRecord() or {}
local points = {
lp = char:GetData("lp", 0),
vp = char:GetData("vp", 0)
}
client:EmitSound("buttons/combine_button3.wav")
netstream.Start(client, "PDAUse", {ply, civRecord, points})
end
end
ix.command.Add("ViewData", COMMAND)
end
 
  • 47
  • 1
  • 5
Контакты для связи отсутствуют.
Для отправки сообщения при использовании команды можно добавить строку кода перед началом выполнения основной функции OnRun:
Less:
client:Notify("Запрашиваю информацию о гражданине " .. ply:GetName())
Это добавит уведомление, которое включает имя игрока, о котором запрашивается информация.

Чтобы использовать команду по CID-номеру, вместо аргумента ix.type.player нужно использовать аргумент ix.type.character, а затем извлечь игрока из персонажа:
Lua:
COMMAND.arguments = {ix.type.character}
COMMAND.argumentNames = {"Citizen"}
function COMMAND:OnRun(client, character)
    local ply = character:GetPlayer()
    if (!ply) then
        client:Notify("This character does not belong to a player")
        return
    end
    
    -- Оставшаяся часть кода здесь
end
Это позволит использовать команду с персонажами вместо игроков, включая персонажей, которые не принадлежат игрокам (например, NPC или объекты).
 
  • 31
  • 0
Контакты для связи отсутствуют.
Для отправки сообщения при использовании команды можно добавить строку кода перед началом выполнения основной функции OnRun:
Less:
client:Notify("Запрашиваю информацию о гражданине " .. ply:GetName())
Это добавит уведомление, которое включает имя игрока, о котором запрашивается информация.
А можно ли сделать так, чтобы от моего лица отправлялось сообщение?
 
  • 31
  • 0
Контакты для связи отсутствуют.
И еще вопрос. Можно ли сделать в этом коде, чтобы при добавлении очков лояльности тоже отправлялось сообщение?

Вроде вот он:
net.Receive("Record",function(_, ply)
if ply:IsCombine() then
local Citizen = net.ReadEntity()
local type = net.ReadString()
local reason = net.ReadString()
local points = net.ReadInt(32)
local char = Citizen:GetCharacter()
char:AddRecord(type, reason, points)
end
end)
net.Receive("RecordRequest",function(_, play)
local ply = net.ReadEntity()
local char = ply:GetCharacter()
local record = char:GetRecord() or {}
local lp = char:GetData("lp", 0)
local vp = char:GetData("vp", 0)
if record then
net.Start("RecordRequest")
net.WriteTable(record)
net.WriteInt(lp, 32)
net.WriteInt(vp, 32)
net.Send(play)
end
end)
net.Receive("RecordRemove",function(_, send)
if send:IsCombine() then
local ply = net.ReadEntity()
local type = net.ReadString()
local record = net.ReadString()
local points = net.ReadInt(32)
local char = ply:GetCharacter()
char:RemoveRecord(type, record, points)
end
end)
 
  • 47
  • 1
  • 5
Контакты для связи отсутствуют.
А можно ли сделать так, чтобы от моего лица отправлялось сообщение?
Да, вы можете изменить команду, чтобы сообщение отправлялось от вашего имени. Для этого вместо вызова функции "client:Notify" вы можете вызвать функцию "ix.util.Notify", передав ей параметром вашего игрока.

Например, замените строку
Less:
client:Notify("Запрашиваю информацию о гражданине " .. ply:GetName())
на
Less:
ix.util.Notify(your_player, "Запрашиваю информацию о гражданине " .. ply:GetName())
Где your_player это переменная, содержащая вашего игрока. Таким образом, сообщение будет отправлено от вашего имени.
 
  • 47
  • 1
  • 5
Контакты для связи отсутствуют.
И еще вопрос. Можно ли сделать в этом коде, чтобы при добавлении очков лояльности тоже отправлялось сообщение?

Вроде вот он:
net.Receive("Record",function(_, ply)
if ply:IsCombine() then
local Citizen = net.ReadEntity()
local type = net.ReadString()
local reason = net.ReadString()
local points = net.ReadInt(32)
local char = Citizen:GetCharacter()
char:AddRecord(type, reason, points)
end
end)
net.Receive("RecordRequest",function(_, play)
local ply = net.ReadEntity()
local char = ply:GetCharacter()
local record = char:GetRecord() or {}
local lp = char:GetData("lp", 0)
local vp = char:GetData("vp", 0)
if record then
net.Start("RecordRequest")
net.WriteTable(record)
net.WriteInt(lp, 32)
net.WriteInt(vp, 32)
net.Send(play)
end
end)
net.Receive("RecordRemove",function(_, send)
if send:IsCombine() then
local ply = net.ReadEntity()
local type = net.ReadString()
local record = net.ReadString()
local points = net.ReadInt(32)
local char = ply:GetCharacter()
char:RemoveRecord(type, record, points)
end
end)
Да, можно изменить этот код, чтобы отправлялось сообщение при добавлении очков лояльности. Для этого вы можете вызвать функцию "ply:Notify" внутри функции "char:AddRecord" с параметром, содержащим сообщение, которое вы хотите отправить.

Например, вы можете изменить функцию "char:AddRecord" следующим образом:
Lua:
function ix.charmeta:AddRecord(type, reason, points)
   local record = self:GetRecord() or {}
   if (record[type]) then
      record[type].reason = reason
      record[type].points = record[type].points + points
   else
      record[type] = {
         reason = reason,
         points = points
      }
   end
   self:SetData("lp", record["loyalty"].points)
   self:SetData("vp", record["visage"].points)
  
   -- отправляем уведомление игроку
   local message = "Вы получили " .. points .. " очков лояльности за " .. reason
   self:GetPlayer():Notify(message)
  
   self:SetRecord(record)
end
Здесь мы добавляем вызов функции "ply:Notify" с сообщением о добавлении очков лояльности, после установки записи в объекте персонажа. Кроме того, мы используем метод "self:GetPlayer()" для получения игрока, соответствующего этому персонажу, и отправляем уведомление ему.
 
  • 31
  • 0
Контакты для связи отсутствуют.
Да, можно изменить этот код, чтобы отправлялось сообщение при добавлении очков лояльности. Для этого вы можете вызвать функцию "ply:Notify" внутри функции "char:AddRecord" с параметром, содержащим сообщение, которое вы хотите отправить.

Например, вы можете изменить функцию "char:AddRecord" следующим образом:
Lua:
function ix.charmeta:AddRecord(type, reason, points)
   local record = self:GetRecord() or {}
   if (record[type]) then
      record[type].reason = reason
      record[type].points = record[type].points + points
   else
      record[type] = {
         reason = reason,
         points = points
      }
   end
   self:SetData("lp", record["loyalty"].points)
   self:SetData("vp", record["visage"].points)
 
   -- отправляем уведомление игроку
   local message = "Вы получили " .. points .. " очков лояльности за " .. reason
   self:GetPlayer():Notify(message)
 
   self:SetRecord(record)
end
Здесь мы добавляем вызов функции "ply:Notify" с сообщением о добавлении очков лояльности, после установки записи в объекте персонажа. Кроме того, мы используем метод "self:GetPlayer()" для получения игрока, соответствующего этому персонажу, и отправляем уведомление ему.
И ещё, можно ли отправлять это сообщение от лица того, кто зачисляет очки лояльности? Что-то вроде "Центр, зачислите очки лояльности гражданину __, причина ___, количество___
Именно при начислении лояльности, при начислении очков нарушений должно отправляться другое сообщение
 
  • 47
  • 1
  • 5
Контакты для связи отсутствуют.
И ещё, можно ли отправлять это сообщение от лица того, кто зачисляет очки лояльности? Что-то вроде "Центр, зачислите очки лояльности гражданину __, причина ___, количество___
Именно при начислении лояльности, при начислении очков нарушений должно отправляться другое сообщение
Да, можно отправить сообщение от лица того, кто зачисляет очки лояльности. Для этого воспользуйтесь функцией ix.log.Add(), передав в нее клиента, который начисляет очки лояльности (то есть клиент, вызвавший функцию OnRun), в качестве первого аргумента, а также соответствующую информацию в тексте сообщения.

Например, следующий код добавляет сообщение о начислении очков лояльности от лица игрока-комбината, который выполнил команду:
Lua:
do
    local COMMAND = {}
    COMMAND.description = "Add loyalty points to a citizen"
    COMMAND.arguments = {
        ix.type.player,
        ix.type.number,
        ix.type.string
    }
    COMMAND.argumentNames = {
        "Citizen",
        "Points",
        "Reason"
    }
    function COMMAND:OnRun(client, ply, points, reason)
        if not client:IsCombine() then
            client:Notify("You cannot use this command")
            return
        end

        if ply:IsCombine() then
            client:Notify("You cannot modify a unit's data")
            return
        end

        local char = ply:GetCharacter()
        char:AddRecord("lp", reason, points)

        -- Add log message
        ix.log.Add(client, "added " .. points .. " loyalty points to " .. ply:GetName() ..
            " for reason \"" .. reason .. "\"")

        ply:Notify("You have received " .. points .. " loyalty points for reason \"" .. reason .. "\"")
        client:EmitSound("buttons/combine_button3.wav")
    end
    ix.command.Add("AddLP", COMMAND)
end
Аналогичным образом можно добавить сообщение при начислении очков нарушения (например, с использованием функции ix.log.Add() или net.Start() и net.Send()) в соответствующем блоке кода.
 
Сверху Снизу