From b687d9fc9d4141fcdc656f9ee230c17886944077 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Mon, 27 May 2024 00:03:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=8E=A2=E7=B4=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 336 ++++++++++++++++-- .../PublishProfiles/FolderProfile.pubxml | 18 + .../PublishProfiles/FolderProfile.pubxml.user | 10 + 3 files changed, 325 insertions(+), 39 deletions(-) create mode 100644 Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 Properties/PublishProfiles/FolderProfile.pubxml.user diff --git a/Program.cs b/Program.cs index 44668f8..8773c52 100644 --- a/Program.cs +++ b/Program.cs @@ -100,7 +100,7 @@ namespace MHFOldShopTools Console.WriteLine($">>>>>>>>>>>>>>开始处理 第{index}个文件 {FileName}<<<<<<<<<<<<<<<<<<<"); FileHelper.LoadFile(files[i], out string[] lines); - List itemlist = LoadStructForCsv(lines); + List itemlist = LoadStructForCsv(lines); string binfileName = System.IO.Path.GetFileNameWithoutExtension(FileName) + ".bin"; @@ -108,7 +108,7 @@ namespace MHFOldShopTools FileHelper.LoadFile(binoutpath, out byte[] bindata); - ModifyItem(bindata, itemlist, out byte[] ResultData); + ModifyNPShopItem(bindata, itemlist, out byte[] ResultData); FileHelper.SaveFile(binoutpath, ResultData); @@ -132,16 +132,7 @@ namespace MHFOldShopTools Console.WriteLine($">>>>>>>>>>>>>>开始处理 第{index}个文件 {FileName}<<<<<<<<<<<<<<<<<<<"); FileHelper.LoadFile(files[i], out byte[] data); - DiscoverItems(data, out List OutInput, out List outPutCsv); - - - //string listfileName = System.IO.Path.GetFileNameWithoutExtension(FileName) + ".txt"; - //string listoutpath = loc + InDir + "\\" + listfileName; - //FileHelper.SaveFile(listoutpath, OutInputString.ToArray()); - - //string csvfileName = System.IO.Path.GetFileNameWithoutExtension(FileName) + ".csv"; - //string csvoutpath = loc + InDir + "\\" + csvfileName; - //FileHelper.SaveFile(csvoutpath, outPutCsv.ToArray()); + DiscoverItems4(data, out List OutInput, out List outPutCsv); Console.WriteLine($">>>>>>>>>>>>>>处理完毕>>>>>>>>>>>>>>"); } @@ -156,22 +147,22 @@ namespace MHFOldShopTools static int NPStore_Ptr = 0x537924; - const int _singelItemDatalenght = 12; + const int _NPsingelItemDatalenght = 12; static int NPStore_ItemCount = 712; static void ReaderItems(byte[] data,out List OutInput,out List outPutCsv) { OutInput = new List(); outPutCsv = new List(); - List items = new List(); + List items = new List(); for (int i = 0; i < NPStore_ItemCount; i++) { - items.Add(GetShopItemInfo(data, NPStore_Ptr + (i * _singelItemDatalenght))); + items.Add(GetNPShopItemInfo(data, NPStore_Ptr + (i * _NPsingelItemDatalenght))); } for (int i = 0; i < items.Count; i++) { - ShopItem item = items[i]; + NPShopItem item = items[i]; string ItemInfo; if (item.UnKnow) ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | 解析失败"; @@ -209,24 +200,24 @@ namespace MHFOldShopTools { OutInput = new List(); outPutCsv = new List(); - List items = new List(); - + List items = new List(); - int TempPtr = 0x537924; - int ToUpCount = 712; - int flag = 2; + int TempPtr = 0x536100 - 1200; + int ToUpCount = 3000; + + int flag = 1; //顺序 if (flag == 1) { for (int i = 0; i < ToUpCount; i++) { - items.Add(GetShopItemInfo(data, TempPtr + (1 * i * _singelItemDatalenght))); + items.Add(GetNPShopItemInfo(data, TempPtr + (1 * i * _NPsingelItemDatalenght))); } for (int i = 0; i < items.Count; i++) { - ShopItem item = items[i]; + NPShopItem item = items[i]; string ItemInfo; if (item.UnKnow) ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | 解析失败"; @@ -241,12 +232,12 @@ namespace MHFOldShopTools { for (int i = ToUpCount - 1; i >= 0; i--) { - items.Add(GetShopItemInfo(data, TempPtr + (-1 * i * _singelItemDatalenght))); + items.Add(GetNPShopItemInfo(data, TempPtr + (-1 * i * _NPsingelItemDatalenght))); } for (int i = 0; i < items.Count; i++) { - ShopItem item = items[i]; + NPShopItem item = items[i]; string ItemInfo; if (item.UnKnow) ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | 解析失败"; @@ -259,14 +250,152 @@ namespace MHFOldShopTools } } - - static List LoadStructForCsv(string[] lines) + static void DiscoverItems2(byte[] data, out List OutInput, out List outPutCsv) { - List itemList = new List(); + OutInput = new List(); + outPutCsv = new List(); + List items = new List(); + + int TempPtr = 0x535F30; + int ToUpCount = 3000; + int singelItemDatalenght = 8; + int flag = 2; + //顺序 + if (flag == 1) + { + for (int i = 0; i < ToUpCount; i++) + { + items.Add(Get8ByteShopItemInfo(data, TempPtr + (1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_8Byte item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)}) | {item.Point}点"; + Console.WriteLine(ItemInfo); + } + } + else //倒叙 + { + { + for (int i = ToUpCount - 1; i >= 0; i--) + { + items.Add(Get8ByteShopItemInfo(data, TempPtr + (-1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_8Byte item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)}) | {item.Point}点"; + + Console.WriteLine(ItemInfo); + } + } + } + + } + static void DiscoverItems3(byte[] data, out List OutInput, out List outPutCsv) + { + OutInput = new List(); + outPutCsv = new List(); + List items = new List(); + + int TempPtr = 0x535F30; + int ToUpCount = 3000; + int singelItemDatalenght = 8; + int flag = 2; + //顺序 + if (flag == 1) + { + for (int i = 0; i < ToUpCount; i++) + { + items.Add(Get8BbyteIIShopItemInfo(data, TempPtr + (1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_8ByteII item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)}) | {item.Point}点"; + Console.WriteLine(ItemInfo); + } + } + else //倒叙 + { + { + for (int i = ToUpCount - 1; i >= 0; i--) + { + items.Add(Get8BbyteIIShopItemInfo(data, TempPtr + (-1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_8ByteII item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)}) | {item.Point}点"; + + Console.WriteLine(ItemInfo); + } + } + } + + } + static void DiscoverItems4(byte[] data, out List OutInput, out List outPutCsv) + { + OutInput = new List(); + outPutCsv = new List(); + List items = new List(); + + int TempPtr = 0x535F40; + int ToUpCount = 3000; + int singelItemDatalenght = 2; + int flag = 2; + //顺序 + if (flag == 1) + { + for (int i = 0; i < ToUpCount; i++) + { + items.Add(Get2BbyteShopItemInfo(data, TempPtr + (1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_2Byte item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)})"; + Console.WriteLine(ItemInfo); + } + } + else //倒叙 + { + { + for (int i = ToUpCount - 1; i >= 0; i--) + { + items.Add(Get2BbyteShopItemInfo(data, TempPtr + (-1 * i * singelItemDatalenght))); + } + + for (int i = 0; i < items.Count; i++) + { + ShopItem_2Byte item = items[i]; + string ItemInfo; + ItemInfo = $"{"0x" + item.Ptr.ToString("X") + ":"} | {item.ItemID} ({MHHelper.Get2MHFItemName(item.ItemID)})"; + + Console.WriteLine(ItemInfo); + } + } + } + + } + + static List LoadStructForCsv(string[] lines) + { + List itemList = new List(); for (int i = 0;i < lines.Length; i++) { string[] temp = lines[i].Split(','); - ShopItem item = new ShopItem() + NPShopItem item = new NPShopItem() { ItemID = Convert.ToInt32(temp[0]), Point = Convert.ToInt32(temp[1]), @@ -278,18 +407,18 @@ namespace MHFOldShopTools return itemList; } - static void ModifyItem(byte[] srcdata, List items,out byte[] ResultData) + static void ModifyNPShopItem(byte[] srcdata, List items,out byte[] ResultData) { byte[] target = HexHelper.CopyByteArr(srcdata); //ClearData - for (int i = NPStore_Ptr; i < NPStore_Ptr + (NPStore_ItemCount * _singelItemDatalenght); i++) + for (int i = NPStore_Ptr; i < NPStore_Ptr + (NPStore_ItemCount * _NPsingelItemDatalenght); i++) target[i] = 0x00; for (int i = 0; i < items.Count; i++) { - ShopItem itemdata = items[i]; - int tempItemIDPtr = NPStore_Ptr + (i * _singelItemDatalenght); + NPShopItem itemdata = items[i]; + int tempItemIDPtr = NPStore_Ptr + (i * _NPsingelItemDatalenght); int tempPricePtr = tempItemIDPtr + 4; int tempMenuPtr = tempItemIDPtr + 4 + 4; int tempLevelPtr = tempItemIDPtr + 4 + 4 + 1; @@ -331,7 +460,9 @@ namespace MHFOldShopTools } } - static ShopItem GetShopItemInfo(byte[] data, int StartPos) + + #region NP商店类 + static NPShopItem GetNPShopItemInfo(byte[] data, int StartPos) { int ItemID = -1; int Point = -1; @@ -346,25 +477,25 @@ namespace MHFOldShopTools LevelType = HexHelper.bytesToInt(data, 1, StartPos + 4 + 4 + 1); UnKnow = false; } - catch(Exception ex) + catch (Exception ex) { - Console.WriteLine($"获取错误"+ex.ToString()); + Console.WriteLine($"获取错误" + ex.ToString()); UnKnow = true; } - ShopItem item = new ShopItem() + NPShopItem item = new NPShopItem() { Ptr = StartPos, ItemID = ItemID, Point = Point, Group = Group, LevelType = LevelType, - OtherData = new int[]{ data[StartPos + 4 + 4 + 0],data[StartPos + 4 + 4 + 1], data[StartPos + 4 + 4 + 2], data[StartPos + 4 + 4 + 3] }, + OtherData = new int[] { data[StartPos + 4 + 4 + 0], data[StartPos + 4 + 4 + 1], data[StartPos + 4 + 4 + 2], data[StartPos + 4 + 4 + 3] }, UnKnow = UnKnow }; return item; } - struct ShopItem + struct NPShopItem { public int Ptr; public int ItemID; @@ -374,6 +505,133 @@ namespace MHFOldShopTools public int[] OtherData; public bool UnKnow; } + #endregion + + #region 8字节类商品 + + static ShopItem_8Byte Get8ByteShopItemInfo(byte[] data, int StartPos) + { + int ItemID = -1; + int Point = -1; + int Group = -1; + int LevelType = -1; + bool UnKnow = false; + try + { + ItemID = HexHelper.bytesToInt(data, 4, StartPos); + Point = HexHelper.bytesToInt(data, 4, StartPos + 4); + } + catch (Exception ex) + { + Console.WriteLine($"获取错误" + ex.ToString()); + UnKnow = true; + } + ShopItem_8Byte item = new ShopItem_8Byte() + { + Ptr = StartPos, + ItemID = ItemID, + Point = Point, + }; + return item; + } + struct ShopItem_8Byte + { + public int Ptr; + public int ItemID; + public int Point; + } + #endregion + + + #region 8字节II类商品 + + static ShopItem_8ByteII Get8BbyteIIShopItemInfo(byte[] data, int StartPos) + { + int ItemID = -1; + int Point = -1; + try + { + ItemID = HexHelper.bytesToInt(data, 2, StartPos); + Point = HexHelper.bytesToInt(data, 2, StartPos + 4); + } + catch (Exception ex) + { + Console.WriteLine($"获取错误" + ex.ToString()); + } + ShopItem_8ByteII item = new ShopItem_8ByteII() + { + Ptr = StartPos, + ItemID = ItemID, + Point = Point, + }; + return item; + } + struct ShopItem_8ByteII + { + public int Ptr; + public int ItemID; + public int Point; + } + #endregion + + + #region 4字节II类商品 + + static ShopItem_4Byte Get4BbyteShopItemInfo(byte[] data, int StartPos) + { + int ItemID = -1; + int Point = -1; + try + { + ItemID = HexHelper.bytesToInt(data, 2, StartPos); + Point = HexHelper.bytesToInt(data, 2, StartPos + 2); + } + catch (Exception ex) + { + Console.WriteLine($"获取错误" + ex.ToString()); + } + ShopItem_4Byte item = new ShopItem_4Byte() + { + Ptr = StartPos, + ItemID = ItemID, + Point = Point, + }; + return item; + } + struct ShopItem_4Byte + { + public int Ptr; + public int ItemID; + public int Point; + } + #endregion + + #region 2字节 + + static ShopItem_2Byte Get2BbyteShopItemInfo(byte[] data, int StartPos) + { + int ItemID = -1; + try + { + ItemID = HexHelper.bytesToInt(data, 2, StartPos); + } + catch (Exception ex) + { + Console.WriteLine($"获取错误" + ex.ToString()); + } + ShopItem_2Byte item = new ShopItem_2Byte() + { + Ptr = StartPos, + ItemID = ItemID, + }; + return item; + } + struct ShopItem_2Byte + { + public int Ptr; + public int ItemID; + } + #endregion } } diff --git a/Properties/PublishProfiles/FolderProfile.pubxml b/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..d37ba18 --- /dev/null +++ b/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,18 @@ + + + + + Release + Any CPU + bin\Release\net8.0\publish\win-x64\ + FileSystem + <_TargetId>Folder + net8.0 + win-x64 + false + false + false + + \ No newline at end of file diff --git a/Properties/PublishProfiles/FolderProfile.pubxml.user b/Properties/PublishProfiles/FolderProfile.pubxml.user new file mode 100644 index 0000000..884c89e --- /dev/null +++ b/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -0,0 +1,10 @@ + + + + + True|2024-05-13T05:46:24.1873180Z;True|2024-05-11T13:18:15.8973242+08:00;True|2024-05-11T13:18:08.3724619+08:00;False|2024-05-11T13:17:38.3741746+08:00;False|2024-05-11T13:17:09.4841523+08:00;True|2024-05-11T13:11:53.3386412+08:00; + + + \ No newline at end of file