diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Chat.cpp | 54 | ||||
-rw-r--r-- | src/game/Chat.h | 6 | ||||
-rw-r--r-- | src/game/Level1.cpp | 2 | ||||
-rw-r--r-- | src/game/Level3.cpp | 80 | ||||
-rw-r--r-- | src/game/Object.cpp | 2 | ||||
-rw-r--r-- | src/game/World.cpp | 2 |
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()); } } |