bool CMobController::TrySpecialSkill() { // get my special skill CMobSkill* PSpecialSkill = battleutils::GetMobSkill(PMob->getMobMod(MOBMOD_SPECIAL_SKILL)); CBattleEntity* PAbilityTarget = nullptr; m_LastSpecialTime = m_Tick; if (PSpecialSkill == nullptr) { ShowError("CAIMobDummy::ActionSpawn Special skill was set but not found! (%d)\n", PMob->getMobMod(MOBMOD_SPECIAL_SKILL)); return false; } if (!IsWeaponSkillEnabled()) { return false; } if ((PMob->m_specialFlags & SPECIALFLAG_HIDDEN) && !PMob->IsNameHidden()) { return false; } if (PSpecialSkill->getValidTargets() & TARGET_SELF) { PAbilityTarget = PMob; } else if (PTarget != nullptr) { // distance check for special skill float currentDistance = distance(PMob->loc.p, PTarget->loc.p); if (currentDistance <= PSpecialSkill->getDistance()) { PAbilityTarget = PTarget; } else { return false; } } else { return false; } if (luautils::OnMobSkillCheck(PAbilityTarget, PMob, PSpecialSkill) == 0) { return MobSkill(PAbilityTarget->targid, PSpecialSkill->getID()); } return false; }