查看完整版本: 簡易UI撰寫--UI與巨集(自動喝水範例) 轉載至巴哈
頁: [1] 2

vup7735 發表於 2009-10-29 10:23 PM

簡易UI撰寫--UI與巨集(自動喝水範例) 轉載至巴哈

可以達到同樣功能,為什麼要寫UI,而不直接寫巨集呢?
比較一下
UI的好處:
複雜程式碼好看懂
啟動遊戲就會執行
有自己的區域變數
可以定義function
可以做出一些拭窗、按鈕
可以加自己喜歡的東西進去
不能使用UseAction或類似的程式碼(可以寫,不會ERROR,但不能執行)
巨集的好處:
可以使用UseAction或類似的程式碼
....
好處很明顯,有些事一定要巨集來做
但是當我們使用巨集呼叫/script HW_hello("XD")時,如果裡面有UseAction語法,是可以成功執行的
光說不練怪怪的...
那我們來動手寫自動補血UI吧~
我們用之前hello world用的程式來修改
修改HW.lua即可
內容如下
DEFAULT_CHAT_FRAME:AddMessage("Hello World UI2 with |cffffffffauto health|r loaded!!");
local usetimes = 0;
local lasttime = os.time();
local enable=true;
function HW_hello(arg1)
    DEFAULT_CHAT_FRAME:AddMessage("Hello World!! " .. arg1);
end

function HW_Update(HP,Potion)
    local hpc = UnitHealth("player");
    local hpm = UnitMaxHealth("player");
    local hpr = ((hpc/hpm)*100);
   
    if(hpr < HP and enable) then
        usetimes = usetimes + 1;
        DEFAULT_CHAT_FRAME:AddMessage("Your HP is too low (" .. hpc .. "/" .. hpm .. "(" .. hpr .. "%)) Using potion. ".. usetimes .. " times!");
        UseAction(Potion);
        if(usetimes >1) then
            DEFAULT_CHAT_FRAME:AddMessage("last time use is: ".. os.difftime(os.time(), lasttime) .. " seconds ago!");
        end
        lasttime=os.time();
        
    end
end

SLASH_HW1 = "/hw";
SlashCmdList["HW"] = function (editBox, msg)
    if(enable)then
        enable=false;
        DEFAULT_CHAT_FRAME:AddMessage("Auto Health Disable");
    else
        enable=true;
        DEFAULT_CHAT_FRAME:AddMessage("Auto Health Enable");
    end
end
接著我們在遊戲中寫一個巨集
假設放在第75格,補血藥在第60格,目標為血低於70%使用第60格藥水
內容為
/script HW_Update(70,60)
/wait 0.2
/script UseAction(75)
使用方式為
先點75格的巨集讓她開始執行就OK了
想關閉或啟動,就輸入/hw即可


好長阿
不過內容很容易懂
首先來教大家變色字
再使用DEFAULT_CHAT_FRAME:AddMessage指令時裡面可以用|cAARRGGBB來位之後的字換顏色|r是復原AARRGGBB是以16近位表示AA是透明度RGB是紅綠藍例如80ff0000就是透明度為50%的紅字
local 是定義區域變數,請在撰寫程式盡量使用區域變數,以免與其他程式衝突
外面定義的local變數,整個程式都能用,在function裡面定義的,只有在function裡能用,而且每次執行function都會重置
再來介紹如何新增以/開頭的指令,例如/hw
使用方法如下SLASH_HW1 = "/hw";這樣就可以新增一個Slash指令
如果要新增一個以上就SLASH_HW2= "/hwXD"; SLASH_HW3 = "/hrGC";...以此類推
然後要設定其功能
SlashCmdList["HW"] = function (editBox, msg)
...函式內容
end
以上重點在於紅色字的地方都要一樣
無論使用者輸入/hw還是/hwXD或是/hrGC都會呼叫函式內容


今天所使用的函數(function)
os.time()取得系統時間,以秒為單位
os.difftime(arg1,arg2)時間相減(arg2-arg1),以秒為單位
UnitHealth(arg1)看單位的血,arg1可以是"player","target","party1"...
UnitMaxHealth(arg1)看單位的最大血量,arg1可以是"player","target","party1"......<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

debr979 發表於 2009-10-31 03:48 AM

謝謝分享

不用總手忙腳亂

liutigerliu 發表於 2009-11-5 01:33 AM

真讚
這個心得很有幫助
謝謝大大分享

m8300702 發表於 2009-11-5 08:26 PM

喔喔 原來如此

這個心得很有幫助
謝謝大大分享

lucky0420 發表於 2009-11-7 04:13 AM

好像不錯用

不然每次都亂按一通

等按到補血 人物就死掉了{:1_newtoo_sad:}<br><br><br><br><br><div></div>

tn00131313 發表於 2009-11-13 12:23 AM

這個心得很有幫助
謝謝大大分享

cstrike 發表於 2009-11-20 04:19 AM

有看沒有懂
先謝謝分享
再來研究

a7792843 發表於 2009-11-21 10:54 AM

謝謝大大的說明 我更加明白如何練了...

binliuchang 發表於 2009-11-22 01:52 AM

很好的分享,不過有看沒有懂
想問問有沒有自懂檢東西的小程式
應該比自動喝水更吸引人

st91008 發表於 2009-11-23 05:05 PM

謝謝你ㄉ分享.................<br><br><br><br><br><div></div>

jusan911 發表於 2009-11-29 07:14 PM

這是個很棒的示範, 讓我收穫良多.

一直使用先進所作的UI成品總是有不盡人意之憾, 所以不如自己動手豐衣足食.

期待版主再次蒞臨示範新的教學.

HEROMAN41213 發表於 2009-12-27 05:40 PM

感謝大大分享
這個分享實在是太棒了

ms0411464 發表於 2010-1-11 09:41 AM

有了這個就很方便了
謝謝大大的分享

loverover31 發表於 2010-1-25 11:31 PM

這篇看過ㄌ烏  
不過謝業大大的分享
要專心編輯UI

wang0219 發表於 2010-1-27 11:46 PM

真讚
這個心得很有幫助
謝謝大大分享<br><br><br><br><br><div></div>
頁: [1] 2