[LGN] fixed Berserk Murlodont not functioning correctly (fixes #7801)

This commit is contained in:
Evan Kranzler 2021-05-05 09:59:43 -04:00
parent ff64cb0cec
commit 6bb474a6d0
11 changed files with 88 additions and 63 deletions

View file

@ -1,9 +1,9 @@
package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
@ -11,16 +11,15 @@ import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
/**
*
* @author LevelX2
*/
public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl {
private FilterCreaturePermanent filter;
private boolean setTargetPointer;
private final FilterCreaturePermanent filter;
private final boolean setTargetPointer;
public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional) {
this(effect, optional, new FilterCreaturePermanent("a creature"), false);
this(effect, optional, StaticFilters.FILTER_PERMANENT_CREATURE_A, false);
}
public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter, boolean setTargetPointer) {
@ -45,7 +44,7 @@ public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl {
Permanent permanent = game.getPermanent(event.getTargetId());
if (filter.match(permanent, getSourceId(), getControllerId(), game)) {
if (setTargetPointer) {
this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId()));
this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game));
}
return true;
}

View file

@ -10,47 +10,36 @@ import mage.game.combat.CombatGroup;
/**
* @author Markedagain
*/
public class BlockedCreatureCount implements DynamicValue {
public enum BlockedCreatureCount implements DynamicValue {
ALL("each creature blocking it", false),
BEYOND_FIRST("each creature blocking it beyond the first", true);
private final String message;
private final boolean beyondTheFirst;
public BlockedCreatureCount() {
this("each creature blocking it");
}
public BlockedCreatureCount(String message) {
this(message, false);
}
public BlockedCreatureCount(String message, boolean beyondTheFirst) {
BlockedCreatureCount(String message, boolean beyondTheFirst) {
this.message = message;
this.beyondTheFirst = beyondTheFirst;
}
public BlockedCreatureCount(final BlockedCreatureCount dynamicValue) {
super();
this.message = dynamicValue.message;
this.beyondTheFirst = dynamicValue.beyondTheFirst;
}
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
for (CombatGroup combatGroup : game.getCombat().getGroups()) {
if (combatGroup.getAttackers().contains(sourceAbility.getSourceId())) {
int blockers = combatGroup.getBlockers().size();
if (beyondTheFirst) {
blockers = blockers > 0 ? blockers - 1 : 0;
}
return blockers;
if (!combatGroup.getAttackers().contains(sourceAbility.getSourceId())) {
continue;
}
int blockers = combatGroup.getBlockers().size();
if (beyondTheFirst) {
blockers = blockers > 0 ? blockers - 1 : 0;
}
return blockers;
}
return 0;
}
@Override
public BlockedCreatureCount copy() {
return new BlockedCreatureCount(this);
return this;
}
@Override