aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Chat.cpp2
-rw-r--r--src/game/Level3.cpp27
2 files changed, 20 insertions, 9 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index d5a9dd59533..886d60efafd 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -640,7 +640,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "commands", SEC_PLAYER, true, &ChatHandler::HandleCommandsCommand, "", NULL },
{ "demorph", SEC_GAMEMASTER, false, &ChatHandler::HandleDeMorphCommand, "", NULL },
{ "die", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDieCommand, "", NULL },
- { "revive", SEC_ADMINISTRATOR, false, &ChatHandler::HandleReviveCommand, "", NULL },
+ { "revive", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReviveCommand, "", NULL },
{ "dismount", SEC_PLAYER, false, &ChatHandler::HandleDismountCommand, "", NULL },
{ "gps", SEC_MODERATOR, false, &ChatHandler::HandleGPSCommand, "", NULL },
{ "guid", SEC_GAMEMASTER, false, &ChatHandler::HandleGUIDCommand, "", NULL },
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 844bf9b5f68..8931418433a 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -4024,33 +4024,44 @@ bool ChatHandler::HandleModifyArenaCommand(const char * args)
bool ChatHandler::HandleReviveCommand(const char* args)
{
- Player* SelectedPlayer = NULL;
+ Player* player = NULL;
+ uint32 player_guid = 0;
if (*args)
{
std::string name = extractPlayerNameFromLink((char*)args);
- if(name.empty())
+ if (name.empty())
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
- SelectedPlayer = objmgr.GetPlayer(name.c_str());
+ player = objmgr.GetPlayer(name.c_str());
+ if (!player)
+ player_guid = objmgr.GetPlayerGUIDByName(name);
}
else
- SelectedPlayer = getSelectedPlayer();
+ player = getSelectedPlayer();
- if(!SelectedPlayer)
+ if (player)
+ {
+ player->ResurrectPlayer(0.5f);
+ player->SpawnCorpseBones();
+ player->SaveToDB();
+ }
+ else if (player_guid)
+ {
+ // will resurrected at login without corpse
+ ObjectAccessor::Instance().ConvertCorpseForPlayer(player_guid);
+ }
+ else
{
SendSysMessage(LANG_NO_CHAR_SELECTED);
SetSentErrorMessage(true);
return false;
}
- SelectedPlayer->ResurrectPlayer(0.5f);
- SelectedPlayer->SpawnCorpseBones();
- SelectedPlayer->SaveToDB();
return true;
}