void CAIController::CastSpell(uint16 spellid) { CSpell* PSpell = spell::GetSpell(spellid); if (PSpell == nullptr) { ShowWarning(CL_YELLOW"ai_mob_dummy::CastSpell: SpellId <%i> is not found\n" CL_RESET, spellid); } else { CBattleEntity* PCastTarget = nullptr; // check valid targets if (PSpell->getValidTarget() & TARGET_SELF) { PCastTarget = PMob; // only buff other targets if i'm roaming if ((PSpell->getValidTarget() & TARGET_PLAYER_PARTY)) { // chance to target my master if (PMob->PMaster != nullptr && dsprand::GetRandomNumber(2) == 0) { // target my master PCastTarget = PMob->PMaster; } else if (dsprand::GetRandomNumber(2) == 0) { // chance to target party PMob->PAI->TargetFind->reset(); PMob->PAI->TargetFind->findWithinArea(PMob, AOERADIUS_ATTACKER, PSpell->getMaxRange()); if (!PMob->PAI->TargetFind->m_targets.empty()) { // randomly select a target PCastTarget = PMob->PAI->TargetFind->m_targets[dsprand::GetRandomNumber(PMob->PAI->TargetFind->m_targets.size())]; // only target if are on same action if (PMob->PAI->IsEngaged() == PCastTarget->PAI->IsEngaged()) { PCastTarget = PMob; } } } } } else { PCastTarget = PTarget; } Cast(PCastTarget->targid, spellid); } }