[CLB] Implemented White Plume Adventurer

This commit is contained in:
Evan Kranzler 2022-05-17 20:18:18 -04:00
parent 4777466b50
commit 86dad5e54f
13 changed files with 524 additions and 9 deletions

View file

@ -26,6 +26,7 @@ import mage.constants.*;
import mage.counters.CounterType;
import mage.counters.Counters;
import mage.designations.Designation;
import mage.designations.Initiative;
import mage.designations.Monarch;
import mage.filter.Filter;
import mage.filter.FilterCard;
@ -36,6 +37,7 @@ import mage.filter.predicate.mageobject.NamePredicate;
import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.combat.Combat;
import mage.game.command.*;
import mage.game.command.dungeons.UndercityDungeon;
import mage.game.events.*;
import mage.game.events.TableEvent.EventType;
import mage.game.mulligan.Mulligan;
@ -536,21 +538,24 @@ public abstract class GameImpl implements Game {
));
}
private Dungeon getOrCreateDungeon(UUID playerId) {
private Dungeon getOrCreateDungeon(UUID playerId, boolean undercity) {
Dungeon dungeon = this.getPlayerDungeon(playerId);
if (dungeon != null && dungeon.hasNextRoom()) {
return dungeon;
}
removeDungeon(dungeon);
return this.addDungeon(Dungeon.selectDungeon(playerId, this), playerId);
return this.addDungeon(undercity ? new UndercityDungeon() : Dungeon.selectDungeon(playerId, this), playerId);
}
@Override
public void ventureIntoDungeon(UUID playerId) {
public void ventureIntoDungeon(UUID playerId, boolean undercity) {
if (playerId == null) {
return;
}
if (replaceEvent(GameEvent.getEvent(GameEvent.EventType.VENTURE, playerId, null, playerId))) {
return;
}
this.getOrCreateDungeon(playerId).moveToNextRoom(playerId, this);
this.getOrCreateDungeon(playerId, undercity).moveToNextRoom(playerId, this);
fireEvent(GameEvent.getEvent(GameEvent.EventType.VENTURED, playerId, null, playerId));
}
@ -3691,6 +3696,22 @@ public abstract class GameImpl implements Game {
}
}
@Override
public UUID getInitiativeId() {
return getState().getInitiativeId();
}
@Override
public void takeInitiative(Ability source, UUID initiativeId) {
if (getInitiativeId() == null) {
getState().addDesignation(new Initiative(), this, initiativeId);
} else if (!getInitiativeId().equals(initiativeId)) {
getState().setInitiativeId(initiativeId);
}
informPlayers(getPlayer(initiativeId).getLogName() + " takes the initiative");
fireEvent(new GameEvent(GameEvent.EventType.TOOK_INITIATIVE, initiativeId, source, initiativeId));
}
@Override
public int damagePlayerOrPlaneswalker(UUID playerOrWalker, int damage, UUID attackerId, Ability source, Game game, boolean combatDamage, boolean preventable) {
return damagePlayerOrPlaneswalker(playerOrWalker, damage, attackerId, source, game, combatDamage, preventable, null);