Files
mmkrp_2026/gamemodes/darkrp/gamemode/modules/chat/sh_chatcommands.lua
2026-03-15 14:54:49 +03:00

217 lines
5.2 KiB
Lua

local plyMeta = FindMetaTable("Player")
DarkRP.chatCommands = DarkRP.chatCommands or {}
local validChatCommand = {
command = isstring,
description = isstring,
condition = fn.FOr{fn.Curry(fn.Eq, 2)(nil), isfunction},
delay = isnumber,
tableArgs = fn.FOr{fn.Curry(fn.Eq, 2)(nil), isbool},
}
local checkChatCommand = function(tbl)
for k in pairs(validChatCommand) do
if not validChatCommand[k](tbl[k]) then
return false, k
end
end
return true
end
function DarkRP.declareChatCommand(tbl)
local valid, element = checkChatCommand(tbl)
if not valid then
DarkRP.error("Incorrect chat command! " .. element .. " is invalid!", 2)
end
tbl.command = string.lower(tbl.command)
DarkRP.chatCommands[tbl.command] = DarkRP.chatCommands[tbl.command] or tbl
for k, v in pairs(tbl) do
DarkRP.chatCommands[tbl.command][k] = v
end
end
function DarkRP.removeChatCommand(command)
DarkRP.chatCommands[string.lower(command)] = nil
end
function DarkRP.chatCommandAlias(command, ...)
local name
for k, v in ipairs{...} do
name = string.lower(v)
DarkRP.chatCommands[name] = {command = name}
setmetatable(DarkRP.chatCommands[name], {
__index = DarkRP.chatCommands[command]
})
end
end
function DarkRP.getChatCommand(command)
return DarkRP.chatCommands[string.lower(command)]
end
function DarkRP.getChatCommands()
return DarkRP.chatCommands
end
function DarkRP.getSortedChatCommands()
local tbl = fn.Compose{table.ClearKeys, table.Copy, DarkRP.getChatCommands}()
table.SortByMember(tbl, "command", true)
return tbl
end
-- chat commands that have been defined, but not declared
DarkRP.getIncompleteChatCommands = fn.Curry(fn.Filter, 3)(fn.Compose{fn.Not, checkChatCommand})(DarkRP.chatCommands)
--[[---------------------------------------------------------------------------
Chat commands
---------------------------------------------------------------------------]]
DarkRP.declareChatCommand{
command = "pm",
description = "Send a private message to someone.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "w",
description = "Say something in whisper voice.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "y",
description = "Yell something out loud.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "me",
description = "Chat roleplay to say you're doing things that you can't show otherwise.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "/",
description = "Global server chat.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "a",
description = "Global server chat.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "ooc",
description = "Global server chat.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "broadcast",
description = "Broadcast something as a mayor.",
delay = 1.5,
condition = plyMeta.isMayor
}
DarkRP.declareChatCommand{
command = "channel",
description = "Tune into a radio channel.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "radio",
description = "Say something through the radio.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "g",
description = "Group chat.",
delay = 1.5
}
DarkRP.declareChatCommand{
command = "credits",
description = "Send the DarkRP credits to someone.",
delay = 1.5
}
local function init()
if not DarkRP then
MsgC(Color(255,0,0), "DarkRP Classic Advert tried to run, but DarkRP wasn't declared!\n")
return
end
DarkRP.removeChatCommand("advert")
DarkRP.declareChatCommand({
command = "advert",
description = "Displays an advertisement to everyone in chat.",
delay = 1.5
})
if SERVER then
DarkRP.defineChatCommand("advert",function(ply,args)
if args == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", "argument", ""))
return ""
end
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", "argument", ""))
return
end
for k,v in pairs(player.GetAll()) do
local col = team.GetColor(ply:Team())
DarkRP.talkToPerson(v, col, "[Реклама] " .. ply:Nick(), Color(255, 255, 0, 255), text, ply)
end
end
hook.Call("playerAdverted", nil, ply, args)
return args, DoSay
end, 1.5)
else
DarkRP.addChatReceiver("/advert", "advertise", function(ply) return true end)
end
end
if SERVER then
if #player.GetAll() > 0 then
init()
else
hook.Add("PlayerInitialSpawn", "dfca-load", init)
end
else
hook.Add("InitPostEntity", "dfca-load", init)
end
if SERVER then
local function Roll(ply, args)
local DoSay = function()
if GAMEMODE.Config.alltalk then
for _, target in pairs(player.GetAll()) do
DarkRP.talkToPerson(target, team.GetColor(ply:Team()), ply:Nick().. " выпало " ..math.random(1,100).." из 100.")
end
else
DarkRP.talkToRange(ply, ply:Nick().. " выпало " ..math.random(1,100).." из 100.", "", 250)
end
end
return args, DoSay
end
DarkRP.defineChatCommand("roll", Roll, 1.5)
DarkRP.declareChatCommand{
command = "roll",
description = "write an roll",
delay = 1.5
}
end