diff options
author | Subv <s.v.h21@hotmail.com> | 2012-09-09 16:35:22 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-09-09 16:35:22 -0500 |
commit | 271e9cb9e628177d37d45effbd39e7a31f8c9910 (patch) | |
tree | 6bf94b3576f23850970973cbd10741e09afacfd2 /src | |
parent | ca7bab19e0b05952be494ee1efd7b0ab9aebfa1b (diff) |
Core/Entities: Fixed the "Move To" command for pets.
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 18 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.h | 2 |
3 files changed, 18 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 428769ab42c..ea892514e1a 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1042,7 +1042,8 @@ enum CommandStates COMMAND_STAY = 0, COMMAND_FOLLOW = 1, COMMAND_ATTACK = 2, - COMMAND_ABANDON = 3 + COMMAND_ABANDON = 3, + COMMAND_MOVE_TO = 4 }; #define UNIT_ACTION_BUTTON_ACTION(X) (uint32(X) & 0x00FFFFFF) diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 85d4ce83990..db077011ee0 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -102,7 +102,7 @@ void WorldSession::HandlePetAction(WorldPacket & recvData) return; if (GetPlayer()->m_Controlled.size() == 1) - HandlePetActionHelper(pet, guid1, spellid, flag, guid2); + HandlePetActionHelper(pet, guid1, spellid, flag, guid2, x, y, z); else { //If a pet is dismissed, m_Controlled will change @@ -111,7 +111,7 @@ void WorldSession::HandlePetAction(WorldPacket & recvData) if ((*itr)->GetEntry() == pet->GetEntry() && (*itr)->isAlive()) controlled.push_back(*itr); for (std::vector<Unit*>::iterator itr = controlled.begin(); itr != controlled.end(); ++itr) - HandlePetActionHelper(*itr, guid1, spellid, flag, guid2); + HandlePetActionHelper(*itr, guid1, spellid, flag, guid2, x, y, z); } } @@ -142,7 +142,7 @@ void WorldSession::HandlePetStopAttack(WorldPacket &recvData) pet->AttackStop(); } -void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2) +void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2, float x, float y, float z) { CharmInfo* charmInfo = pet->GetCharmInfo(); if (!charmInfo) @@ -267,6 +267,18 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid } } break; + case COMMAND_MOVE_TO: + pet->StopMoving(); + pet->GetMotionMaster()->Clear(false); + pet->GetMotionMaster()->MovePoint(0, x, y, z); + charmInfo->SetCommandState(COMMAND_MOVE_TO); + + charmInfo->SetIsCommandAttack(false); + charmInfo->SetIsAtStay(true); + charmInfo->SetIsFollowing(false); + charmInfo->SetIsReturning(false); + charmInfo->SaveStayPosition(); + break; default: sLog->outError(LOG_FILTER_NETWORKIO, "WORLD: unknown PET flag Action %i and spellid %i.", uint32(flag), spellid); } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 6490b38105c..e44514847d6 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -764,7 +764,7 @@ class WorldSession //Pet void HandlePetAction(WorldPacket& recvData); void HandlePetStopAttack(WorldPacket& recvData); - void HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2); + void HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2, float x, float y, float z); void HandlePetNameQuery(WorldPacket& recvData); void HandlePetSetAction(WorldPacket& recvData); void HandlePetAbandon(WorldPacket& recvData); |