Merge remote-tracking branch 'agaspace/general-devel' into general-devel
This commit is contained in:
commit
0751f0cb5a
3 changed files with 67 additions and 2 deletions
|
|
@ -15,6 +15,9 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
|
|||
## TShock 4.5.11
|
||||
* Add the new allowed buff TentacleSpike to NPC buff cheat detection bouncer. (@sgkoishi)
|
||||
|
||||
## TShock 4.5.11
|
||||
* Fixed the exploit with increasing projectile size.
|
||||
|
||||
## TShock 4.5.10
|
||||
* Changed the server behavior when `SIGINT` is received. When `SIGINT` is trapped, the server will attempt to shut down safely. When it is trapped a second time in a session, it will immediately exit. (`SIGINT` is typically triggered via CTRL + C.) This means that it is possible to corrupt your world if you force shutdown at the wrong time (e.g., while the world is saving), but hopefully you expect this to happen if you hit CTRL + C twice in a session and you read the warning. (@hakusaro, @Onusai)
|
||||
|
||||
|
|
|
|||
|
|
@ -945,6 +945,7 @@ namespace TShockAPI
|
|||
byte owner = args.Owner;
|
||||
short type = args.Type;
|
||||
int index = args.Index;
|
||||
float[] ai = args.Ai;
|
||||
|
||||
if (index > Main.maxProjectiles)
|
||||
{
|
||||
|
|
@ -1082,6 +1083,21 @@ namespace TShockAPI
|
|||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
(Projectile_MaxValuesAI.ContainsKey(type) &&
|
||||
(Projectile_MaxValuesAI[type] < ai[0] || Projectile_MinValuesAI[type] > ai[0])) ||
|
||||
(Projectile_MaxValuesAI2.ContainsKey(type) &&
|
||||
(Projectile_MaxValuesAI2[type] < ai[1] || Projectile_MinValuesAI2[type] > ai[1]))
|
||||
)
|
||||
{
|
||||
TShock.Log.ConsoleDebug("Bouncer / OnNewProjectile rejected from bouncer modified AI from {0}.", args.Player.Name);
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!args.Player.HasPermission(Permissions.ignoreprojectiledetection))
|
||||
{
|
||||
if (type == ProjectileID.CrystalShard && TShock.Config.Settings.ProjIgnoreShrapnel) // Ignore crystal shards
|
||||
|
|
@ -2498,5 +2514,45 @@ namespace TShockAPI
|
|||
{ ProjectileID.GoldShortswordStab, ItemID.GoldShortsword },
|
||||
{ ProjectileID.PlatinumShortswordStab, ItemID.PlatinumShortsword }
|
||||
};
|
||||
|
||||
private Dictionary<short, float> Projectile_MinValuesAI = new Dictionary<short, float> {
|
||||
{ 611, -1 },
|
||||
|
||||
{ 950, 0 }
|
||||
};
|
||||
private Dictionary<short, float> Projectile_MaxValuesAI = new Dictionary<short, float> {
|
||||
{ 611, 1 },
|
||||
|
||||
{ 950, 0 }
|
||||
};
|
||||
|
||||
private Dictionary<short, float> Projectile_MinValuesAI2 = new Dictionary<short, float> {
|
||||
{ 405, 0f },
|
||||
{ 410, 0f },
|
||||
|
||||
{ 424, 0.5f },
|
||||
{ 425, 0.5f },
|
||||
{ 426, 0.5f },
|
||||
|
||||
{ 612, 0.4f },
|
||||
{ 953, 0.85f },
|
||||
|
||||
{ 756, 0.5f },
|
||||
{ 522, 0 }
|
||||
};
|
||||
private Dictionary<short, float> Projectile_MaxValuesAI2 = new Dictionary<short, float> {
|
||||
{ 405, 1.2f },
|
||||
{ 410, 1.2f },
|
||||
|
||||
{ 424, 0.8f },
|
||||
{ 425, 0.8f },
|
||||
{ 426, 0.8f },
|
||||
|
||||
{ 612, 0.7f },
|
||||
{ 953, 2 },
|
||||
|
||||
{ 756, 1 },
|
||||
{ 522, 40f }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -689,12 +689,17 @@ namespace TShockAPI
|
|||
/// ???
|
||||
/// </summary>
|
||||
public int Index { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The special meaning of the projectile.
|
||||
/// </summary>
|
||||
public float[] Ai { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// NewProjectile - Called when a client creates a new projectile
|
||||
/// </summary>
|
||||
public static HandlerList<NewProjectileEventArgs> NewProjectile = new HandlerList<NewProjectileEventArgs>();
|
||||
private static bool OnNewProjectile(MemoryStream data, short ident, Vector2 pos, Vector2 vel, float knockback, short dmg, byte owner, short type, int index, TSPlayer player)
|
||||
private static bool OnNewProjectile(MemoryStream data, short ident, Vector2 pos, Vector2 vel, float knockback, short dmg, byte owner, short type, int index, TSPlayer player, float[] ai)
|
||||
{
|
||||
if (NewProjectile == null)
|
||||
return false;
|
||||
|
|
@ -711,6 +716,7 @@ namespace TShockAPI
|
|||
Type = type,
|
||||
Index = index,
|
||||
Player = player,
|
||||
Ai = ai
|
||||
};
|
||||
NewProjectile.Invoke(null, args);
|
||||
return args.Handled;
|
||||
|
|
@ -2788,7 +2794,7 @@ namespace TShockAPI
|
|||
|
||||
var index = TShock.Utils.SearchProjectile(ident, owner);
|
||||
|
||||
if (OnNewProjectile(args.Data, ident, pos, vel, knockback, dmg, owner, type, index, args.Player))
|
||||
if (OnNewProjectile(args.Data, ident, pos, vel, knockback, dmg, owner, type, index, args.Player, ai))
|
||||
return true;
|
||||
|
||||
lock (args.Player.RecentlyCreatedProjectiles)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue