From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Assets/Scripts/XMainClient/XEquipDocument.cs | 701 +++++++++++++++++++++ 1 file changed, 701 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XEquipDocument.cs (limited to 'Client/Assets/Scripts/XMainClient/XEquipDocument.cs') diff --git a/Client/Assets/Scripts/XMainClient/XEquipDocument.cs b/Client/Assets/Scripts/XMainClient/XEquipDocument.cs new file mode 100644 index 00000000..e11b05d4 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XEquipDocument.cs @@ -0,0 +1,701 @@ +using System; +using UnityEngine; +using XUtliPoolLib; + +namespace XMainClient +{ + internal class XEquipDocument : XDocComponent + { + public override uint ID + { + get + { + return XEquipDocument.uuID; + } + } + + public new static readonly uint uuID = XSingleton.singleton.XHash("XEquipDocument"); + + public static XTableAsyncLoader AsyncLoader = new XTableAsyncLoader(); + + private static DefaultEquip m_defaultEquip = new DefaultEquip(); + + private static EnhanceFxTable m_EnhanceFxTable = new EnhanceFxTable(); + + public static string present_prefix = "_presentid:"; + + public static CombineMeshUtility _CombineMeshUtility = null; + + public static XMeshPartList _MeshPartList = null; + + private static uint maxProf = 0u; + + private static uint maxEnhanceLevel = 0u; + + private static bool enhanceIndexed = true; + + public static int CurrentVisibleRole = 0; + + public static void Execute(OnLoadedCallback callback = null) + { + XEquipDocument.AsyncLoader.AddTask("Table/DefaultEquip", XEquipDocument.m_defaultEquip, false); + XEquipDocument.AsyncLoader.AddTask("Table/EnhanceFx", XEquipDocument.m_EnhanceFxTable, false); + XEquipDocument.AsyncLoader.Execute(callback); + } + + public static void OnTableLoaded() + { + EnhanceFxTable.RowData rowData = null; + for (int i = 0; i < XEquipDocument.m_EnhanceFxTable.Table.Length; i++) + { + EnhanceFxTable.RowData rowData2 = XEquipDocument.m_EnhanceFxTable.Table[i]; + bool flag = rowData2 != null; + if (flag) + { + bool flag2 = rowData2.ProfID > XEquipDocument.maxProf; + if (flag2) + { + XEquipDocument.maxProf = rowData2.ProfID; + } + bool flag3 = rowData2.EnhanceLevel > XEquipDocument.maxEnhanceLevel; + if (flag3) + { + XEquipDocument.maxEnhanceLevel = rowData2.EnhanceLevel; + } + bool flag4 = rowData != null && XEquipDocument.enhanceIndexed; + if (flag4) + { + bool flag5 = (rowData2.ProfID - rowData.ProfID <= 1u && rowData2.EnhanceLevel - rowData.EnhanceLevel == 1u) || rowData.EnhanceLevel - rowData2.EnhanceLevel + 1u == XEquipDocument.maxEnhanceLevel; + if (!flag5) + { + XEquipDocument.enhanceIndexed = false; + } + } + rowData = rowData2; + } + } + XEquipDocument._CombineMeshUtility = new CombineMeshUtility(); + XEquipDocument._MeshPartList = new XMeshPartList(); + XEquipDocument._MeshPartList.Load(); + XOutlookData.InitSharedFasionList(); + } + + public static bool TryGetEnhanceFxData(uint prof, uint enhanceLevel, out string[] strFx) + { + prof %= 10u; + strFx = null; + bool flag = enhanceLevel == 0u; + bool result; + if (flag) + { + result = false; + } + else + { + EnhanceFxTable.RowData rowData = null; + bool flag2 = XEquipDocument.enhanceIndexed && (long)XEquipDocument.m_EnhanceFxTable.Table.Length == (long)((ulong)(XEquipDocument.maxEnhanceLevel * XEquipDocument.maxProf)); + if (flag2) + { + rowData = XEquipDocument.m_EnhanceFxTable.Table[(int)((prof - 1u) * XEquipDocument.maxEnhanceLevel + enhanceLevel - 1u)]; + } + else + { + for (int i = 0; i < XEquipDocument.m_EnhanceFxTable.Table.Length; i++) + { + EnhanceFxTable.RowData rowData2 = XEquipDocument.m_EnhanceFxTable.Table[i]; + bool flag3 = rowData2 != null && rowData2.ProfID == prof && rowData2.EnhanceLevel == enhanceLevel; + if (flag3) + { + rowData = rowData2; + } + } + } + bool flag4 = rowData == null; + if (flag4) + { + result = false; + } + else + { + strFx = rowData.MainWeaponFx; + result = true; + } + } + return result; + } + + public static string GetTips(uint prof, uint enhanceLevel) + { + int num = -1; + for (int i = 0; i < XEquipDocument.m_EnhanceFxTable.Table.Length; i++) + { + EnhanceFxTable.RowData rowData = XEquipDocument.m_EnhanceFxTable.Table[i]; + bool flag = rowData.ProfID == prof && rowData.EnhanceLevel > enhanceLevel && !string.IsNullOrEmpty(rowData.Tips); + if (flag) + { + bool flag2 = num == -1; + if (flag2) + { + num = i; + } + else + { + bool flag3 = rowData.EnhanceLevel < XEquipDocument.m_EnhanceFxTable.Table[num].EnhanceLevel; + if (flag3) + { + num = i; + } + } + } + } + bool flag4 = num != -1; + string result; + if (flag4) + { + result = XEquipDocument.m_EnhanceFxTable.Table[num].Tips; + } + else + { + for (int j = 0; j < XEquipDocument.m_EnhanceFxTable.Table.Length; j++) + { + EnhanceFxTable.RowData rowData = XEquipDocument.m_EnhanceFxTable.Table[j]; + bool flag5 = rowData.ProfID == prof && rowData.EnhanceLevel <= enhanceLevel && !string.IsNullOrEmpty(rowData.Tips); + if (flag5) + { + bool flag6 = num == -1; + if (flag6) + { + num = j; + } + else + { + bool flag7 = rowData.EnhanceLevel > XEquipDocument.m_EnhanceFxTable.Table[num].EnhanceLevel; + if (flag7) + { + num = j; + } + } + } + } + bool flag8 = num != -1; + if (flag8) + { + result = XEquipDocument.m_EnhanceFxTable.Table[num].Tips; + } + else + { + result = ""; + } + } + return result; + } + + private static Material GetMaterial(Shader shader) + { + bool flag = shader == ShaderManager._skin_cutout; + Material result; + if (flag) + { + result = XSingleton.singleton.CreateFromAsset("Materials/Char/RimLightBlendCutout", ".mat", true, false); + } + else + { + bool flag2 = shader == ShaderManager._skin_blend; + if (flag2) + { + result = XSingleton.singleton.CreateFromAsset("Materials/Char/RimLightBlend", ".mat", true, false); + } + else + { + bool flag3 = shader == ShaderManager._skin8; + if (flag3) + { + result = XSingleton.singleton.CreateFromAsset("Materials/Char/RimLightBlend8", ".mat", true, false); + } + else + { + result = new Material(shader); + } + } + } + return result; + } + + public static void ReturnMaterial(Material mat) + { + bool flag = mat != null; + if (flag) + { + Shader shader = mat.shader; + bool flag2 = shader == ShaderManager._skin_cutout; + if (flag2) + { + mat.SetTexture("_Face", null); + mat.SetTexture("_Hair", null); + mat.SetTexture("_Body", null); + mat.SetTexture("_Alpha", null); + } + else + { + bool flag3 = shader == ShaderManager._skin_blend; + if (flag3) + { + mat.SetTexture("_Face", null); + mat.SetTexture("_Hair", null); + mat.SetTexture("_Body", null); + } + else + { + bool flag4 = shader == ShaderManager._skin8; + if (flag4) + { + mat.SetTexture("_Tex0", null); + mat.SetTexture("_Tex1", null); + mat.SetTexture("_Tex2", null); + mat.SetTexture("_Tex3", null); + mat.SetTexture("_Tex4", null); + mat.SetTexture("_Tex5", null); + mat.SetTexture("_Tex6", null); + mat.SetTexture("_Tex7", null); + } + } + } + XSingleton.singleton.UnSafeDestroy(mat, true, false); + } + } + + public static Material GetRoleMat(bool isOnepart, bool hasAlpha, int roleType = 0) + { + Material result; + if (isOnepart) + { + if (hasAlpha) + { + result = XEquipDocument.GetMaterial(ShaderManager._skin_cutout); + } + else + { + result = XEquipDocument.GetMaterial(ShaderManager._skin_blend); + } + } + else + { + bool flag = roleType > 0; + if (flag) + { + result = XSingleton.singleton.CreateFromAsset(XSingleton.singleton.GetRoleMaterial((uint)roleType), ".mat", true, false); + } + else + { + result = XEquipDocument.GetMaterial(ShaderManager._skin8); + } + } + return result; + } + + public static DefaultEquip.RowData GetDefaultEquip(short id) + { + return XEquipDocument.m_defaultEquip.GetByProfID((int)id); + } + + public static string GetDefaultEquipName(int partIndex, string path, int professionIndex, out string dir) + { + bool flag = partIndex >= 0 && partIndex < XEquipDocument._MeshPartList.partSuffix.Length && professionIndex >= 0 && professionIndex < XEquipDocument._MeshPartList.proPrefix.Length; + string result; + if (flag) + { + string text = XEquipDocument._MeshPartList.proPrefix[professionIndex]; + string text2 = XEquipDocument._MeshPartList.partSuffix[partIndex]; + bool flag2 = string.IsNullOrEmpty(path); + if (flag2) + { + dir = "Player"; + result = string.Format("Player/{0}{1}", text, text2); + } + else + { + bool flag3 = path.StartsWith("/"); + if (flag3) + { + dir = path; + result = string.Format("{0}/{1}{2}", path, text, text2); + } + else + { + bool flag4 = path == "E"; + if (flag4) + { + dir = ""; + result = ""; + } + else + { + dir = "Player"; + result = string.Format("Player/{0}{1}", text, path); + } + } + } + } + else + { + dir = ""; + result = path; + } + return result; + } + + public static int GetEquiplistByFashionTemplate(short fashionTemplate, ref FashionPositionInfo[] fashionlist) + { + bool flag = fashionTemplate == 0; + int result; + if (flag) + { + XOutlookData.InitFasionList(ref fashionlist); + result = -1; + } + else + { + DefaultEquip.RowData defaultEquip = XEquipDocument.GetDefaultEquip(fashionTemplate); + int num = (int)(defaultEquip.id - 1); + FashionPositionInfo fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.EHeadgear), defaultEquip.Helmet, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FASHION_START)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.EUpperBody), defaultEquip.Body, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionUpperBody)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.ELowerBody), defaultEquip.Leg, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionLowerBody)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.EBoots), defaultEquip.Boots, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionBoots)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.EGloves), defaultEquip.Glove, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionGloves)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.ECombinePartEnd), defaultEquip.Weapon, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionMainWeapon)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.ECombinePartStart), defaultEquip.Face, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FASHION_END)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.EHair), defaultEquip.Hair, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.Hair)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipName(XFastEnumIntEqualityComparer.ToInt(EPartType.ESecondaryWeapon), defaultEquip.SecondWeapon, num, out fashionPositionInfo.fashionDir); + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionSecondaryWeapon)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = defaultEquip.Wing; + bool flag2 = defaultEquip.Wing != null && defaultEquip.Wing.StartsWith(XEquipDocument.present_prefix); + if (flag2) + { + fashionPositionInfo.presentID = uint.Parse(defaultEquip.Wing.Substring(XEquipDocument.present_prefix.Length)); + } + fashionPositionInfo.itemID = 0; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionWings)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = defaultEquip.Tail; + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionTail)] = fashionPositionInfo; + fashionPositionInfo.fasionID = defaultEquip.ProfID; + fashionPositionInfo.fashionName = defaultEquip.Decal; + fashionPositionInfo.itemID = 0; + fashionPositionInfo.presentID = 0u; + fashionPositionInfo.replace = false; + fashionlist[XFastEnumIntEqualityComparer.ToInt(FashionPosition.FashionDecal)] = fashionPositionInfo; + result = num; + } + return result; + } + + public static void RefreshFashionList(ref FashionPositionInfo[] fashionlist, uint typeID) + { + int i = 0; + int num = fashionlist.Length; + while (i < num) + { + FashionPositionInfo fashionPositionInfo = fashionlist[i]; + bool flag = !fashionPositionInfo.replace; + if (flag) + { + fashionPositionInfo.fashionName = ""; + FashionList.RowData fashionConf = XBagDocument.GetFashionConf(fashionPositionInfo.itemID); + bool flag2 = fashionConf != null; + if (flag2) + { + bool flag3 = fashionConf.ReplaceID != null && fashionConf.ReplaceID.Length != 0; + if (flag3) + { + int num2 = (int)(typeID % 10u - 1u); + FashionList.RowData rowData = null; + bool flag4 = num2 >= fashionConf.ReplaceID.Length; + if (flag4) + { + XSingleton.singleton.AddErrorLog2("check FashionList ReplaceID Count by fasionID = {0}", new object[] + { + fashionPositionInfo.itemID + }); + } + else + { + rowData = XBagDocument.GetFashionConf((int)fashionConf.ReplaceID[num2]); + } + bool flag5 = rowData != null; + if (flag5) + { + int equipPos = (int)rowData.EquipPos; + bool flag6 = equipPos >= 0 && equipPos < fashionlist.Length; + if (flag6) + { + FashionPositionInfo fashionPositionInfo2 = fashionlist[equipPos]; + bool flag7 = fashionPositionInfo2.fasionID < 10000; + if (flag7) + { + fashionPositionInfo2.fashionName = XEquipDocument.GetEquipPrefabModel(rowData, typeID, out fashionPositionInfo2.fashionDir); + fashionPositionInfo2.replace = true; + fashionPositionInfo2.itemID = rowData.ItemID; + fashionPositionInfo2.fasionID = rowData.ItemID; + fashionlist[equipPos] = fashionPositionInfo2; + } + } + } + } + bool flag8 = fashionConf.PresentID != 0; + if (flag8) + { + fashionPositionInfo.presentID = (uint)fashionConf.PresentID; + fashionPositionInfo.fashionName = ""; + } + else + { + fashionPositionInfo.fashionName = XEquipDocument.GetEquipPrefabModel(fashionConf, typeID, out fashionPositionInfo.fashionDir); + } + } + else + { + fashionPositionInfo.fasionID = (int)typeID; + fashionPositionInfo.fashionName = XEquipDocument.GetDefaultEquipModel(typeID, (FashionPosition)i, out fashionPositionInfo.fashionDir); + } + } + fashionlist[i] = fashionPositionInfo; + i++; + } + } + + private static string GetDefaultEquipModel(DefaultEquip.RowData de, FashionPosition part) + { + string result; + switch (part) + { + case FashionPosition.FASHION_START: + result = de.Helmet; + break; + case FashionPosition.FashionUpperBody: + result = de.Body; + break; + case FashionPosition.FashionLowerBody: + result = de.Leg; + break; + case FashionPosition.FashionGloves: + result = de.Glove; + break; + case FashionPosition.FashionBoots: + result = de.Boots; + break; + case FashionPosition.FashionMainWeapon: + result = de.Weapon; + break; + case FashionPosition.FashionSecondaryWeapon: + result = de.SecondWeapon; + break; + case FashionPosition.FashionWings: + result = de.Wing; + break; + case FashionPosition.FashionTail: + result = de.Tail; + break; + case FashionPosition.FashionDecal: + result = de.Decal; + break; + case FashionPosition.FASHION_END: + result = de.Face; + break; + case FashionPosition.Hair: + result = de.Hair; + break; + default: + result = ""; + break; + } + return result; + } + + public static string GetDefaultEquipModel(uint typeID, FashionPosition part, out string dir) + { + DefaultEquip.RowData defaultEquip = XEquipDocument.GetDefaultEquip((short)typeID); + dir = ""; + bool flag = defaultEquip == null; + string result; + if (flag) + { + result = ""; + } + else + { + int partIndex = CombineMeshTask.ConvertPart(part); + int num = (int)(typeID % 10u); + result = XEquipDocument.GetDefaultEquipName(partIndex, XEquipDocument.GetDefaultEquipModel(defaultEquip, part), num - 1, out dir); + } + return result; + } + + public static string GetEquipPrefabModel(FashionList.RowData data, uint typeID, out string dir) + { + bool flag = data != null; + string result; + if (flag) + { + int num = CombineMeshTask.ConvertPart((FashionPosition)data.EquipPos); + uint num2 = typeID % 10u; + uint num3 = num2 - 1u; + string arg = XEquipDocument._MeshPartList.proPrefix[(int)num3]; + string arg2 = ""; + bool flag2 = num >= 0 && num < XEquipDocument._MeshPartList.partSuffix.Length; + if (flag2) + { + arg2 = XEquipDocument._MeshPartList.partSuffix[num]; + } + string text = XSingleton.singleton.GetEquipPrefabModel(data, num2); + bool flag3 = text == "E" || (string.IsNullOrEmpty(data.SuitName) && string.IsNullOrEmpty(text)); + if (flag3) + { + dir = ""; + result = ""; + } + else + { + bool flag4 = string.IsNullOrEmpty(data.SuitName); + if (flag4) + { + dir = text; + result = string.Format("{0}/{1}{2}", text, arg, arg2); + } + else + { + dir = data.SuitName; + bool flag5 = string.IsNullOrEmpty(text); + if (flag5) + { + result = string.Format("{0}/{1}{2}", data.SuitName, arg, arg2); + } + else + { + bool flag6 = text.StartsWith("$"); + if (flag6) + { + string text2 = typeID.ToString(); + string text3 = text.Substring(1); + string[] array = text3.Split(XGlobalConfig.AllSeparators); + bool flag7 = array.Length % 2 == 0; + if (flag7) + { + for (int i = array.Length - 1; i > 0; i -= 2) + { + bool flag8 = text2.EndsWith(array[i - 1]); + if (flag8) + { + text = array[i]; + XSingleton.singleton.AddGreenLog("Select Equip :" + text.ToString(), null, null, null, null, null); + break; + } + } + } + } + result = string.Format("{0}/{1}{2}", data.SuitName, arg, text); + } + } + } + } + else + { + dir = ""; + result = ""; + } + return result; + } + + protected override void OnReconnected(XReconnectedEventArgs arg) + { + } + + public static SkinnedMeshRenderer GetSmr(GameObject keyGo) + { + Transform transform = keyGo.transform.Find("CombinedMesh"); + bool flag = transform == null; + if (flag) + { + transform = new GameObject("CombinedMesh") + { + transform = + { + parent = keyGo.transform + } + }.transform; + } + SkinnedMeshRenderer skinnedMeshRenderer = transform.GetComponent(); + bool flag2 = skinnedMeshRenderer == null; + if (flag2) + { + skinnedMeshRenderer = transform.gameObject.AddComponent(); + } + return skinnedMeshRenderer; + } + + public static Transform GetMountPoint(Transform keyTran, string point) + { + Transform transform = keyTran.Find(point); + bool flag = transform != null; + Transform result; + if (flag) + { + result = transform; + } + else + { + result = XSingleton.singleton.FindChildRecursively(keyTran, point); + } + return result; + } + } +} -- cgit v1.1-26-g67d0