static void Postfix(PlayerCustomizaton __instance) { Dbgl($"Player customization enabled"); if (!editingCharacter) { return; } Dbgl($"is editing"); Player player = __instance.GetComponentInParent <FejdStartup>().GetPreviewPlayer(); if (player.GetPlayerModel() == 1) { __instance.m_maleToggle.isOn = false; __instance.m_femaleToggle.isOn = true; } VisEquipment ve = Traverse.Create(player).Field("m_visEquipment").GetValue <VisEquipment>(); Vector3 skinColor = Traverse.Create(ve).Field("m_skinColor").GetValue <Vector3>(); float skinValue = Vector3.Distance(skinColor, Utils.ColorToVec3(__instance.m_skinColor0)) / Vector3.Distance(Utils.ColorToVec3(__instance.m_skinColor1), Utils.ColorToVec3(__instance.m_skinColor0)) * (__instance.m_skinHue.maxValue - __instance.m_skinHue.minValue) + __instance.m_skinHue.minValue; __instance.m_skinHue.value = skinValue; /* * Vector3 hairColor = Traverse.Create(ve).Field("m_hairColor").GetValue<Vector3>(); * float hairValue = Vector3.Distance(Utils.ColorToVec3(__instance.m_hairColor1), Utils.ColorToVec3(__instance.m_hairColor0)) / Vector3.Distance(hairColor, Utils.ColorToVec3(__instance.m_hairColor1)) * (__instance.m_hairTone.maxValue - __instance.m_hairTone.minValue) + __instance.m_hairTone.minValue; * __instance.m_hairTone.value = hairValue; */ }
/// <summary> /// Reorders bone ordering caused by importing ripped assets into unity. /// It effectively matches the bone ordering from the ItemPrefab (itemPrefabHash parameter) /// </summary> /// <param name="visEquipment"></param> /// <param name="itemPrefabHash"></param> /// <param name="instancesToFix">GameObjects that need to match the ordering from the ItemPrefab (itemPrefabHash parameter)</param> private static void ReorderBones(VisEquipment visEquipment, int itemPrefabHash, List <GameObject> instancesToFix) { Log.LogInfo($"Reordering bones..."); Transform skeletonRoot = visEquipment.transform.Find("Visual").Find("Armature").Find("Hips"); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemPrefabHash); if (!skeletonRoot) { Log.LogInfo($"{skeletonRoot} is null."); } if (!itemPrefab) { Log.LogInfo($"{itemPrefab} is null."); } int childCount = itemPrefab.transform.childCount; int num = 0; for (var i = 0; i < childCount; i++) { var itemPrefabChilds = itemPrefab.transform.GetChild(i); if (itemPrefabChilds.name.StartsWith("attach_skin")) { int j = 0; var meshRenderersToReorder = instancesToFix[num].GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var meshRenderer in itemPrefabChilds.GetComponentsInChildren <SkinnedMeshRenderer>()) { var meshRendererThatNeedFix = meshRenderersToReorder[j]; meshRendererThatNeedFix.SetBones(meshRenderer.GetBoneNames(), skeletonRoot); j++; } num++; } } }
/// <summary> /// Reorders bone ordering caused by importing ripped assets into unity. /// It effectively matches the bone ordering from the ItemPrefab (itemPrefabHash parameter). /// </summary> /// <param name="visEquipment"></param> /// <param name="itemPrefabHash"></param> /// <param name="instancesToFix">GameObjects that need to match the ordering from the ItemPrefab (itemPrefabHash parameter)</param> private static void ReorderBones(VisEquipment visEquipment, int itemPrefabHash, List <GameObject> instancesToFix) { if (visEquipment != null) { Transform skeletonRoot = visEquipment.transform.Find("Visual/Armature/Hips"); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemPrefabHash); if (!skeletonRoot || !itemPrefab) { Logger.LogDebug($"Prefab missing components. Skipping {itemPrefab} {skeletonRoot}"); return; } Logger.LogDebug($"Reordering bones"); int childCount = itemPrefab.transform.childCount; int num = 0; for (var i = 0; i < childCount; i++) { var itemPrefabChilds = itemPrefab.transform.GetChild(i); if (itemPrefabChilds.name.StartsWith("attach_skin")) { int j = 0; var meshRenderersToReorder = instancesToFix[num].GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var meshRenderer in itemPrefabChilds.GetComponentsInChildren <SkinnedMeshRenderer>()) { var meshRendererThatNeedFix = meshRenderersToReorder[j]; meshRendererThatNeedFix.SetBones(meshRenderer.GetBoneNames(), skeletonRoot); j++; } num++; } } } }
static void Postfix(VisEquipment __instance) { string path = Path.Combine($"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}", "CustomMeshes"); foreach (string file in Directory.GetFiles(path, "*.fbx")) { GameObject obj = MeshImporter.Load(file); obj.name = "player_fbx"; string name = Path.GetFileNameWithoutExtension(file); if (name == "player_model_1") { Dbgl($"Adding mesh from {file}."); Transform oldArmature = __instance.gameObject.transform.Find("Visual").Find("Armature"); GameObject newArmature = obj.transform.Find("Armature.003").gameObject; newArmature.name = "Armature"; //Instantiate(newArmature, oldArmature.parent); //Destroy(oldArmature.gameObject); SkinnedMeshRenderer smr = __instance.m_models[0].GetComponentInChildren <SkinnedMeshRenderer>(); MeshFilter mr = obj.GetComponentInChildren <MeshFilter>(); smr.sharedMesh = mr.sharedMesh; } } }
public static bool SetupVisEquipment_Prefix(Humanoid __instance, VisEquipment visEq, bool isRagdoll) { if (!isRagdoll) { visEq.SetLeftItem(__instance.m_leftItem != null ? __instance.m_leftItem?.m_dropPrefab?.name : "", __instance.m_leftItem?.m_variant ?? 0); visEq.SetRightItem(__instance.m_rightItem != null ? __instance.m_rightItem?.m_dropPrefab?.name : ""); if (__instance.IsPlayer()) { visEq.SetLeftBackItem(__instance.m_hiddenLeftItem != null ? __instance.m_hiddenLeftItem.m_dropPrefab?.name : "", __instance.m_hiddenLeftItem?.m_variant ?? 0); visEq.SetRightBackItem(__instance.m_hiddenRightItem != null ? __instance.m_hiddenRightItem.m_dropPrefab?.name : ""); } } visEq.SetChestItem(__instance.m_chestItem != null ? __instance.m_chestItem?.m_dropPrefab?.name : ""); visEq.SetLegItem(__instance.m_legItem != null ? __instance.m_legItem?.m_dropPrefab?.name : ""); visEq.SetHelmetItem(__instance.m_helmetItem != null ? __instance.m_helmetItem?.m_dropPrefab?.name : ""); visEq.SetShoulderItem(__instance.m_shoulderItem != null ? __instance.m_shoulderItem?.m_dropPrefab?.name : "", __instance.m_shoulderItem?.m_variant ?? 0); visEq.SetUtilityItem(__instance.m_utilityItem != null ? __instance.m_utilityItem?.m_dropPrefab?.name : ""); if (!__instance.IsPlayer()) { return(false); } visEq.SetBeardItem(__instance.m_beardItem); visEq.SetHairItem(__instance.m_hairItem); return(false); }
private static void VisEquipmentOnSetUtilityEquiped(VisEquipment __instance, int hash, ref bool __result) { if (__result && __instance.m_utilityItemInstances != null) { ReorderBones(__instance, hash, __instance.m_utilityItemInstances); } }
public static bool CanCreateEffect(VisEquipment __instance, int itemHash, out Player player, out ItemDrop.ItemData equippedItem, out string itemID) { equippedItem = null; itemID = null; player = __instance.GetComponent <Player>(); if (player == null) { return(false); } var itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); if (itemPrefab == null) { return(false); } itemID = itemPrefab.name; var itemDrop = itemPrefab.GetComponent <ItemDrop>(); if (itemDrop == null) { return(false); } var itemData = itemDrop.m_itemData; equippedItem = player.GetEquipmentOfType(itemData.m_shared.m_itemType); return(equippedItem != null); }
private static void VisEquipmentOnSetShoulderEquiped(VisEquipment __instance, int hash, int variant, ref bool __result) { if (__result && __instance.m_shoulderItemInstances != null) { ReorderBones(__instance, hash, __instance.m_shoulderItemInstances); } }
static void Prefix(VisEquipment __instance) { if (!__instance.m_isPlayer || __instance.m_models.Length == 0 || !ZNetScene.instance) { return; } if (femaleModelName.Value.Length > 0) { GameObject go = ZNetScene.instance.GetPrefab(femaleModelName.Value); SkinnedMeshRenderer[] smrs = go.GetComponentsInChildren <SkinnedMeshRenderer>(); if (smrs.Length == 1) { Dbgl($"smr name {smrs[0].name}."); Mesh mesh = smrs[0].sharedMesh; __instance.m_models[1].m_mesh = mesh; } else { foreach (SkinnedMeshRenderer smr in smrs) { Dbgl($"smr name {smr.name}."); if (smr.name.ToLower() == femaleModelName.Value.ToLower()) { Mesh mesh = smr.sharedMesh; __instance.m_models[1].m_mesh = mesh; break; } } } } if (maleModelName.Value.Length > 0) { GameObject go = ZNetScene.instance.GetPrefab(maleModelName.Value); SkinnedMeshRenderer[] smrs = go.GetComponentsInChildren <SkinnedMeshRenderer>(); if (smrs.Length == 1) { Dbgl($"smr name {smrs[0].name}."); Mesh mesh = smrs[0].sharedMesh; __instance.m_models[0].m_mesh = mesh; } else { foreach (SkinnedMeshRenderer smr in smrs) { Dbgl($"smr name {smr.name}."); if (smr.name.ToLower() == maleModelName.Value.ToLower()) { Mesh mesh = smr.sharedMesh; __instance.m_models[0].m_mesh = mesh; break; } } } } }
public static bool Prefix(VisEquipment __instance, int itemHash, int variant, Transform joint, ref GameObject __result, ref SkinnedMeshRenderer ___m_bodyModel, bool enableEquipEffects = true) { if (!__instance.name.Contains("Greyling")) { return(true); } GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); if (itemPrefab == null) { __result = null; return(false); } if (itemPrefab.transform.childCount == 0) { __result = null; return(false); } Transform child = null; for (int i = 0; i < itemPrefab.transform.childCount; i++) { child = itemPrefab.transform.GetChild(i); if (child.gameObject.name == "attach" || child.gameObject.name == "attach_skin") { break; } } if (null == child) { child = itemPrefab.transform.GetChild(0); } var gameObject = child.gameObject; if (gameObject == null) { __result = null; return(false); } GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject); gameObject2.SetActive(value: true); Collider[] componentsInChildren = gameObject2.GetComponentsInChildren <Collider>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].enabled = false; } gameObject2.transform.SetParent(joint); gameObject2.transform.localPosition = Vector3.zero; gameObject2.transform.localRotation = Quaternion.identity; __result = gameObject2; return(false); }
private static void VisEquipmentOnSetHelmetEquiped(VisEquipment __instance, int hash, int hairHash, ref bool __result) { if (__result && __instance.m_helmetItemInstance != null) { ReorderBones(__instance, hash, new List <GameObject> { __instance.m_helmetItemInstance }); //This is a single object instead of a collection, because reasons? } }
private void Awake() { m_nview = GetComponent <ZNetView>(); m_ani = GetComponentInChildren <Animator>(); m_vis = GetComponent <VisEquipment>(); Util.seed += (int)((gameObject.transform.position.x + gameObject.transform.position.y) * 1000); m_ani.SetBool("wakeup", false); SetName(); }
static void Postfix(VisEquipment __instance, GameObject ___m_helmetItemInstance) { if (!modEnabled.Value || showBeard.Value || ___m_helmetItemInstance == null) { return; } Traverse.Create(__instance).Method("SetBeardEquiped", new object[] { 0 }).GetValue(); Traverse.Create(__instance).Method("UpdateLodgroup").GetValue(); }
public static void AttachArmor_Postfix(VisEquipment __instance, List <GameObject> __result, int itemHash) { if (!CanCreateEffect(__instance, itemHash, out var player, out var equippedItem, out var itemID)) { return; } SetTextureOverrides(__instance, __result, itemID, equippedItem); SetItemFx(null, equippedItem, player); }
// This is an exact copy of the ingame method "DropItem" to provide a reliable way of controlling it later static bool Prefix(Humanoid __instance, ref bool __result, Inventory inventory, ItemDrop.ItemData item, int amount, ItemDrop.ItemData ___m_hiddenLeftItem, ItemDrop.ItemData ___m_hiddenRightItem, ZSyncAnimation ___m_zanim, EffectList ___m_dropEffects, VisEquipment ___m_visEquipment) { if (item.m_shared.m_questItem) { __instance.Message(MessageHud.MessageType.Center, "$msg_cantdrop"); __result = false; return(false); } __instance.RemoveFromEquipQueue(item); __instance.UnequipItem(item, triggerEquipEffects: false); if (___m_hiddenLeftItem == item) { ___m_hiddenLeftItem = null; _setupVisEquipment.Invoke(__instance, new [] { ___m_visEquipment, (object)false }); } if (___m_hiddenRightItem == item) { ___m_hiddenRightItem = null; _setupVisEquipment.Invoke(__instance, new [] { ___m_visEquipment, (object)false }); } if (amount == item.m_stack) { // ZLog.Log("drop all " + amount + " " + item.m_stack); if (!inventory.RemoveItem(item)) { // ZLog.Log("Was not removed"); __result = false; return(false); } } else { // ZLog.Log("drop some " + amount + " " + item.m_stack); inventory.RemoveItem(item, amount); } ItemDrop itemDrop = ItemDrop.DropItem(item, amount, __instance.transform.position + __instance.transform.forward + __instance.transform.up, __instance.transform.rotation); Longship.Instance.EventManager.DispatchEvent(new HumanoidDropItemEvent(__instance, item, amount)); if (__instance.IsPlayer()) { itemDrop.OnPlayerDrop(); } itemDrop.GetComponent <Rigidbody>().velocity = (__instance.transform.forward + Vector3.up) * 5f; ___m_zanim.SetTrigger("interact"); ___m_dropEffects.Create(__instance.transform.position, Quaternion.identity); __instance.Message(MessageHud.MessageType.TopLeft, "$msg_dropped " + itemDrop.m_itemData.m_shared.m_name, itemDrop.m_itemData.m_stack, itemDrop.m_itemData.GetIcon()); __result = true; return(false); }
protected virtual void Awake() { monsterAI = GetComponent <MonsterAI>(); m_talker = gameObject; m_nview = GetComponent <ZNetView>(); m_ani = GetComponentInChildren <Animator>(); m_hum = GetComponent <Humanoid>(); m_vis = GetComponent <VisEquipment>(); //RemoveUnusedComp(); currentChoice = ChoiceList[index]; }
private static void VisEquipment_UpdateEquipmentVisuals(VisEquipment __instance) { if (__instance.m_nview && __instance.m_nview.GetZDO() is ZDO zdo) { if (Instances.TryGetValue(__instance, out var instance)) { instance.NewRightItemVariant = zdo.GetInt("RightItemVariant"); instance.NewChestVariant = zdo.GetInt("ChestItemVariant"); instance.NewRightBackItemVariant = zdo.GetInt("RightBackItemVariant"); } } }
private static void VisEquipment_SetChestItem(VisEquipment __instance, string name) { if (Instances.TryGetValue(__instance, out var instance) && instance.MyHumanoid && instance.MyHumanoid.m_chestItem != null && !(__instance.m_chestItem == name && instance.MyHumanoid.m_chestItem.m_variant == instance.CurrentChestVariant)) { instance.NewChestVariant = instance.MyHumanoid.m_chestItem.m_variant; if (__instance.m_nview && __instance.m_nview.GetZDO() is ZDO zdo) { zdo.Set("ChestItemVariant", (!string.IsNullOrEmpty(name)) ? instance.NewChestVariant : 0); } } }
static void Postfix(VisEquipment __instance) { Dbgl($"Vis Awake ."); if (!__instance.m_isPlayer || __instance.m_models.Length == 0) { return; } Dbgl($"Checking for custom player models."); if (customMeshes.ContainsKey("player")) { Dbgl($"Has player."); if (customMeshes["player"].ContainsKey("model")) { Dbgl($"Has player model."); SkinnedMeshRenderer renderer = null; if (customMeshes["player"]["model"].ContainsKey("0")) { Dbgl($"Replacing player model 0 with imported mesh."); CustomMeshData custom = customMeshes["player"]["model"]["0"]; __instance.m_models[0].m_mesh = custom.mesh; renderer = custom.renderer; } if (customMeshes["player"]["model"].ContainsKey("1")) { Dbgl($"Replacing player model 1 with imported mesh."); CustomMeshData custom = customMeshes["player"]["model"]["1"]; __instance.m_models[1].m_mesh = custom.mesh; renderer = custom.renderer; } if (renderer != null) { Transform armature = __instance.m_bodyModel.rootBone.parent; Dbgl($"Setting up new bones array"); Transform[] newBones = new Transform[renderer.bones.Length]; for (int i = 0; i < newBones.Length; i++) { newBones[i] = RecursiveFind(armature, renderer.bones[i].name); if (newBones[i] == null) { Dbgl($"Could not find existing bone {renderer.bones[i].name}"); } } __instance.m_bodyModel.bones = newBones; } } } }
private static void SetBodyEquipmentTexture(VisEquipment instance, string itemName, SkinnedMeshRenderer smr, List <GameObject> itemInstances) { if (smr != null) { ReplaceOneGameObjectTextures(smr.gameObject, itemName, "object"); } if (itemInstances != null) { foreach (GameObject go in itemInstances) { ReplaceOneGameObjectTextures(go, itemName, "object"); } } }
private static void Postfix(VisEquipment __instance, GameObject __result, int itemHash) { if (!__instance.m_isPlayer || __result == null || itemHash != DvergerItemHash) { return; } if (__result.GetComponent <LightChanger>() != null) { Object.Destroy(__result.GetComponent <LightChanger>()); } var light = __result.GetComponentInChildren <Light>(); __result.AddComponent <LightChanger>().SetLight(light); }
static void Postfix(VisEquipment __instance) { for (int i = 0; i < __instance.m_models.Length; i++) { if (customTextures.ContainsKey($"model_{i}_texture")) { __instance.m_models[i].m_baseMaterial.SetTexture("_MainTex", customTextures[$"model_{i}_texture"]); Dbgl($"set model_{i}_texture custom texture."); } if (customTextures.ContainsKey($"model_{i}_bump")) { __instance.m_models[i].m_baseMaterial.SetTexture("_SkinBumpMap", customTextures[$"model_{i}_bump"]); Dbgl($"set model_{i}_bump custom skin bump map."); } } }
static void Prefix(VisEquipment __instance) { if (!__instance.m_isPlayer || __instance.m_models.Length == 0 || !ZNetScene.instance) { return; } if (femaleModelName.Value.Length > 0) { ChangeModel(ref __instance, femaleModelName.Value, 1); } if (maleModelName.Value.Length > 0) { ChangeModel(ref __instance, maleModelName.Value, 0); } }
private static void ChangeModel(ref VisEquipment vis, string value, int which) { GameObject go = ZNetScene.instance.GetPrefab(value); if (go == null) { Dbgl($"couldn't find object {value}."); return; } SkinnedMeshRenderer[] smrs = go.GetComponentsInChildren <SkinnedMeshRenderer>(); if (smrs.Length == 1) { Dbgl($"switching model {which} to {smrs[0].name}."); Dbgl($"smr name {smrs[0].name}."); vis.m_models[which].m_mesh = smrs[0].sharedMesh; return; } else if (smrs.Length > 1) { bool switched = false; foreach (SkinnedMeshRenderer smr in smrs) { if (smr.name.ToLower() == value.ToLower()) { switched = true; Dbgl($"switching model {which} model"); Mesh mesh = smr.sharedMesh; vis.m_models[which].m_mesh = mesh; return; } } if (!switched) { Dbgl($"switching model {which} to {smrs[0].name}."); vis.m_models[which].m_mesh = smrs[0].sharedMesh; return; } } Dbgl($"No model {value} found for {which}."); }
private static void SetTextureOverrides(VisEquipment __instance, List <GameObject> __result, string itemID, ItemDrop.ItemData equippedItem) { GetTexOverrides(itemID, equippedItem, out var mainTexture, out var chestTex, out var legsTex); if (!string.IsNullOrEmpty(mainTexture)) { foreach (var go in __result) { var skinnedMeshRenderers = go.GetComponentsInChildren <SkinnedMeshRenderer>(true); SetMainTextureOnRenderers(skinnedMeshRenderers, mainTexture); var meshRenderers = go.GetComponentsInChildren <MeshRenderer>(true); SetMainTextureOnRenderers(meshRenderers, mainTexture); } } if (!string.IsNullOrEmpty(chestTex)) { var chestTexAsset = EpicLoot.LoadAsset <Texture>(chestTex); if (chestTexAsset != null) { __instance.m_bodyModel.material.SetTexture("_ChestTex", chestTexAsset); } else { EpicLoot.LogError($"Missing Texture Override Asset: ChestTex={chestTex}"); } } if (!string.IsNullOrEmpty(legsTex)) { var legsTexAsset = EpicLoot.LoadAsset <Texture>(legsTex); if (legsTexAsset != null) { __instance.m_bodyModel.material.SetTexture("_ChestTex", legsTexAsset); } else { EpicLoot.LogError($"Missing Texture Override Asset: LegsTex={legsTex}"); } } }
private void Update() { if (ZNetScene.instance != null && Input.GetKey(hotKey.Value)) { LoadCustomTextures(); Dbgl($"Pressed reload key."); GameObject root = AccessTools.FieldRefAccess <ZNetScene, GameObject>(ZNetScene.instance, "m_netSceneRoot"); Transform[] transforms = root.GetComponentsInChildren <Transform>(true); List <GameObject> gos = new List <GameObject>(); foreach (Transform t in transforms) { if (t.parent == root.transform) { gos.Add(t.gameObject); } } LoadSceneTextures(gos.ToArray()); LoadSceneTextures(AccessTools.FieldRefAccess <ZNetScene, Dictionary <int, GameObject> >(ZNetScene.instance, "m_namedPrefabs").Values.ToArray()); foreach (Player player in Player.GetAllPlayers()) { VisEquipment ve = AccessTools.FieldRefAccess <Humanoid, VisEquipment>(player, "m_visEquipment"); if (ve != null) { SetEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_leftItem"), AccessTools.FieldRefAccess <VisEquipment, GameObject>(ve, "m_leftItemInstance")); SetEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_rightItem"), AccessTools.FieldRefAccess <VisEquipment, GameObject>(ve, "m_rightItemInstance")); SetEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_helmetItem"), AccessTools.FieldRefAccess <VisEquipment, GameObject>(ve, "m_helmetItemInstance")); SetEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_leftBackItem"), AccessTools.FieldRefAccess <VisEquipment, GameObject>(ve, "m_leftBackItemInstance")); SetEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_rightBackItem"), AccessTools.FieldRefAccess <VisEquipment, GameObject>(ve, "m_rightBackItemInstance")); SetEquipmentListTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_shoulderItem"), AccessTools.FieldRefAccess <VisEquipment, List <GameObject> >(ve, "m_shoulderItemInstances")); SetEquipmentListTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_utilityItem"), AccessTools.FieldRefAccess <VisEquipment, List <GameObject> >(ve, "m_utilityItemInstances")); SetBodyEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_legItem"), ve.m_bodyModel, AccessTools.FieldRefAccess <VisEquipment, List <GameObject> >(ve, "m_legItemInstances"), "_Legs"); SetBodyEquipmentTexture(AccessTools.FieldRefAccess <VisEquipment, string>(ve, "m_chestItem"), ve.m_bodyModel, AccessTools.FieldRefAccess <VisEquipment, List <GameObject> >(ve, "m_chestItemInstances"), "_Chest"); } } } }
private void Update() { if (ZNetScene.instance != null && Input.GetKey(hotKey.Value)) { LoadCustomTextures(); Dbgl($"Pressed reload key."); GameObject root = (GameObject)typeof(ZNetScene).GetField("m_netSceneRoot", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ZNetScene.instance); Transform[] transforms = root.GetComponentsInChildren <Transform>(true); List <GameObject> gos = new List <GameObject>(); foreach (Transform t in transforms) { if (t.parent == root.transform) { gos.Add(t.gameObject); } } LoadSceneTextures(gos.ToArray()); LoadSceneTextures(((Dictionary <int, GameObject>) typeof(ZNetScene).GetField("m_namedPrefabs", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ZNetScene.instance)).Values.ToArray()); foreach (Player player in Player.GetAllPlayers()) { VisEquipment ve = (VisEquipment)typeof(Humanoid).GetField("m_visEquipment", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(player); if (ve != null) { SetEquipmentTexture((string)typeof(VisEquipment).GetField("m_leftItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (GameObject)typeof(VisEquipment).GetField("m_leftItemInstance", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentTexture((string)typeof(VisEquipment).GetField("m_rightItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (GameObject)typeof(VisEquipment).GetField("m_rightItemInstance", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentTexture((string)typeof(VisEquipment).GetField("m_helmetItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (GameObject)typeof(VisEquipment).GetField("m_helmetItemInstance", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentTexture((string)typeof(VisEquipment).GetField("m_leftBackItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (GameObject)typeof(VisEquipment).GetField("m_leftBackItemInstance", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentTexture((string)typeof(VisEquipment).GetField("m_rightBackItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (GameObject)typeof(VisEquipment).GetField("m_rightBackItemInstance", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentListTexture((string)typeof(VisEquipment).GetField("m_shoulderItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (List <GameObject>) typeof(VisEquipment).GetField("m_shoulderItemInstances", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetEquipmentListTexture((string)typeof(VisEquipment).GetField("m_utilityItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), (List <GameObject>) typeof(VisEquipment).GetField("m_utilityItemInstances", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve)); SetBodyEquipmentTexture((string)typeof(VisEquipment).GetField("m_legItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), ve.m_bodyModel, (List <GameObject>) typeof(VisEquipment).GetField("m_legItemInstances", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), "_Legs"); SetBodyEquipmentTexture((string)typeof(VisEquipment).GetField("m_chestItem", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), ve.m_bodyModel, (List <GameObject>) typeof(VisEquipment).GetField("m_chestItemInstances", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ve), "_Chest"); } } } }
static bool Prefix(ref Humanoid __instance, ref ItemDrop.ItemData ___m_leftItem, ref ItemDrop.ItemData ___m_rightItem, ref ItemDrop.ItemData ___m_hiddenLeftItem, ref ItemDrop.ItemData ___m_hiddenRightItem, ref VisEquipment ___m_visEquipment, ref ZSyncAnimation ___m_zanim) { if (__instance != Player.m_localPlayer || !VHVRConfig.UseVrControls()) { return(true); } bool leftHand = VRPlayer.toggleShowLeftHand; bool rightHand = VRPlayer.toggleShowRightHand; VRPlayer.toggleShowRightHand = true; VRPlayer.toggleShowLeftHand = true; if (___m_leftItem == null && ___m_rightItem == null) { return(false); } if (leftHand) { ItemDrop.ItemData leftItem = ___m_leftItem; __instance.UnequipItem(___m_leftItem); ___m_hiddenLeftItem = leftItem; } if (rightHand) { ItemDrop.ItemData rightItem = ___m_rightItem; __instance.UnequipItem(___m_rightItem); ___m_hiddenRightItem = rightItem; } setupVisEquipmentMethod.Invoke(__instance, new object[] { ___m_visEquipment, false }); ___m_zanim.SetTrigger("equip_hip"); return(false); }
private void Update() { if (!modEnabled.Value || AedenthornUtils.IgnoreKeyPresses(true)) { return; } if (AedenthornUtils.CheckKeyDown(hairToggleKey.Value)) { showHair.Value = !showHair.Value; Config.Save(); if (hairToggleString.Value.Length > 0) { Player.m_localPlayer.Message(MessageHud.MessageType.Center, string.Format(hairToggleString.Value, showHair.Value), 0, null); } VisEquipment ve = (VisEquipment)typeof(Humanoid).GetField("m_visEquipment", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Player.m_localPlayer); Traverse.Create(ve).Field("m_helmetHideHair").SetValue(!showHair.Value); GameObject helmet = Traverse.Create(ve).Field("m_helmetItemInstance").GetValue <GameObject>(); if (helmet != null) { Traverse.Create(ve).Method("UpdateEquipmentVisuals").GetValue(); } } else if (AedenthornUtils.CheckKeyDown(beardToggleKey.Value)) { showBeard.Value = !showBeard.Value; Config.Save(); if (beardToggleString.Value.Length > 0) { Player.m_localPlayer.Message(MessageHud.MessageType.Center, string.Format(beardToggleString.Value, showBeard.Value), 0, null); } VisEquipment ve = (VisEquipment)typeof(Humanoid).GetField("m_visEquipment", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Player.m_localPlayer); GameObject helmet = Traverse.Create(ve).Field("m_helmetItemInstance").GetValue <GameObject>(); if (helmet != null) { Traverse.Create(ve).Method("UpdateEquipmentVisuals").GetValue(); } } }
static void Postfix(VisEquipment __instance) { for (int i = 0; i < __instance.m_models.Length; i++) { foreach (string property in __instance.m_models[i].m_baseMaterial.GetTexturePropertyNames()) { if (ShouldLoadCustomTexture($"player_model_{i}{property}")) { __instance.m_models[i].m_baseMaterial.SetTexture(property, LoadTexture($"player_model_{i}{property}", __instance.m_models[i].m_baseMaterial.GetTexture(property), false)); Dbgl($"set player_model_{i}_texture custom texture."); } else if (property == "_MainTex" && ShouldLoadCustomTexture($"player_model_{i}_texture")) // legacy { __instance.m_models[i].m_baseMaterial.SetTexture(property, LoadTexture($"player_model_{i}_texture", __instance.m_models[i].m_baseMaterial.GetTexture(property), false)); } else if (property == "_SkinBumpMap" && ShouldLoadCustomTexture($"player_model_{i}_bump")) // legacy { __instance.m_models[i].m_baseMaterial.SetTexture(property, LoadTexture($"player_model_{i}_bump", __instance.m_models[i].m_baseMaterial.GetTexture(property), true)); } } } }