public DamageEventArg(Damage _d) { Type = MagicEventType.Damage; Damage = _d; }
void processPhaseBegin(PhaseEventArg pea) { foreach (Player p in Players) { p.PhaseDone = false; } priorityPlayer = _currentPlayer; switch (pea.Phase) { case GamePhases.Untap: cp.AllowedLandsToBePlayed = 1; cp.LifePointsGainedThisTurn = cp.LifePointsLooseThisTurn = 0; cp.CardToDraw = 1; foreach (CardInstance c in cp.InPlay.Cards) { c.HasSummoningSickness = false; c.TryToUntap(); } break; case GamePhases.Upkeep: break; case GamePhases.Draw: //if (pea.Player == cp) { while (cp.CardToDraw > 0) { cp.DrawOneCard(); cp.CardToDraw--; } //} break; case GamePhases.Main1: case GamePhases.Main2: break; case GamePhases.BeforeCombat: break; case GamePhases.DeclareAttacker: // if (cp.Type == Player.PlayerType.human) // stopChrono (); break; case GamePhases.DeclareBlocker: break; case GamePhases.FirstStrikeDame: Chrono.Reset(); foreach (CardInstance ac in cp.AttackingCreature.Where (cpac => cpac.HasAbility(AbilityEnum.FirstStrike) || cpac.HasAbility(AbilityEnum.DoubleStrike))) { Damage d = new Damage(null, ac, ac.Power); foreach (CardInstance def in ac.BlockingCreatures.Where (cpac => cpac.HasAbility(AbilityEnum.FirstStrike) || cpac.HasAbility(AbilityEnum.DoubleStrike))) { MagicStack.PushOnStack(new Damage(ac, def, def.Power)); } if (ac.BlockingCreatures.Count == 0) { d.Target = cp.Opponent; MagicStack.PushOnStack(d); } else if (ac.BlockingCreatures.Count == 1) { d.Target = ac.BlockingCreatures [0]; MagicStack.PushOnStack(d); } else { //push damages one by one for further resolution for (int i = 0; i < ac.Power; i++) { MagicStack.PushOnStack(new Damage(null, d.Source, 1)); } } } MagicStack.CheckStackForUnasignedDamage(); break; case GamePhases.CombatDamage: Chrono.Reset(); foreach (CardInstance ac in cp.AttackingCreature) { Damage d = new Damage(null, ac, ac.Power); foreach (CardInstance def in ac.BlockingCreatures.Where (cpac => !cpac.HasAbility(AbilityEnum.FirstStrike))) { MagicStack.PushOnStack(new Damage(ac, def, def.Power)); } if (ac.HasAbility(AbilityEnum.FirstStrike) && !ac.HasAbility(AbilityEnum.DoubleStrike)) { return; } if (ac.BlockingCreatures.Count == 0) { d.Target = cp.Opponent; MagicStack.PushOnStack(d); } else if (ac.BlockingCreatures.Count == 1) { d.Target = ac.BlockingCreatures [0]; MagicStack.PushOnStack(d); } else { for (int i = 0; i < ac.Power; i++) { MagicStack.PushOnStack(new Damage(null, d.Source, 1)); } } } MagicStack.CheckStackForUnasignedDamage(); break; case GamePhases.EndOfCombat: break; case GamePhases.EndOfTurn: break; case GamePhases.CleanUp: foreach (Player p in Players) { foreach (CardInstance ac in p.InPlay.Cards) { if (ac.Damages.Count > 0) { ac.Damages.Clear(); } } } int cardDiff = cp.Hand.Cards.Count - 7; Ability discard = new Ability(EffectType.Discard); discard.ValidTargets += new CardTarget() { ValidGroup = CardGroupEnum.Hand, Controler = ControlerType.You }; discard.Mandatory = true; discard.RequiredTargetCount = 1; discard.TargetPrompt = "Select card to discard"; for (int i = 0; i < cardDiff; i++) { MagicStack.PushOnStack(new AbilityActivation(null, discard) { GoesOnStack = false, Player = cp }); } break; } }