aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorleak <leakzx@googlemail.com>2011-08-13 13:00:38 +0200
committerleak <leakzx@googlemail.com>2011-08-13 13:00:38 +0200
commit91a3bfe42a611519c1df2f9901acaa1aa600dc31 (patch)
treef099e91ccb2e9d132efe8f306be87e707187b422 /src
parentbac78de2034d0bfd0da7f7e9c00e833ef44eb5e8 (diff)
Core/Commands: .pinfo improvements
- Allow .pinfo <guid> - Add map/zone/subzone/phase to output
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp62
-rwxr-xr-xsrc/server/game/Miscellaneous/Language.h12
-rwxr-xr-xsrc/server/shared/Utilities/Util.cpp6
3 files changed, 65 insertions, 15 deletions
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 3c8c4325e72..a0f590eca91 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -241,7 +241,15 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
Player* target;
uint64 target_guid;
std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+
+ uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
+
+ if (sObjectMgr->GetPlayerNameByGUID(parseGUID, target_name))
+ {
+ target = sObjectMgr->GetPlayerByLowGUID(parseGUID);
+ target_guid = parseGUID;
+ }
+ else if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
return false;
uint32 accId = 0;
@@ -253,6 +261,10 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
uint8 Class;
int64 muteTime = 0;
int64 banTime = -1;
+ uint32 mapId;
+ uint32 areaId;
+ uint32 phase = 0;
+
// get additional information from Player object
if (target)
@@ -269,6 +281,9 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
race = target->getRace();
Class = target->getClass();
muteTime = target->GetSession()->m_muteTime;
+ mapId = target->GetMapId();
+ areaId = target->GetAreaId();
+ phase = target->GetPhaseMask();
}
// get additional information from DB
else
@@ -277,8 +292,9 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
if (HasLowerSecurity(NULL, target_guid))
return false;
- // 0 1 2 3 4 5
- QueryResult result = CharacterDatabase.PQuery("SELECT totaltime, level, money, account, race, class FROM characters WHERE guid = '%u'", GUID_LOPART(target_guid));
+ // 0 1 2 3 4 5 6 7
+ QueryResult result = CharacterDatabase.PQuery("SELECT totaltime, level, money, account, race, class, map, zone FROM characters "
+ "WHERE guid = '%u'", GUID_LOPART(target_guid));
if (!result)
return false;
@@ -289,6 +305,8 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
accId = fields[3].GetUInt32();
race = fields[4].GetUInt8();
Class = fields[5].GetUInt8();
+ mapId = fields[6].GetUInt16();
+ areaId = fields[7].GetUInt16();
}
std::string username = GetTrinityString(LANG_ERROR);
@@ -329,20 +347,30 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
PSendSysMessage(LANG_PINFO_ACCOUNT, (target?"":GetTrinityString(LANG_OFFLINE)), nameLink.c_str(), GUID_LOPART(target_guid), username.c_str(), accId, email.c_str(), security, last_ip.c_str(), last_login.c_str(), latency);
- if (QueryResult result = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate FROM account_banned WHERE id = '%u' AND active ORDER BY bandate ASC LIMIT 1", accId))
+ std::string bannedby = "unknown";
+ std::string banreason = "";
+ if (QueryResult result = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned "
+ "WHERE id = '%u' AND active ORDER BY bandate ASC LIMIT 1", accId))
{
Field * fields = result->Fetch();
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
+ bannedby = fields[2].GetString();
+ banreason = fields[3].GetString();
}
- else if (QueryResult result = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate FROM character_banned WHERE guid = '%u' AND active ORDER BY bandate ASC LIMIT 1", GUID_LOPART(target_guid)))
+ else if (QueryResult result = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned "
+ "WHERE guid = '%u' AND active ORDER BY bandate ASC LIMIT 1", GUID_LOPART(target_guid)))
{
Field * fields = result->Fetch();
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
+ bannedby = fields[2].GetString();
+ banreason = fields[3].GetString();
}
- muteTime = muteTime - time(NULL);
- if (muteTime > 0 || banTime >= 0)
- PSendSysMessage(LANG_PINFO_MUTE_BAN, muteTime > 0 ? secsToTimeString(muteTime, true).c_str() : "---", !banTime ? "perm." : (banTime > 0 ? secsToTimeString(banTime - time(NULL), true).c_str() : "---"));
+ if (muteTime > 0)
+ PSendSysMessage(LANG_PINFO_MUTE, secsToTimeString(muteTime - time(NULL), true).c_str());
+
+ if (banTime >= 0)
+ PSendSysMessage(LANG_PINFO_BAN, banTime > 0 ? secsToTimeString(banTime - time(NULL), true).c_str() : "permanently", bannedby.c_str(), banreason.c_str());
std::string race_s, Class_s;
switch(race)
@@ -378,6 +406,24 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
uint32 copp = (money % GOLD) % SILVER;
PSendSysMessage(LANG_PINFO_LEVEL, race_s.c_str(), Class_s.c_str(), timeStr.c_str(), level, gold, silv, copp);
+ // Add map, zone, subzone and phase to output
+ int locale = GetSessionDbcLocale();
+
+ MapEntry const* map = sMapStore.LookupEntry(mapId);
+
+ AreaTableEntry const* area = GetAreaEntryByAreaID(areaId);
+ AreaTableEntry const* zone = NULL;
+
+ if (target)
+ {
+ if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone))
+ PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zone->area_name[locale], area->area_name[locale], phase);
+ else
+ PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], area->area_name[locale], "--", phase);
+ }
+ else
+ PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], area->area_name[locale]);
+
return true;
}
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index d160d42e19c..2846efe9189 100755
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -399,7 +399,7 @@ enum TrinityStrings
LANG_COMMAND_GRAVEYARDALRLINKED = 450,
LANG_COMMAND_GRAVEYARDLINKED = 451,
LANG_COMMAND_GRAVEYARDWRONGZONE = 452,
- // = 453,
+ // = 453, see LANG_PINFO_BAN
LANG_COMMAND_GRAVEYARDERROR = 454,
LANG_COMMAND_GRAVEYARD_NOTEAM = 455,
LANG_COMMAND_GRAVEYARD_ANY = 456,
@@ -512,7 +512,10 @@ enum TrinityStrings
LANG_PINFO_ACCOUNT = 548,
LANG_PINFO_LEVEL = 549,
- LANG_PINFO_MUTE_BAN = 550,
+ LANG_PINFO_MUTE = 550,
+ LANG_PINFO_BAN = 453,
+ LANG_PINFO_MAP_ONLINE = 714,
+ LANG_PINFO_MAP_OFFLINE = 716,
LANG_YOU_SET_EXPLORE_ALL = 551,
LANG_YOU_SET_EXPLORE_NOTHING = 552,
@@ -570,6 +573,7 @@ enum TrinityStrings
LANG_GMLIST = 597,
LANG_GMLIST_HEADER = 598,
LANG_GMLIST_EMPTY = 599,
+
// End Level 3 list, continued at 1100
// Battleground
@@ -656,9 +660,9 @@ enum TrinityStrings
LANG_BG_QUEUE_ANNOUNCE_SELF = 711,
LANG_BG_QUEUE_ANNOUNCE_WORLD = 712,
LANG_YOUR_ARENA_LEVEL_REQ_ERROR = 713,
-// = 714, not used
+// = 714, see LANG_PINFO_MAP_ONLINE
LANG_YOUR_BG_LEVEL_REQ_ERROR = 715,
-// = 716, not used
+// = 716, see LANG_PINFO_MAP_OFFLINE
LANG_BG_STARTED_ANNOUNCE_WORLD = 717,
LANG_ARENA_QUEUE_ANNOUNCE_WORLD_JOIN= 718,
LANG_ARENA_QUEUE_ANNOUNCE_WORLD_EXIT= 719,
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 47e18943f75..6a78897bbe0 100755
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -162,13 +162,13 @@ std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly)
std::ostringstream ss;
if(days)
- ss << days << (shortText ? "d" : " Day(s) ");
+ ss << days << (shortText ? "d " : " Day(s) ");
if(hours || hoursOnly)
- ss << hours << (shortText ? "h" : " Hour(s) ");
+ ss << hours << (shortText ? "h " : " Hour(s) ");
if(!hoursOnly)
{
if(minutes)
- ss << minutes << (shortText ? "m" : " Minute(s) ");
+ ss << minutes << (shortText ? "m " : " Minute(s) ");
if(secs || (!days && !hours && !minutes) )
ss << secs << (shortText ? "s" : " Second(s).");
}