装备副手

创作者: aiTookMyJob
已更新:2024-02-29 23:17:04
3KB

关于此 MOD

这个模组可以帮助你快速装备武器和盾牌,以及武器和火把。
这个模组可以帮助快速装备武器和盾牌,以及武器和火把。

using BepInEx;
using HarmonyLib;
using UnityEngine;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;
using BepInEx.Configuration;

namespace EquipOffHand
{
    [BepInPlugin("innocreator.equipoffhand", "EquipOffHand", "1.0")]
    [BepInProcess("valheim.exe")]
    public class EquipOffHand : BaseUnityPlugin
    {
        public static ConfigEntry<bool> showDebugMessages;
        public static ConfigEntry<bool> equipWeapon;
        public static ConfigEntry<bool> unequipShield;
        public static ConfigEntry<bool> unequipTorch;
        private readonly Harmony harmony = new Harmony("innocreator.equipoffhand");

        void Awake()
        {
            showDebugMessages = Config.Bind<bool>("General", "showDebugMessages", false, "显示脚本调试信息。");
            equipWeapon = Config.Bind<bool>("选项", "equipWeapon", true, "当你拿出火把时,自动装备你最强的武器。");
            unequipShield = Config.Bind<bool>("Options", "unequipShield", true, "收起武器时,自动卸下你的护盾。");
            unequipTorch = Config.Bind<bool>("Options", "unequipTorch", true, "收起武器时,自动卸下火把。");

            harmony.PatchAll();
        }

        [HarmonyPatch(typeof(Humanoid), nameof(Humanoid.EquipItem))]
        public static class EquipOffHand_EquipItem
        {
            private static bool Postfix(bool __result, Humanoid __instance, ItemDrop.ItemData item)
            {
                List<Player> playersList = Player.GetAllPlayers();
                Player playerOneList = playersList[0];
                Player playerOneReference = Player.GetPlayer(playerOneList.GetPlayerID());

                if (!__result || !playerOneReference.IsPlayer() || !playerOneReference)
                    返回假;
                if (playerOneReference.RightItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.OneHandedWeapon)
                {
                    if (showDebugMessages.Value)
                        Debug.Log("innoCretaor 装备武器");

                    如果(玩家一引用.右手物品?.共享物品类型 == 物品掉落.物品数据.物品类型.火把 ||
                        playerOneReference.LeftItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch ||
                        playerOneReference.LeftItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield)
                    {
                        if (showDebugMessages.Value)
                            Debug.Log("innoCretaor 已装备火把或盾牌");
                        返回假;
                    }

                    List<ItemDrop.ItemData> inventoryItems = playerOneReference.GetInventory().GetAllItems();
                    ItemDrop.ItemData bestShield = inventoryItems.Where(inventoryItem =>
                        inventoryItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield &&
                        !inventoryItem.m_equipped).OrderByDescending(inventoryItem =>
                        inventoryItem.m_shared.m_blockPower).FirstOrDefault();

                    if (bestShield != null)
                        playerOneReference.EquipItem(bestShield, false);
                }
                if (equipWeapon.Value && playerOneReference.RightItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch)
                {
                    如果(showDebugMessages.Value)
                        Debug.Log("innoCretaor 装备火把");

                    if (playerOneReference.LeftItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield)
                    {
                        if (showDebugMessages.Value)
                            Debug.Log("innoCretaor 装备盾牌 已装备");
                        返回false;
                    }

                    List<ItemDrop.ItemData> inventoryItems = playerOneReference.GetInventory().GetAllItems();
                    ItemDrop.ItemData bestOneHandWeapon = inventoryItems.Where(inventoryItem =>
                        inventoryItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.OneHandedWeapon &&
                        !inventoryItem.m_equipped).OrderByDescending(inventoryItem =>
                        inventoryItem.m_shared.m_attack).FirstOrDefault();

                    if (bestOneHandWeapon != null)
                        playerOneReference.EquipItem(bestOneHandWeapon, false);
                }
                return __result;
            }
        }

        [HarmonyPatch(typeof(Humanoid), nameof(Humanoid.UnequipItem))]
        public static class EquipOffHand_UnequipItem
        {
            private static void Postfix(Humanoid __instance, ItemDrop.ItemData item)
            {
                List<Player> playersList = Player.GetAllPlayers();
                Player playerOneList = playersList[0];
                Player playerOneReference = Player.GetPlayer(playerOneList.GetPlayerID());

                if (!playerOneReference || !playerOneReference.IsPlayer() || item?.m_shared.m_itemType != ItemDrop.ItemData.ItemType.OneHandedWeapon)
                    return;
                if (showDebugMessages.Value)
                    Debug.Log("innoCretaor 卸下武器");

                List<ItemDrop.ItemData> inventoryItems = playerOneReference.GetInventory().GetAllItems();

                if (unequipShield.Value && playerOneReference.LeftItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield)
                {
                    if (showDebugMessages.Value)
                        Debug.Log("innoCretaor 卸下盾牌");

                    inventoryItems.Where(itemEquipped =>
                        itemEquipped.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield &&
                        itemEquipped.m_equipped).FirstOrDefault();

                    playerOneReference.UnequipItem(equippedShield, false);
                    返回;
                }
                if (unequipTorch.Value && playerOneReference.LeftItem?.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch)
                {
                    if (showDebugMessages.Value)
                        Debug.Log("innoCretaor 卸下火把");

                    inventoryItems.Where(itemEquipped =>
                        itemEquipped.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch &&
                        itemEquipped.m_equipped).FirstOrDefault();

                    playerOneReference.UnequipItem(equippedTorch, false);
                    return;
                }  
            }
        }
    }
}

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!