Example #1
0
            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;
                 */
            }
Example #2
0
        /// <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++;
                }
            }
        }
Example #3
0
 /// <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++;
             }
         }
     }
 }
Example #4
0
            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;
                    }
                }
            }
Example #5
0
        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);
        }
Example #6
0
 private static void VisEquipmentOnSetUtilityEquiped(VisEquipment __instance, int hash, ref bool __result)
 {
     if (__result && __instance.m_utilityItemInstances != null)
     {
         ReorderBones(__instance, hash, __instance.m_utilityItemInstances);
     }
 }
Example #7
0
        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);
        }
Example #8
0
 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);
     }
 }
Example #9
0
            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;
                            }
                        }
                    }
                }
            }
Example #10
0
            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);
            }
Example #11
0
 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?
     }
 }
Example #12
0
        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();
        }
Example #13
0
            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();
            }
Example #14
0
        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);
        }
Example #16
0
 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];
 }
Example #17
0
 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");
         }
     }
 }
Example #18
0
 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);
         }
     }
 }
Example #19
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");
         }
     }
 }
Example #21
0
        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);
        }
Example #22
0
 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.");
         }
     }
 }
Example #23
0
            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);
                }
            }
Example #24
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}.");
            }
Example #25
0
        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}");
                }
            }
        }
Example #26
0
        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");
                    }
                }
            }
        }
Example #27
0
        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);
        }
Example #29
0
        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();
                }
            }
        }
Example #30
0
 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));
             }
         }
     }
 }