fix major bugs

This commit is contained in:
WEBXOSS 2017-04-01 01:10:44 +08:00
parent f190215329
commit 0cb82df17b
4 changed files with 77 additions and 76 deletions

61
Card.js
View file

@ -103,6 +103,7 @@ function Card (game,player,zone,pid,side) {
this.rise = info.rise; this.rise = info.rise;
this.acce = !!info.acce; this.acce = !!info.acce;
this.acceingCard = null; this.acceingCard = null;
this.trap = info.trap || null;
// 杂项 // 杂项
this.effectFilters = []; this.effectFilters = [];
@ -731,6 +732,8 @@ Card.prototype.moveTo = function (zone,arg) {
if (arg.faceup === undefined) arg.faceup = zone.faceup; if (arg.faceup === undefined) arg.faceup = zone.faceup;
if (arg.bottom === undefined) arg.bottom = zone.bottom; if (arg.bottom === undefined) arg.bottom = zone.bottom;
if (arg.isSummon) arg.bottom = false;
var card = this; var card = this;
// 效果过滤 (不会受到XXX的效果影响) // 效果过滤 (不会受到XXX的效果影响)
@ -824,7 +827,7 @@ Card.prototype.moveTo = function (zone,arg) {
} else { } else {
// 是 SIGNI 下方的卡,比如魅饰卡 // 是 SIGNI 下方的卡,比如魅饰卡
// 处理魅饰卡 // 处理魅饰卡
var signi = card.zone.getActualCards()[0]; var signi = card.zone.getSigni();
if (signi && card === signi.charm) { if (signi && card === signi.charm) {
moveEvent.isCharm = true; moveEvent.isCharm = true;
signi.charm = null; signi.charm = null;
@ -843,11 +846,10 @@ Card.prototype.moveTo = function (zone,arg) {
} else if (zone.name === 'SigniZone') { } else if (zone.name === 'SigniZone') {
if (card.zone.name !== 'SigniZone' || zone.player !== card.player) { if (card.zone.name !== 'SigniZone' || zone.player !== card.player) {
// 进入 SIGNI 区 // 进入 SIGNI 区
if (zone.getActualCards().length) { if (arg.isSummon) {
// rise if (card.rise) {
if (!arg.bottom && card.rise) {
// 被 rise 的卡“离场” // 被 rise 的卡“离场”
signi = zone.getActualCards()[0]; signi = zone.getSigni();
removeFromArr(signi,signi.player.signis); removeFromArr(signi,signi.player.signis);
signi.frozen = false; signi.frozen = false;
signi.fieldData = {}; signi.fieldData = {};
@ -855,19 +857,14 @@ Card.prototype.moveTo = function (zone,arg) {
charm = signi.charm; charm = signi.charm;
signi.charm = null; signi.charm = null;
signi.onLeaveField2.trigger({}); signi.onLeaveField2.trigger({});
// 出场 moveEvent.riseTarget = signi;
arg.bottom = false;
enterFieldEvent = moveEvent;
enterFieldEvent.riseTarget = signi;
card.player.signis.push(card);
} else {
// 放置到 SIGNI 下面的卡
// (目前不用处理)
} }
} else {
// 出场 // 出场
enterFieldEvent = moveEvent; enterFieldEvent = moveEvent;
zone.player.signis.push(card); zone.player.signis.push(card);
} else {
// 放置到 SIGNI 下方的卡
// 目前不需要处理
} }
} }
} else if ((zone.name === 'LrigZone') && !arg.bottom) { } else if ((zone.name === 'LrigZone') && !arg.bottom) {
@ -912,15 +909,15 @@ Card.prototype.moveTo = function (zone,arg) {
// 手牌中非公开的卡,在游戏逻辑中是"背面朝上"的,即: // 手牌中非公开的卡,在游戏逻辑中是"背面朝上"的,即:
// 对方不能查看;己方能查看(这是因为手牌区是 checkable 的). // 对方不能查看;己方能查看(这是因为手牌区是 checkable 的).
// 但在客户端中,手牌里的卡即使逻辑上是背面朝上的,仍显示为正面朝上. // 但在客户端中,手牌里的卡即使逻辑上是背面朝上的,仍显示为正面朝上.
// PS: 增加了陷阱,陷阱和手牌一样,是仅己方玩家可见的。 // PS: 增加了陷阱,陷阱是 chekcable 的,背面朝上,但己方玩家可见的。
card.player.output({ card.player.output({
type: 'MOVE_CARD', type: 'MOVE_CARD',
content: { content: {
card: card, card: card,
pid: (card.isFaceup || zone.checkable)? card.pid : 0, pid: (card.isFaceup || arg.isTrap || zone.checkable)? card.pid : 0,
zone: zone, zone: zone,
up: arg.up, up: arg.up,
faceup: (arg.isTrap || zone.inhand)? true : arg.faceup, faceup: zone.inhand? true : arg.faceup,
bottom: arg.bottom, bottom: arg.bottom,
isSide: arg.isSide isSide: arg.isSide
} }
@ -1146,7 +1143,7 @@ Card.prototype.attackAsyn = function () {
if (!zones.length) return attackedZone = opposingZone; if (!zones.length) return attackedZone = opposingZone;
return this.player.selectAsyn('TARGET',zones).callback(this,function (zone) { return this.player.selectAsyn('TARGET',zones).callback(this,function (zone) {
attackedZone = zone attackedZone = zone
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (card) card.beSelectedAsTarget(); if (card) card.beSelectedAsTarget();
}); });
}).callback(this,function () { }).callback(this,function () {
@ -1202,19 +1199,16 @@ Card.prototype.attackAsyn = function () {
var trap = opposingZone.trap var trap = opposingZone.trap
return Callback.immediately().callback(this,function () { return Callback.immediately().callback(this,function () {
if (opposingSigni || !trap) return; if (opposingSigni || !trap) return;
return this.player.selectOptionalAsyn('LAUNCH',[trap]).callback(this,function (card) { return this.player.opponent.selectOptionalAsyn('LAUNCH',[trap]).callback(this,function (card) {
if (!card) return; if (!card) return;
card.beSelectedAsTarget(); return card.handleTrapAsyn();
return card.trap.actionAsyn.call(card).callback(this,function () {
card.trash();
});
}); });
}).callback(this,function () { }).callback(this,function () {
// 攻击被无效,结束处理 // 攻击被无效,结束处理
if (event.prevented) return; if (event.prevented) return;
// 若攻击的目标存在,进行战斗; // 若攻击的目标存在,进行战斗;
// (暗杀的情况下,目标为正对面的 SIGNI 时,不战斗) // (暗杀的情况下,目标为正对面的 SIGNI 时,不战斗)
var target = attackedZone.getActualCards()[0] || null; var target = attackedZone.getSigni() || null;
var battle = true; var battle = true;
if (!target) battle = false; if (!target) battle = false;
if (card.assassin && (target === opposingSigni)) return false; if (card.assassin && (target === opposingSigni)) return false;
@ -1425,6 +1419,7 @@ Card.prototype.summonAsyn = function (optional,dontTriggerStartUp,down) {
if (!card) return; if (!card) return;
return this.player.selectSummonZoneAsyn(false,this.rise).callback(this,function (zone) { return this.player.selectSummonZoneAsyn(false,this.rise).callback(this,function (zone) {
card.moveTo(zone,{ card.moveTo(zone,{
isSummon: true,
dontTriggerStartUp: dontTriggerStartUp, dontTriggerStartUp: dontTriggerStartUp,
up: !down up: !down
}); });
@ -1534,7 +1529,7 @@ Card.prototype.getTotalEnerCost = function (original) {
Card.prototype.getOpposingSigni = function () { Card.prototype.getOpposingSigni = function () {
if (!inArr(this,this.player.signis)) return null; if (!inArr(this,this.player.signis)) return null;
var idx = 2 - this.player.signiZones.indexOf(this.zone); var idx = 2 - this.player.signiZones.indexOf(this.zone);
return this.player.opponent.signiZones[idx].getActualCards()[0] || null; return this.player.opponent.signiZones[idx].getSigni() || null;
}; };
Card.prototype.charmTo = function (signi) { Card.prototype.charmTo = function (signi) {
@ -1553,7 +1548,6 @@ Card.prototype.trapTo = function(zone) {
zone.trap = this; zone.trap = this;
this.moveTo(zone,{ this.moveTo(zone,{
faceup: false, faceup: false,
up: signi.isUp,
isTrap: true, isTrap: true,
}); });
}; };
@ -1665,4 +1659,19 @@ Card.prototype.isInfected = function() {
return this.zone.virus; return this.zone.virus;
}; };
Card.prototype.handleTrapAsyn = function() {
return Callback.immediately().callback(this,function () {
if (this.zone.cards.indexOf(this) === 0) {
this.faceup();
} else {
return this.player.opponent.showCardsAsyn([this]);
}
}).callback(this,function () {
if (!this.trap) return;
return this.trap.actionAsyn.call(this);
}).callback(this,function () {
this.trash();
});
};
global.Card = Card; global.Card = Card;

View file

@ -25883,7 +25883,7 @@ var CardInfo = {
if (!inArr(card,card.player.signis)) return; if (!inArr(card,card.player.signis)) return;
var idx = 2 - card.player.signiZones.indexOf(card.zone); var idx = 2 - card.player.signiZones.indexOf(card.zone);
var zone = this.player.signiZones[idx]; var zone = this.player.signiZones[idx];
var opposingSigni = zone.getActualCards()[0]; var opposingSigni = zone.getSigni();
var opposingSigni = card.getOpposingSigni(); var opposingSigni = card.getOpposingSigni();
if (opposingSigni) return; if (opposingSigni) return;
if (zone.disabled) return; if (zone.disabled) return;
@ -27223,8 +27223,8 @@ var CardInfo = {
},this); },this);
var zones = this.player.opponent.signiZones.filter(function (zone) { var zones = this.player.opponent.signiZones.filter(function (zone) {
if (zone.disabled) return false; if (zone.disabled) return false;
var cards = zone.getActualCards(); var signi = zone.getSigni();
return (!cards.length) || (!cards[0].isEffectFiltered()); return !card || !card.isEffectFiltered();
},this); },this);
return Callback.loop(this,2,function () { return Callback.loop(this,2,function () {
if (done) return; if (done) return;
@ -28304,8 +28304,8 @@ var CardInfo = {
},this); },this);
var zones = this.player.signiZones.filter(function (zone) { var zones = this.player.signiZones.filter(function (zone) {
if (zone.disabled) return false; if (zone.disabled) return false;
var cards = zone.getActualCards(); var signi = zone.getSigni();
return (!cards.length) || (!cards[0].isEffectFiltered()); return !card || !card.isEffectFiltered();
},this); },this);
return Callback.loop(this,2,function () { return Callback.loop(this,2,function () {
if (done) return; if (done) return;
@ -38881,7 +38881,7 @@ var CardInfo = {
source: this, source: this,
destroyTimming: this.game.phase.onTurnEnd, destroyTimming: this.game.phase.onTurnEnd,
action: function (set,add) { action: function (set,add) {
var card = this.player.signiZones[1].getActualCards()[0]; var card = this.player.signiZones[1].getSigni();
if (card) { if (card) {
set(card,'doubleCrash',true); set(card,'doubleCrash',true);
} }
@ -38893,7 +38893,7 @@ var CardInfo = {
once: true, once: true,
destroyTimming: this.game.phase.onTurnEnd, destroyTimming: this.game.phase.onTurnEnd,
action: function (set,add) { action: function (set,add) {
var card = this.player.signiZones[1].getActualCards()[0]; var card = this.player.signiZones[1].getSigni();
if (card) { if (card) {
set(card,'doubleCrash',true); set(card,'doubleCrash',true);
} }
@ -64100,7 +64100,7 @@ var CardInfo = {
destroyTimming: [this.game.phase.onTurnEnd], destroyTimming: [this.game.phase.onTurnEnd],
action: function (set,add) { action: function (set,add) {
set(zone,'powerDown',true); set(zone,'powerDown',true);
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!card) return; if (!card) return;
add(card,'power',-7000); add(card,'power',-7000);
} }
@ -64113,7 +64113,7 @@ var CardInfo = {
destroyTimming: [this.game.phase.onTurnEnd], destroyTimming: [this.game.phase.onTurnEnd],
action: function (set,add) { action: function (set,add) {
set(zone,'powerDown',true); set(zone,'powerDown',true);
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!card) return; if (!card) return;
add(card,'power',-7000); add(card,'power',-7000);
} }
@ -79269,7 +79269,7 @@ var CardInfo = {
},this); },this);
return this.player.selectAsyn('TRASH_CHARM',zones).callback(this,function (zone) { return this.player.selectAsyn('TRASH_CHARM',zones).callback(this,function (zone) {
if (!zone) return; if (!zone) return;
var card = zone.getActualCards()[0].charm; var card = zone.getSigni().charm;
card.trash(); card.trash();
}); });
}); });
@ -82803,7 +82803,7 @@ var CardInfo = {
destroyTimming: this.game.phase.onTurnEnd, destroyTimming: this.game.phase.onTurnEnd,
action: function (set,add) { action: function (set,add) {
var zone = this.player.signiZones[1]; var zone = this.player.signiZones[1];
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!inArr(card,this.player.signis)) return; if (!inArr(card,this.player.signis)) return;
var opposingSigni = card.getOpposingSigni(); var opposingSigni = card.getOpposingSigni();
if (!opposingSigni || !opposingSigni.charm) return; if (!opposingSigni || !opposingSigni.charm) return;
@ -87968,7 +87968,7 @@ var CardInfo = {
destroyTimming: this.game.phase.onTurnEnd, destroyTimming: this.game.phase.onTurnEnd,
action: function (set,add) { action: function (set,add) {
var zone = this.player.signiZones[1]; var zone = this.player.signiZones[1];
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!inArr(card,this.player.signis)) return; if (!inArr(card,this.player.signis)) return;
add(card,'power',5000); add(card,'power',5000);
set(card,'lancer',true); set(card,'lancer',true);
@ -104711,7 +104711,7 @@ var CardInfo = {
destroyTimming: this.game.phase.onTurnEnd, destroyTimming: this.game.phase.onTurnEnd,
action: function (set,add) { action: function (set,add) {
var zone = this.player.signiZones[1]; var zone = this.player.signiZones[1];
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!inArr(card,this.player.signis)) return; if (!inArr(card,this.player.signis)) return;
if (!card.hasClass('龍獣')) return; if (!card.hasClass('龍獣')) return;
set(card,'doubleCrash',true); set(card,'doubleCrash',true);
@ -119414,7 +119414,7 @@ var CardInfo = {
}, },
actionAsyn: function (event) { actionAsyn: function (event) {
var zones = this.player.signiZones.filter(function (zone) { var zones = this.player.signiZones.filter(function (zone) {
return !zone.disabled && (zone !== event.card.zone) && !zone.getActualCards().length; return !zone.disabled && (zone !== event.card.zone) && !zone.getSigni();
},this); },this);
if (!zones.length) return; if (!zones.length) return;
return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) { return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) {
@ -119502,7 +119502,7 @@ var CardInfo = {
}, },
actionAsyn: function (event) { actionAsyn: function (event) {
var zones = this.player.signiZones.filter(function (zone) { var zones = this.player.signiZones.filter(function (zone) {
return !zone.disabled && (zone !== event.card.zone) && !zone.getActualCards().length; return !zone.disabled && (zone !== event.card.zone) && !zone.getSigni();
},this); },this);
if (!zones.length) return; if (!zones.length) return;
return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) { return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) {
@ -119590,7 +119590,7 @@ var CardInfo = {
}, },
actionAsyn: function (event) { actionAsyn: function (event) {
var zones = this.player.signiZones.filter(function (zone) { var zones = this.player.signiZones.filter(function (zone) {
return !zone.disabled && (zone !== event.card.zone) && !zone.getActualCards().length; return !zone.disabled && (zone !== event.card.zone) && !zone.getSigni();
},this); },this);
if (!zones.length) return; if (!zones.length) return;
return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) { return this.player.selectAsyn('RESET_SIGNI_ZONE',zones).callback(this,function (zone) {
@ -127048,7 +127048,7 @@ var CardInfo = {
if (!zone) return; if (!zone) return;
zone.trap.moveTo(this.player.handZone); zone.trap.moveTo(this.player.handZone);
}); });
}) });
} }
}] }]
}, },
@ -127311,7 +127311,7 @@ var CardInfo = {
var source = this.game.getEffectSource(); var source = this.game.getEffectSource();
if (source && source.player === this.player) return false; if (source && source.player === this.player) return false;
return true; return true;
} },
actionAsyn: function () { actionAsyn: function () {
return this.player.draw(1); return this.player.draw(1);
} }
@ -127328,7 +127328,7 @@ var CardInfo = {
var source = this.game.getEffectSource(); var source = this.game.getEffectSource();
if (source && source.player === this.player) return false; if (source && source.player === this.player) return false;
return true; return true;
} },
actionAsyn: function () { actionAsyn: function () {
return this.player.revealAsyn(3).callback(this,function (cards) { return this.player.revealAsyn(3).callback(this,function (cards) {
var targets = cards.filter(function (card) { var targets = cards.filter(function (card) {
@ -127725,12 +127725,7 @@ var CardInfo = {
},this); },this);
return this.player.selectAsyn('LAUNCH',zones).callback(this,function (zone) { return this.player.selectAsyn('LAUNCH',zones).callback(this,function (zone) {
if (!zone) return; if (!zone) return;
var card = zone.trap; return zone.trap.handleTrapAsyn();
return this.player.opponent.showCardsAsyn([card]).callback(this,function () {
return card.trap.actionAsyn.call(card);
}).callback(this,function () {
card.trash();
});
}); });
} }
} }
@ -128292,7 +128287,7 @@ var CardInfo = {
startUpEffects: [{ startUpEffects: [{
actionAsyn: function () { actionAsyn: function () {
if (this.player.opponent.lifeClothZone.cards.length <= this.player.lifeClothZone.cards.length) return; if (this.player.opponent.lifeClothZone.cards.length <= this.player.lifeClothZone.cards.length) return;
var signi = this.player.opponent.signiZones[1].getActualCards()[0]; var signi = this.player.opponent.signiZones[1].getSigni();
if (!signi) return; if (!signi) return;
return signi.banishAsyn(); return signi.banishAsyn();
} }
@ -128392,11 +128387,7 @@ var CardInfo = {
actionAsyn: function () { actionAsyn: function () {
var card = this.zone.trap; var card = this.zone.trap;
if (!card) return; if (!card) return;
return this.player.opponent.showCardsAsyn([card]).callback(this,function () { return card.handleTrapAsyn();
return card.trap.actionAsyn.call(card);
}).callback(this,function () {
card.trash();
});
}, },
}], }],
// ====================== // ======================
@ -128916,7 +128907,6 @@ var CardInfo = {
"costGreen": 0, "costGreen": 0,
"costColorless": 0, "costColorless": 0,
"guardFlag": false, "guardFlag": false,
],
"multiEner": false, "multiEner": false,
cardText: "苦しめよ。 ~オイゴナ~", cardText: "苦しめよ。 ~オイゴナ~",
cardText_zh_CN: "", cardText_zh_CN: "",
@ -132503,7 +132493,7 @@ var CardInfo = {
}); });
}, },
}); });
add(this.opponent,'onAttack',effect); add(this.player.opponent,'onAttack',effect);
} }
}); });
} }
@ -132578,7 +132568,6 @@ var CardInfo = {
"costGreen": 0, "costGreen": 0,
"costColorless": 0, "costColorless": 0,
"guardFlag": false, "guardFlag": false,
],
"multiEner": false, "multiEner": false,
cardText: "ドキドキさせられちゃいますわ♥ ~ナナシ~", cardText: "ドキドキさせられちゃいますわ♥ ~ナナシ~",
cardText_zh_CN: "", cardText_zh_CN: "",
@ -132595,7 +132584,7 @@ var CardInfo = {
"【自】あなたのメインフェイズ開始時、対戦相手のシグニゾーンつに【ウィルス】1つを置く。", "【自】あなたのメインフェイズ開始時、対戦相手のシグニゾーンつに【ウィルス】1つを置く。",
], ],
constEffectTexts_en: [ constEffectTexts_en: [
"[Constant]: All of your opponent's infected SIGNI get 1000 power." "[Constant]: All of your opponent's infected SIGNI get 1000 power.",
"[Auto]: When your main phase starts, put 1 [Virus] on 1 of your opponent's SIGNI Zones.", "[Auto]: When your main phase starts, put 1 [Virus] on 1 of your opponent's SIGNI Zones.",
], ],
constEffects: [{ constEffects: [{
@ -133635,7 +133624,7 @@ var CardInfo = {
actionAsyn: function () { actionAsyn: function () {
if (this.player.hands.length <= 2) { if (this.player.hands.length <= 2) {
this.player.draw(1); this.player.draw(1);
}, }
}, },
}], }],
// ====================== // ======================
@ -133711,7 +133700,7 @@ var CardInfo = {
actionAsyn: function () { actionAsyn: function () {
if (this.player.getTraps().length) { if (this.player.getTraps().length) {
this.player.draw(1); this.player.draw(1);
}, }
}, },
}], }],
}, },
@ -134197,7 +134186,7 @@ var CardInfo = {
this.player.enerCharge(1); this.player.enerCharge(1);
} }
}); });
}, }
}, },
}, },
}, },
@ -134530,7 +134519,7 @@ var CardInfo = {
return this.player.signis.some(function (signi) { return this.player.signis.some(function (signi) {
return signi.rise; return signi.rise;
},this); },this);
} },
actionAsyn: function () { actionAsyn: function () {
return this.banishSigniAsyn(12000); return this.banishSigniAsyn(12000);
} }
@ -134717,7 +134706,7 @@ var CardInfo = {
return this.player.signis.some(function (signi) { return this.player.signis.some(function (signi) {
return signi.rise; return signi.rise;
},this); },this);
} },
actionAsyn: function () { actionAsyn: function () {
return this.banishSigniAsyn(5000); return this.banishSigniAsyn(5000);
} }
@ -134834,7 +134823,7 @@ var CardInfo = {
return this.player.signis.some(function (signi) { return this.player.signis.some(function (signi) {
return signi.rise; return signi.rise;
},this); },this);
} },
actionAsyn: function () { actionAsyn: function () {
return this.banishSigniAsyn(2000); return this.banishSigniAsyn(2000);
} }

View file

@ -400,17 +400,14 @@ Player.prototype.summonSigniAsyn = function () {
var cards = this.hands.filter(function (card) { var cards = this.hands.filter(function (card) {
return card.canSummon() && (!this.summonPowerLimit || (card.power < this.summonPowerLimit)); return card.canSummon() && (!this.summonPowerLimit || (card.power < this.summonPowerLimit));
},this); },this);
var zones = this.signiZones.filter(function (zone) { if (!cards.length) {
return (zone.getActualCards().length === 0);
},this);
if (!cards.length || !zones.length) {
return Callback.never(); return Callback.never();
} }
return this.selectAsyn('SUMMON_SIGNI',cards).callback(this,function (card) { return this.selectAsyn('SUMMON_SIGNI',cards).callback(this,function (card) {
return this.selectSummonZoneAsyn(true,card.rise).callback(this,function (zone) { return this.selectSummonZoneAsyn(true,card.rise).callback(this,function (zone) {
if (!zone) return; if (!zone) return;
return this.game.blockAsyn(this,function () { return this.game.blockAsyn(this,function () {
card.moveTo(zone); card.moveTo(zone,{isSummon: true});
this.game.handleFrameEnd(); // 增加一个空帧,以进行两次常计算 this.game.handleFrameEnd(); // 增加一个空帧,以进行两次常计算
}); });
}); });
@ -455,7 +452,7 @@ Player.prototype.summonResonaAsyn = function (card) {
return this.selectSummonZoneAsyn(false).callback(this,function (zone) { return this.selectSummonZoneAsyn(false).callback(this,function (zone) {
if (!zone) return; if (!zone) return;
return this.game.blockAsyn(this,function () { return this.game.blockAsyn(this,function () {
card.moveTo(zone,{resonaArg: resonaArg}); card.moveTo(zone,{isSummon: true, resonaArg: resonaArg});
this.game.handleFrameEnd(); // 增加一个空帧,以进行两次常计算 this.game.handleFrameEnd(); // 增加一个空帧,以进行两次常计算
}); });
}); });
@ -477,13 +474,13 @@ Player.prototype.getSummonZones = function (signis,rise) {
var forcedZones = []; var forcedZones = [];
var zones = this.signiZones.filter(function (zone,idx) { var zones = this.signiZones.filter(function (zone,idx) {
if (zone.disabled) return false; if (zone.disabled) return false;
var signi = zone.getActualCards()[0]; var signi = zone.getSigni();
if (rise) { if (rise) {
if (!signi || !rise(signi)) return false; if (!signi || !rise(signi)) return false;
} else { } else {
if (signi && inArr(signi,signis)) return false; if (signi && inArr(signi,signis)) return false;
} }
var opposingSigni = this.opponent.signiZones[2-idx].getActualCards()[0]; var opposingSigni = this.opponent.signiZones[2-idx].getSigni();
if (opposingSigni && opposingSigni.forceSummonZone) { if (opposingSigni && opposingSigni.forceSummonZone) {
forcedZones.push(zone); forcedZones.push(zone);
} }
@ -2228,7 +2225,7 @@ Player.prototype.setCrossPair = function () {
if (!card.crossLeft && !card.crossRight) return; if (!card.crossLeft && !card.crossRight) return;
function checkMatch (zone,cross) { function checkMatch (zone,cross) {
if (!zone) return null; if (!zone) return null;
var card = zone.getActualCards()[0]; var card = zone.getSigni();
if (!card) return null; if (!card) return null;
var cids = concat(cross); var cids = concat(cross);
var matched = cids.some(function (cid) { var matched = cids.some(function (cid) {

View file

@ -59,6 +59,12 @@ Zone.prototype.getActualCards = function () {
},this); },this);
}; };
Zone.prototype.getSigni = function() {
return this.player.signis.filter(function (signi) {
return signi.zone === this;
},this)[0] || null;
};
Zone.prototype.moveCardsToTop = function (cards) { Zone.prototype.moveCardsToTop = function (cards) {
cards = cards.filter(function (card) { cards = cards.filter(function (card) {
return inArr(card,this.cards); return inArr(card,this.cards);