--[[ EasyChannel.lua 频道和密语对象的快速切换 提取自网易有爱163Chat 插件更新地址 http://nga.178.com/read.php?tid=9633520 --]] function ChatEdit_CustomTabPressed(...) return ChatEdit_CustomTabPressed_Inner(...) end local cycles = { -- "说" { chatType = "SAY", use = function(self, editbox) return 1 end }, --大喊 { chatType = "YELL", use = function(self, editbox) return 1 end }, --小队 { chatType = "PARTY", use = function(self, editbox) return IsInGroup() end }, --团队 { chatType = "RAID", use = function(self, editbox) return IsInRaid() end }, --实时聊天 { chatType = "INSTANCE_CHAT", use = function(self, editbox) return select(2, IsInInstance()) == "pvp" end }, --公会 { chatType = "GUILD", use = function(self, editbox) return IsInGuild() end }, --频道 { chatType = "CHANNEL", use = function(self, editbox, currChatType) local currNum if currChatType ~= "CHANNEL" then currNum = IsShiftKeyDown() and 21 or 0 else currNum = editbox:GetAttribute("channelTarget") end local h, r, step = currNum + 1, 20, 1 if IsShiftKeyDown() then h, r, step = currNum - 1, 1, -1 end for i = h, r, step do local channelNum, channelName = GetChannelName(i) if channelNum > 0 and channelName:find("大脚世界频道") then --print(channelName); --DEBUG editbox:SetAttribute("channelTarget", i) return true end end end }, { chatType = "SAY", use = function(self, editbox) return 1 end } } local chatTypeBeforeSwitch, tellTargetBeforeSwitch --记录在频道和密语之间切换时的状态 function ChatEdit_CustomTabPressed_Inner(self) if strsub(tostring(self:GetText()), 1, 1) == "/" then return end local currChatType = self:GetAttribute("chatType") if (IsControlKeyDown()) then if (currChatType == "WHISPER" or currChatType == "BN_WHISPER") then --记录之前的密语对象,以便后续切回 self:SetAttribute("chatType", chatTypeBeforeSwitch or "SAY") ChatEdit_UpdateHeader(self) chatTypeBeforeSwitch = "WHISPER" tellTargetBeforeSwitch = self:GetAttribute("tellTarget") return --这里和下面不同,这里可以不返回true else local newTarget, newTargetType = ChatEdit_GetNextTellTarget() if tellTargetBeforeSwitch or (newTarget and newTarget ~= "") then self:SetAttribute("chatType", tellTargetBeforeSwitch and chatTypeBeforeSwitch or newTargetType) self:SetAttribute("tellTarget", tellTargetBeforeSwitch or newTarget) ChatEdit_UpdateHeader(self) chatTypeBeforeSwitch = currChatType tellTargetBeforeSwitch = nil return true --这里必须返回true,否则会被暴雪默认的再切换一次密语对象 end end end --对于说然后SHIFT的情况,因为没有return,所以第一层循环会一直遍历到最后的SAY for i, curr in ipairs(cycles) do if curr.chatType == currChatType then local h, r, step = i + 1, #cycles, 1 if IsShiftKeyDown() then h, r, step = i - 1, 1, -1 end if currChatType == "CHANNEL" then h = i end --频道仍然要测试一下 for j = h, r, step do if cycles[j]:use(self, currChatType) then self:SetAttribute("chatType", cycles[j].chatType) ChatEdit_UpdateHeader(self) return end end end end end