aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-03-23 05:35:32 +0100
committerclick <click@gonnamakeyou.com>2012-03-23 05:35:32 +0100
commit0fe4580fe0f526b864586a9cc3e7727be1980323 (patch)
tree87d3514c783f1eb188e22720ba9eba207449aca0 /src
parent479c0976abaa24ac12ba4c47116ee282332e273f (diff)
Core/Commands: Add support for ip2nation database lookups when using .pinfo command.
This will (when a full database exists) allow for seeing (approximately) which country a player might be from when doing .pinfo <player> Note: External data required for this patch to work correctly can be found at http://www.ip2nation.com/ip2nation/Download Signed-off-by: click <click@gonnamakeyou.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp15
-rwxr-xr-xsrc/server/game/World/World.cpp20
-rwxr-xr-xsrc/server/game/World/World.h2
3 files changed, 37 insertions, 0 deletions
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 062cdb331ea..c973ebe272b 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -42,6 +42,7 @@
#include "Transport.h"
#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
#include "CreatureGroups.h"
+#include "ace/INET_Addr.h"
//mute player for some times
bool ChatHandler::HandleMuteCommand(const char* args)
@@ -347,6 +348,20 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
{
last_ip = fields[3].GetString();
last_login = fields[4].GetString();
+
+ uint32 ip = inet_addr(last_ip.c_str());
+#if TRINITY_ENDIAN == BIGENDIAN
+ EndianConvertReverse(ip);
+#endif
+
+ if (QueryResult result2 = WorldDatabase.PQuery("SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE "
+ "i.ip < %u AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1", ip))
+ {
+ Field* fields2 = result2->Fetch();
+ last_ip.append(" (");
+ last_ip.append(fields2[0].GetString());
+ last_ip.append(")");
+ }
}
else
{
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 4c02d1058b2..af0c83a7a1b 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1625,6 +1625,9 @@ void World::SetInitialWorldSettings()
sLog->outString("Loading Autobroadcasts...");
LoadAutobroadcasts();
+ sLog->outString("Loading Ip2nation...");
+ LoadIp2nation();
+
///- Load and initialize scripts
sObjectMgr->LoadQuestStartScripts(); // must be after load Creature/Gameobject(Template/Data) and QuestTemplate
sObjectMgr->LoadQuestEndScripts(); // must be after load Creature/Gameobject(Template/Data) and QuestTemplate
@@ -1881,6 +1884,23 @@ void World::LoadAutobroadcasts()
sLog->outString();
}
+void World::LoadIp2nation()
+{
+ uint32 oldMSTime = getMSTime();
+
+ QueryResult result = WorldDatabase.Query("SELECT count(c.code) FROM ip2nationCountries c, ip2nation i WHERE c.code = i.country");
+ uint32 count = 0;
+
+ if (result)
+ {
+ Field* fields = result->Fetch();
+ count = fields[0].GetUInt32();
+ }
+
+ sLog->outString(">> Loaded %u ip2nation definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ sLog->outString();
+}
+
/// Update the World !
void World::Update(uint32 diff)
{
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index be4c41214ec..cab9c19da8b 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -740,6 +740,8 @@ class World
void LoadAutobroadcasts();
+ void LoadIp2nation();
+
void UpdateAreaDependentAuras();
void ProcessStartEvent();