aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaymoira <none@none>2009-01-14 18:41:20 +0100
committerBlaymoira <none@none>2009-01-14 18:41:20 +0100
commite4d2c1c04e4befe54529c4eb216f3f9e360160d3 (patch)
tree7006ee2180650a4f99f43eb6ae813483a2e044ee
parent8137a534b40918540e9fded5d3d582a6d2a9fd44 (diff)
*Command for add npc formation - by Silver1ce
--HG-- branch : trunk
-rw-r--r--src/game/Chat.cpp1
-rw-r--r--src/game/Chat.h1
-rw-r--r--src/game/Level2.cpp46
3 files changed, 48 insertions, 0 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index f02dad06e75..43811f8e3e7 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -439,6 +439,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL },
{ "yell", SEC_MODERATOR, false, &ChatHandler::HandleNpcYellCommand, "", NULL },
{ "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempAddSpwCommand, "", NULL },
+ { "addformation", SEC_MODERATOR, false, &ChatHandler::HandleNpcAddFormationCommand, "", NULL },
//{ TODO: fix or remove this commands
{ "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNameCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 6463b347f4e..39aa3cb025f 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -202,6 +202,7 @@ class ChatHandler
bool HandleNpcUnFollowCommand(const char* args);
bool HandleNpcWhisperCommand(const char* args);
bool HandleNpcYellCommand(const char* args);
+ bool HandleNpcAddFormationCommand(const char* args);
bool HandleReloadCommand(const char* args);
bool HandleReloadAllCommand(const char* args);
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index 0258954d983..85eef6a6da5 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -4007,3 +4007,49 @@ bool ChatHandler::HandleTempGameObjectCommand(const char* args)
return true;
}
+
+bool ChatHandler::HandleNpcAddFormationCommand(const char* args)
+{
+ if (!*args)
+ return false;
+
+ uint32 leaderGUID = (uint32) atoi((char*)args);
+ Creature *pCreature = getSelectedCreature();
+
+ if(!pCreature || !pCreature->GetDBTableGUIDLow())
+ {
+ SendSysMessage(LANG_SELECT_CREATURE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 lowguid = pCreature->GetDBTableGUIDLow();
+ if(pCreature->GetFormationID())
+ {
+ PSendSysMessage("Selected creature is already member of group %u", pCreature->GetFormationID());
+ return false;
+ }
+
+ if (!lowguid)
+ return false;
+
+ Player *chr = m_session->GetPlayer();
+ FormationMember *group_member;
+
+ group_member = new FormationMember;
+ group_member->follow_angle = pCreature->GetAngle(chr) - chr->GetOrientation();
+ group_member->follow_dist = sqrtf(pow(chr->GetPositionX() - pCreature->GetPositionX(),int(2))+pow(chr->GetPositionY()-pCreature->GetPositionY(),int(2)));
+ group_member->memberGUID = lowguid;
+ group_member->leaderGUID = leaderGUID;
+ group_member->groupAI = 0;
+
+ CreatureGroupMap[lowguid] = group_member;
+ pCreature->SearchFormation();
+
+ WorldDatabase.PExecuteLog("INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES ('%u','%u','%f', '%f', '%u')",
+ leaderGUID, lowguid, group_member->follow_dist, group_member->follow_angle, group_member->groupAI);
+
+ PSendSysMessage("Creature %u added to formation with leader %u", lowguid, leaderGUID);
+
+ return true;
+ }