您好,欢迎来到气泡游戏网!

气泡游戏网
手机应用中心 热门攻略 轩辕传奇 气泡问问 疾风之刃 枪神纪 天堂2M 救世者之树 上古世纪 黑色沙漠MOBILE 未来战 冒险岛M(楓之谷 M) 传说对决 瓦尔海姆 鬼谷八荒 怪物猎人系列

当前位置:首页 > 攻略库 > 魔兽世界 > 正文

《魔兽世界(WOW)台服》【心得】将部份宏/巨集(/run)写进UI的方式

更新时间:1270224363   |   来源:巴哈姆特

lmvd (冰语) #1 2010-04-03 00:06:03
其实巨集和UI的程式部分很像
简略来说就是UI多了製造框架的部份
因为个人本身非资讯相关系所毕业的
所以如果哪边说的不好,还请专家多包涵了
当然,这篇完全不提有关框架的部份
部份原因是个人没有很多时间研究
目前退而求其次,花些时间把基本的处理一下
我相信有些人和我一样有兴趣,可是光入门就卡住了

这篇适合想写一些量大的巨集但被巨集255字数限制的人
应该也适合想写一些入门UI可是却完全被卡住的人

我写了一个範例,範例功能不重要(其实蛮逊的)
功能是当圣光信标只剩约五秒的时候显示出来让施法者注意而已
当然,这里会做一些简单的确认

程式逻辑是这样的
A(圣骑)对B施放「圣光信标」
这时会确认A是「圣骑」,放的魔法是「圣光信标」
然后把施法时间点(T1)和对象存进变数(Tb = B)
施法成功时,施法成功的时间点存进变数(T2)
检查T2-T1<1 (表示是同一次施法)
成立的话T = Tb
55秒后检查T身上的圣光信标buff是否时间不到七秒(应该约五秒)
是的话,提示出来一句话
不是的话(表示自己有补放了)就不动作
这里,请先下载一个範例UI
点这下载
里面有三个档(请用UTF8格式)
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 (PlayerClass == "圣骑士") then
        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

希望给一些对这些有兴趣的人帮助
 
。愔。: 04-03 01:29

感觉很实用,感谢说明>Q<

上官翔: 04-04 20:31

虽然我看不懂..不过这种文一定要支持!!不给GP对不起我自己

魔多: 06-18 04:03

看起来是可以理解的事物,但我需要时间,能自己写UI,也就能自己修改一下UI了 XD~(应该很难)

精彩推荐

Wonderful recommendation

更多

关于我们 | 商务合作 | 广告服务 | 法律声明 | 内容导航 | 游戏帮助 | 问题反溃

本站所有软件,来自于互联网或网友上传,版权属原著所有,如有需要请购买正版。如有侵权,敬请来信联系我们,我们立刻删除。

抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活

Copyright 2019-2025 by 鲁ICP备2024066534号-1 成都市互联网举报中心