Skip to content
Open
35 changes: 18 additions & 17 deletions TShockAPI/Bouncer.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
TShock, a server mod for Terraria
Copyright (C) 2011-2019 Pryaxis & TShock Contributors

Expand Down Expand Up @@ -1312,6 +1312,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
short type = args.Type;
int index = args.Index;
float[] ai = args.Ai;
int generation = args.Generation;

// Clients do send NaN values so we can't just kick them
// See https://github.com/Pryaxis/TShock/issues/3076
Expand All @@ -1332,7 +1333,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (index > Main.maxProjectiles)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from above projectile limit from {0}", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1343,7 +1344,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA

// Client will fight the server if we remove pets, silently reject instead
if (!Main.projPet[type] && !ProjectileID.Sets.LightPet[type])
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);

args.Handled = true;
return;
Expand All @@ -1355,7 +1356,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA

// Client will fight the server if we remove pets, silently reject instead
if (!Main.projPet[type] && !ProjectileID.Sets.LightPet[type])
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);

args.Handled = true;
return;
Expand All @@ -1366,7 +1367,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
args.Player.Disable(GetString("Player does not have permission to create projectile {0}.", type), DisableFlags.WriteToLogAndConsole);
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from permission check from {0} {1}", args.Player.Name, type));
args.Player.SendErrorMessage(GetString("You do not have permission to create that projectile."));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1375,7 +1376,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
{
args.Player.Disable(GetString("Projectile damage is higher than {0}.", TShock.Config.Settings.MaxProjDamage), DisableFlags.WriteToLogAndConsole);
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from projectile damage limit from {0} {1}/{2}", args.Player.Name, damage, TShock.Config.Settings.MaxProjDamage));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand Down Expand Up @@ -1412,7 +1413,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (Main.projHostile[type])
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from hostile projectile from {0}", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1423,7 +1424,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (type == ProjectileID.Tombstone)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from tombstones from {0}", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1439,7 +1440,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (discreteDirection is < -3 or > 4)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from portal gate from {0} (invalid angle: {1})", args.Player.Name, discreteDirection));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1449,7 +1450,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (boltProjectileData.Type == 0 || boltProjectileData.Killed)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from portal gate from {0} (missing active Portal Gun bolt)", args.Player.Name, discreteDirection));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand Down Expand Up @@ -1478,7 +1479,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile please report to tshock about this! normally this is a reject from {0} {1}", args.Player.Name, type));
// args.Player.Disable(String.Format("Does not have projectile permission to update projectile. ({0})", type), DisableFlags.WriteToLogAndConsole);
// args.Player.RemoveProjectile(ident, owner);
// args.Player.RemoveProjectile(ident, owner, generation);
}
// args.Handled = false;
// return;
Expand All @@ -1493,7 +1494,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
else
{
args.Player.Disable(GetString("Reached projectile create threshold."), DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
}

TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from projectile create threshold from {0} {1}/{2}", args.Player.Name, args.Player.ProjectileThreshold, TShock.Config.Settings.ProjectileThreshold));
Expand All @@ -1510,7 +1511,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from bouncer modified AI from {0}.", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand All @@ -1526,7 +1527,7 @@ internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventA
if (TShock.Config.Settings.DisableModifiedZenith && type == ProjectileID.FinalFractal && (ai[0] < -100 || ai[0] > 101) && !Terraria.Graphics.FinalFractalHelper._fractalProfiles.ContainsKey((int)ai[1]))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from bouncer modified Zenith projectile from {0}.", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
args.Player.RemoveProjectile(ident, owner, generation);
args.Handled = true;
return;
}
Expand Down Expand Up @@ -1632,15 +1633,15 @@ internal void OnProjectileKill(object sender, GetDataHandlers.ProjectileKillEven
if (args.Player.IsBeingDisabled())
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnProjectileKill rejected from disabled from {0}", args.Player.Name));
args.Player.RemoveProjectile(args.ProjectileIdentity, args.ProjectileOwner);
args.Player.RemoveProjectile(args.ProjectileIdentity, args.ProjectileOwner, args.ProjectileGeneration);
args.Handled = true;
return;
}

if (args.Player.IsBouncerThrottled())
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnProjectileKill rejected from bouncer throttle from {0}", args.Player.Name));
args.Player.RemoveProjectile(args.ProjectileIdentity, args.ProjectileOwner);
args.Player.RemoveProjectile(args.ProjectileIdentity, args.ProjectileOwner, args.ProjectileGeneration);
args.Handled = true;
return;
}
Expand Down Expand Up @@ -2676,7 +2677,7 @@ internal void OnPlaceItemFrame(object sender, GetDataHandlers.PlaceItemFrameEven

if (!args.Player.HasBuildPermission(args.X, args.Y))
{
int num = Item.NewItem(null, (args.X * 16) + 8, (args.Y * 16) + 8, args.Player.TPlayer.width, args.Player.TPlayer.height, args.ItemID, args.Stack, noBroadcast: true, args.Prefix, noGrabDelay: true);
int num = Item.NewItem(null, (args.X * 16) + 8, (args.Y * 16) + 8, args.Player.TPlayer.width, args.Player.TPlayer.height, args.ItemID, args.Stack, noBroadcast: true, args.Prefix, Terraria.NewItemOwnership.None);
Main.item[num].playerIndexTheItemIsReservedFor = args.Player.Index;
NetMessage.SendData((int)PacketTypes.ItemDrop, args.Player.Index, -1, NetworkText.Empty, num, 1f);
NetMessage.SendData((int)PacketTypes.ItemOwner, args.Player.Index, -1, NetworkText.Empty, num);
Expand Down
2 changes: 1 addition & 1 deletion TShockAPI/Commands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2537,7 +2537,7 @@ private static void Rain(CommandArgs args)
}
else
{
Main.StartRain(garenteeCoinRain: true);
Main.StartRain(guaranteeCoinRain: true);
TSPlayer.All.SendData(PacketTypes.WorldInfo);
TSPlayer.All.SendInfoMessage(GetString("{0} caused it to coin rain.", args.Player.Name));
}
Expand Down
Loading