You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
535 lines
16 KiB
535 lines
16 KiB
---------------------------------------------------------------------------------
|
|
--
|
|
-- Prat - A framework for World of Warcraft chat mods
|
|
--
|
|
-- Copyright (C) 2006-2018 Prat Development Team
|
|
--
|
|
-- This program is free software; you can redistribute it and/or
|
|
-- modify it under the terms of the GNU General Public License
|
|
-- as published by the Free Software Foundation; either version 2
|
|
-- of the License, or (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program; if not, write to:
|
|
--
|
|
-- Free Software Foundation, Inc.,
|
|
-- 51 Franklin Street, Fifth Floor,
|
|
-- Boston, MA 02110-1301, USA.
|
|
--
|
|
--
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
Prat:AddModuleToLoad(function()
|
|
|
|
local PRAT_MODULE = Prat:RequestModuleName("ChannelSticky")
|
|
|
|
if PRAT_MODULE == nil then
|
|
return
|
|
end
|
|
|
|
local module = Prat:NewModule(PRAT_MODULE, "AceEvent-3.0", "AceTimer-3.0", "AceHook-3.0")
|
|
|
|
local PL = module.PL
|
|
|
|
--[==[@debug@
|
|
PL:AddLocale(PRAT_MODULE, "enUS", {
|
|
["ChannelSticky"] = true,
|
|
["Chat channel sticky options."] = true,
|
|
["ChatType"] = true,
|
|
["Per chat type options."] = true,
|
|
["Channel"] = true,
|
|
["Sticky %s"] = true,
|
|
["Toggles sticky on and off for %s."] = true,
|
|
["smartgroup_name"] = "Smart Groups",
|
|
["smartgroup_desc"] = "Adds a /smart or /smrt command which automatically picks the correct type of chat, RAID, PARTY, or INSTANCE_CHAT",
|
|
["Sticky Per Chat Frame"] = true,
|
|
["Toggle remembering the chat type last used per chat frame."] = true,
|
|
})
|
|
--@end-debug@]==]
|
|
|
|
-- These Localizations are auto-generated. To help with localization
|
|
-- please go to http://www.wowace.com/projects/prat-3-0/localization/
|
|
|
|
|
|
--@non-debug@
|
|
do
|
|
local L
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = true,
|
|
["ChannelSticky"] = true,
|
|
["Chat channel sticky options."] = true,
|
|
["ChatType"] = true,
|
|
["Per chat type options."] = true,
|
|
["smartgroup_desc"] = "Adds a /smart or /smrt command which automatically picks the correct type of chat, RAID, PARTY, or INSTANCE_CHAT",
|
|
["smartgroup_name"] = "Smart Groups",
|
|
["Sticky %s"] = true,
|
|
["Sticky Per Chat Frame"] = true,
|
|
["Toggle remembering the chat type last used per chat frame."] = true,
|
|
["Toggles sticky on and off for %s."] = true,
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "enUS",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "Canal",
|
|
--[[Translation missing --]]
|
|
["ChannelSticky"] = "ChannelSticky",
|
|
--[[Translation missing --]]
|
|
["Chat channel sticky options."] = "Chat channel sticky options.",
|
|
--[[Translation missing --]]
|
|
["ChatType"] = "ChatType",
|
|
--[[Translation missing --]]
|
|
["Per chat type options."] = "Per chat type options.",
|
|
["smartgroup_desc"] = "Ajouter une commande /gr qui sélectionne automatiquement le bon type de chat : raid, groupe, champ de bataille",
|
|
["smartgroup_name"] = "Groupes intelligents",
|
|
--[[Translation missing --]]
|
|
["Sticky %s"] = "Sticky %s",
|
|
--[[Translation missing --]]
|
|
["Sticky Per Chat Frame"] = "Sticky Per Chat Frame",
|
|
--[[Translation missing --]]
|
|
["Toggle remembering the chat type last used per chat frame."] = "Toggle remembering the chat type last used per chat frame.",
|
|
--[[Translation missing --]]
|
|
["Toggles sticky on and off for %s."] = "Toggles sticky on and off for %s.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "frFR",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "Kanal",
|
|
["ChannelSticky"] = "Kanal Sticky",
|
|
["Chat channel sticky options."] = "Sticky-Optionen für Chat-Kanäle.",
|
|
["ChatType"] = "Chat-Typ",
|
|
["Per chat type options."] = "Optionen per Chat-Typ.",
|
|
["smartgroup_desc"] = "Fügt einen Befehl /gr hinzu, der automatisch den richtigen Chat-Typ aufnimmt - RAID, PARTY, oder BATTLEGROUND",
|
|
["smartgroup_name"] = "Intelligente Gruppen",
|
|
["Sticky %s"] = true,
|
|
["Sticky Per Chat Frame"] = "Sticky per Chat-Rahmen",
|
|
["Toggle remembering the chat type last used per chat frame."] = "Das Merken des Chat-Typs, der zuletzt im Chatfenster aktiviert war, umschalten.",
|
|
["Toggles sticky on and off for %s."] = "Schaltet den Sticky für %s ein und aus.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "deDE",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "채널",
|
|
["ChannelSticky"] = "채널 고정 [ChannelSticky]",
|
|
["Chat channel sticky options."] = "대화 채널 고정 옵션입니다.",
|
|
["ChatType"] = "대화 형식",
|
|
["Per chat type options."] = "대화 형식 별 옵션",
|
|
["smartgroup_desc"] = "공격대, 파티 또는 인스턴스 대화 중 자동으로 유효한 대화 유형을 선택하는 /smart와 /smrt 명령어를 추가합니다",
|
|
["smartgroup_name"] = "스마트 그룹",
|
|
["Sticky %s"] = "%s 고정",
|
|
["Sticky Per Chat Frame"] = "대화창 별 고정",
|
|
["Toggle remembering the chat type last used per chat frame."] = "대화창 별로 마지막으로 사용한 대화 형식 기억 기능을 켜거나 끕니다.",
|
|
["Toggles sticky on and off for %s."] = "%s의 입력 고정을 켜거나 끕니다.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "koKR",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
--[[Translation missing --]]
|
|
["Channel"] = "Channel",
|
|
--[[Translation missing --]]
|
|
["ChannelSticky"] = "ChannelSticky",
|
|
--[[Translation missing --]]
|
|
["Chat channel sticky options."] = "Chat channel sticky options.",
|
|
--[[Translation missing --]]
|
|
["ChatType"] = "ChatType",
|
|
--[[Translation missing --]]
|
|
["Per chat type options."] = "Per chat type options.",
|
|
--[[Translation missing --]]
|
|
["smartgroup_desc"] = "Adds a /smart or /smrt command which automatically picks the correct type of chat, RAID, PARTY, or INSTANCE_CHAT",
|
|
--[[Translation missing --]]
|
|
["smartgroup_name"] = "Smart Groups",
|
|
--[[Translation missing --]]
|
|
["Sticky %s"] = "Sticky %s",
|
|
--[[Translation missing --]]
|
|
["Sticky Per Chat Frame"] = "Sticky Per Chat Frame",
|
|
--[[Translation missing --]]
|
|
["Toggle remembering the chat type last used per chat frame."] = "Toggle remembering the chat type last used per chat frame.",
|
|
--[[Translation missing --]]
|
|
["Toggles sticky on and off for %s."] = "Toggles sticky on and off for %s.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "esMX",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "Канал",
|
|
["ChannelSticky"] = "Совмещение каналов",
|
|
["Chat channel sticky options."] = "Настройки прилипания каналов чата.",
|
|
["ChatType"] = "Тип чата",
|
|
["Per chat type options."] = "Настройки по типу чата.",
|
|
["smartgroup_desc"] = "Добавляет команду /gr , автоматически выбирающую корректный тип чата, РЕЙД, ГРУППА, или ПОЛЕ БОЯ",
|
|
["smartgroup_name"] = "Быстрая сортировка",
|
|
["Sticky %s"] = "Прилепить к %s",
|
|
["Sticky Per Chat Frame"] = "Прилипать к окнам чата",
|
|
["Toggle remembering the chat type last used per chat frame."] = "Вкл/Выкл запоминание тип чата при последнем использовании чата.",
|
|
["Toggles sticky on and off for %s."] = "Вкл/Выкл прилипание для %s.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "ruRU",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "频道",
|
|
["ChannelSticky"] = "频道粘连",
|
|
["Chat channel sticky options."] = "聊天频道粘连选项",
|
|
["ChatType"] = "聊天分类",
|
|
["Per chat type options."] = "每个聊天分类选项",
|
|
["smartgroup_desc"] = "添加一个/gr命令用来自动选择正确的聊天分类,比如团队,小队或战场",
|
|
["smartgroup_name"] = "智能分组",
|
|
["Sticky %s"] = "粘连 %s",
|
|
["Sticky Per Chat Frame"] = "粘连每个聊天框",
|
|
["Toggle remembering the chat type last used per chat frame."] = "记住每个聊天框上一次使用的聊天分类",
|
|
["Toggles sticky on and off for %s."] = "切换%s的粘连开关",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "zhCN",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "Canal",
|
|
["ChannelSticky"] = "CanalAdhesivo",
|
|
["Chat channel sticky options."] = "Opciones de canal adhesivo de chat.",
|
|
["ChatType"] = "TipoChat",
|
|
["Per chat type options."] = "Opciones por tipo de chat.",
|
|
["smartgroup_desc"] = "Agrega un comando /gr que escoge automáticamente el tipo correcto de chat, BANDA, GRUPO, o CAMPO DE BATALLA",
|
|
["smartgroup_name"] = "Grupos Inteligentes",
|
|
["Sticky %s"] = "Adhesivo %s",
|
|
["Sticky Per Chat Frame"] = "Adhesivo Por Marco de Chat",
|
|
["Toggle remembering the chat type last used per chat frame."] = "Alternar recordar el último tipo de chat utilizado por el marco de chat.",
|
|
["Toggles sticky on and off for %s."] = "Alterna activar adhesivo para %s.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "esES",L)
|
|
|
|
|
|
|
|
L = {
|
|
["ChannelSticky"] = {
|
|
["Channel"] = "頻道",
|
|
["ChannelSticky"] = "固定頻道",
|
|
["Chat channel sticky options."] = "聊天頻道固定選項",
|
|
["ChatType"] = "聊天類型",
|
|
["Per chat type options."] = "每聊天類型選項。",
|
|
--[[Translation missing --]]
|
|
["smartgroup_desc"] = "Adds a /smart or /smrt command which automatically picks the correct type of chat, RAID, PARTY, or INSTANCE_CHAT",
|
|
["smartgroup_name"] = "智慧化群組",
|
|
["Sticky %s"] = "固定 %s",
|
|
["Sticky Per Chat Frame"] = "個別聊天視窗固定",
|
|
--[[Translation missing --]]
|
|
["Toggle remembering the chat type last used per chat frame."] = "Toggle remembering the chat type last used per chat frame.",
|
|
--[[Translation missing --]]
|
|
["Toggles sticky on and off for %s."] = "Toggles sticky on and off for %s.",
|
|
}
|
|
}
|
|
|
|
|
|
PL:AddLocale(PRAT_MODULE, "zhTW",L)
|
|
|
|
|
|
end
|
|
--@end-non-debug@
|
|
|
|
|
|
-- chat channel list
|
|
local chatList = {
|
|
"SAY",
|
|
"WHISPER",
|
|
"YELL",
|
|
"PARTY",
|
|
"GUILD",
|
|
"OFFICER",
|
|
"RAID",
|
|
"RAID_WARNING",
|
|
"INSTANCE_CHAT",
|
|
"CHANNEL",
|
|
"EMOTE",
|
|
"BN_WHISPER",
|
|
"BN_CONVERSATION",
|
|
}
|
|
|
|
|
|
Prat:SetModuleDefaults(module, {
|
|
profile = {
|
|
on = true,
|
|
say = true,
|
|
whisper = true,
|
|
yell = true,
|
|
party = true,
|
|
guild = true,
|
|
officer = true,
|
|
raid = true,
|
|
raid_warning = true,
|
|
instance_chat = true,
|
|
channel = true,
|
|
emote = true,
|
|
perframe = false,
|
|
smartgroup = true,
|
|
bn_whisper = true,
|
|
bn_conversation = true,
|
|
}
|
|
})
|
|
|
|
local chatTypePlugins = { ctype = {} }
|
|
|
|
Prat:SetModuleOptions(module, {
|
|
name = PL["ChannelSticky"],
|
|
desc = PL["Chat channel sticky options."],
|
|
type = "group",
|
|
plugins = chatTypePlugins,
|
|
args = {
|
|
smartgroup = {
|
|
name = PL["smartgroup_name"],
|
|
desc = PL["smartgroup_desc"],
|
|
type = "toggle",
|
|
}
|
|
}
|
|
})
|
|
|
|
--[[------------------------------------------------
|
|
Module Event Functions
|
|
------------------------------------------------]] --
|
|
|
|
function module:OnModuleEnable()
|
|
self:BuildChannelList()
|
|
|
|
self:RegisterEvent("UPDATE_CHAT_COLOR")
|
|
|
|
local prof = self.db.profile
|
|
|
|
-- sticky each channel based on db settings
|
|
self:Stickum("SAY", prof.say)
|
|
self:Stickum("WHISPER", prof.whisper)
|
|
self:Stickum("YELL", prof.yell)
|
|
self:Stickum("PARTY", prof.party)
|
|
self:Stickum("GUILD", prof.guild)
|
|
self:Stickum("OFFICER", prof.officer)
|
|
self:Stickum("RAID", prof.raid)
|
|
self:Stickum("RAID_WARNING", prof.raid_warning)
|
|
self:Stickum("INSTANCE_CHAT", prof.instance_chat)
|
|
self:Stickum("CHANNEL", prof.channel)
|
|
self:Stickum("EMOTE", prof.emote)
|
|
|
|
self:Stickum("BN_WHISPER", prof.bn_whisper)
|
|
self:Stickum("BN_CONVERSATION", prof.bn_conversation)
|
|
|
|
|
|
|
|
if prof.smartgroup then
|
|
self:RegisterSmartGroup(true)
|
|
end
|
|
end
|
|
|
|
function module:OnModuleDisable()
|
|
-- dont sticky no mo!
|
|
self:Stickum("SAY", false)
|
|
self:Stickum("WHISPER", false)
|
|
self:Stickum("YELL", false)
|
|
self:Stickum("PARTY", false)
|
|
self:Stickum("GUILD", false)
|
|
self:Stickum("OFFICER", false)
|
|
self:Stickum("RAID", false)
|
|
self:Stickum("RAID_WARNING", false)
|
|
self:Stickum("INSTANCE_CHAT", false)
|
|
self:Stickum("CHANNEL", false)
|
|
self:Stickum("EMOTE", false)
|
|
-- unregister events
|
|
self:UnregisterAllEvents()
|
|
|
|
self:RegisterSmartGroup(false)
|
|
end
|
|
|
|
--[[------------------------------------------------
|
|
Core Functions
|
|
------------------------------------------------]] --
|
|
|
|
function module:GetDescription()
|
|
return PL["Chat channel sticky options."]
|
|
end
|
|
|
|
-- rebuild options menu is chat colors change
|
|
function module:UPDATE_CHAT_COLOR()
|
|
self:ScheduleTimer("BuildChannelList", 1)
|
|
end
|
|
|
|
function module:ChatFrame_OpenChat(text, chatFrame)
|
|
if (not chatFrame) then
|
|
chatFrame = SELECTED_CHAT_FRAME
|
|
end
|
|
|
|
local eb = chatFrame.editBox
|
|
|
|
if eb == nil then
|
|
return
|
|
end
|
|
|
|
local chatFrameN = chatFrame:GetName()
|
|
|
|
Prat:Print(eb:GetAttribute("chatType"))
|
|
|
|
if eb:GetAttribute("chatType") == "WHISPER" then
|
|
-- NADA
|
|
elseif eb:GetAttribute("chatType") == "SMARTGROUP" then
|
|
eb:SetAttribute("origchatType", "SMARTGROUP");
|
|
end
|
|
end
|
|
|
|
function module:Stickum(channel, stickied)
|
|
local cti = ChatTypeInfo[channel:upper()]
|
|
if cti then
|
|
cti.sticky = stickied and 1 or 0
|
|
end
|
|
end
|
|
|
|
--[[------------------------------------------------
|
|
Menu Builder Functions
|
|
------------------------------------------------]] --
|
|
|
|
local CLR = Prat.CLR
|
|
local function StkyChatType(text, type) return CLR:Colorize(module:GetChatCLR(type), text) end
|
|
|
|
function module:BuildChannelList()
|
|
local o = chatTypePlugins["ctype"]
|
|
|
|
for _, va in ipairs(chatList) do
|
|
local val = va:lower()
|
|
local chan
|
|
if va == "INSTANCE_CHAT" then
|
|
chan = _G["INSTANCE_CHAT"]
|
|
elseif va ~= "CHANNEL" then
|
|
chan = _G["CHAT_MSG_" .. va]
|
|
else
|
|
chan = PL["Channel"]
|
|
end
|
|
|
|
o[val] = o[val] or {
|
|
type = "toggle",
|
|
}
|
|
|
|
o[val].name = (PL["Sticky %s"]):format(StkyChatType(chan:gsub(" ", ""), va))
|
|
o[val].desc = (PL["Toggles sticky on and off for %s."]):format(chan)
|
|
end
|
|
end
|
|
|
|
function module:OnValueChanged(info, b)
|
|
local o = info[#info]
|
|
|
|
if o == "smartgroup" then
|
|
self:RegisterSmartGroup(b)
|
|
elseif o == "perframe" then
|
|
self:StickyFrameChan(b)
|
|
else
|
|
self:Stickum(o, b)
|
|
end
|
|
end
|
|
|
|
function module:GetChatCLR(name)
|
|
local info = ChatTypeInfo[name];
|
|
if not info then
|
|
return CLR.COLOR_NONE
|
|
end
|
|
return CLR:GetHexColor(info)
|
|
end
|
|
|
|
|
|
|
|
function module:RegisterSmartGroup(on)
|
|
if not self.smart_group and on then
|
|
Prat.RegisterChatEvent(self, "Prat_OutboundChat")
|
|
self:SecureHook("ChatEdit_SendText", function(this) if self.groupsay then this:SetAttribute("chatType", "SMARTGROUP") self.groupsay = nil end end)
|
|
|
|
self.smart_group = true
|
|
|
|
|
|
SLASH_SMARTGROUP1 = "/smart"
|
|
SLASH_SMARTGROUP2 = "/smrt"
|
|
ChatTypeInfo["SMARTGROUP"] = { r = 0.5, g = 0.9, b = 0.9, sticky = 1 }
|
|
CHAT_SMARTGROUP_SEND = "SmartGroup:\32 "
|
|
CHAT_SMARTGROUP_GET = "SmartGroup: %1\32 "
|
|
else
|
|
self:Unhook("ChatEdit_SendText")
|
|
SLASH_SMARTGROUP1 = nil
|
|
SLASH_SMARTGROUP2 = nil
|
|
ChatTypeInfo["SMARTGROUP"] = nil
|
|
CHAT_SMARTGROUP_SEND = nil
|
|
CHAT_SMARTGROUP_GET = nil
|
|
self.smart_group = false
|
|
Prat.UnregisterAllChatEvents(self)
|
|
end
|
|
end
|
|
|
|
|
|
function module:SmartGroupChatType()
|
|
local _, instanceType = IsInInstance()
|
|
|
|
if IsInGroup(LE_PARTY_CATEGORY_INSTANCE) then
|
|
if instanceType == "arena" then
|
|
return "PARTY"
|
|
else
|
|
return "INSTANCE_CHAT"
|
|
end
|
|
elseif IsInRaid() then
|
|
return "RAID"
|
|
elseif IsInGroup() then
|
|
return "PARTY"
|
|
else return "SAY"
|
|
end
|
|
end
|
|
|
|
function module:Prat_OutboundChat(arg, m)
|
|
if m.CTYPE == "SMARTGROUP" then
|
|
self.groupsay = true
|
|
m.CTYPE = self:SmartGroupChatType()
|
|
end
|
|
end
|
|
|
|
return
|
|
end) -- Prat:AddModuleToLoad
|
|
|