Merge pull request #1310 from Simon311/general-devel

Fix for HealOtherPlayer exploit, also fix #1309
This commit is contained in:
Lucas Nicodemus 2016-10-17 08:51:19 -06:00 committed by GitHub
commit dce26d6928
4 changed files with 53 additions and 3 deletions

View file

@ -1261,7 +1261,8 @@ namespace TShockAPI
{ PacketTypes.PlaceItemFrame, HandlePlaceItemFrame },
{ PacketTypes.SyncExtraValue, HandleSyncExtraValue },
{ PacketTypes.LoadNetModule, HandleLoadNetModule },
{ PacketTypes.ToggleParty, HandleToggleParty }
{ PacketTypes.ToggleParty, HandleToggleParty },
{ PacketTypes.PlayerHealOther, HandleHealOther }
};
}
@ -1283,6 +1284,37 @@ namespace TShockAPI
return false;
}
private static bool HandleHealOther(GetDataHandlerArgs args)
{
byte plr = args.Data.ReadInt8();
short amount = args.Data.ReadInt16();
if (amount <= 0 || Main.player[plr] == null || !Main.player[plr].active)
{
return true;
}
if (amount > TShock.Config.MaxDamage * 0.2)
{
args.Player.Disable("HealOtherPlayer cheat attempt!", DisableFlags.WriteToLogAndConsole);
return true;
}
if (args.Player.HealOtherThreshold > TShock.Config.HealOtherThreshold)
{
args.Player.Disable("Reached HealOtherPlayer threshold.", DisableFlags.WriteToLogAndConsole);
return true;
}
if (TShock.CheckIgnores(args.Player) || (DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
{
return true;
}
args.Player.HealOtherThreshold++;
return false;
}
private static bool HandlePlayerSlot(GetDataHandlerArgs args)
{
byte plr = args.Data.ReadInt8();