Physgun Wiki

Как добавить чат-команду

Чат-команды регистрируются через roleplay.Chat.AddCommand, а не стандартный concommand.Add: перехват идёт в GM:PlayerSay, ищет сообщения вида /команда аргументы.

1. Регистрация

Общий (sh_) или серверный файл, команда работает только на сервере:

roleplay.Chat.AddCommand('heal', function(sender, arguments, noCommand) local target = tonumber(arguments[1]) and Player(tonumber(arguments[1])) or sender if !IsValid(target) then sender:SendChat(Color(255, 69, 69), "Игрок не найден") return end target:SetHealth(target:GetMaxHealth()) sender:SendChat(Color(69, 255, 69), "Вылечено: " .. target:Nick()) end)

arguments — массив слов после команды (string.Explode), noCommand — тот же хвост одной строкой, удобно для команд со свободным текстом (типа /motd текст объявления).

2. Сообщения через SendChat

PLAYER:SendChat — не PrintMessage и не chat.AddText на сервере, а собственная сеть геймода. Красит текст Color-аргументами вперемешку со строками:

sender:SendChat(Color(69, 255, 69), "Успех: ", Color(255, 255, 255), target:Nick())

3. Локализация

Готовые строки лежат в gamemode/lang.lua (GM.Lang), используются как GAMEMODE.Lang['Ключ']string.format для подстановок):

-- lang.lua GM.Lang['HealSuccess'] = "Вылечено: %s" -- команда sender:SendChat(Color(69, 255, 69), string.format(GAMEMODE.Lang['HealSuccess'], target:Nick()))

4. Запрет команды по условию

Через блокирующий хук OnPlayerChatCommand, не трогая саму команду:

hook.Add("OnPlayerChatCommand", "NoHealInCombat", function(sender, command, arguments, noCmd) if command == "heal" and sender.InCombat then return false end end)