242 lines
8.1 KiB
Lua
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)
|