本文整理汇总了C++中DBCStorage::LookupEntry方法的典型用法代码示例。如果您正苦于以下问题:C++ DBCStorage::LookupEntry方法的具体用法?C++ DBCStorage::LookupEntry怎么用?C++ DBCStorage::LookupEntry使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DBCStorage
的用法示例。
在下文中一共展示了DBCStorage::LookupEntry方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dump_data
void dump_data(std::ostream& out, DBCStorage<T> const& store, bool ext_insert = true)
{
std::string class_name = ClassInfo<T>::name;
strip_trailing(class_name, "Entry");
if (ext_insert)
out << "INSERT INTO " << class_name << " VALUES\n";
uint32 last_row = store.GetNumRows() - 1;
for (uint32 row = 0; row <= last_row; ++row)
{
T const* entry = store.LookupEntry(row);
if (!entry)
continue;
if (ext_insert)
out << "(";
else
out << "INSERT INTO " << class_name << " VALUES (";
uint32 col = 0;
for (FieldList::const_iterator itr = ClassInfo<T>::fields.begin(); itr != ClassInfo<T>::fields.end(); ++itr, ++col)
{
bool is_text = ((*itr)->getType() == TYPE_STRING || (*itr)->getType()== TYPE_STRING_CONST) &&
(*itr)->isArray() && (*itr)->getArraySize() == 16; // all string fields have 16 locales
if (is_text && (*itr)->getArrayIndex() != 0) // only dump en_US locale
continue;
if (col > 0)
out << ", ";
if (is_text)
out << '\'' << escape_string((*itr)->getValue(const_cast<T*>(entry))) << '\'';
else
out << (*itr)->getValue(const_cast<T*>(entry));
}
if (ext_insert)
out << (row < last_row ? "),\n" : ");\n");
else
out << ");\n";
}
}
示例2: GetDamage
void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const
{
minDamage = maxDamage = 0.0f;
uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? ItemQualities(GetQuality()) : ITEM_QUALITY_RARE;
if (GetClass() != ITEM_CLASS_WEAPON || quality > ITEM_QUALITY_ARTIFACT)
return;
DBCStorage<ItemDamageEntry>* store = NULL;
// get the right store here
if (GetInventoryType() > INVTYPE_RANGEDRIGHT)
return;
switch (GetInventoryType())
{
case INVTYPE_AMMO:
store = &sItemDamageAmmoStore;
break;
case INVTYPE_2HWEAPON:
if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON)
store = &sItemDamageTwoHandCasterStore;
else
store = &sItemDamageTwoHandStore;
break;
case INVTYPE_RANGED:
case INVTYPE_THROWN:
case INVTYPE_RANGEDRIGHT:
switch (GetSubClass())
{
case ITEM_SUBCLASS_WEAPON_WAND:
store = &sItemDamageWandStore;
break;
case ITEM_SUBCLASS_WEAPON_THROWN:
store = &sItemDamageThrownStore;
break;
case ITEM_SUBCLASS_WEAPON_BOW:
case ITEM_SUBCLASS_WEAPON_GUN:
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
store = &sItemDamageRangedStore;
break;
default:
return;
}
break;
case INVTYPE_WEAPON:
case INVTYPE_WEAPONMAINHAND:
case INVTYPE_WEAPONOFFHAND:
if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON)
store = &sItemDamageOneHandCasterStore;
else
store = &sItemDamageOneHandStore;
break;
default:
return;
}
ASSERT(store);
ItemDamageEntry const* damageInfo = store->LookupEntry(itemLevel);
if (!damageInfo)
return;
float dps = damageInfo->DPS[quality];
float avgDamage = dps * GetDelay() * 0.001f;
minDamage = (GetStatScalingFactor() * -0.5f + 1.0f) * avgDamage;
maxDamage = floor(float(avgDamage * (GetStatScalingFactor() * 0.5f + 1.0f) + 0.5f));
}