bool Mob::CombatRange(Mob* other) { if(!other) return(false); float size_mod = GetSize(); float other_size_mod = other->GetSize(); if(GetRace() == 49 || GetRace() == 158 || GetRace() == 196) //For races with a fixed size size_mod = 60.0f; else if (size_mod < 6.0) size_mod = 8.0f; if(other->GetRace() == 49 || other->GetRace() == 158 || other->GetRace() == 196) //For races with a fixed size other_size_mod = 60.0f; else if (other_size_mod < 6.0) other_size_mod = 8.0f; if (other_size_mod > size_mod) { size_mod = other_size_mod; } // this could still use some work, but for now it's an improvement.... if (size_mod > 29) size_mod *= size_mod; else if (size_mod > 19) size_mod *= size_mod * 2; else size_mod *= size_mod * 4; // prevention of ridiculously sized hit boxes if (size_mod > 10000) size_mod = size_mod / 7; if (DistNoRoot(*other) <= size_mod) { return true; } return false; }
bool Mob::CombatRange(Mob* other) { if(!other) return(false); float size_mod = GetSize(); float other_size_mod = other->GetSize(); if(GetRace() == 49 || GetRace() == 158 || GetRace() == 196) //For races with a fixed size size_mod = 60.0f; else if (size_mod < 6.0) size_mod = 8.0f; if(other->GetRace() == 49 || other->GetRace() == 158 || other->GetRace() == 196) //For races with a fixed size other_size_mod = 60.0f; else if (other_size_mod < 6.0) other_size_mod = 8.0f; if (other_size_mod > size_mod) { size_mod = other_size_mod; } // this could still use some work, but for now it's an improvement.... if (size_mod > 29) size_mod *= size_mod; else if (size_mod > 19) size_mod *= size_mod * 2; else size_mod *= size_mod * 4; // prevention of ridiculously sized hit boxes if (size_mod > 10000) size_mod = size_mod / 7; float _DistNoRoot = DistNoRoot(*other); if (GetSpecialAbility(NPC_CHASE_DISTANCE)){ bool DoLoSCheck = true; float max_dist = static_cast<float>(GetSpecialAbilityParam(NPC_CHASE_DISTANCE, 0)); float min_dist = static_cast<float>(GetSpecialAbilityParam(NPC_CHASE_DISTANCE, 1)); if (GetSpecialAbilityParam(NPC_CHASE_DISTANCE, 2)) DoLoSCheck = false; //Ignore line of sight check if (max_dist == 1) max_dist = 250.0f; //Default it to 250 if you forget to put a value max_dist = max_dist * max_dist; if (!min_dist) min_dist = size_mod; //Default to melee range else min_dist = min_dist * min_dist; if ((DoLoSCheck && CheckLastLosState()) && (_DistNoRoot >= min_dist && _DistNoRoot <= max_dist)) SetPseudoRoot(true); else SetPseudoRoot(false); } if (_DistNoRoot <= size_mod) { return true; } return false; }