static void Prefix(NpcAppearModule __instance, ref Dictionary <int, NpcAppearDBData> ___m_NpcAppearDBDataDir) { return; if (!enabled) { return; } NpcAppearDBData phyllisData = ___m_NpcAppearDBDataDir[4000035]; NpcAppear phyllisAppear = ActorMgr.Self.Get(4000035).GetComponent <NpcAppear>(); foreach (ClothesChanger cc in noClothes) { continue; ___m_NpcAppearDBDataDir.Add(cc.id, phyllisData); Actor actor = ActorMgr.Self.Get(cc.id); actor.gameObject.AddComponent <NpcAppear>(); NpcAppear component = actor.GetComponent <NpcAppear>(); AccessTools.FieldRefAccess <NpcAppear, Dictionary <int, AppearDBData> >(component, "m_DefaultAppearDBDatas") = AccessTools.FieldRefAccess <NpcAppear, Dictionary <int, AppearDBData> >(phyllisAppear, "m_DefaultAppearDBDatas"); AccessTools.FieldRefAccess <NpcAppear, int[]>(component, "defaultAppearIDs") = AccessTools.FieldRefAccess <NpcAppear, int[]>(phyllisAppear, "defaultAppearIDs"); AccessTools.FieldRefAccess <NpcAppear, Transform>(component, "m_BoneRoot") = AccessTools.FieldRefAccess <NpcAppear, Transform>(phyllisAppear, "m_BoneRoot"); AccessTools.FieldRefAccess <NpcAppear, SkinnedMeshRenderer[]>(component, "m_Smrs") = AccessTools.FieldRefAccess <NpcAppear, SkinnedMeshRenderer[]>(phyllisAppear, "m_Smrs"); //component.InitAppear(phyllisData, phyllisAppear.appearData, actor); typeof(NpcAppearModule).GetMethod("InitNPCAppear", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { cc.id, phyllisAppear.appearData, phyllisAppear.npcAppearDBData }); //typeof(NpcAppear).GetProperty("appearData").SetValue(component, phyllisAppear.appearData, null); //AccessTools.FieldRefAccess<NpcAppear, Dictionary<int, AppearDBData>>(component, "m_DefaultAppearDBDatas") = AccessTools.FieldRefAccess<NpcAppear, Dictionary<int, AppearDBData>>(phyllisAppear, "m_DefaultAppearDBDatas"); //AccessTools.FieldRefAccess<NpcAppear, Actor>(component, "m_Actor") = actor; } }
static void Postfix(NpcAppearDBData npcAppearDBData, NpcAppearData appearData, Actor actor) { if (!enabled) { return; } for (int i = 0; i < clothesChangers.Count; i++) { //Dbgl($"changing for {i} {clothesChangers[i].name}"); if (clothesChangers[i].id == actor.InstanceId) { Dbgl($"actor: {actor.ActorName}"); Dictionary <int, AppearDBData> appearDbDatas = AccessTools.FieldRefAccess <NpcAppearModule, Dictionary <int, AppearDBData> >(Module <NpcAppearModule> .Self, "m_AppearDBDataDic"); NpcAppear component = actor.GetComponent <NpcAppear>(); if (component == null) { Dbgl("actor does not have npcappear"); return; } Dbgl($"i {i} hair setting {settings.hairs[i]} actor hair: {hairs[settings.hairs[i]]}"); //if(settings.hairs[i] != 0) component.SetPart(appearDbDatas[hairs[settings.hairs[i]]]); Dbgl($"actor clothes: {clothes[settings.clothes[i]]}"); //if (settings.clothes[i] != 0) component.SetPart(appearDbDatas[clothes[settings.clothes[i]]]); } } }