|
|
|
@ -81,6 +81,7 @@ public: |
|
|
|
Players.resize(1); |
|
|
|
Players.resize(1); |
|
|
|
MyPlayer = &Players[0]; |
|
|
|
MyPlayer = &Players[0]; |
|
|
|
gbIsHellfire = false; |
|
|
|
gbIsHellfire = false; |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
CreatePlayer(*MyPlayer, HeroClass::Warrior); |
|
|
|
CreatePlayer(*MyPlayer, HeroClass::Warrior); |
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -149,62 +150,45 @@ std::string misctype_str(item_misc_id type) |
|
|
|
TEST_F(VendorTest, SmithGen) |
|
|
|
TEST_F(VendorTest, SmithGen) |
|
|
|
{ |
|
|
|
{ |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
SmithItems.clear(); |
|
|
|
// Clear global state for test, and force Diablo game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithBasicItemsHf; i++) { |
|
|
|
|
|
|
|
SmithItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gbIsHellfire = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SpawnSmith(16); |
|
|
|
SpawnSmith(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumSmithBasicItems); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumSmithBasicItems); |
|
|
|
int n_items = 0; |
|
|
|
EXPECT_EQ(SmithItems.size(), N_ITEMS); |
|
|
|
|
|
|
|
EXPECT_LE(SmithItems.size(), NumSmithBasicItems); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithBasicItems; i++) { |
|
|
|
for (size_t i = 0; i < SmithItems.size(); i++) { |
|
|
|
if (SmithItems[i].isEmpty()) break; |
|
|
|
|
|
|
|
EXPECT_THAT(SmithItems[i]._itype, SmithTypeMatch(i)); |
|
|
|
EXPECT_THAT(SmithItems[i]._itype, SmithTypeMatch(i)); |
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, SmithGenHf) |
|
|
|
TEST_F(VendorTest, SmithGenHf) |
|
|
|
{ |
|
|
|
{ |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
SmithItems.clear(); |
|
|
|
// Clear global state for test, and force Hellfire game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithBasicItemsHf; i++) { |
|
|
|
|
|
|
|
SmithItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
SpawnSmith(16); |
|
|
|
SpawnSmith(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumSmithBasicItemsHf); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumSmithBasicItemsHf); |
|
|
|
int n_items = 0; |
|
|
|
EXPECT_EQ(SmithItems.size(), N_ITEMS); |
|
|
|
|
|
|
|
EXPECT_LE(SmithItems.size(), NumSmithBasicItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithBasicItemsHf; i++) { |
|
|
|
for (size_t i = 0; i < SmithItems.size(); i++) { |
|
|
|
if (SmithItems[i].isEmpty()) break; |
|
|
|
|
|
|
|
EXPECT_THAT(SmithItems[i]._itype, SmithTypeMatchHf(i)); |
|
|
|
EXPECT_THAT(SmithItems[i]._itype, SmithTypeMatchHf(i)); |
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, PremiumQlvl1to5) |
|
|
|
TEST_F(VendorTest, PremiumQlvl1to5) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
// Test starting the game as a level 1 character
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Test level 1 character item qlvl
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(1); |
|
|
|
MyPlayer->setCharacterLevel(1); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 1, 1, 1, 1, 2, 3 }; |
|
|
|
constexpr int QLVLS[] = { 1, 1, 1, 1, 2, 3 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
@ -213,7 +197,9 @@ TEST_F(VendorTest, PremiumQlvl1to5) |
|
|
|
// Test level ups
|
|
|
|
// Test level ups
|
|
|
|
MyPlayer->setCharacterLevel(5); |
|
|
|
MyPlayer->setCharacterLevel(5); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 4, 4, 5, 5, 6, 7 }; |
|
|
|
constexpr int QLVLS[] = { 4, 4, 5, 5, 6, 7 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
@ -224,26 +210,24 @@ TEST_F(VendorTest, PremiumQlvl25) |
|
|
|
{ |
|
|
|
{ |
|
|
|
constexpr int QLVLS[] = { 24, 24, 25, 25, 26, 27 }; |
|
|
|
constexpr int QLVLS[] = { 24, 24, 25, 25, 26, 27 }; |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
// Test starting the game as a level 25 character
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Test starting game as a level 25 character
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[3].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 3); |
|
|
|
PremiumItems[5].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 5); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -253,26 +237,24 @@ TEST_F(VendorTest, PremiumQlvl30Plus) |
|
|
|
{ |
|
|
|
{ |
|
|
|
constexpr int QLVLS[] = { 30, 30, 30, 30, 30, 30 }; |
|
|
|
constexpr int QLVLS[] = { 30, 30, 30, 30, 30, 30 }; |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Finally test level 30+ characters
|
|
|
|
// Finally test level 30+ characters
|
|
|
|
MyPlayer->setCharacterLevel(31); |
|
|
|
MyPlayer->setCharacterLevel(31); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[3].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 3); |
|
|
|
PremiumItems[5].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 5); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -280,18 +262,20 @@ TEST_F(VendorTest, PremiumQlvl30Plus) |
|
|
|
// Test 30+ levelling
|
|
|
|
// Test 30+ levelling
|
|
|
|
MyPlayer->setCharacterLevel(35); |
|
|
|
MyPlayer->setCharacterLevel(35); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[3].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 3); |
|
|
|
PremiumItems[5].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 5); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItems); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatch(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -299,16 +283,14 @@ TEST_F(VendorTest, PremiumQlvl30Plus) |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, HfPremiumQlvl1to5) |
|
|
|
TEST_F(VendorTest, HfPremiumQlvl1to5) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Test level 1 character item qlvl
|
|
|
|
// Test level 1 character item qlvl
|
|
|
|
MyPlayer->setCharacterLevel(1); |
|
|
|
MyPlayer->setCharacterLevel(1); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4 }; |
|
|
|
constexpr int QLVLS[] = { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
@ -317,7 +299,9 @@ TEST_F(VendorTest, HfPremiumQlvl1to5) |
|
|
|
// Test level ups
|
|
|
|
// Test level ups
|
|
|
|
MyPlayer->setCharacterLevel(5); |
|
|
|
MyPlayer->setCharacterLevel(5); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8 }; |
|
|
|
constexpr int QLVLS[] = { 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
@ -326,28 +310,26 @@ TEST_F(VendorTest, HfPremiumQlvl1to5) |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, HfPremiumQlvl25) |
|
|
|
TEST_F(VendorTest, HfPremiumQlvl25) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Test starting game as a level 25 character
|
|
|
|
// Test starting game as a level 25 character
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 28 }; |
|
|
|
constexpr int QLVLS[] = { 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 28 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[7].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 7); |
|
|
|
PremiumItems[14].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 14); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 24, 23, 23, 24, 24, 24, 25, 26, 25, 26, 26, 26, 27, 27, 28 }; |
|
|
|
constexpr int QLVLS[] = { 24, 23, 23, 24, 24, 24, 25, 26, 25, 26, 26, 26, 27, 27, 28 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
@ -356,28 +338,26 @@ TEST_F(VendorTest, HfPremiumQlvl25) |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, HfPremiumQlvl30Plus) |
|
|
|
TEST_F(VendorTest, HfPremiumQlvl30Plus) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
|
|
|
|
PremiumItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PremiumItemLevel = 1; |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Finally test level 30+ characters
|
|
|
|
// Finally test level 30+ characters
|
|
|
|
MyPlayer->setCharacterLevel(31); |
|
|
|
MyPlayer->setCharacterLevel(31); |
|
|
|
|
|
|
|
PremiumItems.clear(); |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }; |
|
|
|
constexpr int QLVLS[] = { 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[7].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 7); |
|
|
|
PremiumItems[14].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 14); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItemsHf; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
constexpr int QLVLS[] = { 30, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }; |
|
|
|
constexpr int QLVLS[] = { 30, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
@ -388,18 +368,20 @@ TEST_F(VendorTest, HfPremiumQlvl30Plus) |
|
|
|
// Test 30+ levelling
|
|
|
|
// Test 30+ levelling
|
|
|
|
MyPlayer->setCharacterLevel(35); |
|
|
|
MyPlayer->setCharacterLevel(35); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Test buying select items
|
|
|
|
// Test buying select items
|
|
|
|
PremiumItems[0].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 0); |
|
|
|
PremiumItems[7].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 7); |
|
|
|
PremiumItems[14].clear(); |
|
|
|
ReplacePremium(*MyPlayer, 14); |
|
|
|
PremiumItemCount -= 3; |
|
|
|
EXPECT_EQ(PremiumItems.size(), NumSmithItemsHf); |
|
|
|
SpawnPremium(*MyPlayer); |
|
|
|
|
|
|
|
for (int i = 0; i < NumSmithItems; i++) { |
|
|
|
for (size_t i = 0; i < PremiumItems.size(); i++) { |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(PremiumItems[i]._iCreateInfo & CF_LEVEL, QLVLS[i]) << "Index: " << i; |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
EXPECT_THAT(PremiumItems[i]._itype, AnyOf(SmithTypeMatchHf(i), PremiumTypeMatch(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -410,34 +392,24 @@ TEST_F(VendorTest, WitchGen) |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_MANA, IDI_FULLMANA, IDI_PORTAL }; |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_MANA, IDI_FULLMANA, IDI_PORTAL }; |
|
|
|
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
WitchItems.clear(); |
|
|
|
// Clear global state for test, and force Diablo game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumWitchItemsHf; i++) { |
|
|
|
|
|
|
|
WitchItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gbIsHellfire = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SpawnWitch(16); |
|
|
|
SpawnWitch(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumWitchItems); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumWitchItems); |
|
|
|
|
|
|
|
EXPECT_EQ(WitchItems.size(), N_ITEMS); |
|
|
|
int n_items = NumWitchPinnedItems; |
|
|
|
EXPECT_LE(WitchItems.size(), NumWitchItems); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NumWitchPinnedItems; i++) { |
|
|
|
for (size_t i = 0; i < WitchItems.size(); i++) { |
|
|
|
EXPECT_EQ(WitchItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
if (i < NumWitchPinnedItems) { |
|
|
|
} |
|
|
|
EXPECT_EQ(WitchItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
|
|
|
|
} else { |
|
|
|
for (int i = NumWitchPinnedItems; i < NumWitchItems; i++) { |
|
|
|
EXPECT_THAT(WitchItems[i]._itype, WitchTypeMatch(i)); |
|
|
|
if (WitchItems[i].isEmpty()) break; |
|
|
|
if (WitchItems[i]._itype == ItemType::Misc) { |
|
|
|
EXPECT_THAT(WitchItems[i]._itype, WitchTypeMatch(i)); |
|
|
|
EXPECT_THAT(WitchItems[i]._iMiscId, WitchMiscMatch(i)); |
|
|
|
|
|
|
|
} |
|
|
|
if (WitchItems[i]._itype == ItemType::Misc) { |
|
|
|
|
|
|
|
EXPECT_THAT(WitchItems[i]._iMiscId, WitchMiscMatch(i)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, WitchGenHf) |
|
|
|
TEST_F(VendorTest, WitchGenHf) |
|
|
|
@ -446,38 +418,29 @@ TEST_F(VendorTest, WitchGenHf) |
|
|
|
constexpr int MAX_PINNED_BOOKS = 4; |
|
|
|
constexpr int MAX_PINNED_BOOKS = 4; |
|
|
|
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
WitchItems.clear(); |
|
|
|
gbIsHellfire = true; |
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
// Clear global state for test, and force Hellfire game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumWitchItemsHf; i++) { |
|
|
|
|
|
|
|
WitchItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SpawnWitch(16); |
|
|
|
SpawnWitch(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_PINNED_BOOKS = RandomIntLessThan(MAX_PINNED_BOOKS); |
|
|
|
const int N_PINNED_BOOKS = RandomIntLessThan(MAX_PINNED_BOOKS); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumWitchItemsHf); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumWitchItemsHf); |
|
|
|
|
|
|
|
EXPECT_EQ(WitchItems.size(), N_ITEMS); |
|
|
|
|
|
|
|
EXPECT_LE(WitchItems.size(), NumWitchItemsHf); |
|
|
|
|
|
|
|
|
|
|
|
int n_books = 0; |
|
|
|
int n_books = 0; |
|
|
|
int n_items = NumWitchPinnedItems; |
|
|
|
for (size_t i = 0; i < WitchItems.size(); i++) { |
|
|
|
|
|
|
|
if (i < NumWitchPinnedItems) { |
|
|
|
for (int i = 0; i < NumWitchPinnedItems; i++) { |
|
|
|
EXPECT_EQ(WitchItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
EXPECT_EQ(WitchItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
} else { |
|
|
|
} |
|
|
|
EXPECT_THAT(WitchItems[i]._itype, WitchTypeMatch(i)); |
|
|
|
|
|
|
|
if (WitchItems[i]._itype == ItemType::Misc) { |
|
|
|
for (int i = NumWitchPinnedItems; i < NumWitchItemsHf; i++) { |
|
|
|
EXPECT_THAT(WitchItems[i]._iMiscId, WitchMiscMatch(i)); |
|
|
|
if (WitchItems[i].isEmpty()) break; |
|
|
|
} |
|
|
|
EXPECT_THAT(WitchItems[i]._itype, WitchTypeMatch(i)); |
|
|
|
if (WitchItems[i]._iMiscId == IMISC_BOOK) n_books++; |
|
|
|
|
|
|
|
|
|
|
|
if (WitchItems[i]._itype == ItemType::Misc) { |
|
|
|
|
|
|
|
EXPECT_THAT(WitchItems[i]._iMiscId, WitchMiscMatch(i)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (WitchItems[i]._iMiscId == IMISC_BOOK) n_books++; |
|
|
|
|
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_GE(n_books, N_PINNED_BOOKS); |
|
|
|
EXPECT_GE(n_books, N_PINNED_BOOKS); |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, HealerGen) |
|
|
|
TEST_F(VendorTest, HealerGen) |
|
|
|
@ -485,30 +448,22 @@ TEST_F(VendorTest, HealerGen) |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_HEAL, IDI_FULLHEAL, IDI_RESURRECT }; |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_HEAL, IDI_FULLHEAL, IDI_RESURRECT }; |
|
|
|
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
HealerItems.clear(); |
|
|
|
// Clear global state for test, and force Diablo game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumHealerItemsHf; i++) { |
|
|
|
|
|
|
|
HealerItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gbIsHellfire = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SpawnHealer(16); |
|
|
|
SpawnHealer(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumHealerItems); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumHealerItems); |
|
|
|
int n_items = NumHealerPinnedItems; |
|
|
|
EXPECT_EQ(HealerItems.size(), N_ITEMS); |
|
|
|
|
|
|
|
EXPECT_LE(HealerItems.size(), NumHealerItems); |
|
|
|
for (int i = 0; i < NumHealerPinnedItems; i++) { |
|
|
|
|
|
|
|
EXPECT_EQ(HealerItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
for (size_t i = 0; i < HealerItems.size(); i++) { |
|
|
|
} |
|
|
|
if (i < NumHealerPinnedItems) { |
|
|
|
|
|
|
|
EXPECT_EQ(HealerItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
for (int i = NumHealerPinnedItems; i < NumHealerItems; i++) { |
|
|
|
} else { |
|
|
|
if (HealerItems[i].isEmpty()) break; |
|
|
|
EXPECT_THAT(HealerItems[i]._itype, Eq(ItemType::Misc)); |
|
|
|
EXPECT_THAT(HealerItems[i]._itype, Eq(ItemType::Misc)); |
|
|
|
EXPECT_THAT(HealerItems[i]._iMiscId, HealerMiscMatch(i)); |
|
|
|
EXPECT_THAT(HealerItems[i]._iMiscId, HealerMiscMatch(i)); |
|
|
|
} |
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST_F(VendorTest, HealerGenHf) |
|
|
|
TEST_F(VendorTest, HealerGenHf) |
|
|
|
@ -516,30 +471,23 @@ TEST_F(VendorTest, HealerGenHf) |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_HEAL, IDI_FULLHEAL, IDI_RESURRECT }; |
|
|
|
constexpr _item_indexes PINNED_ITEMS[] = { IDI_HEAL, IDI_FULLHEAL, IDI_RESURRECT }; |
|
|
|
|
|
|
|
|
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
MyPlayer->setCharacterLevel(25); |
|
|
|
|
|
|
|
HealerItems.clear(); |
|
|
|
// Clear global state for test, and force Hellfire game mode
|
|
|
|
|
|
|
|
for (int i = 0; i < NumHealerItemsHf; i++) { |
|
|
|
|
|
|
|
HealerItems[i].clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gbIsHellfire = true; |
|
|
|
gbIsHellfire = true; |
|
|
|
|
|
|
|
|
|
|
|
SpawnHealer(16); |
|
|
|
SpawnHealer(16); |
|
|
|
|
|
|
|
|
|
|
|
SetRndSeed(SEED); |
|
|
|
SetRndSeed(SEED); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumHealerItemsHf); |
|
|
|
const int N_ITEMS = RandomIntBetween(10, NumHealerItemsHf); |
|
|
|
int n_items = NumHealerPinnedItems; |
|
|
|
EXPECT_EQ(HealerItems.size(), N_ITEMS); |
|
|
|
|
|
|
|
EXPECT_LE(HealerItems.size(), NumHealerItemsHf); |
|
|
|
for (int i = 0; i < NumHealerPinnedItems; i++) { |
|
|
|
|
|
|
|
EXPECT_EQ(HealerItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
for (size_t i = 0; i < HealerItems.size(); i++) { |
|
|
|
} |
|
|
|
if (i < NumHealerPinnedItems) { |
|
|
|
|
|
|
|
EXPECT_EQ(HealerItems[i].IDidx, PINNED_ITEMS[i]) << "Index: " << i; |
|
|
|
for (int i = NumHealerPinnedItems; i < NumHealerItemsHf; i++) { |
|
|
|
} else { |
|
|
|
if (HealerItems[i].isEmpty()) break; |
|
|
|
EXPECT_THAT(HealerItems[i]._itype, Eq(ItemType::Misc)); |
|
|
|
EXPECT_THAT(HealerItems[i]._itype, Eq(ItemType::Misc)); |
|
|
|
EXPECT_THAT(HealerItems[i]._iMiscId, HealerMiscMatch(i)); |
|
|
|
EXPECT_THAT(HealerItems[i]._iMiscId, HealerMiscMatch(i)); |
|
|
|
} |
|
|
|
n_items++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
EXPECT_EQ(n_items, N_ITEMS); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
} // namespace
|
|
|
|
|