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 }
public void SetSender(Player player) { SenderName = player.Name; SenderAvatarId = player.AccountId; SenderLevel = player.ExpLevel; SenderLeagueType = LogicUtils.GetLeagueByScore(player.Score); }
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; } } }
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; } } }
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) }); } }
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 } }) }); } }