using System;
using System.Collections.Generic;
using System.IO;
[Serializable]
public class MaidProp
{
public bool Serialize(BinaryWriter f_bwWrite)
{
f_bwWrite.Write("CM3D2_MPROP");
f_bwWrite.Write(1430);
f_bwWrite.Write(this.idx);
f_bwWrite.Write(this.name);
f_bwWrite.Write(this.type);
f_bwWrite.Write(this.value_Default);
f_bwWrite.Write(this.value);
f_bwWrite.Write(this.temp_value);
f_bwWrite.Write(this.value_LinkMAX);
f_bwWrite.Write(this.strFileName);
f_bwWrite.Write(this.nFileNameRID);
f_bwWrite.Write(this.boDut);
f_bwWrite.Write(this.max);
f_bwWrite.Write(this.min);
f_bwWrite.Write((this.listSubProp != null) ? this.listSubProp.Count : 0);
if (this.listSubProp != null)
{
for (int i = 0; i < this.listSubProp.Count; i++)
{
SubProp subProp = this.listSubProp[i];
f_bwWrite.Write(subProp != null);
if (subProp != null)
{
f_bwWrite.Write(subProp.bDut);
f_bwWrite.Write(subProp.strFileName);
f_bwWrite.Write(subProp.nFileNameRID);
f_bwWrite.Write(subProp.fTexMulAlpha);
}
}
}
f_bwWrite.Write(this.m_dicTBodySkinPos.Count);
foreach (KeyValuePair
> keyValuePair in this.m_dicTBodySkinPos)
{
f_bwWrite.Write((int)keyValuePair.Key);
f_bwWrite.Write(keyValuePair.Value.Key);
f_bwWrite.Write(keyValuePair.Value.Value.bEnable);
f_bwWrite.Write(keyValuePair.Value.Value.pss.position.x);
f_bwWrite.Write(keyValuePair.Value.Value.pss.position.y);
f_bwWrite.Write(keyValuePair.Value.Value.pss.position.z);
f_bwWrite.Write(keyValuePair.Value.Value.pss.rotation.x);
f_bwWrite.Write(keyValuePair.Value.Value.pss.rotation.y);
f_bwWrite.Write(keyValuePair.Value.Value.pss.rotation.z);
f_bwWrite.Write(keyValuePair.Value.Value.pss.rotation.w);
f_bwWrite.Write(keyValuePair.Value.Value.pss.scale.x);
f_bwWrite.Write(keyValuePair.Value.Value.pss.scale.y);
f_bwWrite.Write(keyValuePair.Value.Value.pss.scale.z);
}
f_bwWrite.Write(this.m_dicTBodyAttachPos.Count);
foreach (KeyValuePair>> keyValuePair2 in this.m_dicTBodyAttachPos)
{
f_bwWrite.Write((int)keyValuePair2.Key);
f_bwWrite.Write(keyValuePair2.Value.Count);
foreach (KeyValuePair> keyValuePair3 in keyValuePair2.Value)
{
f_bwWrite.Write(keyValuePair3.Key);
f_bwWrite.Write(keyValuePair3.Value.Key);
VtxAttachPos vtxAttachPos = keyValuePair3.Value.Value;
f_bwWrite.Write(vtxAttachPos.bEnable);
f_bwWrite.Write(vtxAttachPos.vtxcount);
f_bwWrite.Write(vtxAttachPos.vidx);
f_bwWrite.Write(vtxAttachPos.prs.position.x);
f_bwWrite.Write(vtxAttachPos.prs.position.y);
f_bwWrite.Write(vtxAttachPos.prs.position.z);
f_bwWrite.Write(vtxAttachPos.prs.rotation.x);
f_bwWrite.Write(vtxAttachPos.prs.rotation.y);
f_bwWrite.Write(vtxAttachPos.prs.rotation.z);
f_bwWrite.Write(vtxAttachPos.prs.rotation.w);
f_bwWrite.Write(vtxAttachPos.prs.scale.x);
f_bwWrite.Write(vtxAttachPos.prs.scale.y);
f_bwWrite.Write(vtxAttachPos.prs.scale.z);
}
}
f_bwWrite.Write(this.m_dicMaterialProp.Count);
foreach (KeyValuePair> keyValuePair4 in this.m_dicMaterialProp)
{
f_bwWrite.Write((int)keyValuePair4.Key);
f_bwWrite.Write(keyValuePair4.Value.Key);
f_bwWrite.Write(keyValuePair4.Value.Value.nMatNo);
f_bwWrite.Write(keyValuePair4.Value.Value.strPropName);
f_bwWrite.Write(keyValuePair4.Value.Value.strTypeName);
f_bwWrite.Write(keyValuePair4.Value.Value.strValue);
}
f_bwWrite.Write(this.m_dicBoneLength.Count);
foreach (KeyValuePair>> keyValuePair5 in this.m_dicBoneLength)
{
f_bwWrite.Write((int)keyValuePair5.Key);
f_bwWrite.Write(keyValuePair5.Value.Key);
f_bwWrite.Write(keyValuePair5.Value.Value.Count);
foreach (KeyValuePair keyValuePair6 in keyValuePair5.Value.Value)
{
f_bwWrite.Write(keyValuePair6.Key);
f_bwWrite.Write(keyValuePair6.Value);
}
}
return true;
}
public bool SerializeLowCapacity(BinaryWriter writer)
{
writer.Write(this.value);
writer.Write(this.nFileNameRID);
return true;
}
public bool Deserialize(BinaryReader f_brRead)
{
NDebug.Assert(f_brRead.ReadString() == "CM3D2_MPROP", "メイドプロパティのヘッダーが不正です。");
int num = f_brRead.ReadInt32();
this.idx = f_brRead.ReadInt32();
if (num <= 110 && 10 <= this.idx)
{
this.idx += 2;
}
this.name = f_brRead.ReadString();
this.idx = (int)Enum.Parse(typeof(MPN), this.name, true);
this.type = f_brRead.ReadInt32();
this.value_Default = f_brRead.ReadInt32();
this.value = f_brRead.ReadInt32();
if (101 <= num)
{
this.temp_value = f_brRead.ReadInt32();
}
this.value_LinkMAX = f_brRead.ReadInt32();
this.strFileName = f_brRead.ReadString();
this.nFileNameRID = f_brRead.ReadInt32();
this.boDut = f_brRead.ReadBoolean();
this.max = f_brRead.ReadInt32();
this.min = f_brRead.ReadInt32();
if (this.listSubProp != null && this.listSubProp.Count != 0)
{
this.listSubProp = null;
}
if (200 <= num)
{
int num2 = f_brRead.ReadInt32();
if (num2 != 0)
{
this.listSubProp = new List();
}
for (int i = 0; i < num2; i++)
{
bool flag = f_brRead.ReadBoolean();
if (flag)
{
SubProp subProp = new SubProp();
subProp.bDut = f_brRead.ReadBoolean();
subProp.strFileName = f_brRead.ReadString();
subProp.nFileNameRID = f_brRead.ReadInt32();
if (211 <= num)
{
subProp.fTexMulAlpha = f_brRead.ReadSingle();
}
subProp.bDut = true;
this.listSubProp.Add(subProp);
}
else
{
this.listSubProp.Add(null);
}
}
}
else if (this.type == 3 && (this.name == "acctatoo" || this.name == "hokuro") && !string.IsNullOrEmpty(this.strFileName) && !this.strFileName.Contains("_del"))
{
this.listSubProp = new List();
SubProp subProp2 = new SubProp();
subProp2.bDut = true;
subProp2.strFileName = this.strFileName;
subProp2.nFileNameRID = this.nFileNameRID;
this.listSubProp.Add(subProp2);
this.strFileName = CM3.dicDelItem[(MPN)Enum.Parse(typeof(MPN), this.name, true)];
this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
}
if (this.name == "eye_hi" && string.IsNullOrEmpty(this.strFileName))
{
this.strFileName = "_I_SkinHi.menu";
this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
}
else if (this.name == "mayu" && string.IsNullOrEmpty(this.strFileName))
{
this.strFileName = "_I_mayu_001_mugen.menu";
this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
}
if (num <= 208 && this.idx == 54 && this.strFileName.ToLower() == "_I_acctatoo_del.menu".ToLower())
{
this.strFileName = CM3.dicDelItem[MPN.accnail];
this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
}
this.m_dicTBodySkinPos.Clear();
this.m_dicTBodyAttachPos.Clear();
this.m_dicMaterialProp.Clear();
this.m_dicBoneLength.Clear();
if (200 <= num)
{
int num3 = f_brRead.ReadInt32();
for (int j = 0; j < num3; j++)
{
TBody.SlotID key = (TBody.SlotID)f_brRead.ReadInt32();
int key2 = f_brRead.ReadInt32();
BoneAttachPos boneAttachPos = new BoneAttachPos();
boneAttachPos.bEnable = f_brRead.ReadBoolean();
boneAttachPos.pss.position.x = f_brRead.ReadSingle();
boneAttachPos.pss.position.y = f_brRead.ReadSingle();
boneAttachPos.pss.position.z = f_brRead.ReadSingle();
boneAttachPos.pss.rotation.x = f_brRead.ReadSingle();
boneAttachPos.pss.rotation.y = f_brRead.ReadSingle();
boneAttachPos.pss.rotation.z = f_brRead.ReadSingle();
boneAttachPos.pss.rotation.w = f_brRead.ReadSingle();
boneAttachPos.pss.scale.x = f_brRead.ReadSingle();
boneAttachPos.pss.scale.y = f_brRead.ReadSingle();
boneAttachPos.pss.scale.z = f_brRead.ReadSingle();
KeyValuePair keyValuePair = new KeyValuePair(key2, boneAttachPos);
this.m_dicTBodySkinPos[key] = keyValuePair;
}
int num4 = f_brRead.ReadInt32();
for (int k = 0; k < num4; k++)
{
TBody.SlotID key3 = (TBody.SlotID)f_brRead.ReadInt32();
int num5 = f_brRead.ReadInt32();
Dictionary> dictionary = new Dictionary>();
for (int l = 0; l < num5; l++)
{
string key4 = f_brRead.ReadString();
int key5 = f_brRead.ReadInt32();
VtxAttachPos vtxAttachPos = new VtxAttachPos();
vtxAttachPos.bEnable = f_brRead.ReadBoolean();
vtxAttachPos.vtxcount = f_brRead.ReadInt32();
vtxAttachPos.vidx = f_brRead.ReadInt32();
vtxAttachPos.prs.position.x = f_brRead.ReadSingle();
vtxAttachPos.prs.position.y = f_brRead.ReadSingle();
vtxAttachPos.prs.position.z = f_brRead.ReadSingle();
vtxAttachPos.prs.rotation.x = f_brRead.ReadSingle();
vtxAttachPos.prs.rotation.y = f_brRead.ReadSingle();
vtxAttachPos.prs.rotation.z = f_brRead.ReadSingle();
vtxAttachPos.prs.rotation.w = f_brRead.ReadSingle();
vtxAttachPos.prs.scale.x = f_brRead.ReadSingle();
vtxAttachPos.prs.scale.y = f_brRead.ReadSingle();
vtxAttachPos.prs.scale.z = f_brRead.ReadSingle();
dictionary.Add(key4, new KeyValuePair(key5, vtxAttachPos));
}
this.m_dicTBodyAttachPos.Add(key3, dictionary);
}
int num6 = f_brRead.ReadInt32();
for (int m = 0; m < num6; m++)
{
TBody.SlotID slotID = (TBody.SlotID)f_brRead.ReadInt32();
int key6 = f_brRead.ReadInt32();
MatPropSave matPropSave = new MatPropSave();
matPropSave.nMatNo = f_brRead.ReadInt32();
matPropSave.strPropName = f_brRead.ReadString();
matPropSave.strTypeName = f_brRead.ReadString();
matPropSave.strValue = f_brRead.ReadString();
if (num < 204 && slotID == TBody.SlotID.head && matPropSave.nMatNo == 3 && (matPropSave.strPropName == "_ZTest" || matPropSave.strPropName == "ZTest"))
{
matPropSave.strPropName = "_ZTest2";
matPropSave.strValue = ((!(matPropSave.strValue == "8")) ? "1" : "7");
}
this.m_dicMaterialProp.Add(slotID, new KeyValuePair(key6, matPropSave));
}
if (213 <= num)
{
int num7 = f_brRead.ReadInt32();
for (int n = 0; n < num7; n++)
{
TBody.SlotID key7 = (TBody.SlotID)f_brRead.ReadInt32();
int key8 = f_brRead.ReadInt32();
int num8 = f_brRead.ReadInt32();
Dictionary dictionary2 = new Dictionary();
for (int num9 = 0; num9 < num8; num9++)
{
string key9 = f_brRead.ReadString();
float num10 = f_brRead.ReadSingle();
dictionary2.Add(key9, num10);
}
this.m_dicBoneLength[key7] = new KeyValuePair>(key8, dictionary2);
}
}
}
if (num < 200 && this.idx == 47 && Path.GetFileNameWithoutExtension(this.strFileName.ToLower()) == "hair_r095_i_")
{
this.strFileName = "hair_r110_i_.menu";
this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
}
this.boDut = true;
this.boTempDut = false;
this.strTempFileName = string.Empty;
this.nTempFileNameRID = 0;
return true;
}
public bool DeserializeLowCapacity(BinaryReader reader)
{
this.value = reader.ReadInt32();
this.nFileNameRID = reader.ReadInt32();
if (this.nFileNameRID != 0)
{
this.strFileName = ((!GameUty.RidMenuDic.ContainsKey(this.nFileNameRID)) ? string.Empty : GameUty.RidMenuDic[this.nFileNameRID]);
if (string.IsNullOrEmpty(this.strFileName))
{
this.nFileNameRID = 0;
}
}
else
{
this.strFileName = string.Empty;
}
this.boDut = true;
this.boTempDut = false;
this.strTempFileName = string.Empty;
this.nTempFileNameRID = 0;
return true;
}
public int idx;
public string name;
public int type;
public int value_Default;
public int value;
public int temp_value;
public int value_LinkMAX;
public string strFileName = string.Empty;
public int nFileNameRID;
public string strTempFileName = string.Empty;
public int nTempFileNameRID;
public bool boDut;
public bool boTempDut;
public int max;
public int min;
public bool bSubDut;
public List listSubProp;
public bool bNoScale;
public bool boAdjustDut;
public Dictionary> m_dicTBodySkinPos = new Dictionary>();
public Dictionary>> m_dicTBodyAttachPos = new Dictionary>>();
public Dictionary> m_dicMaterialProp = new Dictionary>();
public Dictionary>> m_dicBoneLength = new Dictionary>>();
}