归档
This commit is contained in:
parent
d5c58aa664
commit
3b4f934a44
13
MHQuestHelperLib.sln
Normal file
13
MHQuestHelperLib.sln
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.4.33403.182
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Global
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {47F1902A-A0BD-41C7-A5CB-82671CC3E518}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
232
MHQuestHelperLib/HexHelper.cs
Normal file
232
MHQuestHelperLib/HexHelper.cs
Normal file
@ -0,0 +1,232 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MHQuestHelperLib
|
||||
{
|
||||
public class HexHelper
|
||||
{
|
||||
|
||||
public static byte[] CopyByteArr(byte[] src)
|
||||
{
|
||||
byte[] target = new byte[src.Length];
|
||||
//加载数据
|
||||
target = new byte[src.Length];
|
||||
for (int i = 0; i < src.Length; i++)
|
||||
target[i] = src[i];
|
||||
return target;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取byte[]数据
|
||||
/// </summary>
|
||||
/// <param name="src"></param>
|
||||
/// <param name="lenght"></param>
|
||||
/// <param name="offset"></param>
|
||||
/// <returns></returns>
|
||||
public static byte[] ReadBytes(byte[] src, int lenght, int offset = 0)
|
||||
{
|
||||
byte[] data = new byte[lenght];
|
||||
for (int i = 0; i < lenght; i++)
|
||||
{
|
||||
data[i] = src[offset + i];
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* byte[]转换int byte高位在前
|
||||
*/
|
||||
public static int bytesToInt(byte[] src,int lenght, int offset = 0)
|
||||
{
|
||||
if (lenght == 1)
|
||||
return src[offset + 0];
|
||||
|
||||
byte[] data = new byte[lenght];
|
||||
for (int i = 0; i < lenght; i++)
|
||||
{
|
||||
data[i] = src[offset + i];
|
||||
}
|
||||
|
||||
if(lenght == 2)
|
||||
return BitConverter.ToInt16(data, 0);
|
||||
else //if (lenght == 4)
|
||||
return BitConverter.ToInt32(data, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* byte[]转换int byte高位在前
|
||||
*/
|
||||
public static uint bytesToUInt(byte[] src, int lenght, int offset = 0)
|
||||
{
|
||||
if (lenght == 1)
|
||||
return src[offset + 0];
|
||||
|
||||
byte[] data = new byte[lenght];
|
||||
for (int i = 0; i < lenght; i++)
|
||||
{
|
||||
data[i] = src[offset + i];
|
||||
}
|
||||
|
||||
if (lenght == 2)
|
||||
return BitConverter.ToUInt16(data, 0);
|
||||
else //if (lenght == 4)
|
||||
return BitConverter.ToUInt32(data, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* int 转 byte[] byte高位在前
|
||||
*/
|
||||
public static byte[] intToBytes(int value)
|
||||
{
|
||||
return BitConverter.GetBytes(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从字节读取字符串
|
||||
*/
|
||||
public static string ReadBytesToString(byte[] src, int Start, Encoding encoding = null)
|
||||
{
|
||||
List<byte> bytes = new List<byte>();
|
||||
|
||||
int index = 0;
|
||||
while (true)
|
||||
{
|
||||
bytes.Add(src[Start + index]);
|
||||
|
||||
if (src[Start + index + 1] == 0x00)
|
||||
break;
|
||||
|
||||
index++;
|
||||
}
|
||||
if (encoding == null)
|
||||
encoding = Encoding.GetEncoding("Shift-JIS");
|
||||
string str = encoding.GetString(bytes.ToArray());
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 从字节读取字符串
|
||||
*/
|
||||
public static string ReadBytesToString(byte[] src, Encoding encoding = null)
|
||||
{
|
||||
if (encoding == null)
|
||||
encoding = Encoding.GetEncoding("Shift-JIS");
|
||||
string str = encoding.GetString(src.ToArray());
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 写入int到byte[] byte高位在前
|
||||
*/
|
||||
public static void ModifyIntHexToBytes(byte[] srcdata, int targetvalue,int startoffset, int srclenght)
|
||||
{
|
||||
byte[] targetVal = intToBytes(targetvalue);
|
||||
|
||||
//抹去数据
|
||||
for (int i = 0; i < srclenght; i++)
|
||||
srcdata[startoffset + i] = 0x00;
|
||||
|
||||
for (int i = 0; i < targetVal.Length && i < srclenght; i++)
|
||||
srcdata[startoffset + i] = targetVal[i];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 写入byte[]到byte[] byte高位在前
|
||||
*/
|
||||
public static void ModifyDataToBytes(byte[] srcdata, byte[] targetVal, int startoffset)
|
||||
{
|
||||
//抹去数据
|
||||
for (int i = 0; i < targetVal.Length; i++)
|
||||
srcdata[startoffset + i] = 0x00;
|
||||
|
||||
for (int i = 0; i < targetVal.Length && i < targetVal.Length; i++)
|
||||
srcdata[startoffset + i] = targetVal[i];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 对比数据
|
||||
*/
|
||||
public static bool CheckDataEquals(byte[] srcdata, byte[] targetVal, int startoffset)
|
||||
{
|
||||
byte[] temp = new byte[targetVal.Length];
|
||||
for (int i = 0; i < targetVal.Length && i < targetVal.Length; i++)
|
||||
temp[i] = srcdata[startoffset + i];
|
||||
|
||||
return Array.Equals(targetVal, temp);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 另一种16进制转10进制的处理方式,Multiplier参与*16的循环很巧妙,对Multiplier的处理很推荐,逻辑统一
|
||||
/// </summary>
|
||||
/// <param name="HexaDecimalString"></param>
|
||||
/// <returns></returns>
|
||||
public static int HexaToDecimal(string HexaDecimalString)
|
||||
{
|
||||
int Decimal = 0;
|
||||
int Multiplier = 1;
|
||||
|
||||
for (int i = HexaDecimalString.Length - 1; i >= 0; i--)
|
||||
{
|
||||
Decimal += HexaToDecimal(HexaDecimalString[i]) * Multiplier;
|
||||
Multiplier *= 16;
|
||||
}
|
||||
return Decimal;
|
||||
}
|
||||
|
||||
static int HexaToDecimal(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '0':
|
||||
return 0;
|
||||
case '1':
|
||||
return 1;
|
||||
case '2':
|
||||
return 2;
|
||||
case '3':
|
||||
return 3;
|
||||
case '4':
|
||||
return 4;
|
||||
case '5':
|
||||
return 5;
|
||||
case '6':
|
||||
return 6;
|
||||
case '7':
|
||||
return 7;
|
||||
case '8':
|
||||
return 8;
|
||||
case '9':
|
||||
return 9;
|
||||
case 'A':
|
||||
case 'a':
|
||||
return 10;
|
||||
case 'B':
|
||||
case 'b':
|
||||
return 11;
|
||||
case 'C':
|
||||
case 'c':
|
||||
return 12;
|
||||
case 'D':
|
||||
case 'd':
|
||||
return 13;
|
||||
case 'E':
|
||||
case 'e':
|
||||
return 14;
|
||||
case 'F':
|
||||
case 'f':
|
||||
return 15;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
88
MHQuestHelperLib/MH2Tools.cs
Normal file
88
MHQuestHelperLib/MH2Tools.cs
Normal file
@ -0,0 +1,88 @@
|
||||
namespace MHQuestHelperLib
|
||||
{
|
||||
public class MH2Tools
|
||||
{
|
||||
#region 公开属性
|
||||
public int QuestInfoPtr => GetQuestInfoPtr();
|
||||
public int CharactorScenePtr => GetCharactorScenePtr();
|
||||
public int BOSSInFoPtr => GetBOSSInFoPtr();
|
||||
public int QuestRewardPtr => GetQuestRewardPtr();
|
||||
public int SuppliesItemPtr => GetSuppliesItemPtr();
|
||||
public int ItemPointPtr => GetItemPointPtr();
|
||||
public int FishGroupPtr => GetFishGroupPtr();
|
||||
#endregion
|
||||
|
||||
byte[] target;
|
||||
public MH2Tools(byte[] src)
|
||||
{
|
||||
target = HexHelper.CopyByteArr(src);//加载数据
|
||||
}
|
||||
#region 指针查询类
|
||||
/// <summary>
|
||||
/// 任务信息指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetQuestInfoPtr()
|
||||
{
|
||||
//从前4字节取出指针 定位任务信息位置
|
||||
return HexHelper.bytesToInt(target, 4, 0x00);
|
||||
}
|
||||
/// <summary>
|
||||
/// 任务信息指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetCharactorScenePtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x04);
|
||||
}
|
||||
/// <summary>
|
||||
/// BOSS(头部信息,指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetBOSSInFoPtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x18);
|
||||
}
|
||||
/// <summary>
|
||||
/// 取报酬组头部信息
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetQuestRewardPtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x0C);
|
||||
}
|
||||
/// <summary>
|
||||
/// 支援道具指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetSuppliesItemPtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x08);
|
||||
}
|
||||
/// <summary>
|
||||
/// 采集点指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetItemPointPtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x38);
|
||||
}
|
||||
/// <summary>
|
||||
/// 鱼群指针
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
int GetFishGroupPtr()
|
||||
{
|
||||
return HexHelper.bytesToInt(target, 4, 0x40);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 读取类
|
||||
|
||||
#endregion
|
||||
|
||||
#region 操作类
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
9
MHQuestHelperLib/MHQuestHelperLib.csproj
Normal file
9
MHQuestHelperLib/MHQuestHelperLib.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user