1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-03-30 09:08:36 -09:00

Merge fix

This commit is contained in:
Oleg Agafonov 2019-07-04 18:19:46 +04:00
parent 6e5ba7a446
commit 6848626c4b
3 changed files with 28 additions and 36 deletions

View file

@ -346,23 +346,6 @@ public abstract class AbilityImpl implements Ability {
}
}
}
//20100716 - 601.2e
if (sourceObject != null) {
sourceObject.adjustCosts(this, game);
if (sourceObject instanceof Card) {
for (Ability ability : ((Card) sourceObject).getAbilities(game)) {
if (ability instanceof AdjustingSourceCosts) {
((AdjustingSourceCosts) ability).adjustCosts(this, game);
}
}
} else {
for (Ability ability : sourceObject.getAbilities()) {
if (ability instanceof AdjustingSourceCosts) {
((AdjustingSourceCosts) ability).adjustCosts(this, game);
}
}
}
}
// this is a hack to prevent mana abilities with mana costs from causing endless loops - pay other costs first
if (this instanceof ActivatedManaAbilityImpl && !costs.pay(this, game, sourceId, controllerId, noMana, null)) {
@ -372,6 +355,26 @@ public abstract class AbilityImpl implements Ability {
//20101001 - 601.2e
if (costModificationActive) {
// TODO: replace all AdjustingSourceCosts abilities to continuus effect, see Affinity example
//20100716 - 601.2e
if (sourceObject != null) {
sourceObject.adjustCosts(this, game);
if (sourceObject instanceof Card) {
for (Ability ability : ((Card) sourceObject).getAbilities(game)) {
if (ability instanceof AdjustingSourceCosts) {
((AdjustingSourceCosts) ability).adjustCosts(this, game);
}
}
} else {
for (Ability ability : sourceObject.getAbilities()) {
if (ability instanceof AdjustingSourceCosts) {
((AdjustingSourceCosts) ability).adjustCosts(this, game);
}
}
}
}
game.getContinuousEffects().costModification(this, game);
} else {
costModificationActive = true;

View file

@ -7,12 +7,14 @@ import mage.game.Game;
* Interface for abilities that adjust source and only source costs. For the
* cases when some permanent adjusts costs of other spells use
* {@link mage.abilities.effects.CostModificationEffect}.
*
* <p>
* Example of such source costs adjusting:
* {@link mage.abilities.keyword.AffinityForArtifactsAbility}
*
* @author nantuko
*/
@Deprecated
// replace all AdjustingSourceCosts with "extends CostModificationEffectImpl with zone.ALL" (see Affinity example)
@FunctionalInterface
public interface AdjustingSourceCosts {

View file

@ -1,24 +1,21 @@
package mage.abilities.keyword;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.AdjustingSourceCosts;
import mage.abilities.effects.common.AffinityEffect;
import mage.abilities.hint.common.ArtifactsYouControlHint;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.util.CardUtil;
/**
* Affinity for artifacts
*/
public class AffinityForArtifactsAbility extends SimpleStaticAbility implements AdjustingSourceCosts {
public class AffinityForArtifactsAbility extends SimpleStaticAbility {
public AffinityForArtifactsAbility() {
super(Zone.OUTSIDE, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT));
super(Zone.ALL, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT));
setRuleAtTheTop(true);
this.addHint(ArtifactsYouControlHint.instance);
}
public AffinityForArtifactsAbility(final AffinityForArtifactsAbility ability) {
@ -34,14 +31,4 @@ public class AffinityForArtifactsAbility extends SimpleStaticAbility implements
public String getRule() {
return "affinity for artifacts <i>(This spell costs {1} less to cast for each artifact you control.)</i>";
}
@Override
public void adjustCosts(Ability ability, Game game) {
if (ability instanceof SpellAbility) {
int count = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ability.getControllerId(), game).size();
if (count > 0) {
CardUtil.adjustCost((SpellAbility)ability, count);
}
}
}
}