Skip to content

Commit

Permalink
Chat/GM: Add unkillable command
Browse files Browse the repository at this point in the history
Closes #510
  • Loading branch information
insunaa authored and killerwife committed Apr 3, 2024
1 parent b684f34 commit 0a19148
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/game/Chat/Chat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ ChatCommand* ChatHandler::getCommandTable()
{
{ "chat", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMChatCommand, "", nullptr },
{ "fly", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMFlyCommand, "", nullptr },
{ "unkillable", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMUnkillableCommand, "", nullptr },
{ "ingame", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMListIngameCommand, "", nullptr },
{ "list", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMListFullCommand, "", nullptr },
{ "mountup", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMMountUpCommand, "", nullptr },
Expand Down
1 change: 1 addition & 0 deletions src/game/Chat/Chat.h
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ class ChatHandler
bool HandleGMCommand(char* args);
bool HandleGMChatCommand(char* args);
bool HandleGMFlyCommand(char* args);
bool HandleGMUnkillableCommand(char* args);
bool HandleGMListFullCommand(char* args);
bool HandleGMListIngameCommand(char* args);
bool HandleGMMountUpCommand(char* args);
Expand Down
15 changes: 15 additions & 0 deletions src/game/Chat/Level3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6101,6 +6101,21 @@ bool ChatHandler::HandleGMFlyCommand(char* args)
return true;
}

bool ChatHandler::HandleGMUnkillableCommand(char* args)
{
bool value;
if (!ExtractOnOff(&args, value))
{
SendSysMessage(LANG_USE_BOL);
SetSentErrorMessage(true);
return false;
}
Player* target = m_session->GetPlayer();
target->SetDeathPrevention(value);
PSendSysMessage("GM Unkillability %s.", value ? "enabled" : "disabled");
return true;
}

bool ChatHandler::HandlePDumpLoadCommand(char* args)
{
char* file = ExtractQuotedOrLiteralArg(&args);
Expand Down
13 changes: 13 additions & 0 deletions src/game/Entities/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24809,6 +24809,19 @@ void Player::SendLootError(ObjectGuid guid, LootError error) const
SendDirectMessage(data);
}

void Player::SetDeathPrevention(bool enable)
{
if (enable)
m_ExtraFlags |= PLAYER_EXTRA_GM_UNKILLABLE;
else
m_ExtraFlags &= ~PLAYER_EXTRA_GM_UNKILLABLE;
}

bool Player::IsPreventingDeath() const
{
return m_ExtraFlags & PLAYER_EXTRA_GM_UNKILLABLE;
}

void Player::ResetDeathTimer()
{
// 6 minutes until repop at graveyard
Expand Down
6 changes: 6 additions & 0 deletions src/game/Entities/Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,9 @@ enum PlayerExtraFlags
// other states
PLAYER_EXTRA_PVP_DEATH = 0x0100, // store PvP death status until corpse creating.
PLAYER_EXTRA_WHISP_RESTRICTION = 0x0200,

// death prevention
PLAYER_EXTRA_GM_UNKILLABLE = 0x0400,
};

// 2^n values
Expand Down Expand Up @@ -2523,6 +2526,9 @@ class Player : public Unit

void SendLootError(ObjectGuid guid, LootError error) const;

void SetDeathPrevention(bool enable);
bool IsPreventingDeath() const override;

// cooldown system
virtual void AddGCD(SpellEntry const& spellEntry, uint32 forcedDuration = 0, bool updateClient = false) override;
virtual void AddCooldown(SpellEntry const& spellEntry, ItemPrototype const* itemProto = nullptr, bool permanent = false, uint32 forcedDuration = 0, bool ignoreCat = false) override;
Expand Down

2 comments on commit 0a19148

@ratkosrb
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is called god mode. Unkillability doesn't exactly roll off the tongue.
https://github.com/cmangos/mangos-wotlk/blob/master/src/game/Server/Opcodes.h#L71

@killerwife
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not know what that god mode does, right?

Please sign in to comment.