bool ChatHandler::HandlePDumpWriteCommand(const char *args) { if (!*args) return false; char* file = strtok((char*)args, " "); char* p2 = strtok(NULL, " "); if (!file || !p2) return false; uint64 guid; // character name can't start from number if (isNumeric(p2)) guid = MAKE_NEW_GUID(atoi(p2), 0, HIGHGUID_PLAYER); else { std::string name = extractPlayerNameFromLink(p2); if (name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } guid = sObjectMgr->GetPlayerGUIDByName(name); } if (!sObjectMgr->GetPlayerAccountIdByGUID(guid)) { PSendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } switch (PlayerDumpWriter().WriteDump(file, uint32(guid))) { case DUMP_SUCCESS: PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS); break; case DUMP_FILE_OPEN_ERROR: PSendSysMessage(LANG_FILE_OPEN_FAIL, file); SetSentErrorMessage(true); return false; case DUMP_CHARACTER_DELETED: PSendSysMessage(LANG_COMMAND_EXPORT_DELETED_CHAR); SetSentErrorMessage(true); return false; default: PSendSysMessage(LANG_COMMAND_EXPORT_FAILED); SetSentErrorMessage(true); return false; } return true; }
bool ChatHandler::extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid /*=NULL*/, std::string* player_name /*= NULL*/) { if (args && *args) { std::string name = extractPlayerNameFromLink(args); if (name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } Player* pl = ObjectAccessor::FindPlayerByName(name); // if allowed player pointer if (player) *player = pl; // if need guid value from DB (in name case for check player existence) ObjectGuid guid = !pl && (player_guid || player_name) ? sObjectMgr->GetPlayerGUIDByName(name) : ObjectGuid::Empty; // if allowed player guid (if no then only online players allowed) if (player_guid) *player_guid = pl ? pl->GetGUID() : guid; if (player_name) *player_name = pl || guid ? name : ""; } else { Player* pl = getSelectedPlayerOrSelf(); // if allowed player pointer if (player) *player = pl; // if allowed player guid (if no then only online players allowed) if (player_guid) *player_guid = pl ? pl->GetGUID() : ObjectGuid::Empty; if (player_name) *player_name = pl ? pl->GetName() : ""; } // some from req. data must be provided (note: name is empty if player not exist) if ((!player || !*player) && (!player_guid || !*player_guid) && (!player_name || player_name->empty())) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } return true; }