Example #1
0
        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);
        }
Example #2
0
        private static DumperDataEntry FillAmmo(AmmunitionBoxDef d)
        {
            DumperDataEntry r = FillComp(d, 1);

            r.DataTxt[4] = d.AmmoID + "/" + d.Capacity;
            r.DataCsv   += ";" + d.AmmoID + ";" + d.Capacity;
            return(r);
        }
Example #3
0
        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);
        }
Example #4
0
        private static DumperDataEntry GetAmmoDesc()
        {
            DumperDataEntry r = GetCompDesc(1);

            r.DataTxt[0] = "AmmoBox";
            r.DataTxt[4] = "AmmoType/Capacity";
            r.DataCsv   += ";AmmoType;Capacity";
            return(r);
        }
Example #5
0
        private static DumperDataEntry GetCompDesc(int size = 0, int off = 0)
        {
            DumperDataEntry r = new DumperDataEntry();

            r.DataTxt          = new string[4 + size];
            r.DataTxt[0]       = "Upgrade";
            r.DataTxt[1 + off] = "Tonns/Size/Explodes";
            r.DataTxt[2 + off] = "ID";
            r.DataTxt[3 + off] = "Boni";
            r.Sort             = "";
            r.DataCsv          = "PartName;Tonns;Size;Explodes;ID;Boni";
            return(r);
        }
Example #6
0
        public static void DumpMechs(SimGameState s, StreamWriter w, StreamWriter csv)
        {
            List <DumperDataEntry> mechs = new List <DumperDataEntry>();
            Dictionary <string, DumperDataEntry> blacklist = new Dictionary <string, DumperDataEntry>();

            mechs.Add(GetMechDesc());
            foreach (KeyValuePair <string, MechDef> kv in s.DataManager.MechDefs)
            {
                int     part      = s.GetItemCount(kv.Key, "MECHPART", SimGameState.ItemCountType.UNDAMAGED_ONLY);
                int     mechstor  = s.GetItemCount(kv.Value.Chassis.Description.Id, kv.Value.GetType(), SimGameState.ItemCountType.UNDAMAGED_ONLY);
                int     active    = 0;
                int     sma_parts = -1;
                MechDef d         = kv.Value;
                foreach (KeyValuePair <int, MechDef> a in s.ActiveMechs)
                {
                    if (kv.Value.ChassisID == a.Value.ChassisID)
                    {
                        active++;
                        //d = a.Value;
                    }
                }
                if (Del_SMA_GetNumPartsForAssembly != null)
                {
                    sma_parts = Del_SMA_GetNumPartsForAssembly(s, kv.Value);
                }
                DumperDataEntry e = FillMech(d, part, s.Constants.Story.DefaultMechPartMax, mechstor, active, sma_parts);
                if (kv.Value.MechTags.Contains("BLACKLISTED"))
                {
                    blacklist.Add(kv.Key, e);
                }
                else
                {
                    mechs.Add(e);
                }
            }
            foreach (KeyValuePair <string, ItemCollectionDef> kv in s.DataManager.ItemCollectionDefs)
            {
                foreach (ItemCollectionDef.Entry e in kv.Value.Entries)
                {
                    if (e.Type == ShopItemType.Mech || e.Type == ShopItemType.MechPart)
                    {
                        if (blacklist.ContainsKey(e.ID))
                        {
                            mechs.Add(blacklist[e.ID]);
                            blacklist.Remove(e.ID);
                        }
                    }
                }
            }
            WriteDataEntries(mechs, w, csv);
        }
Example #7
0
        private static DumperDataEntry GetWeaponDesc()
        {
            DumperDataEntry r = GetCompDesc(4, 4);

            r.DataTxt[0] = "Weapon";
            r.DataTxt[1] = "Dmg/Struct/Inst/Heat*numShots";
            r.DataTxt[2] = "minRange/optRange/maxRange";
            r.DataTxt[3] = "AccAdd/CritChanceMult/IndirectFire/Refire";
            r.DataTxt[4] = "Ammo/Internal";
            r.DataCsv   += ";Dmg;Struct;Inst;Heat;numShots";
            r.DataCsv   += ";minRange;optRange;maxRange";
            r.DataCsv   += ";AccAdd;CritChanceMult;IndirectFire;Refire";
            r.DataCsv   += ";Ammo;Internal";
            return(r);
        }
Example #8
0
        private static DumperDataEntry GetWeaponDesc()
        {
            DumperDataEntry r = GetCompDesc(5, 5);

            r.DataTxt[0] = "Weapon";
            r.DataTxt[1] = "Dmg/Struct/Inst/Heat*numShots";
            r.DataTxt[2] = "minRange/optRange/maxRange";
            r.DataTxt[3] = "AccAdd/CritChanceMult/IndirectFire/Refire";
            r.DataTxt[4] = "Ammo/Internal";
            r.DataTxt[5] = "effTonn/effTonnDHS/rating/ratingDHS";
            r.DataCsv   += ";Dmg;Struct;Inst;Heat;numShots";
            r.DataCsv   += ";minRange;optRange;maxRange";
            r.DataCsv   += ";AccAdd;CritChanceMult;IndirectFire;Refire";
            r.DataCsv   += ";Ammo;Internal";
            r.DataCsv   += ";effectiveDamage;accuracyFactor;rangeFactor;ammoTonnage10;effectiveTonnage;effectiveTonnageDHS;rating;ratingDHS";
            return(r);
        }
Example #9
0
        private static DumperDataEntry FillComp(MechComponentDef d, int size = 0, int off = 0)
        {
            DumperDataEntry r = new DumperDataEntry();

            r.DataTxt          = new string[4 + size];
            r.DataTxt[0]       = TryLoc(d.Description.UIName) + " " + TryLoc(d.Description.Manufacturer) + " " + TryLoc(d.Description.Model);
            r.DataTxt[1 + off] = d.Tonnage + "/" + d.InventorySize + "/" + d.CanExplode;
            r.DataTxt[2 + off] = d.Description.Id + "";
            r.DataTxt[3 + off] = d.BonusValueA + "";
            if (!string.IsNullOrEmpty(d.BonusValueB))
            {
                r.DataTxt[3 + off] += "/" + d.BonusValueB;
            }
            r.Sort    = d.Description.Id + "";
            r.DataCsv = r.DataTxt[0] + ";" + d.Tonnage + ";" + d.InventorySize + ";" + d.CanExplode + ";" + d.Description.Id + ";\"" + r.DataTxt[3 + off] + "\"";
            return(r);
        }
Example #10
0
        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);
        }
Example #11
0
        private static DumperDataEntry GetMechDesc()
        {
            DumperDataEntry r = new DumperDataEntry();

            r.DataTxt = new string[]
            {
                "Mech",
                "Role",
                "b/e/m/s",
                "useTon/heatsink/armorT/maxarmorT/useTonnsWithMArmor",
                "walkDist/maxJJ",
                "m DMG/m INS/DFA DMG/ DFA INS",
                "active/storage/parts/partsneeded",
                "chassisID/mechID",
                "extras/Equip/FixedEquip",
            };
            r.Sort    = "";
            r.DataCsv = "Tonnage;Mech;Variant;Role;b;e;m;s;usetonns;heatsinks;carmorT;marmorT;useTonnsWithMArmor;walkspeed;jumpjets;melee dmg;melee istab;dfa dmg;dfa istab;active;storage;parts;partsneeded;chassisID;mechID;extras;equipment;fixed equipment";
            return(r);
        }
Example #12
0
        private static DumperDataEntry FillMech(MechDef d, int parts, int maxparts, int storage, int active, int sma_parts)
        {
            DumperDataEntry r = new DumperDataEntry();

            r.DataTxt    = new string[9];
            r.DataTxt[0] = ((storage + active) > 0 ? "+" : "-") + d.Chassis.Tonnage + "t " + TryLoc(d.Chassis.Description.UIName) + " " + TryLoc(d.Chassis.VariantName);
            r.DataTxt[1] = TryLoc(d.Chassis.StockRole) + "";
            int bal = 0;
            int en  = 0;
            int mis = 0;
            int sup = 0;

            foreach (ChassisLocations c in AllChassisLocs)
            {
                MechStatisticsRules.GetHardpointCountForLocation(d, c, ref bal, ref en, ref mis, ref sup);
            }
            r.DataTxt[2] = bal + "/" + en + "/" + mis + "/" + sup;
            r.DataTxt[3] = (d.Chassis.Tonnage - d.Chassis.InitialTonnage) + "/" + d.Chassis.Heatsinks;
            float carmor = 0;
            float marmor = 0;

            foreach (ChassisLocations c in AllChassisLocs)
            {
                carmor += d.GetLocationLoadoutDef(c).AssignedArmor;
                marmor += d.GetChassisLocationDef(c).MaxArmor;
                if (d.GetChassisLocationDef(c).MaxRearArmor > 0)
                {
                    carmor += d.GetLocationLoadoutDef(c).AssignedRearArmor;
                    marmor += d.GetChassisLocationDef(c).MaxRearArmor;
                }
            }
            float div = UnityGameInstance.BattleTechGame.MechStatisticsConstants.ARMOR_PER_TENTH_TON * 10f;

            if (d.Chassis.ChassisTags.Contains("chassis_ferro"))
            {
                if (d.Chassis.ChassisTags.Contains("chassis_clan"))
                {
                    div = UnityGameInstance.BattleTechGame.MechStatisticsConstants.ARMOR_PER_TENTH_TON * 12f;
                }
                else
                {
                    div = UnityGameInstance.BattleTechGame.MechStatisticsConstants.ARMOR_PER_TENTH_TON * 11.2f;
                }
            }
            carmor       /= div;
            marmor       /= div;
            carmor        = Mathf.Round(carmor * 10) / 10;
            marmor        = Mathf.Round(marmor * 10) / 10;
            r.DataTxt[3] += "/" + carmor + "/" + marmor + "/" + (d.Chassis.Tonnage - d.Chassis.InitialTonnage - marmor);
            if (d.Chassis.MovementCapDef == null)
            {
                d.Chassis.RefreshMovementCaps();
                if (d.Chassis.MovementCapDef == null)
                {
                    r.DataTxt[4] = "??/" + d.Chassis.MaxJumpjets;
                }
                else
                {
                    r.DataTxt[4] = d.Chassis.MovementCapDef.MaxWalkDistance + "/" + d.Chassis.MaxJumpjets;
                }
            }
            else
            {
                r.DataTxt[4] = d.Chassis.MovementCapDef.MaxWalkDistance + "/" + d.Chassis.MaxJumpjets;
            }
            r.DataTxt[5] = d.Chassis.MeleeDamage + "/" + d.Chassis.MeleeInstability + "/" + d.Chassis.DFADamage + "/" + d.Chassis.DFAInstability;
            r.DataTxt[6] = active + "/" + storage + "/" + parts;
            if (sma_parts >= 0)
            {
                r.DataTxt[6] += "(" + sma_parts + ")";
            }
            r.DataTxt[6] += "/" + maxparts;
            r.DataTxt[7]  = d.Chassis.Description.Id + "/" + d.Description.Id;
            Dictionary <string, int> eq  = new Dictionary <string, int>();
            Dictionary <string, int> feq = new Dictionary <string, int>();

            foreach (MechComponentRef c in d.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 (c.IsFixed)
                {
                    if (feq.ContainsKey(key))
                    {
                        feq[key]++;
                    }
                    else
                    {
                        feq.Add(key, 1);
                    }
                }
                else
                {
                    if (eq.ContainsKey(key))
                    {
                        eq[key]++;
                    }
                    else
                    {
                        eq.Add(key, 1);
                    }
                }
            }
            string txteq  = "";
            string txtfeq = "";

            foreach (string key in eq.Keys.OrderBy((k) => k))
            {
                if (!string.IsNullOrEmpty(txteq))
                {
                    txteq += ",";
                }
                txteq += key + ":" + eq[key];
            }
            foreach (string key in feq.Keys.OrderBy((k) => k))
            {
                if (!string.IsNullOrEmpty(txtfeq))
                {
                    txtfeq += ",";
                }
                txtfeq += key + ":" + feq[key];
            }
            string txtext = "";

            foreach (string ex in ExtrasToNote)
            {
                if (d.Chassis.ChassisTags.Contains(ex))
                {
                    if (!string.IsNullOrEmpty(txtext))
                    {
                        txtext += ",";
                    }
                    txtext += ex;
                }
            }
            r.DataTxt[8] = txtext + "/" + txteq + "/" + txtfeq;
            r.Sort       = string.Format("{0,3}_{1}", new object[] { d.Chassis.Tonnage, d.Chassis.VariantName });
            r.DataCsv    = d.Chassis.Tonnage + ";" + d.Chassis.Description.UIName + ";" + d.Chassis.VariantName + ";" + d.Chassis.StockRole;
            r.DataCsv   += ";" + bal + ";" + en + ";" + mis + ";" + sup;
            r.DataCsv   += ";" + (d.Chassis.Tonnage - d.Chassis.InitialTonnage) + ";" + d.Chassis.Heatsinks + ";" + carmor + ";" + marmor + ";" + (d.Chassis.Tonnage - d.Chassis.InitialTonnage - marmor);
            r.DataCsv   += ";" + (d.Chassis.MovementCapDef == null ? -1f : d.Chassis.MovementCapDef.MaxWalkDistance) + ";" + d.Chassis.MaxJumpjets;
            r.DataCsv   += ";" + d.Chassis.MeleeDamage + ";" + d.Chassis.MeleeInstability + ";" + d.Chassis.DFADamage + ";" + d.Chassis.DFAInstability;
            r.DataCsv   += ";" + active + ";" + storage + ";" + parts;
            if (sma_parts >= 0)
            {
                r.DataCsv += "(" + sma_parts + ")";
            }
            r.DataCsv += ";" + maxparts;
            r.DataCsv += ";" + d.Chassis.Description.Id + ";" + d.Description.Id;
            r.DataCsv += ";" + txtext + ";" + txteq + ";" + txtfeq;
            return(r);
        }