public void AddInstance( GameDatabase gamedb, AssetDatabase assetdb, GameSession game, int SystemId, int OrbitId) { Random random = new Random(); PirateBaseInfo pbi = new PirateBaseInfo(); pbi.SystemId = SystemId; pbi.NumShips = assetdb.GlobalPiracyData.PiracyMinBaseShips; pbi.TurnsUntilAddShip = assetdb.GlobalPiracyData.PiracyBaseTurnsPerUpdate; float num = StarSystemVars.Instance.SizeToRadius(game.GameDatabase.GetPlanetInfo(OrbitId).Size) + (float)StarSystemVars.Instance.StationOrbitDistance; OrbitalObjectInfo orbitalObjectInfo = gamedb.GetOrbitalObjectInfo(OrbitId); OrbitalPath path = new OrbitalPath(); path.Scale = new Vector2(num, num); path.Rotation = new Vector3(0.0f, 0.0f, 0.0f); path.DeltaAngle = random.NextInclusive(0.0f, 360f); path.InitialAngle = 0.0f; DesignInfo designInfo = gamedb.GetDesignInfo(this.PirateBaseDesignId); pbi.BaseStationId = gamedb.InsertStation(OrbitId, orbitalObjectInfo.StarSystemID, path, designInfo.Name, this.PlayerId, designInfo); gamedb.InsertPirateBaseInfo(pbi); }
public static Matrix GetSpawnTransform(App app, PirateBaseInfo pbi) { if (pbi == null) { return(Matrix.Identity); } StationInfo stationInfo = app.GameDatabase.GetStationInfo(pbi.BaseStationId); OrbitalObjectInfo orbitalObjectInfo = app.GameDatabase.GetOrbitalObjectInfo(stationInfo.OrbitalObjectID); Matrix orbitalTransform1 = app.GameDatabase.GetOrbitalTransform(orbitalObjectInfo.ID); Matrix orbitalTransform2 = app.GameDatabase.GetOrbitalTransform(orbitalObjectInfo.ParentID.Value); Vector3 vector3 = Vector3.Normalize(orbitalTransform1.Position - orbitalTransform2.Position); return(Matrix.CreateWorld(orbitalTransform1.Position + vector3 * 2000f, -vector3, Vector3.UnitY)); }
public static Matrix GetBaseEnemyFleetTrans(App app, PirateBaseInfo pbi) { if (pbi == null) { return(Matrix.Identity); } StationInfo stationInfo = app.GameDatabase.GetStationInfo(pbi.BaseStationId); OrbitalObjectInfo orbitalObjectInfo = app.GameDatabase.GetOrbitalObjectInfo(stationInfo.OrbitalObjectID); float radius = StarSystemVars.Instance.SizeToRadius(app.GameDatabase.GetPlanetInfo(orbitalObjectInfo.ParentID.Value).Size); Matrix orbitalTransform = app.GameDatabase.GetOrbitalTransform(orbitalObjectInfo.ParentID.Value); Vector3 vector3 = Vector3.Normalize(orbitalTransform.Position); return(Matrix.CreateWorld(orbitalTransform.Position + vector3 * (float)((double)radius + 750.0 + 1000.0), -vector3, Vector3.UnitY)); }
private static void SimulatePirateBase( Random rand, GameSession game, int systemId, FleetInfo randomsFleet, int aiPlayerID, List <FleetInfo> aiPlayerFleets) { int numToKill = rand.NextInclusive(5, 6); Dictionary <FleetInfo, List <ShipInfo> > shipsInFleets = CombatSimulatorRandoms.GetShipsInFleets(game, aiPlayerFleets); int num1 = shipsInFleets.Sum <KeyValuePair <FleetInfo, List <ShipInfo> > >((Func <KeyValuePair <FleetInfo, List <ShipInfo> >, int>)(x => x.Value.Count)); if (num1 == 0) { return; } PirateBaseInfo pirateBaseInfo = game.GameDatabase.GetPirateBaseInfos().FirstOrDefault <PirateBaseInfo>((Func <PirateBaseInfo, bool>)(x => x.SystemId == systemId)); if (pirateBaseInfo == null) { return; } CombatSimulatorRandoms.UpdateShipsKilled(game, rand, shipsInFleets, randomsFleet.PlayerID, numToKill); if (num1 < numToKill) { return; } int bounty = game.AssetDatabase.GlobalPiracyData.Bounties[0]; List <FleetInfo> list = game.GameDatabase.GetFleetsByPlayerAndSystem(randomsFleet.PlayerID, systemId, FleetType.FL_NORMAL).ToList <FleetInfo>(); int maxValue = 0; foreach (FleetInfo fleetInfo in list) { maxValue = game.GameDatabase.GetShipInfoByFleetID(fleetInfo.ID, true).Count <ShipInfo>((Func <ShipInfo, bool>)(x => x.DesignInfo.Class != ShipClass.Station)); } if (maxValue > 0) { int num2 = rand.NextInclusive(0, maxValue); int num3 = bounty + num2 * game.AssetDatabase.GlobalPiracyData.Bounties[1]; } foreach (int num2 in game.GameDatabase.GetStandardPlayerIDs().ToList <int>()) { if (num2 != aiPlayerID) { string factionName = game.GameDatabase.GetFactionName(game.GameDatabase.GetPlayerFactionID(num2)); int reactionAmount = 0; game.AssetDatabase.GlobalPiracyData.ReactionBonuses.TryGetValue(factionName, out reactionAmount); game.GameDatabase.ApplyDiplomacyReaction(num2, aiPlayerID, reactionAmount, new StratModifiers?(StratModifiers.DiplomacyReactionElimPirates), 1); } } game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_PIRATE_BASE_DESTROYED, EventMessage = TurnEventMessage.EM_PIRATE_BASE_DESTROYED, PlayerID = aiPlayerID, SystemID = systemId, TurnNumber = game.GameDatabase.GetTurnCount(), ShowsDialog = false }); game.GameDatabase.DestroyStation(game, pirateBaseInfo.BaseStationId, 0); }