void checkLootGroupEntryRecursive(String& entryName, Vector<String>* parentGroups) { if (entryName.isEmpty()) return; //Check for infinite recursion for (int i = 0; i < parentGroups->size(); i++) { String parentName = parentGroups->get(i); EXPECT_FALSE( parentName == entryName ) << "Loot group " << std::string(parentName.toCharArray()) << " failed recursion check."; if (parentName == entryName) return; } if (lootGroupMap->lootGroupExists(entryName)) { LootGroupTemplate* lootGroupTemplate = lootGroupMap->getLootGroupTemplate(entryName); for (int j = 0; j < lootGroupTemplate->size(); j++) { String entry = lootGroupTemplate->getLootGroupEntryAt(j); parentGroups->add(entryName); checkLootGroupEntryRecursive(entry, parentGroups); } } else { Reference<LootItemTemplate*> itemTemplate = lootGroupMap->getLootItemTemplate( entryName ); EXPECT_TRUE( itemTemplate != NULL ) << "Item template " << std::string(entryName.toCharArray()) << " from " << std::string(parentGroups->get(parentGroups->size() - 1).toCharArray()) << " was not found in LootGroupMap"; } }
TEST_F(LuaMobileTest, LuaMobileTemplatesTest) { CreatureTemplateManager::DEBUG_MODE = 1; // Verify that all mobiles load ASSERT_EQ(CreatureTemplateManager::instance()->loadTemplates(), 0); // Verify loot group map loads LootGroupMap* lootGroupMap = LootGroupMap::instance(); ASSERT_EQ(lootGroupMap->initialize(), 0); HashTableIterator<uint32, Reference<CreatureTemplate*> > iter = CreatureTemplateManager::instance()->iterator(); while (iter.hasNext()) { CreatureTemplate* creature = iter.next(); std::string templateName( creature->getTemplateName().toCharArray() ); // Verify loot group percentages LootGroupCollection* groupCollection = creature->getLootGroups(); if( groupCollection->count() > 0 ){ for( int i = 0; i < groupCollection->count(); i++ ){ LootGroupCollectionEntry* collectionEntry = groupCollection->get(i); LootGroups* groups = collectionEntry->getLootGroups(); if( groups->count() > 0){ int totalChance = 0; for( int j = 0; j < groups->count(); j++ ){ LootGroupEntry* lootGroup = groups->get(j); totalChance += lootGroup->getLootChance(); // Verify loot group is configured correctly LootGroupTemplate* foundGroup = lootGroupMap->getLootGroupTemplate( lootGroup->getLootGroupName() ); std::string groupName( lootGroup->getLootGroupName().toCharArray() ); EXPECT_TRUE( foundGroup != NULL ) << "Loot group " << groupName << " from " << templateName << " was not found in LootGroupMap"; } EXPECT_EQ( 10000000, totalChance ) << "Loot groups total chance is incorrect " << templateName; } } } // Verify weapon groups exist Vector<String> weapons = creature->getWeapons(); for (int i = 0; i < weapons.size(); i++) { String weaponGroup = weapons.get(i); std::string groupName( weaponGroup.toCharArray() ); Vector<String> group = CreatureTemplateManager::instance()->getWeapons(weaponGroup); EXPECT_TRUE( group.size() > 0 ) << "Weapon group " << groupName << " from " << templateName << " was not found in weaponMap"; } } }