diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_lfg.cpp | 53 | 
1 files changed, 42 insertions, 11 deletions
| diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 747d84de9c5..320350c9e0d 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -20,6 +20,7 @@  #include "Language.h"  #include "LFGMgr.h"  #include "Group.h" +#include "GroupMgr.h"  #include "Player.h"  void GetPlayerInfo(ChatHandler* handler, Player* player) @@ -74,25 +75,55 @@ public:      static bool HandleLfgGroupInfoCommand(ChatHandler* handler, char const* args)      { -        Player* target = NULL; -        std::string playerName; -        if (!handler->extractPlayerTarget((char*)args, &target, NULL, &playerName)) +        Player* playerTarget; +        ObjectGuid guidTarget; +        std::string nameTarget; + +        ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + +        if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) +        { +            playerTarget = ObjectAccessor::FindPlayer(parseGUID); +            guidTarget = parseGUID; +        } +        else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))              return false; -        Group* grp = target->GetGroup(); -        if (!grp) +        Group* groupTarget = NULL; + +        if (playerTarget) +            groupTarget = playerTarget->GetGroup(); +        else +        { +            PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); +            stmt->setUInt32(0, guidTarget.GetCounter()); +            PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); +            if (resultGroup) +                groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); +        } +        if (!groupTarget)          { -            handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, playerName.c_str()); -            return true; +            handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, nameTarget.c_str()); +            handler->SetSentErrorMessage(true); +            return false;          } -        ObjectGuid guid = grp->GetGUID(); +        ObjectGuid guid = groupTarget->GetGUID();          std::string const& state = lfg::GetStateString(sLFGMgr->GetState(guid)); -        handler->PSendSysMessage(LANG_LFG_GROUP_INFO, grp->isLFGGroup(), +        handler->PSendSysMessage(LANG_LFG_GROUP_INFO, groupTarget->isLFGGroup(),              state.c_str(), sLFGMgr->GetDungeon(guid)); -        for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) -            GetPlayerInfo(handler, itr->GetSource()); +        Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); + +        for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr) +        { +            Group::MemberSlot const& slot = *itr; +            Player* p = ObjectAccessor::FindPlayer((*itr).guid); +            if (p) +                GetPlayerInfo(handler, p); +            else +                handler->PSendSysMessage("%s is offline.", slot.name.c_str()); +        }          return true;      } | 
