Skip to content

Commit

Permalink
The War Within updates
Browse files Browse the repository at this point in the history
- Updated to use TWW simc data
- Updated broken tests
- Fixed a newly introduced bug with double and float parsing
- Fixed a rounding error with item stats that was producing off-by-one errors
  • Loading branch information
Niphyr committed Aug 6, 2024
1 parent 771bbeb commit 44daae6
Show file tree
Hide file tree
Showing 9 changed files with 192 additions and 160 deletions.
2 changes: 1 addition & 1 deletion SimcProfileParser.Tests/DataSync/CacheServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public async Task CS_Downloads_File()
ParsedFileType = SimcParsedFileType.CombatRatingMultipliers,
RawFiles = new Dictionary<string, string>()
{
{ "ScaleData.raw", "https://raw.githubusercontent.com/simulationcraft/simc/dragonflight/engine/dbc/generated/sc_scale_data.inc" }
{ "ScaleData.raw", "https://raw.githubusercontent.com/simulationcraft/simc/thewarwithin/engine/dbc/generated/sc_scale_data.inc" }
}
};
var filePath = Path.Combine(cache.BaseFileDirectory, "ScaleData.raw");
Expand Down
25 changes: 13 additions & 12 deletions SimcProfileParser.Tests/DataSync/RawDataExtractionServiceTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using NUnit.Framework;
using SimcProfileParser.DataSync;
using SimcProfileParser.Model.RawData;
using System.Collections.Generic;
using System.Linq;

Expand Down Expand Up @@ -142,16 +143,16 @@ public void RDE_Generates_SpellData()

var incomingRawData = new Dictionary<string, string>()
{
{ "SpellData.raw", "{ \"Flash Heal\" , 2061, 2, " +
"0.000000, 0.000000, 0.000000, 0x0000000000000000, 0x00000010, 0, 3, 0, 0, " +
"0.000000, 40.000000, 0, 1500, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, " +
"0.000000, 0, 0, 0, 1500, { 65536, 0, 524288, 0, 0, 0, 0, 0, 16781312, 0, 0, " +
"0, 0, 1, 0 }, { 2048, 0, 0, 1073741824 }, 6, 0x80000000, 0, 0, 0, 0, 0, " +
"0, 0, 1, 1, 1, 2 }, /* 613 */\r\n" +
"{ 613, 2061, 0, 10, 0, 0, 0.000000, 0.050000, 0.000000, 2.030000, " +
"0.000000, 0, 0.000000, 0.000000, 0.0000, 0, 0, { 0, 0, 0, 0 }, 0, " +
"1.000000, 0.000000, 0.000000, 0, 0, 21, 0, 1.000000, 1.150000, 0, 0 },\r\n" +
" { 154, 2061, 0, 0, 0, 0, 0, 3.600, 0.000, 0.000 }," }
{ "SpellData.raw", "{ \"Flash Heal\" , 2061, 2, 0.000000, " +
"0.000000, 0.000000, 0x0000000000000000, 0x00000010, 0, 3, 0, 0, 0.000000, 40.000000," +
" 0, 1500, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0x0000000000000000, 0, 0.000000, " +
"0, 0x00000000, 0x00000000, 1500, { 65536, 0, 524288, 0, 0, 0, 0, 0, 16781312, 0, 0, " +
"0, 0, 1, 0 }, { 2048, 0, 0, 1073741824 }, 6, 0x88000000, 0, 0, 0, 0, 0, 0, 0, 1, " +
"4, 1, 7 }, /* 613 */\r\n" +
"{ 613, 2061, 0, 10, 0, 0, 0x00000000, 0.000000, 0.050000, 0.000000, 3.410400, " +
"0.000000, 0, 0.000000, 0.000000, 0.0000, 0, 0, { 0, 0, 0, 0 }, 0, 1.000000, 0.000000, " +
"0.000000, 0, 0, 21, 0, 1.000000, 1.000000, 0, 0 },\r\n" +
" { 154, 2061, 137031, 0, 0, 0, 0, 3.600, 0.000, 0.000 }," }
};

// Act
Expand Down Expand Up @@ -260,7 +261,7 @@ public void RDE_Generates_SpellScale_Multi()

var incomingRawData = new Dictionary<string, string>()
{
{ "ScaleData.raw", @"static constexpr double __spell_scaling[][70] = {
{ "ScaleData.raw", @"static constexpr double __spell_scaling[][80] = {
{
1, 0, 0, 0, 0, // 5
},
Expand Down Expand Up @@ -330,7 +331,7 @@ public void RDE_Generates_SpellScale_Multi()
// Assert
Assert.IsNotNull(result);
Assert.AreEqual(21, result.Length);
Assert.AreEqual(70, result[0].Length);
Assert.AreEqual(80, result[0].Length);
Assert.AreEqual(1d, result[0][0]);
Assert.AreEqual(2d, result[1][0]);
Assert.AreEqual(3d, result[2][0]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public async Task SGS_Creates_ItemSpell()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(2, spell.Effects.Count);
Assert.AreEqual(60.763805390000002d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(25.512510299999999d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(460.97500600000001d, spell.Effects[0].Coefficient);
Assert.AreEqual(621.39996299999996d, spell.Effects[1].Coefficient);
}
Expand All @@ -125,7 +125,7 @@ public async Task SGS_Creates_PlayerSpell()
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(94.811015159999997d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(258.2211327d, spell.Effects[0].ScaleBudget);
}

[Test]
Expand All @@ -138,7 +138,7 @@ public async Task SGS_Gets_Game_Version()

// Assert
Assert.IsNotNull(version);
Assert.AreEqual("10.", version.Substring(0, 3));
Assert.AreEqual("11.", version.Substring(0, 3));
}
}
}
64 changes: 40 additions & 24 deletions SimcProfileParser.Tests/SimcItemCreationServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,31 +87,47 @@ public async Task ICS_Parses_Entire_Data_file()
public async Task ICS_Builds_Item_From_Options()
{
// Arrange
// Hopebreakers Badge
// trinket1=,id=177813,bonus_id=6907/6652/603/7215,drop_level=50
// # Entropic Convergence Loop (519)
// # finger1=,id=202572,bonus_id=6652/10532/7981/10335/10884/1576/8767
//var itemOptions = new SimcItemOptions()
//{
// ItemId = 202572,
// Quality = ItemQuality.ITEM_QUALITY_COMMON,
// ItemLevel = 415,
// BonusIds = new List<int>() { 6652, 10532, 7981, 10335, 10884, 1576, 8767 },
//};

// Etchings of the Captive Revenant (519)
// back =,id = 202573,bonus_id = 6652 / 10874 / 7981 / 10335 / 10884 / 1576 / 8767
// 702 Armor, 3422 Stamina, 460 Crit, 211 Haste
var itemOptions = new SimcItemOptions()
{
ItemId = 177813,
ItemId = 202573,
Quality = ItemQuality.ITEM_QUALITY_COMMON,
ItemLevel = 226,
BonusIds = new List<int>() { 6907, 6652, 603, 7215 },
DropLevel = 50
ItemLevel = 415,
BonusIds = new List<int>() { 6652, 10874, 7981, 10335, 10884, 1576, 8767 },
};


// Act
var item = await _ics.CreateItemAsync(itemOptions);

// Assert
Assert.IsNotNull(item);
Assert.AreEqual(226, item.ItemLevel);
Assert.AreEqual(519, item.ItemLevel);
Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
Assert.AreEqual(177813, item.ItemId);
// Intellect
Assert.AreEqual(77, item.Mods[0].StatRating);
Assert.AreEqual(ItemModType.ITEM_MOD_STRENGTH_AGILITY_INTELLECT, item.Mods[0].Type);
Assert.AreEqual(InventoryType.INVTYPE_CLOAK, item.InventoryType);
Assert.AreEqual(202573, item.ItemId);

// Stam
Assert.AreEqual(3422, item.Mods[0].StatRating);
Assert.AreEqual(ItemModType.ITEM_MOD_STAMINA, item.Mods[0].Type);
// Crit rating
Assert.AreEqual(95, item.Mods[1].StatRating);
Assert.AreEqual(460, item.Mods[1].StatRating);
Assert.AreEqual(ItemModType.ITEM_MOD_CRIT_RATING, item.Mods[1].Type);
// Haste rating
Assert.AreEqual(211, item.Mods[2].StatRating);
Assert.AreEqual(ItemModType.ITEM_MOD_HASTE_RATING, item.Mods[2].Type);
}

[Test]
Expand Down Expand Up @@ -157,8 +173,8 @@ public async Task ICS_ItemOptions_Correct_iLvl_Scaling()
Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
Assert.AreEqual(181360, item.ItemId);
// This will make sure the scale value that's being pulled for spells is using the right
// item level. In this cast it's 226 = 1.3098933696746826.
Assert.AreEqual(1.2341647148132324d, item.Effects[0].Spell.CombatRatingMultiplier);
// item level. In this cast it's 226 = 1.5.
Assert.AreEqual(1.5d, item.Effects[0].Spell.CombatRatingMultiplier);
}

[Test]
Expand Down Expand Up @@ -236,7 +252,7 @@ public async Task ICS_ItemOptions_Correct_iLvl_Heal_EffectScaling()
Assert.AreEqual(178809, item.ItemId);
// This will make sure the scale value that's being pulled for spells with healing/damage effects is using the right
// item level. In this cast it's 226 = 58.
Assert.AreEqual(90.627281190000005d, item.Effects[0].Spell.Effects[0].ScaleBudget);
Assert.AreEqual(25.512510299999999d, item.Effects[0].Spell.Effects[0].ScaleBudget);
}

[Test]
Expand Down Expand Up @@ -268,8 +284,8 @@ public async Task ICS_Builds_Trinket_From_ParsedItem_Secondary_Stat_UseEffect()
Assert.AreEqual(336841, item.Effects[0].Spell.SpellId);
Assert.AreEqual(90000, item.Effects[0].Spell.Cooldown);
Assert.AreEqual(12000.0d, item.Effects[0].Spell.Duration);
Assert.AreEqual(1.2341647148132324d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(90.627281190000005d, item.Effects[0].Spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.5d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(25.512510299999999d, item.Effects[0].Spell.Effects[0].ScaleBudget);
Assert.IsNotNull(item.Effects[0].Spell.Effects);
Assert.AreEqual(1, item.Effects[0].Spell.Effects.Count);
Assert.AreEqual(2.955178d, item.Effects[1].Spell.Effects[0].Coefficient);
Expand Down Expand Up @@ -308,14 +324,14 @@ public async Task ICS_Builds_Trinket_From_ParsedItem_HealDmg_UseEffect()
Assert.AreEqual(336866, item.Effects[0].Spell.SpellId);
Assert.AreEqual(90000, item.Effects[0].Spell.Cooldown);
Assert.AreEqual(6000, item.Effects[0].Spell.Duration);
Assert.AreEqual(1.2341647148132324d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(90.627281190000005d, item.Effects[0].Spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.5d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(25.512510299999999d, item.Effects[0].Spell.Effects[0].ScaleBudget);
// Second effect
Assert.AreEqual(135863, item.Effects[1].EffectId);
Assert.IsNotNull(item.Effects[1].Spell);
Assert.AreEqual(343538, item.Effects[1].Spell.SpellId);
Assert.AreEqual(1.2341647148132324d, item.Effects[1].Spell.CombatRatingMultiplier);
Assert.AreEqual(60.763805390000002d, item.Effects[1].Spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.5d, item.Effects[1].Spell.CombatRatingMultiplier);
Assert.AreEqual(25.512510299999999d, item.Effects[1].Spell.Effects[0].ScaleBudget);
Assert.IsNotNull(item.Effects[1].Spell.Effects);
Assert.AreEqual(2, item.Effects[1].Spell.Effects.Count);
// Second effect's spells first effect
Expand Down Expand Up @@ -353,8 +369,8 @@ public async Task ICS_Builds_Trinket_From_ParsedItem_Primary_ProcEffectt()
Assert.IsNotNull(item.Effects[0].Spell);
Assert.AreEqual(344117, item.Effects[0].Spell.SpellId);
Assert.AreEqual(1.5, item.Effects[0].Spell.Rppm);
Assert.AreEqual(1.2341647148132324d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(90.627281190000005d, item.Effects[0].Spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.5d, item.Effects[0].Spell.CombatRatingMultiplier);
Assert.AreEqual(25.512510299999999d, item.Effects[0].Spell.Effects[0].ScaleBudget);
// First effect's spells first effect trigger spells first effect (lol)
// This is basically testing that the trigger spell gets linked. This particular spell
// stores the proc coefficient in the trigger spell and multiplies it by 155.
Expand Down Expand Up @@ -453,7 +469,7 @@ public async Task ICS_Creates_Premade_Ilvl_Scaling()
Assert.AreEqual(193748, item.ItemId);
Assert.AreEqual(395, item.ItemLevel);
Assert.AreEqual(1, item.Mods.Count);
Assert.AreEqual(482, item.Mods[0].StatRating);
Assert.AreEqual(477, item.Mods[0].StatRating);
}

[Test]
Expand Down
24 changes: 12 additions & 12 deletions SimcProfileParser.Tests/SimcSpellCreationServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public async Task SSC_Creates_Item_Spell_Spell_Options()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(2, spell.Effects.Count);
Assert.AreEqual(60.763805390000002d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(25.512510299999999d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(460.97500600000001d, spell.Effects[0].Coefficient);
Assert.AreEqual(621.39996299999996d, spell.Effects[1].Coefficient);
}
Expand Down Expand Up @@ -109,7 +109,7 @@ public async Task SSC_Converts_OneScale_To_SevenScale()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1, spell.Effects.Count);
Assert.AreEqual(189.95515439618612d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(125.98769760131836d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.65, spell.Effects[0].Coefficient);
Assert.AreEqual(-7, spell.Effects[0].ScalingType);
}
Expand All @@ -133,7 +133,7 @@ public async Task SSC_Creates_Item_Spell_Raw_Obj()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(2, spell.Effects.Count);
Assert.AreEqual(60.763805390000002d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(25.512510299999999d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(460.97500600000001d, spell.Effects[0].Coefficient);
Assert.AreEqual(621.39996299999996d, spell.Effects[1].Coefficient);
}
Expand All @@ -157,7 +157,7 @@ public async Task SSC_Creates_Item_Spell_Raw_Obj_9()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1, spell.Effects.Count);
Assert.AreEqual(90.627281190000005d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(25.512510299999999d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(21.946373000000001d, spell.Effects[0].Coefficient);
}

Expand All @@ -169,7 +169,7 @@ public async Task SSC_Creates_Player_Spell_Spell_Options()
var spellOptions = new SimcSpellOptions()
{
SpellId = 274740,
PlayerLevel = 60
PlayerLevel = 80
};

// Act
Expand All @@ -180,7 +180,7 @@ public async Task SSC_Creates_Player_Spell_Spell_Options()
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(94.811015159999997d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(3828.969615d, spell.Effects[0].ScaleBudget);
}

[Test]
Expand All @@ -190,7 +190,7 @@ public async Task SSC_Creates_Player_Spell_With_Power()
var spellOptions = new SimcSpellOptions()
{
SpellId = 274740,
PlayerLevel = 60
PlayerLevel = 80
};

// Act
Expand All @@ -200,14 +200,14 @@ public async Task SSC_Creates_Player_Spell_With_Power()
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(94.811015159999997d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(3828.969615d, spell.Effects[0].ScaleBudget);
}

[Test]
public async Task SSC_Creates_Player_Spell_Raw()
{
// Arrange
var playerLevel = 60u;
var playerLevel = 70u;
var spellId = 274740u;

// Act
Expand All @@ -216,8 +216,8 @@ public async Task SSC_Creates_Player_Spell_Raw()
// Assert
Assert.IsNotNull(spell);
Assert.IsNotNull(spell.Effects);
Assert.AreEqual(1.32, spell.Effects[0].Coefficient);
Assert.AreEqual(94.811015159999997d, spell.Effects[0].ScaleBudget);
Assert.AreEqual(1.3200000000000001d, spell.Effects[0].Coefficient);
Assert.AreEqual(453.3443671d, spell.Effects[0].ScaleBudget);
}

[Test]
Expand All @@ -242,7 +242,7 @@ public async Task SSC_Creates_Player_Spell_WithPower()
public async Task SSC_Creates_Player_Spell_WithConduitRanks()
{
// Arrange
var playerLevel = 60u;
var playerLevel = 80u;
var spellId = 340609u;

// Act
Expand Down
Loading

0 comments on commit 44daae6

Please sign in to comment.