作者o035016 (AIR劇本檔提供中 請Q我)
看板ck57th308
標題[問題] 這跟程式碼好像有點關係?
時間Sun Aug 27 21:45:08 2006
班上電機相關科系的好像還不錯多,來個神人幫忙解惑一下吧...
/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
嗯,我來說明一下...上面是"魔獸世界"的巨集,是玩家自己寫的。
其中腐蝕術和痛苦詛咒是法術的名稱,我簡單敘述一下:
腐蝕術是一種"damage over time"的法術,也就是那種放下去了以後隨著時間扣血的,
想當然,被放的人身上會有一個狀態,只要這個狀態還在他身上就會一直扣血。
這個巨集的作用是,察看目標身上的debuff(減益狀態),如果沒有"腐蝕術"造成的狀態
就施放腐蝕術,如果已經有了就施放痛苦詛咒。巨集在遊戲中是以按鍵形式使用的,
就是你可以建一個按鍵,並且自訂按鍵功能,就是透過在按鍵中編寫巨集的形式。
這個巨集就可以讓你只用一顆按鍵達成自動判斷,然後依序施放兩種法術的功能。
我不太會表達啦...希望這樣有看懂...= =|||b
我的問題是,有關 z 和 i 的使用搞不太懂。
先就我瞭解的說明:
z=0 i=1 u=UnitDebuff t="target" c=CastSpellByName
↑這段應該是定義變數吧?專業的說法不知道。對了,CastSpellByName"**"是遊戲中的一
個函式,就是施放以**為名的法術嘛,滿容易瞭解的。
接下來 while (u(t,i)) 就已經看不太懂了。翻譯起來是這樣吧:
(UnitDebuff(target,i)) 總之應該是指某單位的 debuff ,那個單位咧,就是你現在的目
標這個單位,那個 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
do if string.<=這句大概知道意思,是執行 if 字串的意思吧?可能不叫字串啦,不會講
find(u(t,i),"
AbominationExplosion")~=nil then z=1 end i=i+1 end
↑這是檢查目標的 debuff 有沒有
AbominationExplosion這項吧,
是說如果沒有就傳回 z=1 這樣嗎?(
AbominationExplosion是"腐蝕術"產生的狀態的真實名稱)
i=i+1 就完全不懂了。
if z==0 then c("腐蝕術") else c("痛苦詛咒") end
↑這是說如果得到z=0的值就施放腐蝕術,如果不是0的值就放痛苦詛咒嗎?
字面解釋感覺是這樣啦,可是之前不是說:如果沒有
AbominationExplosion就傳回z=1
嗎...那應該是if z==1 then c("腐蝕術") else c("痛苦詛咒") end 才對啊?
對了,z==*有兩個=,不知道是這遊戲這樣還是一般都都這樣,就是定義時用=,講到傳回
的數值時用==,然後 c 是之前定義過的 CastSpellByName 函式。
總之 z 的部分跟我的認知矛盾然後 i 的部分完全不懂。
希望這裡面跟一般的程式相關性夠高,如果都是遊戲中特別的語法的話也不用勉強啦...
來個神人解答一下吧?
--
對了,我知道 >= 是大於等於, <= 是小於等於,那 != 是啥啊?好像真有這東西耶?
--
使用者名稱 檔案 速度 已傳輸 已等待 上載時間 狀態
正人君子 [夜勤病棟][Night.. 586位.. 624.34k 53.36分 9:24分 傳輸中
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.137.72