[Fix] Boats should never get FixZ'd (#2246)

* Boats should never get FixZ'd

* Use member variable to avoid repetitive checks

* Resolve comments from review

* Fix return type
This commit is contained in:
Paul Coene 2022-07-02 14:49:45 -04:00 committed by GitHub
parent 15113f4056
commit 3936b2b882
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 4 deletions

View File

@ -512,6 +512,8 @@ Mob::Mob(
mob_close_scan_timer.Trigger();
SetCanOpenDoors(true);
is_boat = IsBoat();
}
Mob::~Mob()
@ -3741,7 +3743,7 @@ bool Mob::HateSummon() {
void Mob::FaceTarget(Mob* mob_to_face /*= 0*/) {
if (IsBoat()) {
if (GetIsBoat()) {
return;
}

View File

@ -630,7 +630,9 @@ public:
inline const float GetSize() const { return size; }
inline const float GetBaseSize() const { return base_size; }
inline const GravityBehavior GetFlyMode() const { return flymode; }
bool IsBoat() const;
bool IsBoat() const; // Checks races - used on mob instantiation
bool GetIsBoat() const { return is_boat; } // Set on instantiation for speed
void SetIsBoat(bool boat) { is_boat = boat; }
bool IsControllableBoat() const;
inline const bool AlwaysAggro() const { return always_aggro; }
@ -1664,6 +1666,7 @@ protected:
bool endur_upkeep;
bool degenerating_effects; // true if we have a buff that needs to be recalced every tick
bool spawned_in_water;
bool is_boat;
CombatRecord combat_record{};

View File

@ -1075,7 +1075,7 @@ void MobMovementManager::UpdatePath(Mob *who, float x, float y, float z, MobMove
return;
}
if (who->IsBoat()) {
if (who->GetIsBoat()) {
UpdatePathBoat(who, x, y, z, mob_movement_mode);
}
else if (who->IsUnderwaterOnly()) {

View File

@ -236,7 +236,7 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi
if (npc_type_data->flymode >= 0) {
flymode = static_cast<GravityBehavior>(npc_type_data->flymode);
}
else if (IsBoat()) {
else if (GetIsBoat()) {
flymode = GravityBehavior::Floating;
}

View File

@ -809,6 +809,10 @@ void Mob::FixZ(int32 z_find_offset /*= 5*/, bool fix_client_z /*= false*/) {
return;
}
if (GetIsBoat()) {
return;
}
if (flymode == GravityBehavior::Flying) {
return;
}