/run function SIS_M(a,b,c,d,e,f,g,type) --定義函數SIS_M,用來發送聊天信息
SendChatMessage( --調用的這個方法用來發送這樣的字符串“[HH:mm:ss] [AA] 的 [BB] 打斷了 [CC] 的 [DD]。”
"[" --為時間戳加上中括號
..date("%H:%M:%S",a) --格式化時間戳,參數a存放著當前所取得消息的十六進制時間
.."] [" -- 時間戳和消息之間留壹個空格
..b --參數b存放著玩家1的名字
.."] 的 \124cff71d5ff\124Hspell:" --給玩家1施放的技能加上鏈接碼
..d --參數d存放著玩家1施放的技能的ID值
.."\124h[" --給玩家1施放的技能的名稱加上中括號
..e --參數e存放著玩家1施放的技能的名稱
.."]\124h\124r 打斷了 [" --中間加上“打斷了”
..c --參數c存放著玩家2的名字
.."] 的 \124cff71d5ff\124Hspell:" --給玩家2施放的技能加上鏈接碼
..f --參數f存放著玩家2施放的技能的ID值
.."\124h[" --給玩家2施放的技能的名稱加上中括號
..g --參數g存放著玩家2施放的技能的名稱
.."]\124h\124r。", --最後加上壹個句號,
type --SendChatMessage的第二個參數,指定了發送聊天信息的方式
); --組合字符串,然後發送聊天信息;
end --函數定義結束。
第二條宏
/run function EV_M(...) --定義函數EV_M,用來過濾戰鬥記錄,只留下打斷施法的戰鬥記錄。EV_M函數的參數為“...”,這是LUA語言的特殊定義方式,表示參數的個數不確定
local a,v,_,b,_,_,c,_,d,e,_,f,g=...; --定義壹些臨時變量來按順序從戰鬥記錄中取得數據“_”變量為LUA保留變量,壹般用作臨時變量來多次賦值
if (v=="SPELL_INTERRUPT" and SIS_M) then --判斷當臨時變量v取得的消息類型為"SPELL_INTERRUPT"且SIS_M函數已經定義的情況下執行if內的語句
SIS_M(a,b,c,d,e,f,g,"YELL"); --調用SIS_M組合打斷施法提示的信息字符串,以“YELL”(大喊)的方式發送。
end --if語句結束
end --函數定義結束。
第三條宏
/run if (not MSG_F) then --判斷壹下MSG_F框架是否已經創建過了
CreateFrame("Frame","MSG_F",UIParent); --創建MSG_F框架用來接收消息;
end --if語句結束
MSG_F:RegisterEvent("COMBAT_LOG_EVENT"); --為MSG_F框架註冊接收的消息類型為“COMBAT_LOG_EVENT”;
MSG_F:SetScript( --為MSG_F設置事件執行的腳本
"OnEvent", --指定為哪個MSG_F事件設置腳本,這裏設置為“OnEvent”,
function(_,_,...) --函數定義開始,參數1和2用不到,被LUA保留變量接收
if (EV_M) then --這裏用if是為了防止彈出Lua錯誤消息,判斷壹下第二條宏是否用過了
EV_M(...); --調用EV_M函數匹配接收到的消息,以“YELL”(大喊)的方式發送聊天信息;
end --if語句結束
end --函數定義結束
); --SetScript結束。
上面這幾段內容分別解釋了這三個宏的功能,當然我還是要建議大家嘗試壹下下面的內容,因為壹些人可能對這個宏實現的效果不夠滿意。
● 有些人覺得喊出聲來不如只顯示在自己的聊天記錄中,那麽可以把第壹個宏改成這樣:
/run function SIS_M(a,b,c,d,e,f,g,_) DEFAULT_CHAT_MESSAGE:AddMessage("["..date("%H:%M:%S",a).."] ["..b.."] 的 \124cff71d5ff\124Hspell:"..d.."\124h["..e.."]\124h\124r 打斷了 ["..c.."] 的 \124cff71d5ff\124Hspell:"..f.."\124h["..g.."]\124h\124r。");end
● 有些人覺得這套宏不錯,在競技場中可以提醒大家誰打斷了誰的施法,但是他卻不希望競技場中的敵人也看到這樣的信息,怎麽辦呢?沒關系,把第二個宏改壹下(註意,舊版的打斷施法提示宏是改第三個宏):
/run function EV_M(...) local a,v,_,b,_,_,c,_,d,e,_,f,g=...;if (v=="SPELL_INTERRUPT" and SIS_M) then SIS_M(a,b,c,d,e,f,g,"RAID");end end
和之前的第二個宏比較壹下
/run function EV_M(...) local a,v,_,b,_,_,c,_,d,e,_,f,g=...;if (v=="SPELL_INTERRUPT" and SIS_M) then SIS_M(a,b,c,d,e,f,g,"YELL");end end
可以看出改動也只是把最後的“YELL”換成了“RAID”,為什麽這樣換呢,我們都知道WOW有多種聊天方式,有“說”、“大喊”、“小隊”、“團隊”、“公會”、“戰場”等,在這裏就可以規定用什麽聊天方式發送。下面列舉出這套宏所有可以用的聊天方式:
SAY說(/s)
EMOTE表情(/e)
PARTY小隊(/p)
BATTLEGROUND戰場(/bg)
GUILD公會(/g)
OFFICER官員(/o)
YELL大喊(/y)
RAID團隊(/ra)
RAID_WARNING團隊警報(/rw)
韓度別人的解釋,我自己解釋有點麻煩,不做任何其他講解