public static void Postfix( MechLabLocationWidget __instance, MechComponentRef cRef, WeaponDef wDef, bool isOriginalLocation, bool canBeAdded, ref LocationDef ___chassisLocationDef) { try { if (cRef == null || wDef == null || ___chassisLocationDef.Hardpoints == null) { return; } var hasOmni = ___chassisLocationDef.Hardpoints.Any(x => x.Omni); if (hasOmni) { __instance.ShowHighlightFrame(true, (!isOriginalLocation) ? ((!canBeAdded) ? UIColor.GoldHalf : UIColor.Gold) : UIColor.Blue); } } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static void Postfix(WeaponDef __instance) { try { var changes = Control.settings.AutoFixWeaponDefSlotsChanges; if (changes == null) { return; } if (lookupDictionary == null) { lookupDictionary = changes.ToDictionary(x => x.Type, x => x.Change); } if (!lookupDictionary.TryGetValue(__instance.WeaponSubType, out var change)) { return; } var newValue = change.Change(__instance.InventorySize); if (!newValue.HasValue) { return; } Traverse.Create(__instance).Property("InventorySize").SetValue(newValue); } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static Weapon Load(int modelId) { WeaponDef def = Item.GetDefinition <WeaponDef> (modelId); if (null == def) { return(null); } var geoms = Geometry.Load(def.ModelName, def.TextureDictionaryName); if (null == geoms) { return(null); } if (null == weaponsContainer) { weaponsContainer = new GameObject("Weapons"); // weaponsContainer.SetActive (false); } GameObject go = new GameObject(def.ModelName); go.transform.SetParent(weaponsContainer.transform); geoms.AttachFrames(go.transform, MaterialFlags.Default); Weapon w = new Weapon(); w.definition = def; w.m_gameObject = go; return(w); }
public static void Postfix(WeaponDef __instance) { try { var changes = AutoFixerFeature.settings.AutoFixWeaponDefSlotsChanges; if (changes == null) { return; } if (AutoFixUtils.IsIgnoredByTags(__instance.ComponentTags, AutoFixerFeature.settings.WeaponDefTagsSkip)) { return; } foreach (var change in changes.Where(x => x.Type == __instance.WeaponSubType).Select(x => x.Change)) { var newValue = change.Change(__instance.InventorySize); if (!newValue.HasValue) { return; } Traverse.Create(__instance).Property("InventorySize").SetValue(newValue); } } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static bool isWeaponCanShootNoAmmo(WeaponDef weaponDef) { ExtWeaponDef extWeapon = CustomAmmoCategories.getExtWeaponDef(weaponDef.Description.Id); if (weaponDef.AmmoCategory == AmmoCategory.NotSet) { return(true); } ; if (extWeapon.Modes.Count <= 0) { return(false); } ; foreach (var mode in extWeapon.Modes) { if (mode.Value.AmmoCategory == null) { continue; } ; if (mode.Value.AmmoCategory.BaseCategory == AmmoCategory.NotSet) { return(true); } ; } return(false); }
public int GetAttack()//攻击力等于自身的伤害加武器伤害 { WeaponItem equipItem = Info.Items.GetEquipWeapon(); if (equipItem == null) { return(0); } WeaponDef itemDef = ResourceManager.GetWeaponDef(equipItem.ID); var att = GetAttribute(); int itemType = (int)itemDef.WeaponType; int power = itemDef.Power; if (itemType >= 0 && itemType < 4) { return(att.PhysicalPower + power); } if (itemType >= 4 && itemType < 8) { return(att.MagicalPower + power); } if (itemType >= 8) { return(att.PhysicalPower + att.MagicalPower + power); } return(0); }
public static void Postfix(WeaponDef __instance) { EffectData[] effects = __instance.statusEffects; List <EffectData> tmpList = new List <EffectData>(); foreach (EffectData effect in effects) { if ((effect.Description != null)) { if ((effect.Description.Id != null) && (effect.Description.Name != null)) { tmpList.Add(effect); continue; } } CustomAmmoCategoriesLog.Log.LogWrite("!Warning! null status effect detected at weapon " + __instance.Description.Id + ".\n"); } if (tmpList.Count != effects.Length) { CustomAmmoCategoriesLog.Log.LogWrite("!Warning! null status effects detected at weapon " + __instance.Description.Id + ".Removing\n"); PropertyInfo property = typeof(WeaponDef).GetProperty("statusEffects"); property.DeclaringType.GetProperty("statusEffects"); property.GetSetMethod(true).Invoke(__instance, new object[1] { (object)tmpList.ToArray() }); } }
public static SalvageDef CreateComponent(SimGameConstants sc, Contract c, MechComponentDef mc) { SalvageDef salvageDef = new SalvageDef(); if (mc.ComponentType == ComponentType.Weapon) { WeaponDef weaponDef = mc as WeaponDef; salvageDef.MechComponentDef = weaponDef; salvageDef.Description = new DescriptionDef(weaponDef.Description); salvageDef.RewardID = c.GenerateRewardUID(); salvageDef.Type = SalvageDef.SalvageType.COMPONENT; salvageDef.ComponentType = weaponDef.ComponentType; salvageDef.Damaged = false; salvageDef.Weight = sc.Salvage.DefaultWeaponWeight; salvageDef.Count = 1; return(salvageDef); } else { salvageDef.MechComponentDef = mc; salvageDef.Description = new DescriptionDef(mc.Description); salvageDef.RewardID = c.GenerateRewardUID(); salvageDef.Type = SalvageDef.SalvageType.COMPONENT; salvageDef.ComponentType = mc.ComponentType; salvageDef.Damaged = false; salvageDef.Weight = sc.Salvage.DefaultComponentWeight; salvageDef.Count = 1; return(salvageDef); } }
private static DumperDataEntry FillWeapon(WeaponDef d) { DumperDataEntry r = FillComp(d, 4, 4); r.DataTxt[1] = d.Damage + "/" + d.StructureDamage + "/" + d.Instability + "/" + d.HeatDamage + "*" + d.ShotsWhenFired; r.DataTxt[2] = d.MinRange + "/" + d.MediumRange + "/" + d.MaxRange; if (d.ComponentTags.Contains("range_extreme")) { r.DataTxt[2] = "Extreme (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_very-long")) { r.DataTxt[2] = "Very Long (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_long")) { r.DataTxt[2] = "Long (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_standard")) { r.DataTxt[2] = "Standard (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_close")) { r.DataTxt[2] = "Close (" + r.DataTxt[2] + ")"; } r.DataTxt[3] = d.AccuracyModifier + "/" + d.CriticalChanceMultiplier + "/" + d.IndirectFireCapable + "/" + d.RefireModifier; r.DataTxt[4] = d.AmmoCategoryToAmmoId + "/" + d.StartingAmmoCapacity; r.DataCsv += ";" + d.Damage + ";" + d.StructureDamage + ";" + d.Instability + ";" + d.HeatDamage + ";" + d.ShotsWhenFired; r.DataCsv += ";" + d.MinRange + ";" + d.MediumRange + ";" + d.MaxRange; r.DataCsv += ";" + d.AccuracyModifier + ";" + d.CriticalChanceMultiplier + ";" + d.IndirectFireCapable + ";" + d.RefireModifier; r.DataCsv += ";" + d.AmmoCategoryToAmmoId + ";" + d.StartingAmmoCapacity; return(r); }
public static void Postfix(WeaponDef __instance) { try { if (!Control.settings.AutoFixWeaponDefSlots) { return; } if (!Control.settings.AutoFixWeaponDefSlotsChanges.TryGetValue(__instance.WeaponSubType.ToString(), out var change)) { return; } var newValue = change.Change(__instance.InventorySize); if (!newValue.HasValue) { return; } Traverse.Create(__instance).Property("InventorySize").SetValue(newValue); } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static void Postfix(WeaponDef __instance) { try { var def = __instance; if (def.ComponentTags.IgnoreAutofix()) { return; } var changes = AutoFixerFeature.settings.AutoFixWeaponDefSlotsChanges; if (changes == null) { return; } foreach (var change in changes.Where(x => x.Type == def.WeaponSubType)) { if (change.SlotChange != null) { var newValue = change.SlotChange.Change(def.InventorySize); if (!newValue.HasValue) { return; } Traverse.Create(def).Property("InventorySize").SetValue(newValue.Value); } if (change.TonnageChange != null) { var newValue = change.TonnageChange.Change(def.Tonnage); if (!newValue.HasValue) { return; } Traverse.Create(def).Property("Tonnage").SetValue(newValue.Value); } } if (AutoFixerFeature.settings.AutoFixWeaponDefSplitting && !def.Is <DynamicSlots.DynamicSlots>()) { var threshold = AutoFixerFeature.settings.AutoFixWeaponDefSplittingLargerThan; if (def.InventorySize > threshold) { var fixedSize = AutoFixerFeature.settings.AutoFixWeaponDefSplittingFixedSize; var dynamicSlotTemplate = AutoFixerFeature.settings.AutoFixWeaponDefSplittingDynamicSlotTemplate; var slot = dynamicSlotTemplate.ReflectionCopy(); slot.ReservedSlots = def.InventorySize - fixedSize; def.AddComponent(slot); Traverse.Create(def).Property("InventorySize").SetValue(fixedSize); } } } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static Vector3 Get(WeaponDef def) { return(Get( identifier: def.Description.Id, tags: def.ComponentTags, type: typeof(Weapon), prefab: def.PrefabIdentifier)); }
private static DumperDataEntry FillWeapon(WeaponDef d, Dictionary <string, float> ammoShotsPerTonn) { DumperDataEntry r = FillComp(d, 5, 5); r.DataTxt[1] = d.Damage + "/" + d.StructureDamage + "/" + d.Instability + "/" + d.HeatDamage + "*" + d.ShotsWhenFired; r.DataTxt[2] = d.MinRange + "/" + d.MediumRange + "/" + d.MaxRange; if (d.ComponentTags.Contains("range_extreme")) { r.DataTxt[2] = "Extreme (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_very-long")) { r.DataTxt[2] = "Very Long (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_long")) { r.DataTxt[2] = "Long (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_standard")) { r.DataTxt[2] = "Standard (" + r.DataTxt[2] + ")"; } else if (d.ComponentTags.Contains("range_close")) { r.DataTxt[2] = "Close (" + r.DataTxt[2] + ")"; } r.DataTxt[3] = d.AccuracyModifier + "/" + d.CriticalChanceMultiplier + "/" + d.IndirectFireCapable + "/" + d.RefireModifier; r.DataTxt[4] = d.AmmoCategoryToAmmoId + "/" + d.StartingAmmoCapacity; float efftonn = d.Tonnage; float ammotonns = 0; if (!string.IsNullOrEmpty(d.AmmoCategoryToAmmoId) && ammoShotsPerTonn.ContainsKey(d.AmmoCategoryToAmmoId)) // add ammo tonnage { float shots = 10 * d.ShotsWhenFired - d.StartingAmmoCapacity; if (shots > 0) { ammotonns += shots / ammoShotsPerTonn[d.AmmoCategoryToAmmoId]; efftonn += ammotonns; } } float efftonndhs = efftonn; efftonn += d.HeatGenerated / 3; // heat w standard heatsinks efftonndhs += d.HeatGenerated / 6; // heat w double heatsinks float effdmg = (d.Damage + d.StructureDamage + d.HeatDamage + d.Instability) * d.ShotsWhenFired; float accmod = 0.5f + (-d.AccuracyModifier * 0.05f); float rmod = GetWeaponRangeFactor(d); float rating = Mathf.Round(effdmg * accmod * rmod / efftonn * 100) / 100; float ratingdhs = Mathf.Round(effdmg * accmod * rmod / efftonndhs * 100) / 100; r.DataTxt[5] = efftonn + "/" + efftonndhs + "/" + rating + "/" + ratingdhs; r.DataCsv += ";" + d.Damage + ";" + d.StructureDamage + ";" + d.Instability + ";" + d.HeatDamage + ";" + d.ShotsWhenFired; r.DataCsv += ";" + d.MinRange + ";" + d.MediumRange + ";" + d.MaxRange; r.DataCsv += ";" + d.AccuracyModifier + ";" + d.CriticalChanceMultiplier + ";" + d.IndirectFireCapable + ";" + d.RefireModifier; r.DataCsv += ";" + d.AmmoCategoryToAmmoId + ";" + d.StartingAmmoCapacity; r.DataCsv += ";" + effdmg + ";" + accmod + ";" + rmod + ";" + ammotonns + ";" + efftonn + ";" + efftonndhs + ";" + rating + ";" + ratingdhs; return(r); }
public HardpointInfo(MechComponentDef def) { NumBallistic = 0; NumEnergy = 0; NumMissile = 0; NumSmall = 0; NumMissileTubes = 0; NumEnergyLarge = 0; NumJumpJets = 0; if (def.ComponentType == ComponentType.JumpJet) { ++NumJumpJets; } else { WeaponDef weaponDef = def as WeaponDef; if (!(weaponDef is null)) { switch (weaponDef.Category) { case WeaponCategory.Ballistic: NumBallistic++; break; case WeaponCategory.Energy: NumEnergy++; if (weaponDef.Tonnage >= 3) { ++NumEnergyLarge; } break; case WeaponCategory.Missile: NumMissileTubes += weaponDef.ShotsWhenFired; NumMissile++; break; case WeaponCategory.AntiPersonnel: NumSmall++; break; case WeaponCategory.NotSet: break; case WeaponCategory.AMS: break; case WeaponCategory.Melee: break; default: throw new ArgumentOutOfRangeException(); } } } }
public InvWeapDisc( Spatial launchNode, WeaponDef weaponDef, ProjectileDef primaryDef, ProjectileDef secondaryDef, PhysicsBody ignoreBody) : base(launchNode, weaponDef, primaryDef, secondaryDef, ignoreBody) { }
public void ShowTip(int index) { WeaponDef def = ResourceManager.GetWeaponDef(weaponItems[currentSelectIndex].ID); string content = def.GetWeaponTypeName() + " " + def.GetWeaponLevelName() + " " + "威力" + " " + def.Power + " " + "命中" + " " + def.Hit + " " + "必杀" + " " + def.Crit + " " + "重量" + " " + def.Weight + " " + "射程" + " " + def.RangeType.SelectRange.x + "-" + def.RangeType.SelectRange.y + "\n" + def.CommonProperty.Description; Debug.Log(content); //ItemTipControl.Show(Input.mousePosition, content); }
public InvWeapShotgun( Spatial launchNode, WeaponDef weaponDef, ProjectileDef primaryDef, ProjectileDef secondaryDef, PhysicsBody ignoreBody) : base(launchNode, weaponDef, primaryDef, secondaryDef, ignoreBody) { _roundsLoaded = weaponDef.magazineSize; }
private ListElementControllerCompare(ListElementController_BASE_NotListView item) { salvageDef = item.salvageDef; componentDef = item.componentDef; ammoBoxDef = item.ammoBoxDef; weaponDef = item.weaponDef; mechDef = item.mechDef; chassisDef = item.chassisDef; shopDefItem = item.shopDefItem; }
public static Weapon Load(int modelId) { WeaponDef def = Item.GetDefinition <WeaponDef> (modelId); if (null == def) { return(null); } WeaponData weaponData = WeaponData.LoadedWeaponsData.FirstOrDefault(wd => wd.modelId1 == def.Id); if (null == weaponData) { return(null); } var geoms = Geometry.Load(def.ModelName, def.TextureDictionaryName); if (null == geoms) { return(null); } if (null == s_weaponsContainer) { s_weaponsContainer = new GameObject("Weapons"); // weaponsContainer.SetActive (false); } GameObject go = new GameObject(def.ModelName); go.transform.SetParent(s_weaponsContainer.transform); geoms.AttachFrames(go.transform, MaterialFlags.Default); Weapon weapon = AddWeaponComponent(go, weaponData); weapon.definition = def; weapon.data = weaponData; // cache gun aiming offset if (weapon.data.gunData != null) { weapon.gunAimingOffset = weapon.data.gunData.aimingOffset; } // load hud texture try { weapon.HudTexture = TextureDictionary.Load(def.TextureDictionaryName).GetDiffuse(def.TextureDictionaryName + "icon").Texture; } catch { Debug.LogErrorFormat("Failed to load hud icon for weapon: model {0}, txd {1}", def.ModelName, def.TextureDictionaryName); } return(weapon); }
private static float GetWeaponRangeFactor(WeaponDef d) { float one = 375; // l laser, 1 float s = 90f; // s laser, 0.75 float r = (d.MediumRange - d.MinRange) + (d.MaxRange - d.MediumRange) / 2; // rating = del * range + b; float del = (1 - 0.75f) / (one - s); float b = 1 - (del * one); return(del * r + b); }
public void OnEnable() { wea = target as WeaponDef; if (wea.DedicatedCharacter == null) { wea.DedicatedCharacter = new System.Collections.Generic.List <int>(); } dedicatedCharacterCount = wea.DedicatedCharacter.Count; dedicatedJobCount = wea.DedicatedJob.Count; careerEffectCount = wea.CareerEffect.Count; }
internal WeaponDefFirepowerStatistics(MechDef mechDef, WeaponDef weaponDef, float damage, float instability, float accuracy) { this.weaponDef = weaponDef; this.mechDef = mechDef; ShotWhenFired = GetShotsWhenFired(weaponDef.ShotsWhenFired); Damage = GetDamagePerShot(damage) * ShotWhenFired; HeatDamage = GetHeatDamage(weaponDef.HeatDamage) * ShotWhenFired; StructureDamage = GetStructureDamage(weaponDef.StructureDamage) * ShotWhenFired; Instability = GetInstability(instability) * ShotWhenFired; Accuracy = GetAccuracyModifier(accuracy); }
/// <summary> /// 初始化控件中武器的信息显示 /// </summary> /// <param name="index"></param> /// <param name="Weapon"></param> public void InitButton(int index, WeaponItem Weapon) { WeaponDef def = Weapon.GetDefinition(); Elements[index].Show(index, def.Icon, def.CommonProperty.Name, def.IsInifiniteUsage() ? " -- " : Weapon.Usage + "/" + def.UseNumber, true); Elements[index].RegisterClickEvent(() => { AddWeaponToWarehouseAction(Weapon); WeaponItems.RemoveAt(index); Hide(); }); }
public static void TryFixProp(string id, WeaponDef def, string propName, Func <WeaponDef, bool> checker, object value) { PropertyInfo prop = typeof(WeaponDef).GetProperty(propName); if (prop != null && checker.Invoke(def)) { prop.SetValue(def, value, null); Info(id + " " + propName + " corrected."); } else { Info(id + " " + propName + " seems to be already fixed."); } }
public static WeaponDef CreateWeapon() { int count = ScriptableObjectUtility.GetFoldFileCount(DIRECTORY_PATH); WeaponDef wea = ScriptableObjectUtility.CreateAsset <WeaponDef>( count.ToString(), DIRECTORY_PATH, true ); wea.CommonProperty.ID = count; wea.CommonProperty.Name = "青铜剑"; return(wea); }
public static bool isWeaponCanUseAmmo(WeaponDef weaponDef, AmmunitionDef ammoDef) { ExtAmmunitionDef extAmmo = CustomAmmoCategories.findExtAmmo(ammoDef.Description.Id); CustomAmmoCategory ammoCategory = extAmmo.AmmoCategory; if (ammoCategory.BaseCategory == AmmoCategory.NotSet) { ammoCategory = CustomAmmoCategories.find(ammoDef.Category.ToString()); } ; if (ammoCategory.BaseCategory == AmmoCategory.NotSet) { return(false); } ; ExtWeaponDef extWeapon = CustomAmmoCategories.getExtWeaponDef(weaponDef.Description.Id); if (extWeapon.AmmoCategory.BaseCategory != AmmoCategory.NotSet) { if (extWeapon.AmmoCategory.Index == ammoCategory.Index) { return(true); } ; } else if (weaponDef.AmmoCategory != AmmoCategory.NotSet) { CustomAmmoCategory weaponAmmoCategory = CustomAmmoCategories.find(weaponDef.AmmoCategory.ToString()); if ((weaponAmmoCategory.BaseCategory != AmmoCategory.NotSet) && (weaponAmmoCategory.Index == ammoCategory.Index)) { return(true); } } foreach (var mode in extWeapon.Modes) { if (mode.Value.AmmoCategory == null) { continue; } ; if ((mode.Value.AmmoCategory.BaseCategory != AmmoCategory.NotSet) && (mode.Value.AmmoCategory.Index == ammoCategory.Index)) { return(true); } ; } return(false); }
public static WeaponDef UpgradeWeapons(Contract contract, MechComponentDef def) { var rand = new Random(); var sc = UnityGameInstance.BattleTechGame.Simulation.Constants; var num = rand.NextDouble(); float num1 = ((float)contract.Override.finalDifficulty + Core.Settings.EliteRareWeaponChance) / Core.Settings.WeaponChanceDivisor; float num2 = ((float)contract.Override.finalDifficulty + Core.Settings.VeryRareWeaponChance) / Core.Settings.WeaponChanceDivisor; float num3 = ((float)contract.Override.finalDifficulty + Core.Settings.RareWeaponChance) / Core.Settings.WeaponChanceDivisor; float[] array = null; Logger.LogDebug("Rarity Roll For Weapon: " + num.ToString()); Logger.LogDebug(" " + num1 + " Needed for Elite" + num2 + " Needed for Very Rare; " + num3 + " Needed for Rare"); if (num < num1) { Logger.LogDebug("Very Rare Upgrade."); array = Core.Settings.EliteRareWeaponLevel; } else if (num < num2) { Logger.LogDebug("Very Rare Upgrade."); array = Core.Settings.VeryRareWeaponLevel; } else if (num < num3) { Logger.LogDebug("Rare Upgrade."); array = Core.Settings.RareWeaponLevel; } WeaponDef weaponDef = def as WeaponDef; if (weaponDef.WeaponSubType == WeaponSubType.NotSet || weaponDef.ComponentTags.Contains("BLACKLISTED")) { return(weaponDef); } if (array != null) { List <WeaponDef_MDD> weaponsByTypeAndRarityAndOwnership = MetadataDatabase.Instance.GetWeaponsByTypeAndRarityAndOwnership(weaponDef.WeaponSubType, array); if (weaponsByTypeAndRarityAndOwnership != null && weaponsByTypeAndRarityAndOwnership.Count > 0) { weaponsByTypeAndRarityAndOwnership.Shuffle <WeaponDef_MDD>(); WeaponDef_MDD weaponDef_MDD = weaponsByTypeAndRarityAndOwnership[0]; var DataManager = (DataManager)Traverse.Create(contract).Field("dataManager").GetValue(); weaponDef = DataManager.WeaponDefs.Get(weaponDef_MDD.WeaponDefID); } } return(weaponDef); }
private static float SyncDamage(this WeaponDef weapon, DamageKeywordDef damageType, Func <float, float> handler) { lock ( weapon ) { if (weapon == null) { throw new ArgumentNullException(nameof(weapon)); } if (damageType == null) { throw new ArgumentNullException(nameof(damageType)); } var list = weapon.DamagePayload.DamageKeywords; var pair = list.FirstOrDefault(e => e.DamageKeywordDef == damageType); var orig = pair?.Value ?? 0; if (handler == null) { return(orig); } var value = handler(orig); if (value == orig) { return(orig); } object[] logArg = new object[] { weapon.name, damageType.name, orig, value }; if (value > 0) { if (pair == null) { ZyMod.ApiLog(TraceEventType.Start, "Adding {1} {3} to {0}", logArg); list.Add(pair = new DamageKeywordPair { DamageKeywordDef = damageType, Value = value }); } else { ZyMod.ApiLog(TraceEventType.Start, "Update {0} {1} {2} to {3}", logArg); pair.Value = value; } } else if (pair != null) { ZyMod.ApiLog(TraceEventType.Start, "Removing {1} {2} from {0}", logArg); list.Remove(pair); } return(orig); } }
public static void Postfix(WeaponDef __instance) { try { var def = __instance; var changes = AutoFixerFeature.settings.AutoFixWeaponDefSlotsChanges; if (changes == null) { return; } if (def.ComponentTags.IgnoreAutofix()) { return; } foreach (var change in changes.Where(x => x.Type == def.WeaponSubType)) { if (change.SlotChange != null) { var newValue = change.SlotChange.Change(def.InventorySize); if (!newValue.HasValue) { return; } Traverse.Create(def).Property("InventorySize").SetValue(newValue); } if (change.TonnageChange != null) { var newValue = change.TonnageChange.Change(def.Tonnage); if (!newValue.HasValue) { return; } Traverse.Create(def).Property("Tonnage").SetValue(newValue); } } } catch (Exception e) { Control.mod.Logger.LogError(e); } }
private static DumperDataEntry FillVehicle(VehicleDef v) { DumperDataEntry d = new DumperDataEntry(); d.DataTxt = new string[3]; d.Sort = $"{v.Chassis.Tonnage,3}_{TryLoc(v.Description.Name)}"; d.DataTxt[0] = v.Chassis.Tonnage + "t " + v.Description.Name; d.DataTxt[1] = v.Chassis.MovementCapDef.MaxWalkDistance + ""; Dictionary <string, int> eq = new Dictionary <string, int>(); foreach (VehicleComponentRef c in v.Inventory) { if (c.ComponentDefType == ComponentType.Weapon) { WeaponDef wep = c.Def as WeaponDef; if (wep != null && wep.WeaponCategoryValue.IsMelee || wep.WeaponSubType == WeaponSubType.AIImaginary || wep.WeaponEffectID.Contains("WeaponEffect-Artillery")) { continue; } } string key = c.Def.Description.Id; if (eq.ContainsKey(key)) { eq[key]++; } else { eq.Add(key, 1); } } string txteq = ""; foreach (string key in eq.Keys.OrderBy((k) => k)) { if (!string.IsNullOrEmpty(txteq)) { txteq += ","; } txteq += key + ":" + eq[key]; } d.DataTxt[2] = txteq; d.DataCsv = v.Chassis.Tonnage + ";" + TryLoc(v.Description.Name) + ";" + v.Chassis.MovementCapDef.MaxWalkDistance + ";" + v.Description.Id + ";" + v.Chassis.Description.Id + ";" + txteq; return(d); }