[svn] * Send ShutdownMsg to console using outstring_log.
* Prevent Client Crashes when MOVEMENTFLAG_ONTRANSPORT and MOVEMENTFLAG_SPLINE2 is set on creatures.
* Implement four new SEC_ADMINISTRATOR commands:
- Group (.group [leader]/[disband]/[remove]) commands.
- GameObject State (.gobject state <guid> <state>) command.
--HG--
branch : trunk
This commit is contained in:
+1
-1
File diff suppressed because one or more lines are too long
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
+1
-1
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user