Move NewProjectile into Bouncer
This commit is contained in:
parent
bee3307395
commit
c891a81f67
2 changed files with 112 additions and 90 deletions
|
|
@ -41,12 +41,119 @@ namespace TShockAPI
|
|||
{
|
||||
// Setup hooks
|
||||
|
||||
GetDataHandlers.NewProjectile.Register(OnNewProjectile);
|
||||
GetDataHandlers.PlaceObject.Register(OnPlaceObject);
|
||||
GetDataHandlers.SendTileSquare.Register(OnSendTileSquare);
|
||||
GetDataHandlers.HealOtherPlayer.Register(OnHealOtherPlayer);
|
||||
GetDataHandlers.TileEdit.Register(OnTileEdit);
|
||||
}
|
||||
|
||||
internal void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventArgs args)
|
||||
{
|
||||
short ident = args.Identity;
|
||||
Vector2 pos = args.Position;
|
||||
Vector2 vel = args.Velocity;
|
||||
float knockback = args.Knockback;
|
||||
short dmg = args.Damage;
|
||||
byte owner = args.Owner;
|
||||
short type = args.Type;
|
||||
int index = args.Index;
|
||||
|
||||
if (index > Main.maxProjectiles || index < 0)
|
||||
{
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (TShock.ProjectileBans.ProjectileIsBanned(type, args.Player))
|
||||
{
|
||||
args.Player.Disable("Player does not have permission to create that projectile.", DisableFlags.WriteToLogAndConsole);
|
||||
args.Player.SendErrorMessage("You do not have permission to create that projectile.");
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (dmg > TShock.Config.MaxProjDamage && !args.Player.HasPermission(Permissions.ignoredamagecap))
|
||||
{
|
||||
args.Player.Disable(String.Format("Projectile damage is higher than {0}.", TShock.Config.MaxProjDamage), DisableFlags.WriteToLogAndConsole);
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (TShock.CheckIgnores(args.Player))
|
||||
{
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
bool hasPermission = !TShock.CheckProjectilePermission(args.Player, index, type);
|
||||
if (!TShock.Config.IgnoreProjUpdate && !hasPermission && !args.Player.HasPermission(Permissions.ignoreprojectiledetection))
|
||||
{
|
||||
if (type == ProjectileID.BlowupSmokeMoonlord
|
||||
|| type == ProjectileID.PhantasmalEye
|
||||
|| type == ProjectileID.CultistBossIceMist
|
||||
|| (type >= ProjectileID.MoonlordBullet && type <= ProjectileID.MoonlordTurretLaser)
|
||||
|| type == ProjectileID.DeathLaser || type == ProjectileID.Landmine
|
||||
|| type == ProjectileID.BulletDeadeye || type == ProjectileID.BoulderStaffOfEarth
|
||||
|| (type > ProjectileID.ConfettiMelee && type < ProjectileID.SpiritHeal)
|
||||
|| (type >= ProjectileID.FlamingWood && type <= ProjectileID.GreekFire3)
|
||||
|| (type >= ProjectileID.PineNeedleHostile && type <= ProjectileID.Spike)
|
||||
|| (type >= ProjectileID.MartianTurretBolt && type <= ProjectileID.RayGunnerLaser)
|
||||
|| type == ProjectileID.CultistBossLightningOrb)
|
||||
{
|
||||
TShock.Log.Debug("Certain projectiles have been ignored for cheat detection.");
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.Disable(String.Format("Does not have projectile permission to update projectile. ({0})", type), DisableFlags.WriteToLogAndConsole);
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
}
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Player.ProjectileThreshold >= TShock.Config.ProjectileThreshold)
|
||||
{
|
||||
args.Player.Disable("Reached projectile update threshold.", DisableFlags.WriteToLogAndConsole);
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
|
||||
{
|
||||
args.Player.RemoveProjectile(ident, owner);
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!args.Player.HasPermission(Permissions.ignoreprojectiledetection))
|
||||
{
|
||||
if (type == ProjectileID.CrystalShard && TShock.Config.ProjIgnoreShrapnel) // Ignore crystal shards
|
||||
{
|
||||
TShock.Log.Debug("Ignoring shrapnel per config..");
|
||||
}
|
||||
else if (!Main.projectile[index].active)
|
||||
{
|
||||
args.Player.ProjectileThreshold++; // Creating new projectile
|
||||
}
|
||||
}
|
||||
|
||||
if (hasPermission &&
|
||||
(type == ProjectileID.Bomb
|
||||
|| type == ProjectileID.Dynamite
|
||||
|| type == ProjectileID.StickyBomb
|
||||
|| type == ProjectileID.StickyDynamite))
|
||||
{
|
||||
// Denotes that the player has recently set a fuse - used for cheat detection.
|
||||
args.Player.RecentFuse = 10;
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnPlaceObject(object sender, GetDataHandlers.PlaceObjectEventArgs args)
|
||||
{
|
||||
short x = args.X;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue