217 lines
5.2 KiB
Lua
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
|