mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Fix bug that prevented dying triggers from firing
This commit is contained in:
@@ -218,6 +218,17 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean equals(Object o) {
|
||||
if (o == null) { return false; }
|
||||
return o.hashCode() == id && o.getClass().equals(getClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
|
||||
@@ -3078,11 +3078,6 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final int compareTo(final Card that) {
|
||||
/*
|
||||
* Return a negative integer of this < that, a positive integer if this
|
||||
* > that, and zero otherwise.
|
||||
*/
|
||||
|
||||
if (that == null) {
|
||||
/*
|
||||
* "Here we can arbitrarily decide that all non-null Cards are
|
||||
@@ -3090,20 +3085,9 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
||||
* return in this case, as long as it is consistent. I rather think
|
||||
* of null as being lowly." --Braids
|
||||
*/
|
||||
return +1;
|
||||
} else if (id > that.id) {
|
||||
return +1;
|
||||
} else if (id < that.id) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
return id;
|
||||
return Integer.compare(id, that.id);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -2005,34 +2005,12 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
mustAttackEntity = o;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final boolean equals(final Object o) {
|
||||
if (o instanceof Player) {
|
||||
final Player p1 = (Player) o;
|
||||
return p1.getName().equals(getName());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Player o) {
|
||||
if (o == null) {
|
||||
return +1;
|
||||
return 1;
|
||||
}
|
||||
int subtractedHash = o.hashCode() - hashCode();
|
||||
if (subtractedHash == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Math.abs(subtractedHash) / subtractedHash;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (41 * (41 + getName().hashCode()));
|
||||
return getName().compareTo(o.getName());
|
||||
}
|
||||
|
||||
public static class Predicates {
|
||||
|
||||
@@ -285,23 +285,21 @@ public class TriggerHandler {
|
||||
|
||||
// NAPs
|
||||
for (Player nap : game.getPlayers()) {
|
||||
if (!nap.equals(playerAP))
|
||||
if (!nap.equals(playerAP)) {
|
||||
checkStatics |= runNonStaticTriggersForPlayer(nap, mode, runParams, delayedTriggersWorkingCopy);
|
||||
}
|
||||
}
|
||||
|
||||
return checkStatics;
|
||||
}
|
||||
|
||||
private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerType mode,
|
||||
final Map<String, Object> runParams, final ArrayList<Trigger> delayedTriggersWorkingCopy ) {
|
||||
|
||||
boolean checkStatics = false;
|
||||
|
||||
Card card = null;
|
||||
for (final Trigger t : activeTriggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player)
|
||||
&& canRunTrigger(t, mode, runParams)) {
|
||||
boolean checkStatics = false;
|
||||
|
||||
for (final Trigger t : activeTriggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
|
||||
if (runParams.containsKey("Card")) {
|
||||
card = (Card) runParams.get("Card");
|
||||
if (runParams.containsKey("Destination") && !ZoneType.Battlefield.name().equals(runParams.get("Destination"))) {
|
||||
@@ -352,11 +350,9 @@ public class TriggerHandler {
|
||||
if (!regtrig.requirementsCheck(game)) {
|
||||
return false; // Conditions aren't right.
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private boolean canRunTrigger(final Trigger regtrig, final TriggerType mode, final Map<String, Object> runParams) {
|
||||
if (regtrig.getMode() != mode) {
|
||||
return false; // Not the right mode.
|
||||
@@ -395,8 +391,7 @@ public class TriggerHandler {
|
||||
} // Torpor Orb check
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Checks if the conditions are right for a single trigger to go off, and
|
||||
// runs it if so.
|
||||
// Return true if the trigger went off, false otherwise.
|
||||
@@ -419,7 +414,8 @@ public class TriggerHandler {
|
||||
|
||||
if (trigCard != null && (host.getId() == trigCard.getId())) {
|
||||
host = trigCard;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
host = game.getCardState(regtrig.getHostCard());
|
||||
}
|
||||
|
||||
@@ -431,7 +427,8 @@ public class TriggerHandler {
|
||||
public void resolve() {
|
||||
}
|
||||
};
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host);
|
||||
}
|
||||
}
|
||||
@@ -494,7 +491,8 @@ public class TriggerHandler {
|
||||
|
||||
if (regtrig.isStatic()) {
|
||||
wrapperAbility.getActivatingPlayer().getController().playTrigger(host, wrapperAbility, isMandatory);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
game.getStack().addSimultaneousStackEntry(wrapperAbility);
|
||||
}
|
||||
regtrig.setTriggeredSA(wrapperAbility);
|
||||
@@ -503,7 +501,8 @@ public class TriggerHandler {
|
||||
if (regtrig.getHostCard().isImmutable()) {
|
||||
Player p = regtrig.getHostCard().getController();
|
||||
p.getZone(ZoneType.Command).remove(regtrig.getHostCard());
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
regtrig.getHostCard().removeTrigger(regtrig);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,12 @@ public abstract class TrackableObject implements IIdentifiable {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean equals(Object o) {
|
||||
if (o == null) { return false; }
|
||||
return o.hashCode() == id && o.getClass().equals(getClass());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected <T> T get(TrackableProperty key) {
|
||||
T value = (T)props.get(key);
|
||||
|
||||
Reference in New Issue
Block a user