From 98a7e7f080d2b3805e734a5c365c85b1f6acf13a Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Mon, 30 Sep 2013 18:41:54 -0400 Subject: [PATCH] Added SSI Updates. --- TShockAPI/GetDataHandlers.cs | 54 ++++++++++++++++-------- TShockAPI/TSPlayer.cs | 45 ++++++++++++++++---- TShockAPI/TShock.cs | 79 ++++++++++++++++++++++++------------ 3 files changed, 127 insertions(+), 51 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index a86a37cb..4b3b5d4e 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -633,20 +633,20 @@ namespace TShockAPI /// public int TileY { get; set; } /// - /// ??? + /// Amount of liquid /// - public byte Liquid { get; set;} + public byte Amount { get; set;} /// - /// True if lava + /// Type of Liquid: 0=water, 1=lave, 2=honey /// - public bool Lava { get; set; } + public byte Type { get; set; } } /// /// LiquidSet - When ever a liquid is set /// public static HandlerList LiquidSet; - private static bool OnLiquidSet(int tilex, int tiley, byte liquid, bool lava) + private static bool OnLiquidSet(int tilex, int tiley, byte amount, byte type) { if (LiquidSet == null) return false; @@ -655,8 +655,8 @@ namespace TShockAPI { TileX = tilex, TileY = tiley, - Liquid = liquid, - Lava = lava, + Amount = amount, + Type = type, }; LiquidSet.Invoke(null, args); return args.Handled; @@ -2380,11 +2380,12 @@ namespace TShockAPI { int tileX = args.Data.ReadInt32(); int tileY = args.Data.ReadInt32(); - byte liquid = args.Data.ReadInt8(); - bool lava = args.Data.ReadBoolean(); + byte amount = args.Data.ReadInt8(); + byte type = args.Data.ReadInt8(); - if (OnLiquidSet(tileX, tileY, liquid, lava)) + if (OnLiquidSet(tileX, tileY, amount, type)) return true; + if (tileX < 0 || tileX >= Main.maxTilesX || tileY < 0 || tileY >= Main.maxTilesY) return false; @@ -2403,9 +2404,9 @@ namespace TShockAPI if (!args.Player.Group.HasPermission(Permissions.ignoreliquidsetdetection)) { - args.Player.TileLiquidThreshold++; + args.Player.TileLiquidThreshold+=amount; } - if (liquid != 0) + if (amount != 0) { int bucket = 0; if (args.TPlayer.inventory[args.TPlayer.selectedItem].type == 206) @@ -2416,8 +2417,12 @@ namespace TShockAPI { bucket = 2; } + else if (args.TPlayer.inventory[args.TPlayer.selectedItem].type == 207) + { + bucket = 3; + } - if(lava && bucket != 2) + if(type == 1 && bucket != 2) { args.Player.SendErrorMessage("You do not have permission to perform this action."); args.Player.Disable("Spreading lava without holding a lava bucket"); @@ -2425,7 +2430,7 @@ namespace TShockAPI return true; } - if(lava && (!args.Player.Group.HasPermission(Permissions.usebanneditem) && + if(type == 1 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Lava Bucket", args.Player))) { args.Player.SendErrorMessage("You do not have permission to perform this action."); @@ -2434,7 +2439,7 @@ namespace TShockAPI return true; } - if (!lava && bucket != 1) + if (type == 0 && bucket != 1) { args.Player.SendErrorMessage("You do not have permission to perform this action."); args.Player.Disable("Spreading water without holding a water bucket"); @@ -2442,7 +2447,7 @@ namespace TShockAPI return true; } - if (!lava && (!args.Player.Group.HasPermission(Permissions.usebanneditem) && + if (type == 0 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned("Water Bucket", args.Player))) { args.Player.SendErrorMessage("You do not have permission to perform this action."); @@ -2450,6 +2455,23 @@ namespace TShockAPI args.Player.SendTileSquare(tileX, tileY); return true; } + + if (type == 2 && bucket != 3) + { + args.Player.SendErrorMessage("You do not have permission to perform this action."); + args.Player.Disable("Spreading water without holding a water bucket"); + args.Player.SendTileSquare(tileX, tileY); + return true; + } + + if (type == 2 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) && + TShock.Itembans.ItemIsBanned("Honey Bucket", args.Player))) + { + args.Player.SendErrorMessage("You do not have permission to perform this action."); + args.Player.Disable("Using banned honey bucket without permissions"); + args.Player.SendTileSquare(tileX, tileY); + return true; + } } if (TShock.CheckTilePermission(args.Player, tileX, tileY)) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index f5354d0a..019602e0 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -395,7 +395,7 @@ namespace TShockAPI bool flag = false; if (RealPlayer) { - for (int i = 0; i < 40; i++) //41 is trash can, 42-45 is coins, 46-49 is ammo + for (int i = 0; i < 50; i++) //41 is trash can, 42-45 is coins, 46-49 is ammo { if (TPlayer.inventory[i] == null || !TPlayer.inventory[i].active || TPlayer.inventory[i].name == "") { @@ -989,9 +989,10 @@ namespace TShockAPI this.maxHealth = player.TPlayer.statLifeMax; Item[] inventory = player.TPlayer.inventory; Item[] armor = player.TPlayer.armor; + Item[] dye = player.TPlayer.dye; for (int i = 0; i < NetItem.maxNetInventory; i++) { - if (i < 49) + if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)) { if (player.TPlayer.inventory[i] != null) { @@ -1013,11 +1014,12 @@ namespace TShockAPI this.inventory[i].prefix = 0; } } - else + else if (i < NetItem.maxNetInventory - NetItem.dyeSlots) { - if (player.TPlayer.armor[i - 48] != null) + var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)); + if (player.TPlayer.armor[index] != null) { - this.inventory[i].netID = armor[i - 48].netID; + this.inventory[i].netID = armor[index].netID; } else { @@ -1026,8 +1028,31 @@ namespace TShockAPI if (this.inventory[i].netID != 0) { - this.inventory[i].stack = armor[i - 48].stack; - this.inventory[i].prefix = armor[i - 48].prefix; + this.inventory[i].stack = armor[index].stack; + this.inventory[i].prefix = armor[index].prefix; + } + else + { + this.inventory[i].stack = 0; + this.inventory[i].prefix = 0; + } + } + else + { + var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots); + if (player.TPlayer.dye[index] != null) + { + this.inventory[i].netID = armor[index].netID; + } + else + { + this.inventory[i].netID = 0; + } + + if (this.inventory[i].netID != 0) + { + this.inventory[i].stack = armor[index].stack; + this.inventory[i].prefix = armor[index].prefix; } else { @@ -1041,11 +1066,13 @@ namespace TShockAPI public class NetItem { - public static int maxNetInventory = 59; + public static readonly int maxNetInventory = 73; + public static readonly int armorSlots = 11; + public static readonly int dyeSlots = 3; public int netID; public int stack; public int prefix; - + public static string ToString(NetItem[] inventory) { string inventoryString = ""; diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index c4a4dd12..f2c8f32e 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1593,9 +1593,10 @@ namespace TShockAPI Item[] inventory = player.TPlayer.inventory; Item[] armor = player.TPlayer.armor; + Item[] dye = player.TPlayer.dye; for (int i = 0; i < NetItem.maxNetInventory; i++) { - if (i < 49) + if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)) { Item item = new Item(); Item serverItem = new Item(); @@ -1632,34 +1633,35 @@ namespace TShockAPI } } } - else + else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))) { Item item = new Item(); Item serverItem = new Item(); - if (armor[i - 48] != null && armor[i - 48].netID != 0) + var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)); + if (armor[index] != null && armor[index].netID != 0) { - if (playerData.inventory[i].netID != armor[i - 48].netID) + if (playerData.inventory[i].netID != armor[index].netID) { - item.netDefaults(armor[i - 48].netID); - item.Prefix(armor[i - 48].prefix); + item.netDefaults(armor[index].netID); + item.Prefix(armor[index].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } - else if (playerData.inventory[i].prefix != armor[i - 48].prefix) + else if (playerData.inventory[i].prefix != armor[index].prefix) { - item.netDefaults(armor[i - 48].netID); - item.Prefix(armor[i - 48].prefix); + item.netDefaults(armor[index].netID); + item.Prefix(armor[index].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } - else if (armor[i - 48].stack > playerData.inventory[i].stack) + else if (armor[index].stack > playerData.inventory[i].stack) { - item.netDefaults(armor[i - 48].netID); - item.Prefix(armor[i - 48].prefix); + item.netDefaults(armor[index].netID); + item.Prefix(armor[index].prefix); item.AffixName(); player.SendMessage( player.IgnoreActionsForInventory = @@ -1669,6 +1671,44 @@ namespace TShockAPI } } } + else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))) + { + Item item = new Item(); + Item serverItem = new Item(); + var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots); + if (dye[index] != null && dye[index].netID != 0) + { + if (playerData.inventory[i].netID != dye[index].netID) + { + item.netDefaults(dye[index].netID); + item.Prefix(dye[index].prefix); + item.AffixName(); + player.SendMessage(player.IgnoreActionsForInventory = "Your dye (" + item.name + ") needs to be deleted.", + Color.Cyan); + check = false; + } + else if (playerData.inventory[i].prefix != dye[index].prefix) + { + item.netDefaults(dye[index].netID); + item.Prefix(dye[index].prefix); + item.AffixName(); + player.SendMessage(player.IgnoreActionsForInventory = "Your dye (" + item.name + ") needs to be deleted.", + Color.Cyan); + check = false; + } + else if (dye[index].stack > playerData.inventory[i].stack) + { + item.netDefaults(dye[index].netID); + item.Prefix(dye[index].prefix); + item.AffixName(); + player.SendMessage( + player.IgnoreActionsForInventory = + "Your dye (" + item.name + ") (" + inventory[i].stack + ") needs to have its stack size decreased to (" + + playerData.inventory[i].stack + ").", Color.Cyan); + check = false; + } + } + } } return check; @@ -1676,20 +1716,7 @@ namespace TShockAPI public static bool CheckIgnores(TSPlayer player) { - bool check = false; - if (Config.PvPMode == "always" && !player.TPlayer.hostile) - check = true; - if (player.IgnoreActionsForInventory != "none") - check = true; - if (player.IgnoreActionsForCheating != "none") - check = true; - if (player.IgnoreActionsForDisabledArmor != "none") - check = true; - if (player.IgnoreActionsForClearingTrashCan) - check = true; - if (!player.IsLoggedIn && Config.RequireLogin) - check = true; - return check; + return Config.PvPMode == "always" && !player.TPlayer.hostile || player.IgnoreActionsForInventory != "none" || player.IgnoreActionsForCheating != "none" || player.IgnoreActionsForDisabledArmor != "none" || player.IgnoreActionsForClearingTrashCan || !player.IsLoggedIn && Config.RequireLogin;; } public void OnConfigRead(ConfigFile file)