Index: binary-improvements/MapRendering/ModInfo.xml
===================================================================
--- binary-improvements/MapRendering/ModInfo.xml	(revision 244)
+++ binary-improvements/MapRendering/ModInfo.xml	(revision 245)
@@ -5,5 +5,5 @@
 		<Description value="Render the game map to image map tiles as it is uncovered" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="6" />
+		<Version value="7" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs	(revision 245)
+++ binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs	(revision 245)
@@ -0,0 +1,87 @@
+using AllocsFixes.JSON;
+using AllocsFixes.PersistentData;
+using System;
+using System.Collections.Generic;
+using System.Net;
+
+namespace AllocsFixes.NetConnections.Servers.Web.API
+{
+	public class ExecuteConsoleCommand : WebAPI
+	{
+		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, WebConnection user, int permissionLevel) {
+			if (string.IsNullOrEmpty (req.QueryString ["command"])) {
+				resp.StatusCode = (int)HttpStatusCode.BadRequest;
+				Web.SetResponseTextContent (resp, "No command given");
+				return;
+			}
+
+			string commandName = req.QueryString ["command"];
+
+			IConsoleCommand command = SdtdConsole.Instance.GetCommand (commandName);
+
+			if (command == null) {
+				resp.StatusCode = (int)HttpStatusCode.NotImplemented;
+				Web.SetResponseTextContent (resp, "Unknown command");
+				return;
+			}
+
+			AdminToolsCommandPermissions atcp = GameManager.Instance.adminTools.GetAdminToolsCommandPermission (command.GetCommands ());
+
+			if (permissionLevel > atcp.PermissionLevel) {
+				resp.StatusCode = (int)HttpStatusCode.Forbidden;
+				Web.SetResponseTextContent (resp, "You are not allowed to execute this command");
+				return;
+			}
+
+			// TODO: Execute command (store resp as IConsoleConnection instance to deliver response to the single client?)
+
+//			JSONObject result = new JSONObject ();
+//			result.Add ("claimsize", new JSONNumber (GamePrefs.GetInt (EnumGamePrefs.LandClaimSize)));
+//
+//			JSONArray claimOwners = new JSONArray ();
+//			result.Add ("claimowners", claimOwners);
+//
+//			Dictionary<Vector3i, PersistentPlayerData> d = GameManager.Instance.GetPersistentPlayerList ().m_lpBlockMap;
+//			if (d != null) {
+//				World w = GameManager.Instance.World;
+//				Dictionary<PersistentPlayerData, List<Vector3i>> owners = new Dictionary<PersistentPlayerData, List<Vector3i>> ();
+//				foreach (KeyValuePair<Vector3i, PersistentPlayerData> kvp in d) {
+//					if (steamid.Length == 0 || kvp.Value.PlayerId.Equals (steamid)) {
+//						if (!owners.ContainsKey (kvp.Value)) {
+//							owners.Add (kvp.Value, new List<Vector3i> ());
+//						}
+//						owners [kvp.Value].Add (kvp.Key);
+//					}
+//				}
+//
+//				foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
+//					if (steamid.Length == 0 || kvp.Key.PlayerId.Equals (steamid)) {
+//						string curID = kvp.Key.PlayerId;
+//						bool isActive = w.IsLandProtectionValidForPlayer (kvp.Key);
+//
+//						JSONObject owner = new JSONObject ();
+//						claimOwners.Add (owner);
+//
+//						owner.Add ("steamid", new JSONString (curID));
+//						owner.Add ("claimactive", new JSONBoolean (isActive));
+//
+//						JSONArray claims = new JSONArray ();
+//						owner.Add ("claims", claims);
+//
+//						foreach (Vector3i v in kvp.Value) {
+//							JSONObject claim = new JSONObject ();
+//							claim.Add ("x", new JSONNumber (v.x));
+//							claim.Add ("y", new JSONNumber (v.y));
+//							claim.Add ("z", new JSONNumber (v.z));
+//
+//							claims.Add (claim);
+//						}
+//					}
+//				}
+//			}
+//
+//			WriteJSON (resp, result);
+		}
+	}
+}
+
Index: binary-improvements/MapRendering/Web/API/GetLandClaims.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 244)
+++ binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 245)
@@ -53,4 +53,10 @@
 						owner.Add ("claimactive", new JSONBoolean (isActive));
 
+						if (PersistentContainer.Instance.Players [curID, false] != null) {
+							owner.Add ("playername", new JSONString (PersistentContainer.Instance.Players [curID, false].Name));
+						} else {
+							owner.Add ("playername", new JSONNull ());
+						}
+
 						JSONArray claims = new JSONArray ();
 						owner.Add ("claims", claims);
Index: binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs	(revision 244)
+++ binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs	(revision 245)
@@ -7,8 +7,6 @@
 namespace AllocsFixes.NetConnections.Servers.Web.API
 {
-	public class GetPlayerInventory : WebAPI
-	{
-		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, WebConnection user, int permissionLevel)
-		{
+	public class GetPlayerInventory : WebAPI {
+		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, WebConnection user, int permissionLevel) {
 			if (req.QueryString ["steamid"] == null) {
 				resp.StatusCode = (int)HttpStatusCode.InternalServerError;
@@ -31,32 +29,60 @@
 			JSONArray bag = new JSONArray ();
 			JSONArray belt = new JSONArray ();
+			JSONObject equipment = new JSONObject ();
+			result.Add ("playername", new JSONString (p.Name));
 			result.Add ("bag", bag);
 			result.Add ("belt", belt);
+			result.Add ("equipment", equipment);
 
 			for (int i = 0; i < inv.belt.Count; i++) {
-				JSONObject item = new JSONObject();
+				JSONObject item = new JSONObject ();
 				if (inv.belt [i] != null) {
-					item.Add ("count", new JSONNumber(inv.belt[i].count));
-					item.Add ("name", new JSONString(inv.belt[i].itemName));
+					item.Add ("count", new JSONNumber (inv.belt [i].count));
+					item.Add ("name", new JSONString (inv.belt [i].itemName));
 				} else {
-					item.Add ("count", new JSONNumber(0));
-					item.Add ("name", new JSONString(string.Empty));
+					item.Add ("count", new JSONNumber (0));
+					item.Add ("name", new JSONString (string.Empty));
 				}
-				belt.Add(item);
+				belt.Add (item);
 			}
 			for (int i = 0; i < inv.bag.Count; i++) {
-				JSONObject item = new JSONObject();
+				JSONObject item = new JSONObject ();
 				if (inv.bag [i] != null) {
-					item.Add ("count", new JSONNumber(inv.bag[i].count));
-					item.Add ("name", new JSONString(inv.bag[i].itemName));
+					item.Add ("count", new JSONNumber (inv.bag [i].count));
+					item.Add ("name", new JSONString (inv.bag [i].itemName));
 				} else {
-					item.Add ("count", new JSONNumber(0));
-					item.Add ("name", new JSONString(string.Empty));
+					item.Add ("count", new JSONNumber (0));
+					item.Add ("name", new JSONString (string.Empty));
 				}
-				bag.Add(item);
+				bag.Add (item);
 			}
+
+			AddEquipment (equipment, "head", inv.equipment, XMLData.Item.EnumEquipmentSlot.Head, NGuiInvGridEquipment.EnumClothingLayer.Middle);
+			AddEquipment (equipment, "eyes", inv.equipment, XMLData.Item.EnumEquipmentSlot.Eyes, NGuiInvGridEquipment.EnumClothingLayer.Middle);
+			AddEquipment (equipment, "face", inv.equipment, XMLData.Item.EnumEquipmentSlot.Face, NGuiInvGridEquipment.EnumClothingLayer.Middle);
+
+			AddEquipment (equipment, "armor", inv.equipment, XMLData.Item.EnumEquipmentSlot.Chest, NGuiInvGridEquipment.EnumClothingLayer.Outer);
+			AddEquipment (equipment, "jacket", inv.equipment, XMLData.Item.EnumEquipmentSlot.Chest, NGuiInvGridEquipment.EnumClothingLayer.Middle);
+			AddEquipment (equipment, "shirt", inv.equipment, XMLData.Item.EnumEquipmentSlot.Chest, NGuiInvGridEquipment.EnumClothingLayer.Inner);
+
+			AddEquipment (equipment, "legarmor", inv.equipment, XMLData.Item.EnumEquipmentSlot.Legs, NGuiInvGridEquipment.EnumClothingLayer.Outer);
+			AddEquipment (equipment, "pants", inv.equipment, XMLData.Item.EnumEquipmentSlot.Legs, NGuiInvGridEquipment.EnumClothingLayer.Inner);
+			AddEquipment (equipment, "boots", inv.equipment, XMLData.Item.EnumEquipmentSlot.Feet, NGuiInvGridEquipment.EnumClothingLayer.Inner);
+
+			AddEquipment (equipment, "gloves", inv.equipment, XMLData.Item.EnumEquipmentSlot.Hands, NGuiInvGridEquipment.EnumClothingLayer.Inner);
+			AddEquipment (equipment, "backpack", inv.equipment, XMLData.Item.EnumEquipmentSlot.Back, NGuiInvGridEquipment.EnumClothingLayer.Outer);
 
 			WriteJSON (resp, result);
 		}
+
+		private void AddEquipment (JSONObject _eq, string _slotname, InvItem[] _items, XMLData.Item.EnumEquipmentSlot _slot, NGuiInvGridEquipment.EnumClothingLayer _layer) {
+			int index = (int)_slot + (int)_layer * (int)XMLData.Item.EnumEquipmentSlot.Count;
+			if (_items != null && _items [index] != null) {
+				_eq.Add (_slotname, new JSONString (_items [index].itemName));
+			} else {
+				_eq.Add (_slotname, new JSONBoolean (false));
+			}
+		}
+
 	}
 }
Index: binary-improvements/MapRendering/Web/API/GetStats.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetStats.cs	(revision 244)
+++ binary-improvements/MapRendering/Web/API/GetStats.cs	(revision 245)
@@ -19,4 +19,6 @@
 			result.Add ("gametime", time);
 
+			result.Add ("players", new JSONNumber (GameManager.Instance.World.Players.Count));
+
 			WriteJSON (resp, result);
 		}
