Exemplo n.º 1
0
void CGroupSkills::CSkillsObs::update (ICDBNode *node)
{
	CInterfaceManager *pIM = CInterfaceManager::getInstance();

	CCDBNodeLeaf *leaf = NLMISC::safe_cast<CCDBNodeLeaf *>(node);

	// Rebuild all only if new skill (previously level 0)
	if (leaf->getOldValue32() == 0)
		Owner->_MustRebuild= true;

	// Popup a message if previous was not 0
	if ((leaf->getOldValue32() != 0) &&
		(leaf->getValue32() != 0)) // prevent displaying FX when resetData() is called during a Far TP
	{
		CGroupSkills::InhibitSkillUpFX = false;

		ICDBNode *skill = node->getParent();
		if (skill)
		{
			ICDBNode *skillParent = skill->getParent();
			if (skillParent)
			{
				uint skillId;
				if (skillParent->getNodeIndex (skill, skillId))
				{
					CAHManager::getInstance()->runActionHandler("skill_popup", NULL, "skillId="+toString(skillId)+"|delta="+toString(leaf->getValue32()-leaf->getOldValue32()));

					// Context help
					contextHelp ("skill");
				}
			}
		}
	}
	else
	{
		if( !CGroupSkills::InhibitSkillUpFX ) // TODO: couldn't this be replaced by IngameDbMngr.initInProgress()?
		{
			UserEntity->skillUp();
		}
	}

	// Check if this skill canunblock title
	CSkillManager *pSM = CSkillManager::getInstance();
	string sTmp = leaf->getFullName();
	sTmp = sTmp.substr(0, sTmp.rfind(':'));
	sTmp = sTmp.substr(sTmp.rfind(':')+1,sTmp.size());
	sint32 eSkills;
	fromString(sTmp, eSkills);
	pSM->tryToUnblockTitleFromSkill((SKILLS::ESkills)eSkills, leaf->getValue32());
}