public void Write(DefenseReport value) { Write(value.ID); Write(value.InvasionName); Write(value.LostGold); Write(value.LostElixir); Write(value.DeployedArmy.Count); foreach (var squad in value.DeployedArmy) { Write(squad, false); } }
public static void ReportDefense(int fromClient, Packet packet) { int baseID = packet.ReadInt(); string invasionName = packet.ReadString(); int lostGold = packet.ReadInt(); int lostElixir = packet.ReadInt(); int armySize = packet.ReadInt(); var squadStuff = new List <SquadData>(); for (int i = 0; i < armySize; i++) { var squad = new SquadData() { UnitName = packet.ReadString(), Amount = packet.ReadInt() }; squadStuff.Add(squad); } int destroyedBuildingCount = packet.ReadInt(); var destroyedBuildingIDs = new List <int>(); for (int i = 0; i < destroyedBuildingCount; i++) { destroyedBuildingIDs.Add(packet.ReadInt()); } int robbedMinesCount = packet.ReadInt(); var robbedMines = new Dictionary <int, int>(); for (int i = 0; i < robbedMinesCount; i++) { robbedMines.Add(packet.ReadInt(), packet.ReadInt()); } int robbedStoragesCount = packet.ReadInt(); var robbedStorages = new Dictionary <int, int>(); for (int i = 0; i < robbedStoragesCount; i++) { robbedStorages.Add(packet.ReadInt(), packet.ReadInt()); } using (var provider = new ServiceProvider()) { var _base = provider.BaseDataService.Get(baseID); var destroyedBuildings = new List <BuildingInstanceData>(); foreach (int id in destroyedBuildingIDs) { var building = provider.GetBuilding(id); building.Destroyed = true; destroyedBuildings.Add(building); } foreach (var robbedMine in robbedMines) { provider.MineService.Get(robbedMine.Key).Stored -= robbedMine.Value; } foreach (var robbedStorage in robbedStorages) { provider.StorageService.Get(robbedStorage.Key).Stored -= robbedStorage.Value; } provider.SquadDataService.AddRange(squadStuff); var report = new DefenseReport() { Base = _base, InvasionName = invasionName, LostGold = lostGold, LostElixir = lostElixir, DestroyedBuildings = destroyedBuildings, DeployedArmy = squadStuff }; provider.DefenseReportService.Add(report); _base.AttackedByAIReports.Add(report); foreach (var squad in squadStuff) { squad.DeployedInDefense = report; } provider.SaveChanges(); } }