Update /godmode to use JourneyMode Godmode power.

- Previous Bouncer checks for GodMode (namely, Hurt) were removed.
- The command now uses the GodmodePower from core Terraria
- The toggle powers (which this command will now make use of) are now
  reset on disconnect to prevent accidentally "gifting" godmode to an
  unsuspecting player.
This commit is contained in:
quake1337 2021-04-16 06:11:26 +02:00
parent 173d6f71f5
commit 207b43e772
3 changed files with 24 additions and 10 deletions

View file

@ -37,6 +37,8 @@ using OTAPI.Tile;
using TShockAPI.Localization; using TShockAPI.Localization;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Terraria.DataStructures; using Terraria.DataStructures;
using Terraria.GameContent.Creative;
using static Terraria.GameContent.Creative.CreativePowers;
namespace TShockAPI namespace TShockAPI
{ {
@ -6445,6 +6447,10 @@ namespace TShockAPI
playerToGod.GodMode = !playerToGod.GodMode; playerToGod.GodMode = !playerToGod.GodMode;
var god_power = CreativePowerManager.Instance.GetPower<GodmodePower>();
god_power.SetEnabledState(playerToGod.Index, playerToGod.GodMode);
if (playerToGod == args.Player) if (playerToGod == args.Player)
{ {
args.Player.SendSuccessMessage(string.Format("You are {0} in god mode.", args.Player.GodMode ? "now" : "no longer")); args.Player.SendSuccessMessage(string.Format("You are {0} in god mode.", args.Player.GodMode ? "now" : "no longer"));

View file

@ -2571,10 +2571,6 @@ namespace TShockAPI
args.Player.PlayerData.maxHealth = max; args.Player.PlayerData.maxHealth = max;
} }
if (args.Player.GodMode && (cur < max))
{
args.Player.Heal(args.TPlayer.statLifeMax2);
}
return false; return false;
} }
@ -3733,12 +3729,6 @@ namespace TShockAPI
if (OnPlayerDamage(args.Player, args.Data, id, direction, dmg, pvp, crit, playerDeathReason)) if (OnPlayerDamage(args.Player, args.Data, id, direction, dmg, pvp, crit, playerDeathReason))
return true; return true;
if (TShock.Players[id].GodMode)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerDamageV2 rejected (god mode on) {0}", args.Player.Name);
TShock.Players[id].Heal(args.TPlayer.statLifeMax);
}
return false; return false;
} }

View file

@ -44,6 +44,7 @@ using TShockAPI.Sockets;
using TShockAPI.CLI; using TShockAPI.CLI;
using TShockAPI.Localization; using TShockAPI.Localization;
using TShockAPI.Configuration; using TShockAPI.Configuration;
using Terraria.GameContent.Creative;
namespace TShockAPI namespace TShockAPI
{ {
@ -1216,6 +1217,23 @@ namespace TShockAPI
Players[args.Who] = null; Players[args.Who] = null;
//Reset toggle creative powers to default, preventing potential power transfer & desync on another user occupying this slot later.
foreach(var kv in CreativePowerManager.Instance._powersById)
{
var power = kv.Value;
//No need to reset sliders - those are reset manually by the game, most likely an oversight that toggles don't receive this treatment.
if (power is CreativePowers.APerPlayerTogglePower toggle)
{
if (toggle._perPlayerIsEnabled[args.Who] == toggle._defaultToggleState)
continue;
toggle.SetEnabledState(args.Who, toggle._defaultToggleState);
}
}
if (tsplr.ReceivedInfo) if (tsplr.ReceivedInfo)
{ {
if (!tsplr.SilentKickInProgress && tsplr.State >= 3) if (!tsplr.SilentKickInProgress && tsplr.State >= 3)