public static void DebugPrintNewsEventArt(GameSession game) { List <TurnEventMessage> turnEventMessageList1 = new List <TurnEventMessage>(); List <TurnEventMessage> turnEventMessageList2 = new List <TurnEventMessage>(); foreach (TurnEventMessage turnEventMessage in Enum.GetValues(typeof(TurnEventMessage))) { TurnEvent e = new TurnEvent(); e.TargetPlayerID = game.LocalPlayer.ID; e.PlayerID = game.LocalPlayer.ID; e.EventMessage = turnEventMessage; SuulkaInfo suulkaInfo = game.GameDatabase.GetSuulkas().FirstOrDefault <SuulkaInfo>(); if (suulkaInfo != null) { e.ShipID = suulkaInfo.ShipID; e.DesignID = game.GameDatabase.GetShipInfo(suulkaInfo.ShipID, false).DesignID; } string turnEventSprite = TurnEvent.GetTurnEventSprite(game, e); if (turnEventSprite == "ui\\events\\events_static_noise.tga") { turnEventMessageList2.Add(turnEventMessage); } else if (turnEventSprite == "" || !File.Exists(game.App.GameRoot + "\\" + turnEventSprite + "~")) { turnEventMessageList1.Add(turnEventMessage); } } App.Log.Trace("==MISSING NEWS EVENT HOOKUPS==", "log"); foreach (int num in turnEventMessageList2) { App.Log.Trace(((TurnEventMessage)num).ToString(), "log"); } App.Log.Trace("==MISSING NEWS EVENT ART==", "log"); foreach (int num in turnEventMessageList1) { App.Log.Trace(((TurnEventMessage)num).ToString(), "log"); } }
private static void UpdateShipsKilled( GameSession game, Random rand, Dictionary <FleetInfo, List <ShipInfo> > aiPlayerShips, int randomsPlayerID, int numToKill) { int num1 = numToKill; for (int index = 0; index < numToKill && num1 > 0 && aiPlayerShips.Keys.Count > 0; ++index) { bool flag = false; while (!flag && aiPlayerShips.Keys.Count > 0) { int num2 = 0; foreach (KeyValuePair <FleetInfo, List <ShipInfo> > aiPlayerShip in aiPlayerShips) { num2 += aiPlayerShip.Value.Count; foreach (ShipInfo shipInfo in aiPlayerShip.Value) { ShipInfo ship = shipInfo; if (rand.CoinToss(50)) { num1 -= CombatAI.GetShipStrength(ship.DesignInfo.Class) / 3; if (ship.DesignInfo.IsSuulka()) { TurnEvent turnEvent = game.GameDatabase.GetTurnEventsByTurnNumber(game.GameDatabase.GetTurnCount(), aiPlayerShip.Key.PlayerID).FirstOrDefault <TurnEvent>((Func <TurnEvent, bool>)(x => x.ShipID == ship.ID)); if (turnEvent != null) { game.GameDatabase.RemoveTurnEvent(turnEvent.ID); } game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_SUULKA_DIES, EventMessage = TurnEventMessage.EM_SUULKA_DIES, PlayerID = randomsPlayerID, SystemID = aiPlayerShip.Key.SystemID, ShipID = ship.ID, DesignID = ship.DesignID, TurnNumber = game.GameDatabase.GetTurnCount(), ShowsDialog = false }); SuulkaInfo suulkaByShipId = game.GameDatabase.GetSuulkaByShipID(ship.ID); if (suulkaByShipId != null) { game.GameDatabase.RemoveSuulka(suulkaByShipId.ID); } } game.GameDatabase.RemoveShip(ship.ID); aiPlayerShip.Value.Remove(ship); flag = true; break; } } if (flag) { if (aiPlayerShip.Value.Count == 0) { CombatSimulatorRandoms.FleetDestroyed(game, randomsPlayerID, aiPlayerShip.Key, (ShipInfo)null); game.GameDatabase.RemoveFleet(aiPlayerShip.Key.ID); aiPlayerShips.Remove(aiPlayerShip.Key); break; } break; } } if (num2 == 0) { break; } } } foreach (KeyValuePair <FleetInfo, List <ShipInfo> > aiPlayerShip in aiPlayerShips) { if (aiPlayerShip.Value.Count > 0) { CombatSimulatorRandoms.CheckFleetCommandPoints(game, aiPlayerShip.Key, aiPlayerShip.Value); } } }
private static void CompleteSimulation( GameSession game, int systemId, Dictionary <FleetInfo, List <ShipCombatInfo> > shipCombatInfo, List <PlanetCombatInfo> planets) { CombatData combatData = game.CombatData.AddCombat(GameSession.GetNextUniqueCombatID(), systemId, game.GameDatabase.GetTurnCount()); foreach (KeyValuePair <FleetInfo, List <ShipCombatInfo> > keyValuePair1 in shipCombatInfo) { PlayerCombatData orAddPlayer = combatData.GetOrAddPlayer(keyValuePair1.Key.PlayerID); orAddPlayer.VictoryStatus = GameSession.VictoryStatus.Draw; foreach (ShipCombatInfo shipCombatInfo1 in keyValuePair1.Value) { ShipCombatInfo sci = shipCombatInfo1; if ((double)sci.structureFactor == 0.0) { if (sci.shipInfo.DesignInfo.IsSuulka()) { TurnEvent turnEvent = game.GameDatabase.GetTurnEventsByTurnNumber(game.GameDatabase.GetTurnCount(), orAddPlayer.PlayerID).FirstOrDefault <TurnEvent>((Func <TurnEvent, bool>)(x => x.ShipID == sci.shipInfo.ID)); if (turnEvent != null) { game.GameDatabase.RemoveTurnEvent(turnEvent.ID); } List <int> intList1 = new List <int>(); List <int> intList2 = new List <int>(); foreach (KeyValuePair <FleetInfo, List <ShipCombatInfo> > keyValuePair2 in shipCombatInfo) { if (orAddPlayer.PlayerID != keyValuePair2.Key.PlayerID && !intList1.Contains(keyValuePair2.Key.PlayerID) && !intList2.Contains(keyValuePair2.Key.PlayerID)) { switch (game.GameDatabase.GetDiplomacyStateBetweenPlayers(orAddPlayer.PlayerID, keyValuePair2.Key.PlayerID)) { case DiplomacyState.WAR: intList1.Add(keyValuePair2.Key.PlayerID); continue; case DiplomacyState.NEUTRAL: intList2.Add(keyValuePair2.Key.PlayerID); continue; default: continue; } } } int num = 0; if (intList1.Count > 0) { num = App.GetSafeRandom().Choose <int>((IList <int>)intList1); } else if (intList2.Count > 0) { num = App.GetSafeRandom().Choose <int>((IList <int>)intList2); } game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_SUULKA_DIES, EventMessage = TurnEventMessage.EM_SUULKA_DIES, PlayerID = num, SystemID = systemId, ShipID = sci.shipInfo.ID, DesignID = sci.shipInfo.DesignID, TurnNumber = game.GameDatabase.GetTurnCount(), ShowsDialog = false }); SuulkaInfo suulkaByShipId = game.GameDatabase.GetSuulkaByShipID(sci.shipInfo.ID); if (suulkaByShipId != null) { game.GameDatabase.RemoveSuulka(suulkaByShipId.ID); } } game.GameDatabase.RemoveShip(sci.shipInfo.ID); GameTrigger.PushEvent(EventType.EVNT_SHIPDIED, (object)sci.shipInfo.DesignInfo.Class, game); orAddPlayer.AddShipData(sci.shipInfo.DesignID, 0.0f, 0.0f, 0, true); if (ScriptHost.AllowConsole) { App.Log.Trace(string.Format("Ship destroyed: {0} ({1})", (object)sci.shipInfo.ID, (object)sci.shipInfo.ShipName), "combat"); } } else { if (sci.shipInfo.DesignInfo == null) { sci.shipInfo.DesignInfo = game.GameDatabase.GetDesignInfo(sci.shipInfo.DesignID); } foreach (SectionInstanceInfo sectionInstanceInfo in game.GameDatabase.GetShipSectionInstances(sci.shipInfo.ID).ToList <SectionInstanceInfo>()) { SectionInstanceInfo sii = sectionInstanceInfo; int minStructure = ((IEnumerable <DesignSectionInfo>)sci.shipInfo.DesignInfo.DesignSections).First <DesignSectionInfo>((Func <DesignSectionInfo, bool>)(x => x.ID == sii.SectionID)).GetMinStructure(game.GameDatabase, game.AssetDatabase); sii.Structure -= sii.Structure - (int)Math.Round((double)sci.structureFactor); sii.Structure = Math.Max(sii.Structure, minStructure); game.GameDatabase.UpdateSectionInstance(sii); if (sii.Structure == minStructure) { foreach (ModuleInstanceInfo module in game.GameDatabase.GetModuleInstances(sii.ID).ToList <ModuleInstanceInfo>()) { module.Structure = 0; game.GameDatabase.UpdateModuleInstance(module); } foreach (WeaponInstanceInfo weapon in game.GameDatabase.GetWeaponInstances(sii.ID).ToList <WeaponInstanceInfo>()) { weapon.Structure = 0.0f; game.GameDatabase.UpdateWeaponInstance(weapon); } } } } } if (!CombatSimulator.IsFleetAlive(keyValuePair1.Value)) { game.GameDatabase.RemoveFleet(keyValuePair1.Key.ID); GameTrigger.PushEvent(EventType.EVNT_FLEETDIED, (object)keyValuePair1.Key.Name, game); if (ScriptHost.AllowConsole) { App.Log.Trace(string.Format("Fleet destroyed: {0} ({1})", (object)keyValuePair1.Key.ID, (object)keyValuePair1.Key.Name), "combat"); } } else { CombatSimulator.CheckFleetCommandPoints(game, keyValuePair1.Key); } } bool flag = true; foreach (PlanetCombatInfo planet in planets) { game.GameDatabase.UpdatePlanet(planet.planetInfo); if (planet.colonyInfo != null) { if (planet.colonyInfo.ImperialPop <= 0.0) { game.GameDatabase.RemoveColonyOnPlanet(planet.planetInfo.ID); if (ScriptHost.AllowConsole) { App.Log.Trace(string.Format("Colony defeated: planetid={0}", (object)planet.planetInfo.ID), "combat"); } } else { flag = false; planet.colonyInfo.DamagedLastTurn = true; game.GameDatabase.UpdateColony(planet.colonyInfo); foreach (ColonyFactionInfo faction in planet.colonyInfo.Factions) { game.GameDatabase.UpdateCivilianPopulation(faction); } } } } if (flag) { foreach (StationInfo stationInfo in game.GameDatabase.GetStationForSystem(systemId).ToList <StationInfo>()) { game.GameDatabase.DestroyStation(game, stationInfo.ID, 0); } } game.GameDatabase.InsertCombatData(systemId, combatData.CombatID, combatData.Turn, combatData.ToByteArray()); }