public async Task AllianceMemberEntry(MemoryStream stream, int order)
        {
            var player = await Resources.PlayerCache.GetPlayer(AccountId);

            await stream.WriteLongAsync(AccountId);                         // Avatar Id

            await stream.WriteStringAsync(null);                            // FacebookId

            await stream.WriteStringAsync(player.Name);                     // Name

            await stream.WriteIntAsync(Role);                               // Role

            await stream.WriteIntAsync(player.ExpLevel);                    // Exp Level

            await stream.WriteIntAsync(LogicUtils.GetLeagueByScore(Score)); // League Type

            await stream.WriteIntAsync(Score);                              // Score

            await stream.WriteIntAsync(Donations);                          // Donations

            await stream.WriteIntAsync(DonationsReceived);                  // Donations Received

            await stream.WriteIntAsync(order);                              // Order

            await stream.WriteIntAsync(order);                              // Previous Order

            stream.WriteByte(0);                                            // IsNewMember

            stream.WriteByte(1);                                            // HasHomeId
            await stream.WriteLongAsync(AccountId);                         // Home Id
        }
Exemple #2
0
 public void SetSender(Player player)
 {
     SenderName       = player.Name;
     SenderAvatarId   = player.AccountId;
     SenderLevel      = player.ExpLevel;
     SenderLeagueType = LogicUtils.GetLeagueByScore(player.Score);
 }
Exemple #3
0
        public BattleReportStreamEntry GetBattleReportStreamEntry(long replayId)
        {
            var random = new Random();

            var attackerReward = random.Next(10, 25);

            Attacker.Score += attackerReward;

            return(new BattleReportStreamEntry
            {
                MajorVersion = 5,
                Build = 2,
                ContentVersion = 4,
                CreationDateTime = DateTime.Now,
                IsRevengeUsed = true, // Revenge is not supported atm
                SenderAvatarId = Defender.AccountId,
                SenderName = Defender.Name,
                SenderLevel = Defender.ExpLevel,
                SenderLeagueType = LogicUtils.GetLeagueByScore(Defender.Score),
                ShardId = 0,
                ReplayId = replayId,
                BattleLogJson = JsonConvert.SerializeObject(new BattleLog
                {
                    // Here we use random values
                    Loot = new[]
                    { new[] { 3000001, random.Next(1000, 100000) }, new[] { 3000002, random.Next(1000, 100000) } },
                    Units = new[]
                    {
                        new[] { 4000000, random.Next(10, 50) }, new[] { 4000001, random.Next(10, 50) },
                        new[] { 4000002, random.Next(10, 50) }, new[] { 4000003, random.Next(10, 50) },
                        new[] { 4000004, random.Next(10, 50) }, new[] { 4000005, random.Next(10, 50) },
                        new[] { 4000006, random.Next(10, 50) }, new[] { 4000007, random.Next(10, 50) }
                    },

                    Levels = new int[0][],
                    Spells = new int[0][],
                    Stats = new BattleLogStats
                    {
                        TownHallDestroyed = true,
                        DestructionPercentage = random.Next(0, 100),
                        AllianceName = "RetroClash",
                        AllianceUsed = false,
                        AttackerScore = attackerReward,
                        BattleEnded = true,
                        BattleTime = 1,
                        DefenderScore = random.Next(-30, -15),
                        HomeId = new[] { 0, 1 },
                        OriginalScore = Attacker.Score
                    }
                })
            });
        }
        public override async Task Process()
        {
            if (Message.StartsWith("/"))
            {
                switch (Message.Split(' ')[0])
                {
                case "/help":
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message =
                                "Available commands:\n\n/help\n  -> List of all commands.\n/prebase [level]\n  -> Load a premade base from level 1 to 6.\n/wall [level]\n  -> Set the level of all walls.",
                            Name      = "DebugManager",
                            ExpLevel  = 100,
                            League    = 16,
                            AccountId = 0
                        });

                    break;
                }

                case "/prebase":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 7)
                    {
                        Device.Player.LogicGameObjectManager.Json = Resources.Levels.Prebases[lvl - 1];

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Base {lvl} has been set.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                case "/wall":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 12)
                    {
                        foreach (var building in Device.Player.LogicGameObjectManager.Buildings)
                        {
                            if (building.Data != 1000010)
                            {
                                continue;
                            }
                            building.Level = lvl - 1;
                        }

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Wall level set to {lvl}.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                default:
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message  = "Invalid Command. Type '/help' for a list of all commands.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }
                }
            }
            else if ((DateTime.Now - Device.Player.LastChatMessage).TotalSeconds >= 1.0)
            {
                if (!string.IsNullOrEmpty(Message))
                {
                    await Resources.ChatManager.Process(new GlobalChatEntry
                    {
                        Message        = Message,
                        SenderName     = Device.Player.Name,
                        SenderId       = Device.Player.AccountId,
                        SenderExpLevel = Device.Player.ExpLevel,
                        SenderLeague   = LogicUtils.GetLeagueByScore(Device.Player.Score)
                    });

                    Device.Player.LastChatMessage = DateTime.Now;
                }
            }
        }
        public override async Task Process()
        {
            if (Message.StartsWith("/"))
            {
                switch (Message.Split(' ')[0])
                {
                case "/help":
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message =
                                "Available commands:\n\n/help\n  -> List of all commands.\n/rename\n  -> Change your name again.\n/replay\n  -> Watch a random replay.\n/prebase [level]\n  -> Load a premade base from level 1 to 6.\n/reset\n  -> Reset your village and start from beginning.\n/wall [level]\n  -> Set the level of all walls.",
                            Name      = "DebugManager",
                            ExpLevel  = 100,
                            League    = 16,
                            AccountId = 0
                        });

                    break;
                }

                case "/prebase":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 7)
                    {
                        Device.Player.LogicGameObjectManager.Json = Resources.Levels.Prebases[lvl - 1];
                        Device.Player.HeroManager.Clear();
                        Device.Player.Units.Troops.Clear();
                        Device.Player.Units.Spells.Clear();

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Base {lvl} has been set.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                case "/reset":
                {
                    Device.Player.LogicGameObjectManager.Json = Resources.Levels.StartingHome;
                    Device.Player.Achievements.Clear();
                    Device.Player.HeroManager.Clear();
                    Device.Player.Shield.RemoveShield();
                    Device.Player.Units.Spells.Clear();
                    Device.Player.Units.Troops.Clear();

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message  = "Village has been set to default.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }

                case "/rename":
                {
                    Device.Player.TutorialSteps = 10;
                    Device.Player.ExpLevel      = 1;

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    break;
                }

                case "/replay":
                {
                    var replay = await MySQL.GetRandomReplay();

                    if (replay != null)
                    {
                        await Resources.Gateway.Send(new HomeBattleReplayDataMessage(Device)
                            {
                                Replay = replay
                            });
                    }
                    else
                    {
                        await Resources.Gateway.Send(new HomeBattleReplayFailedMessage(Device));
                    }

                    break;
                }

                case "/wall":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 12)
                    {
                        foreach (var building in Device.Player.LogicGameObjectManager.Buildings)
                        {
                            if (building.Data != 1000010)
                            {
                                continue;
                            }
                            building.Level = lvl - 1;
                        }

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Wall level set to {lvl}.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                default:
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message  = "Invalid Command. Type '/help' for a list of all commands.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }
                }
            }
            else if ((DateTime.Now - Device.Player.LastChatMessage).TotalSeconds >= 1.0)
            {
                if (!string.IsNullOrEmpty(Message))
                {
                    await Resources.ChatManager.Process(new GlobalChatEntry
                    {
                        Message        = Message,
                        SenderName     = Device.Player.Name,
                        SenderId       = Device.Player.AccountId,
                        SenderExpLevel = Device.Player.ExpLevel,
                        SenderLeague   = LogicUtils.GetLeagueByScore(Device.Player.Score)
                    });

                    Device.Player.LastChatMessage = DateTime.Now;
                }
            }
        }
Exemple #6
0
        public override async Task Process()
        {
            if (Message.StartsWith("/"))
            {
                switch (Message.Split(' ')[0])
                {
                case "/help":
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message =
                                "Available commands:\n\n/stats\n  -> View the server stats.\n/clear [obstacles/traps/decorations]\n  -> Clear all obstacles.\n/help\n  -> List of all commands.\n/rename\n  -> Change your name again.\n/replay\n  -> Watch a random replay.\n/prebase [level]\n  -> Load a premade base from level 1 to 6.\n/reset\n  -> Reset your village and start from beginning.\n/wall [level]\n  -> Set the level of all walls.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }

                case "/prebase":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 7)
                    {
                        Device.Player.LogicGameObjectManager.Json = Resources.Levels.Prebases[lvl - 1];
                        Device.Player.HeroManager.Clear();
                        Device.Player.Units.Troops.Clear();
                        Device.Player.Units.Spells.Clear();

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Base {lvl} has been set.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                case "/reset":
                {
                    Device.Player.LogicGameObjectManager.Json = Resources.Levels.StartingHome;
                    Device.Player.Achievements.Clear();
                    Device.Player.HeroManager.Clear();
                    Device.Player.Shield.RemoveShield();
                    Device.Player.Units.Spells.Clear();
                    Device.Player.Units.Troops.Clear();

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message  = "Village has been set to default.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }

                case "/rename":
                {
                    Device.Player.TutorialSteps = 10;
                    Device.Player.ExpLevel      = 1;

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    break;
                }

                /*case "/add":
                 * {
                 *  var type = Message.Split(' ')[1];
                 *
                 *  switch (type)
                 *  {
                 *      case "trophies":
                 *      {
                 *          Device.Player.Score += Convert.ToInt32(Message.Split(' ')[2]);
                 *          break;
                 *      }
                 *
                 *      default:
                 *      {
                 *          await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                 *          {
                 *              Message = "Invalid type.",
                 *              Name = "DebugManager",
                 *              ExpLevel = 100,
                 *              League = 16
                 *          });
                 *          break;
                 *      }
                 *  }
                 *
                 *  await Resources.Gateway.Send(new OwnHomeDataMessage(Device));
                 *
                 *  break;
                 * }*/

                case "/remove":
                {
                    var type = Message.Split(' ')[1];

                    switch (type)
                    {
                    case "trophies":
                    {
                        Device.Player.Score -= Convert.ToInt32(Message.Split(' ')[2]);
                        break;
                    }

                    default:
                    {
                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                                {
                                    Message  = "Invalid type.",
                                    Name     = "DebugManager",
                                    ExpLevel = 100,
                                    League   = 16
                                });

                        break;
                    }
                    }

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    break;
                }

                case "/clear":
                {
                    var type = Message.Split(' ')[1];

                    switch (type)
                    {
                    case "obstacles":
                    {
                        Device.Player.LogicGameObjectManager.Obstacles.Clear();
                        break;
                    }

                    case "traps":
                    {
                        Device.Player.LogicGameObjectManager.Traps.Clear();
                        break;
                    }

                    case "decorations":
                    {
                        Device.Player.LogicGameObjectManager.Decorations.Clear();
                        break;
                    }

                    default:
                    {
                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                                {
                                    Message  = "Invalid type.",
                                    Name     = "DebugManager",
                                    ExpLevel = 100,
                                    League   = 16
                                });

                        break;
                    }
                    }

                    await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                    break;
                }

                case "/replay":
                {
                    var replay = await ReplayDb.GetRandom();

                    if (replay != null)
                    {
                        await Resources.Gateway.Send(new HomeBattleReplayDataMessage(Device)
                            {
                                Replay = replay
                            });
                    }
                    else
                    {
                        await Resources.Gateway.Send(new HomeBattleReplayFailedMessage(Device));
                    }

                    break;
                }

                case "/stats":
                {
                    var uptime = DateTime.UtcNow - Resources.StartDateTime;

                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message =
                                $"Players online: {Resources.PlayerCache.Count}\nPlayers cached: {Redis.CachedPlayers()}\nUsed RAM: {GC.GetTotalMemory(false) / 1024 / 1024}MB\nUptime: {uptime.Days}d {uptime.Hours}h {uptime.Minutes}m {uptime.Seconds}s\nServer version: {Configuration.Version}\nFingerprint version: {Resources.Fingerprint.GetMajorVersion}.{Resources.Fingerprint.GetBuildVersion}.{Resources.Fingerprint.GetContentVersion}",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }

                case "/wall":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 12)
                    {
                        foreach (var building in Device.Player.LogicGameObjectManager.Buildings)
                        {
                            if (building.Data != 1000010)
                            {
                                continue;
                            }
                            building.Level = lvl - 1;
                        }

                        await Resources.Gateway.Send(new OwnHomeDataMessage(Device));

                        await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                            {
                                Message  = $"Wall level set to {lvl}.",
                                Name     = "DebugManager",
                                ExpLevel = 100,
                                League   = 16
                            });
                    }
                    break;
                }

                default:
                {
                    await Resources.Gateway.Send(new GlobalChatLineMessage(Device)
                        {
                            Message  = "Invalid Command. Type '/help' for a list of all commands.",
                            Name     = "DebugManager",
                            ExpLevel = 100,
                            League   = 16
                        });

                    break;
                }
                }
            }
            else if ((DateTime.UtcNow - Device.LastChatMessage).TotalSeconds >= 1.0)
            {
                if (!string.IsNullOrEmpty(Message))
                {
                    await Resources.ChatManager.Process(new GlobalChatEntry
                    {
                        Message        = Message,
                        SenderName     = Device.Player.Name,
                        SenderId       = Device.Player.AccountId,
                        SenderExpLevel = Device.Player.ExpLevel,
                        SenderLeague   = LogicUtils.GetLeagueByScore(Device.Player.Score)
                    });

                    Device.LastChatMessage = DateTime.UtcNow;
                }
            }
        }
Exemple #7
0
        public override async Task Process()
        {
            if (Message.StartsWith("/"))
            {
                switch (Message.Split(' ')[0])
                {
                case "/help":
                {
                    await Resources.Gateway.Send(new GlobalChatLine(Device)
                        {
                            Message =
                                "Available commands:\n\n/help → List of all commands.\n/wall [level] → Set the level of all walls.",
                            Name      = "DebugManager",
                            ExpLevel  = 100,
                            League    = 16,
                            AccountId = 0
                        });

                    break;
                }

                case "/wall":
                {
                    var lvl = Convert.ToInt32(Message.Split(' ')[1]);
                    if (lvl > 0 && lvl < 12)
                    {
                        foreach (var building in Device.Player.LogicGameObjectManager.Buildings)
                        {
                            if (building.Data != 1000010)
                            {
                                continue;
                            }
                            building.Level = lvl - 1;
                        }

                        await Resources.Gateway.Send(new OwnHomeData(Device));

                        await Resources.Gateway.Send(new GlobalChatLine(Device)
                            {
                                Message   = $"Wall level set to {lvl}.",
                                Name      = "DebugManager",
                                ExpLevel  = 100,
                                League    = 16,
                                AccountId = 0
                            });
                    }
                    break;
                }

                default:
                {
                    await Resources.Gateway.Send(new GlobalChatLine(Device)
                        {
                            Message   = "Invalid Command. Type '/help' for a list of all commands.",
                            Name      = "DebugManager",
                            ExpLevel  = 100,
                            League    = 16,
                            AccountId = 0
                        });

                    break;
                }
                }
            }
            else
            {
                await Resources.ChatManager.Process(new GlobalChatEntry
                {
                    Message        = Message,
                    SenderName     = Device.Player.Name,
                    SenderId       = Device.Player.AccountId,
                    SenderExpLevel = Device.Player.ExpLevel,
                    SenderLeague   = LogicUtils.GetLeagueByScore(Device.Player.Score)
                });
            }
        }
Exemple #8
0
        public async Task EndBattle()
        {
            if (Replay.Commands.Count <= 0)
            {
                return;
            }

            var random = new Random();

            var originalScore  = Attacker.Score;
            var attackerReward = random.Next(10, 25);

            Attacker.Score += attackerReward;

            var id = await ReplayDb.Save(GetReplayJson);

            if (id > 0)
            {
                Attacker.AddEntry(new BattleReportStreamEntry
                {
                    MajorVersion     = Resources.Fingerprint.GetMajorVersion,
                    Build            = Resources.Fingerprint.GetBuildVersion,
                    ContentVersion   = Resources.Fingerprint.GetContentVersion,
                    CreationDateTime = DateTime.UtcNow,
                    IsRevengeUsed    = true, // Revenge is not supported atm
                    SenderAvatarId   = Defender.AccountId,
                    SenderName       = Defender.Name,
                    SenderLevel      = Defender.ExpLevel,
                    SenderLeagueType = LogicUtils.GetLeagueByScore(Defender.Score),
                    ShardId          = 0,
                    ReplayId         = id,
                    BattleLogJson    = JsonConvert.SerializeObject(new BattleLog
                    {
                        // Here we use random values
                        Loot = new[]
                        {
                            new[] { 3000001, random.Next(1000, 100000) }, new[] { 3000002, random.Next(1000, 100000) }
                        },
                        Units = new[]
                        {
                            new[] { 4000000, random.Next(10, 50) }, new[] { 4000001, random.Next(10, 50) },
                            new[] { 4000002, random.Next(10, 50) }, new[] { 4000003, random.Next(10, 50) },
                            new[] { 4000004, random.Next(10, 50) }, new[] { 4000005, random.Next(10, 50) },
                            new[] { 4000006, random.Next(10, 50) }, new[] { 4000007, random.Next(10, 50) },
                            new[] { 4000008, random.Next(10, 50) }, new[] { 4000009, random.Next(10, 50) }
                        },

                        Levels = new int[0][],
                        Spells = new int[0][],
                        Stats  = new BattleLogStats
                        {
                            TownHallDestroyed     = true,
                            DestructionPercentage = random.Next(0, 100),
                            AllianceName          = "RetroClash",
                            AllianceUsed          = false,
                            AttackerScore         = attackerReward,
                            BattleEnded           = true,
                            BattleTime            = Replay.EndTick,
                            DefenderScore         = random.Next(-30, -15),
                            HomeId        = new[] { 0, 1 },
                            OriginalScore = originalScore
                        }
                    })
                });
            }
        }