//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
namespace MUnique.OpenMU.GameLogic.MuHelper;
///
/// The Mu Helper player settings.
///
public interface IMuHelperSettings
{
/// Gets the always-active basic attack skill ID (0 = no skill, use normal attack).
int BasicSkillId { get; }
/// Gets the first conditional skill ID.
int ActivationSkill1Id { get; }
/// Gets the second conditional skill ID.
int ActivationSkill2Id { get; }
/// Gets the timer interval (seconds) for ActivationSkill1 when Skill1Delay is set.
int DelayMinSkill1 { get; }
/// Gets the timer interval (seconds) for ActivationSkill2 when Skill2Delay is set.
int DelayMinSkill2 { get; }
/// Gets a value indicating whether to use timer for the skill 1.
bool Skill1UseTimer { get; }
/// Gets a value indicating whether to use condition for the skill 1.
bool Skill1UseCondition { get; }
/// Gets a value indicating whether to use the precondition for Skill1 (false = nearby, true = attacking).
bool Skill1ConditionAttacking { get; }
/// Gets the mob count threshold for Skill1 condition: 0=2+, 1=3+, 2=4+, 3=5+.
int Skill1SubCondition { get; }
/// Gets a value indicating whether to use timer for the skill 2.
bool Skill2UseTimer { get; }
/// Gets a value indicating whether to use condition for the skill 2.
bool Skill2UseCondition { get; }
/// Gets a value indicating whether to use the precondition for Skill2 (false = nearby, true = attacking).
bool Skill2ConditionAttacking { get; }
/// Gets the mob count threshold for Skill2 condition.
int Skill2SubCondition { get; }
/// Gets a value indicating whether to use combo mode.
bool UseCombo { get; }
/// Gets the hunting range nibble (0-15); multiply to get tile distance.
int HuntingRange { get; }
/// Gets the max seconds away from original position before regrouping.
int MaxSecondsAway { get; }
/// Gets a value indicating whether to counter-attack enemies that attack from long range.
bool LongRangeCounterAttack { get; }
/// Gets a value indicating whether to return to original spawn position when away too long.
bool ReturnToOriginalPosition { get; }
/// Gets the Buff 0 skill id.
int BuffSkill0Id { get; }
/// Gets the Buff 1 skill id.
int BuffSkill1Id { get; }
/// Gets the Buff 2 skill id.
int BuffSkill2Id { get; }
/// Gets a value indicating whether apply buffs based on duration (i.e. when the buff expires).
bool BuffOnDuration { get; }
/// Gets a value indicating whether apply buff duration logic to party members too.
bool BuffDurationForParty { get; }
/// Gets the buff cast interval in seconds (0 = disabled).
int BuffCastIntervalSeconds { get; }
/// Gets a value indicating whether to use auto-heal.
bool AutoHeal { get; }
/// Gets the self-heal threshold (% HP, e.g. 30 means heal when below 30%).
int HealThresholdPercent { get; }
/// Gets a value indicating whether to use drain life.
bool UseDrainLife { get; }
/// Gets a value indicating whether to use healing potion.
bool UseHealPotion { get; }
/// Gets the potion use threshold (% HP).
int PotionThresholdPercent { get; }
/// Gets a value indicating whether to support party.
bool SupportParty { get; }
/// Gets a value indicating whether to auto heal party.
bool AutoHealParty { get; }
/// Gets the party member HP threshold (%) below which healing is applied.
int HealPartyThresholdPercent { get; }
/// Gets a value indicating whether to use dark raven.
bool UseDarkRaven { get; }
/// Gets the dark raven mode 0 = cease, 1 = auto-attack, 2 = attack with owner.
int DarkRavenMode { get; }
/// Gets the obtain range.
int ObtainRange { get; }
/// Gets a value indicating whether pickup all items.
bool PickAllItems { get; }
/// Gets a value indicating whether pickup selected items.
bool PickSelectItems { get; }
/// Gets a value indicating whether pickup jewels.
bool PickJewel { get; }
/// Gets a value indicating whether pickup zen.
bool PickZen { get; }
/// Gets a value indicating whether pickup ancient items.
bool PickAncient { get; }
/// Gets a value indicating whether pickup excellent items.
bool PickExcellent { get; }
/// Gets a value indicating whether pickup extra items.
bool PickExtraItems { get; }
/// Gets the extra item names. Up to 12 item name substrings; pick any dropped item whose name contains one of these.
IReadOnlyList ExtraItemNames { get; }
/// Gets a value indicating whether to repair items.
bool RepairItem { get; }
/// Gets a value indicating whether to automatically defend against players attacking the character.
bool UseSelfDefense { get; }
/// Gets a value indicating whether to automatically accept requests from friends.
bool AutoAcceptFriend { get; }
/// Gets a value indicating whether to automatically accept requests from guild.
bool AutoAcceptGuild { get; }
///
/// Gets a value indicating whether to automatically accept party requests from anyone, not just
/// friends or guild mates. Defaults to false; used by server-side bots so they group up
/// with players who invite them (see Bots.BotPartyHandler for the applied safeguards).
///
bool AutoAcceptAnyone => false;
/// Gets a value indicating whether to use basic attack as fallback when the configured skill cannot be used.
bool FallbackBasicAttack { get; }
///
/// Gets a value indicating whether the combat AI should automatically cast the strongest learned
/// attack skill the character can currently afford, instead of relying on the explicitly configured
/// skill IDs. Used by server-side bots (which have no client-side MU Helper config) so they fight
/// with class- and level-appropriate skills; human offline sessions keep their explicit configuration.
///
bool AutoSelectBestSkill { get; }
///
/// Gets a value indicating whether the buff AI should automatically cast the learned buff skills
/// of the character, instead of relying on the explicitly configured buff slot IDs. Used by
/// server-side bots so each class keeps its own buffs up (e.g. elf Greater Defense/Greater Damage);
/// human offline sessions keep their explicit configuration.
///
bool AutoSelectBuffs { get; }
///
/// Gets a value indicating whether to drink a mana potion when mana runs low, so casters can keep
/// casting. There is no client-side MU Helper setting for this; it is used by server-side bots.
///
bool UseManaPotion { get; }
///
/// Gets a value indicating whether the combat AI only engages monsters the character can safely
/// handle (up to half its own level, like the bot navigator's hunting-ground selection). Without
/// this, a bot travelling through hostile territory would pick fights with monsters far above its
/// level and die. Human offline sessions keep the unrestricted behavior - the player chose the spot.
///
bool OnlyHuntSafeMonsters { get; }
///
/// Gets a value indicating whether to also pick up equippable items which are an upgrade over the
/// character's currently equipped gear (evaluated before pickup), so bots progress their equipment
/// like a real player without hoarding junk.
///
bool PickUpgradeItems { get; }
}