|
|
发表于 2007-4-24 10:02:05
|
显示全部楼层
那个法术的脚本比较复杂……
分多个效果,且每个效果有多个脚本。主要是范围法术设计有 On Exit 和 On Enter
暂时还没看出个头绪来…… DoDo JJ 有没有具体测试哪个比较有问题?应该是施展前可以选的吧?
Hamper Movement
Entangle
Camouflage
这3个?有问题的是 Hamper Movement 还是 Entangle?粗略的看了看Hamper Movement On Enter部分就似乎没有做任何鉴定……直接就apply效果了?(可能是我没看懂吧)
解读中……
我猜测一下写脚本者的意图……现在估计问题出在Hamper Movement 的那些脚本上。按照目前写的
Hamper Movement包括4个脚本部分
X2_S0_VineMHmp——这个脚本主要是在一个指定的点Apply一个区域效果,主要语句也就是
//Create an instance of the AOE Object using the Apply Effect function
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(nDuration));
X2_S0_VineMHmpA——这个应该是对进入上述区域的生物加上效果的脚本,我是没看到有什么鉴定
X2_S0_VineMHmpB——感觉按照作者的意图是希望离开上述区域的生物就会被去掉减速等效果……然则 我看到那个多重if嵌套的判定就感觉,出事故的概率非常高。
关键语句(大家帮忙分析吧):
if(GetHasSpellEffect(531, oTarget))
{
//Search through the valid effects on the target.
eAOE = GetFirstEffect(oTarget);
while (GetIsEffectValid(eAOE) && bValid == FALSE)
{
if (GetEffectCreator(eAOE) == GetAreaOfEffectCreator())
{
if(GetEffectType(eAOE) == EFFECT_TYPE_MOVEMENT_SPEED_DECREASE)
{
//If the effect was created by the Acid_Fog then remove it
if(GetEffectSpellId(eAOE) == 531)
{
RemoveEffect(oTarget, eAOE);
bValid = TRUE;
}
}
}
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
最后一部分X2_S0_VineMHmpC—— 注释里写了 Heartbeat,我想应该是进入区域后,每轮(或者每一段时间)都鉴定一下……然则我同样没找到所谓的反射鉴定(基本就是从VineMHmpA里copy的连那句注释掉的都是)
关键语句:
while(GetIsObjectValid(oTarget))
{
// if(!GetHasFeat(FEAT_WOODLAND_STRIDE, oTarget) &&(GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) != TRUE) )
if( (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) != TRUE) ) // AFW-OEI 05/01/2006: Woodland Stride no longer protects from spells
{
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, GetAreaOfEffectCreator()))
{
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), GetSpellId()));
fDelay = GetRandomDelay(0.0, 2.0);
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget));
}
}
//Get next target in spell area
oTarget = GetNextInPersistentObject();
}
——————————————————————
汗~~~ 谁有看出鉴定在哪里?或者更有头绪的理解么?我是1.05版的~~~
按照目前我个人理解,这法术完全是被写成每轮apply一个减速效果(可能不会叠加,因为apply前似乎有判定是不是是已经被减速者,然则还是没写对,弄不好还真多重叠加减速),且离开范围区域仍然一直受影响……和DoDo JJ的描述差不多……
ps:我希望是我的理解力太差,而不是写脚本的竟然就只有这种逻辑…… |
|