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