public YanHuo() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(true); }, (p, e, a) => { int X = p.HandCards().Count + p.Equipments().Count; Player opponent = Game.CurrentGame.Players.First(pl => pl != p); Trace.Assert(opponent != null); while (X-- > 0 && opponent.HandCards().Count + opponent.Equipments().Count > 0) { List <DeckPlace> decks = new List <DeckPlace>() { new DeckPlace(opponent, DeckType.Hand), new DeckPlace(opponent, DeckType.Equipment) }; List <List <Card> > answer; if (!p.AskForCardChoice(new CardChoicePrompt("YanHuo"), decks, new List <string>() { "YanHuo" }, new List <int>() { 1 }, new RequireOneCardChoiceVerifier(true), out answer)) { answer = new List <List <Card> >(); answer.Add(Game.CurrentGame.PickDefaultCardsFrom(decks)); } Game.CurrentGame.HandleCardDiscard(opponent, answer[0]); } }, TriggerCondition.OwnerIsTarget ); Triggers.Add(GameEvent.PlayerIsDead, trigger); IsAutoInvoked = true; }
public HatSwitch() : base("Hat Switch", new Size(100d, 100d)) { _centerImage = "{Helios}/Images/Hats/hat-center.png"; _upImage = "{Helios}/Images/Hats/hat-up.png"; _downImage = "{Helios}/Images/Hats/hat-down.png"; _leftImage = "{Helios}/Images/Hats/hat-left.png"; _rightImage = "{Helios}/Images/Hats/hat-right.png"; _upTrigger = new HeliosTrigger(this, "", "up", "entered", "Triggered when the hat is moved into the up position."); Triggers.Add(_upTrigger); _upExitTrigger = new HeliosTrigger(this, "", "up", "exited", "Triggered when the hat is returning from the up position."); Triggers.Add(_upExitTrigger); _downTrigger = new HeliosTrigger(this, "", "down", "entered", "Triggered when the hat is moved into the down position."); Triggers.Add(_downTrigger); _downExitTrigger = new HeliosTrigger(this, "", "down", "exited", "Triggered when the hat is returning from the down position."); Triggers.Add(_downExitTrigger); _leftTrigger = new HeliosTrigger(this, "", "left", "entered", "Triggered when the hat is moved into the left position."); Triggers.Add(_leftTrigger); _leftExitTrigger = new HeliosTrigger(this, "", "left", "exited", "Triggered when the hat is returning from the left position."); Triggers.Add(_leftExitTrigger); _rightTrigger = new HeliosTrigger(this, "", "right", "entered", "Triggered when the hat is moved into the right position."); Triggers.Add(_rightTrigger); _rightExitTrigger = new HeliosTrigger(this, "", "right", "exited", "Triggered when the hat is returning from the right position."); Triggers.Add(_rightExitTrigger); _centerTrigger = new HeliosTrigger(this, "", "center", "entered", "Triggered when the hat is moved back to the center position."); Triggers.Add(_centerTrigger); _centerExitTrigger = new HeliosTrigger(this, "", "center", "exited", "Triggered when the hat is exiting from the center position."); Triggers.Add(_centerExitTrigger); _positionValue = new HeliosValue(this, new BindingValue((double)SwitchPosition), "", "position", "Current position of the hat switch.", "Position 0 = center, 1 = up, 2 = down, 3 = left, or 4 = right.", BindingValueUnits.Numeric); _positionValue.Execute += new HeliosActionHandler(SetPositionAction_Execute); Values.Add(_positionValue); Triggers.Add(_positionValue); Actions.Add(_positionValue); UpdatePoints(); }
public ZhiYan() { var trigger = new AutoNotifyUsagePassiveSkillTrigger( this, (p, e, a) => { return(true); }, (p, e, a, c, pls) => { Game.CurrentGame.SyncImmutableCardAll(Game.CurrentGame.PeekCard(0)); Card card = Game.CurrentGame.PeekCard(0); Game.CurrentGame.DrawCards(pls[0], 1); Game.CurrentGame.SyncImmutableCardAll(card); if (card.Type.BaseCategory() == CardCategory.Equipment) { Game.CurrentGame.RecoverHealth(pls[0], pls[0], 1); var args = new GameEventArgs(); args.Source = pls[0]; args.Targets = new List <Player>(); args.Skill = null; args.Cards = new List <Card>() { card }; Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } else { Game.CurrentGame.HideHandCard(card); } }, TriggerCondition.OwnerIsSource, new ZhiYanVerifier() ) { }; Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger); }
public ZhuGeLianNuSkill() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.Source[Sha.NumberOfShaUsed] > 0 && a.Card.Type is Sha); }, (p, e, a) => { }, TriggerCondition.OwnerIsSource ); var trigger2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { throw new TriggerResultException(TriggerResult.Success); }, TriggerCondition.OwnerIsSource ) { IsAutoNotify = false }; var trigger3 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { ShaEventArgs args = (ShaEventArgs)a; args.TargetApproval[0] = true; }, TriggerCondition.OwnerIsSource ) { IsAutoNotify = false, Priority = int.MaxValue, Type = TriggerType.Skill }; Triggers.Add(GameEvent.PlayerUsedCard, trigger); Triggers.Add(Sha.PlayerNumberOfShaCheck, trigger2); Triggers.Add(Sha.PlayerShaTargetValidation, trigger3); IsEnforced = true; }
public BaoNveGivenSkill() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.ReadonlyCard[BaoNveUsable] == 1); }, (p, e, a) => { NotifySkillUse(new List <Player>() { Master }); a.ReadonlyCard[BaoNveUsable] = 0; var result = Game.CurrentGame.Judge(p, this, null, (judgeResultCard) => { return(judgeResultCard.Suit == SuitType.Spade); }); if (result.Suit == SuitType.Spade) { Game.CurrentGame.RecoverHealth(p, Master, 1); } }, TriggerCondition.OwnerIsSource ) { IsAutoNotify = false }; Triggers.Add(GameEvent.AfterDamageCaused, trigger); var trigger2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { a.ReadonlyCard[BaoNveUsable] = 1; }, TriggerCondition.OwnerIsSource ) { IsAutoNotify = false, AskForConfirmation = false, Priority = int.MinValue }; Triggers.Add(GameEvent.DamageInflicted, trigger2); IsAutoInvoked = false; }
public void Add(DbSchemaObject schemaObject) { switch (schemaObject.SchemaObjectType) { case ESchemaObjectType.Table: Tables.Add((DbTable)schemaObject); break; case ESchemaObjectType.View: Views.Add((DbView)schemaObject); break; case ESchemaObjectType.StoredProcedure: StoredProcs.Add((DbStoredProc)schemaObject); break; case ESchemaObjectType.ScalarFunction: ScalarFunctions.Add((DbScalarFunction)schemaObject); break; case ESchemaObjectType.TableFunction: TableFunctions.Add((DbTableFunction)schemaObject); break; case ESchemaObjectType.Trigger: Triggers.Add((DbTrigger)schemaObject); break; case ESchemaObjectType.ForeignKey: ForeignKeys.Add((DbForeignKey)schemaObject); break; default: throw new ArgumentOutOfRangeException(); } }
public TongJi() { Triggers.Add(GameEvent.PlayerCanBeTargeted, new RelayTrigger( (p, e, a) => { return a.Source != p && (a.Card.Type is Sha) && p.HandCards().Count > p.Health && !a.Targets.Contains(p) && Game.CurrentGame.DistanceTo(a.Source, p) <= a.Source[Player.AttackRange] + 1; }, (p, e, a) => { throw new TriggerResultException(TriggerResult.Fail); }, TriggerCondition.Global )); IsEnforced = true; var notifier2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return a.Source != p && (a.Card.Type is Sha) && p.HandCards().Count > p.Health && a.Targets.Contains(p) && Game.CurrentGame.DistanceTo(a.Source, p) <= a.Source[Player.AttackRange] + 1; }, (p, e, a) => { }, TriggerCondition.Global ); Triggers.Add(GameEvent.CardUsageTargetConfirmed, notifier2); }
public ZhuiKong() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(p != a.Source && p.LostHealth > 0 && p.HandCards().Count > 0 && a.Source.HandCards().Count > 0); }, (p, e, a) => { if (Game.CurrentGame.PinDian(p, a.Source, this) == true) { Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Play); } else { Trigger tri = new ZhuiKongLose(a.Source, p); Game.CurrentGame.RegisterTrigger(GameEvent.PlayerDistanceOverride, tri); Game.CurrentGame.RegisterTrigger(GameEvent.PhasePostEnd, new ZhuiKongRemoval(a.Source, tri)); } }, TriggerCondition.Global ); Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.BeforeStart], trigger); IsAutoInvoked = null; }
public void CheckTrigger() { for (int i = 0; i < Manager.Count; i++) { for (int j = 1; j < Manager.Count; j++) { if (i != j) { if (checkTwoTrigger(Manager[i], Manager[j])) { ///如果碰撞过 if (CheckOrTrigger(Manager[i], Manager[j]) != -1) { } else { Trigger[] temp = new Trigger[2]; Manager[i].OnTrigger(Manager[j]); Manager[j].OnTrigger(Manager[i]); temp[0] = Manager[i]; temp[1] = Manager[j]; Triggers.Add(temp); } } else { int index = CheckOrTrigger(Manager[i], Manager[j]); if (index != -1) { Triggers.RemoveAt(index); } } } } } }
public DaHePassive() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(DaHePlayer != null && a.Source == DaHePlayer && a.ReadonlyCard.Type is Shan && a.ReadonlyCard.Suit != SuitType.Heart); }, (p, e, a) => { throw new TriggerResultException(TriggerResult.End); }, TriggerCondition.Global ); var trigger2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { DaHePlayer = null; }, TriggerCondition.Global ) { IsAutoNotify = false }; Triggers.Add(GameEvent.CardUsageTargetValidating, trigger); Triggers.Add(GameEvent.PhasePostEnd, trigger2); IsEnforced = true; }
public JuXiang() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.ReadonlyCard.Type is NanManRuQin); }, (p, e, a) => { throw new TriggerResultException(TriggerResult.End); }, TriggerCondition.OwnerIsTarget ) { Type = TriggerType.Skill }; var trigger2 = new AutoNotifyPassiveSkillTrigger( this, Run, TriggerCondition.Global ) { IsAutoNotify = false }; Triggers.Add(GameEvent.CardUsageTargetValidating, trigger); Triggers.Add(GameEvent.CardsEnteringDiscardDeck, trigger2); IsEnforced = true; }
public DuoDao() { var trigger = new AutoNotifyUsagePassiveSkillTrigger( this, (p, e, a) => { return(p.HandCards().Count > 0 && a.Source != null && a.Source.Weapon() != null); }, (p, e, a, cards, players) => { Game.CurrentGame.HandleCardDiscard(p, cards); Game.CurrentGame.HandleCardTransferToHand(a.Source, p, new List <Card>() { a.Source.Weapon() }); }, TriggerCondition.OwnerIsTarget, new DuoDaoVerifier() ) { AskForConfirmation = false }; Triggers.Add(GameEvent.AfterDamageInflicted, trigger); IsAutoInvoked = null; }
public KneeboardSwitch() : base("Kneeboard Switch", new System.Windows.Size(50, 100)) { _positionOneImage = "{Helios}/Images/Rockers/triangles-light-up.png"; _positionTwoImage = "{Helios}/Images/Rockers/triangles-light-norm.png"; _positionThreeImage = "{Helios}/Images/Rockers/triangles-light-down.png"; _positionValue = new HeliosValue(this, new BindingValue((double)SwitchPosition), "", "position", "Current position of the switch.", "1,2,3 1 is top position", BindingValueUnits.Numeric); _positionValue.Execute += new HeliosActionHandler(SetPositionAction_Execute); _KneeboardPosition = new HeliosValue(this, new BindingValue(4), "", "Kneeboard position", "Current position of the KneeBoard.", "", BindingValueUnits.Numeric); _KneeboardPosition.Execute += new HeliosActionHandler(SetValue_Execute); _value = 0; _KneeboardPosition.SetValue(new BindingValue(4), BypassTriggers); Values.Add(_positionValue); Values.Add(_KneeboardPosition); Actions.Add(_positionValue); Actions.Add(_KneeboardPosition); Triggers.Add(_positionValue); Triggers.Add(_KneeboardPosition); }
private new void AddTrigger(IBindingTrigger trigger, string device) { trigger.Device = device; Triggers.Add(trigger); }
protected void AddTrigger(IBindingTrigger trigger, string device) { trigger.Device = device; Triggers.Add(trigger); }
public void Update(float timeSinceLastFrame) { for (int i = Triggers.Count - 1; i >= 0; i--) { if (Triggers.ElementAt(i).Value.delayTime > 0) { Triggers.ElementAt(i).Value.CurrentDelay = Triggers.ElementAt(i).Value.delayTime; triggerDelayQueue.Add(Triggers.ElementAt(i).Value); } else { triggerExecuteQueue.Add(Triggers.ElementAt(i).Value); } Triggers.Remove(Triggers.ElementAt(i).Key); } for (int i = triggerDelayQueue.Count - 1; i >= 0; i--) { if (triggerDelayQueue[i].CurrentDelay > 0) { triggerDelayQueue[i].CurrentDelay--; } else { triggerExecuteQueue.Add(triggerDelayQueue[i]); triggerDelayQueue.Remove(triggerDelayQueue[i]); } } for (int i = triggerExecuteQueue.Count - 1; i >= 0; i--) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (o, e) => { int index = int.Parse(e.Argument.ToString()); triggerExecuteQueue[index].Execute(world); }; worker.RunWorkerAsync(i); } for (int i = triggerForzenQueue.Count - 1; i >= 0; i--) { if (triggerForzenQueue[i].frozenTime == ScriptTrigger.TRIGGER_ONCE) { continue; } if (triggerForzenQueue[i].frozenTime > 0) { triggerForzenQueue[i].CurrentFrozen--; } else { if (!Triggers.ContainsKey(triggerForzenQueue[i].Name)) { Triggers.Add(triggerForzenQueue[i].Name, triggerForzenQueue[i]); } triggerForzenQueue.Remove(triggerForzenQueue[i]); } } }
public void CopyTrigger(Trigger source) { /* * MemoryStream stream = new MemoryStream(); * System.Runtime.Serialization.Formatters.Binary.BinaryFormatter format = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); * format.Serialize(stream, source); * Trigger copy = (CMissionLib.Trigger)format.Deserialize(stream); * copy.Name = copy.Name + " (Copy)"; * Triggers.Add(copy); * RaisePropertyChanged(String.Empty); */ string path = Path.GetTempFileName(); using (var writer = XmlWriter.Create(path, new XmlWriterSettings { Indent = true, CheckCharacters = true })) new NetDataContractSerializer().WriteObject(writer, source); try { using (var stream = File.OpenRead(path)) { Trigger copy = (Trigger) new NetDataContractSerializer().ReadObject(stream); copy.Name = copy.Name + " (Copy)"; // reconstruct object references foreach (CreateUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(CreateUnitsAction))) { foreach (UnitStartInfo unit in action.Units) { unit.Player = Players.First(x => x.Name == unit.Player.Name); unit.UnitDef = Mod.UnitDefs.First(x => x.Name == unit.UnitDefName); } } foreach (UnitsAreInAreaCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitsAreInAreaCondition))) { var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name)); condition.Players = new ObservableCollection <Player>(players); } foreach (UnitCreatedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitCreatedCondition))) { var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name)); condition.Players = new ObservableCollection <Player>(players); } foreach (UnitFinishedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitFinishedCondition))) { var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name)); condition.Players = new ObservableCollection <Player>(players); } foreach (PlayerDiedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(PlayerDiedCondition))) { condition.Player = Players.First(p => p.Name == condition.Player.Name); } foreach (PlayerJoinedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(PlayerJoinedCondition))) { condition.Player = Players.First(p => p.Name == condition.Player.Name); } foreach (LockUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(LockUnitsAction))) { var players = action.Players.Select(x => Players.First(p => p.Name == x.Name)); action.Players = new ObservableCollection <Player>(players); } foreach (UnlockUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(UnlockUnitsAction))) { var players = action.Players.Select(x => Players.First(p => p.Name == x.Name)); action.Players = new ObservableCollection <Player>(players); } Triggers.Add(copy); RaisePropertyChanged(String.Empty); } if (File.Exists(path)) { File.Delete(path); } } catch (Exception ex) { throw ex; } }
public LevelObject(LevelObjectPrefab prefab, Vector3 position, float scale, float rotation = 0.0f) { ActivePrefab = Prefab = prefab; Position = position; Scale = scale; Rotation = rotation; Health = prefab.Health; spriteIndex = ActivePrefab.Sprites.Any() ? Rand.Int(ActivePrefab.Sprites.Count, Rand.RandSync.Server) : -1; if (Sprite != null && prefab.SpriteSpecificPhysicsBodyElements.ContainsKey(Sprite)) { PhysicsBody = new PhysicsBody(prefab.SpriteSpecificPhysicsBodyElements[Sprite], ConvertUnits.ToSimUnits(new Vector2(position.X, position.Y)), Scale); } else if (prefab.PhysicsBodyElement != null) { PhysicsBody = new PhysicsBody(prefab.PhysicsBodyElement, ConvertUnits.ToSimUnits(new Vector2(position.X, position.Y)), Scale); } if (PhysicsBody != null) { PhysicsBody.UserData = this; PhysicsBody.SetTransformIgnoreContacts(PhysicsBody.SimPosition, -Rotation); PhysicsBody.BodyType = BodyType.Static; PhysicsBody.CollisionCategories = Physics.CollisionLevel; PhysicsBody.CollidesWith = Prefab.TakeLevelWallDamage? Physics.CollisionWall | Physics.CollisionCharacter | Physics.CollisionProjectile : Physics.CollisionWall | Physics.CollisionCharacter; } foreach (XElement triggerElement in prefab.LevelTriggerElements) { Triggers ??= new List <LevelTrigger>(); Vector2 triggerPosition = triggerElement.GetAttributeVector2("position", Vector2.Zero) * scale; if (rotation != 0.0f) { var ca = (float)Math.Cos(rotation); var sa = (float)Math.Sin(rotation); triggerPosition = new Vector2( ca * triggerPosition.X + sa * triggerPosition.Y, -sa * triggerPosition.X + ca * triggerPosition.Y); } var newTrigger = new LevelTrigger(triggerElement, new Vector2(position.X, position.Y) + triggerPosition, -rotation, scale, prefab.Name); if (newTrigger.PhysicsBody != null) { newTrigger.PhysicsBody.UserData = this; } int parentTriggerIndex = prefab.LevelTriggerElements.IndexOf(triggerElement.Parent); if (parentTriggerIndex > -1) { newTrigger.ParentTrigger = Triggers[parentTriggerIndex]; } Triggers.Add(newTrigger); } if (spriteIndex == -1) { foreach (var overrideProperties in prefab.OverrideProperties) { if (overrideProperties == null) { continue; } if (overrideProperties.Sprites.Count > 0) { spriteIndex = Rand.Int(overrideProperties.Sprites.Count, Rand.RandSync.Server); break; } } } NeedsUpdate = NeedsNetworkSyncing || (Triggers != null && Triggers.Any()) || Prefab.PhysicsBodyTriggerIndex > -1; InitProjSpecific(); }
public TI3Command() { Triggers.Add("!ti3"); HelpText = "!ti3 - Countdown to Doters"; }
/// <summary> /// Short-hand method for adding a state change trigger. /// </summary> /// <param name="type">Type of trigger.</param> /// <param name="state">Visual state applied when the trigger occurs.</param> /// <param name="bounds">Bounds within which the trigger applies.</param> /// <param name="anchor">How the bounds are anchored to the control.</param> public void AddTrigger(VisualStateTriggerTypes type, TState state, Rectangle bounds = default(Rectangle), AnchorStyles anchor = AnchorStyles.Top | AnchorStyles.Left) { Triggers.Add(new VisualStateTrigger <TState>(type, state, bounds, anchor)); }
public MakeSIDCommand() { Triggers.Add("!makesid"); Triggers.Add("!makesteamid"); HelpText = "!makesid <universe> <type> <instance> <id> - Crafts a SteamID with the given parameters, <id> can be a resolvable SteamID"; }
public void AddTrigger(ITrigger trigger) { Triggers.Add(trigger); }
public void AddTrigger(Trigger trigger) { Triggers.Add(trigger); UpdateBilling(); }
public ZhaoLie() { var trigger = new AutoNotifyUsagePassiveSkillTrigger( this, (p, e, a) => { return(Game.CurrentGame.AlivePlayers.Any(pl => Game.CurrentGame.DistanceTo(p, pl) <= p[Player.AttackRange] + 1 && pl != p)); }, (p, e, a, c, pls) => { p[Player.DealAdjustment]--; ZhaoLieTarget = pls[0]; ZhaoLieUsed = true; }, TriggerCondition.OwnerIsSource, new ZhaoLieVerifier() ) { AskForConfirmation = false }; Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.Draw], trigger); var trigger2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(ZhaoLieUsed && ZhaoLieTarget != null); }, ZhaoLieProcess, TriggerCondition.OwnerIsSource ) { AskForConfirmation = false, IsAutoNotify = false }; Triggers.Add(GameEvent.PhaseEndEvents[TurnPhase.Draw], trigger2); var trigger3 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(ZhaoLieTarget != null && a.Targets.Contains(ZhaoLieTarget) && a.ReadonlyCard != null && a.ReadonlyCard[ZhaoLieDamage] != 0); }, (p, e, a) => { a.ReadonlyCard[ZhaoLieDamage[ZhaoLieTarget]] = 1; }, TriggerCondition.OwnerIsSource ) { AskForConfirmation = false, IsAutoNotify = false, Priority = int.MinValue }; Triggers.Add(GameEvent.DamageInflicted, trigger3); var trigger4 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(ZhaoLieTarget != null && a.ReadonlyCard != null && a.ReadonlyCard[ZhaoLieDamage[a.Targets[0]]] != 0); }, (p, e, a) => { Game.CurrentGame.HandleCardTransferToHand(null, a.Targets[0], basicCards); ZhaoLieTarget = null; }, TriggerCondition.OwnerIsSource ) { AskForConfirmation = false, IsAutoNotify = false }; Triggers.Add(GameEvent.DamageComputingFinished, trigger4); IsAutoInvoked = null; }
public DangXian() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { var saveP = Game.CurrentGame.CurrentPlayer; var savePh = Game.CurrentGame.CurrentPhase; var savePhI = Game.CurrentGame.CurrentPhaseEventIndex; Game.CurrentGame.CurrentPhaseEventIndex = 0; Game.CurrentGame.CurrentPhase = TurnPhase.Play; do { Player currentPlayer = Game.CurrentGame.CurrentPlayer; GameEventArgs args = new GameEventArgs() { Source = currentPlayer }; Trace.TraceInformation("Main game loop running {0}:{1}", currentPlayer.Id, Game.CurrentGame.CurrentPhase); try { var phaseEvent = Game.PhaseEvents[Game.CurrentGame.CurrentPhaseEventIndex]; if (phaseEvent.ContainsKey(Game.CurrentGame.CurrentPhase)) { Game.CurrentGame.Emit(Game.PhaseEvents[Game.CurrentGame.CurrentPhaseEventIndex][Game.CurrentGame.CurrentPhase], args); } } catch (TriggerResultException ex) { if (ex.Status == TriggerResult.End) { } } Game.CurrentGame.CurrentPhaseEventIndex++; if (Game.CurrentGame.CurrentPhaseEventIndex >= Game.PhaseEvents.Length - 1 || currentPlayer.IsDead) { Game.CurrentGame.CurrentPhaseEventIndex = 0; Game.CurrentGame.CurrentPhase++; if ((int)Game.CurrentGame.CurrentPhase >= Enum.GetValues(typeof(TurnPhase)).Length || (int)Game.CurrentGame.CurrentPhase < 0 || currentPlayer.IsDead) { break; } } } while (Game.CurrentGame.CurrentPhaseEventIndex < 3 && Game.CurrentGame.CurrentPhase == TurnPhase.Play); Game.CurrentGame.CurrentPlayer = saveP; Game.CurrentGame.CurrentPhase = savePh; Game.CurrentGame.CurrentPhaseEventIndex = savePhI; }, TriggerCondition.OwnerIsSource ) { AskForConfirmation = false }; Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.BeforeStart], trigger); IsEnforced = true; }
public JobConfigurator AddTrigger(Func <ITrigger> jobTrigger) { Triggers.Add(jobTrigger); return(this); }
public OnSummonDestroy(Card card) { Card = card; AreaOfEffects.Add(Controller.Field); Triggers.Add(GameEvents.Deploy); }
public TI5Command() { Triggers.Add("!ti5"); HelpText = "!ti5 - Countdown to Doters"; }
public AnXian() { var trigger = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.ReadonlyCard != null && a.ReadonlyCard.Type is Sha); }, (p, e, a) => { while (true) { if (a.Targets[0].HandCards().Count == 0) { break; } Game.CurrentGame.ForcePlayerDiscard(a.Targets[0], (pl, d) => { return(1 - d); }, false); Game.CurrentGame.DrawCards(p, 1); break; } throw new TriggerResultException(TriggerResult.End); }, TriggerCondition.OwnerIsSource ); Triggers.Add(GameEvent.DamageCaused, trigger); var trigger2 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.ReadonlyCard != null && a.ReadonlyCard.Type is Sha); }, (p, e, a) => { ISkill skill; List <Card> cards; List <Player> players; if (p.AskForCardUsage(new CardUsagePrompt("AnXian"), new AnXianVerifier(), out skill, out cards, out players)) { NotifySkillUse(); Game.CurrentGame.HandleCardDiscard(p, cards); a.ReadonlyCard[AnXianSha[p]] = 1; Game.CurrentGame.DrawCards(a.Source, 1); } }, TriggerCondition.OwnerIsTarget ) { AskForConfirmation = false, IsAutoNotify = false }; Triggers.Add(GameEvent.CardUsageTargetConfirming, trigger2); var trigger3 = new AutoNotifyPassiveSkillTrigger( this, (p, e, a) => { return(a.ReadonlyCard != null && a.ReadonlyCard[AnXianSha[p]] != 0); }, (p, e, a) => { throw new TriggerResultException(TriggerResult.End); }, TriggerCondition.OwnerIsTarget ) { AskForConfirmation = false, IsAutoNotify = false }; Triggers.Add(GameEvent.CardUsageTargetValidating, trigger3); IsAutoInvoked = null; }
public TI4Command() { Triggers.Add("!ti4"); HelpText = "!ti4 - Countdown to Doters"; }