简略来说就是UI多了製造框架的部份
因为个人本身非资讯相关系所毕业的
所以如果哪边说的不好,还请专家多包涵了
当然,这篇完全不提有关框架的部份
部份原因是个人没有很多时间研究
目前退而求其次,花些时间把基本的处理一下
我相信有些人和我一样有兴趣,可是光入门就卡住了
这篇适合想写一些量大的巨集但被巨集255字数限制的人
应该也适合想写一些入门UI可是却完全被卡住的人
我写了一个範例,範例功能不重要(其实蛮逊的)
功能是当圣光信标只剩约五秒的时候显示出来让施法者注意而已
当然,这里会做一些简单的确认
程式逻辑是这样的
A(圣骑)对B施放「圣光信标」
这时会确认A是「圣骑」,放的魔法是「圣光信标」
然后把施法时间点(T1)和对象存进变数(Tb = B)
施法成功时,施法成功的时间点存进变数(T2)
检查T2-T1<1 (表示是同一次施法)
成立的话T = Tb
55秒后检查T身上的圣光信标buff是否时间不到七秒(应该约五秒)
是的话,提示出来一句话
不是的话(表示自己有补放了)就不动作
点这下载
SPMacro.toc
SPMacro.xml
SPMacro.lua
因为本来就不打算写框架
而SPMacro.toc 和 SPMacro.xml只是为了让UI能动作的基本架构而已
所以SPMacro.toc 和 SPMacro.xml 就不多说了
再来是SPMacro.lua
先说明一下LUA的注解 1.单行注解:-- 2.多行注解:--[[ --]]
所以看到 -- xxxxxxx 或 --[[ xxxxxxx --]] 请把他当旁白看
xxxxxxx 算是基本架构上要的东西
xxxxxxx 算是主要写的function名称
xxxxxxx 算是主要写的程式码了,也就是照上面说的程式逻辑写
SPMacro.lua
-------------------------------------------------------------------------------
local PlayerClass = nil; --玩家职业
local PlayerClassEN = nil; --玩家职业(英文)
local PlayerRace = nil; --玩家种族
local PlayerRaceEN = nil; --玩家种族(英文)
local SPM_BEACON_OF_LIGHT_Target = nil; --圣光信标的目标
local SPM_BEACON_OF_LIGHT_Target_bak = nil; --圣光信标的目标(暂定)
local SPM_BEACON_OF_LIGHT_Time = nil; --圣光信标的时间
-------------------------------------------------------------------------------
function SPM_OnLoad(self)
--Frame OnLoad时执行(一开始)
PlayerClass,PlayerClassEN = UnitClass("player");
PlayerRace,PlayerRaceEN = UnitRace("player");
self:RegisterEvent("VARIABLES_LOADED"); --注册事件
self:RegisterEvent("UNIT_SPELLCAST_SENT"); --注册事件
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED"); --注册事件
SlashCmdList["SCLSPM"] = SPM_command;
--键入/SPM,会执行SPM_command(function)
SLASH_SCLSPM1 = "/SPMacro"; --键入/SPMacro和/SPM一样的
SLASH_SCLSPM2 = "/SPM";
end
-------------------------------------------------------------------------------
function SPM_command(cmd)
--WOW中/SPM cmd,这里由cmd决定执行的function
if (cmd == "") then
SPM_help(); --WOW中只键入/SPM时执行的Help文字
elseif (cmd == "RL" or cmd == "rl") then
ReloadUI();
elseif (cmd == "PAL1" or cmd == "pal1") then
PAL1(); --圣光信标巨集的程式 /spm pal1即可
else
DEFAULT_CHAT_FRAME:AddMessage("<SPM Cmd> "..cmd.." - 无此指令!!");
end
end
-------------------------------------------------------------------------------
function SPM_help()
--Help文字,WOW中只键入/SPM可以看到
DEFAULT_CHAT_FRAME:AddMessage("SPM Help:");
DEFAULT_CHAT_FRAME:AddMessage("/spm - 显示Help");
DEFAULT_CHAT_FRAME:AddMessage("/spm RL - 重新载入UI");
DEFAULT_CHAT_FRAME:AddMessage("/spm PAL1 - 圣光信标提示程式");
end
-------------------------------------------------------------------------------
function Out1(msg)
--SPM自用显示文字function 1
DEFAULT_CHAT_FRAME:AddMessage("<SPM>"..msg);
end
function Out2(msg)
--SPM自用显示文字function 2
UIErrorsFrame:AddMessage("<SPM>"..msg, 1.0, 1.0, 0, 1, 10);
end
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
function SPM_OnEvent(self,event,arg1,arg2,arg3,arg4)
--分配事件发生时的function
if (event=="VARIABLES_LOADED") then
SPM_OnEvent_VariablesLoaded();
elseif (event=="UNIT_SPELLCAST_SENT") then
SPM_OnEvent_UnitSpellcastSent(self,arg1,arg2,arg3,arg4);
elseif (event=="UNIT_SPELLCAST_SUCCEEDED") then
SPM_OnEvent_UnitSpellcastSucceeded(self,arg1,arg2,arg3);
end
end
-------------------------------------------------------------------------------
function SPM_OnEvent_VariablesLoaded()
--VARIABLES_LOADED事件执行function
DEFAULT_CHAT_FRAME:AddMessage("SPMacro 启动!!");
end
-------------------------------------------------------------------------------
function SPM_OnEvent_UnitSpellcastSent(self,caster,spellName,spellRank,spellTarget)
--UNIT_SPELLCAST_SENT事件执行function
if (caster == "player" and spellName == "圣光信标") then
SPM_BEACON_OF_LIGHT_Target_bak = spellTarget; --暂定spellTarget
SPM_BEACON_OF_LIGHT_Time = GetTime();
end
end
end
-------------------------------------------------------------------------------
function SPM_OnEvent_UnitSpellcastSucceeded(self,caster,spellName,spellRank)
--UNIT_SPELLCAST_SUCCEEDED事件执行function
if (PlayerClass == "圣骑士") then
if (caster == "player" and spellName == "圣光信标") then
local t = GetTime() - SPM_BEACON_OF_LIGHT_Time;
if (t < 1) then
SPM_BEACON_OF_LIGHT_Target = SPM_BEACON_OF_LIGHT_Target_bak; --确定spellTarget
end
end
end
end
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--[[ PAL1 请在设定巨集中请写入
/cast 圣光信标
/in 55 /SPM PAL1
--]]
-------------------------------------------------------------------------------
function PAL1()
--圣光信标倒数记时function
local B,_,icon,_,_,dur,x,_,_ = UnitBuff(SPM_BEACON_OF_LIGHT_Target, "圣光信标");
--读取施法目标身上"圣光信标"的资料(x = Buff结束时间)
local t = x - GetTime(); -- t = Buff结束时间 - 现在时间 = Buff剩余时间
if (t < 7) then -- 7 = 62 - 55
Out1("("..SPM_BEACON_OF_LIGHT_Target..")".."圣光信标只剩下五秒了!!");
Out2("("..SPM_BEACON_OF_LIGHT_Target..")".."圣光信标只剩下五秒了!!");
end
end
-------------------------------------------------------------------------------
因为没有配合框架
所以,还是要用巨集来配合
建立一个巨集,里面写
/cast 圣光信标
/in 55 /SPM PAL1
希望给一些对这些有兴趣的人帮助