Merge remote-tracking branch 'sgk/pr2833' into general-devel

This commit is contained in:
Lucas Nicodemus 2022-12-05 21:39:12 -08:00
commit 69f39d3e5e
No known key found for this signature in database
2 changed files with 89 additions and 112 deletions

View file

@ -1716,132 +1716,108 @@ namespace TShockAPI
// Liquid anti-cheat
// Arguably the banned buckets bit should be in the item bans system
if (amount != 0)
if (amount != 0 && !wasThereABombNearby)
{
int bucket = -1;
int selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type;
if (selectedItemType == ItemID.EmptyBucket)
{
bucket = 0;
}
else if (selectedItemType == ItemID.WaterBucket)
{
bucket = 1;
}
else if (selectedItemType == ItemID.LavaBucket)
{
bucket = 2;
}
else if (selectedItemType == ItemID.HoneyBucket)
{
bucket = 3;
}
else if (selectedItemType == ItemID.BottomlessBucket ||
selectedItemType == ItemID.SuperAbsorbantSponge)
{
bucket = 4;
}
else if (selectedItemType == ItemID.LavaAbsorbantSponge)
{
bucket = 5;
}
else if (selectedItemType == ItemID.BottomlessLavaBucket)
{
bucket = 6;
}
else if (selectedItemType == ItemID.BottomlessHoneyBucket
|| selectedItemType == ItemID.HoneyAbsorbantSponge)
{
bucket = 7;
}
else if (selectedItemType == ItemID.BottomlessShimmerBucket)
{
bucket = 8;
}
else if (selectedItemType == ItemID.UltraAbsorbantSponge)
{
bucket = 9;
}
if (!wasThereABombNearby && type == LiquidType.Lava && !(bucket == 2 || bucket == 0 || bucket == 5 || bucket == 6 || bucket == 9))
void Reject(string reason)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 1 from {0}", args.Player.Name));
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected liquid type {0} from {1} holding {2}", type, args.Player.Name, selectedItemType));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Spreading lava without holding a lava bucket"), DisableFlags.WriteToLogAndConsole);
args.Player.Disable(reason, DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
}
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(selectedItemType), args.Player))
{
Reject(GetString("Using banned {0} to manipulate liquid", Lang.GetItemNameValue(selectedItemType)));
return;
}
if (!wasThereABombNearby && type == LiquidType.Lava && TShock.ItemBans.DataModel.ItemIsBanned("Lava Bucket", args.Player))
switch (type)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected lava bucket from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Using banned lava bucket without permissions"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
case LiquidType.Water:
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.WaterBucket), args.Player))
{
Reject(GetString("Using banned water bucket without permissions"));
return;
}
break;
case LiquidType.Lava:
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.LavaBucket), args.Player))
{
Reject(GetString("Using banned lava bucket without permissions"));
return;
}
break;
case LiquidType.Honey:
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.HoneyBucket), args.Player))
{
Reject(GetString("Using banned honey bucket without permissions"));
return;
}
break;
case LiquidType.Shimmer:
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.BottomlessShimmerBucket), args.Player))
{
Reject(GetString("Using banned shimmering water bucket without permissions"));
return;
}
break;
default:
Reject(GetString("Manipulating unknown liquid type"));
return;
}
if (!wasThereABombNearby && type == LiquidType.Water && !(bucket == 1 || bucket == 0 || bucket == 4 || bucket == 9))
switch (selectedItemType)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 2 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Spreading water without holding a water bucket"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}
if (!wasThereABombNearby && type == LiquidType.Water && TShock.ItemBans.DataModel.ItemIsBanned("Water Bucket", args.Player))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 3 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Using banned water bucket without permissions"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}
if (!wasThereABombNearby && type == LiquidType.Honey && !(bucket == 3 || bucket == 0 || bucket == 7 || bucket == 9))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 4 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Spreading honey without holding a honey bucket"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}
if (!wasThereABombNearby && type == LiquidType.Honey && TShock.ItemBans.DataModel.ItemIsBanned("Honey Bucket", args.Player))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 5 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Using banned honey bucket without permissions"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}
if (!wasThereABombNearby && type == LiquidType.Shimmer && !(bucket == 8 || bucket == 9))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 6 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Spreading shimmer without holding a shimmer bucket"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}
if (!wasThereABombNearby && type == LiquidType.Shimmer &&
TShock.ItemBans.DataModel.ItemIsBanned("Bottomless Shimmer Bucket", args.Player))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 7 from {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to perform this action."));
args.Player.Disable(GetString("Using banned bottomless shimmer bucket without permissions"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
case ItemID.WaterBucket:
case ItemID.BottomlessBucket:
if (type != LiquidType.Water)
{
Reject(GetString("Using {0} on non-water", Lang.GetItemNameValue(selectedItemType)));
return;
}
break;
case ItemID.HoneyBucket:
case ItemID.HoneyAbsorbantSponge:
case ItemID.BottomlessHoneyBucket:
if (type != LiquidType.Honey)
{
Reject(GetString("Using {0} on non-honey", Lang.GetItemNameValue(selectedItemType)));
return;
}
break;
case ItemID.LavaAbsorbantSponge:
case ItemID.BottomlessLavaBucket:
case ItemID.LavaBucket:
if (type != LiquidType.Lava)
{
Reject(GetString("Using {0} on non-lava", Lang.GetItemNameValue(selectedItemType)));
return;
}
break;
case ItemID.BottomlessShimmerBucket:
if (type != LiquidType.Shimmer)
{
Reject(GetString("Using {0} on non-shimmer", Lang.GetItemNameValue(selectedItemType)));
return;
}
break;
case ItemID.SuperAbsorbantSponge:
if (type != LiquidType.Water && type != LiquidType.Shimmer)
{
Reject(GetString("Using {0} on non-water or shimmer", Lang.GetItemNameValue(selectedItemType)));
return;
}
break;
case ItemID.EmptyBucket:
case ItemID.UltraAbsorbantSponge:
break;
default:
Reject(GetString("Using {0} to manipulate unknown liquid {1}", Lang.GetItemNameValue(selectedItemType), type));
return;
}
}

View file

@ -85,6 +85,7 @@ Use past tense when adding new entries; sign your name off when you add or chang
* This will make it so Bouncer rejections regarding `PlayerAddBuff` will now always include the sender index, buff type, receiver index, and time in ticks, allowing much faster triage of buff whitelist issues.
* Allowed Digging Molecart and bomb fish to break tiles and place tracks (@sgkoishi)
* Add built-in package management capabilities for plugins
* Fixed Super Sponge unable to absorb shimmer. (@sgkoishi, #2833)
## TShock 5.1.3
* Added support for Terraria 1.4.4.9 via OTAPI 3.1.20. (@SignatureBeef)