Пример #1
0
        private void PickBestEquipment(CharacterBuild build, SlotID equipType, Action <CharacterBuild, EquipmentModel> setEquipment)
        {
            DamageList     highest          = null;
            EquipmentModel highestEquipment = default;
            var            usedTypes        = build.GetDamageTypes();

            var relevantGear = new List <EquipmentModel>();

            foreach (var type in usedTypes)
            {
                relevantGear.AddRange(Database.GetDamageBonusEquipment(equipType, type));
            }

            foreach (var option in relevantGear)
            {
                var clone = build.Clone();
                setEquipment.Invoke(clone, option);
                var newDmg = clone.GetWeaponDamage(Enemy, NaturalHexes, ConsiderWeaponHex);

                if (highest == null || newDmg.TotalDamage > highest.TotalDamage)
                {
                    highestEquipment = option;
                    highest          = newDmg;
                }
            }

            setEquipment.Invoke(build, highestEquipment);
        }
        public override void SerializeEffect <T>(T effect)
        {
            var comp = effect as ReduceDurability;

            EquipmentSlot = comp.EquipmentSlot;
            Durability    = comp.Durability;
            Percentage    = comp.Percentage;
        }
        public static void Postfix(CharacterEquipment __instance, ref bool __result, ref EquipmentSlot.EquipmentSlotIDs _slotID, ref Weapon.WeaponType _weaponType)
        {
            bool flag = __result && _weaponType == Weapon.WeaponType.Arrow;

            if (flag)
            {
                Weapon weapon = __instance.GetEquippedItem(_slotID) as Weapon;
                __result = !weapon.HasTag(TagSourceManager.Instance.GetTag(161.ToString()));
            }
        }
Пример #4
0
        public static void SetEnum(ref EquipmentSlot.EquipmentSlotIDs value, int change)
        {
            int newindex = (int)value + change;

            if (newindex == 2 || newindex == 4)
            {
                newindex += change;
            }

            if (newindex >= 0 && newindex < 9)
            {
                value = (EquipmentSlot.EquipmentSlotIDs)newindex;
            }
        }
Пример #5
0
        public static IEnumerable <EquipmentModel> GetDamageBonusEquipment(SlotID equipType, DamageType.Types dmgType)
        {
            if (!s_cachedDmgBonusLists.ContainsKey(equipType))
            {
                List <EquipmentModel> fullList = null;
                switch (equipType)
                {
                case SlotID.LeftHand:
                    fullList = OffhandModels; break;

                case SlotID.Helmet:
                    fullList = HelmetModels; break;

                case SlotID.Chest:
                    fullList = ChestModels; break;

                case SlotID.Foot:
                    fullList = BootsModels; break;

                case SlotID.Back:
                    fullList = BackpackModels; break;
                }

                s_cachedDmgBonusLists.Add(equipType, new Dictionary <DamageType.Types, List <EquipmentModel> >());

                foreach (var opt in fullList)
                {
                    if (HasAnyDamageBonus(opt, out List <DamageType.Types> typeList))
                    {
                        foreach (var type in typeList)
                        {
                            if (!s_cachedDmgBonusLists[equipType].ContainsKey(type))
                            {
                                s_cachedDmgBonusLists[equipType].Add(type, new List <EquipmentModel>());
                            }

                            s_cachedDmgBonusLists[equipType][type].Add(opt);
                        }
                    }
                }
            }

            if (!s_cachedDmgBonusLists[equipType].ContainsKey(dmgType))
            {
                return(Enumerable.Empty <EquipmentModel>());
            }

            return(s_cachedDmgBonusLists[equipType][dmgType]);
        }
Пример #6
0
        static void CharacterVisuals_EquipVisuals_Post(ref bool[] __state, ref EquipmentSlot.EquipmentSlotIDs _slotID, ref ArmorVisuals _visuals)
        {
            #region quit
            if (_armorSlotsToHide == ArmorSlots.None)
            {
                return;
            }
            #endregion

            // hide chosen pieces of armor
            if (ShouldArmorSlotBeHidden(_slotID))
            {
                _visuals.Hide();
            }

            // restore original hide flags
            _visuals.HideFace = __state[0];
            _visuals.HideHair = __state[1];
            _visuals.DisableDefaultVisuals = __state[2];
        }
Пример #7
0
        static bool CharacterVisuals_EquipVisuals_Pre(ref bool[] __state, ref EquipmentSlot.EquipmentSlotIDs _slotID, ref ArmorVisuals _visuals)
        {
            #region quit
            if (_armorSlotsToHide == ArmorSlots.None)
            {
                return(true);
            }
            #endregion

            // save original hide flags for postfix
            __state    = new bool[3];
            __state[0] = _visuals.HideFace;
            __state[1] = _visuals.HideHair;
            __state[2] = _visuals.DisableDefaultVisuals;
            // override hide flags
            if (ShouldArmorSlotBeHidden(_slotID))
            {
                _visuals.HideFace = false;
                _visuals.HideHair = false;
                _visuals.DisableDefaultVisuals = false;
            }
            return(true);
        }
Пример #8
0
 public override void SerializeEffect <T>(T effect, DM_Effect holder)
 {
     EquipmentSlot = (effect as ReduceDurability).EquipmentSlot;
     Durability    = (effect as ReduceDurability).Durability;
     Percentage    = (effect as ReduceDurability).Percentage;
 }
Пример #9
0
 static private bool ShouldArmorSlotBeHidden(EquipmentSlot.EquipmentSlotIDs slot)
 => slot == EquipmentSlot.EquipmentSlotIDs.Helmet && _armorSlotsToHide.Value.HasFlag(ArmorSlots.Head) ||
 slot == EquipmentSlot.EquipmentSlotIDs.Chest && _armorSlotsToHide.Value.HasFlag(ArmorSlots.Chest) ||
 slot == EquipmentSlot.EquipmentSlotIDs.Foot && _armorSlotsToHide.Value.HasFlag(ArmorSlots.Feet);
 public override void SerializeEffect <T>(T component)
 {
     MinimumDurability = (component as EquipDurabilityCondition).DurabilityRequired;
     EquipmentSlot     = (component as EquipDurabilityCondition).EquipmentSlot;
 }
 public override void SerializeEffect <T>(T component)
 {
     EquipmentSlot = (component as IsEquipSlotFilledCondition).EquipmentSlot;
 }