diff --git a/zone/lua_npc.cpp b/zone/lua_npc.cpp index e247e34e3..8e04a9ae6 100644 --- a/zone/lua_npc.cpp +++ b/zone/lua_npc.cpp @@ -314,22 +314,22 @@ int Lua_NPC::GetSpawnPointID() { float Lua_NPC::GetSpawnPointX() { Lua_Safe_Call_Real(); - return self->GetSpawnPointX(); + return self->GetSpawnPoint().m_X; } float Lua_NPC::GetSpawnPointY() { Lua_Safe_Call_Real(); - return self->GetSpawnPointY(); + return self->GetSpawnPoint().m_Y; } float Lua_NPC::GetSpawnPointZ() { Lua_Safe_Call_Real(); - return self->GetSpawnPointZ(); + return self->GetSpawnPoint().m_Z; } float Lua_NPC::GetSpawnPointH() { Lua_Safe_Call_Real(); - return self->GetSpawnPointH(); + return self->GetSpawnPoint().m_Heading; } float Lua_NPC::GetGuardPointX() { diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 9c720957e..c510aa035 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1125,19 +1125,20 @@ void Mob::AI_Process() { if(DivineAura()) return; + auto npcSpawnPoint = CastToNPC()->GetSpawnPoint(); if(GetSpecialAbility(TETHER)) { float tether_range = static_cast(GetSpecialAbilityParam(TETHER, 0)); tether_range = tether_range > 0.0f ? tether_range * tether_range : pAggroRange * pAggroRange; - if(DistNoRootNoZ(CastToNPC()->GetSpawnPointX(), CastToNPC()->GetSpawnPointY()) > tether_range) { - GMMove(CastToNPC()->GetSpawnPointX(), CastToNPC()->GetSpawnPointY(), CastToNPC()->GetSpawnPointZ(), CastToNPC()->GetSpawnPointH()); + if(DistNoRootNoZ(npcSpawnPoint.m_X, npcSpawnPoint.m_Y) > tether_range) { + GMMove(npcSpawnPoint.m_X, npcSpawnPoint.m_Y, npcSpawnPoint.m_Z, npcSpawnPoint.m_Heading); } } else if(GetSpecialAbility(LEASH)) { float leash_range = static_cast(GetSpecialAbilityParam(LEASH, 0)); leash_range = leash_range > 0.0f ? leash_range * leash_range : pAggroRange * pAggroRange; - if(DistNoRootNoZ(CastToNPC()->GetSpawnPointX(), CastToNPC()->GetSpawnPointY()) > leash_range) { - GMMove(CastToNPC()->GetSpawnPointX(), CastToNPC()->GetSpawnPointY(), CastToNPC()->GetSpawnPointZ(), CastToNPC()->GetSpawnPointH()); + if(DistNoRootNoZ(npcSpawnPoint.m_X, npcSpawnPoint.m_Y) > leash_range) { + GMMove(npcSpawnPoint.m_X, npcSpawnPoint.m_Y, npcSpawnPoint.m_Z, npcSpawnPoint.m_Heading); SetHP(GetMaxHP()); BuffFadeAll(); WipeHateList(); diff --git a/zone/npc.h b/zone/npc.h index 4bb15de9a..55b613289 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -211,10 +211,7 @@ public: uint32 GetSp2() const { return spawn_group; } uint32 GetSpawnPointID() const; - float GetSpawnPointX() const { return m_SpawnPoint.m_X; } - float GetSpawnPointY() const { return m_SpawnPoint.m_Y; } - float GetSpawnPointZ() const { return m_SpawnPoint.m_Z; } - float GetSpawnPointH() const { return m_SpawnPoint.m_Heading; } + xyz_heading const GetSpawnPoint() const { return m_SpawnPoint; } xyz_heading const GetGuardPoint() const { return m_GuardPoint; } EmuAppearance GetGuardPointAnim() const { return guard_anim; } void SaveGuardPointAnim(EmuAppearance anim) { guard_anim = anim; } diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index 2696eae7d..f12f97d26 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -1545,7 +1545,7 @@ XS(XS_NPC_GetSpawnPointX) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPointX(); + RETVAL = THIS->GetSpawnPoint().m_X; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1572,7 +1572,7 @@ XS(XS_NPC_GetSpawnPointY) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPointY(); + RETVAL = THIS->GetSpawnPoint().m_Y; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1599,7 +1599,7 @@ XS(XS_NPC_GetSpawnPointZ) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPointZ(); + RETVAL = THIS->GetSpawnPoint().m_Z; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1626,7 +1626,7 @@ XS(XS_NPC_GetSpawnPointH) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPointH(); + RETVAL = THIS->GetSpawnPoint().m_Heading; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1);