public static string TestLootGen(int numItems, int tier, bool logstats, string displaytable) { string displayHeader = $"\n LootFactory Simulator - Items\n ---------------------\n"; Console.WriteLine($"Creating {numItems} items, that are in tier {tier}"); var ls = new LootStats(logstats); // Create a dummy treasure profile for passing in tier value TreasureDeath profile = new TreasureDeath { Tier = tier, LootQualityMod = 0 }; // Loop depending on how many items you are creating for (int i = 0; i < numItems; i++) { var testItem = LootGenerationFactory.CreateRandomLootObjects(profile, true); ls = LootStats(testItem, ls, logstats); } Console.WriteLine(displayHeader); Console.WriteLine(DisplayStats(ls, displaytable)); displayHeader += $" A total of {ls.TotalItems} items were generated in Tier {tier}. \n"; if (logstats) { string myfilename = string.Format("LootSim-{0:hh-mm-ss-tt_MM-dd-yyyy}.csv", DateTime.Now); File.WriteAllText(myfilename, displayHeader + DisplayStats(ls, displaytable)); } return(displayHeader); }
public static string TestLootGenMonster(uint deathTreasureDID, int numCorpses, bool logStats, string displayTable) { string displayHeader = $"\n LootFactory Simulator - Corpses\n ---------------------\n"; var corpseContainer = new List <WorldObject>(); var ls = new LootStats(logStats); Console.WriteLine($"Creating {numCorpses} corpses."); var deathTreasure = DatabaseManager.World.GetCachedDeathTreasure(deathTreasureDID); if (deathTreasure != null) { displayHeader += $" Loot profile {deathTreasure.Id} (a Tier {deathTreasure.Tier} profile) from DID {deathTreasureDID} was used for creating {numCorpses} corpses. \n"; } else { displayHeader += $" DID {deathTreasureDID} you specified is invalid. \n"; return(displayHeader); } for (int i = 0; i < numCorpses; i++) { if (deathTreasure != null) { corpseContainer = LootGenerationFactory.CreateRandomLootObjects_New(deathTreasure); if (corpseContainer.Count < ls.MinItemsCreated) { ls.MinItemsCreated = corpseContainer.Count; } if (corpseContainer.Count > ls.MaxItemsCreated) { ls.MaxItemsCreated = corpseContainer.Count; } foreach (var lootItem in corpseContainer) { ls.AddItem(lootItem, logStats); } } } var displayStats = BuildDisplayStats(ls, displayTable); Console.WriteLine(displayHeader); Console.WriteLine(displayStats); displayHeader += $" A total of {ls.TotalItems} unique items were generated. \n"; if (logStats) { string myfilename = $"LootSim_DeathTreasureDID-{deathTreasureDID}" + string.Format("_{0:hh-mm-ss-tt_MM-dd-yyyy}.csv", DateTime.Now); File.WriteAllText(myfilename, displayHeader + displayStats); } return(displayHeader); }
public static LootStats SetLootStatsDefaults(LootStats ls) { // Counters ls.ArmorCount = 0; ls.MeleeWeaponCount = 0; ls.CasterCount = 0; ls.MissileWeaponCount = 0; ls.JewelryCount = 0; ls.GemCount = 0; ls.ClothingCount = 0; ls.OtherCount = 0; ls.NullCount = 0; ls.ItemMaxMana = 0; ls.MinMana = 50000; ls.MaxMana = 0; ls.HasManaCount = 0; ls.TotalMaxMana = 0; ls.MinItemsCreated = 100; ls.MaxItemsCreated = 0; ls.ManaStone = 0; ls.Key = 0; ls.Food = 0; ls.Misc = 0; ls.SpellComponents = 0; ls.TotalItems = 0; ls.Scrolls = 0; ls.PetsCount = 0; ls.Spirits = 0; ls.Poitions = 0; ls.HealingKit = 0; ls.DinnerWare = 0; ls.LevelEightComp = 0; ls.PetsTotalRatings = 0; ls.PetRatingsEqualZero = 0; ls.PetRatingsEqualOne = 0; ls.PetRatingsOverTen = 0; ls.PetRatingsOverTwenty = 0; ls.PetRatingsOverThirty = 0; ls.PetRatingsOverForty = 0; ls.PetRatingsOverFifty = 0; ls.PetRatingsOverSixty = 0; ls.PetRatingsOverSeventy = 0; ls.PetRatingsOverEighty = 0; ls.PetRatingsOverNinety = 0; ls.PetRatingsOverHundred = 0; ls.MinAL = 1000; ls.MaxAL = 0; // Tables ls.MeleeWeapons = $"-----Melee Weapons----\n Skill \t\t\t Wield \t Damage \t MStrike \t Variance \t DefenseMod \t MagicDBonus \t MissileDBonus\t Value\t Type \n"; ls.MissileWeapons = $"-----Missile Weapons----\n Type \t Wield \t Modifier \tElementBonus \t DefenseMod \t MagicDBonus \t MissileDBonus\t Value\n"; ls.CasterWeapons = $"-----Caster Weapons----\n Wield \t ElementBonus \t DefenseMod \t MagicDBonus \t MissileDBonus \t Value \t MaxMana\n"; ls.Armor = $"-----Armor----\n AL \t Value \t Type\n"; ls.Pets = $"-----Pet Devices----\n Level \t Dmg \t DmgR \t Crit \t CritD \t CDR \t CritR \t Total \n"; return(ls); }
private static string BuildDisplayStats(LootStats ls, string displaytable) { string displayStats = ""; // Seeing if a table was specified to display // fixme switch (displaytable) { case "melee": displayStats += string.Join("\n", ls.MeleeWeapons) + $"\n"; break; case "missile": displayStats += string.Join("\n", ls.MissileWeapons) + $"\n"; break; case "caster": displayStats += string.Join("\n", ls.CasterWeapons) + $"\n"; break; case "jewelry": displayStats += string.Join("\n", ls.Jewelry) + $"\n"; break; case "armor": displayStats += string.Join("\n", ls.Armor) + $"\n"; break; case "cloak": displayStats += string.Join("\n", ls.Cloaks) + $"\n"; break; case "pet": displayStats += string.Join("\n", ls.Pets) + $"\n"; break; case "aetheria": displayStats += string.Join("\n", ls.Aetheria) + $"\n"; break; case "all": displayStats += string.Join("\n", ls.MeleeWeapons) + $"\n"; displayStats += string.Join("\n", ls.MissileWeapons) + $"\n"; displayStats += string.Join("\n", ls.CasterWeapons) + $"\n"; displayStats += string.Join("\n", ls.Jewelry) + $"\n"; displayStats += string.Join("\n", ls.Armor) + $"\n"; displayStats += string.Join("\n", ls.Cloaks) + $"\n"; displayStats += string.Join("\n", ls.Pets) + $"\n"; displayStats += string.Join("\n", ls.Aetheria) + $"\n"; break; default: displayStats += $"\n No Table(s) was selected to display, showing only general statistics"; break; } displayStats += ($" \n Treasure Items \n " + $"---- \n " + $"Armor={ls.ArmorCount} \n " + $"MeleeWeapon={ls.MeleeWeaponCount} \n " + $"Caster={ls.CasterCount} \n " + $"MissileWeapon={ls.MissileWeaponCount} \n " + $"Jewelry={ls.JewelryCount} \n " + $"Gem={ls.GemCount} \n " + $"Aetheria={ls.AetheriaCount} \n " + $"Clothing={ls.ClothingCount} \n " + $"Cloaks={ls.CloakCount} \n " + $"\n Generic Items \n " + $"---- \n " + $"Food={ls.Food} \n " + $"SpellComps={ls.SpellComponents} \n " + $"Keys={ls.Key} \n " + $"ManaStones={ls.ManaStone} \n " + $"Pets={ls.PetsCount} \n " + $"EncapSpirits={ls.Spirits} \n " + $"Scrolls={ls.Scrolls} \n " + $"Potions={ls.Potions} \n " + $"Healing Kits={ls.HealingKit} \n " + $"Level 8 Comps={ls.LevelEightComp} \n " + $"DinnerWare={ls.DinnerWare} \n " + $"Misc={ls.Misc} \n " + $"Other={ls.OtherCount} \n " + $"NullCount={ls.NullCount} \n " + $"Total Found={ls.ArmorCount + ls.MeleeWeaponCount + ls.CasterCount + ls.MissileWeaponCount + ls.JewelryCount + ls.GemCount + ls.ClothingCount + ls.Food + ls.SpellComponents + ls.Key + ls.ManaStone + ls.PetsCount + ls.Spirits + ls.Scrolls + ls.Potions + ls.LevelEightComp + ls.HealingKit + ls.DinnerWare + ls.Misc + ls.OtherCount + ls.NullCount} \n " + $"TotalGenerated={ls.TotalItems}\n"); displayStats += $"\n Drop Rates \n ----\n " + $"Armor= {ls.ArmorCount / ls.TotalItems * 100}% \n " + $"MeleeWeapon= {ls.MeleeWeaponCount / ls.TotalItems * 100}% \n " + $"Caster= {ls.CasterCount / ls.TotalItems * 100}% \n " + $"MissileWeapon= {ls.MissileWeaponCount / ls.TotalItems * 100}% \n " + $"Jewelry= {ls.JewelryCount / ls.TotalItems * 100}% \n " + $"Gem= {ls.GemCount / ls.TotalItems * 100}% \n " + $"Aetheria= {ls.AetheriaCount / ls.TotalItems * 100}% \n " + $"Clothing= {ls.ClothingCount / ls.TotalItems * 100}% \n " + $"Cloaks= {ls.CloakCount / ls.TotalItems * 100}% \n " + $"Food= {ls.Food / ls.TotalItems * 100}% \n " + $"SpellComps= {ls.SpellComponents / ls.TotalItems * 100}% \n " + $"Keys= {ls.Key / ls.TotalItems * 100}% \n " + $"Mana Stones= {ls.ManaStone / ls.TotalItems * 100}% \n " + $"Pets= {ls.PetsCount / ls.TotalItems * 100}% \n " + $"Encap. Spirits= {ls.Spirits / ls.TotalItems * 100}% \n " + $"Scrolls= {ls.Scrolls / ls.TotalItems * 100}% \n " + $"Potions= {ls.Potions / ls.TotalItems * 100}% \n " + $"Healing Kits= {ls.HealingKit / ls.TotalItems * 100}% \n " + $"Level 8 Comps= {ls.LevelEightComp / ls.TotalItems * 100}% \n " + $"DinnerWare= {ls.DinnerWare / ls.TotalItems * 100}% \n " + $"Misc= {ls.Misc / ls.TotalItems * 100}% \n " + $"Other={ls.OtherCount / ls.TotalItems * 100}% \n"; // Armor Level Stats displayStats += $"\n Armor Levels \n ----\n MinAL = {ls.MinAL}\t {ls.MinALItem}\n MaxAL = {ls.MaxAL}\t {ls.MaxALItem}\n"; // Pet Summons Stats displayStats += ($"\n Pets Ratings Stats \n ----\n " + $" 100+ = {ls.PetRatingsOverHundred} \n" + $" 90-99 = {ls.PetRatingsOverNinety} \n" + $" 80-89 = {ls.PetRatingsOverEighty} \n" + $" 70-79 = {ls.PetRatingsOverSeventy} \n" + $" 60-69 = {ls.PetRatingsOverSixty} \n" + $" 50-59 = {ls.PetRatingsOverFifty} \n" + $" 40-49 = {ls.PetRatingsOverForty} \n" + $" 30-39 = {ls.PetRatingsOverThirty} \n" + $" 20-29 = {ls.PetRatingsOverTwenty} \n" + $" 10-19 = {ls.PetRatingsOverTen} \n" + $" 1-9 = {ls.PetRatingsEqualOne} \n" + $" 0 = {ls.PetRatingsEqualZero} \n" + $" Total Pets Generated = {ls.PetsCount} \n"); // Jewelry displayStats += ($"\n Jewelry Counts Stats \n ----\n " + $"Necklace = {ls.JewelryNecklaceCount}\t Droprate = {ls.JewelryNecklaceCount / ls.JewelryCount * 100}%\n" + $" Bracelet = {ls.JewelryBraceletCount}\t Droprate = {ls.JewelryBraceletCount / ls.JewelryCount * 100}%\n" + $" Ring = {ls.JewelryRingCount}\t Droprate = {ls.JewelryRingCount / ls.JewelryCount * 100}%\n" + $" Trinket = {ls.JewelryTrinketCount}\t Droprate = {ls.JewelryTrinketCount / ls.JewelryCount * 100}%\n"); // Cantrip Counts displayStats += ($"\n Cantip Counts Stats \n ----\n" + //$" Minor = {ls.MinorCantripCount}\t Droprate = {ls.MinorCantripCount / ls.TotalItems * 100}%\n" + //$" Major = {ls.MajorCantripCount}\t Droprate = {ls.MajorCantripCount / ls.TotalItems * 100}%\n" + $" Epic = {ls.EpicCantripCount}\t Droprate = {ls.EpicCantripCount / ls.TotalItems * 100}%\n" + $" Legendary = {ls.LegendaryCantripCount}\t Droprate = {ls.LegendaryCantripCount / ls.TotalItems * 100}%\n"); if (ls.HasManaCount == 0) { } else { displayStats += $"\n Mana capacity across all items Min={ls.MinMana} Max={ls.MaxMana} Avg Mana={ls.TotalMaxMana / ls.HasManaCount}"; } if (ls.MinItemsCreated == 100) { } else { displayStats += $"\n Min Items on a corpse = {ls.MinItemsCreated}, Max Items on coprse = {ls.MaxItemsCreated} \n"; } return(displayStats); }
public static LootStats LootStats(WorldObject wo, LootStats ls, bool logstats) { // Weapon Properties double missileDefMod = 0.00f; double magicDefMod = 0.00f; double wield = 0.00f; int value = 0; ls.TotalItems++; // Loop depending on how many items you are creating for (int i = 0; i < 1; i++) { var testItem = wo; if (testItem == null) { ls.NullCount++; continue; } switch (testItem.ItemType) { case ItemType.None: break; case ItemType.MeleeWeapon: ls.MeleeWeaponCount++; bool cantrip = false; if (testItem.EpicCantrips.Count > 0) { cantrip = true; } if (testItem.LegendaryCantrips.Count > 0) { cantrip = true; } string strikeType = "N"; if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.WeaponSkill == Skill.TwoHandedCombat) { if (logstats) { ls.MeleeWeapons.Add($"{testItem.WeaponSkill},{wield},{testItem.Damage.Value},{strikeType},{testItem.DamageVariance.Value},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{cantrip},{value},{testItem.EncumbranceVal},{testItem.Name}"); } else { ls.MeleeWeapons.Add($"{testItem.WeaponSkill}\t {wield}\t {testItem.Damage.Value}\t\t {strikeType} \t\t {testItem.DamageVariance.Value}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {cantrip}\t{value}\t{testItem.EncumbranceVal} \t {testItem.Name}"); } } else { if ((testItem.W_AttackType & AttackType.TripleStrike) != 0) { strikeType = "3x"; } else if ((testItem.W_AttackType & AttackType.DoubleStrike) != 0) { strikeType = "2x"; } if (logstats) { ls.MeleeWeapons.Add($"{testItem.WeaponSkill},{wield},{testItem.Damage.Value},{strikeType},{testItem.DamageVariance.Value},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{cantrip},{value},{testItem.EncumbranceVal},{testItem.Name}"); } else { ls.MeleeWeapons.Add($" {testItem.WeaponSkill}\t\t {wield}\t {testItem.Damage.Value}\t\t {strikeType}\t\t {testItem.DamageVariance.Value}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {cantrip}\t{value}\t{testItem.EncumbranceVal} \t {testItem.Name}"); } } break; case ItemType.Armor: ls.ArmorCount++; string equipmentSet = "None "; cantrip = false; // float cantripSpells = 0; var epicCantripSpells = testItem.EpicCantrips.Keys; if (testItem.EpicCantrips.Count > 0) { cantrip = true; } if (testItem.LegendaryCantrips.Count > 0) { cantrip = true; } if (testItem.EquipmentSetId != null) { equipmentSet = testItem.EquipmentSetId.ToString(); } if (logstats) { ls.Armor.Add($"{testItem.ArmorLevel},{testItem.ItemDifficulty},{testItem.Value.Value},{testItem.EncumbranceVal},{testItem.EpicCantrips.Count},{testItem.LegendaryCantrips.Count},{equipmentSet},{testItem.Name}"); } else { ls.Armor.Add($" {testItem.ArmorLevel}\t{testItem.ItemDifficulty}\t{testItem.Value.Value}\t{testItem.EncumbranceVal}\t{testItem.EpicCantrips.Count}\t{testItem.LegendaryCantrips.Count}\t{equipmentSet}\t\t\t{testItem.Name}"); } if (testItem.Name.Contains("Sheild")) // typo? { break; } if (testItem.ArmorLevel > ls.MaxAL) { ls.MaxAL = testItem.ArmorLevel.Value; ls.MaxALItem = testItem.Name; } if (testItem.ArmorLevel < ls.MinAL) { ls.MinAL = testItem.ArmorLevel.Value; ls.MinALItem = testItem.Name; } break; case ItemType.Clothing: if (testItem.Name.Contains("Cloak")) { string cloakSet = "None "; if (testItem.EquipmentSetId != null) { cloakSet = testItem.EquipmentSetId.ToString(); } ls.CloakCount++; if (logstats) { ls.Cloaks.Add($"{testItem.ItemMaxLevel},{testItem.WieldDifficulty},{testItem.CloakWeaveProc.Value},{testItem.Value.Value},{cloakSet}"); } else { ls.Cloaks.Add($" {testItem.ItemMaxLevel}\t {testItem.WieldDifficulty}\t {testItem.CloakWeaveProc.Value}\t {testItem.Value.Value}\t {cloakSet}"); } } else { ls.ClothingCount++; } break; case ItemType.Jewelry: ls.JewelryCount++; string jewelrySlot = ""; switch (testItem.ValidLocations) { case EquipMask.NeckWear: ls.JewelryNecklaceCount++; jewelrySlot = "Neck"; break; case EquipMask.WristWear: ls.JewelryBraceletCount++; jewelrySlot = "Brace"; break; case EquipMask.FingerWear: ls.JewelryRingCount++; jewelrySlot = "Ring"; break; case EquipMask.TrinketOne: ls.JewelryTrinketCount++; jewelrySlot = "Trink"; break; default: // Console.WriteLine(testItem.Name); break; } if (logstats) { ls.Jewelry.Add($"{jewelrySlot},{testItem.ItemDifficulty},{testItem.Value}"); } else { ls.Jewelry.Add($" {jewelrySlot}\t {testItem.ItemDifficulty}\t {testItem.Value}"); } break; case ItemType.Creature: break; case ItemType.Food: ls.Food++; break; case ItemType.Money: break; case ItemType.Misc: string spirit = "Spirit"; string potionA = "Philtre"; string potionB = "Elixir"; string potionC = "Tonic"; string potionD = "Brew"; string potionE = "Potion"; string potionF = "Draught"; string potionG = "Tincture"; string healingKits = "Kit"; string spellcompGlyph = "Glyph"; string spellcompInk = "Ink"; string spellcompQuill = "Quill"; if (testItem.Name.Contains(spirit)) { ls.Spirits++; } else if (testItem is PetDevice petDevice) { ls.PetsCount++; int totalRatings = 0; int damage = 0; int damageResist = 0; int crit = 0; int critDamage = 0; int critDamageResist = 0; int critResist = 0; int petLevel = 0; if (petDevice.UseRequiresSkillLevel == 570) { petLevel = 200; } else if (petDevice.UseRequiresSkillLevel == 530) { petLevel = 180; } else if (petDevice.UseRequiresSkillLevel == 475) { petLevel = 150; } else if (petDevice.UseRequiresSkillLevel == 430) { petLevel = 125; } else if (petDevice.UseRequiresSkillLevel == 400) { petLevel = 100; } else if (petDevice.UseRequiresSkillLevel == 370) { petLevel = 80; } else if (petDevice.UseRequiresSkillLevel == 310) { petLevel = 50; } if (petDevice.GearDamage != null) { totalRatings += petDevice.GearDamage.Value; damage = petDevice.GearDamage.Value; } if (petDevice.GearDamageResist != null) { totalRatings += petDevice.GearDamageResist.Value; damageResist = petDevice.GearDamageResist.Value; } if (petDevice.GearCrit != null) { totalRatings += petDevice.GearCrit.Value; crit = petDevice.GearCrit.Value; } if (petDevice.GearCritDamage != null) { totalRatings += petDevice.GearCritDamage.Value; critDamage = petDevice.GearCritDamage.Value; } if (petDevice.GearCritDamageResist != null) { totalRatings += petDevice.GearCritDamageResist.Value; critDamageResist = petDevice.GearCritDamageResist.Value; } if (petDevice.GearCritResist != null) { totalRatings += petDevice.GearCritResist.Value; critResist = petDevice.GearCritResist.Value; } if (logstats) { ls.Pets.Add($"{petLevel},{damage},{damageResist},{crit},{critDamage},{critDamageResist},{critResist},{totalRatings}"); } else { ls.Pets.Add($" {petLevel}\t {damage}\t {damageResist}\t {crit}\t {critDamage}\t {critDamageResist}\t {critResist}\t {totalRatings}"); } if (totalRatings > 99) { ls.PetRatingsOverHundred++; } else if (totalRatings > 89) { ls.PetRatingsOverNinety++; } else if (totalRatings > 79) { ls.PetRatingsOverEighty++; } else if (totalRatings > 69) { ls.PetRatingsOverSeventy++; } else if (totalRatings > 59) { ls.PetRatingsOverSixty++; } else if (totalRatings > 49) { ls.PetRatingsOverFifty++; } else if (totalRatings > 39) { ls.PetRatingsOverForty++; } else if (totalRatings > 29) { ls.PetRatingsOverThirty++; } else if (totalRatings > 19) { ls.PetRatingsOverTwenty++; } else if (totalRatings > 9) { ls.PetRatingsOverTen++; } else if (totalRatings > 0) { ls.PetRatingsEqualOne++; } else if (totalRatings < 1) { ls.PetRatingsEqualZero++; } } else if (testItem.Name.Contains(potionA) || testItem.Name.Contains(potionB) || testItem.Name.Contains(potionC) || testItem.Name.Contains(potionD) || testItem.Name.Contains(potionE) || testItem.Name.Contains(potionF) || testItem.Name.Contains(potionG)) { ls.Potions++; } else if (testItem.Name.Contains(spellcompGlyph) || testItem.Name.Contains(spellcompInk) || testItem.Name.Contains(spellcompQuill)) { ls.LevelEightComp++; } else if (testItem.Name.Contains(healingKits)) { ls.HealingKit++; } else { // Console.WriteLine($"ItemType.Misc Name={testItem.Name}"); ls.Misc++; } break; case ItemType.MissileWeapon: double eleBonus = 0.00f; double damageMod = 0.00f; string missileType = "Other"; if (testItem.AmmoType != null) { switch (testItem.AmmoType.Value) { case AmmoType.None: break; case AmmoType.Arrow: missileType = "Bow"; ls.MissileWeaponCount++; break; case AmmoType.Bolt: missileType = "X Bow"; ls.MissileWeaponCount++; break; case AmmoType.Atlatl: missileType = "Thrown"; ls.MissileWeaponCount++; break; case AmmoType.ArrowCrystal: break; case AmmoType.BoltCrystal: break; case AmmoType.AtlatlCrystal: break; case AmmoType.ArrowChorizite: break; case AmmoType.BoltChorizite: break; case AmmoType.AtlatlChorizite: break; default: break; } } if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.ElementalDamageBonus != null) { eleBonus = testItem.ElementalDamageBonus.Value; } if (testItem.DamageMod != null) { damageMod = testItem.DamageMod.Value; } if (missileType == "Other") { ls.DinnerWare++; } else { if (logstats) { ls.MissileWeapons.Add($"{missileType},{wield},{damageMod},{eleBonus},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value},{testItem.EncumbranceVal}"); } else { ls.MissileWeapons.Add($"{missileType}\t {wield}\t {damageMod}\t\t{eleBonus}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\t {testItem.EncumbranceVal}"); } } break; case ItemType.Container: break; case ItemType.Useless: // Console.WriteLine($"ItemType.Useless Name={testItem.Name}"); break; case ItemType.Gem: string aetheriaColor = "None"; if (Aetheria.IsAetheria(testItem.WeenieClassId)) { ls.AetheriaCount++; if (testItem.WieldDifficulty == 75) { aetheriaColor = "Blue "; } else if (testItem.WieldDifficulty == 150) { aetheriaColor = "Yellow"; } else if (testItem.WieldDifficulty == 225) { aetheriaColor = "Red "; } if (logstats) { ls.Aetheria.Add($"{aetheriaColor},{testItem.ItemMaxLevel}"); } else { ls.Aetheria.Add($" {aetheriaColor}\t {testItem.ItemMaxLevel}"); } } else { ls.GemCount++; } break; case ItemType.SpellComponents: ls.SpellComponents++; break; case ItemType.Writable: string scrolls = "Scroll"; if (testItem.Name.Contains(scrolls)) { ls.Scrolls++; } else { Console.WriteLine($"ItemType.Writeable Name={testItem.Name}"); } break; case ItemType.Key: ls.Key++; break; case ItemType.Caster: ls.CasterCount++; double eleMod = 0.00f; if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.ElementalDamageMod != null) { eleMod = testItem.ElementalDamageMod.Value; } if (testItem.ItemMaxMana != null) { ls.ItemMaxMana = testItem.ItemMaxMana.Value; } if (logstats) { ls.CasterWeapons.Add($"{wield},{eleMod},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value},{testItem.EncumbranceVal},{ls.ItemMaxMana}"); } else { ls.CasterWeapons.Add($" {wield}\t {eleMod}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\t {testItem.EncumbranceVal} \t {ls.ItemMaxMana}"); } break; case ItemType.Portal: break; case ItemType.Lockable: break; case ItemType.PromissoryNote: break; case ItemType.ManaStone: ls.ManaStone++; break; case ItemType.Service: break; case ItemType.MagicWieldable: break; case ItemType.CraftCookingBase: ls.OtherCount++; break; case ItemType.CraftAlchemyBase: ls.OtherCount++; break; case ItemType.CraftFletchingBase: ls.OtherCount++; break; case ItemType.CraftAlchemyIntermediate: ls.OtherCount++; break; case ItemType.CraftFletchingIntermediate: ls.OtherCount++; break; case ItemType.LifeStone: break; case ItemType.TinkeringTool: ls.OtherCount++; break; case ItemType.TinkeringMaterial: ls.OtherCount++; break; case ItemType.Gameboard: break; case ItemType.PortalMagicTarget: break; case ItemType.LockableMagicTarget: break; case ItemType.Vestements: break; case ItemType.Weapon: break; case ItemType.WeaponOrCaster: break; case ItemType.Item: Console.WriteLine($"ItemType.item Name={testItem.Name}"); break; case ItemType.RedirectableItemEnchantmentTarget: break; case ItemType.ItemEnchantableTarget: break; case ItemType.VendorShopKeep: break; case ItemType.VendorGrocer: break; default: ls.OtherCount++; break; } /*switch (testItem.ItemType) * { * case ItemType.Armor: * break; * case ItemType.MeleeWeapon: * break; * case ItemType.Caster: * break; * case ItemType.MissileWeapon: * break; * case ItemType.Jewelry: * break; * case ItemType.Gem: * break; * case ItemType.Clothing: * break; * default: * break; * }*/ if (testItem.ItemMaxMana != null) { if (testItem.ItemMaxMana > ls.MaxMana) { ls.MaxMana = testItem.ItemMaxMana.Value; } if (testItem.ItemMaxMana < ls.MinMana) { ls.MinMana = testItem.ItemMaxMana.Value; } ls.HasManaCount++; ls.TotalMaxMana += testItem.ItemMaxMana.Value; } if (testItem.Name == null) { Console.WriteLine("*Name is Null*"); continue; } if (testItem.EpicCantrips.Count > 0) { ls.EpicCantripCount++; } if (testItem.LegendaryCantrips.Count > 0) { ls.LegendaryCantripCount++; } } return(ls); }
public static LootStats LootStats(WorldObject wo, LootStats ls, bool logstats) { // Weapon Properties double missileDefMod = 0.00f; double magicDefMod = 0.00f; double wield = 0.00f; int value = 0; ls.TotalItems++; // Loop depending on how many items you are creating for (int i = 0; i < 1; i++) { var testItem = wo; if (testItem is null) { ls.NullCount++; continue; } string itemType = testItem.ItemType.ToString(); if (itemType == null) { ls.NullCount++; continue; } switch (testItem.ItemType) { case ItemType.None: break; case ItemType.MeleeWeapon: ls.MeleeWeaponCount++; string strikeType = "N"; if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.WeaponSkill == Skill.TwoHandedCombat) { if (logstats == true) { ls.MeleeWeapons += $"{testItem.WeaponSkill},{wield},{testItem.Damage.Value},{strikeType},{testItem.DamageVariance.Value},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value},{testItem.Name}\n"; } else { ls.MeleeWeapons += $" {testItem.WeaponSkill}\t {wield}\t {testItem.Damage.Value}\t\t {strikeType} \t\t {testItem.DamageVariance.Value}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\t {testItem.Name}\n"; } } else { AttackType attackType = testItem.W_AttackType; string at = attackType.ToString("F"); if (at.Contains("DoubleSlash") || at.Contains("DoubleThrust")) { strikeType = "2x"; } else if (at.Contains("TripleSlash") || at.Contains("TripleThrust")) { strikeType = "3x"; } if (logstats == true) { ls.MeleeWeapons += $"{testItem.WeaponSkill},{wield},{testItem.Damage.Value},{strikeType},{testItem.DamageVariance.Value},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value},{testItem.Name}\n"; } else { ls.MeleeWeapons += $" {testItem.WeaponSkill}\t\t {wield}\t {testItem.Damage.Value}\t\t {strikeType}\t\t {testItem.DamageVariance.Value}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\t {testItem.Name}\n"; } } break; case ItemType.Armor: ls.ArmorCount++; string equipmentSet = "None"; if (testItem.EquipmentSetId != null) { equipmentSet = Enum.GetName(typeof(EquipmentSet), testItem.EquipmentSetId); } if (logstats == true) { ls.Armor += $"{testItem.ArmorLevel},{equipmentSet},{testItem.Value.Value},{testItem.Name}\n"; } else { ls.Armor += $" {testItem.ArmorLevel}\t {equipmentSet}\t\t {testItem.Value.Value} \t {testItem.Name}\n"; } if (testItem.Name.Contains("Sheild")) { break; } if (testItem.ArmorLevel > ls.MaxAL) { ls.MaxAL = testItem.ArmorLevel.Value; ls.MaxALItem = testItem.Name; } if (testItem.ArmorLevel < ls.MinAL) { ls.MinAL = testItem.ArmorLevel.Value; ls.MinALItem = testItem.Name; } break; case ItemType.Clothing: ls.ClothingCount++; break; case ItemType.Jewelry: ls.JewelryCount++; break; case ItemType.Creature: break; case ItemType.Food: ls.Food++; break; case ItemType.Money: break; case ItemType.Misc: string spirit = "Spirit"; string potionA = "Philtre"; string potionB = "Elixir"; string potionC = "Tonic"; string potionD = "Brew"; string potionE = "Potion"; string potionF = "Draught"; string potionG = "Tincture"; string healingKits = "Kit"; string spellcompGlyph = "Glyph"; string spellcompInk = "Ink"; string spellcompQuill = "Quill"; if (testItem.Name.Contains(spirit)) { ls.Spirits++; } else if (testItem is PetDevice petDevice) { ls.PetsCount++; int totalRatings = 0; int damage = 0; int damageResist = 0; int crit = 0; int critDamage = 0; int critDamageResist = 0; int critResist = 0; int petLevel = 0; if (petDevice.UseRequiresSkillLevel == 570) { petLevel = 200; } else if (petDevice.UseRequiresSkillLevel == 530) { petLevel = 180; } else if (petDevice.UseRequiresSkillLevel == 475) { petLevel = 150; } else if (petDevice.UseRequiresSkillLevel == 430) { petLevel = 125; } else if (petDevice.UseRequiresSkillLevel == 400) { petLevel = 100; } else if (petDevice.UseRequiresSkillLevel == 370) { petLevel = 80; } else if (petDevice.UseRequiresSkillLevel == 310 || petDevice.UseRequiresSkillLevel == 320) { petLevel = 50; } if (petLevel == 0) { Console.WriteLine("Skill= " + petDevice.UseRequiresSkillLevel); } if (petDevice.GearDamage != null) { totalRatings += petDevice.GearDamage.Value; damage = petDevice.GearDamage.Value; } if (petDevice.GearDamageResist != null) { totalRatings += petDevice.GearDamageResist.Value; damageResist = petDevice.GearDamageResist.Value; } if (petDevice.GearCrit != null) { totalRatings += petDevice.GearCrit.Value; crit = petDevice.GearCrit.Value; } if (petDevice.GearCritDamage != null) { totalRatings += petDevice.GearCritDamage.Value; critDamage = petDevice.GearCritDamage.Value; } if (petDevice.GearCritDamageResist != null) { totalRatings += petDevice.GearCritDamageResist.Value; critDamageResist = petDevice.GearCritDamageResist.Value; } if (petDevice.GearCritResist != null) { totalRatings += petDevice.GearCritResist.Value; critResist = petDevice.GearCritResist.Value; } if (logstats == true) { ls.Pets += $"{petLevel},{damage},{damageResist},{crit},{critDamage},{critDamageResist},{critResist},{totalRatings}\n"; } else { ls.Pets += $" {petLevel}\t {damage}\t {damageResist}\t {crit}\t {critDamage}\t {critDamageResist}\t {critResist}\t {totalRatings}\n"; } if (totalRatings > 99) { ls.PetRatingsOverHundred++; } else if (totalRatings > 89) { ls.PetRatingsOverNinety++; } else if (totalRatings > 79) { ls.PetRatingsOverEighty++; } else if (totalRatings > 69) { ls.PetRatingsOverSeventy++; } else if (totalRatings > 59) { ls.PetRatingsOverSixty++; } else if (totalRatings > 49) { ls.PetRatingsOverFifty++; } else if (totalRatings > 39) { ls.PetRatingsOverForty++; } else if (totalRatings > 29) { ls.PetRatingsOverThirty++; } else if (totalRatings > 19) { ls.PetRatingsOverTwenty++; } else if (totalRatings > 9) { ls.PetRatingsOverTen++; } else if (totalRatings > 0) { ls.PetRatingsEqualOne++; } else if (totalRatings < 1) { ls.PetRatingsEqualZero++; } } else if (testItem.Name.Contains(potionA) || testItem.Name.Contains(potionB) || testItem.Name.Contains(potionC) || testItem.Name.Contains(potionD) || testItem.Name.Contains(potionE) || testItem.Name.Contains(potionF) || testItem.Name.Contains(potionG)) { ls.Poitions++; } else if (testItem.Name.Contains(spellcompGlyph) || testItem.Name.Contains(spellcompInk) || testItem.Name.Contains(spellcompQuill)) { ls.LevelEightComp++; } else if (testItem.Name.Contains(healingKits)) { ls.HealingKit++; } else { Console.WriteLine($"ItemType.Misc Name={testItem.Name}"); ls.Misc++; } break; case ItemType.MissileWeapon: double eleBonus = 0.00f; double damageMod = 0.00f; string missileType = "Other"; if (testItem.AmmoType != null) { switch (testItem.AmmoType.Value) { case ACE.Entity.Enum.AmmoType.None: break; case ACE.Entity.Enum.AmmoType.Arrow: missileType = " Bow"; ls.MissileWeaponCount++; break; case ACE.Entity.Enum.AmmoType.Bolt: missileType = " X Bow"; ls.MissileWeaponCount++; break; case ACE.Entity.Enum.AmmoType.Atlatl: missileType = " Thrown"; ls.MissileWeaponCount++; break; case ACE.Entity.Enum.AmmoType.ArrowCrystal: break; case ACE.Entity.Enum.AmmoType.BoltCrystal: break; case ACE.Entity.Enum.AmmoType.AtlatlCrystal: break; case ACE.Entity.Enum.AmmoType.ArrowChorizite: break; case ACE.Entity.Enum.AmmoType.BoltChorizite: break; case ACE.Entity.Enum.AmmoType.AtlatlChorizite: break; default: break; } } if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.ElementalDamageBonus != null) { eleBonus = testItem.ElementalDamageBonus.Value; } if (testItem.DamageMod != null) { damageMod = testItem.DamageMod.Value; } if (missileType == "Other") { ls.DinnerWare++; } else { if (logstats == true) { ls.MissileWeapons += $"{missileType},{wield},{Math.Round(damageMod, 2)},{eleBonus},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value}\n"; } else { ls.MissileWeapons += $" {missileType}\t {wield}\t {Math.Round(damageMod, 2)}\t\t{eleBonus}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\n"; } } break; case ItemType.Container: break; case ItemType.Useless: Console.WriteLine($"ItemType.Useless Name={testItem.Name}"); break; case ItemType.Gem: string aetheriaColor = "None"; if (testItem.Name.Contains("Aetheria")) { ls.AetheriaCount++; if (testItem.WieldDifficulty == 75) { aetheriaColor = "Blue "; } else if (testItem.WieldDifficulty == 150) { aetheriaColor = "Yellow"; } else if (testItem.WieldDifficulty == 225) { aetheriaColor = "Red "; } if (logstats == true) { ls.Aetheria += $"{aetheriaColor},{testItem.ItemMaxLevel}\n"; } else { ls.Aetheria += $" {aetheriaColor}\t {testItem.ItemMaxLevel}\n"; } } else { ls.GemCount++; } break; case ItemType.SpellComponents: ls.SpellComponents++; break; case ItemType.Writable: string scrolls = "Scroll"; if (testItem.Name.Contains(scrolls)) { ls.Scrolls++; } else { Console.WriteLine($"ItemType.Writeable Name={testItem.Name}"); } break; case ItemType.Key: ls.Key++; break; case ItemType.Caster: ls.CasterCount++; double eleMod = 0.00f; if (testItem.WeaponMagicDefense != null) { magicDefMod = testItem.WeaponMagicDefense.Value; } if (testItem.Value != null) { value = testItem.Value.Value; } if (testItem.WeaponMissileDefense != null) { missileDefMod = testItem.WeaponMissileDefense.Value; } if (testItem.WieldDifficulty != null) { wield = testItem.WieldDifficulty.Value; } if (testItem.ElementalDamageMod != null) { eleMod = testItem.ElementalDamageMod.Value; } if (testItem.ItemMaxMana != null) { ls.ItemMaxMana = testItem.ItemMaxMana.Value; } if (logstats == true) { ls.CasterWeapons += $"{wield},{eleMod},{testItem.WeaponDefense.Value},{magicDefMod},{missileDefMod},{value},{ls.ItemMaxMana}\n"; } else { ls.CasterWeapons += $" {wield}\t {eleMod}\t\t {testItem.WeaponDefense.Value}\t\t {magicDefMod}\t\t {missileDefMod}\t\t {value}\t {ls.ItemMaxMana}\n"; } break; case ItemType.Portal: break; case ItemType.Lockable: break; case ItemType.PromissoryNote: break; case ItemType.ManaStone: ls.ManaStone++; break; case ItemType.Service: break; case ItemType.MagicWieldable: break; case ItemType.CraftCookingBase: ls.OtherCount++; break; case ItemType.CraftAlchemyBase: ls.OtherCount++; break; case ItemType.CraftFletchingBase: ls.OtherCount++; break; case ItemType.CraftAlchemyIntermediate: ls.OtherCount++; break; case ItemType.CraftFletchingIntermediate: ls.OtherCount++; break; case ItemType.LifeStone: break; case ItemType.TinkeringTool: ls.OtherCount++; break; case ItemType.TinkeringMaterial: ls.OtherCount++; break; case ItemType.Gameboard: break; case ItemType.PortalMagicTarget: break; case ItemType.LockableMagicTarget: break; case ItemType.Vestements: break; case ItemType.Weapon: break; case ItemType.WeaponOrCaster: break; case ItemType.Item: Console.WriteLine($"ItemType.item Name={testItem.Name}"); break; case ItemType.RedirectableItemEnchantmentTarget: break; case ItemType.ItemEnchantableTarget: break; case ItemType.VendorShopKeep: break; case ItemType.VendorGrocer: break; default: ls.OtherCount++; break; } switch (itemType) { case "Armor": break; case "MeleeWeapon": break; case "Caster": break; case "MissileWeapon": break; case "Jewelry": break; case "Gem": break; case "Clothing": break; default: break; } if (testItem.ItemMaxMana != null) { if (testItem.ItemMaxMana > ls.MaxMana) { ls.MaxMana = testItem.ItemMaxMana.Value; } if (testItem.ItemMaxMana < ls.MinMana) { ls.MinMana = testItem.ItemMaxMana.Value; } ls.HasManaCount++; ls.TotalMaxMana += testItem.ItemMaxMana.Value; } if (testItem == null) { Console.WriteLine("*Name is Null*"); continue; } else { } } return(ls); }
public static LootStats SetLootStatsDefaults(LootStats ls, bool logstats) { // Counters ls.ArmorCount = 0; ls.MeleeWeaponCount = 0; ls.CasterCount = 0; ls.MissileWeaponCount = 0; ls.JewelryCount = 0; ls.JewelryNecklaceCount = 0; ls.JewelryBraceletCount = 0; ls.JewelryRingCount = 0; ls.JewelryTrinketCount = 0; ls.GemCount = 0; ls.AetheriaCount = 0; ls.ClothingCount = 0; ls.OtherCount = 0; ls.NullCount = 0; ls.ItemMaxMana = 0; ls.MinMana = 50000; ls.MaxMana = 0; ls.HasManaCount = 0; ls.TotalMaxMana = 0; ls.MinItemsCreated = 100; ls.MaxItemsCreated = 0; ls.ManaStone = 0; ls.Key = 0; ls.Food = 0; ls.Misc = 0; ls.SpellComponents = 0; ls.TotalItems = 0; ls.Scrolls = 0; ls.PetsCount = 0; ls.Spirits = 0; ls.Poitions = 0; ls.HealingKit = 0; ls.DinnerWare = 0; ls.LevelEightComp = 0; ls.PetsTotalRatings = 0; ls.PetRatingsEqualZero = 0; ls.PetRatingsEqualOne = 0; ls.PetRatingsOverTen = 0; ls.PetRatingsOverTwenty = 0; ls.PetRatingsOverThirty = 0; ls.PetRatingsOverForty = 0; ls.PetRatingsOverFifty = 0; ls.PetRatingsOverSixty = 0; ls.PetRatingsOverSeventy = 0; ls.PetRatingsOverEighty = 0; ls.PetRatingsOverNinety = 0; ls.PetRatingsOverHundred = 0; ls.MinAL = 1000; ls.MaxAL = 0; // Tables if (logstats == true) { ls.MeleeWeapons = $"-----Melee Weapons----\nSkill,Wield,Damage,MStrike,Variance,DefenseMod,MagicDBonus,MissileDBonus,Value,Burden,Type\n"; } else { ls.MeleeWeapons = $"-----Melee Weapons----\n Skill \t\t\t Wield \t Damage \t MStrike \t Variance \t DefenseMod \t MagicDBonus \t MissileDBonus\t Value\t Burden\t Type \n"; } if (logstats == true) { ls.MissileWeapons = $"-----Missile Weapons----\nType,Wield,Modifier,ElementBonus,DefenseMod,MagicDBonus,MissileDBonus,Value,Burden\n"; } else { ls.MissileWeapons = $"-----Missile Weapons----\n Type \t Wield \t Modifier \tElementBonus \t DefenseMod \t MagicDBonus \t MissileDBonus\t Value\t Burden\n"; } if (logstats == true) { ls.CasterWeapons = $"-----Caster Weapons----\nWield,ElementBonus,DefenseMod,MagicDBonus,MissileDBonus,Value,MaxMana,Burden\n"; } else { ls.CasterWeapons = $"-----Caster Weapons----\n Wield \t ElementBonus \t DefenseMod \t MagicDBonus \t MissileDBonus \t Value\t Burden\t MaxMana\n"; } if (logstats == true) { ls.Armor = $"-----Armor----\nAL,EquipmentSet,Value,Burden,Type\n"; } else { ls.Armor = $"-----Armor----\n AL \t Equipment Set \t\t\t Value\t Burden\t Type\n"; } if (logstats == true) { ls.Pets = $"-----Pet Devices----\nLevel,Dmg,DmgR,Crit,CritD,CDR,CritR,Total\n"; } else { ls.Pets = $"-----Pet Devices----\n Level \t Dmg \t DmgR \t Crit \t CritD \t CDR \t CritR \t Total \n"; } if (logstats == true) { ls.Aetheria = $"-----Aetheria----\nColor,Level"; } else { ls.Aetheria = $"-----Aetheria----\n Color \t Level\n"; } return(ls); }