忘了补这个贴了。

剑心的视频里面,触发吸将的机制其实很明显了,他在放出地狱之门后,又用LXXX让电脑放武将技。
(1) 地狱之门在寻找目标时,以intvIsLeft的敌方为目标,Engulf函数会将所有潜在目标放在一个局部数组v1里面:
v233 = 0;
while ((v233 < v232)) {
v1[v233] = GetNthSoldierInRect((intvIsLeft ^ 1), v236, v237, v241, v242, v233);
v233++;
}
(2) 上面这步结束后,生死门杀伤触发之前,玩家手动触发LXXX。此时,intvIsLeft, intvAttackerMajor, intvDefenderMajor三个预设变量分别被重置为电脑方、电脑主将和玩家主将;
(3) Engulf函数继续执行,触发生死门杀伤,对每一个潜在目标逐个判断是否与敌方主将intvDefenderMajor相等,如果不相等则吸入生死门:
if ((GetObjectContext(v1[v233], 0) != 123) && (v1[v233] != intvDefenderMajor)) {
asynccall KillMan(v1[v233], a0);
}
此时,电脑方主将在v1数组里,但intvDefenderMajor已被重设为我方主将,因此这条判断就无法生效,继续执行KillMan函数,导致电脑方主将被吸走。
解决方法也很简单:只需要求目标和双方主将都不等即可。
if ((GetObjectContext(v1[v233], 0) != 123) && (v1[v233] != intvDefenderMajor
&& v1[v233] != intvAttackerMajor)) {
asynccall KillMan(v1[v233], a0);
}