From efa6b8fbac1d3a0c7af0e08d8bea55c60b5900d5 Mon Sep 17 00:00:00 2001 From: k0rd Date: Mon, 30 Sep 2013 23:55:33 -0400 Subject: [PATCH] permission 'canpaint' for painting tiles --- TShockAPI/GetDataHandlers.cs | 116 ++++++++++++++++++++++++++++++++++- TShockAPI/Permissions.cs | 3 + 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 8f0f84e3..abc4d8d6 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1227,7 +1227,9 @@ namespace TShockAPI {PacketTypes.ContinueConnecting2, HandleConnecting}, {PacketTypes.ProjectileDestroy, HandleProjectileKill}, {PacketTypes.SpawnBossorInvasion, HandleSpawnBoss}, - {PacketTypes.Teleport, HandleTeleport} + {PacketTypes.Teleport, HandleTeleport}, + {PacketTypes.PaintTile, HandlePaintTile}, + {PacketTypes.PaintWall, HandlePaintWall} }; } @@ -2004,6 +2006,83 @@ namespace TShockAPI return false; } + /// + /// For use with a PaintTile event + /// + public class PaintTileEventArgs : HandledEventArgs + { + /// + /// X Location + /// + public Int32 X { get; set; } + /// + /// Y Location + /// + public Int32 Y { get; set; } + /// + /// Type + /// + public byte type { get; set; } + } + /// + /// NPCStrike - Called when an NPC is attacked + /// + public static HandlerList PaintTile; + + private static bool OnPaintTile(Int32 x, Int32 y, byte t) + { + if (PaintTile == null) + return false; + + var args = new PaintTileEventArgs + { + X = x, + Y = y, + type = t + }; + PaintTile.Invoke(null, args); + return args.Handled; + } + + + /// + /// For use with a PaintWall event + /// + public class PaintWallEventArgs : HandledEventArgs + { + /// + /// X Location + /// + public Int32 X { get; set; } + /// + /// Y Location + /// + public Int32 Y { get; set; } + /// + /// Type + /// + public byte type { get; set; } + } + /// + /// Called When a wall is painted + /// + public static HandlerList PaintWall; + + private static bool OnPaintWall(Int32 x, Int32 y, byte t) + { + if (PaintWall == null) + return false; + + var args = new PaintWallEventArgs + { + X = x, + Y = y, + type = t + }; + PaintWall.Invoke(null, args); + return args.Handled; + } + private static bool HandleTogglePvp(GetDataHandlerArgs args) { byte id = args.Data.ReadInt8(); @@ -3061,6 +3140,41 @@ namespace TShockAPI return false; } + private static bool HandlePaintTile(GetDataHandlerArgs args) + { + var x = args.Data.ReadInt32(); + var y = args.Data.ReadInt32(); + var t = args.Data.ReadInt8(); + + if (OnPaintTile(x, y, t)) + return true; + + if (!args.Player.Group.HasPermission(Permissions.canpaint)) + { + args.Player.SendTileSquare(x, y); + return true; + } + + return false; + } + + private static bool HandlePaintWall(GetDataHandlerArgs args) + { + var x = args.Data.ReadInt32(); + var y = args.Data.ReadInt32(); + var t = args.Data.ReadInt8(); + + if (OnPaintTile(x, y, t)) + return true; + + if (!args.Player.Group.HasPermission(Permissions.canpaint)) + { + args.Player.SendTileSquare(x, y); + return true; + } + + return false; + } private static bool HandleTeleport(GetDataHandlerArgs args) { var flag = args.Data.ReadInt8(); diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index f4906747..58190ee2 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -247,6 +247,9 @@ namespace TShockAPI [Description("User can modify the world.")] public static readonly string canbuild = "tshock.world.modify"; + + [Description("User can paint tiles.")] + public static readonly string canpaint = "tshock.world.paint"; // Non-grouped