diff options
author | megamage <none@none> | 2009-02-02 09:50:13 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-02-02 09:50:13 -0600 |
commit | d487e6d0394892634737238faa6f3d87a4718c88 (patch) | |
tree | 0bae8d885564b64ed982ddb7cc390d08208d6c3c /src/game/Level1.cpp | |
parent | f6595630c3958b157905fd5debd8b7da2efa3300 (diff) |
[7219] Improvements ins shift-links work.
* Implement support 'Hplayer' link type. Mostly as player name highlights in command messages.
* Support shift-links parsing withoyt '|c' color prefix
* Many related code cleanups.
Author: VladimirMangos
--HG--
branch : trunk
Diffstat (limited to 'src/game/Level1.cpp')
-rw-r--r-- | src/game/Level1.cpp | 144 |
1 files changed, 75 insertions, 69 deletions
diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 60ef0fc98c9..80bca8c1b2c 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -660,16 +660,9 @@ bool ChatHandler::HandleGPSCommand(const char* args) WorldObject *obj = NULL; if (*args) { - std::string name = args; - if(normalizePlayerName(name)) - obj = objmgr.GetPlayer(name.c_str()); - - if(!obj) - { - uint64 guid = extractGuidFromLink((char*)args); - if(guid) - obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*m_session->GetPlayer(),guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); - } + uint64 guid = extractGuidFromLink((char*)args); + if(guid) + obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*m_session->GetPlayer(),guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); if(!obj) { @@ -747,9 +740,8 @@ bool ChatHandler::HandleNamegoCommand(const char* args) if(!*args) return false; - std::string name = args; - - if(!normalizePlayerName(name)) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); @@ -759,13 +751,14 @@ bool ChatHandler::HandleNamegoCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + std::string nameLink = playerLink(chr->GetName()); // check online security if (HasLowerSecurity(chr, 0)) return false; if(chr->IsBeingTeleported()==true) { - PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); + PSendSysMessage(LANG_IS_TELEPORTED, nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -775,7 +768,7 @@ bool ChatHandler::HandleNamegoCommand(const char* args) if(pMap->IsBattleGroundOrArena()) { // cannot summon to bg - PSendSysMessage(LANG_CANNOT_SUMMON_TO_BG,chr->GetName()); + PSendSysMessage(LANG_CANNOT_SUMMON_TO_BG,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -785,7 +778,7 @@ bool ChatHandler::HandleNamegoCommand(const char* args) if( cMap->Instanceable() && cMap->GetInstanceId() != pMap->GetInstanceId() ) { // cannot summon from instance to instance - PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,chr->GetName()); + PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -796,15 +789,15 @@ bool ChatHandler::HandleNamegoCommand(const char* args) (m_session->GetPlayer()->GetGroup()->GetLeaderGUID() != m_session->GetPlayer()->GetGUID()) ) // the last check is a bit excessive, but let it be, just in case { - PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,chr->GetName()); + PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,nameLink.c_str()); SetSentErrorMessage(true); return false; } } - PSendSysMessage(LANG_SUMMONING, chr->GetName(),""); + PSendSysMessage(LANG_SUMMONING, nameLink.c_str(),""); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, GetName()); + ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, nameLink.c_str()); // stop flight if need if(chr->isInFlight()) @@ -827,7 +820,9 @@ bool ChatHandler::HandleNamegoCommand(const char* args) if (HasLowerSecurity(NULL, guid)) return false; - PSendSysMessage(LANG_SUMMONING, name.c_str(),GetTrinityString(LANG_OFFLINE)); + std::string nameLink = playerLink(name); + + PSendSysMessage(LANG_SUMMONING, nameLink.c_str(),GetMangosString(LANG_OFFLINE)); // in point where GM stay Player::SavePositionInDB(m_session->GetPlayer()->GetMapId(), @@ -855,9 +850,8 @@ bool ChatHandler::HandleGonameCommand(const char* args) Player* _player = m_session->GetPlayer(); - std::string name = args; - - if(!normalizePlayerName(name)) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); @@ -871,20 +865,22 @@ bool ChatHandler::HandleGonameCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; + std::string nameLink = playerLink(name); + Map* cMap = chr->GetMap(); if(cMap->IsBattleGroundOrArena()) { // only allow if gm mode is on if (!_player->isGameMaster()) { - PSendSysMessage(LANG_CANNOT_GO_TO_BG_GM,chr->GetName()); + PSendSysMessage(LANG_CANNOT_GO_TO_BG_GM,nameLink.c_str()); SetSentErrorMessage(true); return false; } // if already in a bg, don't let port to other else if (_player->GetBattleGroundId()) { - PSendSysMessage(LANG_CANNOT_GO_TO_BG_FROM_BG,chr->GetName()); + PSendSysMessage(LANG_CANNOT_GO_TO_BG_FROM_BG,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -904,7 +900,7 @@ bool ChatHandler::HandleGonameCommand(const char* args) // we are in group, we can go only if we are in the player group if (_player->GetGroup() != chr->GetGroup()) { - PSendSysMessage(LANG_CANNOT_GO_TO_INST_PARTY,chr->GetName()); + PSendSysMessage(LANG_CANNOT_GO_TO_INST_PARTY,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -938,10 +934,12 @@ bool ChatHandler::HandleGonameCommand(const char* args) _player->SetDifficulty(chr->GetDifficulty()); } - PSendSysMessage(LANG_APPEARING_AT, chr->GetName()); + PSendSysMessage(LANG_APPEARING_AT, nameLink.c_str()); + + std::string plNameLink = playerLink(_player->GetName()); if (_player->IsVisibleGloballyFor(chr)) - ChatHandler(chr).PSendSysMessage(LANG_APPEARING_TO, _player->GetName()); + ChatHandler(chr).PSendSysMessage(LANG_APPEARING_TO, plNameLink.c_str()); // stop flight if need if(_player->isInFlight()) @@ -968,7 +966,9 @@ bool ChatHandler::HandleGonameCommand(const char* args) if (HasLowerSecurity(NULL, guid)) return false; - PSendSysMessage(LANG_APPEARING_AT, name.c_str()); + std::string nameLink = playerLink(name); + + PSendSysMessage(LANG_APPEARING_AT, nameLink.c_str()); // to point where player stay (if loaded) float x,y,z,o; @@ -1014,9 +1014,8 @@ bool ChatHandler::HandleRecallCommand(const char* args) } else { - std::string name = args; - - if(!normalizePlayerName(name)) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); @@ -1039,7 +1038,8 @@ bool ChatHandler::HandleRecallCommand(const char* args) if(chr->IsBeingTeleported()) { - PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); + std::string nameLink = playerLink(chr->GetName()); + PSendSysMessage(LANG_IS_TELEPORTED, nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -2399,9 +2399,13 @@ bool ChatHandler::HandleSendMailCommand(const char* args) // format: name "subject text" "mail text" - char* pName = strtok((char*)args, " "); - if(!pName) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage(true); return false; + } char* tail1 = strtok(NULL, ""); if(!tail1) @@ -2439,18 +2443,10 @@ bool ChatHandler::HandleSendMailCommand(const char* args) if (!msgText) return false; - // pName, msgSubject, msgText isn't NUL after prev. check - std::string name = pName; + // msgSubject, msgText isn't NUL after prev. check std::string subject = msgSubject; std::string text = msgText; - if(!normalizePlayerName(name)) - { - SendSysMessage(LANG_PLAYER_NOT_FOUND); - SetSentErrorMessage(true); - return false; - } - uint64 receiver_guid = objmgr.GetPlayerGUIDByName(name); if(!receiver_guid) { @@ -2470,7 +2466,8 @@ bool ChatHandler::HandleSendMailCommand(const char* args) WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, NULL, 0, 0, MAIL_CHECK_MASK_NONE); - PSendSysMessage(LANG_MAIL_SENT, name.c_str()); + std::string nameLink = playerLink(name); + PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); return true; } @@ -2480,14 +2477,8 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) if(!*args) return false; - char* pName = strtok((char*)args, " "); - - if(!pName) - return false; - - std::string name = pName; - - if(!normalizePlayerName(name)) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); @@ -2522,16 +2513,21 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) if (HasLowerSecurity(chr, 0)) return false; + std::string nameLink = playerLink(name); + if(chr->IsBeingTeleported()==true) { - PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); + PSendSysMessage(LANG_IS_TELEPORTED, nameLink.c_str()); SetSentErrorMessage(true); return false; } PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName()); + { + std::string plNameLink = playerLink(GetName()); + ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, plNameLink.c_str()); + } // stop flight if need if(chr->isInFlight()) @@ -2545,13 +2541,15 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) chr->TeleportTo(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation); } - else if (uint64 guid = objmgr.GetPlayerGUIDByName(name.c_str())) + else if (uint64 guid = objmgr.GetPlayerGUIDByName(name)) { // check offline security if (HasLowerSecurity(NULL, guid)) return false; - PSendSysMessage(LANG_TELEPORTING_TO, name.c_str(), GetTrinityString(LANG_OFFLINE), tele->name.c_str()); + std::string nameLink = playerLink(name); + + PSendSysMessage(LANG_TELEPORTING_TO, nameLink.c_str(), GetMangosString(LANG_OFFLINE), tele->name.c_str()); Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation, MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y,tele->position_z),guid); } @@ -2595,10 +2593,13 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) SetSentErrorMessage(true); return false; } + + std::string nameLink = playerLink(player->GetName()); + Group *grp = player->GetGroup(); if(!grp) { - PSendSysMessage(LANG_NOT_IN_GROUP,player->GetName()); + PSendSysMessage(LANG_NOT_IN_GROUP,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -2614,15 +2615,17 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) if (HasLowerSecurity(pl, 0)) return false; + std::string plNameLink = playerLink(pl->GetName()); + if(pl->IsBeingTeleported()) { - PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); + PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); continue; } - PSendSysMessage(LANG_TELEPORTING_TO, pl->GetName(),"", tele->name.c_str()); + PSendSysMessage(LANG_TELEPORTING_TO, plNameLink.c_str(),"", tele->name.c_str()); if (needReportToTarget(pl)) - ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName()); + ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str()); // stop flight if need if(pl->isInFlight()) @@ -2646,9 +2649,8 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) if(!*args) return false; - std::string name = args; - - if(!normalizePlayerName(name)) + std::string name = extractPlayerNameFromLink((char*)args); + if(name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); @@ -2669,9 +2671,11 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) Group *grp = player->GetGroup(); + std::string nameLink = playerLink(name); + if(!grp) { - PSendSysMessage(LANG_NOT_IN_GROUP,player->GetName()); + PSendSysMessage(LANG_NOT_IN_GROUP,nameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -2701,9 +2705,11 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) if (HasLowerSecurity(pl, 0)) return false; + std::string plNameLink = playerLink(name); + if(pl->IsBeingTeleported()==true) { - PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); + PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -2715,15 +2721,15 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) if ( plMap->Instanceable() && plMap->GetInstanceId() != gmMap->GetInstanceId() ) { // cannot summon from instance to instance - PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,pl->GetName()); + PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST,plNameLink.c_str()); SetSentErrorMessage(true); return false; } } - PSendSysMessage(LANG_SUMMONING, pl->GetName(),""); + PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(),""); if (needReportToTarget(pl)) - ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, GetName()); + ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, nameLink.c_str()); // stop flight if need if(pl->isInFlight()) |