Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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();
            }
        }