aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Chat.cpp54
-rw-r--r--src/game/Chat.h6
-rw-r--r--src/game/Level1.cpp2
-rw-r--r--src/game/Level3.cpp80
-rw-r--r--src/game/Object.cpp2
-rw-r--r--src/game/World.cpp2
6 files changed, 144 insertions, 2 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index c7d83be45ed..4f97c4c9ab3 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -214,6 +214,14 @@ ChatCommand * ChatHandler::getCommandTable()
{ NULL, 0, NULL, "", NULL }
};
+ static ChatCommand groupCommandTable[] =
+ {
+ { "leader", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupLeaderCommand, "", NULL },
+ { "disband", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupDisbandCommand, "", NULL },
+ { "remove", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupRemoveCommand, "", NULL },
+ { NULL, 0, NULL, "", NULL }
+ };
+
static ChatCommand lookupPlayerCommandTable[] =
{
{ "ip", SEC_GAMEMASTER, &ChatHandler::HandleLookupPlayerIpCommand, "", NULL },
@@ -340,6 +348,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "turn", SEC_GAMEMASTER, &ChatHandler::HandleTurnObjectCommand, "", NULL },
{ "move", SEC_GAMEMASTER, &ChatHandler::HandleMoveObjectCommand, "", NULL },
{ "near", SEC_ADMINISTRATOR, &ChatHandler::HandleNearObjectCommand, "", NULL },
+ { "state", SEC_ADMINISTRATOR, &ChatHandler::HandleObjectStateCommand, "", NULL },
{ NULL, 0, NULL, "", NULL }
};
@@ -388,6 +397,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "list", SEC_ADMINISTRATOR, NULL, "", listCommandTable },
{ "lookup", SEC_ADMINISTRATOR, NULL, "", lookupCommandTable },
{ "pdump", SEC_ADMINISTRATOR, NULL, "", pdumpCommandTable },
+ { "group", SEC_ADMINISTRATOR, NULL, "", groupCommandTable },
{ "guild", SEC_ADMINISTRATOR, NULL, "", guildCommandTable },
{ "cast", SEC_ADMINISTRATOR, NULL, "", castCommandTable },
{ "reset", SEC_ADMINISTRATOR, NULL, "", resetCommandTable },
@@ -1084,3 +1094,47 @@ GameTele const* ChatHandler::extractGameTeleFromLink(char* text)
return objmgr.GetGameTele(cId);
}
+
+bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
+{
+ plr = NULL;
+ guid = 0;
+
+ if(cname)
+ {
+ std::string name = cname;
+ if(!name.empty())
+ {
+ if(!normalizePlayerName(name))
+ {
+ PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ plr = objmgr.GetPlayer(name.c_str());
+ if(offline)
+ guid = objmgr.GetPlayerGUIDByName(name.c_str());
+ }
+ }
+
+ if(plr)
+ {
+ group = plr->GetGroup();
+ if(!guid || !offline)
+ guid = plr->GetGUID();
+ }
+ else
+ {
+ if(getSelectedPlayer())
+ plr = getSelectedPlayer();
+ else
+ plr = m_session->GetPlayer();
+
+ if(!guid || !offline)
+ guid = plr->GetGUID();
+ group = plr->GetGroup();
+ }
+
+ return true;
+}
diff --git a/src/game/Chat.h b/src/game/Chat.h
index b869d429e11..7e635a10d2f 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -239,6 +239,7 @@ class ChatHandler
bool HandleMoveCreatureCommand(const char* args);
bool HandleMoveObjectCommand(const char* args);
bool HandleTurnObjectCommand(const char* args);
+ bool HandleObjectStateCommand(const char* args);
bool HandlePInfoCommand(const char* args);
bool HandlePLimitCommand(const char* args);
bool HandleMuteCommand(const char* args);
@@ -314,6 +315,10 @@ class ChatHandler
bool HandleAddItemCommand(const char* args);
bool HandleAddItemSetCommand(const char* args);
+ bool HandleGroupLeaderCommand(const char* args);
+ bool HandleGroupDisbandCommand(const char* args);
+ bool HandleGroupRemoveCommand(const char* args);
+
bool HandleGuildCreateCommand(const char* args);
bool HandleGuildInviteCommand(const char* args);
bool HandleGuildUninviteCommand(const char* args);
@@ -393,6 +398,7 @@ class ChatHandler
char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = NULL);
uint32 extractSpellIdFromLink(char* text);
GameTele const* extractGameTeleFromLink(char* text);
+ bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline = false);
GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry);
diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp
index 34fe48ee89e..9fae126c5b0 100644
--- a/src/game/Level1.cpp
+++ b/src/game/Level1.cpp
@@ -122,7 +122,7 @@ bool ChatHandler::HandleNameAnnounceCommand(const char* args)
WorldPacket data;
if(!*args)
return false;
- char str[1024];
+ //char str[1024];
//sprintf(str, GetMangosString(LANG_ANNOUNCE_COLOR), m_session->GetPlayer()->GetName(), args);
sWorld.SendWorldText(LANG_ANNOUNCE_COLOR, m_session->GetPlayer()->GetName(), args);
return true;
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index f860318bb06..2a8071d6708 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -2175,6 +2175,44 @@ bool ChatHandler::HandleNearObjectCommand(const char* args)
return true;
}
+bool ChatHandler::HandleObjectStateCommand(const char* args)
+{
+ // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r
+ char* cId = extractKeyFromLink((char*)args, "Hgameobject");
+ if(!cId)
+ return false;
+
+ uint32 lowguid = atoi(cId);
+ if(!lowguid)
+ return false;
+
+ GameObject* gobj = NULL;
+
+ if(GameObjectData const* goData = objmgr.GetGOData(lowguid))
+ gobj = GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid, goData->id);
+
+ if(!gobj)
+ {
+ PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ char* cstate = strtok(NULL, " ");
+ if(!cstate)
+ return false;
+
+ int32 state = atoi(cstate);
+ if(state < 0)
+ gobj->SendObjectDeSpawnAnim(gobj->GetGUID());
+ else
+ gobj->SetGoState(state);
+
+ return true;
+
+ return true;
+}
+
bool ChatHandler::HandleListCreatureCommand(const char* args)
{
if(!*args)
@@ -5472,3 +5510,45 @@ bool ChatHandler::HandleFlushArenaPointsCommand(const char * /*args*/)
sBattleGroundMgr.DistributeArenaPoints();
return true;
}
+
+bool ChatHandler::HandleGroupLeaderCommand(const char* args)
+{
+ Player* plr = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* cname = strtok((char*)args, " ");
+
+ if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+ if(group && group->GetLeaderGUID() != guid)
+ group->ChangeLeader(guid);
+
+ return true;
+}
+
+bool ChatHandler::HandleGroupDisbandCommand(const char* args)
+{
+ Player* plr = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* cname = strtok((char*)args, " ");
+
+ if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+ if(group)
+ group->Disband();
+
+ return true;
+}
+
+bool ChatHandler::HandleGroupRemoveCommand(const char* args)
+{
+ Player* plr = NULL;
+ Group* group = NULL;
+ uint64 guid = 0;
+ char* cname = strtok((char*)args, " ");
+
+ if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid, true))
+ if(group)
+ group->RemoveMember(guid, 0);
+
+ return true;
+}
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 7266d5612e7..82c9a40c3a3 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -264,6 +264,8 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2
case TYPEID_UNIT:
{
flags2 = ((Unit*)this)->GetUnitMovementFlags();
+ flags2 &= ~MOVEMENTFLAG_ONTRANSPORT;
+ flags2 &= ~MOVEMENTFLAG_SPLINE2;
}
break;
case TYPEID_PLAYER:
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 3b92a28f630..10802b573e2 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -2426,7 +2426,7 @@ void World::ShutdownMsg(bool show, Player* player)
uint32 msgid = (m_ShutdownMask & SHUTDOWN_MASK_RESTART) ? SERVER_MSG_RESTART_TIME : SERVER_MSG_SHUTDOWN_TIME;
SendServerMessage(msgid,str.c_str(),player);
- DEBUG_LOG("Server is %s in %s",(m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"),str.c_str());
+ outstring_log("Server will %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shutdown"), str.c_str());
}
}