[DMC] Implement Robaran Mercenaries (#9502)

This commit is contained in:
PurpleCrowbar 2022-09-11 23:07:29 +01:00 committed by GitHub
parent f3e6eaae87
commit 20a1d2df93
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 2 deletions

View file

@ -73,7 +73,7 @@ class ManascapeRefractorGainAbilitiesEffect extends ContinuousEffectImpl {
public boolean apply(Game game, Ability source) {
Permanent perm = game.getPermanent(source.getSourceId());
if (perm == null) {
return true;
return false;
}
for (Ability ability : game.getState()
.getBattlefield()
@ -85,6 +85,7 @@ class ManascapeRefractorGainAbilitiesEffect extends ContinuousEffectImpl {
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|| ability.getAbilityType() == AbilityType.MANA)
.collect(Collectors.toList())) {
// optimization to disallow the adding of duplicate, unnecessary basic mana abilities
if (!(ability instanceof BasicManaAbility)
|| perm.getAbilities(game)
.stream()

View file

@ -0,0 +1,100 @@
package mage.cards.r;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.keyword.VigilanceAbility;
import mage.abilities.mana.BasicManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.Collection;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* @author PurpleCrowbar
*/
public final class RobaranMercenaries extends CardImpl {
public RobaranMercenaries(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.MERCENARY);
this.power = new MageInt(3);
this.toughness = new MageInt(4);
// Vigilance
this.addAbility(VigilanceAbility.getInstance());
// Robaran Mercenaries has all activated abilties of all legendary creatures you control.
this.addAbility(new SimpleStaticAbility(new RobaranMercenariesEffect()));
}
private RobaranMercenaries(final RobaranMercenaries card) {
super(card);
}
@Override
public RobaranMercenaries copy() {
return new RobaranMercenaries(this);
}
}
class RobaranMercenariesEffect extends ContinuousEffectImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent();
static {
filter.add(SuperType.LEGENDARY.getPredicate());
}
RobaranMercenariesEffect() {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
staticText = "{this} has all activated abilities of all legendary creatures you control.";
this.addDependencyType(DependencyType.AddingAbility);
}
private RobaranMercenariesEffect(final RobaranMercenariesEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent perm = game.getPermanent(source.getSourceId());
if (perm == null) {
return false;
}
for (Ability ability : game.getState()
.getBattlefield()
.getActivePermanents(filter, source.getControllerId(), source, game)
.stream()
.map(permanent -> permanent.getAbilities(game))
.flatMap(Collection::stream)
.filter(Objects::nonNull)
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|| ability.getAbilityType() == AbilityType.MANA)
.collect(Collectors.toList())) {
// optimization to disallow the adding of duplicate, unnecessary basic mana abilities
if (!(ability instanceof BasicManaAbility)
|| perm.getAbilities(game)
.stream()
.noneMatch(ability.getClass()::isInstance)) {
perm.addAbility(ability, source.getSourceId(), game);
}
}
return true;
}
@Override
public RobaranMercenariesEffect copy() {
return new RobaranMercenariesEffect(this);
}
}

View file

@ -150,9 +150,11 @@ public final class DominariaUnitedCommander extends ExpansionSet {
cards.add(new SetCardInfo("Read the Bones", 117, Rarity.COMMON, mage.cards.r.ReadTheBones.class));
cards.add(new SetCardInfo("Reliquary Tower", 227, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class));
cards.add(new SetCardInfo("Rienne, Angel of Rebirth", 166, Rarity.MYTHIC, mage.cards.r.RienneAngelOfRebirth.class));
cards.add(new SetCardInfo("Robaran Mercenaries", 22, Rarity.RARE, mage.cards.r.RobaranMercenaries.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Robaran Mercenaries", 72, Rarity.RARE, mage.cards.r.RobaranMercenaries.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Rocky Tar Pit", 228, Rarity.UNCOMMON, mage.cards.r.RockyTarPit.class));
cards.add(new SetCardInfo("Rohgahh, Kher Keep Overlord", 41, Rarity.RARE, mage.cards.r.RohgahhKherKeepOverlord.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Rohgahh, Kher Keep Overlord", 63, Rarity.RARE, mage.cards.r.RohgahhKherKeepOverlord.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Rocky Tar Pit", 228, Rarity.UNCOMMON, mage.cards.r.RockyTarPit.class));
cards.add(new SetCardInfo("Rosnakht, Heir of Rohgahh", 25, Rarity.RARE, mage.cards.r.RosnakhtHeirOfRohgahh.class));
cards.add(new SetCardInfo("Sandsteppe Citadel", 229, Rarity.UNCOMMON, mage.cards.s.SandsteppeCitadel.class));
cards.add(new SetCardInfo("Savage Lands", 230, Rarity.UNCOMMON, mage.cards.s.SavageLands.class));