From c29f01b9591f11c4092ac0da790299dd81c6583a Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Tue, 9 Sep 2014 04:03:31 -0400 Subject: [PATCH] Add new rest endpoint /v3/players/read to read the players inventory, armor, and dyes. Armor contains both armor and accessories, as well as vanity. Dyes contain all 8 dye slots. Closes #835 --- TShockAPI/Rest/RestManager.cs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 2bcdcbc5..e34177ff 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -89,6 +89,7 @@ namespace TShockAPI Rest.Register(new SecureRestCommand("/lists/players", PlayerList)); Rest.Register(new SecureRestCommand("/v2/players/list", PlayerListV2)); Rest.Register(new SecureRestCommand("/v2/players/read", PlayerReadV2, RestPermissions.restuserinfo)); + Rest.Register(new SecureRestCommand("/v3/players/read", PlayerReadV3, RestPermissions.restuserinfo)); Rest.Register(new SecureRestCommand("/v2/players/kick", PlayerKickV2, RestPermissions.restkick)); Rest.Register(new SecureRestCommand("/v2/players/ban", PlayerBanV2, RestPermissions.restban, RestPermissions.restmanagebans)); Rest.Register(new SecureRestCommand("/v2/players/kill", PlayerKill, RestPermissions.restkill)); @@ -602,6 +603,30 @@ namespace TShockAPI }; } + private object PlayerReadV3(RestRequestArgs args) + { + var ret = PlayerFind(args.Parameters); + if (ret is RestObject) + return ret; + + TSPlayer player = (TSPlayer)ret; + var inventory = player.TPlayer.inventory.Where(p => p.active).ToList(); + var equipment = player.TPlayer.armor.Where(p => p.active).ToList(); + var dyes = player.TPlayer.dye.Where(p => p.active).ToList(); + return new RestObject() + { + {"nickname", player.Name}, + {"username", null == player.UserAccountName ? "" : player.UserAccountName}, + {"ip", player.IP}, + {"group", player.Group.Name}, + {"position", player.TileX + "," + player.TileY}, + {"inventory", string.Join(", ", inventory.Select(p => (p.name + ":" + p.stack)))}, + {"armor", string.Join(", ", equipment.Select(p => (p.netID + ":" + p.prefix)))}, + {"dyes", string.Join(", ", dyes.Select(p => (p.name)))}, + {"buffs", string.Join(", ", player.TPlayer.buffType)} + }; + } + private object PlayerKickV2(RestRequestArgs args) { var ret = PlayerFind(args.Parameters);