作者o035016 (AIR劇本檔提供中 請Q我)
看板ck57th308
標題Re: [問題] 這跟程式碼好像有點關係?
時間Wed Sep 20 13:36:09 2006
※ 引述《o035016 (AIR劇本檔提供中 請Q我)》之銘言:
: 班上電機相關科系的好像還不錯多,來個神人幫忙解惑一下吧...
: /script z=0 i=1 u=UnitDebuff t="target" c=CastSpellByName while(u(t,i))
: do if string.find(u(t,i),"AbominationExplosion")~=nil
: then z=1 end i=i+1 end if z==0 then c("腐蝕術") else c("痛苦詛咒") end
幹 幹幹幹幹幹幹幹幹幹 他媽的我好像看懂了!!!幹幹幹!
好啦,我有查wow的維基
http://www.wowwiki.com/Main_Page
是這樣的 , z=0 i=1 就是先定義變數,z完全是自己設的,就是在一開始沒有任何動作的
時候,設一個 z=0,i 的話等等會用到。
然後u=UnitDebuff t="target" c=CastSpellByName 簡化字串,節省字元數
接下來是while(u(t,i)) do ****** ,我以前還以為是 do if string 咧,碼的。
先說一下(u(t,i)) 這是被我們簡化過的,原來是(UnitDebuff("target",i))。
UnitDebuff(unitID,debuffIndex,showDispellable)是傳回某單位(unit)的減益法術
(debuff)資訊的函式,其中
unitID是妳想知道的對象是誰?可以是player, target 等等;
debuffIndex 是妳想知道的是第幾個debuff,一個單位最多可以同時有16個debuff,在這
裡我們設的是變數 i;
showDispellable 是一個選擇性的參數,非必要。在此也沒有使用,就不提了。
先前提過這是傳回資訊的函式,傳回的格式是:
debuffTexture:字串-此debuff的路徑和檔名(identifier),如果沒有debuff則傳回 nil;
debuffApplications:數字-此debuff疊加的次數(本例沒用到)
debuffType:字串-此減益法術(debuff)的類型。"Magic", "Curse", "Poison",
"Disease" 如果是無法解除的 debuff 則傳回 nil(本例沒用到)
while(u(t,i)) do****,這裡的****是 "if XXX then XXX end"
,而 if 的內容是
string.find(u(t,i),"AbominationExplosion")~=nil
這表示查看(u(t,i))傳回的字串中,有沒有AbominationExplosion
(即腐蝕術的真名)這段
,假使查看的結果"不等於" nil
(否定的意思)
then
z=1
end
但是應該會注意到,我們之前定義 i=1 這樣只有檢查到第一格 debuff,其他格也要檢查
,所以再加一行 i=i+1 end 給他迴圈檢查,不用設什麼時候停止是因為內部定義
debuffIndex 最多到16,達到16時會自動停止;就這樣讓他全部跑完一遍。
接下來是 if z==0 then c("腐蝕術") else c("痛苦詛咒") end
剛剛說道,如果檢查結果不是 nil--就是如果有"腐蝕術"這個debuff在的話--,z=1,如果
是 nil
(沒有中"腐蝕術")則 z 不變,還是原來的0
這邊就是說,如果z是0的話,放"腐蝕術",不是0的話,放"痛苦詛咒"。c 是之前定義過的
CastSpellByName 函式。要注意的是,講到判斷"值"的時候,要用兩個等於 == ,
一個等於 = 是定義的時候用的。
以上,即完成"沒腐蝕術先放腐蝕術,有的話就放痛苦詛咒"的巨集,只要狂按這顆按鍵,
就可以自動判斷了。
--
幹 他媽的,研究這東西的總時數超過10HR,在昨天的3個半小時之後我終於自學成功了
補個幹
--
使用者名稱 檔案 速度 已傳輸 已等待 上載時間 狀態
正人君子 [夜勤病棟][Night.. 586位.. 624.34k 53.36分 9:24分 傳輸中
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.129.59.133
1F:推 ck208:喔耶 一起歡呼吧 09/20 17:24