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())); } }
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; } }
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]); }
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]; }
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); }
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; }
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; }