Files
VnUtest/garrysmod/gamemodes/militaryrp/plugins/chatcontrol/sh_plugin.lua
2026-03-31 10:27:04 +03:00

159 lines
5.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
PLUGIN.name = "Chat Control"
PLUGIN.author = "RefoselDev"
PLUGIN.description = "Удаление ненужных типов чатов"
hook.Add("InitializedChatClasses", "ixChatControl.RemoveChats", function()
ix.chat.classes.it = nil
ix.chat.classes.connect = nil
ix.chat.classes.disconnect = nil
ix.chat.classes.event = nil
ix.chat.Register("rp", {
OnChatAdd = function(self, speaker, text)
local name = IsValid(speaker) and speaker:Name() or "Console"
chat.AddText(Color(26, 221, 0), "[RP] ", name, ": ", text)
end,
prefix = {"/rp", "/RP"},
description = "Чат РП отыгровок",
color = Color(150, 200, 255),
CanHear = function(self, speaker, listener)
return listener:GetCharacter() != nil
end,
deadCanChat = false
})
-- Чат между фракциями
ix.chat.Register("adgl", {
OnChatAdd = function(self, speaker, text)
local name = IsValid(speaker) and speaker:Name() or "Console"
local prefix = "[ФРАКЦИЯ] "
local prefixColor = Color(255, 200, 100)
if (IsValid(speaker) and speaker:GetCharacter()) then
local faction = speaker:GetCharacter():GetFaction()
if (faction == FACTION_RUSSIAN) then
prefix = "[ВС РФ → ВСУ] "
prefixColor = Color(255, 196, 0)
elseif (faction == FACTION_UKRAINE) then
prefix = "[ВСУВС РФ] "
prefixColor = Color(255, 196, 0)
end
end
chat.AddText(prefixColor, prefix, Color(255, 255, 255), name, ": ", text)
end,
prefix = {"/adgl"},
description = "Чат между фракциями",
color = Color(255, 200, 100),
CanHear = function(self, speaker, listener)
-- Слышат только игроки с персонажем и определенной фракцией
if (!listener:GetCharacter()) then
return false
end
local listenerFaction = listener:GetCharacter():GetFaction()
return listenerFaction == FACTION_RUSSIAN or listenerFaction == FACTION_UKRAINE
end,
deadCanChat = false
})
-- Объявления стороны
ix.chat.Register("ad", {
OnChatAdd = function(self, speaker, text)
local name = IsValid(speaker) and speaker:Name() or "Console"
local prefix = "[ОБЪЯВЛЕНИЕ] "
local prefixColor = Color(200, 200, 200)
if (IsValid(speaker) and speaker:GetCharacter()) then
local faction = speaker:GetCharacter():GetFaction()
if (faction == FACTION_RUSSIAN) then
prefix = "[ВС РФ] "
prefixColor = Color(255, 100, 100)
elseif (faction == FACTION_UKRAINE) then
prefix = "[ВСУ] "
prefixColor = Color(255, 196, 0)
end
end
chat.AddText(prefixColor, prefix, Color(255, 255, 255), name, ": ", text)
end,
prefix = {"/ad"},
description = "Объявления стороны",
color = Color(200, 200, 200),
CanHear = function(self, speaker, listener)
-- Слышат только игроки той же фракции
if (!listener:GetCharacter() or !speaker:GetCharacter()) then
return false
end
local speakerFaction = speaker:GetCharacter():GetFaction()
local listenerFaction = listener:GetCharacter():GetFaction()
return speakerFaction == listenerFaction
end,
deadCanChat = false
})
-- Чат подразделения
ix.chat.Register("podr", {
OnChatAdd = function(self, speaker, text)
local name = IsValid(speaker) and speaker:Name() or "Console"
local prefix = "[ПОДРАЗДЕЛЕНИЕ] "
local prefixColor = Color(100, 150, 255)
if (IsValid(speaker) and speaker:GetCharacter()) then
local character = speaker:GetCharacter()
local faction = character:GetFaction()
local podrID = (character.GetPodr and character:GetPodr()) or 1
local factionTable = ix.faction.indices[faction]
if (factionTable and factionTable.Podr and factionTable.Podr[podrID]) then
local podrName = factionTable.Podr[podrID].name or "Неизвестно"
prefix = "["..podrName.."] "
if (faction == FACTION_RUSSIAN) then
prefixColor = Color(255, 196, 0)
elseif (faction == FACTION_UKRAINE) then
prefixColor = Color(255, 196, 0)
end
end
end
chat.AddText(prefixColor, prefix, Color(255, 255, 255), name, ": ", text)
end,
prefix = {"/podr", "/p"},
description = "Чат подразделения",
color = Color(100, 150, 255),
CanHear = function(self, speaker, listener)
-- Слышат только игроки той же фракции и того же подразделения
if (!listener:GetCharacter() or !speaker:GetCharacter()) then
return false
end
local speakerChar = speaker:GetCharacter()
local listenerChar = listener:GetCharacter()
local speakerFaction = speakerChar:GetFaction()
local listenerFaction = listenerChar:GetFaction()
if (speakerFaction != listenerFaction) then
return false
end
local speakerPodr = (speakerChar.GetPodr and speakerChar:GetPodr()) or 1
local listenerPodr = (listenerChar.GetPodr and listenerChar:GetPodr()) or 1
return speakerPodr == listenerPodr
end,
deadCanChat = false
})
if (SERVER) then
print("[Chat Control] Удалены чаты: it, connect, disconnect, event")
print("[Chat Control] Добавлены чаты: /rp, /adgl, /ad, /podr")
end
end)