作者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