bool CompareCustomData(CustomCharactor.CustomData _new, CustomCharactor.CustomData _old) { bool difference = false; //lz-2016.10.16 【错误 #4473】空对象 if (null != _new && null != _new.appearData && null != _old && null != _old.appearData) { AppearData newapp = _new.appearData; AppearData oldapp = _old.appearData; //color if (newapp.mEyeColor != oldapp.mEyeColor) { difference = true; } else if (newapp.mLipColor != oldapp.mLipColor) { difference = true; } else if (newapp.mSkinColor != oldapp.mSkinColor) { difference = true; } else if (newapp.mHairColor != oldapp.mHairColor) { difference = true; } //lz-2016.10.16 【错误 #4473】空对象 if (null != mScrollItemList && mScrollItemList.Count > 0) { //weight for (int i = 0; i < mScrollItemList.Count; i++) { float newweight = newapp.GetWeight(mScrollItemList[i].mType); float oldweight = oldapp.GetWeight(mScrollItemList[i].mType); if (!Mathf.Approximately(newweight, oldweight)) { difference = true; break; } } } //sex if (_new.sex != _old.sex) { difference = true; } } return(difference); }
static bool Prefix(ref SkinnedMeshRenderer __result, ref ActorEquip __instance, string[] ___nudeAppearUnits, string[] ___equipAppearUnits, ref AppearData ___appearData, ref string ___tattooPath, GameObject clothRoot = null, bool showHat = true) { List <AppearUnit> list = new List <AppearUnit>(); AppearUnit tattooTarget = null; for (int i = 0; i < 5; i++) { if (___nudeAppearUnits.Length > i && ___nudeAppearUnits[i] != null) { AppearUnit appearUnit = null; if (i < ___equipAppearUnits.Length && !string.IsNullOrEmpty(___equipAppearUnits[i]) && ((showHat && Singleton <OptionsMgr> .Self.ShowHat) || i != 1)) { AppearUnit appearUnit2 = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___equipAppearUnits[i]); if (appearUnit2 != null) { Dbgl("ActorEquip path: " + ___equipAppearUnits[i]); foreach (string key in customClothes.Keys) { if (___equipAppearUnits[i].EndsWith(key)) { appearUnit2.Smr.material.SetTexture("_MainTex", customClothes[key]); } } appearUnit = appearUnit2; } } else { appearUnit = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___nudeAppearUnits[i]); } if (appearUnit != null) { list.Add(appearUnit); if (i == 0) { tattooTarget = appearUnit; } } } } if (clothRoot == null) { clothRoot = __instance.ClothRoot; } AppearTarget.Instance.SetRoot(clothRoot); SkinnedMeshRenderer result = AppearTarget.Instance.BuildMesh(list, ___appearData, tattooTarget, ___tattooPath); MethodInfo dynMethod = __instance.GetType() .GetMethod("ApplyDyboneConfigs", BindingFlags.NonPublic | BindingFlags.Instance); dynMethod.Invoke(__instance, new object[] { AppearTarget.Instance.BoneDic }); __result = result; return(false); }
static bool Prefix(GameObject clothRoot, bool showHat, string[] ___nudeAppearUnits, string[] ___equipAppearUnits, AppearData ___appearData, string ___tattooPath, ActorEquip __instance) { List <AppearUnit> list = new List <AppearUnit>(); AppearUnit tattooTarget = null; for (int i = 0; i < 5; i++) { if (___nudeAppearUnits.Length > i && ___nudeAppearUnits[i] != null) { AppearUnit appearUnit = null; if (i < ___equipAppearUnits.Length && !string.IsNullOrEmpty(___equipAppearUnits[i]) && ((showHat && Singleton <OptionsMgr> .Self.ShowHat) || i != 1)) { AppearUnit appearUnit2 = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___equipAppearUnits[i]); if (appearUnit2 != null) { appearUnit = appearUnit2; if (___equipAppearUnits[i].Contains("Linda_Pants018")) { //appearUnit.Smr.material.SetTexture("_MainTex", customTextures["Linda_Pants018"]); } } } else { appearUnit = Singleton <ResMgr> .Instance.LoadSyncByType <AppearUnit>(AssetType.Appear, ___nudeAppearUnits[i]); } if (appearUnit != null) { list.Add(appearUnit); if (i == 0) { tattooTarget = appearUnit; } } } } if (clothRoot == null) { clothRoot = __instance.ClothRoot; } AppearTarget.Instance.SetRoot(clothRoot); AppearTarget.Instance.BuildMesh(list, ___appearData, tattooTarget, ___tattooPath); MethodInfo dynMethod = __instance.GetType().GetMethod("ApplyDyboneConfigs", BindingFlags.NonPublic | BindingFlags.Instance); dynMethod.Invoke(__instance, new object[] { AppearTarget.Instance.BoneDic }); return(false); }
static void Prefix(AppearTarget __instance, AppearData appearData, ref List <AppearUnit> units) { Dbgl($"Building player mesh"); if (!enabled || !settings.EnablePlayerModelling) { return; } for (int i = 0; i < units.Count; i++) { //Dbgl(units[i].name + " " + units[i].Part + " "+ (units[i].Smr != null && units[i].Smr.rootBone != null? units[i].Smr.rootBone.position+"" : "")); bool isFemale = units[i].name.StartsWith("AppearUnit_Linda"); if (units[i].Part == AppearPartEnum.Body && settings.playerClothes > 0) { if (!playerAppearUnits.ContainsKey(units[i].name)) { playerAppearUnits.Add(units[i].name, GameObject.Instantiate <AppearUnit>(units[i])); } units[i] = playerAppearUnits[units[i].name]; units[i].Smr = Singleton <ResMgr> .Instance.LoadSyncByType <NpcAppearUnit>(AssetType.NpcAppear, playerClothesNames[settings.playerClothes]).smrs[0]; for (int j = 0; j < units[i].Smr.bones.Length; j++) { if (units[i].Smr.bones[j].name == "Bip001 Spine1") { if (isFemale) { Transform bone = Transform.Instantiate(units[i].Smr.bones[j], units[i].Smr.bones[j].parent, false); units[i].Smr.bones[j] = bone; units[i].Smr.bones[j].name = "Bip001 Spine2"; } } } } if (units[i].Part == AppearPartEnum.Foot && settings.playerClothes > 0) { if (settings.playerHair > 0) { //units[i] = GameObject.Instantiate<AppearUnit>(units[i], units[i].); units[i].Smr = null; } } else if (units[i].Part == AppearPartEnum.Head && units[i].Smr != null && units[i].Smr.bones != null) { if (isFemale) { units[i].Smr.rootBone.position = new Vector3(0, 1.13f + settings.playerHeadOffset, 0); } else { units[i].Smr.rootBone.position = new Vector3(0, 1f + settings.playerHeadOffset, 0); } } else if (units[i].Part == AppearPartEnum.Hair && units[i].Smr != null && units[i].Smr.bones != null) { if (settings.playerHair > 0) { if (!playerAppearUnits.ContainsKey(units[i].name)) { playerAppearUnits.Add(units[i].name, GameObject.Instantiate <AppearUnit>(units[i])); } units[i] = playerAppearUnits[units[i].name]; units[i].Smr = Singleton <ResMgr> .Instance.LoadSyncByType <NpcAppearUnit>(AssetType.NpcAppear, playerHairNames[settings.playerHair]).smrs[0]; } if (isFemale) { units[i].Smr.rootBone.position = new Vector3(0, 1.35f + settings.playerHeadOffset + settings.playerHairOffset, 0); } else { units[i].Smr.rootBone.position = new Vector3(0, 1.40f + settings.playerHeadOffset + settings.playerHairOffset, 0); } } } }