本文整理汇总了C++中SpellCastTargets::GetWeights方法的典型用法代码示例。如果您正苦于以下问题:C++ SpellCastTargets::GetWeights方法的具体用法?C++ SpellCastTargets::GetWeights怎么用?C++ SpellCastTargets::GetWeights使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SpellCastTargets
的用法示例。
在下文中一共展示了SpellCastTargets::GetWeights方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SolveResearchProject
bool Player::SolveResearchProject(uint32 spellId, SpellCastTargets& targets)
{
uint16 skill_now = GetSkillValue(SKILL_ARCHAEOLOGY);
if (!skill_now)
return false;
ResearchProjectEntry const* entry = NULL;
for (std::set<ResearchProjectEntry const*>::const_iterator itr = sResearchProjectSet.begin(); itr != sResearchProjectSet.end(); ++itr)
{
if ((*itr)->spellId != spellId)
continue;
entry = (*itr);
break;
}
if (!entry || !HasResearchProject(entry->ID))
return false;
ResearchBranchEntry const* branch = NULL;
for (uint32 i = 0; i < sResearchBranchStore.GetNumRows(); ++i)
{
ResearchBranchEntry const* _branch = sResearchBranchStore.LookupEntry(i);
if (!_branch)
continue;
if (_branch->ID != entry->branchId)
continue;
branch = _branch;
break;
}
if (!branch)
return false;
uint32 currencyId = branch->currency;
int32 currencyAmt = int32(entry->req_currency_amt);
ArchaeologyWeights weights = targets.GetWeights();
for (ArchaeologyWeights::iterator itr = weights.begin(); itr != weights.end(); ++itr)
{
ArchaeologyWeight& w = *itr;
if (w.type == WEIGHT_KEYSTONE)
{
ItemPrototype const* proto = sObjectMgr.GetItemPrototype(w.keystone.itemId);
if (!proto)
return false;
if (proto->GetCurrencySubstitutionId() != currencyId)
return false;
if (w.keystone.itemCount > entry->Complexity)
return false;
if (!HasItemCount(w.keystone.itemId, w.keystone.itemCount))
return false;
currencyAmt -= int32(proto->CurrencySubstitutionCount * w.keystone.itemCount);
}
}
if (currencyAmt > 0 && !HasCurrencyCount(currencyId, currencyAmt))
return false;
ModifyCurrencyCount(currencyId, -currencyAmt);
for (ArchaeologyWeights::iterator itr = weights.begin(); itr != weights.end(); ++itr)
{
ArchaeologyWeight& w = *itr;
if (w.type == WEIGHT_KEYSTONE)
DestroyItemCount(w.keystone.itemId, w.keystone.itemCount, true);
}
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHAEOLOGY_PROJECTS, entry->ID, 1);
AddCompletedProject(entry);
ResearchProjectSet tempProjects;
ResearchProjectSet tempRareProjects;
float rare_chance = GetRareArtifactChance(skill_now);
for (std::set<ResearchProjectEntry const*>::const_iterator itr = sResearchProjectSet.begin(); itr != sResearchProjectSet.end(); ++itr)
{
ResearchProjectEntry const* project = *itr;
if (project->branchId != entry->branchId)
continue;
if (project->rare)
{
if (IsCompletedProject(project->ID, true))
continue;
tempRareProjects.insert(project->ID);
}
else
tempProjects.insert(project->ID);
}
ResearchProjectSet::const_iterator itr;
//.........这里部分代码省略.........