mirror of
https://github.com/correl/mage.git
synced 2025-04-11 09:11:12 -09:00
* AI: fixed error on cards with target player or planeswalker;
This commit is contained in:
parent
6f150b4fe0
commit
67f02ec5ab
1 changed files with 19 additions and 1 deletions
|
@ -669,12 +669,26 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
||||||
if (target.getOriginalTarget() instanceof TargetPlayerOrPlaneswalker) {
|
if (target.getOriginalTarget() instanceof TargetPlayerOrPlaneswalker) {
|
||||||
List<Permanent> targets;
|
List<Permanent> targets;
|
||||||
TargetPlayerOrPlaneswalker origTarget = ((TargetPlayerOrPlaneswalker) target);
|
TargetPlayerOrPlaneswalker origTarget = ((TargetPlayerOrPlaneswalker) target);
|
||||||
|
|
||||||
|
// TODO: if effect is bad and no opponent's targets available then AI can't target yourself but must by rules
|
||||||
|
/*
|
||||||
|
battlefield:Computer:Mountain:5
|
||||||
|
hand:Computer:Viashino Pyromancer:3
|
||||||
|
battlefield:Human:Shalai, Voice of Plenty:1
|
||||||
|
*/
|
||||||
|
// TODO: in multiplayer game there many opponents - if random opponents don't have targets then AI must use next opponent, but it skips
|
||||||
|
// (e.g. you randomOpponentId must be replaced by List<UUID> randomOpponents)
|
||||||
|
|
||||||
|
// normal cycle (good for you, bad for opponents)
|
||||||
|
|
||||||
|
// possible good/bad permanents
|
||||||
if (outcome.isGood()) {
|
if (outcome.isGood()) {
|
||||||
targets = threats(abilityControllerId, source.getSourceId(), ((FilterPermanentOrPlayer) target.getFilter()).getPermanentFilter(), game, target.getTargets());
|
targets = threats(abilityControllerId, source.getSourceId(), ((FilterPermanentOrPlayer) target.getFilter()).getPermanentFilter(), game, target.getTargets());
|
||||||
} else {
|
} else {
|
||||||
targets = threats(randomOpponentId, source.getSourceId(), ((FilterPermanentOrPlayer) target.getFilter()).getPermanentFilter(), game, target.getTargets());
|
targets = threats(randomOpponentId, source.getSourceId(), ((FilterPermanentOrPlayer) target.getFilter()).getPermanentFilter(), game, target.getTargets());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// possible good/bad players
|
||||||
if (targets.isEmpty()) {
|
if (targets.isEmpty()) {
|
||||||
if (outcome.isGood()) {
|
if (outcome.isGood()) {
|
||||||
if (target.canTarget(getId(), abilityControllerId, source, game)) {
|
if (target.canTarget(getId(), abilityControllerId, source, game)) {
|
||||||
|
@ -685,9 +699,12 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// can't find targets (e.g. effect is bad, but you need take targets from yourself)
|
||||||
if (targets.isEmpty() && target.isRequired(source)) {
|
if (targets.isEmpty() && target.isRequired(source)) {
|
||||||
targets = game.getBattlefield().getActivePermanents(((TargetPlayerOrPlaneswalker) origTarget.getFilter()).getFilterPermanent(), playerId, game);
|
targets = game.getBattlefield().getActivePermanents(origTarget.getFilterPermanent(), playerId, game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try target permanent
|
||||||
for (Permanent permanent : targets) {
|
for (Permanent permanent : targets) {
|
||||||
List<UUID> alreadyTargeted = target.getTargets();
|
List<UUID> alreadyTargeted = target.getTargets();
|
||||||
if (target.canTarget(abilityControllerId, permanent.getId(), source, game)) {
|
if (target.canTarget(abilityControllerId, permanent.getId(), source, game)) {
|
||||||
|
@ -697,6 +714,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try target player as normal
|
||||||
if (outcome.isGood()) {
|
if (outcome.isGood()) {
|
||||||
if (target.canTarget(getId(), abilityControllerId, source, game)) {
|
if (target.canTarget(getId(), abilityControllerId, source, game)) {
|
||||||
return tryAddTarget(target, abilityControllerId, source, game);
|
return tryAddTarget(target, abilityControllerId, source, game);
|
||||||
|
|
Loading…
Add table
Reference in a new issue