private ModelGameServerInfo GetWorldObjectUpdate(ModelInt packet, ServiceContext context) { var data = Repository.GetData; var toClientGServerInfo = new ModelGameServerInfo(); if (packet != null) { toClientGServerInfo.WObjectOnlineList = data.WorldObjectOnlineList; toClientGServerInfo.FactionOnlineList = data.FactionOnlineList; } return(toClientGServerInfo); }
public static void SendToServer(ModelPlayToServer toServ, bool firstRun, ModelGameServerInfo modelGameServerInfo) { //Loger.Log("Empire=" + Find.FactionManager.FirstFactionOfDef(FactionDefOf.Empire)?.GetUniqueLoadID()); toServ.LastTick = (long)Find.TickManager.TicksGame; var gameProgress = new PlayerGameProgress(); var allWorldObjectsArr = new WorldObject[Find.WorldObjects.AllWorldObjects.Count]; Find.WorldObjects.AllWorldObjects.CopyTo(allWorldObjectsArr); var allWorldObjects = allWorldObjectsArr.Where(wo => wo != null).ToList(); List <Faction> factionList = Find.FactionManager.AllFactionsListForReading; if (SessionClientController.Data.GeneralSettings.EquableWorldObjects) { #region Send to Server: firstRun EquableWorldObjects try { // Game on init if (firstRun && modelGameServerInfo != null) { if (modelGameServerInfo.WObjectOnlineList.Count > 0) { toServ.WObjectOnlineList = allWorldObjectsArr.Where(wo => wo is Settlement) .Where(wo => wo.HasName && !wo.Faction.IsPlayer).Select(obj => GetWorldObjects(obj)).ToList(); } if (modelGameServerInfo.FactionOnlineList.Count > 0) { List <Faction> factions = Find.FactionManager.AllFactionsListForReading; toServ.FactionOnlineList = factions.Select(obj => GetFactions(obj)).ToList(); } return; } } catch (Exception e) { Loger.Log("Exception >> " + e); Log.Error("SendToServer FirstRun error"); return; } #endregion } if (!firstRun) { //Loger.Log("Client TestBagSD 035"); Dictionary <Map, List <Pawn> > cacheColonists = new Dictionary <Map, List <Pawn> >(); //отправка всех новых и измененных объектов игрока toServ.WObjects = allWorldObjects .Where(o => o.Faction?.IsPlayer == true && //o.Faction != null && o.Faction.IsPlayer (o is Settlement || o is Caravan)) //Чтобы отсеч разные карты событий .Select(o => GetWorldObjectEntry(o, gameProgress, cacheColonists)) .ToList(); LastSendMyWorldObjects = toServ.WObjects; //Loger.Log("Client TestBagSD 036"); //свои объекты которые удалил пользователь с последнего обновления if (ToDelete != null) { var toDeleteNewNow = WorldObjectEntrys .Where(p => !allWorldObjects.Any(wo => wo.ID == p.Key)) .Select(p => p.Value) .ToList(); ToDelete.AddRange(toDeleteNewNow); } toServ.WObjectsToDelete = ToDelete; } toServ.GameProgress = gameProgress; if (SessionClientController.Data.GeneralSettings.EquableWorldObjects) { #region Send to Server: Non-Player World Objects // Non-Player World Objects try { var OnlineWObjArr = allWorldObjectsArr.Where(wo => wo is Settlement) .Where(wo => wo.HasName && !wo.Faction.IsPlayer); if (!firstRun) { if (LastWorldObjectOnline != null && LastWorldObjectOnline.Count > 0) { toServ.WObjectOnlineToDelete = LastWorldObjectOnline.Where(WOnline => !OnlineWObjArr.Any(wo => ValidateOnlineWorldObject(WOnline, wo))).ToList(); toServ.WObjectOnlineToAdd = OnlineWObjArr.Where(wo => !LastWorldObjectOnline.Any(WOnline => ValidateOnlineWorldObject(WOnline, wo))) .Select(obj => GetWorldObjects(obj)).ToList(); } } toServ.WObjectOnlineList = OnlineWObjArr.Select(obj => GetWorldObjects(obj)).ToList(); LastWorldObjectOnline = toServ.WObjectOnlineList; } catch (Exception e) { Loger.Log("Exception >> " + e); Log.Error("ERROR SendToServer WorldObject Online"); } #endregion #region Send to Server: Non-Player Factions // Non-Player Factions try { if (!firstRun) { if (LastFactionOnline != null && LastFactionOnline.Count > 0) { toServ.FactionOnlineToDelete = LastFactionOnline.Where(FOnline => !factionList.Any(f => ValidateFaction(FOnline, f))).ToList(); toServ.FactionOnlineToAdd = factionList.Where(f => !LastFactionOnline.Any(FOnline => ValidateFaction(FOnline, f))) .Select(obj => GetFactions(obj)).ToList(); } } toServ.FactionOnlineList = factionList.Select(obj => GetFactions(obj)).ToList(); LastFactionOnline = toServ.FactionOnlineList; } catch (Exception e) { Loger.Log("Exception >> " + e); Log.Error("ERROR SendToServer Faction Online"); } #endregion } }