bool ARechargeShields::CanUse(int TargetID, long AbilityID, long SkillID) { // Get the skill level m_SkillLevel = (float) m_Player->PlayerIndex()->RPGInfo.Skills.Skill[SkillID].GetLevel(); m_SkillRank = DetermineSkillRank(AbilityID); m_AbilityID = AbilityID; m_SkillID = SkillID; ObjectManager *om = m_Player->GetObjectManager(); //Skill does not exist. if(m_SkillRank == -1) { return false; } // Make sure we are not dead if (m_Player->ShipIndex()->GetIsIncapacitated()) { SendError("Can not use this ability while dead!"); return false; } // See if we can use this skill if (TargetID > 0 && m_SkillRank >= 3 && om) { Object * Target = om->GetObjectFromID(TargetID); // Get Target if (Target && Target->ObjectType() != m_TargetType) { SendError("Incorrect target type!"); return false; } // See if we are in range if (Target->RangeFrom(m_Player->Position()) > CalculateRange(m_SkillLevel, m_SkillRank)) { SendError("Out of range!"); return false; } if(g_PlayerMgr->GetPlayer(TargetID)->ShipIndex()->GetIsIncapacitated()) { SendError("Cannot recharge a dead player!"); return false; } } //If we are prospecting we cannot use this skill if (m_Player->Prospecting()) { SendError("Cannot use while prospecting."); return false; } //if we are warping we cannot use the skill if (m_Player->WarpDrive()) { SendError("Cannot use while in warp."); return false; } return true; }