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

242 lines
8.1 KiB
Lua

--[[---------------------------------------------------------
Talking
---------------------------------------------------------]]
local function PM(ply, args)
local namepos = string.find(args, " ")
if not namepos then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local name = string.sub(args, 1, namepos - 1)
local msg = string.sub(args, namepos + 1)
if msg == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local target = DarkRP.findPlayer(name)
if target == ply then return "" end
if target then
local col = team.GetColor(ply:Team())
local pname = ply:Nick()
local col2 = color_white
DarkRP.talkToPerson(target, col, "(PM) " .. pname, col2, msg, ply)
DarkRP.talkToPerson(ply, col, "(PM) " .. pname, col2, msg, ply)
else
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("could_not_find", tostring(name)))
end
return ""
end
DarkRP.defineChatCommand("pm", PM, 1.5)
local function Whisper(ply, args)
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
DarkRP.talkToRange(ply, "(" .. DarkRP.getPhrase("whisper") .. ") " .. ply:Nick(), text, GAMEMODE.Config.whisperDistance)
end
return args, DoSay
end
DarkRP.defineChatCommand("w", Whisper, 1.5)
local function Yell(ply, args)
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
DarkRP.talkToRange(ply, "(" .. DarkRP.getPhrase("yell") .. ") " .. ply:Nick(), text, GAMEMODE.Config.yellDistance)
end
return args, DoSay
end
DarkRP.defineChatCommand("y", Yell, 1.5)
local function Me(ply, args)
if args == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
if GAMEMODE.Config.alltalk then
local col = team.GetColor(ply:Team())
local name = ply:Nick()
for _, target in ipairs(player.GetAll()) do
DarkRP.talkToPerson(target, col, name .. " " .. text)
end
else
DarkRP.talkToRange(ply, ply:Nick() .. " " .. text, "", GAMEMODE.Config.meDistance)
end
end
return args, DoSay
end
DarkRP.defineChatCommand("me", Me, 1.5)
local function OOC(ply, args)
if not GAMEMODE.Config.ooc then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("disabled", DarkRP.getPhrase("ooc"), ""))
return ""
end
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local col = team.GetColor(ply:Team())
local col2 = color_white
if not ply:Alive() then
col2 = Color(255, 200, 200, 255)
col = col2
end
local phrase = DarkRP.getPhrase("ooc")
local name = ply:Nick()
for _, v in ipairs(player.GetAll()) do
DarkRP.talkToPerson(v, col, "(" .. phrase .. ") " .. name, col2, text, ply)
end
end
return args, DoSay
end
DarkRP.defineChatCommand("/", OOC, true, 1.5)
DarkRP.defineChatCommand("a", OOC, true, 1.5)
DarkRP.defineChatCommand("ooc", OOC, true, 1.5)
local function MayorBroadcast(ply, args)
if args == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local Team = ply:Team()
if not RPExtraTeams[Team] or not RPExtraTeams[Team].mayor then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("incorrect_job", DarkRP.getPhrase("broadcast")))
return ""
end
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return
end
local col = team.GetColor(ply:Team())
local col2 = Color(170, 0, 0, 255)
local phrase = DarkRP.getPhrase("broadcast")
local name = ply:Nick()
for _, v in ipairs(player.GetAll()) do
DarkRP.talkToPerson(v, col, phrase .. " " .. name, col2, text, ply)
end
end
return args, DoSay
end
DarkRP.defineChatCommand("broadcast", MayorBroadcast, 1.5)
local function SetRadioChannel(ply,args)
local channel = DarkRP.toInt(args)
if channel == nil or channel < 0 or channel > 100 then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), "0<" .. DarkRP.getPhrase("channel") .. "<100"))
return ""
end
DarkRP.notify(ply, 2, 4, DarkRP.getPhrase("channel_set_to_x", args))
ply.RadioChannel = channel
return ""
end
DarkRP.defineChatCommand("channel", SetRadioChannel)
local function SayThroughRadio(ply,args)
if not ply.RadioChannel then ply.RadioChannel = 1 end
local radioChannel = ply.RadioChannel
if not args or args == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return ""
end
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return
end
local col = Color(180, 180, 180, 255)
local phrase = DarkRP.getPhrase("radio_x", radioChannel)
for _, v in ipairs(player.GetAll()) do
if v.RadioChannel == radioChannel then
DarkRP.talkToPerson(v, col, phrase, col, text, ply)
end
end
end
return args, DoSay
end
DarkRP.defineChatCommand("radio", SayThroughRadio, 1.5)
local function GroupMsg(ply, args)
local DoSay = function(text)
if text == "" then
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
return
end
local col = team.GetColor(ply:Team())
local groupChats = {}
for _, func in pairs(GAMEMODE.DarkRPGroupChats) do
-- not the group of the player
if not func(ply) then continue end
table.insert(groupChats, func)
end
if table.IsEmpty(groupChats) then return "" end
local phrase = DarkRP.getPhrase("group")
local name = ply:Nick()
local color = color_white
for _, target in ipairs(player.GetAll()) do
-- The target is in any of the group chats
for _, func in ipairs(groupChats) do
if not func(target, ply) then continue end
DarkRP.talkToPerson(target, col, phrase .. " " .. name, color, text, ply)
break
end
end
end
return args, DoSay
end
DarkRP.defineChatCommand("g", GroupMsg, 0)
-- here's the new easter egg. Easier to find, more subtle, doesn't only credit FPtje and unib5
-- WARNING: DO NOT EDIT THIS
-- You can edit DarkRP but you HAVE to credit the original authors!
-- You even have to credit all the previous authors when you rename the gamemode.
-- local CreditsWait = true
local function GetDarkRPAuthors(ply, args)
local target = DarkRP.findPlayer(args) -- Only send to one player. Prevents spamming
target = IsValid(target) and target or ply
if target ~= ply then
if ply.CreditsWait then DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("wait_with_that")) return "" end
ply.CreditsWait = true
timer.Simple(60, function() if IsValid(ply) then ply.CreditsWait = nil end end) -- so people don't spam it
end
local rf = RecipientFilter()
rf:AddPlayer(target)
if ply ~= target then
rf:AddPlayer(ply)
end
umsg.Start("DarkRP_Credits", rf)
umsg.End()
return ""
end
DarkRP.defineChatCommand("credits", GetDarkRPAuthors, 50)