コード例 #1
0
        public override async void Process()
        {
            if (Is2V2)
            {
                await new MatchmakeFailedMessage(Device).SendAsync();
                await new CancelMatchmakeDoneMessage(Device).SendAsync();
            }
            else
            {
                var enemy = Resources.Battles.Dequeue;
                if (enemy != null)
                {
                    var battle = new LogicBattle(true, enemy.Home.Arena.CurrentArena + 1)
                    {
                        Device.Player, enemy
                    };

                    Resources.Battles.Add(battle);

                    Device.Player.Battle = battle;
                    enemy.Battle         = battle;

                    battle.Start();
                }
                else
                {
                    Resources.Battles.Enqueue(Device.Player);
                }
            }
        }
コード例 #2
0
        public override async void Process()
        {
            var home     = Device.Player.Home;
            var alliance = await Resources.Alliances.GetAllianceAsync(home.AllianceInfo.Id);

            if (!(alliance?.Stream.Find(e => e.Id == EntryId && e.StreamEntryType == 10) is ChallengeStreamEntry entry)
                )
            {
                return;
            }

            alliance.RemoveEntry(entry);

            var enemy = await Resources.Players.GetPlayerAsync(entry.SenderId);

            if (enemy.Device != null)
            {
                var battle = new LogicBattle(true, entry.Arena)
                {
                    Device.Player, enemy
                };

                Resources.Battles.Add(battle);

                Device.Player.Battle = battle;
                enemy.Battle         = battle;

                battle.Start();
            }

            alliance.Save();

            // TODO: Update Entry + Battle Result + Card levels
        }
コード例 #3
0
        public override void Process()
        {
            if (Is2V2)
            {
                //await new MatchmakeFailedMessage(Device).SendAsync();
                //await new CancelMatchmakeDoneMessage(Device).SendAsync();

                var players = Resources.DuoBattles.Dequeue;
                if (players != null)
                {
                    players.Add(Device.Player);

                    var battle = new LogicBattle(false, Device.Player.Home.Arena.CurrentArena + 1, players);

                    Resources.DuoBattles.Add(battle);

                    foreach (var player in players)
                    {
                        player.Battle = battle;
                    }

                    battle.Start();
                }
                else
                {
                    Resources.DuoBattles.Enqueue(Device.Player);
                }
            }
            else
            {
                var enemy = Resources.Battles.Dequeue;
                if (enemy != null)
                {
                    var battle = new LogicBattle(false, enemy.Home.Arena.CurrentArena + 1)
                    {
                        Device.Player, enemy
                    };

                    Resources.Battles.Add(battle);

                    Device.Player.Battle = battle;
                    enemy.Battle         = battle;

                    battle.Start();
                }
                else
                {
                    Resources.Battles.Enqueue(Device.Player);
                }
            }
        }
コード例 #4
0
 /// <summary>
 /// Removes the specified battle.
 /// </summary>
 internal static void Remove(LogicBattle battle)
 {
     if (Battles.Pool.ContainsKey(battle.Identifier))
     {
         if (Battles.Pool.TryRemove(battle.Identifier, out LogicBattle tmpBattle))
         {
             if (battle.Identifier != tmpBattle.Identifier)
             {
                 Debugger.Error("The returned TmpBattle is not equal to our Battle at Remove(Battle).");
             }
         }
         else
         {
             Debugger.Error("TryRemove returned false.");
         }
     }
     else
     {
         Debugger.Error("Battle pool does not contain the key.");
     }
 }
コード例 #5
0
        internal override void Execute()
        {
            LogicClientAvatar opponent = Waiting.Dequeue();

            if (opponent != null)
            {
                LogicBattle battle = new LogicBattle(this.Connection.Avatar, opponent)
                {
                    PvPTier = this.Quest
                };

                Battles.Add(battle);

                this.Connection.Avatar.Battle = battle;
                opponent.Battle = battle;

                battle.Start();
            }
            else
            {
                new PvpMatchmakeNotificationMessage(this.Connection).Send();
                Waiting.Enqueue(this.Connection.Avatar);
            }
        }
コード例 #6
0
        /// <summary>
        /// Adds the specified battle.
        /// </summary>
        internal static void Add(LogicBattle battle)
        {
            if (battle.LowID == 0)
            {
                battle.LowID = Interlocked.Increment(ref Battles.Seed);
            }

            if (Battles.Pool.ContainsKey(battle.Identifier))
            {
                Debugger.Warning("This battle is already in the pool!");

                if (!Battles.Pool.TryUpdate(battle.Identifier, battle, battle))
                {
                    Debugger.Error("Failed to update the battle in the pool.");
                }
            }
            else
            {
                if (!Battles.Pool.TryAdd(battle.Identifier, battle))
                {
                    Debugger.Error("Failed to add the battle to the pool.");
                }
            }
        }
コード例 #7
0
ファイル: Session.cs プロジェクト: SadMusic/ClashRoyale
 public Session()
 {
     Battle = new LogicBattle(this);
 }