MH2QuestEditor/Editor.cs
2023-08-17 18:28:48 +08:00

1968 lines
97 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Lib;
using System.Collections;
using MHQuestHelperLib;
namespace mhfz_quest_editor
{
public partial class Editor : Form
{
public Editor()
{
InitializeComponent();
comboBox1.Items.AddRange(File.ReadAllLines("monster.txt"));
comboBox2.Items.AddRange(File.ReadAllLines("item.txt"));
comboBox_Lar1Boss_Monster.Items.AddRange(File.ReadAllLines("monster.txt"));
comboBox17.Items.AddRange(File.ReadAllLines("monster.txt"));
comboBox19.Items.AddRange(File.ReadAllLines("monster.txt"));
comboBox21.Items.AddRange(File.ReadAllLines("monster.txt"));
radioButton3.Checked = false;
btn_save.Enabled = false;
}
byte[] TempData;
private void btn_load_Click(object sender, EventArgs e)
{
try
{
Load_Quest();
MessageBox.Show("加载成功!");
}
catch (Exception ex)
{
MessageBox.Show("加载失败!:" + ex.ToString());
}
}
private void btn_save_Click(object sender, EventArgs e)
{
try
{
Save_Quest();
MessageBox.Show("保存成功!");
}
catch(Exception ex)
{
MessageBox.Show("保存失败!:"+ex.ToString());
}
}
private void Load_Quest()
{
DialogResult dr = openFileDialog1.ShowDialog();
if (dr == DialogResult.OK)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string fileloc = openFileDialog1.FileName;
byte[] ba = File.ReadAllBytes(fileloc);
comboBox_Lar1Boss_SpawnArea.Items.Clear();
comboBox18.Items.Clear();
comboBox20.Items.Clear();
comboBox22.Items.Clear();
int MH2dosTopoffset = (BitConverter.ToInt32(ba, 0));
//if (ba[0] == 192)
if (true)
{
textBox32.Text = BitConverter.ToString(ba).Replace("-", string.Empty);
TempData = new byte[ba.Length];
Array.Copy(ba, TempData, ba.Length);
int HaveAobj = BitConverter.ToInt16(ba, MH2dosTopoffset + 52);
int HaveBobj = BitConverter.ToInt16(ba, MH2dosTopoffset + 60);
List.Location.TryGetValue(ba[MH2dosTopoffset + 32], out string lcoation); //location
textBox23.Text = lcoation.ToString();
List.Rank.TryGetValue(ba[92], out string rank); //carve rank
comboBox_LarBoss_Carve.Text = rank.ToString();
numericUpDown_fee.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 8); //fee
numericUpDown_Penalty.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 16); //penalty
List.ObjectiveType1.TryGetValue(BitConverter.ToInt32(ba, MH2dosTopoffset + 44), out string MainType); //Load main obj type
comboBox_MainType.Text = MainType;
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 44) == 2)
{
List.Item.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 48), out string MainObjTgt); //harvest
textBox_MainTarget.Text = MainObjTgt;
}
else
{
List.Monster1.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 48), out string MainObjTgt);
textBox_MainTarget.Text = MainObjTgt;
}
numericUpDown_MainAmount.Value = BitConverter.ToInt16(ba, MH2dosTopoffset + 50); //amount
numericUpDown_MainRewardMoney.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 12); //money
List.ObjectiveType1.TryGetValue(BitConverter.ToInt32(ba, MH2dosTopoffset + 52), out string AType);
comboBox_SubAType.Text = AType;
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 52) == 2)
{
List.Item.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 56), out string AObjTgt);
textBox_SubATarget.Text = AObjTgt;
}
else
{
List.Monster1.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 56), out string AObjTgt);
textBox_SubATarget.Text = AObjTgt;
}
numericUpDown_SubA_Amount.Value = BitConverter.ToInt16(ba, MH2dosTopoffset + 58);
numericUpDown_SubARewardMoney.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 20);
List.ObjectiveType1.TryGetValue(BitConverter.ToInt32(ba, MH2dosTopoffset + 60), out string BType);
comboBox_SubBType.Text = BType.ToString();
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 60) == 2)
{
List.Item.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 64), out string BObjTgt);
textBox_SubBTarget.Text = BObjTgt;
}
else
{
List.Monster1.TryGetValue(BitConverter.ToInt16(ba, MH2dosTopoffset + 64), out string BObjTgt);
textBox_SubBTarget.Text = BObjTgt;
}
numericUpDown_SubB_Amount.Value = BitConverter.ToInt16(ba, MH2dosTopoffset + 66); //amount
numericUpDown_SubBRewardMoney.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 24); //money
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 44) == 32772) //if slay
{
numericUpDown_MainAmount.Value = numericUpDown_MainAmount.Value * 100;
}
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 52) == 32772)
{
numericUpDown_SubA_Amount.Value = numericUpDown_SubA_Amount.Value * 100;
}
if (BitConverter.ToInt32(ba, MH2dosTopoffset + 60) == 32772)
{
numericUpDown_SubB_Amount.Value = numericUpDown_SubB_Amount.Value * 100;
}
//Load text
//int questStringsStart = BitConverter.ToInt32(ba, 48); //go and get 4C80
//int questStringsStart = ba[0xC]; //go and get 4C80
int questStringsStart = BitConverter.ToInt32(ba, MH2dosTopoffset + 36);
//int readPointer = BitConverter.ToInt32(ba, questStringsStart); //go text field
int readPointer = questStringsStart;
int pTitleAndName = BitConverter.ToInt32(ba, readPointer);
int pMainoObj = BitConverter.ToInt32(ba, readPointer + 4);
int pAObj = BitConverter.ToInt32(ba, readPointer + 8);
int pBObj = BitConverter.ToInt32(ba, readPointer + 12);
int pClearC = BitConverter.ToInt32(ba, readPointer + 16);
int pFailC = BitConverter.ToInt32(ba, readPointer + 20);
int pHirer = BitConverter.ToInt32(ba, (readPointer + 24));
int pText = BitConverter.ToInt32(ba, (readPointer + 28));
//int pTitleAndName = BitConverter.ToInt32(ba, (readPointer - 32));
//int pMainoObj = BitConverter.ToInt32(ba, (readPointer - 28));
//int pAObj = BitConverter.ToInt32(ba, (readPointer - 24));
//int pBObj = BitConverter.ToInt32(ba, (readPointer - 20));
//int pClearC = BitConverter.ToInt32(ba, (readPointer - 16));
//int pFailC = BitConverter.ToInt32(ba, (readPointer - 12));
//int pHirer = BitConverter.ToInt32(ba, (readPointer - 8));
//int pText = BitConverter.ToInt32(ba, (readPointer - 4));
byte[] tTitleAndName = File.ReadAllBytes(fileloc).Skip(pTitleAndName).Take(pMainoObj - pTitleAndName).ToArray();
string str = Encoding.GetEncoding("Shift_JIS").GetString(tTitleAndName); //encode as shift jis
txtBox_TitleAndName.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pTitleAndName).Take(pMainoObj - pTitleAndName).ToArray()).Replace("\n", "\r\n");
txtBox_MainObjective.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pMainoObj).Take(pAObj - pMainoObj).ToArray()); //Main
string tB = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pBObj).Take(pClearC - pBObj).ToArray()); //B
txtBox_SubBObjective.Text = tB; //B
string tA = txtBox_SubAObjective.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pAObj).Take(pBObj - pAObj).ToArray());
if (string.IsNullOrEmpty(tA))
{
txtBox_SubAObjective.Text = tB;
}
txtBox_ClearCondition.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pClearC).Take(pFailC - pClearC).ToArray()); //Clear
txtBox_FailCondition.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pFailC).Take(pHirer - pFailC).ToArray()).Replace("\n", "\r\n");
txtBox_Employer.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pHirer).Take(pText - pHirer).ToArray());
txtBox_Description.Text = Encoding.GetEncoding("Shift_JIS").GetString(File.ReadAllBytes(fileloc).Skip(pText).Take(ba.Length - pText).ToArray()).Replace("\n", "\r\n");
//Load supply item
int SupplyInfoStart = BitConverter.ToInt32(ba, 8);
byte[] SupplyInfoArray = File.ReadAllBytes(fileloc).Skip(SupplyInfoStart).Take(160).ToArray();
for (int i = 0; i < 40; i++)
{
if (i < 10)
{
for (int t = 0; t < 10; t += 1)
{
int u = 4 * t;
string SupplyItemID = SupplyInfoArray[u + 1].ToString("X2") + SupplyInfoArray[u].ToString("X2");
List.Item.TryGetValue(Convert.ToInt32(SupplyItemID, 16), out string SupplyItemName);
((TextBox)this.Controls.Find("textBox10" + t.ToString(), true)[0]).Text = SupplyItemName;
int p = 4 * t + 2;
string SupplyItemAmount = SupplyInfoArray[p + 1].ToString("X2") + SupplyInfoArray[p].ToString("X2");
int SupplyItemAmount1 = (Convert.ToInt32(SupplyItemAmount, 16));
((NumericUpDown)this.Controls.Find("numericUpDown10" + t.ToString(), true)[0]).Value = SupplyItemAmount1;
}
}
else if (i < 40)
{
for (int t = 10; t < 40; t += 1)
{
int u = 4 * t;
string SupplyItemID = SupplyInfoArray[u + 1].ToString("X2") + SupplyInfoArray[u].ToString("X2");
List.Item.TryGetValue(Convert.ToInt32(SupplyItemID, 16), out string SupplyItemName);
((TextBox)this.Controls.Find("textBox1" + t.ToString(), true)[0]).Text = SupplyItemName;
int p = 4 * t + 2;
string SupplyItemAmount = SupplyInfoArray[p + 1].ToString("X2") + SupplyInfoArray[p].ToString("X2");
int SupplyItemAmount1 = (Convert.ToInt32(SupplyItemAmount, 16));
((NumericUpDown)this.Controls.Find("numericUpDown1" + t.ToString(), true)[0]).Value = SupplyItemAmount1;
}
}
}
//Load reward item
int RewardInfoStart = BitConverter.ToInt32(ba, 12);
int MRewardPointer = 0;
int ARewardPointer = 0;
int BRewardPointer = 0;
int An1RewardPointer = 0;
int An2RewardPointer = 0;
byte[] RewardHeaderArray = ba.Skip(RewardInfoStart).Take(48).ToArray();
byte[] MRewardData = { };
byte[] ARewardData = { };
byte[] BRewardData = { };
byte[] An1RewardData = { };
byte[] An2RewardData = { };
for (int i = 0; i < 5; i++)
{
int RewardHeader = RewardHeaderArray[i * 8];
if (RewardHeader == 255)
{
break;
}
switch (RewardHeader)
{
case 0:
MRewardPointer = BitConverter.ToInt32(RewardHeaderArray, 4);
MRewardData = ba.Skip(MRewardPointer).Take(244).ToArray();
break;
case 1:
MRewardPointer = BitConverter.ToInt32(RewardHeaderArray, 4);
MRewardData = ba.Skip(MRewardPointer).Take(244).ToArray();
break;
case 2:
ARewardPointer = BitConverter.ToInt32(RewardHeaderArray, 12);
ARewardData = ba.Skip(ARewardPointer).Take(244).ToArray();
break;
case 3:
BRewardPointer = BitConverter.ToInt32(RewardHeaderArray, 20);
BRewardData = ba.Skip(BRewardPointer).Take(244).ToArray();
break;
case 4:
An1RewardPointer = BitConverter.ToInt32(RewardHeaderArray, 28);
An1RewardData = ba.Skip(An1RewardPointer).Take(244).ToArray();
break;
case 5:
An2RewardPointer = BitConverter.ToInt32(RewardHeaderArray, 36);
An2RewardData = ba.Skip(An2RewardPointer).Take(244).ToArray();
break;
}
}
for (int i = 10; i < 50; i++)
{
int MainRewardBase = (i - 10) * 6;
int MainRewardChance = MRewardData[MainRewardBase];
if (MainRewardChance == 255)
{
break;
}
((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value = MainRewardChance;
((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value = MRewardData[MainRewardBase + 4];
int MainRewardId = BitConverter.ToInt16(MRewardData, MainRewardBase + 2);
List.Item.TryGetValue(MainRewardId, out string MainRewardItemName);
((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text = MainRewardItemName;
}
if (!((ARewardPointer == 0)))
{
for (int i = 10; i < 30; i++)
{
int ARewardBase = (i - 10) * 6;
int ARewardChance = ARewardData[ARewardBase];
if (ARewardChance == 255)
{
break;
}
((NumericUpDown)this.Controls.Find("R15" + i.ToString(), true)[0]).Value = ARewardChance;
((NumericUpDown)this.Controls.Find("R14" + i.ToString(), true)[0]).Value = ARewardData[ARewardBase + 4];
int ARewardId = BitConverter.ToInt16(ARewardData, ARewardBase + 2);
List.Item.TryGetValue(ARewardId, out string ARewardItemName);
((TextBox)this.Controls.Find("R13" + i.ToString(), true)[0]).Text = ARewardItemName;
}
}
if (!(BRewardPointer == 0))
{
for (int i = 10; i < 30; i++)
{
int BRewardBase = (i - 10) * 6;
int BRewardChance = BRewardData[BRewardBase];
if (BRewardChance == 255)
{
break;
}
((NumericUpDown)this.Controls.Find("R18" + i.ToString(), true)[0]).Value = BRewardChance;
((NumericUpDown)this.Controls.Find("R17" + i.ToString(), true)[0]).Value = BRewardData[BRewardBase + 4];
int BRewardId = BitConverter.ToInt16(BRewardData, BRewardBase + 2);
List.Item.TryGetValue(BRewardId, out string BRewardItemName);
((TextBox)this.Controls.Find("R16" + i.ToString(), true)[0]).Text = BRewardItemName;
}
}
if (!(An1RewardPointer == 0))
{
for (int i = 10; i < 20; i++)
{
int An1RewardBase = (i - 10) * 6;
int An1RewardChance = An1RewardData[An1RewardBase];
if (An1RewardChance == 255)
{
break;
}
((NumericUpDown)this.Controls.Find("R21" + i.ToString(), true)[0]).Value = An1RewardChance;
((NumericUpDown)this.Controls.Find("R19" + i.ToString(), true)[0]).Value = An1RewardData[An1RewardBase + 4];
int BRewardId = BitConverter.ToInt16(An1RewardData, An1RewardBase + 2);
List.Item.TryGetValue(BRewardId, out string An1RewardItemName);
((TextBox)this.Controls.Find("R20" + i.ToString(), true)[0]).Text = An1RewardItemName;
}
}
//Load large monster
int MainMonsInfoStart = BitConverter.ToInt16(ba, 24) + 64;
bool isEmpty1 = false;
bool isEmpty2 = false;
bool isEmpty3 = false;
bool isEmpty4 = false;
int MainMonsID1 = BitConverter.ToInt16(ba, (BitConverter.ToInt16(ba, 24) + 32));
if (!(MainMonsID1 == 0))
{
List.Monster1.TryGetValue(MainMonsID1, out string MainMonsStr1);
comboBox_Lar1Boss_Monster.Text = MainMonsStr1;
byte[] MainMonsData1 = ba.Skip(MainMonsInfoStart).Take(60).ToArray();
comboBox_Lar1Boss_SpawnArea.Items.Add(BitConverter.ToInt16(MainMonsData1, 8).ToString("X2"));
comboBox_Lar1Boss_SpawnArea.SelectedIndex = 0;
int MainMonsInfoStart1 = BitConverter.ToInt16(ba, 24) + 64;
byte[] templi = ba.Skip(MainMonsInfoStart1).Take(60).ToArray();
textBox1.Text = BitConverter.ToString(templi).Replace("-", string.Empty);
}
else { comboBox_Lar1Boss_Monster.Text = "None"; isEmpty1 = true; }
int MainMonsID2 = BitConverter.ToInt16(ba, (BitConverter.ToInt16(ba, 24) + 32 + 4));
if (!(MainMonsID2 == 0))
{
List.Monster1.TryGetValue(MainMonsID2, out string MainMonsStr2);
comboBox17.Text = MainMonsStr2;
byte[] MainMonsData2 = ba.Skip(MainMonsInfoStart + 60).Take(60).ToArray();
comboBox18.Items.Add(BitConverter.ToInt16(MainMonsData2, 8).ToString("X2"));
comboBox18.SelectedIndex = 0;
}
else
{
comboBox17.Text = "None";
isEmpty2 = true;
}
int MainMonsID3 = BitConverter.ToInt16(ba, (BitConverter.ToInt16(ba, 24) + 32 + 8));
if (!(MainMonsID3 == 0))
{
List.Monster1.TryGetValue(MainMonsID3, out string MainMonsStr3);
comboBox19.Text = MainMonsStr3;
byte[] MainMonsData3 = File.ReadAllBytes(fileloc).Skip(MainMonsInfoStart + 120).Take(60).ToArray();
comboBox20.Items.Add(BitConverter.ToInt16(MainMonsData3, 8).ToString("X2"));
comboBox20.SelectedIndex = 0;
}
else { comboBox19.Text = "None"; isEmpty3 = true; }
int MainMonsID4 = BitConverter.ToInt16(ba, (BitConverter.ToInt16(ba, 24) + 32 + 12));
if (!(MainMonsID4 == 0))
{
List.Monster1.TryGetValue(MainMonsID4, out string MainMonsStr4);
comboBox21.Text = MainMonsStr4;
byte[] MainMonsData4 = File.ReadAllBytes(fileloc).Skip(MainMonsInfoStart + 180).Take(60).ToArray();
comboBox22.Items.Add(BitConverter.ToInt16(MainMonsData4, 8).ToString("X2"));
comboBox22.SelectedIndex = 0;
}
else { comboBox21.Text = "None"; isEmpty4 = true; }
numericUpDown_LarBoss_Strenght.Value = BitConverter.ToInt16(ba, 72); //str
numericUpDown_LarBoss_Size.Value = BitConverter.ToInt16(ba, 68); //size
numericUpDown1_LarBoss_SizeRange.Value = BitConverter.ToInt16(ba, 70); //size range
int MainMonsSpawnArea = BitConverter.ToInt16(ba, (BitConverter.ToInt16(ba, 24) + 72));
List.AreaID.TryGetValue(MainMonsSpawnArea, out string MainMonsSpawnArea1);
//int index = comboBox12.Items.IndexOf(MainMonsSpawnArea1);
//comboBox12.SelectedIndex = index;
//int index = comboBox12.Items.IndexOf(MainMonsSpawnArea1);
//comboBox12.SelectedIndex = comboBox12.Items.IndexOf(MainMonsSpawnArea1);
//Load small monster
numericUpDown_SmallMonsterStrength.Value = BitConverter.ToInt16(ba, 97);
//Lod HRP
numericUpDown_MainHRP.Value = BitConverter.ToInt32(ba, 76);
numericUpDown_SubAHRP.Value = BitConverter.ToInt32(ba, 84);
numericUpDown_SubBHRP.Value = BitConverter.ToInt32(ba, 88);
//Load species
switch (ba[337])
{
case 0:
comboBox_LarBoss_Species.SelectedIndex = 0; //normal
break;
case 1:
comboBox_LarBoss_Species.SelectedIndex = 1; //HC
break;
case 2:
comboBox_LarBoss_Species.SelectedIndex = 2; //Geki
break;
case 9:
comboBox_LarBoss_Species.SelectedIndex = 3; //Hasyu
break;
case 10:
comboBox_LarBoss_Species.SelectedIndex = 4;
break;
case 16:
comboBox_LarBoss_Species.SelectedIndex = 5;
break;
default:
comboBox_LarBoss_Species.SelectedIndex = 6;
break;
}
//Load clear condition
if (ba[MH2dosTopoffset + 68] == 2)
{
comboBox_ClearCondition.SelectedIndex = 0;
}
else if (ba[MH2dosTopoffset + 68] == 3)
{
comboBox_ClearCondition.SelectedIndex = 1;
}
else
{
comboBox_ClearCondition.SelectedIndex = 2;
}
//chekc annother target
numericUpDown_AnotherTgtNumber.Value = BitConverter.ToInt32(ba, 132);
if (BitConverter.ToInt16(ba, 128) == 4)
{
comboBox_AnotherTargetType.SelectedIndex = 1;
}
else if (BitConverter.ToInt16(ba, 128) == 5)
{
comboBox_AnotherTargetType.SelectedIndex = 2;
}
else
{
comboBox_AnotherTargetType.SelectedIndex = 0;
}
//time
numericUpDown_Time_Min.Value = BitConverter.ToInt32(ba, MH2dosTopoffset + 28) / 30 / 60;
//star
//todo 2dosstar
numericUpDown_StarLevel.Value = Buffer.GetByte(ba, MH2dosTopoffset + 4);
//load area
for (int y = 0; y < 1; y++)
{
int AreaIDPointer = BitConverter.ToInt16(ba, 20);
int AreaIDPointer1 = BitConverter.ToInt16(ba, AreaIDPointer);
if (AreaIDPointer1 == 0)
{
break;
}
for (int i = 0; i < 15; i++)
{
int AreaIDmulti = i * 16;
int AreaID = BitConverter.ToInt16(ba, AreaIDPointer1 + AreaIDmulti);
if (AreaID == 0)
{
break;
}
comboBox_Lar1Boss_SpawnArea.Items.Add(AreaID.ToString("X2"));
comboBox18.Items.Add(AreaID.ToString("X2"));
comboBox20.Items.Add(AreaID.ToString("X2"));
comboBox22.Items.Add(AreaID.ToString("X2"));
}
}
if (isEmpty1)
{
comboBox_Lar1Boss_SpawnArea.Items.Add(BitConverter.ToInt16(ba, 544));
comboBox_Lar1Boss_SpawnArea.SelectedIndex = 0;
}
if (isEmpty2)
{
comboBox18.Items.Add(BitConverter.ToInt16(ba, 544));
comboBox18.SelectedIndex = 0;
}
if (isEmpty3)
{
comboBox20.Items.Add(BitConverter.ToInt16(ba, 544));
comboBox20.SelectedIndex = 0;
}
if (isEmpty4)
{
comboBox22.Items.Add(BitConverter.ToInt16(ba, 544));
comboBox22.SelectedIndex = 0;
}
radioButton3.Checked = true; //is load suc
btn_save.Enabled = true;
}
else
{
MessageBox.Show("Invalid file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
radioButton3.Checked = false;
btn_save.Enabled = false;
}
}
}
private void Save_Quest()
{
List<byte> Endofline = new List<byte>
{
255, 255, 00, 00
};
saveFileDialog1.Filter = "questID(*.bin)|*.bin|" + "All files(*.*)|*.*";
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
{
return; //open save file dialog
}
string path = saveFileDialog1.FileName;
string fileloc = openFileDialog1.FileName;
//byte[] ba = File.ReadAllBytes(fileloc);
MH2Tools tool = new MH2Tools(TempData);
////Title and name
tool.ModifyStringToBytes(txtBox_TitleAndName.Text, tool.QuestStrings_TitleAndNamePtr);
////Main obj
tool.ModifyStringToBytes(txtBox_MainObjective.Text, tool.QuestStrings_MainoObjPtr);
////Sub A
tool.ModifyStringToBytes(txtBox_SubAObjective.Text, tool.QuestStrings_AObjPtr);
////SUb B
tool.ModifyStringToBytes(txtBox_SubBObjective.Text, tool.QuestStrings_BObjPtr);
////Clear
tool.ModifyStringToBytes(txtBox_ClearCondition.Text, tool.QuestStrings_ClearCPtr);
////Fail
tool.ModifyStringToBytes(txtBox_FailCondition.Text, tool.QuestStrings_FailCPtr);
////Emp
tool.ModifyStringToBytes(txtBox_Employer.Text, tool.QuestStrings_HirerPtr);
////Text
tool.ModifyStringToBytes(txtBox_Description.Text, tool.QuestStrings_TextPtr);
//Supply
#region
//byte[] eb2 = EntireBytes.ToArray();
//byte[] NewSplHeader = BitConverter.GetBytes(EntireBytes.Count);
//指针修正
//EntireBytes[8] = NewSplHeader[0];
//EntireBytes[9] = NewSplHeader[1];
byte[] Temprewardarray = { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 };
for (int i = 0; i < 40; i++)
{
if (i < 10)
{
for (int t = 0; t < 10; t += 1)
{
int p = t * 4 + 2;
Temprewardarray[p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown10" + t.ToString(), true)[0]).Value))[0]; //amount
//EntireBytes[SupplyInfoStart + p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown10" + t.ToString(), true)[0]).Value))[0];
string spstr = ((TextBox)this.Controls.Find("textBox10" + t.ToString(), true)[0]).Text;
string spid = List.Item.FirstOrDefault(x => x.Value == spstr).Key.ToString();
if (spid.Length == 1)
{
spid = "00000" + spid;
}
else if (spid.Length == 2)
{
spid = "0000" + spid;
}
else if (spid.Length == 3)
{
spid = "000" + spid;
}
else if (spid.Length == 4)
{
spid = "00" + spid;
}
else if (spid.Length == 6)
{
spid = "0" + spid;
}
byte[] spbyte = BitConverter.GetBytes(Convert.ToInt32(spid));
Temprewardarray[p - 2] = spbyte[0];
Temprewardarray[p - 1] = spbyte[1];
}
}
else if (i < 40)
{
for (int t = 10; t < 40; t += 1)
{
int p = t * 4 + 2;
Temprewardarray[p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown1" + t.ToString(), true)[0]).Value))[0];
string spstr = ((TextBox)this.Controls.Find("textBox1" + t.ToString(), true)[0]).Text;
string spid = List.Item.FirstOrDefault(x => x.Value == spstr).Key.ToString();
if (spid.Length == 1)
{
spid = "00000" + spid;
}
else if (spid.Length == 2)
{
spid = "0000" + spid;
}
else if (spid.Length == 3)
{
spid = "000" + spid;
}
else if (spid.Length == 4)
{
spid = "00" + spid;
}
else if (spid.Length == 6)
{
spid = "0" + spid;
}
byte[] spbyte = BitConverter.GetBytes(Convert.ToInt32(spid));
Temprewardarray[p - 2] = spbyte[0];
Temprewardarray[p - 1] = spbyte[1];
}
}
}
//EntireBytes.AddRange(Temprewardarray);
tool.ModifyDataToBytes(Temprewardarray, tool.SuppliesItemPtr);
#endregion
//Monster
#region
//int MainMonstPointer = BitConverter.ToInt32(ba, 24);
int MainMonstPointer = tool.BOSSInFoPtr;
string MonsID1 = List.Monster.FirstOrDefault(x => x.Value == comboBox_Lar1Boss_Monster.Text).Key;
//eb2[MainMonstPointer + 32] = Convert.ToByte(MonsID1, 16);
//eb2[MainMonstPointer + 64] = Convert.ToByte(MonsID1, 16);
tool.ModifyByte(tool.BOSSInFo_Monster1IDPtr, Convert.ToByte(MonsID1, 16));
tool.ModifyByte(tool.BOSSInFo_Monster1IDPtr + 64, Convert.ToByte(MonsID1, 16));
//eb2[72] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Strenght.Value))[0]; //str
//eb2[68] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Size.Value))[0]; //size
//eb2[70] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown1_LarBoss_SizeRange.Value))[0]; //size range
tool.ModifyByte(tool.StandInfo_MonsterPtr, BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Strenght.Value))[0]);
tool.ModifyByte(tool.StandInfo_MonsterSizePtr, BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Size.Value))[0]);
tool.ModifyByte(tool.StandInfo_MonsterSizeRangePtr, BitConverter.GetBytes(decimal.ToInt16(numericUpDown1_LarBoss_SizeRange.Value))[0]);
switch (comboBox_LarBoss_Species.SelectedIndex)
{
//case 0:
// eb2[337] = 0;
// break;
//case 1:
// eb2[337] = 1;
// break;
//case 2:
// eb2[337] = 2;
// break;
//case 3:
// eb2[337] = 9;
// break;
//case 4:
// eb2[337] = 10;
// break;
//case 5:
// eb2[337] = 16;
// break;
//case 6:
// eb2[337] = 0;
// break;
}
//eb2[92] = Convert.ToByte(List.Rank.FirstOrDefault(x => x.Value == comboBox_LarBoss_Carve.Text).Key); //carve rank
tool.ModifyByte(tool.StandInfo_LarBoss_CarvePtr, Convert.ToByte(List.Rank.FirstOrDefault(x => x.Value == comboBox_LarBoss_Carve.Text).Key));
//eb2[97] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_SmallMonsterStrength.Value))[0]; //small
tool.ModifyByte(tool.StandInfo_SamllMonsterPtr, BitConverter.GetBytes(decimal.ToInt16(numericUpDown_SmallMonsterStrength.Value))[0]);
byte[] HRP1 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_MainHRP.Value));
//eb2[76] = HRP1[0];
//eb2[77] = HRP1[1];
//eb2[78] = HRP1[2];
tool.ModifyByte(tool.StandInfo_MainHRPPtr, HRP1[0]);
tool.ModifyByte(tool.StandInfo_MainHRPPtr+1, HRP1[1]);
tool.ModifyByte(tool.StandInfo_MainHRPPtr+2, HRP1[2]);
byte[] HRP2 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubAHRP.Value));
//eb2[84] = HRP2[0];
//eb2[85] = HRP2[1];
//eb2[86] = HRP2[2];
tool.ModifyByte(tool.StandInfo_SubAHRPPtr, HRP2[0]);
tool.ModifyByte(tool.StandInfo_SubAHRPPtr + 1, HRP2[1]);
tool.ModifyByte(tool.StandInfo_SubAHRPPtr + 2, HRP2[2]);
byte[] HRP3 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubBHRP.Value));
//eb2[88] = HRP3[0];
//eb2[89] = HRP3[1];
//eb2[90] = HRP3[2];
tool.ModifyByte(tool.StandInfo_SubBHRPPtr, HRP3[0]);
tool.ModifyByte(tool.StandInfo_SubBHRPPtr + 1, HRP3[1]);
tool.ModifyByte(tool.StandInfo_SubBHRPPtr + 2, HRP3[2]);
#endregion
#region Lrg mosnter
List<byte> BossEntireBytes = new List<byte>();
//int tempnum = EntireBytes.Count;
int tempnum = tool.BOSSInFoPtr;
byte[] tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
//指针修正
//EntireBytes[24] = tempnum1[0]; //replace new header
//EntireBytes[25] = tempnum1[1];
byte[] tempLMinfo = { 01, 00, 00, 00, 00, 00, 00, 00, 00, 10, 00, 00, 20, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 };
//应该是查找第一个Boss的指针
//tempnum = (EntireBytes.Count) + 32;
tempnum = (tool.BOSSInFoPtr) + 32;
tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
tempLMinfo[8] = tempnum1[0]; //replace new header
tempLMinfo[9] = tempnum1[1];
tempnum = tempnum + 32;
tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
tempLMinfo[12] = tempnum1[0]; //replace new header
tempLMinfo[13] = tempnum1[1];
BossEntireBytes.AddRange(tempLMinfo);
string templateMonsterHexData = textBox1.Text;
var templateMonsterData = new List<byte>();
for (int i = 0; i < templateMonsterHexData.Length / 2; i++)
{
templateMonsterData.Add(Convert.ToByte(templateMonsterHexData.Substring(i * 2, 2), 16));
}
byte[] tempLMinfotemo = { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 255, 255, 255, 255, 255, 255, 255, 255, 00, 00, 00, 00 };
var tempLmdata = new List<byte>();
int LMons1 = List.Monster1.FirstOrDefault(x => x.Value == comboBox_Lar1Boss_Monster.Text).Key;
tempLMinfotemo[0] = BitConverter.GetBytes(LMons1)[0];
byte[] templateMonsterData1 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData1, 0);
templateMonsterData1[0] = BitConverter.GetBytes(LMons1)[0];
string input1 = comboBox_Lar1Boss_SpawnArea.Text;
var areaid1 = new List<byte>();
for (int i = 0; i < input1.Length / 2; i++)
{
areaid1.Add(Convert.ToByte(input1.Substring(i * 2, 2), 16));
}
int LMons2 = List.Monster1.FirstOrDefault(x => x.Value == comboBox17.Text).Key;
tempLMinfotemo[4] = BitConverter.GetBytes(LMons2)[0];
byte[] templateMonsterData2 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData2, 0);
templateMonsterData2[0] = BitConverter.GetBytes(LMons2)[0];
string input2 = comboBox18.Text;
var areaid2 = new List<byte>();
for (int i = 0; i < input2.Length / 2; i++)
{
areaid2.Add(Convert.ToByte(input2.Substring(i * 2, 2), 16));
}
templateMonsterData2[8] = areaid2[0];
int LMons3 = List.Monster1.FirstOrDefault(x => x.Value == comboBox19.Text).Key;
tempLMinfotemo[8] = BitConverter.GetBytes(LMons3)[0];
byte[] templateMonsterData3 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData3, 0);
templateMonsterData3[0] = BitConverter.GetBytes(LMons3)[0];
string input3 = comboBox20.Text;
var areaid3 = new List<byte>();
for (int i = 0; i < input3.Length / 2; i++)
{
areaid3.Add(Convert.ToByte(input3.Substring(i * 2, 2), 16));
}
templateMonsterData3[8] = areaid3[0];
int LMons4 = List.Monster1.FirstOrDefault(x => x.Value == comboBox21.Text).Key;
tempLMinfotemo[12] = BitConverter.GetBytes(LMons4)[0];
byte[] templateMonsterData4 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData4, 0);
templateMonsterData4[0] = BitConverter.GetBytes(LMons4)[0];
string input4 = comboBox22.Text;
var areaid4 = new List<byte>();
for (int i = 0; i < input4.Length / 2; i++)
{
areaid4.Add(Convert.ToByte(input4.Substring(i * 2, 2), 16));
}
templateMonsterData4[8] = areaid4[0];
BossEntireBytes.AddRange(tempLMinfotemo);
BossEntireBytes.AddRange(templateMonsterData1);
BossEntireBytes.AddRange(templateMonsterData2);
BossEntireBytes.AddRange(templateMonsterData3);
BossEntireBytes.AddRange(templateMonsterData4);
BossEntireBytes.AddRange(Endofline);
tool.ModifyDataToBytes(BossEntireBytes.ToArray(), tool.BOSSInFoPtr);
#endregion
//Fee
byte[] feeb = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_fee.Value));
//eb2[204] = feeb[0];
//eb2[205] = feeb[1];
//eb2[206] = feeb[2];
tool.ModifyByte(tool.QuestInfo_FeePtr, feeb[0]);
tool.ModifyByte(tool.QuestInfo_FeePtr+1, feeb[1]);
tool.ModifyByte(tool.QuestInfo_FeePtr+2, feeb[2]);
//Penalty
byte[] penalty = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_Penalty.Value));
//eb2[212] = penalty[0];
//eb2[213] = penalty[1];
//eb2[214] = penalty[2];
tool.ModifyByte(tool.QuestInfo_PenaltyPtr, penalty[0]);
tool.ModifyByte(tool.QuestInfo_PenaltyPtr + 1, penalty[1]);
tool.ModifyByte(tool.QuestInfo_PenaltyPtr + 2, penalty[2]);
//Main
#region Main
string mat = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_MainType.Text).Key;
byte[] madata = Enumerable.Range(0, mat.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(mat.Substring(x, 2), 16)).ToArray();
//eb2[240] = madata[0];
//eb2[241] = madata[1];
//eb2[242] = madata[2];
//eb2[243] = madata[3];
//居然是4个
tool.ModifyByte(tool.QuestInfo_MainTypePtr, madata[0]);
tool.ModifyByte(tool.QuestInfo_MainTypePtr + 1, madata[1]);
tool.ModifyByte(tool.QuestInfo_MainTypePtr + 2, madata[2]);
tool.ModifyByte(tool.QuestInfo_MainTypePtr + 3, madata[3]);
//如果是缴纳
if (madata[0] == 02 & madata[1] == 00)
{
int mot = List.Item.FirstOrDefault(x => x.Value == textBox_MainTarget.Text).Key;
byte[] motitem = BitConverter.GetBytes(mot);
//eb2[244] = motitem[0];
//eb2[245] = motitem[1];
tool.ModifyByte(tool.QuestInfo_MainTargetIDPtr, motitem[0]);
tool.ModifyByte(tool.QuestInfo_MainTargetIDPtr + 1, motitem[1]);
}
else//击杀
{
string mot = List.Monster.FirstOrDefault(x => x.Value == textBox_MainTarget.Text).Key;
//eb2[244] = Convert.ToByte(mot, 16);
tool.ModifyByte(tool.QuestInfo_MainTargetIDPtr, Convert.ToByte(mot, 16));
}
decimal MainAmount = numericUpDown_MainAmount.Value;
if (comboBox_MainType.SelectedIndex == 4)
{
MainAmount = MainAmount / 100;
}
//目标数量
byte[] mamt = BitConverter.GetBytes(decimal.ToInt32(MainAmount));
//eb2[246] = mamt[0];
//eb2[247] = mamt[1];
tool.ModifyByte(tool.QuestInfo_MainTargetCountPtr, mamt[0]);
tool.ModifyByte(tool.QuestInfo_MainTargetCountPtr + 1, mamt[1]);
//报酬金
byte[] mrwd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_MainRewardMoney.Value));
//eb2[208] = mrwd[0];
//eb2[209] = mrwd[1];
//eb2[210] = mrwd[2];
tool.ModifyByte(tool.QuestInfo_RewardMoneyPtr, mrwd[0]);
tool.ModifyByte(tool.QuestInfo_RewardMoneyPtr + 1, mrwd[1]);
tool.ModifyByte(tool.QuestInfo_RewardMoneyPtr + 2, mrwd[2]);
#endregion
//Sub A
#region SubA
string subat = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_SubAType.Text).Key;
if (!(subat == "00000000"))
{
byte[] subadata = Enumerable.Range(0, subat.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(subat.Substring(x, 2), 16)).ToArray();
//eb2[248] = subadata[0];
//eb2[249] = subadata[1];
//eb2[250] = subadata[2];
//eb2[251] = subadata[3];
tool.ModifyByte(tool.QuestInfo_SubATypePtr, subadata[0]);
tool.ModifyByte(tool.QuestInfo_SubATypePtr + 1, subadata[1]);
tool.ModifyByte(tool.QuestInfo_SubATypePtr + 2, subadata[2]);
tool.ModifyByte(tool.QuestInfo_SubATypePtr + 3, subadata[4]);
if (subadata[0] == 02 & subadata[1] == 00)
{
int subatt = List.Item.FirstOrDefault(x => x.Value == textBox_SubATarget.Text).Key;
byte[] subaitem = BitConverter.GetBytes(subatt);
//eb2[252] = subaitem[0];
//eb2[253] = subaitem[1];
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr, subaitem[0]);
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr + 1, subaitem[1]);
}
else
{
string subatt = List.Monster.FirstOrDefault(x => x.Value == textBox_SubATarget.Text).Key;
//eb2[252] = Convert.ToByte(subatt, 16);
//eb2[253] = 0;
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr, Convert.ToByte(subatt, 16));
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr + 1, 0);
}
decimal AAmount = numericUpDown_SubA_Amount.Value;
if (comboBox_SubAType.SelectedIndex == 4)
{
AAmount = AAmount / 100;
}
byte[] subaamt = BitConverter.GetBytes(decimal.ToInt32(AAmount));
//eb2[254] = subaamt[0];
//eb2[255] = subaamt[1];
tool.ModifyByte(tool.QuestInfo_SubATargetCountPtr, subaamt[0]);
tool.ModifyByte(tool.QuestInfo_SubATargetCountPtr + 1, subaamt[1]);
byte[] subatrd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubARewardMoney.Value));
//eb2[216] = subatrd[0];
//eb2[217] = subatrd[1];
//eb2[218] = subatrd[2];
tool.ModifyByte(tool.QuestInfo_SubARewardMoneyPtr, subatrd[0]);
tool.ModifyByte(tool.QuestInfo_SubARewardMoneyPtr + 1, subatrd[1]);
tool.ModifyByte(tool.QuestInfo_SubARewardMoneyPtr + 2, subatrd[2]);
}
#endregion
//Sub B
#region SubB
string subbt = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_SubBType.Text).Key;
if (!(subbt == "00000000"))
{
byte[] subbdata = Enumerable.Range(0, subbt.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(subbt.Substring(x, 2), 16)).ToArray();
//eb2[256] = subbdata[0];
//eb2[257] = subbdata[1];
//eb2[258] = subbdata[2];
//eb2[259] = subbdata[3];
tool.ModifyByte(tool.QuestInfo_SubBTypePtr, subbdata[0]);
tool.ModifyByte(tool.QuestInfo_SubBTypePtr + 1, subbdata[1]);
tool.ModifyByte(tool.QuestInfo_SubBTypePtr + 2, subbdata[2]);
tool.ModifyByte(tool.QuestInfo_SubBTypePtr + 3, subbdata[4]);
if (subbdata[0] == 02 & subbdata[1] == 00)
{
int subbtt = List.Item.FirstOrDefault(x => x.Value == textBox_SubBTarget.Text).Key;
byte[] subbitem = BitConverter.GetBytes(subbtt);
//eb2[260] = subbitem[0];
//eb2[261] = subbitem[1];
tool.ModifyByte(tool.QuestInfo_SubBTargetIDPtr, subbitem[0]);
tool.ModifyByte(tool.QuestInfo_SubBTargetIDPtr + 3, subbitem[1]);
}
else
{
string subbtt = List.Monster.FirstOrDefault(x => x.Value == textBox_SubBTarget.Text).Key;
//eb2[260] = Convert.ToByte(subbtt, 16);
//eb2[261] = 0;
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr, Convert.ToByte(subbtt, 16));
tool.ModifyByte(tool.QuestInfo_SubATargetIDPtr + 1, 0);
}
decimal BAmount = numericUpDown_SubB_Amount.Value;
if (comboBox_SubBType.SelectedIndex == 4)
{
BAmount = BAmount / 100;
}
byte[] subbamt = BitConverter.GetBytes(decimal.ToInt32(BAmount));
//eb2[262] = subbamt[0];
//eb2[263] = subbamt[1];
tool.ModifyByte(tool.QuestInfo_SubBTargetCountPtr, subbamt[0]);
tool.ModifyByte(tool.QuestInfo_SubBTargetCountPtr + 1, subbamt[1]);
byte[] subbtrd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubBRewardMoney.Value));
//eb2[220] = subbtrd[0];
//eb2[221] = subbtrd[1];
//eb2[222] = subbtrd[2];
tool.ModifyByte(tool.QuestInfo_SubBRewardMoneyPtr, subbtrd[0]);
tool.ModifyByte(tool.QuestInfo_SubBRewardMoneyPtr + 1, subbtrd[1]);
tool.ModifyByte(tool.QuestInfo_SubBRewardMoneyPtr + 2, subbtrd[2]);
}
#endregion
//Clear condition
#region Clear condition
//if (comboBox_ClearCondition.SelectedIndex == 0)
//{
// eb2[264] = 2;
//}
//else if (comboBox_ClearCondition.SelectedIndex == 1)
//{
// eb2[264] = 3;
//}
//else
//{
// eb2[264] = 4;
//}
#endregion
//Another target
#region Another target
//TODO
//if (!(numericUpDown_AnotherTgtNumber.Value == 0))
//{
// eb2[128] = BitConverter.GetBytes(comboBox_AnotherTargetType.SelectedIndex + 3)[0];
// eb2[130] = Convert.ToByte(MonsID1, 16);
// eb2[132] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_AnotherTgtNumber.Value))[0];
//}
//else
//{
// eb2[128] = 0;
// eb2[130] = 0;
// eb2[132] = 0;
//}
byte[] QuestTime = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_Time_Min.Value * 30 * 60)); //time
//eb2[224] = QuestTime[0];
//eb2[225] = QuestTime[1];
//eb2[226] = QuestTime[2];
//eb2[227] = QuestTime[3];
tool.ModifyByte(tool.QuestInfo_TimePtr, QuestTime[0]);
tool.ModifyByte(tool.QuestInfo_TimePtr + 1, QuestTime[1]);
tool.ModifyByte(tool.QuestInfo_TimePtr + 2, QuestTime[0]);
tool.ModifyByte(tool.QuestInfo_TimePtr + 3, QuestTime[1]);
byte[] NumStar = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_StarLevel.Value)); //difficulty
//eb2[196] = NumStar[0];
//eb2[197] = NumStar[1];
tool.ModifyByte(tool.QuestInfo_StarPtr, NumStar[0]);
tool.ModifyByte(tool.QuestInfo_StarPtr + 1, penalty[1]);
#endregion
File.WriteAllBytes(path, tool.GetCurrData());
}
private void btn_save_Click_src(object sender, EventArgs e)
{
saveFileDialog1.Filter = "questID(*.bin)|*.bin|" + "All files(*.*)|*.*";
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
{
return; //open save file dialog
}
string path = saveFileDialog1.FileName;
string fileloc = openFileDialog1.FileName;
byte[] ba = File.ReadAllBytes(fileloc);
int MH2dosTopoffset = (BitConverter.ToInt32(ba, 0));
int questStringsStart = BitConverter.ToInt32(ba, MH2dosTopoffset + 36);
//int questStringsStart = BitConverter.ToInt32(ba, 48);
int readPointer = BitConverter.ToInt32(ba, questStringsStart);
int pTitleAndName = BitConverter.ToInt32(ba, (readPointer - 32));
int RewardHeaderStart = BitConverter.ToInt32(ba, 12);
int SupplyInfoStart = BitConverter.ToInt32(ba, 8);
string HexData = textBox32.Text; //get entire text string
var EntireBytes = new List<byte>(); //create empty byte list
for (int i = 0; i < HexData.Length / 2; i++)
{
EntireBytes.Add(Convert.ToByte(HexData.Substring(i * 2, 2), 16)); //convert string to byte list
}
EntireBytes.RemoveRange(pTitleAndName, EntireBytes.Count - pTitleAndName); //Remove all text data to add new one
//取临时数据
//Write
List<byte> divider = new List<byte>
{
00
};
////Title and name
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_TitleAndName.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Main obj
byte[] mo = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_MainObjective.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Sub A
byte[] sa = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_SubAObjective.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////SUb B
byte[] sb = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_SubBObjective.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Clear
byte[] cc = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_ClearCondition.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Fail
byte[] fc = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_FailCondition.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Emp
byte[] em = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_Employer.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
////Text
byte[] tx = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes.AddRange(Encoding.GetEncoding("Shift_JIS").GetBytes(txtBox_Description.Text.Replace("\r\n", "\n")).ToList());
EntireBytes.AddRange(divider);
//Reward
#region Reward
List<byte> Endofline = new List<byte>
{
255, 255, 00, 00
};
int HaveA = comboBox_SubAType.SelectedIndex;
int HaveB = comboBox_SubBType.SelectedIndex;
decimal HaveAnt = numericUpDown_AnotherTgtNumber.Value;
byte[] NewRewardHeader = BitConverter.GetBytes(EntireBytes.Count); //get entire length and convert to byte[]
EntireBytes[12] = NewRewardHeader[0];
EntireBytes[13] = NewRewardHeader[1];
if ((!(HaveB == 0)) & (HaveAnt == 0)) //Main A B
{
List<byte> HeaderMainAB = new List<byte>
{01, 128, 00, 00, 255, 255, 00, 00, 02, 128, 00, 00, 255, 255, 00, 00, 03, 128, 00, 00, 255, 255, 00, 00, 255, 255, 00, 00, 00, 00, 00, 00};
EntireBytes.AddRange(HeaderMainAB);
int NewRewardHeader1 = EntireBytes.Count - 32;
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new main header
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
EntireBytes[NewRewardHeader1 + 12] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new a header
EntireBytes[NewRewardHeader1 + 13] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewARewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] AChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R15" + i.ToString(), true)[0]).Value));
NewARewardData.AddRange(AChance);
//if (AChance[0] == 0) { break; }
string NewARewardName = ((TextBox)this.Controls.Find("R13" + i.ToString(), true)[0]).Text;
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewARewardName).Key)));
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R14" + i.ToString(), true)[0]).Value)));
}
NewARewardData.AddRange(Endofline);
EntireBytes.AddRange(NewARewardData);
EntireBytes[NewRewardHeader1 + 20] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new B header
EntireBytes[NewRewardHeader1 + 21] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewBRewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] BChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R18" + i.ToString(), true)[0]).Value));
NewBRewardData.AddRange(BChance);
//if (BChance[0] == 0) { break; }
string NewBRewardName = ((TextBox)this.Controls.Find("R16" + i.ToString(), true)[0]).Text;
NewBRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewBRewardName).Key)));
NewBRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R17" + i.ToString(), true)[0]).Value)));
}
NewBRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewBRewardData);
}
else if ((!(HaveA == 0)) & (HaveAnt == 0)) //Main A
{
List<byte> HeaderMainA = new List<byte>
{01, 128, 00, 00, 255, 255, 00, 00, 02, 128, 00, 00, 255, 255, 00, 00, 255, 255, 00, 00, 00, 00, 00, 00};
EntireBytes.AddRange(HeaderMainA);
int NewRewardHeader1 = EntireBytes.Count - 24;
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new main header
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
EntireBytes[NewRewardHeader1 + 12] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new a header
EntireBytes[NewRewardHeader1 + 13] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewARewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] AChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R15" + i.ToString(), true)[0]).Value));
NewARewardData.AddRange(AChance);
//if (AChance[0] == 0) { break; }
string NewARewardName = ((TextBox)this.Controls.Find("R13" + i.ToString(), true)[0]).Text;
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewARewardName).Key)));
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R14" + i.ToString(), true)[0]).Value)));
}
NewARewardData.AddRange(Endofline);
EntireBytes.AddRange(NewARewardData);
}
else if (HaveAnt == 0) //Main
{
List<byte> HeaderMain = new List<byte>
{01, 128, 00, 00, 255, 255, 00, 00, 255, 255, 00, 00, 00, 00, 00, 00};
EntireBytes.AddRange(HeaderMain);
int NewRewardHeader1 = EntireBytes.Count - 16;
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new main header
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
}
else if ((!(HaveB == 0)) & (!(HaveAnt == 0))) //Main A B Ant
{
List<byte> HeaderMainABAnt = new List<byte>
{01,128,00,00,255,255,00,00,02,128,00,00,255,255,00,00,03,128,00,00,255,255,00,00,04,128,00,00,255,255,00,00,05,128,00,00,255,255,00,00,255,255,00,00,00,00,00,00};
EntireBytes.AddRange(HeaderMainABAnt);
int NewRewardHeader1 = EntireBytes.Count - 48;
EntireBytes[NewRewardHeader1 + 28] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant1
EntireBytes[NewRewardHeader1 + 29] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewAnt1RewardData = new List<byte> { };
for (int i = 10; i < 20; i++)
{
byte[] Ant1Chance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R21" + i.ToString(), true)[0]).Value));
NewAnt1RewardData.AddRange(Ant1Chance);
string NewAnt1RewardName = ((TextBox)this.Controls.Find("R20" + i.ToString(), true)[0]).Text;
NewAnt1RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewAnt1RewardName).Key)));
NewAnt1RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R19" + i.ToString(), true)[0]).Value)));
}
NewAnt1RewardData.AddRange(Endofline);
EntireBytes.AddRange(NewAnt1RewardData);
EntireBytes[NewRewardHeader1 + 36] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant2
EntireBytes[NewRewardHeader1 + 37] = BitConverter.GetBytes(EntireBytes.Count)[1];
EntireBytes.AddRange(NewAnt1RewardData);
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Main
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
EntireBytes[NewRewardHeader1 + 12] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new a header
EntireBytes[NewRewardHeader1 + 13] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewARewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] AChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R15" + i.ToString(), true)[0]).Value));
NewARewardData.AddRange(AChance);
//if (AChance[0] == 0) { break; }
string NewARewardName = ((TextBox)this.Controls.Find("R13" + i.ToString(), true)[0]).Text;
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewARewardName).Key)));
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R14" + i.ToString(), true)[0]).Value)));
}
NewARewardData.AddRange(Endofline);
EntireBytes.AddRange(NewARewardData);
EntireBytes[NewRewardHeader1 + 20] = BitConverter.GetBytes(EntireBytes.Count)[0]; //replace with new B header
EntireBytes[NewRewardHeader1 + 21] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewBRewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] BChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R18" + i.ToString(), true)[0]).Value));
NewBRewardData.AddRange(BChance);
//if (BChance[0] == 0) { break; }
string NewBRewardName = ((TextBox)this.Controls.Find("R16" + i.ToString(), true)[0]).Text;
NewBRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewBRewardName).Key)));
NewBRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R17" + i.ToString(), true)[0]).Value)));
}
NewBRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewBRewardData);
}
else if ((!(HaveA == 0)) & (!(HaveAnt == 0))) //Main A Ant
{
List<byte> HeaderMainAAnt = new List<byte>
{01,128,00,00,255,255,00,00,02,128,00,00,255,255,00,00,04,128,00,00,255,255,00,00,05,128,00,00,255,255,00,00,255,255,00,00,00,00,00,00};
EntireBytes.AddRange(HeaderMainAAnt);
int NewRewardHeader1 = EntireBytes.Count - 40;
EntireBytes[NewRewardHeader1 + 20] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant1
EntireBytes[NewRewardHeader1 + 21] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewAnt2RewardData = new List<byte> { };
for (int i = 10; i < 20; i++)
{
byte[] Ant2Chance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R21" + i.ToString(), true)[0]).Value));
NewAnt2RewardData.AddRange(Ant2Chance);
string NewAnt1RewardName = ((TextBox)this.Controls.Find("R20" + i.ToString(), true)[0]).Text;
NewAnt2RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewAnt1RewardName).Key)));
NewAnt2RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R19" + i.ToString(), true)[0]).Value)));
}
NewAnt2RewardData.AddRange(Endofline);
EntireBytes.AddRange(NewAnt2RewardData);
EntireBytes[NewRewardHeader1 + 28] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant2
EntireBytes[NewRewardHeader1 + 29] = BitConverter.GetBytes(EntireBytes.Count)[1];
EntireBytes.AddRange(NewAnt2RewardData);
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Main
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
EntireBytes[NewRewardHeader1 + 12] = BitConverter.GetBytes(EntireBytes.Count)[0]; //A
EntireBytes[NewRewardHeader1 + 13] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewARewardData = new List<byte> { };
for (int i = 10; i < 30; i++)
{
byte[] AChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R15" + i.ToString(), true)[0]).Value));
NewARewardData.AddRange(AChance);
//if (AChance[0] == 0) { break; }
string NewARewardName = ((TextBox)this.Controls.Find("R13" + i.ToString(), true)[0]).Text;
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewARewardName).Key)));
NewARewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R14" + i.ToString(), true)[0]).Value)));
}
NewARewardData.AddRange(Endofline);
EntireBytes.AddRange(NewARewardData);
}
else if (!(HaveAnt == 0)) //Main Ant
{
List<byte> HeaderMainAnt = new List<byte>
{01,128,00,00,255,255,00,00,04,128,00,00,255,255,00,00,05,128,00,00,255,255,00,00,255,255,00,00,00,00,00,00};
EntireBytes.AddRange(HeaderMainAnt);
int NewRewardHeader1 = EntireBytes.Count - 32;
EntireBytes[NewRewardHeader1 + 12] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant1
EntireBytes[NewRewardHeader1 + 13] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewAnt3RewardData = new List<byte> { };
for (int i = 10; i < 20; i++)
{
byte[] Ant3Chance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R21" + i.ToString(), true)[0]).Value));
NewAnt3RewardData.AddRange(Ant3Chance);
string NewAnt1RewardName = ((TextBox)this.Controls.Find("R20" + i.ToString(), true)[0]).Text;
NewAnt3RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewAnt1RewardName).Key)));
NewAnt3RewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R19" + i.ToString(), true)[0]).Value)));
}
NewAnt3RewardData.AddRange(Endofline);
EntireBytes.AddRange(NewAnt3RewardData);
EntireBytes[NewRewardHeader1 + 20] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Ant2
EntireBytes[NewRewardHeader1 + 21] = BitConverter.GetBytes(EntireBytes.Count)[1];
EntireBytes.AddRange(NewAnt3RewardData);
EntireBytes[NewRewardHeader1 + 4] = BitConverter.GetBytes(EntireBytes.Count)[0]; //Main
EntireBytes[NewRewardHeader1 + 5] = BitConverter.GetBytes(EntireBytes.Count)[1];
List<byte> NewMainRewardData = new List<byte> { };
for (int i = 10; i < 50; i++)
{
byte[] MChance = BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R12" + i.ToString(), true)[0]).Value));
NewMainRewardData.AddRange(MChance);
//if(MChance[0] == 0) { break; }
string NewMainRewardName = ((TextBox)this.Controls.Find("R10" + i.ToString(), true)[0]).Text;
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(List.Item.FirstOrDefault(x => x.Value == NewMainRewardName).Key)));
NewMainRewardData.AddRange(BitConverter.GetBytes(decimal.ToInt16(((NumericUpDown)this.Controls.Find("R11" + i.ToString(), true)[0]).Value)));
}
NewMainRewardData.AddRange(Endofline);
EntireBytes.AddRange(NewMainRewardData);
}
#endregion
//Supply
#region Supply
byte[] eb2 = EntireBytes.ToArray();
byte[] NewSplHeader = BitConverter.GetBytes(EntireBytes.Count);
EntireBytes[8] = NewSplHeader[0];
EntireBytes[9] = NewSplHeader[1];
byte[] Temprewardarray = { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 };
for (int i = 0; i < 40; i++)
{
if (i < 10)
{
for (int t = 0; t < 10; t += 1)
{
int p = t * 4 + 2;
Temprewardarray[p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown10" + t.ToString(), true)[0]).Value))[0]; //amount
//EntireBytes[SupplyInfoStart + p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown10" + t.ToString(), true)[0]).Value))[0];
string spstr = ((TextBox)this.Controls.Find("textBox10" + t.ToString(), true)[0]).Text;
string spid = List.Item.FirstOrDefault(x => x.Value == spstr).Key.ToString();
if (spid.Length == 1)
{
spid = "00000" + spid;
}
else if (spid.Length == 2)
{
spid = "0000" + spid;
}
else if (spid.Length == 3)
{
spid = "000" + spid;
}
else if (spid.Length == 4)
{
spid = "00" + spid;
}
else if (spid.Length == 6)
{
spid = "0" + spid;
}
byte[] spbyte = BitConverter.GetBytes(Convert.ToInt32(spid));
Temprewardarray[p - 2] = spbyte[0];
Temprewardarray[p - 1] = spbyte[1];
}
}
else if (i < 40)
{
for (int t = 10; t < 40; t += 1)
{
int p = t * 4 + 2;
Temprewardarray[p] = BitConverter.GetBytes(decimal.ToInt32(((NumericUpDown)this.Controls.Find("numericUpDown1" + t.ToString(), true)[0]).Value))[0];
string spstr = ((TextBox)this.Controls.Find("textBox1" + t.ToString(), true)[0]).Text;
string spid = List.Item.FirstOrDefault(x => x.Value == spstr).Key.ToString();
if (spid.Length == 1)
{
spid = "00000" + spid;
}
else if (spid.Length == 2)
{
spid = "0000" + spid;
}
else if (spid.Length == 3)
{
spid = "000" + spid;
}
else if (spid.Length == 4)
{
spid = "00" + spid;
}
else if (spid.Length == 6)
{
spid = "0" + spid;
}
byte[] spbyte = BitConverter.GetBytes(Convert.ToInt32(spid));
Temprewardarray[p - 2] = spbyte[0];
Temprewardarray[p - 1] = spbyte[1];
}
}
}
EntireBytes.AddRange(Temprewardarray);
#endregion
//Lrg mosnter
#region Lrg mosnter
int tempnum = EntireBytes.Count;
byte[] tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
EntireBytes[24] = tempnum1[0]; //replace new header
EntireBytes[25] = tempnum1[1];
byte[] tempLMinfo = { 01, 00, 00, 00, 00, 00, 00, 00, 00, 10, 00, 00, 20, 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 };
tempnum = (EntireBytes.Count) + 32;
tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
tempLMinfo[8] = tempnum1[0]; //replace new header
tempLMinfo[9] = tempnum1[1];
tempnum = tempnum + 32;
tempnum1 = BitConverter.GetBytes(Convert.ToInt16(tempnum));
tempLMinfo[12] = tempnum1[0]; //replace new header
tempLMinfo[13] = tempnum1[1];
EntireBytes.AddRange(tempLMinfo);
string templateMonsterHexData = textBox1.Text;
var templateMonsterData = new List<byte>();
for (int i = 0; i < templateMonsterHexData.Length / 2; i++)
{
templateMonsterData.Add(Convert.ToByte(templateMonsterHexData.Substring(i * 2, 2), 16));
}
byte[] tempLMinfotemo = { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 255, 255, 255, 255, 255, 255, 255, 255, 00, 00, 00, 00 };
var tempLmdata = new List<byte>();
int LMons1 = List.Monster1.FirstOrDefault(x => x.Value == comboBox_Lar1Boss_Monster.Text).Key;
tempLMinfotemo[0] = BitConverter.GetBytes(LMons1)[0];
byte[] templateMonsterData1 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData1, 0);
templateMonsterData1[0] = BitConverter.GetBytes(LMons1)[0];
string input1 = comboBox_Lar1Boss_SpawnArea.Text;
var areaid1 = new List<byte>();
for (int i = 0; i < input1.Length / 2; i++)
{
areaid1.Add(Convert.ToByte(input1.Substring(i * 2, 2), 16));
}
int LMons2 = List.Monster1.FirstOrDefault(x => x.Value == comboBox17.Text).Key;
tempLMinfotemo[4] = BitConverter.GetBytes(LMons2)[0];
byte[] templateMonsterData2 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData2, 0);
templateMonsterData2[0] = BitConverter.GetBytes(LMons2)[0];
string input2 = comboBox18.Text;
var areaid2 = new List<byte>();
for (int i = 0; i < input2.Length / 2; i++)
{
areaid2.Add(Convert.ToByte(input2.Substring(i * 2, 2), 16));
}
templateMonsterData2[8] = areaid2[0];
int LMons3 = List.Monster1.FirstOrDefault(x => x.Value == comboBox19.Text).Key;
tempLMinfotemo[8] = BitConverter.GetBytes(LMons3)[0];
byte[] templateMonsterData3 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData3, 0);
templateMonsterData3[0] = BitConverter.GetBytes(LMons3)[0];
string input3 = comboBox20.Text;
var areaid3 = new List<byte>();
for (int i = 0; i < input3.Length / 2; i++)
{
areaid3.Add(Convert.ToByte(input3.Substring(i * 2, 2), 16));
}
templateMonsterData3[8] = areaid3[0];
int LMons4 = List.Monster1.FirstOrDefault(x => x.Value == comboBox21.Text).Key;
tempLMinfotemo[12] = BitConverter.GetBytes(LMons4)[0];
byte[] templateMonsterData4 = new byte[60];
templateMonsterData.CopyTo(templateMonsterData4, 0);
templateMonsterData4[0] = BitConverter.GetBytes(LMons4)[0];
string input4 = comboBox22.Text;
var areaid4 = new List<byte>();
for (int i = 0; i < input4.Length / 2; i++)
{
areaid4.Add(Convert.ToByte(input4.Substring(i * 2, 2), 16));
}
templateMonsterData4[8] = areaid4[0];
EntireBytes.AddRange(tempLMinfotemo);
EntireBytes.AddRange(templateMonsterData1);
EntireBytes.AddRange(templateMonsterData2);
EntireBytes.AddRange(templateMonsterData3);
EntireBytes.AddRange(templateMonsterData4);
EntireBytes.AddRange(Endofline);
#endregion
//Write new text offset
//写入新的文本偏移指针
eb2 = EntireBytes.ToArray();
eb2[readPointer - 28] = mo[0];
eb2[readPointer - 28 + 1] = mo[1];
eb2[readPointer - 24] = sa[0];
eb2[readPointer - 24 + 1] = sa[1];
eb2[readPointer - 20] = sb[0];
eb2[readPointer - 20 + 1] = sb[1];
eb2[readPointer - 16] = cc[0];
eb2[readPointer - 16 + 1] = cc[1];
eb2[readPointer - 12] = fc[0];
eb2[readPointer - 12 + 1] = fc[1];
eb2[readPointer - 8] = em[0];
eb2[readPointer - 8 + 1] = em[1];
eb2[readPointer - 4] = tx[0];
eb2[readPointer - 4 + 1] = tx[1];
//Fee
byte[] feeb = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_fee.Value));
eb2[204] = feeb[0];
eb2[205] = feeb[1];
eb2[206] = feeb[2];
//Penalty
byte[] penalty = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_Penalty.Value));
eb2[212] = penalty[0];
eb2[213] = penalty[1];
eb2[214] = penalty[2];
//Main
string mat = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_MainType.Text).Key;
byte[] madata = Enumerable.Range(0, mat.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(mat.Substring(x, 2), 16)).ToArray();
eb2[240] = madata[0];
eb2[241] = madata[1];
eb2[242] = madata[2];
eb2[243] = madata[3];
if (madata[0] == 02 & madata[1] == 00)
{
int mot = List.Item.FirstOrDefault(x => x.Value == textBox_MainTarget.Text).Key;
byte[] motitem = BitConverter.GetBytes(mot);
eb2[244] = motitem[0];
eb2[245] = motitem[1];
}
else
{
string mot = List.Monster.FirstOrDefault(x => x.Value == textBox_MainTarget.Text).Key;
eb2[244] = Convert.ToByte(mot, 16);
}
decimal MainAmount = numericUpDown_MainAmount.Value;
if (comboBox_MainType.SelectedIndex == 4)
{
MainAmount = MainAmount / 100;
}
byte[] mamt = BitConverter.GetBytes(decimal.ToInt32(MainAmount));
eb2[246] = mamt[0];
eb2[247] = mamt[1];
byte[] mrwd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_MainRewardMoney.Value));
eb2[208] = mrwd[0];
eb2[209] = mrwd[1];
eb2[210] = mrwd[2];
//Sub A
string subat = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_SubAType.Text).Key;
if (!(subat == "00000000"))
{
byte[] subadata = Enumerable.Range(0, subat.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(subat.Substring(x, 2), 16)).ToArray();
eb2[248] = subadata[0];
eb2[249] = subadata[1];
eb2[250] = subadata[2];
eb2[251] = subadata[3];
if (subadata[0] == 02 & subadata[1] == 00)
{
int subatt = List.Item.FirstOrDefault(x => x.Value == textBox_SubATarget.Text).Key;
byte[] subaitem = BitConverter.GetBytes(subatt);
eb2[252] = subaitem[0];
eb2[253] = subaitem[1];
}
else
{
string subatt = List.Monster.FirstOrDefault(x => x.Value == textBox_SubATarget.Text).Key;
eb2[252] = Convert.ToByte(subatt, 16);
eb2[253] = 0;
}
decimal AAmount = numericUpDown_SubA_Amount.Value;
if (comboBox_SubAType.SelectedIndex == 4)
{
AAmount = AAmount / 100;
}
byte[] subaamt = BitConverter.GetBytes(decimal.ToInt32(AAmount));
eb2[254] = subaamt[0];
eb2[255] = subaamt[1];
byte[] subatrd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubARewardMoney.Value));
eb2[216] = subatrd[0];
eb2[217] = subatrd[1];
eb2[218] = subatrd[2];
}
//Sub B
string subbt = List.ObjectiveType.FirstOrDefault(x => x.Value == comboBox_SubBType.Text).Key;
if (!(subbt == "00000000"))
{
byte[] subbdata = Enumerable.Range(0, subbt.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(subbt.Substring(x, 2), 16)).ToArray();
eb2[256] = subbdata[0];
eb2[257] = subbdata[1];
eb2[258] = subbdata[2];
eb2[259] = subbdata[3];
if (subbdata[0] == 02 & subbdata[1] == 00)
{
int subbtt = List.Item.FirstOrDefault(x => x.Value == textBox_SubBTarget.Text).Key;
byte[] subbitem = BitConverter.GetBytes(subbtt);
eb2[260] = subbitem[0];
eb2[261] = subbitem[1];
}
else
{
string subbtt = List.Monster.FirstOrDefault(x => x.Value == textBox_SubBTarget.Text).Key;
eb2[260] = Convert.ToByte(subbtt, 16);
eb2[261] = 0;
}
decimal BAmount = numericUpDown_SubB_Amount.Value;
if (comboBox_SubBType.SelectedIndex == 4)
{
BAmount = BAmount / 100;
}
byte[] subbamt = BitConverter.GetBytes(decimal.ToInt32(BAmount));
eb2[262] = subbamt[0];
eb2[263] = subbamt[1];
byte[] subbtrd = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubBRewardMoney.Value));
eb2[220] = subbtrd[0];
eb2[221] = subbtrd[1];
eb2[222] = subbtrd[2];
}
//Monster
#region
int MainMonstPointer = BitConverter.ToInt32(ba, 24);
string MonsID1 = List.Monster.FirstOrDefault(x => x.Value == comboBox_Lar1Boss_Monster.Text).Key;
eb2[MainMonstPointer + 32] = Convert.ToByte(MonsID1, 16);
eb2[MainMonstPointer + 64] = Convert.ToByte(MonsID1, 16);
eb2[72] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Strenght.Value))[0]; //str
eb2[68] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_LarBoss_Size.Value))[0]; //size
eb2[70] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown1_LarBoss_SizeRange.Value))[0]; //size range
switch (comboBox_LarBoss_Species.SelectedIndex)
{
case 0:
eb2[337] = 0;
break;
case 1:
eb2[337] = 1;
break;
case 2:
eb2[337] = 2;
break;
case 3:
eb2[337] = 9;
break;
case 4:
eb2[337] = 10;
break;
case 5:
eb2[337] = 16;
break;
case 6:
eb2[337] = 0;
break;
}
eb2[92] = Convert.ToByte(List.Rank.FirstOrDefault(x => x.Value == comboBox_LarBoss_Carve.Text).Key); //carve rank
eb2[97] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_SmallMonsterStrength.Value))[0]; //small
byte[] HRP1 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_MainHRP.Value));
eb2[76] = HRP1[0];
eb2[77] = HRP1[1];
eb2[78] = HRP1[2];
byte[] HRP2 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubAHRP.Value));
eb2[84] = HRP2[0];
eb2[85] = HRP2[1];
eb2[86] = HRP2[2];
byte[] HRP3 = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_SubBHRP.Value));
eb2[88] = HRP3[0];
eb2[89] = HRP3[1];
eb2[90] = HRP3[2];
#endregion
//Clear condition
#region Clear condition
if (comboBox_ClearCondition.SelectedIndex == 0)
{
eb2[264] = 2;
}
else if (comboBox_ClearCondition.SelectedIndex == 1)
{
eb2[264] = 3;
}
else
{
eb2[264] = 4;
}
#endregion
//Another target
#region Another target
if (!(numericUpDown_AnotherTgtNumber.Value == 0))
{
eb2[128] = BitConverter.GetBytes(comboBox_AnotherTargetType.SelectedIndex + 3)[0];
eb2[130] = Convert.ToByte(MonsID1, 16);
eb2[132] = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_AnotherTgtNumber.Value))[0];
}
else
{
eb2[128] = 0;
eb2[130] = 0;
eb2[132] = 0;
}
byte[] QuestTime = BitConverter.GetBytes(decimal.ToInt32(numericUpDown_Time_Min.Value * 30 * 60)); //time
eb2[224] = QuestTime[0];
eb2[225] = QuestTime[1];
eb2[226] = QuestTime[2];
eb2[227] = QuestTime[3];
byte[] NumStar = BitConverter.GetBytes(decimal.ToInt16(numericUpDown_StarLevel.Value)); //difficulty
eb2[196] = NumStar[0];
eb2[197] = NumStar[1];
#endregion
File.WriteAllBytes(path, eb2.ToArray());
}
private void button5_Click(object sender, EventArgs e)
{
Clipboard.SetText(comboBox1.Text);
}
private void button6_Click(object sender, EventArgs e)
{
Clipboard.SetText(comboBox2.Text);
}
private void tabPage1_Click(object sender, EventArgs e)
{
}
private void textBox1006_TextChanged(object sender, EventArgs e)
{
}
private void tabPage6_Click(object sender, EventArgs e)
{
}
private void numericUpDown92_ValueChanged(object sender, EventArgs e)
{
}
private void numericUpDown68_ValueChanged(object sender, EventArgs e)
{
}
private void numericUpDown20_ValueChanged(object sender, EventArgs e)
{
}
}
}