解决任务昼夜mode问题
This commit is contained in:
parent
15a8da3216
commit
fa3a08da0f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -162,14 +162,6 @@ namespace MHFQuestToMH2Dos
|
||||
for (int i = 0; i < targetVal.Length && i < targetVal.Length; i++)
|
||||
temp[i] = srcdata[startoffset + i];
|
||||
|
||||
if (!Array.Equals(targetVal, temp))
|
||||
{
|
||||
for (int i = 0; i < targetVal.Length; i++)
|
||||
{
|
||||
Console.WriteLine($"{(targetVal[i] != temp[i] ? "不等" : "相等")} target:{targetVal[i]} src:{temp[i]}");
|
||||
}
|
||||
}
|
||||
|
||||
return Array.Equals(targetVal, temp);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -46,22 +47,22 @@ namespace MHFQuestToMH2Dos
|
||||
|
||||
//从前4字节取出指针 定位任务信息位置
|
||||
int _QuestInfoPtr = HexHelper.bytesToInt(target, 4, 0x00);
|
||||
Log.HexTips(0x00, "开始读取任务头部信息,指针->{0}", _QuestInfoPtr);
|
||||
//Log.HexTips(0x00, "开始读取任务头部信息,指针->{0}", _QuestInfoPtr);
|
||||
|
||||
//任务目的地MapID
|
||||
_QuestTargetMapID = HexHelper.bytesToInt(target, ModifyQuest.cQuestInfo_TargetMapID_Lenght, _QuestInfoPtr + ModifyQuest.cQuestInfo_TargetMap_Offset);
|
||||
Log.HexColor(ConsoleColor.Green, _QuestInfoPtr + ModifyQuest.cQuestInfo_TargetMap_Offset, "目的地地图,指针->{0} 【" + MHHelper.Get2MapName(_QuestTargetMapID) + "】", _QuestTargetMapID);
|
||||
//Log.HexColor(ConsoleColor.Green, _QuestInfoPtr + ModifyQuest.cQuestInfo_TargetMap_Offset, "目的地地图,指针->{0} 【" + MHHelper.Get2MapName(_QuestTargetMapID) + "】", _QuestTargetMapID);
|
||||
|
||||
//区域数量
|
||||
int _AreaCount = MHHelper.GetMapAreaCount(_QuestTargetMapID);
|
||||
Log.Info(MHHelper.Get2MapName(_QuestTargetMapID) + "的地图数量" + _AreaCount);
|
||||
//Log.Info(MHHelper.Get2MapName(_QuestTargetMapID) + "的地图数量" + _AreaCount);
|
||||
mapAreaData = new MapAreaData(_AreaCount);
|
||||
|
||||
#region 换区设置
|
||||
|
||||
//换区设置指针
|
||||
int _CAreaSetTopPtr = HexHelper.bytesToInt(target, 4, 0x1C);
|
||||
Log.HexInfo(0x1C, "换区设置指针->{0}", _CAreaSetTopPtr);
|
||||
//Log.HexInfo(0x1C, "换区设置指针->{0}", _CAreaSetTopPtr);
|
||||
|
||||
//读取换区单个区域游标
|
||||
int _CAreaSetTop_CurrPtr = _CAreaSetTopPtr;
|
||||
@ -72,7 +73,7 @@ namespace MHFQuestToMH2Dos
|
||||
|
||||
if (_One_CurrPtr == 0x0)
|
||||
{
|
||||
Log.HexInfo(_CAreaSetTop_CurrPtr, "区域设置"+i+"指针为0,跳过");
|
||||
//Log.HexInfo(_CAreaSetTop_CurrPtr, "区域设置"+i+"指针为0,跳过");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -84,11 +85,11 @@ namespace MHFQuestToMH2Dos
|
||||
||
|
||||
HexHelper.bytesToInt(target, 1, _One_CurrPtr) == 0)
|
||||
{
|
||||
Log.HexInfo(_One_CurrPtr, "区域设置结束符");
|
||||
//Log.HexInfo(_One_CurrPtr, "区域设置结束符");
|
||||
break;
|
||||
}
|
||||
Log.HexInfo(_CAreaSetTop_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,换区设置指针->{0}", _One_CurrPtr);
|
||||
Log.HexTips(_One_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,读取数据,长度{0}", 0x34);
|
||||
//Log.HexInfo(_CAreaSetTop_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,换区设置指针->{0}", _One_CurrPtr);
|
||||
//Log.HexTips(_One_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,读取数据,长度{0}", 0x34);
|
||||
datas.Add(HexHelper.ReadBytes(target, 0x34, _One_CurrPtr));
|
||||
Set_TargetIndex++;
|
||||
_One_CurrPtr += 0x34;
|
||||
@ -102,12 +103,12 @@ namespace MHFQuestToMH2Dos
|
||||
#region 区域映射
|
||||
//区域映射指针
|
||||
int _CAreaPosTopPtr = HexHelper.bytesToInt(target, 4, 0x20);
|
||||
Log.HexInfo(0x20, "换区映射指针->{0}", _CAreaPosTopPtr);
|
||||
//Log.HexInfo(0x20, "换区映射指针->{0}", _CAreaPosTopPtr);
|
||||
//读取单个区域映射游标
|
||||
int _CAreaPosTop_CurrPtr = _CAreaPosTopPtr;
|
||||
for (int i = 0; i < _AreaCount; i++)
|
||||
{
|
||||
Log.HexTips(_CAreaPosTop_CurrPtr, "第" + i + "区的区域映射,读取数据,长度{0}", 0x20);
|
||||
//Log.HexTips(_CAreaPosTop_CurrPtr, "第" + i + "区的区域映射,读取数据,长度{0}", 0x20);
|
||||
mapAreaData.areaPosDatas.Add(HexHelper.ReadBytes(target, 0x20, _CAreaPosTop_CurrPtr));
|
||||
_CAreaPosTop_CurrPtr += 0x20;
|
||||
}
|
||||
@ -128,8 +129,35 @@ namespace MHFQuestToMH2Dos
|
||||
File.Delete(DictMapIDFullFileName[_QuestTargetMapID]);
|
||||
}
|
||||
DictMapIDFullFileName[_QuestTargetMapID] = FullFileName;
|
||||
Log.HexColor(ConsoleColor.Green, _QuestTargetMapID, "成功,缓存地图 编号{0}" + MHHelper.Get2MapName(_QuestTargetMapID) + "的数据", _QuestTargetMapID);
|
||||
//Log.HexColor(ConsoleColor.Green, _QuestTargetMapID, "成功,缓存地图 编号{0}" + MHHelper.Get2MapName(_QuestTargetMapID) + "的数据", _QuestTargetMapID);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static Dictionary<string, int> DictTimeTypeCount = new Dictionary<string, int>();
|
||||
public static void GetModeType(byte[] src,string FileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] target = HexHelper.CopyByteArr(src);//加载数据
|
||||
|
||||
//从前4字节取出指针 定位任务信息位置
|
||||
int _QuestInfoPtr = HexHelper.bytesToInt(target, 4, 0x00);
|
||||
int _TimeType = HexHelper.bytesToInt(target, 1, _QuestInfoPtr + 2);
|
||||
|
||||
|
||||
string key = FileName.Substring(FileName.Length - 1 - 5) + "_" + "(0x" + _TimeType.ToString("X") + ")";
|
||||
if(!DictTimeTypeCount.ContainsKey(key))
|
||||
{
|
||||
DictTimeTypeCount[key] = 0;
|
||||
}
|
||||
DictTimeTypeCount[key]++;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
104
MHHelper.cs
104
MHHelper.cs
@ -54,33 +54,93 @@ namespace MHFQuestToMH2Dos
|
||||
return "未定义";
|
||||
}
|
||||
|
||||
|
||||
public static bool CheckIsXunLianMode(int mode)
|
||||
{
|
||||
return XunLianMode.Contains(mode);
|
||||
}
|
||||
|
||||
public static bool CheckIsDayMode(int mode)
|
||||
{
|
||||
return DayMode.Contains(mode);
|
||||
}
|
||||
|
||||
public static bool CheckIsNightMode(int mode)
|
||||
{
|
||||
return NightMode.Contains(mode);
|
||||
}
|
||||
|
||||
static List<int> NightMode = new List<int>() { 0x11,0x12,0x14};
|
||||
|
||||
static List<int> XunLianMode = new List<int>() { 0x3F, 0xBF};
|
||||
|
||||
static List<int> DayMode = new List<int>() { 0x19,0x1A,0x1C,0x9,0xA,0xC};
|
||||
|
||||
public static bool CheckIsDayMapID(int mapid)
|
||||
{
|
||||
return Dict2DosMap_Day.ContainsKey(mapid);
|
||||
}
|
||||
|
||||
public static bool CheckIsNightMapID(int mapid)
|
||||
{
|
||||
return Dict2DosMap_Night.ContainsKey(mapid);
|
||||
}
|
||||
|
||||
static Dictionary<int, string> Dict2DosMap_Day = new Dictionary<int, string>()
|
||||
{
|
||||
{0x1,"砦(昼)"},
|
||||
{0x2,"森丘(昼)"},
|
||||
{0x3,"砂漠(昼)"},
|
||||
{0x4,"沼地(昼)"},
|
||||
{0x5,"火山(昼)"},
|
||||
{0x6,"密林(昼)"},
|
||||
{0x9,"大闘技場(昼)"},
|
||||
{0xA,"闘技場(昼)"},
|
||||
{0xB,"雪山(昼)"},
|
||||
{0xC,"戦闘街(昼)"},
|
||||
};
|
||||
|
||||
static Dictionary<int, string> Dict2DosMap_Night = new Dictionary<int, string>()
|
||||
{
|
||||
{0x10,"森丘(夜)"},
|
||||
{0x11,"砂漠(夜)"},
|
||||
{0x12,"沼地(夜)"},
|
||||
{0x13,"火山(夜)"},
|
||||
{0x14,"密林(夜)"},
|
||||
{0x15,"雪山(夜)"},
|
||||
{0x16,"戦闘街(夜)"},
|
||||
{0x17,"砦(夜)"},
|
||||
{0x18,"大闘技場(夜)"},
|
||||
{0x19,"闘技場(夜)"},
|
||||
};
|
||||
|
||||
static Dictionary<int, string> Dict2DosMap = new Dictionary<int, string>()
|
||||
{
|
||||
{0x1,"砦"},
|
||||
{0x2,"森丘"},
|
||||
{0x3,"砂漠"},
|
||||
{0x4,"沼地"},
|
||||
{0x5,"火山"},
|
||||
{0x6,"密林"},
|
||||
{0x7,"城"},
|
||||
{0x8,"決戦場紅"},
|
||||
{0x9,"大闘技場"},
|
||||
{0xA,"闘技場"},
|
||||
{0xB,"雪山"},
|
||||
{0xC,"戦闘街"},
|
||||
{0x1,"砦(昼)"},
|
||||
{0x2,"森丘(昼)"},
|
||||
{0x3,"砂漠(昼)"},
|
||||
{0x4,"沼地(昼)"},
|
||||
{0x5,"火山(昼)"},
|
||||
{0x6,"密林(昼)"},
|
||||
{0x7,"修雷特城"},
|
||||
{0x8,"决战场"},
|
||||
{0x9,"大闘技場(昼)"},
|
||||
{0xA,"闘技場(昼)"},
|
||||
{0xB,"雪山(昼)"},
|
||||
{0xC,"戦闘街(昼)"},
|
||||
{0xD,"塔A"},
|
||||
{0xE,"塔B"},
|
||||
{0xF,"塔C"},
|
||||
{0x10,"森丘"},
|
||||
{0x11,"砂漠"},
|
||||
{0x12,"沼地"},
|
||||
{0x13,"火山"},
|
||||
{0x14,"密林"},
|
||||
{0x15,"雪山"},
|
||||
{0x16,"戦闘街"},
|
||||
{0x17,"砦"},
|
||||
{0x18,"大闘技場"},
|
||||
{0x19,"闘技場"},
|
||||
{0x10,"森丘(夜)"},
|
||||
{0x11,"砂漠(夜)"},
|
||||
{0x12,"沼地(夜)"},
|
||||
{0x13,"火山(夜)"},
|
||||
{0x14,"密林(夜)"},
|
||||
{0x15,"雪山(夜)"},
|
||||
{0x16,"戦闘街(夜)"},
|
||||
{0x17,"砦(夜)"},
|
||||
{0x18,"大闘技場(夜)"},
|
||||
{0x19,"闘技場(夜)"},
|
||||
};
|
||||
static Dictionary<int, string> Dict2DosBoss = new Dictionary<int, string>()
|
||||
{
|
||||
|
@ -181,7 +181,6 @@ namespace MHFQuestToMH2Dos
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 迁移任务信息
|
||||
/// </summary>
|
||||
@ -374,6 +373,8 @@ namespace MHFQuestToMH2Dos
|
||||
int _QuestType = HexHelper.bytesToInt(target, cQuestInfo_Type_Lenght, _QuestInfoPtr + cQuestInfo_Type_Offset);
|
||||
Log.HexInfo(_QuestInfoPtr + cQuestInfo_Type_Offset, "任务类型->{0}", _QuestType);
|
||||
|
||||
|
||||
|
||||
//任务星
|
||||
//int _QuestStart = HexHelper.bytesToInt(target, cQuestInfo_Star_Lenght, _QuestInfoPtr + cQuestInfo_Star_Offset);
|
||||
//if (_QuestStart > cMax_QuestStar)
|
||||
@ -410,6 +411,36 @@ namespace MHFQuestToMH2Dos
|
||||
Log.HexColor(ConsoleColor.Green, _QuestInfoPtr + cQuestInfo_TargetMap_Offset, "目的地地图,指针->{0} 【"+MHHelper.Get2MapName(_QuestTargetMapID)+ "】", _QuestTargetMapID);
|
||||
}
|
||||
|
||||
int _ModeType = HexHelper.bytesToInt(target, 1, _QuestInfoPtr + 2);
|
||||
//非训练任务
|
||||
if (!MHHelper.CheckIsXunLianMode(_ModeType))
|
||||
{
|
||||
Log.HexTips(_QuestInfoPtr + 2, "任务模式->原始数据{0}", _ModeType);
|
||||
//如果是昼地图 但不是昼模式
|
||||
if (MHHelper.CheckIsDayMapID(_QuestTargetMapID)
|
||||
&&
|
||||
!MHHelper.CheckIsDayMode(_ModeType)
|
||||
)
|
||||
{
|
||||
HexHelper.ModifyIntHexToBytes(target, 0x1C, _QuestInfoPtr + 2, 1);
|
||||
Log.HexWar(_QuestInfoPtr + 2, "任务模式->修改白天 为{0}", 0x1C);
|
||||
}
|
||||
//如果是夜地图 但不是夜模式
|
||||
else if (MHHelper.CheckIsNightMapID(_QuestTargetMapID)
|
||||
&&
|
||||
!MHHelper.CheckIsNightMode(_ModeType)
|
||||
)
|
||||
{
|
||||
HexHelper.ModifyIntHexToBytes(target, 0x12, _QuestInfoPtr + 2, 1);
|
||||
Log.HexWar(_QuestInfoPtr + 2, "任务模式->修改黑夜 为{0}", 0x12);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.HexTips(_QuestInfoPtr + 2, "任务模式 原始数据 是训练模式 ->{0}", _ModeType);
|
||||
}
|
||||
|
||||
|
||||
uint _QuestID = HexHelper.bytesToUInt(target, cQuestInfo_QuestID_Lenght, _QuestInfoPtr + cQuestInfo_QuestID_Offset);
|
||||
Log.HexTips(_QuestInfoPtr + cQuestInfo_QuestID_Offset, "任务编号【{0}】", _QuestID);
|
||||
if (_QuestID < 60000)
|
||||
@ -610,8 +641,6 @@ namespace MHFQuestToMH2Dos
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static bool FixMapAreaData(byte[] src,out byte[] target)
|
||||
{
|
||||
int _QuestTargetMapID;
|
||||
@ -670,7 +699,7 @@ namespace MHFQuestToMH2Dos
|
||||
break;
|
||||
}
|
||||
|
||||
if (srcData2Dos.targetDatas.Length <= i)
|
||||
if (srcData2Dos.targetDatas[i].targetData.Count <= Set_TargetIndex)
|
||||
{
|
||||
Log.HexWar(_One_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,比2Dos目标数超限。");
|
||||
break;
|
||||
@ -678,11 +707,6 @@ namespace MHFQuestToMH2Dos
|
||||
|
||||
byte[] srcOneData = srcData2Dos.targetDatas[i].targetData[Set_TargetIndex];
|
||||
|
||||
if (!HexHelper.CheckDataEquals(target, srcOneData, _One_CurrPtr))
|
||||
{
|
||||
Log.HexWar(_One_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,数据和2Dos差异,长度{0}", srcOneData.Length);
|
||||
}
|
||||
|
||||
HexHelper.ModifyDataToBytes(target, srcOneData, _One_CurrPtr);
|
||||
Log.HexTips(_One_CurrPtr, "第" + i + "区,第" + Set_TargetIndex + "个目标,更换为2Dos数据,长度{0}", srcOneData.Length);
|
||||
|
||||
@ -709,11 +733,6 @@ namespace MHFQuestToMH2Dos
|
||||
}
|
||||
byte[] srcOneData = srcData2Dos.areaPosDatas[i];
|
||||
|
||||
if (!HexHelper.CheckDataEquals(target, srcOneData, _CAreaPosTop_CurrPtr))
|
||||
{
|
||||
Log.HexWar(_CAreaPosTop_CurrPtr, "第" + i + "区的区域映射,数据和2Dos差异,读取数据,长度{0}", srcOneData.Length);
|
||||
}
|
||||
|
||||
HexHelper.ModifyDataToBytes(target, srcOneData, _CAreaPosTop_CurrPtr);
|
||||
Log.HexTips(_CAreaPosTop_CurrPtr, "第" + i + "区的区域映射,更换为2Dos数据,读取数据,长度{0}", srcOneData.Length);
|
||||
_CAreaPosTop_CurrPtr += 0x20;
|
||||
|
19
Program.cs
19
Program.cs
@ -17,6 +17,7 @@ namespace MHFQuestToMH2Dos
|
||||
Console.Title = title;
|
||||
Console.WriteLine(title);
|
||||
|
||||
|
||||
if (!Directory.Exists(loc + InDir))
|
||||
{
|
||||
Console.WriteLine("Input文件不存在");
|
||||
@ -53,16 +54,16 @@ namespace MHFQuestToMH2Dos
|
||||
}
|
||||
index_temp++;
|
||||
|
||||
Console.WriteLine($">>>>>>>>>>>>>>读取 第{index_temp}个模板文件 {FileName}<<<<<<<<<<<<<<<<<<<");
|
||||
//Console.WriteLine($">>>>>>>>>>>>>>读取 第{index_temp}个模板文件 {FileName}<<<<<<<<<<<<<<<<<<<");
|
||||
FileHelper.LoadFile(tempfiles[i], out byte[] data);
|
||||
if (LoadToSaveTemplate.LoadMapTemplateAreaData(data, FileName, tempfiles[i]))
|
||||
{
|
||||
Console.WriteLine($">>>>>>>>>>>>>>成功读取 第{index_temp}个,"+ FileName);
|
||||
//Console.WriteLine($">>>>>>>>>>>>>>成功读取 第{index_temp}个,"+ FileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
errcount_temp++;
|
||||
Console.WriteLine($">>>>>>>>>>>>>>成功失败 第{index_temp}个");
|
||||
//Console.WriteLine($">>>>>>>>>>>>>>成功失败 第{index_temp}个");
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,6 +94,9 @@ namespace MHFQuestToMH2Dos
|
||||
{
|
||||
string newfileName = FileName + "_fix";
|
||||
string outstring = loc + OutDir + "\\" + newfileName;
|
||||
|
||||
//LoadToSaveTemplate.GetModeType(targetdata, FileName);
|
||||
|
||||
FileHelper.SaveFile(outstring, targetdata);
|
||||
Console.WriteLine($">>>>>>>>>>>>>>成功处理 第{index}个:{outstring}");
|
||||
}
|
||||
@ -104,6 +108,15 @@ namespace MHFQuestToMH2Dos
|
||||
}
|
||||
|
||||
Console.WriteLine($"已处理{files.Length}个文件,其中{errcount}个失败");
|
||||
|
||||
|
||||
string[] tempkeys = LoadToSaveTemplate.DictTimeTypeCount.Keys.OrderBy(w => w).ToArray();
|
||||
|
||||
foreach (var r in tempkeys)
|
||||
{
|
||||
Console.WriteLine(r + ":" + LoadToSaveTemplate.DictTimeTypeCount[r]);
|
||||
}
|
||||
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user