diff --git a/README.md b/README.md
index 639875f..682e5c6 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,8 @@ Use import with caution – in case of bug can broke your current account / viki
* **Note:** import hideout from original dragonrescue dumps doesn't work and won't work, due to the lack of hideout in original data
* farm
* **Note:** due to the lack some data in original dragonrescue dumps, import farm (in some cases) can be limited only to main (default) farm
- * inventory (**experimental** - can broke your account; blueprint not working, battle backpack not working correctly)
+ * inventory
+ * **Warning:** inventory contains many invisible items (for example affecting quests); inventory import can broke your account
### What doesn't work – TODO
diff --git a/dragonrescue-import.csproj b/dragonrescue-import.csproj
index bd168d0..780842f 100644
--- a/dragonrescue-import.csproj
+++ b/dragonrescue-import.csproj
@@ -6,7 +6,7 @@
enable
true
- 0.2.1
+ 0.3.0
$(SourceRevisionId)
$(MSBuildThisFileDirectory)bin
diff --git a/src/Api/InventoryApi.cs b/src/Api/InventoryApi.cs
index 6190b30..b7f1b97 100644
--- a/src/Api/InventoryApi.cs
+++ b/src/Api/InventoryApi.cs
@@ -37,6 +37,22 @@ public static async Task AddItems(HttpClient client, string apiToken, Di
return bodyRaw;
}
+ public static async Task AddBattleItems(HttpClient client, string apiToken, List itemsList) {
+ var request = new AddBattleItemsRequest {
+ BattleItemTierMaps = itemsList
+ };
+
+ var formContent = new FormUrlEncodedContent(new[] {
+ new KeyValuePair("apiKey", Config.APIKEY),
+ new KeyValuePair("apiToken", apiToken),
+ new KeyValuePair("request", XmlUtil.SerializeXml(request)),
+ });
+
+ var bodyRaw = await client.PostAndGetReplayOrThrow(Config.URL_CONT_API + "/V2/ContentWebService.asmx/AddBattleItems", formContent);
+
+ return bodyRaw;
+ }
+
public static async Task GetCommonInventory(HttpClient client, string apiToken) {
GetCommonInventoryRequest request = new GetCommonInventoryRequest {
ContainerId = 1,
diff --git a/src/Importers.cs b/src/Importers.cs
index 239c7bc..2360857 100644
--- a/src/Importers.cs
+++ b/src/Importers.cs
@@ -118,16 +118,23 @@ public static async System.Threading.Tasks.Task ImportInventory(LoginApi.Data lo
CommonInventoryData inventory = XmlUtil.DeserializeXml(System.IO.File.ReadAllText(path));
var inventoryChanges = new Dictionary();
+ var battleInventoryChanges = new List();
foreach (UserItemData userItem in inventory.Item) {
if (skipStables && userItem.Item.AssetName.Length >= 12 && userItem.Item.AssetName.Substring(0,12) == "DragonStable")
continue;
- //Console.WriteLine($"{userItem.ItemID} {userItem.Quantity} {userItem.ItemTier} {userItem.ItemStats}");
- // TODO support for DT items (items with non empty userItem.ItemTier and userItem.ItemStats)
-
- if (userItem.Item.BluePrint != null) continue;
-
- inventoryChanges[userItem.ItemID] = userItem.Quantity;
+ if (userItem.ItemTier != null && userItem.ItemStats != null) {
+ battleInventoryChanges.Add(
+ new BattleItemTierMap{
+ ItemID = userItem.ItemID,
+ Quantity = userItem.Quantity,
+ Tier = userItem.ItemTier,
+ ItemStats = userItem.ItemStats
+ }
+ );
+ } else {
+ inventoryChanges[userItem.ItemID] = userItem.Quantity;
+ }
}
// connect to server and login as viking
@@ -139,8 +146,18 @@ public static async System.Threading.Tasks.Task ImportInventory(LoginApi.Data lo
// send inventory to server
Console.WriteLine("Importing inventory ... please be patient ... it may take a while ...");
- var res = await InventoryApi.AddItems(client2, apiToken, inventoryChanges);
- Console.WriteLine(res);
+ var res1 = await InventoryApi.AddItems(client2, apiToken, inventoryChanges);
+
+ XmlDocument res1Xml = new XmlDocument();
+ res1Xml.LoadXml(res1);
+ Console.WriteLine(res1Xml["CIRS"]["s"].InnerText);
+
+ Console.WriteLine("Importing battle inventory ... please be patient ... it may take a while ...");
+ var res2 = await InventoryApi.AddBattleItems(client2, apiToken, battleInventoryChanges);
+
+ XmlDocument res2Xml = new XmlDocument();
+ res2Xml.LoadXml(res2);
+ Console.WriteLine(res2Xml["ABIRES"]["ST"].InnerText);
}
public static async System.Threading.Tasks.Task ImportHideout(LoginApi.Data loginData, string path, bool addToInventory = true) {
diff --git a/src/Schema/AddBattleItemsRequest.cs b/src/Schema/AddBattleItemsRequest.cs
new file mode 100644
index 0000000..4af6553
--- /dev/null
+++ b/src/Schema/AddBattleItemsRequest.cs
@@ -0,0 +1,10 @@
+using System.Xml.Serialization;
+
+namespace dragonrescue.Schema;
+
+[XmlRoot(ElementName = "ABIR", Namespace = "")]
+[Serializable]
+public class AddBattleItemsRequest {
+ [XmlElement(ElementName = "BITM", IsNullable = false)]
+ public List BattleItemTierMaps { get; set; }
+}
diff --git a/src/Schema/BattleItemTierMap.cs b/src/Schema/BattleItemTierMap.cs
new file mode 100644
index 0000000..95e7f26
--- /dev/null
+++ b/src/Schema/BattleItemTierMap.cs
@@ -0,0 +1,19 @@
+using System.Xml.Serialization;
+
+namespace dragonrescue.Schema;
+
+[XmlRoot(ElementName = "BITM", Namespace = "")]
+[Serializable]
+public class BattleItemTierMap {
+ [XmlElement(ElementName = "IID", IsNullable = false)]
+ public int ItemID { get; set; }
+
+ [XmlElement(ElementName = "T", IsNullable = true)]
+ public ItemTier? Tier { get; set; }
+
+ [XmlElement(ElementName = "QTY", IsNullable = true)]
+ public int? Quantity { get; set; }
+
+ [XmlElement(ElementName = "iss", IsNullable = true)]
+ public ItemStat[] ItemStats { get; set; }
+}