Exemplo n.º 1
0
/* Gets the available spells for the specified monster.
 */
void GetAvailableSpells(CMobEntity* PMob) {
	//make sure the mob actually has a spell list
	if (PMob->m_SpellListContainer == nullptr)
	{
		return;
	}

	// catch all non-defaulted spell chances
        PMob->defaultMobMod(MOBMOD_MAGIC_COOL, 35);
	PMob->defaultMobMod(MOBMOD_GA_CHANCE, 35);
	PMob->defaultMobMod(MOBMOD_NA_CHANCE, 40);
	PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 35);
	PMob->defaultMobMod(MOBMOD_HEAL_CHANCE, 40);
	PMob->defaultMobMod(MOBMOD_HP_HEAL_CHANCE, 40);

	RecalculateSpellContainer(PMob);

	// make sure mob has mp to cast spells
	if(PMob->health.maxmp == 0 && PMob->SpellContainer != nullptr && PMob->SpellContainer->HasMPSpells())
	{
		ShowError("mobutils::CalculateStats Mob (%u) has no mp for casting spells!\n", PMob->id);
	}
}
Exemplo n.º 2
0
void SetSpellList(CMobEntity* PMob, uint16 spellList)
{
	PMob->m_SpellListContainer = mobSpellList::GetMobSpellList(spellList);
	RecalculateSpellContainer(PMob);
}
Exemplo n.º 3
0
/* Gets the available spells for the specified monster. This looks up the types of spells the monster
 * can cast based on the bitmask in mob_pools (which has been preloaded into memory). It then resolves
 * the list of actual spell IDs based on the bits set. This mapping from bitmask > spellids is based
 * on numerous factors including the type of mob, the level of the mob, etc. The list of spells are
 * then stored in PMob->PSpellContainer
 */
void GetAvailableSpells(CMobEntity* PMob) {
	//make sure the mob actually has a spell list
	if (PMob->m_SpellListContainer == NULL)
	{
		return;
	}

	// setup recast times
	switch(PMob->GetMJob())
	{
		case JOB_BLM:
		case JOB_BRD:
			PMob->setMobMod(MOBMOD_MAGIC_COOL, 30);
		break;
		case JOB_BLU:
			PMob->setMobMod(MOBMOD_MAGIC_COOL, 40);
		break;
		case JOB_NIN:
		case JOB_WHM:
		case JOB_RDM:
			PMob->setMobMod(MOBMOD_MAGIC_COOL, 35);
		break;
		case JOB_SMN:
			PMob->setMobMod(MOBMOD_MAGIC_COOL, 70);
		break;
		default:
			PMob->setMobMod(MOBMOD_MAGIC_COOL, 45);
		break;

	}

	// change spell chances
	switch(PMob->GetMJob())
	{
		case JOB_SMN:
			// smn only has "buffs"
			PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 100);
		break;
		case JOB_BLM:
			PMob->defaultMobMod(MOBMOD_GA_CHANCE, 40);
			PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 15);
		break;
		case JOB_RDM:
			PMob->defaultMobMod(MOBMOD_GA_CHANCE, 15);
			PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 40);
		break;
		case JOB_NIN:
			PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 30);
		break;
		case JOB_BRD:
			PMob->defaultMobMod(MOBMOD_GA_CHANCE, 25);
			PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 60);
		break;
	}

	if(PMob->m_Type & MOBTYPE_NOTORIOUS)
	{
		// NMs cure earlier
		PMob->defaultMobMod(MOBMOD_HP_HEAL_CHANCE, 50);
		PMob->defaultMobMod(MOBMOD_HEAL_CHANCE, 40);
	}

	// catch all non-defaulted spell chances
	PMob->defaultMobMod(MOBMOD_GA_CHANCE, 45);
	PMob->defaultMobMod(MOBMOD_NA_CHANCE, 40);
	PMob->defaultMobMod(MOBMOD_BUFF_CHANCE, 35);
	PMob->defaultMobMod(MOBMOD_HEAL_CHANCE, 40);
	PMob->defaultMobMod(MOBMOD_HP_HEAL_CHANCE, 25);

	RecalculateSpellContainer(PMob);

	// make sure mob has mp to cast spells
	if(PMob->health.maxmp == 0 && PMob->SpellContainer != NULL && PMob->SpellContainer->HasMPSpells())
	{
		ShowError("mobutils::CalculateStats Mob (%u) has no mp for casting spells!\n", PMob->id);
	}
}