using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ACE.Entity.Enum
{
///
/// This is a combination of the CharacterOption1 and CharacterOption2 enums. For the client, these are split into two groups because they can't be contained in a single uint field.
/// Only some of these have values, which is intentional.
/// Used with F7B1 0005: GameAction -> Set Single Character Option - Only those that have values will trigger that GameAction.
/// In the client, this is named PlayerOption.
///
public enum CharacterOption
{
[CharacterOptions1(CharacterOptions1.AutoRepeatAttack)]
AutoRepeatAttacks = 0x00, // AutoRepeatAttack_PlayerOption
[CharacterOptions1(CharacterOptions1.IgnoreAllegianceRequests)]
IgnoreAllegianceRequests = 0x01, // IgnoreAllegianceRequests_PlayerOption
[CharacterOptions1(CharacterOptions1.IgnoreFellowshipRequests)]
IgnoreFellowshipRequests = 0x02, // IgnoreFellowshipRequests_PlayerOption
[CharacterOptions1(CharacterOptions1.IgnoreTradeRequests)]
IgnoreAllTradeRequests = 0x03, // IgnoreTradeRequests_PlayerOption
[CharacterOptions1(CharacterOptions1.DisableMostWeatherEffects)]
DisableMostWeatherEffects = 0x04, // DisableMostWeatherEffects_PlayerOption
[CharacterOptions2(CharacterOptions2.PersistentAtDay)]
AlwaysDaylightOutdoors = 0x05, // PersistentAtDay_PlayerOption
[CharacterOptions1(CharacterOptions1.AllowGive)]
LetOtherPlayersGiveYouItems = 0x06, // AllowGive_PlayerOption
[CharacterOptions1(CharacterOptions1.ViewCombatTarget)]
KeepCombatTargetsInView = 0x07, // ViewCombatTarget_PlayerOption
[CharacterOptions1(CharacterOptions1.ShowTooltips)]
Display3dTooltips = 0x08, // ShowTooltips_PlayerOption
[CharacterOptions1(CharacterOptions1.UseDeception)]
AttemptToDeceiveOtherPlayers = 0x09, // UseDeception_PlayerOption
[CharacterOptions1(CharacterOptions1.ToggleRun)]
RunAsDefaultMovement = 0x0A, // ToggleRun_PlayerOption
[CharacterOptions1(CharacterOptions1.StayInChatMode)]
StayInChatModeAfterSendingMessage = 0x0B, // StayInChatMode_PlayerOption
[CharacterOptions1(CharacterOptions1.AdvancedCombatUI)]
AdvancedCombatInterface = 0x0C, // AdvancedCombatUI_PlayerOption
[CharacterOptions1(CharacterOptions1.AutoTarget)]
AutoTarget = 0x0D, // AutoTarget_PlayerOption
[CharacterOptions1(CharacterOptions1.VividTargetingIndicator)]
VividTargetingIndicator = 0x0E, // VividTargetingIndicator_PlayerOption
[CharacterOptions1(CharacterOptions1.FellowshipShareXP)]
ShareFellowshipExpAndLuminance = 0x0F, // FellowshipShareXP_PlayerOption
[CharacterOptions1(CharacterOptions1.AcceptLootPermits)]
AcceptCorpseLootingPermissions = 0x10, // AcceptLootPermits_PlayerOption
[CharacterOptions1(CharacterOptions1.FellowshipShareLoot)]
ShareFellowshipLoot = 0x11, // FellowshipShareLoot_PlayerOption
[CharacterOptions1(CharacterOptions1.AutoAcceptFellowRequest)]
AutomaticallyAcceptFellowshipRequests = 0x12, // FellowshipAutoAcceptRequests_PlayerOption
[CharacterOptions1(CharacterOptions1.SideBySideVitals)]
SideBySideVitals = 0x13, // SideBySideVitals_PlayerOption
[CharacterOptions1(CharacterOptions1.CoordinatesOnRadar)]
ShowCoordinatesByTheRadar = 0x14, // CoordinatesOnRadar_PlayerOption
[CharacterOptions1(CharacterOptions1.SpellDuration)]
DisplaySpellDurations = 0x15, // SpellDuration_PlayerOption
[CharacterOptions1(CharacterOptions1.DisableHouseRestrictionEffects)]
DisableHouseRestrictionEffects = 0x16, // DisableHouseRestrictionEffects_PlayerOption
[CharacterOptions1(CharacterOptions1.DragItemOnPlayerOpensSecureTrade)]
DragItemToPlayerOpensTrade = 0x17, // DragItemOnPlayerOpensSecureTrade_PlayerOption
[CharacterOptions1(CharacterOptions1.DisplayAllegianceLogonNotifications)]
ShowAllegianceLogons = 0x18, // DisplayAllegianceLogonNotifications_PlayerOption
[CharacterOptions1(CharacterOptions1.UseChargeAttack)]
UseChargeAttack = 0x19, // UseChargeAttack_PlayerOption
[CharacterOptions1(CharacterOptions1.UseCraftSuccessDialog)]
UseCraftingChanceOfSuccessDialog = 0x1A, // UseCraftSuccessDialog_PlayerOption
[CharacterOptions1(CharacterOptions1.HearAllegianceChat)]
ListenToAllegianceChat = 0x1B, // HearAllegianceChat_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayDateOfBirth)]
AllowOthersToSeeYourDateOfBirth = 0x1C, // DisplayDateOfBirth_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayAge)]
AllowOthersToSeeYourAge = 0x1D, // DisplayAge_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayChessRank)]
AllowOthersToSeeYourChessRank = 0x1E, // DisplayChessRank_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayFishingSkill)]
AllowOthersToSeeYourFishingSkill = 0x1F, // DisplayFishingSkill_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayNumberDeaths)]
AllowOthersToSeeYourNumberOfDeaths = 0x20, // DisplayNumberDeaths_PlayerOption
[CharacterOptions2(CharacterOptions2.TimeStamp)]
DisplayTimestamps = 0x21, // DisplayTimeStamps_PlayerOption
[CharacterOptions2(CharacterOptions2.SalvageMultiple)]
SalvageMultipleMaterialsAtOnce = 0x22, // SalvageMultiple_PlayerOption
[CharacterOptions2(CharacterOptions2.HearGeneralChat)]
ListenToGeneralChat = 0x23, // HearGeneralChat_PlayerOption
[CharacterOptions2(CharacterOptions2.HearTradeChat)]
ListenToTradeChat = 0x24, // HearTradeChat_PlayerOption
[CharacterOptions2(CharacterOptions2.HearLFGChat)]
ListenToLFGChat = 0x25, // HearLFGChat_PlayerOption
[CharacterOptions2(CharacterOptions2.HearRoleplayChat)]
ListenToRoleplayChat = 0x26, // HearRoleplayChat_PlayerOption
[CharacterOptions2(CharacterOptions2.AppearOffline)]
AppearOffline = 0x27, // AppearOffline_PlayerOption
[CharacterOptions2(CharacterOptions2.DisplayNumberCharacterTitles)]
AllowOthersToSeeYourNumberOfTitles = 0x28, // DisplayNumberCharacterTitles_PlayerOption
[CharacterOptions2(CharacterOptions2.MainPackPreferred)]
UseMainPackAsDefaultForPickingUpItems = 0x29, // MainPackPreferred_PlayerOption
[CharacterOptions2(CharacterOptions2.LeadMissileTargets)]
LeadMissileTargets = 0x2A, // LeadMissileTargets_PlayerOption
[CharacterOptions2(CharacterOptions2.UseFastMissiles)]
UseFastMissiles = 0x2B, // UseFastMissiles_PlayerOption
[CharacterOptions2(CharacterOptions2.FilterLanguage)]
FilterLanguage = 0x2C, // FilterLanguage_PlayerOption
[CharacterOptions2(CharacterOptions2.ConfirmVolatileRareUse)]
ConfirmUseOfRareGems = 0x2D, // ConfirmVolatileRareUse_PlayerOption
[CharacterOptions2(CharacterOptions2.HearSocietyChat)]
ListenToSocietyChat = 0x2E, // HearSocietyChat_PlayerOption
[CharacterOptions2(CharacterOptions2.ShowHelm)]
ShowYourHelmOrHeadGear = 0x2F, // ShowHelm_PlayerOption
[CharacterOptions2(CharacterOptions2.DisableDistanceFog)]
DisableDistanceFog = 0x30, // DisableDistanceFog_PlayerOption
[CharacterOptions2(CharacterOptions2.UseMouseTurning)]
UseMouseTurning = 0x31, // UseMouseTurning_PlayerOption
[CharacterOptions2(CharacterOptions2.ShowCloak)]
ShowYourCloak = 0x32, // ShowCloak_PlayerOption
[CharacterOptions2(CharacterOptions2.LockUI)]
LockUI = 0x33, // LockUI_PlayerOption
[CharacterOptions2(CharacterOptions2.HearPKDeath)]
ListenToPKDeathMessages = 0x34, // HearPKDeath_PlayerOption
[CharacterOptions1(CharacterOptions1.Default)]
CharacterOptions1Default = 0x35,
[CharacterOptions2(CharacterOptions2.Default)]
CharacterOptions2Default = 0x36
}
public static class CharacterOptionExtensions
{
private static Dictionary CharacterOptions1Attributes { get; }
private static Dictionary CharacterOptions2Attributes { get; }
static CharacterOptionExtensions()
{
var vals = System.Enum.GetValues(typeof(CharacterOption)).Cast();
CharacterOptions1Attributes = vals.ToDictionary(o => o, o => o.GetAttributeOfType());
CharacterOptions2Attributes = vals.ToDictionary(o => o, o => o.GetAttributeOfType());
}
public static CharacterOptions1Attribute GetCharacterOptions1Attribute(this CharacterOption val)
{
return CharacterOptions1Attributes[val];
}
public static CharacterOptions2Attribute GetCharacterOptions2Attribute(this CharacterOption val)
{
return CharacterOptions2Attributes[val];
}
public static uint GetCharacterOptions1Flag(this ReadOnlyDictionary options)
{
return GetCharacterOptions1Flag(options.ToDictionary(k => k.Key, v => v.Value));
}
public static uint GetCharacterOptions1Flag(this Dictionary options)
{
uint flags = 0;
foreach (var option in options.Where(o => o.Key.GetCharacterOptions1Attribute() != null))
{
if (option.Value)
flags |= (uint)option.Key.GetCharacterOptions1Attribute().Option;
}
return flags;
}
public static uint GetCharacterOptions2Flag(this ReadOnlyDictionary options)
{
return GetCharacterOptions2Flag(options.ToDictionary(k => k.Key, v => v.Value));
}
public static uint GetCharacterOptions2Flag(this Dictionary options)
{
uint flags = 0;
foreach (var option in options.Where(o => o.Key.GetCharacterOptions2Attribute() != null))
{
if (option.Value)
flags |= (uint)option.Key.GetCharacterOptions2Attribute().Option;
}
return flags;
}
}
}