Some changes to projectile cheat detection

(Redigit actually listened to some of Zidonuke's requests)
This commit is contained in:
Deathmax 2012-01-19 21:38:42 +08:00
parent 55d7b78971
commit e06588a8de
3 changed files with 13 additions and 12 deletions

View file

@ -1514,15 +1514,15 @@ namespace TShockAPI
var dmg = args.Data.ReadInt16(); var dmg = args.Data.ReadInt16();
var owner = args.Data.ReadInt8(); var owner = args.Data.ReadInt8();
var type = args.Data.ReadInt8(); var type = args.Data.ReadInt8();
owner = (byte)args.Player.Index;
var index = TShock.Utils.SearchProjectile(ident); var index = TShock.Utils.SearchProjectile(ident, owner);
if (OnNewProjectile(ident, pos, vel, knockback, dmg, owner, type, index)) if (OnNewProjectile(ident, pos, vel, knockback, dmg, owner, type, index))
return true; return true;
if (index > Main.maxProjectiles || index < 0) if (index > Main.maxProjectiles || index < 0)
{ {
return true; return false;
} }
if (args.Player.Index != owner) if (args.Player.Index != owner)
@ -1577,22 +1577,23 @@ namespace TShockAPI
{ {
var ident = args.Data.ReadInt16(); var ident = args.Data.ReadInt16();
var owner = args.Data.ReadInt8(); var owner = args.Data.ReadInt8();
owner = (byte)args.Player.Index;
var index = TShock.Utils.SearchProjectile(ident); var index = TShock.Utils.SearchProjectile(ident, owner);
if (index > Main.maxProjectiles || index < 0) if (index > Main.maxProjectiles || index < 0)
{ {
return true; return false;
} }
var type = Main.projectile[index].type; var type = Main.projectile[index].type;
if (args.Player.Index != Main.projectile[index].owner && type != 102 && type != 100 && !TShock.Config.IgnoreProjKill) // workaround for skeletron prime projectiles // Players can no longer destroy projectiles that are not theirs as of 1.1.2
/*if (args.Player.Index != Main.projectile[index].owner && type != 102 && type != 100 && !TShock.Config.IgnoreProjKill) // workaround for skeletron prime projectiles
{ {
args.Player.Disable("Owner and player ID does not match to kill projectile"); args.Player.Disable("Owner and player ID does not match to kill projectile");
args.Player.RemoveProjectile(ident, owner); args.Player.RemoveProjectile(ident, owner);
return true; return true;
} }*/
if (TShock.CheckIgnores(args.Player)) if (TShock.CheckIgnores(args.Player))
{ {

View file

@ -1068,7 +1068,7 @@ namespace TShockAPI
return true; return true;
} }
if (proj.hostile) if (Main.projHostile[type])
{ {
//player.SendMessage( proj.name, Color.Yellow); //player.SendMessage( proj.name, Color.Yellow);
return true; return true;

View file

@ -705,14 +705,14 @@ namespace TShockAPI
return true; return true;
} }
public int SearchProjectile(short identity) public int SearchProjectile(short identity, int owner)
{ {
for (int i = 0; i < Main.maxProjectiles; i++) for (int i = 0; i < Main.maxProjectiles; i++)
{ {
if (Main.projectile[i].identity == identity) if (Main.projectile[i].identity == identity && Main.projectile[i].owner == owner)
return i; return i;
} }
return 1001; return 1000;
} }
public string SanitizeString(string str) public string SanitizeString(string str)