diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 280aef3..3fe8827 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -650,6 +650,8 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa m_curSelection = 0; m_lootGuid = 0; + m_selectedGobject = 0; m_comboTarget = 0; m_comboPoints = 0; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a04494c..30a2446 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1531,6 +1531,10 @@ class Player : public Unit, public GridObject Player *GetSelectedPlayer() const; void SetSelection(const uint64 &guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); } + uint32 m_selectedGobject; + uint32 GetSelectedGobject() { return m_selectedGobject; } + void SetSelectedGobject(uint32 gobId) { m_selectedGobject = gobId; } + uint8 GetComboPoints() { return m_comboPoints; } const uint64& GetComboTarget() const { return m_comboTarget; } diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index aef5e85..c884d2a 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -55,6 +55,7 @@ public: { "info", SEC_GAMEMASTER, false, &HandleGameObjectInfoCommand, "", NULL }, { "move", SEC_GAMEMASTER, false, &HandleGameObjectMoveCommand, "", NULL }, { "near", SEC_GAMEMASTER, false, &HandleGameObjectNearCommand, "", NULL }, + { "select", SEC_GAMEMASTER, false, &HandleGameObjectSelectCommand, "", NULL }, { "target", SEC_GAMEMASTER, false, &HandleGameObjectTargetCommand, "", NULL }, { "turn", SEC_GAMEMASTER, false, &HandleGameObjectTurnCommand, "", NULL }, { "add", SEC_GAMEMASTER, false, NULL, "", gobjectAddCommandTable }, @@ -71,14 +72,12 @@ public: static bool HandleGameObjectActivateCommand(ChatHandler* handler, const char* args) { - if (!*args) - return false; - + // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); - if (!cId) + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false; @@ -334,10 +333,10 @@ public: { // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); - if (!cId) + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false; @@ -380,12 +379,12 @@ public: //turn selected object static bool HandleGameObjectTurnCommand(ChatHandler* handler, const char* args) { - // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r + // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); - if (!cId) + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false; @@ -433,10 +432,10 @@ public: { // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); - if (!cId) + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false; @@ -498,10 +497,10 @@ public: { // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); - if (!cId) + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false; @@ -610,14 +609,44 @@ public: return true; } + static bool HandleGameObjectSelectCommand(ChatHandler* handler, const char* args) + { + uint32 entry = 0; + std::string name; + uint32 guid = 0; + WorldObject* obj = handler->getSelectedObject(); + + if (!*args) + { + if (obj) + entry = obj->GetEntry(); + else + entry = atoi((char*)args); + } + + GameObjectInfo const* goinfo = ObjectMgr::GetGameObjectInfo(entry); + + if (!goinfo) + return false; + + name = goinfo->name; + guid = obj->ToGameObject()->GetGUIDLow(); + + handler->PSendSysMessage("Selected GameObject [ %s ](ID: %u) which is %.3f meters away from you.", name.c_str(), entry, handler->GetSession()->GetPlayer()->GetDistance(obj)); + handler->GetSession()->GetPlayer()->SetSelectedGobject(guid); + + return true; + } + static bool HandleGameObjectSetStateCommand(ChatHandler* handler, const char* args) { // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r - char* cId = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!cId) + char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); + if (!cId && !args) return false; - uint32 lowguid = atoi(cId); + uint32 lowguid = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(cId); if (!lowguid) return false;