private static void SyncStationDetailsControl( GameSession game, string panelName, StationInfo station) { ShipSectionAsset shipSectionAsset = game.AssetDatabase.ShipSections.First <ShipSectionAsset>((Func <ShipSectionAsset, bool>)(x => x.FileName == station.DesignInfo.DesignSections[0].FilePath)); int crew = shipSectionAsset.Crew; float structure = station.DesignInfo.Structure; int stationUpkeepCost = GameSession.CalculateStationUpkeepCost(game.GameDatabase, game.AssetDatabase, station); float tacticalSensorRange = shipSectionAsset.TacticalSensorRange; float strategicSensorRange = shipSectionAsset.StrategicSensorRange; foreach (DesignModuleInfo module in station.DesignInfo.DesignSections[0].Modules) { DesignModuleInfo dmi = module; LogicalModule logicalModule = game.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == game.GameDatabase.GetModuleAsset(dmi.ModuleID))); crew += logicalModule.Crew; tacticalSensorRange += logicalModule.SensorBonus; } string propertyValue1 = crew.ToString(); string propertyValue2 = strategicSensorRange.ToString(); string propertyValue3 = tacticalSensorRange.ToString(); string propertyValue4 = stationUpkeepCost.ToString(); string propertyValue5 = structure.ToString(); game.UI.SetPropertyString(game.UI.Path(panelName, "popVal"), "text", propertyValue1); game.UI.SetPropertyString(game.UI.Path(panelName, "stratVal"), "text", propertyValue2); game.UI.SetPropertyString(game.UI.Path(panelName, "tactVal"), "text", propertyValue3); game.UI.SetPropertyString(game.UI.Path(panelName, "maintVal"), "text", propertyValue4); game.UI.SetPropertyString(game.UI.Path(panelName, "structVal"), "text", propertyValue5); }
private bool DesignChanged() { foreach (DesignModuleInfo module in this.WorkingDesign.DesignSections[0].Modules) { DesignModuleInfo dmi = module; if (this._ship.DesignInfo.DesignSections[0].Modules.Any <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => { if (!(x.MountNodeName == dmi.MountNodeName)) { return(false); } int?weaponId1 = x.WeaponID; int?weaponId2 = dmi.WeaponID; if (weaponId1.GetValueOrDefault() == weaponId2.GetValueOrDefault()) { return(weaponId1.HasValue != weaponId2.HasValue); } return(true); }))) { return(true); } } return(false); }
protected void SyncBuildQueue() { this.App.UI.ClearItems("moduleQue"); StationInfo si = this.App.GameDatabase.GetStationInfo(this._selectedStation.OrbitalObjectID); List <DesignModuleInfo> list = this.App.GameDatabase.GetQueuedStationModules(si.DesignInfo.DesignSections[0]).ToList <DesignModuleInfo>(); int num = 0; foreach (DesignModuleInfo designModuleInfo in list) { DesignModuleInfo module = designModuleInfo; this.App.UI.AddItem("moduleQue", "", module.ID, ""); string itemGlobalId = this.App.UI.GetItemGlobalID("moduleQue", "", module.ID, ""); StationModules.StationModule stationModule = ((IEnumerable <StationModules.StationModule>)StationModules.Modules).Where <StationModules.StationModule>((Func <StationModules.StationModule, bool>)(x => { ModuleEnums.StationModuleType smType = x.SMType; ModuleEnums.StationModuleType?stationModuleType = module.StationModuleType; if (smType == stationModuleType.GetValueOrDefault()) { return(stationModuleType.HasValue); } return(false); })).First <StationModules.StationModule>(); StationModuleQueue.UpdateStationMapsForFaction(this.App.LocalPlayer.Faction.Name); LogicalModule logicalModule = this.App.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == this.App.AssetDatabase.GetStationModuleAsset(module.StationModuleType.Value, StationModuleQueue.GetModuleFactionDefault(module.StationModuleType.Value, this.App.Game.GetPlayerObject(si.PlayerID).Faction)))); num += logicalModule.SavingsCost; this.App.UI.SetPropertyString(this.App.UI.Path(itemGlobalId, "moduleName"), "text", stationModule.Name + " - $" + logicalModule.SavingsCost.ToString("N0")); this.App.UI.SetVisible(this.App.UI.Path(itemGlobalId, "deleteButton"), true); this.App.UI.SetPropertyString(this.App.UI.Path(itemGlobalId, "deleteButton"), "id", "modque|" + ((int)module.StationModuleType.Value).ToString()); this.App.UI.SetPropertyColor(this.App.UI.Path(itemGlobalId, "moduleName"), "color", new Vector3((float)byte.MaxValue, (float)byte.MaxValue, (float)byte.MaxValue)); } int userItemId = 999000; foreach (KeyValuePair <ModuleEnums.StationModuleType, int> keyValuePair in this._queuedItemMap.ToList <KeyValuePair <ModuleEnums.StationModuleType, int> >().Where <KeyValuePair <ModuleEnums.StationModuleType, int> >((Func <KeyValuePair <ModuleEnums.StationModuleType, int>, bool>)(x => x.Value > 0))) { KeyValuePair <ModuleEnums.StationModuleType, int> thing = keyValuePair; for (int index = 0; index < thing.Value; ++index) { this.App.UI.AddItem("moduleQue", "", userItemId, ""); string itemGlobalId = this.App.UI.GetItemGlobalID("moduleQue", "", userItemId, ""); StationModules.StationModule stationModule = ((IEnumerable <StationModules.StationModule>)StationModules.Modules).Where <StationModules.StationModule>((Func <StationModules.StationModule, bool>)(x => x.SMType == thing.Key)).First <StationModules.StationModule>(); StationModuleQueue.UpdateStationMapsForFaction(this.App.LocalPlayer.Faction.Name); LogicalModule logicalModule = this.App.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == this.App.AssetDatabase.GetStationModuleAsset(thing.Key, StationModuleQueue.GetModuleFactionDefault(thing.Key, this.App.Game.GetPlayerObject(si.PlayerID).Faction)))); num += logicalModule.SavingsCost; this.App.UI.SetPropertyString(this.App.UI.Path(itemGlobalId, "moduleName"), "text", stationModule.Name + " - $" + logicalModule.SavingsCost.ToString("N0")); this.App.UI.SetPropertyColor(this.App.UI.Path(itemGlobalId, "moduleName"), "color", new Vector3((float)byte.MaxValue, 200f, 50f)); this.App.UI.SetVisible(this.App.UI.Path(itemGlobalId, "deleteButton"), false); ++userItemId; } } this.App.UI.SetText("queueCost", "$" + num.ToString("N0")); this.App.UI.SetText("turnsToComplete", list.Count.ToString() + " " + App.Localize("@UI_GENERAL_TURNS")); }
private void SelectBank(int bankid) { foreach (DesignSectionInfo designSection in this.WorkingDesign.DesignSections) { foreach (WeaponBankInfo weaponBank in designSection.WeaponBanks) { if (weaponBank.ID == bankid) { this._selectedWeaponBank = weaponBank; } } this._selectedModule = designSection.Modules.First <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => x.MountNodeName == this.ModuleBankdict[bankid])); } }
public static IEnumerable <int> GetBattleriderIndexes(App app, ShipInfo ship) { List <SectionInstanceInfo> list1 = app.GameDatabase.GetShipSectionInstances(ship.ID).ToList <SectionInstanceInfo>(); List <DesignSectionInfo> sections = ((IEnumerable <DesignSectionInfo>)app.GameDatabase.GetShipInfo(ship.ID, true).DesignInfo.DesignSections).ToList <DesignSectionInfo>(); List <int> intList = new List <int>(); int num = 0; for (int j = 0; j < sections.Count; ++j) { SectionInstanceInfo sectionInstanceInfo = list1.First <SectionInstanceInfo>((Func <SectionInstanceInfo, bool>)(x => x.SectionID == sections[j].ID)); List <ModuleInstanceInfo> list2 = app.GameDatabase.GetModuleInstances(sectionInstanceInfo.ID).ToList <ModuleInstanceInfo>(); foreach (LogicalMount mount in app.AssetDatabase.GetShipSectionAsset(sections[j].FilePath).Mounts) { if (WeaponEnums.IsWeaponBattleRider(mount.Bank.TurretClass)) { ++num; } else if (WeaponEnums.IsBattleRider(mount.Bank.TurretClass)) { intList.Add(num); ++num; } } if (list2.Count > 0) { foreach (ModuleInstanceInfo moduleInstanceInfo in list2) { ModuleInstanceInfo mii = moduleInstanceInfo; DesignModuleInfo designModuleInfo = sections[j].Modules.First <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => x.MountNodeName == mii.ModuleNodeID)); if (designModuleInfo.DesignID.HasValue) { string modAsset = app.GameDatabase.GetModuleAsset(designModuleInfo.ModuleID); foreach (LogicalMount mount in app.AssetDatabase.Modules.Where <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == modAsset)).First <LogicalModule>().Mounts) { if (WeaponEnums.IsWeaponBattleRider(mount.Bank.TurretClass)) { ++num; } else if (WeaponEnums.IsBattleRider(mount.Bank.TurretClass)) { intList.Add(num); ++num; } } } } } } return((IEnumerable <int>)intList); }
protected override void OnPanelMessage(string panelName, string msgType, string[] msgParams) { if (msgType == "button_clicked" && panelName == "okButton") { this._app.UI.CloseDialog((Dialog)this, true); } if (msgType == "mouse_enter") { string[] strArray = panelName.Split('|'); int orbitalObjectID = int.Parse(strArray[0]); ModuleEnums.StationModuleType type = (ModuleEnums.StationModuleType)Enum.Parse(typeof(ModuleEnums.StationModuleType), strArray[1]); StationInfo stationInfo = this.App.GameDatabase.GetStationInfo(orbitalObjectID); IEnumerable <StationModules.StationModule> source = ((IEnumerable <StationModules.StationModule>)StationModules.Modules).Where <StationModules.StationModule>((Func <StationModules.StationModule, bool>)(x => x.SMType == type)); if (source.Count <StationModules.StationModule>() > 0) { string upper = stationInfo.DesignInfo.StationType.ToDisplayText(this.App.GameDatabase.GetFactionName(this.App.GameDatabase.GetPlayerFactionID(stationInfo.PlayerID))).ToUpper(); this.App.UI.SetPropertyString("moduleDescriptionText", "text", App.Localize(string.Format(source.ElementAt <StationModules.StationModule>(0).Description, (object)upper))); } } else { int num1 = msgType == "mouse_leave" ? 1 : 0; } if (msgType == "list_sel_changed") { if (panelName == "station_list") { this.PopulateModulesList(this.App.GameDatabase.GetStationInfo(int.Parse(msgParams[0]))); } else if (panelName == "filterDropdown") { this._currentFilterMode = (StationType)int.Parse(msgParams[0]); this.SyncStationList(); } } if (!(msgType == "button_clicked")) { return; } if (panelName == "upgradeButton") { OrbitalObjectInfo orbitalObjectInfo = this._app.GameDatabase.GetOrbitalObjectInfo(this._selectedStation.OrbitalObjectID); this._starmap.GetUpgradeMissionOverlay().StartSelect = orbitalObjectInfo.ID; this._app.UI.CloseDialog((Dialog)this, true); this._starmap.ShowUpgradeMissionOverlay(orbitalObjectInfo.StarSystemID); } else if (panelName.StartsWith("modque")) { ModuleEnums.StationModuleType moduleID = (ModuleEnums.StationModuleType) int.Parse(panelName.Split('|')[1]); List <LogicalModuleMount> stationModuleMounts = this.App.Game.GetAvailableStationModuleMounts(this.App.GameDatabase.GetStationInfo(this._selectedStation.OrbitalObjectID)); List <DesignModuleInfo> queuedModules = this.App.GameDatabase.GetQueuedStationModules(this._selectedStation.DesignInfo.DesignSections[0]).ToList <DesignModuleInfo>(); stationModuleMounts.Where <LogicalModuleMount>((Func <LogicalModuleMount, bool>)(x => queuedModules.Any <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(y => y.MountNodeName == x.NodeName)))).ToList <LogicalModuleMount>(); DesignModuleInfo designModuleInfo = queuedModules.FirstOrDefault <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => { ModuleEnums.StationModuleType?stationModuleType1 = x.StationModuleType; ModuleEnums.StationModuleType stationModuleType2 = moduleID; if (stationModuleType1.GetValueOrDefault() == stationModuleType2) { return(stationModuleType1.HasValue); } return(false); })); if (designModuleInfo != null) { this.App.GameDatabase.RemoveQueuedStationModule(designModuleInfo.ID); } this.SyncModuleItems(); this.SyncBuildQueue(); } else if (panelName == "filterDiplomatic") { StationManagerDialog.StationViewFilter[StationType.DIPLOMATIC] = !StationManagerDialog.StationViewFilter[StationType.DIPLOMATIC]; this.SyncStationList(); } else if (panelName == "filterScience") { StationManagerDialog.StationViewFilter[StationType.SCIENCE] = !StationManagerDialog.StationViewFilter[StationType.SCIENCE]; this.SyncStationList(); } else if (panelName == "filterCivilian") { StationManagerDialog.StationViewFilter[StationType.CIVILIAN] = !StationManagerDialog.StationViewFilter[StationType.CIVILIAN]; this.SyncStationList(); } else if (panelName == "filterNaval") { StationManagerDialog.StationViewFilter[StationType.NAVAL] = !StationManagerDialog.StationViewFilter[StationType.NAVAL]; this.SyncStationList(); } else if (panelName == "filterMining") { StationManagerDialog.StationViewFilter[StationType.MINING] = !StationManagerDialog.StationViewFilter[StationType.MINING]; this.SyncStationList(); } else if (panelName == "filterSDS") { StationManagerDialog.StationViewFilter[StationType.DEFENCE] = !StationManagerDialog.StationViewFilter[StationType.DEFENCE]; this.SyncStationList(); } else if (panelName == "filterGate") { StationManagerDialog.StationViewFilter[StationType.GATE] = !StationManagerDialog.StationViewFilter[StationType.GATE]; this.SyncStationList(); } else if (panelName == "confirmOrderButton") { StationInfo stationInfo = this.App.GameDatabase.GetStationInfo(this._selectedStation.OrbitalObjectID); StationModuleQueue.UpdateStationMapsForFaction(this.App.LocalPlayer.Faction.Name); StationModuleQueue.ConfirmStationQueuedItems(this.App.Game, stationInfo, this._queuedItemMap); this.SyncModuleItems(); this.SyncBuildQueue(); } else if (panelName.EndsWith("module_up")) { string[] strArray = panelName.Split('|'); int orbitalObjectID = int.Parse(strArray[0]); ModuleEnums.StationModuleType type = (ModuleEnums.StationModuleType)Enum.Parse(typeof(ModuleEnums.StationModuleType), strArray[1]); StationInfo stationInfo = this.App.GameDatabase.GetStationInfo(orbitalObjectID); this.App.GameDatabase.GetModuleID(this.App.AssetDatabase.GetStationModuleAsset(type, this.App.Game.LocalPlayer.Faction.Name), this.App.Game.LocalPlayer.ID); List <LogicalModuleMount> stationModuleMounts = this.App.Game.GetAvailableStationModuleMounts(stationInfo); List <DesignModuleInfo> list = this.App.GameDatabase.GetQueuedStationModules(this._selectedStation.DesignInfo.DesignSections[0]).ToList <DesignModuleInfo>(); list.Where <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => { ModuleEnums.StationModuleType?stationModuleType1 = x.StationModuleType; ModuleEnums.StationModuleType stationModuleType2 = type; if (stationModuleType1.GetValueOrDefault() == stationModuleType2) { return(stationModuleType1.HasValue); } return(false); })).ToList <DesignModuleInfo>(); int num2 = list.Where <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => AssetDatabase.StationModuleTypeToMountTypeMap[x.StationModuleType.Value] == AssetDatabase.StationModuleTypeToMountTypeMap[type])).Count <DesignModuleInfo>(); if (this._queuedItemMap.Where <KeyValuePair <ModuleEnums.StationModuleType, int> >((Func <KeyValuePair <ModuleEnums.StationModuleType, int>, bool>)(x => AssetDatabase.StationModuleTypeToMountTypeMap[x.Key] == AssetDatabase.StationModuleTypeToMountTypeMap[type])).Sum <KeyValuePair <ModuleEnums.StationModuleType, int> >((Func <KeyValuePair <ModuleEnums.StationModuleType, int>, int>)(x => x.Value)) >= stationModuleMounts.Where <LogicalModuleMount>((Func <LogicalModuleMount, bool>)(x => x.ModuleType == AssetDatabase.StationModuleTypeToMountTypeMap[type].ToString())).Count <LogicalModuleMount>() - num2) { return; } Dictionary <ModuleEnums.StationModuleType, int> queuedItemMap; ModuleEnums.StationModuleType index; (queuedItemMap = this._queuedItemMap)[index = type] = queuedItemMap[index] + 1; this.SyncModuleItems(); } else if (panelName.EndsWith("module_down")) { string[] strArray = panelName.Split('|'); int.Parse(strArray[0]); ModuleEnums.StationModuleType index1 = (ModuleEnums.StationModuleType)Enum.Parse(typeof(ModuleEnums.StationModuleType), strArray[1]); if (this._queuedItemMap[index1] <= 0) { return; } Dictionary <ModuleEnums.StationModuleType, int> queuedItemMap; ModuleEnums.StationModuleType index2; (queuedItemMap = this._queuedItemMap)[index2 = index1] = queuedItemMap[index2] - 1; this.SyncModuleItems(); } else if (panelName.EndsWith("module_max")) { string[] strArray = panelName.Split('|'); int orbitalObjectID = int.Parse(strArray[0]); ModuleEnums.StationModuleType type = (ModuleEnums.StationModuleType)Enum.Parse(typeof(ModuleEnums.StationModuleType), strArray[1]); StationInfo stationInfo = this.App.GameDatabase.GetStationInfo(orbitalObjectID); this.App.GameDatabase.GetModuleID(this.App.AssetDatabase.GetStationModuleAsset(type, this.App.Game.LocalPlayer.Faction.Name), this.App.Game.LocalPlayer.ID); List <LogicalModuleMount> stationModuleMounts = this.App.Game.GetAvailableStationModuleMounts(stationInfo); List <DesignModuleInfo> list = this.App.GameDatabase.GetQueuedStationModules(this._selectedStation.DesignInfo.DesignSections[0]).ToList <DesignModuleInfo>(); list.Where <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => { ModuleEnums.StationModuleType?stationModuleType1 = x.StationModuleType; ModuleEnums.StationModuleType stationModuleType2 = type; if (stationModuleType1.GetValueOrDefault() == stationModuleType2) { return(stationModuleType1.HasValue); } return(false); })).ToList <DesignModuleInfo>(); int num2 = list.Where <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => AssetDatabase.StationModuleTypeToMountTypeMap[x.StationModuleType.Value] == AssetDatabase.StationModuleTypeToMountTypeMap[type])).Count <DesignModuleInfo>(); int num3 = stationModuleMounts.Where <LogicalModuleMount>((Func <LogicalModuleMount, bool>)(x => x.ModuleType == AssetDatabase.StationModuleTypeToMountTypeMap[type].ToString())).Count <LogicalModuleMount>(); int num4 = this._queuedItemMap.Where <KeyValuePair <ModuleEnums.StationModuleType, int> >((Func <KeyValuePair <ModuleEnums.StationModuleType, int>, bool>)(x => AssetDatabase.StationModuleTypeToMountTypeMap[x.Key] == AssetDatabase.StationModuleTypeToMountTypeMap[type])).Sum <KeyValuePair <ModuleEnums.StationModuleType, int> >((Func <KeyValuePair <ModuleEnums.StationModuleType, int>, int>)(x => x.Value)); if (num4 >= num3 - num2) { return; } Dictionary <ModuleEnums.StationModuleType, int> queuedItemMap; ModuleEnums.StationModuleType index; (queuedItemMap = this._queuedItemMap)[index = type] = queuedItemMap[index] + (num3 - num2 - num4); this.SyncModuleItems(); } else { if (!(panelName == "autoUpgradeButton")) { return; } this.AutoFillModules(); } }
public static void Simulate(GameSession game, int systemId, List <FleetInfo> fleets) { if (ScriptHost.AllowConsole) { App.Log.Trace(string.Format("Simulating AI combat at: {0}", (object)systemId), "combat"); } List <PlanetCombatInfo> planets = new List <PlanetCombatInfo>(); PlanetInfo[] systemPlanetInfos = game.GameDatabase.GetStarSystemPlanetInfos(systemId); if (systemPlanetInfos != null) { foreach (PlanetInfo planetInfo in systemPlanetInfos) { planets.Add(new PlanetCombatInfo() { planetInfo = planetInfo, colonyInfo = game.GameDatabase.GetColonyInfoForPlanet(planetInfo.ID) }); } } Dictionary <FleetInfo, List <ShipCombatInfo> > shipCombatInfo = new Dictionary <FleetInfo, List <ShipCombatInfo> >(); foreach (FleetInfo fleet in fleets) { List <ShipCombatInfo> shipCombatInfoList = new List <ShipCombatInfo>(); foreach (ShipInfo shipInfo in game.GameDatabase.GetShipInfoByFleetID(fleet.ID, true).ToList <ShipInfo>()) { if (shipInfo.DesignInfo.Class != ShipClass.BattleRider) { ShipCombatInfo sci = new ShipCombatInfo(); sci.shipInfo = shipInfo; float num = 1f; if (shipInfo.DesignInfo.Class == ShipClass.Cruiser || shipInfo.DesignInfo.Class == ShipClass.Dreadnought) { num = 3f; } sci.armorFactor = (float)shipInfo.DesignInfo.Armour / num; sci.structureFactor = shipInfo.DesignInfo.Structure / num; foreach (DesignSectionInfo designSection in shipInfo.DesignInfo.DesignSections) { ShipSectionAsset shipSectionAsset = game.AssetDatabase.GetShipSectionAsset(designSection.FilePath); foreach (WeaponBankInfo weaponBank in designSection.WeaponBanks) { WeaponBankInfo wbi = weaponBank; if (wbi.WeaponID.HasValue) { string weaponName = Path.GetFileNameWithoutExtension(game.GameDatabase.GetWeaponAsset(wbi.WeaponID.Value)); LogicalWeapon lw = game.AssetDatabase.Weapons.FirstOrDefault <LogicalWeapon>((Func <LogicalWeapon, bool>)(weapon => string.Equals(weapon.WeaponName, weaponName, StringComparison.InvariantCultureIgnoreCase))); List <LogicalMount> list = ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank.GUID == wbi.BankGUID)).ToList <LogicalMount>(); int totalMounts = list.Count <LogicalMount>() <= 0 ? 1 : list.Count <LogicalMount>(); foreach (LogicalMount logicalMount in list) { switch (logicalMount.Bank.TurretClass) { case WeaponEnums.TurretClasses.Drone: ++sci.drones; continue; case WeaponEnums.TurretClasses.DestroyerRider: case WeaponEnums.TurretClasses.CruiserRider: case WeaponEnums.TurretClasses.DreadnoughtRider: ++sci.battleRiders; continue; default: CombatSimulator.ApplyWeaponStats(sci, lw, totalMounts); continue; } } } } foreach (DesignModuleInfo module in designSection.Modules) { DesignModuleInfo mod = module; LogicalModule logicalModule = game.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == game.GameDatabase.GetModuleAsset(mod.ModuleID))); if (logicalModule != null && mod.WeaponID.HasValue) { foreach (LogicalBank bank in logicalModule.Banks) { LogicalBank lb = bank; string weaponName2 = Path.GetFileNameWithoutExtension(game.GameDatabase.GetWeaponAsset(mod.WeaponID.Value)); LogicalWeapon lw = game.AssetDatabase.Weapons.FirstOrDefault <LogicalWeapon>((Func <LogicalWeapon, bool>)(weapon => string.Equals(weapon.WeaponName, weaponName2, StringComparison.InvariantCultureIgnoreCase))); List <LogicalMount> list = ((IEnumerable <LogicalMount>)shipSectionAsset.Mounts).Where <LogicalMount>((Func <LogicalMount, bool>)(x => x.Bank.GUID == lb.GUID)).ToList <LogicalMount>(); int totalMounts = list.Count <LogicalMount>() <= 0 ? 1 : list.Count <LogicalMount>(); foreach (LogicalMount logicalMount in list) { CombatSimulator.ApplyWeaponStats(sci, lw, totalMounts); } } } } } shipCombatInfoList.Add(sci); } } shipCombatInfo.Add(fleet, shipCombatInfoList); } if (fleets.Count <FleetInfo>() > 1) { CombatSimulator.TrackingPhase(shipCombatInfo, 4f); CombatSimulator.DirectPhase(shipCombatInfo, 4f); CombatSimulator.TrackingPhase(shipCombatInfo, 1f); CombatSimulator.DirectPhase(shipCombatInfo, 2f); CombatSimulator.BombardmentPhase(game.GameDatabase, shipCombatInfo, planets, 1f); } else { CombatSimulator.BombardmentPhase(game.GameDatabase, shipCombatInfo, planets, 2f); } CombatSimulator.CompleteSimulation(game, systemId, shipCombatInfo, planets); }
private Budget( GameDatabase gamedb, AssetDatabase assetdb, GameSession game, PlayerInfo playerInfo, FactionInfo playerFactionInfo, double maxDriveSpeed, double incomeFromTrade, SpendingCaps spendingCaps, IEnumerable <ColonyInfo> colonyInfos, Dictionary <int, PlanetInfo> planetInfos, Dictionary <int, OrbitalObjectInfo> orbitalObjectInfos, Dictionary <int, StarSystemInfo> starSystemInfos, HashSet <int> starSystemsWithGates, IEnumerable <StationInfo> stationInfos, IEnumerable <DesignInfo> reserveShipDesignInfos, IEnumerable <DesignInfo> shipDesignInfos, IEnumerable <DesignInfo> eliteShipDesignInfos, IEnumerable <DesignInfo> additionalShipDesignInfos) { this.CurrentSavings = playerInfo.Savings; this.SavingsInterest = playerFactionInfo.Name != "loa" ? GameSession.CalculateSavingsInterest(game, playerInfo) : 0.0; this.DebtInterest = playerFactionInfo.Name != "loa" ? GameSession.CalculateDebtInterest(game, playerInfo) : 0.0; this.TradeRevenue = incomeFromTrade; this.TaxRevenue = colonyInfos.Sum <ColonyInfo>((Func <ColonyInfo, double>)(x => Colony.GetTaxRevenue(game.App, playerInfo, x))); float num1 = gamedb.GetNameValue <float>("EconomicEfficiency") / 100f; this.TradeRevenue *= (double)num1; this.TradeRevenue *= (double)game.GameDatabase.GetStratModifierFloatToApply(StratModifiers.TradeRevenue, playerInfo.ID); this.TaxRevenue *= (double)num1; Player playerObject1 = game.GetPlayerObject(playerInfo.ID); if (playerObject1 == null || !playerObject1.IsAI()) { this.CurrentStationUpkeepExpenses = GameSession.CalculateStationUpkeepCosts(gamedb, assetdb, stationInfos); this.CurrentShipUpkeepExpenses = GameSession.CalculateFleetUpkeepCosts(assetdb, reserveShipDesignInfos, shipDesignInfos, eliteShipDesignInfos); this.AdditionalUpkeepExpenses = GameSession.CalculateShipUpkeepCosts(assetdb, additionalShipDesignInfos, 1f, false); } this.ColonySupportExpenses = colonyInfos.Sum <ColonyInfo>((Func <ColonyInfo, double>)(x => { OrbitalObjectInfo orbitalObjectInfo = orbitalObjectInfos[x.OrbitalObjectID]; PlanetInfo planetInfo = planetInfos[x.OrbitalObjectID]; StarSystemInfo starSystemInfo = starSystemInfos[orbitalObjectInfo.StarSystemID]; return(Colony.GetColonySupportCost(gamedb, assetdb, playerInfo, playerFactionInfo, orbitalObjectInfos[x.OrbitalObjectID], planetInfos[x.OrbitalObjectID], starSystemInfos[orbitalObjectInfos[x.OrbitalObjectID].StarSystemID], orbitalObjectInfos, planetInfos, starSystemInfos, starSystemsWithGates.Contains(orbitalObjectInfos[x.OrbitalObjectID].StarSystemID), maxDriveSpeed)); })); this.IORevenue = 0.0; List <int> list1 = gamedb.GetPlayerColonySystemIDs(playerInfo.ID).ToList <int>(); int num2 = list1.Where <int>((Func <int, bool>)(x => gamedb.GetStarSystemInfo(x).IsOpen)).Count <int>(); Player playerObject2 = game.GetPlayerObject(playerInfo.ID); float num3 = 0.0f; foreach (int num4 in list1) { List <BuildOrderInfo> list2 = gamedb.GetBuildOrdersForSystem(num4).ToList <BuildOrderInfo>(); float num5 = 0.0f; foreach (ColonyInfo colony in gamedb.GetColonyInfosForSystem(num4).ToList <ColonyInfo>()) { if (colony.PlayerID == playerInfo.ID) { num5 += Colony.GetConstructionPoints(game, colony); } } float num6 = num5 * game.GetStationBuildModifierForSystem(num4, playerInfo.ID); foreach (BuildOrderInfo buildOrderInfo in list2) { DesignInfo designInfo = gamedb.GetDesignInfo(buildOrderInfo.DesignID); if (designInfo.PlayerID == playerInfo.ID) { int num7 = designInfo.SavingsCost; if (designInfo.IsLoaCube()) { num7 = buildOrderInfo.LoaCubes * assetdb.LoaCostPerCube; } int num8 = buildOrderInfo.ProductionTarget - buildOrderInfo.Progress; float num9 = 0.0f; if (!designInfo.isPrototyped) { num9 = (float)(int)((double)num6 * ((double)gamedb.GetStratModifierFloatToApply(StratModifiers.PrototypeTimeModifier, playerInfo.ID) - 1.0)); switch (designInfo.Class) { case ShipClass.Cruiser: num7 = (int)((double)designInfo.SavingsCost * (double)gamedb.GetStratModifierFloatToApply(StratModifiers.PrototypeSavingsCostModifierCR, playerInfo.ID)); break; case ShipClass.Dreadnought: num7 = (int)((double)designInfo.SavingsCost * (double)gamedb.GetStratModifierFloatToApply(StratModifiers.PrototypeSavingsCostModifierDN, playerInfo.ID)); break; case ShipClass.Leviathan: num7 = (int)((double)designInfo.SavingsCost * (double)gamedb.GetStratModifierFloatToApply(StratModifiers.PrototypeSavingsCostModifierLV, playerInfo.ID)); break; case ShipClass.Station: RealShipClasses?realShipClass = designInfo.GetRealShipClass(); if ((realShipClass.GetValueOrDefault() != RealShipClasses.Platform ? 0 : (realShipClass.HasValue ? 1 : 0)) != 0) { num7 = (int)((double)designInfo.SavingsCost * (double)gamedb.GetStratModifierFloatToApply(StratModifiers.PrototypeSavingsCostModifierPF, playerInfo.ID)); break; } break; } } if (playerInfo.isStandardPlayer && playerObject2.IsAI() && playerObject2.Faction.Name == "loa") { num7 = (int)((double)num7 * 1.0); } if ((double)num8 <= (double)num6 - (double)num9) { num3 += (float)num7; num6 -= (float)num8; } this.TotalBuildShipCosts += (double)num7; } } this.IORevenue += (double)num6; } this.IORevenue *= (double)game.GameDatabase.GetStratModifierFloatToApply(StratModifiers.IORevenue, playerInfo.ID); this.PendingBuildShipsCost = (double)num3; foreach (MissionInfo missionInfo in game.GameDatabase.GetMissionInfos().Where <MissionInfo>((Func <MissionInfo, bool>)(x => x.Type == MissionType.CONSTRUCT_STN))) { FleetInfo fleetInfo = game.GameDatabase.GetFleetInfo(missionInfo.FleetID); if (fleetInfo.PlayerID == playerInfo.ID) { MissionEstimate missionEstimate = Kerberos.Sots.StarFleet.StarFleet.GetMissionEstimate(game, missionInfo.Type, (StationType)missionInfo.StationType.Value, fleetInfo.ID, missionInfo.TargetSystemID, missionInfo.TargetOrbitalObjectID, (List <int>)null, 1, false, new float?(), new float?()); this.TotalBuildStationsCost += (double)missionEstimate.ConstructionCost; if (missionEstimate.TotalTurns - 1 - missionEstimate.TurnsToReturn <= 1) { this.PendingBuildStationsCost += (double)missionEstimate.ConstructionCost; } } } foreach (MissionInfo missionInfo in game.GameDatabase.GetMissionInfos().Where <MissionInfo>((Func <MissionInfo, bool>)(x => { if (x.Type == MissionType.UPGRADE_STN) { return(x.Duration > 0); } return(false); }))) { FleetInfo fleetInfo = game.GameDatabase.GetFleetInfo(missionInfo.FleetID); if (game.GameDatabase.GetStationInfo(missionInfo.TargetOrbitalObjectID) != null && fleetInfo.PlayerID == playerInfo.ID && game.GameDatabase.GetWaypointsByMissionID(missionInfo.ID).First <WaypointInfo>().Type != WaypointType.ReturnHome) { StationInfo stationInfo = game.GameDatabase.GetStationInfo(missionInfo.TargetOrbitalObjectID); if (stationInfo.DesignInfo.StationLevel + 1 <= 5) { MissionEstimate missionEstimate = Kerberos.Sots.StarFleet.StarFleet.GetMissionEstimate(game, missionInfo.Type, stationInfo.DesignInfo.StationType, fleetInfo.ID, missionInfo.TargetSystemID, missionInfo.TargetOrbitalObjectID, (List <int>)null, stationInfo.DesignInfo.StationLevel + 1, false, new float?(), new float?()); DesignInfo stationDesignInfo = DesignLab.CreateStationDesignInfo(game.AssetDatabase, game.GameDatabase, fleetInfo.PlayerID, stationInfo.DesignInfo.StationType, stationInfo.DesignInfo.StationLevel + 1, false); this.TotalBuildStationsCost += (double)stationDesignInfo.SavingsCost; if (missionEstimate.TotalTurns - 1 - missionEstimate.TurnsToReturn <= 1) { this.PendingBuildStationsCost += (double)stationDesignInfo.SavingsCost; } } } } foreach (StationInfo stationInfo in game.GameDatabase.GetStationInfosByPlayerID(playerInfo.ID)) { List <DesignModuleInfo> queuedModules = game.GameDatabase.GetQueuedStationModules(stationInfo.DesignInfo.DesignSections[0]).ToList <DesignModuleInfo>(); if (queuedModules.Count > 0) { LogicalModule logicalModule1 = game.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == game.GameDatabase.GetModuleAsset(queuedModules.First <DesignModuleInfo>().ModuleID))); if (logicalModule1 != null) { this.PendingStationsModulesCost += (double)logicalModule1.SavingsCost; } foreach (DesignModuleInfo designModuleInfo in queuedModules) { DesignModuleInfo dmi = designModuleInfo; LogicalModule logicalModule2 = game.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == game.GameDatabase.GetModuleAsset(dmi.ModuleID))); if (logicalModule2 != null) { this.TotalStationsModulesCost += (double)logicalModule2.SavingsCost; } } } } this.TotalRevenue = this.TradeRevenue + this.TaxRevenue + this.IORevenue + this.SavingsInterest; this.RequiredSecurity = (int)Math.Ceiling(((double)num2 / (double)list1.Count != 0.0 ? ((double)assetdb.BaseCorruptionRate + 0.0199999995529652 * ((double)playerInfo.RateImmigration * 10.0)) / (2.0 * (double)playerInfo.RateGovernmentResearch) : 0.0) * 100.0); if (playerFactionInfo.Name == "loa") { this.RequiredSecurity = 0; } this.CorruptionExpenses = this.TotalRevenue * (double)Math.Max(0.0f, (float)(((double)assetdb.BaseCorruptionRate + 0.0199999995529652 * ((double)playerInfo.RateImmigration * 10.0) - 2.0 * ((double)playerInfo.RateGovernmentResearch * (double)playerInfo.RateGovernmentSecurity)) * ((double)num2 / (double)list1.Count))); if (playerFactionInfo.Name == "loa") { this.CorruptionExpenses = 0.0; } this.UpkeepExpenses = this.CurrentShipUpkeepExpenses + this.CurrentStationUpkeepExpenses + this.AdditionalUpkeepExpenses; this.TotalExpenses = this.UpkeepExpenses + this.ColonySupportExpenses + this.DebtInterest + this.CorruptionExpenses; this.OperatingBudget = this.TotalRevenue - this.TotalExpenses; this.DisposableIncome = Math.Max(this.OperatingBudget, 0.0); this.NetSavingsLoss = Math.Max(-this.OperatingBudget, 0.0) + this.PendingBuildShipsCost + this.PendingBuildStationsCost + this.PendingStationsModulesCost; this.RequestedGovernmentSpending = this.DisposableIncome * (double)playerInfo.RateGovernmentResearch; SpendingPool pool = new SpendingPool(); this.ResearchSpending = new ResearchSpending(playerInfo, this.DisposableIncome - this.RequestedGovernmentSpending, pool, spendingCaps); this.SecuritySpending = new SecuritySpending(playerInfo, this.RequestedGovernmentSpending * (double)playerInfo.RateGovernmentSecurity, pool, spendingCaps); this.StimulusSpending = new StimulusSpending(playerInfo, this.RequestedGovernmentSpending * (double)playerInfo.RateGovernmentStimulus, pool, spendingCaps); this.ProjectedGovernmentSpending = this.SecuritySpending.ProjectedTotal + this.StimulusSpending.ProjectedTotal; this.UnspentIncome = pool.Excess; this.NetSavingsIncome = this.DisposableIncome - this.ResearchSpending.RequestedTotal - this.SecuritySpending.RequestedTotal - this.StimulusSpending.RequestedTotal + this.UnspentIncome; this.ProjectedSavings = this.CurrentSavings + this.NetSavingsIncome - this.NetSavingsLoss; }
public override void Initialize() { this.App.UI.HideTooltip(); this.BankDict = new Dictionary <string, int>(); this.ItemIDDict = new Dictionary <string, string>(); this.ModuleBankdict = new Dictionary <int, string>(); DesignInfo designInfo = this._ship.DesignInfo; if (designInfo.DesignSections[0].Modules.Any <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => { ModuleEnums.StationModuleType?stationModuleType = x.StationModuleType; if ((stationModuleType.GetValueOrDefault() != ModuleEnums.StationModuleType.Combat ? 0 : (stationModuleType.HasValue ? 1 : 0)) != 0) { return(!x.WeaponID.HasValue); } return(false); }))) { this.UpdateStationDesignInfo(designInfo); this._app.GameDatabase.UpdateDesign(designInfo); } this.WorkingDesign = new DesignInfo(this._ship.DesignInfo.PlayerID, this._ship.DesignInfo.Name, new string[1] { this._ship.DesignInfo.DesignSections[0].FilePath }); this.WorkingDesign.StationLevel = designInfo.StationLevel; this.WorkingDesign.StationType = designInfo.StationType; DesignLab.SummarizeDesign(this._app.AssetDatabase, this._app.GameDatabase, this.WorkingDesign); this.WorkingDesign.DesignSections[0].Modules = new List <DesignModuleInfo>(); this.WorkingDesign.DesignSections[0].WeaponBanks = new List <WeaponBankInfo>(); this.WorkingDesign.DesignSections[0].Techs = new List <int>(); this.WorkingDesign.DesignSections[0].ShipSectionAsset = designInfo.DesignSections[0].ShipSectionAsset; int num = 0; foreach (DesignModuleInfo module in designInfo.DesignSections[0].Modules) { DesignModuleInfo designModuleInfo = new DesignModuleInfo() { MountNodeName = module.MountNodeName, ModuleID = module.ModuleID, WeaponID = module.WeaponID, DesignID = module.DesignID, StationModuleType = module.StationModuleType, ID = num }; ++num; this.WorkingDesign.DesignSections[0].Modules.Add(designModuleInfo); } this.UpdateStationDesignInfo(this.WorkingDesign); this.App.UI.ClearItems(this.App.UI.Path(this.ID, RetrofitStationDialog.RetrofitBankListID)); DesignLab.SummarizeDesign(this._app.AssetDatabase, this._app.GameDatabase, this.WorkingDesign); foreach (DesignSectionInfo designSection in this.WorkingDesign.DesignSections) { foreach (DesignModuleInfo module in designSection.Modules) { if (module.WeaponID.HasValue) { this.App.UI.AddItem(this.App.UI.Path(this.ID, RetrofitStationDialog.RetrofitBankListID), "", module.ID, ""); string itemGlobalId = this.App.UI.GetItemGlobalID(this.App.UI.Path(this.ID, RetrofitStationDialog.RetrofitBankListID), "", module.ID, ""); string asset = this.App.GameDatabase.GetWeaponAsset(module.WeaponID.Value); LogicalWeapon logicalWeapon = this.App.AssetDatabase.Weapons.First <LogicalWeapon>((Func <LogicalWeapon, bool>)(x => x.FileName == asset)); this.App.UI.SetPropertyString(this.App.UI.Path(itemGlobalId, "wepimg"), "sprite", logicalWeapon.IconSpriteName); string index = "retrofitButton|" + module.ID.ToString(); this.App.UI.SetPropertyString(this.App.UI.Path(itemGlobalId, "btnImageButton"), "id", index); if (!this.BankDict.ContainsKey(index)) { this.BankDict[index] = module.ID; } if (!this.ItemIDDict.ContainsKey(index)) { this.ItemIDDict[index] = itemGlobalId; } } } } this._weaponSelector = new WeaponSelector(this.App.UI, "gameWeaponSelector", ""); this.App.UI.SetParent(this._weaponSelector.ID, this.UI.Path(this.ID, "gameWeaponSelectorbox")); this._weaponSelector.SelectedWeaponChanged += new WeaponSelectionChangedEventHandler(this.WeaponSelectorSelectedWeaponChanged); StationInfo stationInfo = this.App.GameDatabase.GetStationInfosByPlayerID(this._ship.DesignInfo.PlayerID).FirstOrDefault <StationInfo>((Func <StationInfo, bool>)(x => x.ShipID == this._ship.ID)); if (stationInfo != null) { StationUI.SyncStationDetailsWidget(this.App.Game, this.UI.Path(this.ID, "stationDetails"), stationInfo.OrbitalObjectID, true); } this.UpdateUICostETA(); this.App.UI.SetEnabled(this.UI.Path(this.ID, "okButton"), (this.DesignChanged() ? 1 : 0) != 0); }
public static CreateShipDummyParams ObtainShipDummyParams( App game, ShipInfo shipInfo) { IEnumerable <string> modules = game.AssetDatabase.Modules.Select <LogicalModule, string>((Func <LogicalModule, string>)(x => x.ModuleName)); IEnumerable <string> weapons = game.AssetDatabase.Weapons.Select <LogicalWeapon, string>((Func <LogicalWeapon, string>)(x => x.Name)); DesignInfo designInfo = shipInfo.DesignInfo; List <ShipSectionAsset> shipSectionAssetList = new List <ShipSectionAsset>(); List <ModuleAssignment> moduleAssignmentList = new List <ModuleAssignment>(); List <WeaponAssignment> weaponAssignmentList = new List <WeaponAssignment>(); foreach (DesignSectionInfo designSection in designInfo.DesignSections) { DesignSectionInfo sectionInfo = designSection; ShipSectionAsset shipSectionAsset = game.AssetDatabase.ShipSections.First <ShipSectionAsset>((Func <ShipSectionAsset, bool>)(x => x.FileName == sectionInfo.FilePath)); shipSectionAssetList.Add(shipSectionAsset); foreach (LogicalBank bank1 in shipSectionAsset.Banks) { LogicalBank bank = bank1; WeaponBankInfo weaponBankInfo = sectionInfo.WeaponBanks.FirstOrDefault <WeaponBankInfo>((Func <WeaponBankInfo, bool>)(x => x.BankGUID == bank.GUID)); bool flag = false; if (weaponBankInfo != null && weaponBankInfo.WeaponID.HasValue) { string weaponName = Path.GetFileNameWithoutExtension(game.GameDatabase.GetWeaponAsset(weaponBankInfo.WeaponID.Value)); WeaponAssignment weaponAssignment = new WeaponAssignment() { ModuleNode = "", Bank = bank, Weapon = game.AssetDatabase.Weapons.First <LogicalWeapon>((Func <LogicalWeapon, bool>)(weapon => string.Equals(weapon.WeaponName, weaponName, StringComparison.InvariantCultureIgnoreCase))), DesignID = weaponBankInfo == null || !weaponBankInfo.DesignID.HasValue ? 0 : weaponBankInfo.DesignID.Value, InitialTargetFilter = new int?(weaponBankInfo.FilterMode ?? 0), InitialFireMode = new int?(weaponBankInfo.FiringMode ?? 0) }; weaponAssignmentList.Add(weaponAssignment); flag = true; } if (!flag && !string.IsNullOrEmpty(bank.DefaultWeaponName)) { WeaponAssignment weaponAssignment = new WeaponAssignment() { ModuleNode = "", Bank = bank, Weapon = game.AssetDatabase.Weapons.First <LogicalWeapon>((Func <LogicalWeapon, bool>)(weapon => string.Equals(weapon.WeaponName, bank.DefaultWeaponName, StringComparison.InvariantCultureIgnoreCase))), DesignID = weaponBankInfo == null || !weaponBankInfo.DesignID.HasValue ? 0 : weaponBankInfo.DesignID.Value }; weaponAssignmentList.Add(weaponAssignment); } } foreach (LogicalModuleMount module in shipSectionAsset.Modules) { LogicalModuleMount sectionModule = module; DesignModuleInfo designModuleInfo = sectionInfo.Modules.FirstOrDefault <DesignModuleInfo>((Func <DesignModuleInfo, bool>)(x => x.MountNodeName == sectionModule.NodeName)); if (designModuleInfo != null) { string path = game.GameDatabase.GetModuleAsset(designModuleInfo.ModuleID); LogicalModule logicalModule = game.AssetDatabase.Modules.FirstOrDefault <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == path)); moduleAssignmentList.Add(new ModuleAssignment() { ModuleMount = sectionModule, Module = logicalModule }); if (designModuleInfo.WeaponID.HasValue) { string weaponPath = game.GameDatabase.GetWeaponAsset(designModuleInfo.WeaponID.Value); WeaponAssignment weaponAssignment = new WeaponAssignment() { ModuleNode = designModuleInfo.MountNodeName, Bank = logicalModule.Banks[0], Weapon = game.AssetDatabase.Weapons.First <LogicalWeapon>((Func <LogicalWeapon, bool>)(x => x.FileName == weaponPath)), DesignID = 0 }; weaponAssignmentList.Add(weaponAssignment); } } } } ShipSectionAsset missionSection = shipSectionAssetList.FirstOrDefault <ShipSectionAsset>((Func <ShipSectionAsset, bool>)(x => x.Type == ShipSectionType.Mission)); Faction faction = game.AssetDatabase.Factions.First <Faction>((Func <Faction, bool>)(x => missionSection.Faction == x.Name)); Player playerObject = game.Game.GetPlayerObject(designInfo.PlayerID); Subfaction subfaction = faction.Subfactions[Math.Min(playerObject.SubfactionIndex, faction.Subfactions.Length - 1)]; return(new CreateShipDummyParams() { ShipID = shipInfo.ID, PreferredMount = Ship.GetPreferredMount(game, playerObject, faction, shipSectionAssetList), ShipFaction = faction, Sections = (IEnumerable <ShipSectionAsset>)shipSectionAssetList.ToArray(), AssignedModules = (IEnumerable <ModuleAssignment>)moduleAssignmentList.ToArray(), PreferredModules = game.AssetDatabase.Modules.Where <LogicalModule>((Func <LogicalModule, bool>)(x => modules.Contains <string>(x.ModuleName))), AssignedWeapons = (IEnumerable <WeaponAssignment>)weaponAssignmentList.ToArray(), PreferredWeapons = game.AssetDatabase.Weapons.Where <LogicalWeapon>((Func <LogicalWeapon, bool>)(x => weapons.Contains <string>(x.Name))) }); }