aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2012-12-30 17:09:55 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2012-12-30 17:10:54 +0100
commitee9b7dfef8059f05ab404c48dd34929283d48963 (patch)
tree56561b7274eb87f381d1a823c1ccd1c91163309f /src/server/scripts/Commands
parent3d63deca7e2396f12996e5534e834bd7b077041e (diff)
Core/Command: Add command for near creature finding
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 115737e0dfe..b44b01d916f 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -87,6 +87,7 @@ public:
static ChatCommand npcCommandTable[] =
{
{ "info", SEC_ADMINISTRATOR, false, &HandleNpcInfoCommand, "", NULL },
+ { "near", SEC_GAMEMASTER, false, &HandleNpcNearCommand, "", NULL },
{ "move", SEC_GAMEMASTER, false, &HandleNpcMoveCommand, "", NULL },
{ "playemote", SEC_ADMINISTRATOR, false, &HandleNpcPlayEmoteCommand, "", NULL },
{ "say", SEC_MODERATOR, false, &HandleNpcSayCommand, "", NULL },
@@ -631,6 +632,52 @@ public:
return true;
}
+ static bool HandleNpcNearCommand(ChatHandler* handler, char const* args)
+ {
+ float distance = (!*args) ? 10.0f : float((atof(args)));
+ uint32 count = 0;
+
+ Player* player = handler->GetSession()->GetPlayer();
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_NEAREST);
+ stmt->setFloat(0, player->GetPositionX());
+ stmt->setFloat(1, player->GetPositionY());
+ stmt->setFloat(2, player->GetPositionZ());
+ stmt->setUInt32(3, player->GetMapId());
+ stmt->setFloat(4, player->GetPositionX());
+ stmt->setFloat(5, player->GetPositionY());
+ stmt->setFloat(6, player->GetPositionZ());
+ stmt->setFloat(7, distance * distance);
+ PreparedQueryResult result = WorldDatabase.Query(stmt);
+
+ if (result)
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 guid = fields[0].GetUInt32();
+ uint32 entry = fields[1].GetUInt32();
+ float x = fields[2].GetFloat();
+ float y = fields[3].GetFloat();
+ float z = fields[4].GetFloat();
+ uint16 mapId = fields[5].GetUInt16();
+
+ CreatureTemplate const* creatureTemplate = sObjectMgr->GetCreatureTemplate(entry);
+ if (!creatureTemplate)
+ continue;
+
+ handler->PSendSysMessage(LANG_CREATURE_LIST_CHAT, guid, guid, creatureTemplate->Name.c_str(), x, y, z, mapId);
+
+ ++count;
+ }
+ while (result->NextRow());
+ }
+
+ handler->PSendSysMessage(LANG_COMMAND_NEAR_NPC_MESSAGE, distance, count);
+
+ return true;
+ }
+
//move selected creature
static bool HandleNpcMoveCommand(ChatHandler* handler, char const* args)
{