using ACE.Common;
using ACE.Entity;
using ACE.Entity.Enum;
using ACE.Entity.Enum.Properties;
using ACE.Server.Network.GameMessages;
using ACE.Server.Network.GameMessages.Messages;
namespace ACE.Server.WorldObjects
{
partial class Player
{
public override string Name
{
get => IsPlussed && CloakStatus < CloakStatus.Player ? "+" + base.Name : base.Name;
set => base.Name = value.TrimStart('+');
}
public string GetNameWithSuffix()
{
if (!IsOlthoiPlayer)
return Name;
else
{
if (NoOlthoiTalk)
return Name + "^";
else
return Name + "&";
}
}
// ========================================
// ========= Admin Tier Properties ========
// ========================================
public bool IsAdmin
{
get => GetProperty(PropertyBool.IsAdmin) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsAdmin); else SetProperty(PropertyBool.IsAdmin, value); }
}
public bool IsSentinel
{
get => GetProperty(PropertyBool.IsSentinel) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsSentinel); else SetProperty(PropertyBool.IsSentinel, value); }
}
public bool IsEnvoy
{
get => GetProperty(PropertyBool.IsEnvoy) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsEnvoy); else SetProperty(PropertyBool.IsEnvoy, value); }
}
public bool IsArch
{
get => GetProperty(PropertyBool.IsArch) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsArch); else SetProperty(PropertyBool.IsArch, value); }
}
public bool IsPsr
{
get => GetProperty(PropertyBool.IsPsr) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsPsr); else SetProperty(PropertyBool.IsPsr, value); }
}
public bool IsAdvocate
{
get => GetProperty(PropertyBool.IsAdvocate) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsAdvocate); else SetProperty(PropertyBool.IsAdvocate, value); }
}
public bool IsPlussed
{
get => (Character != null && Character.IsPlussed) || (Session != null && ConfigManager.Config.Server.Accounts.OverrideCharacterPermissions && Session.AccessLevel > AccessLevel.Advocate);
}
///
/// Flag indicates if player is an Olthoi Player
///
public bool IsOlthoiPlayer { get; set; }
///
/// Flag indicates if player is a Gear Knight and Core Plating server option (gearknight_core_plating) is enforced
///
public bool IsGearKnightPlayer { get; set; }
public string GodState
{
get => GetProperty(PropertyString.GodState);
set { if (value == null) RemoveProperty(PropertyString.GodState); else SetProperty(PropertyString.GodState, value); }
}
// ========================================
// ========== Account Properties ==========
// ========================================
///
/// Flag indicates if an account is at least 15 days old
///
public bool Account15Days
{
get => GetProperty(PropertyBool.Account15Days) ?? false;
set { if (!value) RemoveProperty(PropertyBool.Account15Days); else SetProperty(PropertyBool.Account15Days, value); }
}
public SubscriptionStatus AccountRequirements
{
get => (SubscriptionStatus)(GetProperty(PropertyInt.AccountRequirements) ?? (int)SubscriptionStatus.AsheronsCall_Subscription);
set { if (value == SubscriptionStatus.AsheronsCall_Subscription) RemoveProperty(PropertyInt.AccountRequirements); else SetProperty(PropertyInt.AccountRequirements, (int)value); }
}
// ========================================
// ========= Advocate Properties ==========
// ========================================
///
/// Flag indicates if advocate quest has been completed
///
public bool AdvocateQuest
{
get => GetProperty(PropertyBool.AdvocateQuest) ?? false;
set { if (!value) RemoveProperty(PropertyBool.AdvocateQuest); else SetProperty(PropertyBool.AdvocateQuest, value); }
}
///
/// Flag indicates if player is currently in advocate state
///
public bool AdvocateState
{
get => GetProperty(PropertyBool.AdvocateState) ?? false;
set { if (!value) RemoveProperty(PropertyBool.AdvocateState); else SetProperty(PropertyBool.AdvocateState, value); }
}
public int? AdvocateLevel
{
get => GetProperty(PropertyInt.AdvocateLevel);
set { if (!value.HasValue) RemoveProperty(PropertyInt.AdvocateLevel); else SetProperty(PropertyInt.AdvocateLevel, value.Value); }
}
// ========================================
// ========= Channel Properties ===========
// ========================================
public Channel? ChannelsActive
{
get => (Channel?)GetProperty(PropertyInt.ChannelsActive);
set { if (!value.HasValue) RemoveProperty(PropertyInt.ChannelsActive); else SetProperty(PropertyInt.ChannelsActive, (int)value.Value); }
}
public Channel? ChannelsAllowed
{
get => (Channel?)GetProperty(PropertyInt.ChannelsAllowed);
set { if (!value.HasValue) RemoveProperty(PropertyInt.ChannelsAllowed); else SetProperty(PropertyInt.ChannelsAllowed, (int)value.Value); }
}
// ========================================
// ========== Player Properties ===========
// ========================================
public int? Age
{
get => GetProperty(PropertyInt.Age);
set { if (!value.HasValue) RemoveProperty(PropertyInt.Age); else SetProperty(PropertyInt.Age, value.Value); }
}
public long? AvailableExperience
{
get => GetProperty(PropertyInt64.AvailableExperience);
set { if (!value.HasValue) RemoveProperty(PropertyInt64.AvailableExperience); else SetProperty(PropertyInt64.AvailableExperience, value.Value); }
}
public long? TotalExperience
{
get => GetProperty(PropertyInt64.TotalExperience);
set { if (!value.HasValue) RemoveProperty(PropertyInt64.TotalExperience); else SetProperty(PropertyInt64.TotalExperience, value.Value); }
}
public long? AvailableLuminance
{
get => GetProperty(PropertyInt64.AvailableLuminance);
set { if (!value.HasValue) RemoveProperty(PropertyInt64.AvailableLuminance); else SetProperty(PropertyInt64.AvailableLuminance, value.Value); }
}
public long? MaximumLuminance
{
get => GetProperty(PropertyInt64.MaximumLuminance);
set { if (!value.HasValue) RemoveProperty(PropertyInt64.MaximumLuminance); else SetProperty(PropertyInt64.MaximumLuminance, value.Value); }
}
public int? AvailableSkillCredits
{
get => GetProperty(PropertyInt.AvailableSkillCredits);
set { if (!value.HasValue) RemoveProperty(PropertyInt.AvailableSkillCredits); else SetProperty(PropertyInt.AvailableSkillCredits, value.Value); }
}
public int? TotalSkillCredits
{
get => GetProperty(PropertyInt.TotalSkillCredits);
set { if (!value.HasValue) RemoveProperty(PropertyInt.TotalSkillCredits); else SetProperty(PropertyInt.TotalSkillCredits, value.Value); }
}
public int NumDeaths
{
get => GetProperty(PropertyInt.NumDeaths) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.NumDeaths); else SetProperty(PropertyInt.NumDeaths, value); }
}
public int? DeathLevel
{
get => GetProperty(PropertyInt.DeathLevel);
set { if (!value.HasValue) RemoveProperty(PropertyInt.DeathLevel); else SetProperty(PropertyInt.DeathLevel, value.Value); }
}
public int? VitaeCpPool
{
get => GetProperty(PropertyInt.VitaeCpPool);
set { if (!value.HasValue) RemoveProperty(PropertyInt.VitaeCpPool); else SetProperty(PropertyInt.VitaeCpPool, value.Value); }
}
public bool HasVitae => EnchantmentManager.HasVitae;
///
/// Will return 1.0f if no vitae exists.
///
public float Vitae
{
get
{
var vitae = EnchantmentManager.GetVitae();
if (vitae == null)
return 1.0f;
return vitae.StatModValue;
}
}
///
/// The timestamp the player originally purchased house
///
public int? HousePurchaseTimestamp
{
get => GetProperty(PropertyInt.HousePurchaseTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyInt.HousePurchaseTimestamp); else SetProperty(PropertyInt.HousePurchaseTimestamp, value.Value); }
}
///
/// The timestamp when the current maintenance period ends
///
public int? HouseRentTimestamp
{
get => GetProperty(PropertyInt.HouseRentTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyInt.HouseRentTimestamp); else SetProperty(PropertyInt.HouseRentTimestamp, value.Value); }
}
///
/// The timestamp when the player last logged in
///
public double? LoginTimestamp
{
get => GetProperty(PropertyFloat.LoginTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyFloat.LoginTimestamp); else SetProperty(PropertyFloat.LoginTimestamp, value.Value); }
}
///
/// The timestamp when the player last logged off
///
public double? LogoffTimestamp
{
get => GetProperty(PropertyFloat.LogoffTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyFloat.LogoffTimestamp); else SetProperty(PropertyFloat.LogoffTimestamp, value.Value); }
}
///
/// The timestamp when the last teleport started
///
public double? LastTeleportStartTimestamp
{
get => GetProperty(PropertyFloat.LastTeleportStartTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyFloat.LastTeleportStartTimestamp); else SetProperty(PropertyFloat.LastTeleportStartTimestamp, value.Value); }
}
public bool SpellComponentsRequired
{
get => GetProperty(PropertyBool.SpellComponentsRequired) ?? true;
set { if (value) RemoveProperty(PropertyBool.SpellComponentsRequired); else SetProperty(PropertyBool.SpellComponentsRequired, value); }
}
public bool SafeSpellComponents
{
get => GetProperty(PropertyBool.SafeSpellComponents) ?? false;
set { if (!value) RemoveProperty(PropertyBool.SafeSpellComponents); else SetProperty(PropertyBool.SafeSpellComponents, value); }
}
public bool LoginAtLifestone
{
get => GetProperty(PropertyBool.LoginAtLifestone) ?? false;
set { if (!value) RemoveProperty(PropertyBool.LoginAtLifestone); else SetProperty(PropertyBool.LoginAtLifestone, value); }
}
/*public bool IsOlthoiPlayer()
{
switch (WeenieClassId)
{
case 43480: // olthoiplayer
case 43481: // olthoiacidplayer
case 43493: // olthoiadmin
case 43494: // olthoiacidadmin:
return true;
}
return false;
}*/
///
/// The timestamp when the player last generated a rare
///
public int? RaresLoginTimestamp
{
get => GetProperty(PropertyInt.RaresLoginTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresLoginTimestamp); else SetProperty(PropertyInt.RaresLoginTimestamp, value.Value); }
}
///
/// The timestamp when the player last generated a tier one rare
///
public int? RaresTierOneLogin
{
get => GetProperty(PropertyInt.RaresTierOneLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierOneLogin); else SetProperty(PropertyInt.RaresTierOneLogin, value.Value); }
}
///
/// The timestamp when the player last generated a tier two rare
///
public int? RaresTierTwoLogin
{
get => GetProperty(PropertyInt.RaresTierTwoLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierTwoLogin); else SetProperty(PropertyInt.RaresTierTwoLogin, value.Value); }
}
///
/// The timestamp when the player last generated a tier three rare
///
public int? RaresTierThreeLogin
{
get => GetProperty(PropertyInt.RaresTierThreeLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierThreeLogin); else SetProperty(PropertyInt.RaresTierThreeLogin, value.Value); }
}
///
/// The timestamp when the player last generated a tier four rare
///
public int? RaresTierFourLogin
{
get => GetProperty(PropertyInt.RaresTierFourLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierFourLogin); else SetProperty(PropertyInt.RaresTierFourLogin, value.Value); }
}
///
/// The timestamp when the player last generated a tier five rare
///
public int? RaresTierFiveLogin
{
get => GetProperty(PropertyInt.RaresTierFiveLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierFiveLogin); else SetProperty(PropertyInt.RaresTierFiveLogin, value.Value); }
}
///
/// The timestamp when the player last generated a tier six rare
///
public int? RaresTierSixLogin
{
get => GetProperty(PropertyInt.RaresTierSixLogin);
set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierSixLogin); else SetProperty(PropertyInt.RaresTierSixLogin, value.Value); }
}
/////
///// The timestamp when the player last generated a tier seven rare
/////
//public int? RaresTierSevenLogin
//{
// get => GetProperty(PropertyInt.RaresTierSevenLogin);
// set { if (!value.HasValue) RemoveProperty(PropertyInt.RaresTierSevenLogin); else SetProperty(PropertyInt.RaresTierSevenLogin, value.Value); }
//}
///
/// The amount of tier one rares generated for this player
///
public int RaresTierOne
{
get => GetProperty(PropertyInt.RaresTierOne) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierOne); else SetProperty(PropertyInt.RaresTierOne, value); }
}
///
/// The amount of tier two rares generated for this player
///
public int RaresTierTwo
{
get => GetProperty(PropertyInt.RaresTierTwo) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierTwo); else SetProperty(PropertyInt.RaresTierTwo, value); }
}
///
/// The amount of tier three rares generated for this player
///
public int RaresTierThree
{
get => GetProperty(PropertyInt.RaresTierThree) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierThree); else SetProperty(PropertyInt.RaresTierThree, value); }
}
///
/// The amount of tier four rares generated for this player
///
public int RaresTierFour
{
get => GetProperty(PropertyInt.RaresTierFour) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierFour); else SetProperty(PropertyInt.RaresTierFour, value); }
}
///
/// The amount of tier five rares generated for this player
///
public int RaresTierFive
{
get => GetProperty(PropertyInt.RaresTierFive) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierFive); else SetProperty(PropertyInt.RaresTierFive, value); }
}
///
/// The amount of tier six rares generated for this player
///
public int RaresTierSix
{
get => GetProperty(PropertyInt.RaresTierSix) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RaresTierSix); else SetProperty(PropertyInt.RaresTierSix, value); }
}
/////
///// The amount of tier seven rares generated for this player
/////
//public int RaresTierSeven
//{
// get => GetProperty(PropertyInt.RaresTierSeven) ?? 0;
// set { if (value == 0) RemoveProperty(PropertyInt.RaresTierSeven); else SetProperty(PropertyInt.RaresTierSeven, value); }
//}
public bool IsAfk
{
get => GetProperty(PropertyBool.Afk) ?? false;
set { if (!value) RemoveProperty(PropertyBool.Afk); else SetProperty(PropertyBool.Afk, value); }
}
public string AfkMessage
{
get => GetProperty(PropertyString.Afk);
set { if (value == null) RemoveProperty(PropertyString.Afk); else SetProperty(PropertyString.Afk, value); }
}
// ========================================
// ===== Player Properties - Titles========
// ========================================
public int? CharacterTitleId
{
get => GetProperty(PropertyInt.CharacterTitleId);
set { if (!value.HasValue) RemoveProperty(PropertyInt.CharacterTitleId); else SetProperty(PropertyInt.CharacterTitleId, value.Value); }
}
public int? NumCharacterTitles
{
get => GetProperty(PropertyInt.NumCharacterTitles);
set { if (!value.HasValue) RemoveProperty(PropertyInt.NumCharacterTitles); else SetProperty(PropertyInt.NumCharacterTitles, value.Value); }
}
// ========================================
// =========== Augmentations ==============
// ========================================
///
/// All of your skills are increased by 5. This augmentation cannot be repeated.
///
public int AugmentationJackOfAllTrades
{
get => GetProperty(PropertyInt.AugmentationJackOfAllTrades) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationJackOfAllTrades); else SetProperty(PropertyInt.AugmentationJackOfAllTrades, value); }
}
///
/// Eye of the Remorseless
/// Increases your chance of critical hits by 1%. This augmentation cannot be repeated.
///
public int AugmentationCriticalExpertise
{
get => GetProperty(PropertyInt.AugmentationCriticalExpertise) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationCriticalExpertise); else SetProperty(PropertyInt.AugmentationCriticalExpertise, value); }
}
///
/// Iron Skin of the Invincible
/// Increases your damage reduction rating by 3. This augmentation cannot be repeated.
///
public int AugmentationDamageReduction
{
get => GetProperty(PropertyInt.AugmentationDamageReduction) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationDamageReduction); else SetProperty(PropertyInt.AugmentationDamageReduction, value); }
}
///
/// Critical Protection
/// Grants you limited protection from critical hits. 25% of critical hits from creatures,
/// and 5% critical hits from players will strike you for normal damage.
/// This augmentation cannot be repeated.
///
public int AugmentationCriticalDefense
{
get => GetProperty(PropertyInt.AugmentationCriticalDefense) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationCriticalDefense); else SetProperty(PropertyInt.AugmentationCriticalDefense, value); }
}
///
/// Removes the player's need to use a focus for Life Magic (Foci of Verdancy)
/// This augmentation cannot be repeated.
///
public int AugmentationInfusedLifeMagic
{
get => GetProperty(PropertyInt.AugmentationInfusedLifeMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInfusedLifeMagic); else SetProperty(PropertyInt.AugmentationInfusedLifeMagic, value); }
}
///
/// Hand of the Remorseless
/// Increases critical damage by 3%. This augmentation cannot be repeated.
///
public int AugmentationCriticalPower
{
get => GetProperty(PropertyInt.AugmentationCriticalPower) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationCriticalPower); else SetProperty(PropertyInt.AugmentationCriticalPower, value); }
}
///
/// Might of the Seventh Mule
/// Gives the player 20% more burden-carrying capacity for each gem used (max x5)
///
public int AugmentationIncreasedCarryingCapacity
{
get => GetProperty(PropertyInt.AugmentationIncreasedCarryingCapacity) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationIncreasedCarryingCapacity); else SetProperty(PropertyInt.AugmentationIncreasedCarryingCapacity, value); }
}
///
/// Removes the player's need to use a focus for Creature Magic (Foci of Enchantment)
/// This augmentation cannot be repeated.
///
public int AugmentationInfusedCreatureMagic
{
get => GetProperty(PropertyInt.AugmentationInfusedCreatureMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInfusedCreatureMagic); else SetProperty(PropertyInt.AugmentationInfusedCreatureMagic, value); }
}
///
/// Removes the player's need to use a focus for Item Magic (Foci of Artifice)
/// This augmentation cannot be repeated.
///
public int AugmentationInfusedItemMagic
{
get => GetProperty(PropertyInt.AugmentationInfusedItemMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInfusedItemMagic); else SetProperty(PropertyInt.AugmentationInfusedItemMagic, value); }
}
///
/// Removes the player's need to use a focus for Void Magic (Foci of Shadow)
/// This augmentation cannot be repeated.
///
public int AugmentationInfusedVoidMagic
{
get => GetProperty(PropertyInt.AugmentationInfusedVoidMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInfusedVoidMagic); else SetProperty(PropertyInt.AugmentationInfusedVoidMagic, value); }
}
///
/// Removes the player's need to use a focus for War Magic (Foci of Strife)
/// This augmentation cannot be repeated.
///
public int AugmentationInfusedWarMagic
{
get => GetProperty(PropertyInt.AugmentationInfusedWarMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInfusedWarMagic); else SetProperty(PropertyInt.AugmentationInfusedWarMagic, value); }
}
///
/// Clutch of the Miser
/// The player loses 5 fewer items at death. (stacks 3x)
/// If the player is killed in a PK battle, they still drop items.
///
public int AugmentationLessDeathItemLoss
{
get => GetProperty(PropertyInt.AugmentationLessDeathItemLoss) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationLessDeathItemLoss); else SetProperty(PropertyInt.AugmentationLessDeathItemLoss, value); }
}
///
/// Enduring Enchantment
/// The player keeps their enchantments after dying, unless killed in a PK battle.
///
public int AugmentationSpellsRemainPastDeath
{
get => GetProperty(PropertyInt.AugmentationSpellsRemainPastDeath) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpellsRemainPastDeath); else SetProperty(PropertyInt.AugmentationSpellsRemainPastDeath, value); }
}
///
/// Quick Learner
/// The player receives +5% bonus XP earned via hunting / killing creatures.
/// This augmentation cannot be repeated.
///
public int AugmentationBonusXp
{
get => GetProperty(PropertyInt.AugmentationBonusXp) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationBonusXp); else SetProperty(PropertyInt.AugmentationBonusXp, value); }
}
///
/// Innate Renewal
/// The player receives a 100% bonus to vital regeneration rate
/// The player can augment themselves twice in this way.
///
public int AugmentationFasterRegen
{
get => GetProperty(PropertyInt.AugmentationFasterRegen) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationFasterRegen); else SetProperty(PropertyInt.AugmentationFasterRegen, value); }
}
// "augs" - Asheron's Lesser Benediction, Asheron's Bendiction, Blackmoor's Favor
// these don't use PropertyInt.Augmentation*, but they are reusable enchantments
///
/// Shadow of the Seventh Mule
/// Grants the player an extra, 8th pack slot. This augmentation cannot be repeated.
///
public int AugmentationExtraPackSlot
{
get => GetProperty(PropertyInt.AugmentationExtraPackSlot) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationExtraPackSlot); else SetProperty(PropertyInt.AugmentationExtraPackSlot, value); }
}
///
/// Reinforcement of the Lugians
/// Grants the player 5 extra points to their innate Strength attribute
/// This augmentation will not increase innate Strength (your Strength at character creatoin) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateStrength
{
get => GetProperty(PropertyInt.AugmentationInnateStrength) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateStrength); else SetProperty(PropertyInt.AugmentationInnateStrength, value); }
}
///
/// Bleeargh's Fortitude
/// Grants the player 5 extra points to their innate Endurance attribute
/// This augmentation will not increase innate Endurance (your Endurance at character creation) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateEndurance
{
get => GetProperty(PropertyInt.AugmentationInnateEndurance) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateEndurance); else SetProperty(PropertyInt.AugmentationInnateEndurance, value); }
}
///
/// Oswald's Enhancement
/// Grants the player 5 extra points to their innate Coordination attribute
/// This augmentation will not increase innate Coordination (your Coordination at character creation) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateCoordination
{
get => GetProperty(PropertyInt.AugmentationInnateCoordination) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateCoordination); else SetProperty(PropertyInt.AugmentationInnateCoordination, value); }
}
///
/// Siraluun's Blessing
/// Grants the player 5 extra points to their innate Quickness attribute
/// This augmentation will not increase innate Quickness (your Quickness at character creation) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateQuickness
{
get => GetProperty(PropertyInt.AugmentationInnateQuickness) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateQuickness); else SetProperty(PropertyInt.AugmentationInnateQuickness, value); }
}
///
/// Enduring Calm
/// Grants the player 5 extra points to their innate Focus attribute
/// This augmentation will not increase innate Focus (your Focus at character creation) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateFocus
{
get => GetProperty(PropertyInt.AugmentationInnateFocus) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateFocus); else SetProperty(PropertyInt.AugmentationInnateFocus, value); }
}
///
/// Steadfast Will
/// Grants the player 5 extra points to their innate Self attribute
/// This augmentation will not increase innate Self (your Strength at Self creation) beyond 100.
/// You can augment each of your attributes in this way, but only ten times in combination.
///
public int AugmentationInnateSelf
{
get => GetProperty(PropertyInt.AugmentationInnateSelf) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateSelf); else SetProperty(PropertyInt.AugmentationInnateSelf, value); }
}
///
/// The number of innate attribute augs that have been applied (max 10)
///
public int AugmentationInnateFamily
{
get => GetProperty(PropertyInt.AugmentationInnateFamily) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationInnateFamily); else SetProperty(PropertyInt.AugmentationInnateFamily, value); }
}
///
/// Enhancement of the Blade Turner
/// Grants the player 10% extra resistance to slashing damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceSlash
{
get => GetProperty(PropertyInt.AugmentationResistanceSlash) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceSlash); else SetProperty(PropertyInt.AugmentationResistanceSlash, value); }
}
///
/// Enhancement of the Arrow Turner
/// Grants the player 10% extra resistance to piercing damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistancePierce
{
get => GetProperty(PropertyInt.AugmentationResistancePierce) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistancePierce); else SetProperty(PropertyInt.AugmentationResistancePierce, value); }
}
///
/// Enhancement of the Mace Turner
/// Grants the player 10% extra resistance to bludgeon damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceBlunt
{
get => GetProperty(PropertyInt.AugmentationResistanceBlunt) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceBlunt); else SetProperty(PropertyInt.AugmentationResistanceBlunt, value); }
}
///
/// Fiery Enhancement
/// Grants the player 10% extra resistance to fire damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceFire
{
get => GetProperty(PropertyInt.AugmentationResistanceFire) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceFire); else SetProperty(PropertyInt.AugmentationResistanceFire, value); }
}
///
/// Icy Enhancement
/// Grants the player 10% extra resistance to cold damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceFrost
{
get => GetProperty(PropertyInt.AugmentationResistanceFrost) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceFrost); else SetProperty(PropertyInt.AugmentationResistanceFrost, value); }
}
///
/// Caustic Enhancement
/// Grants the player 10% extra resistance to acid damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceAcid
{
get => GetProperty(PropertyInt.AugmentationResistanceAcid) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceAcid); else SetProperty(PropertyInt.AugmentationResistanceAcid, value); }
}
///
/// Storm's Enhancement
/// Grants the player 10% extra resistance to lightning damage. You may only have 2 resistance augmentations in effect at any time.
///
public int AugmentationResistanceLightning
{
get => GetProperty(PropertyInt.AugmentationResistanceLightning) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceLightning); else SetProperty(PropertyInt.AugmentationResistanceLightning, value); }
}
///
/// The number of resistance augs that have been applied (max 2)
///
public int AugmentationResistanceFamily
{
get => GetProperty(PropertyInt.AugmentationResistanceFamily) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationResistanceFamily); else SetProperty(PropertyInt.AugmentationResistanceFamily, value); }
}
///
/// Frenzy of the Slayer
/// Increases the player's damage rating by 3. This augmentation cannot be repeated.
///
public int AugmentationDamageBonus
{
get => GetProperty(PropertyInt.AugmentationDamageBonus) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationDamageBonus); else SetProperty(PropertyInt.AugmentationDamageBonus, value); }
}
///
/// Ciandra's Fortune
/// The player receives 25% more material from salavaging (max 4x)
///
public int AugmentationBonusSalvage
{
get => GetProperty(PropertyInt.AugmentationBonusSalvage) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationBonusSalvage); else SetProperty(PropertyInt.AugmentationBonusSalvage, value); }
}
///
/// Charmed Smith
/// The player has 5% increased chance to succeed when imbuing items.
/// This augmentation cannot be repeated.
///
public int AugmentationBonusImbueChance
{
get => GetProperty(PropertyInt.AugmentationBonusImbueChance) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationBonusImbueChance); else SetProperty(PropertyInt.AugmentationBonusImbueChance, value); }
}
///
/// Jibril's Essence
/// Using this gem will specialize your skill in Armor Tinkering and raise your skill points accordingly.
/// Once specialized, you will not be able to unspecialize or untrain Armor Tinkering.
/// You must have this skill Trained in order to use this gem.
/// This augmentation cannot be repeated.
///
public int AugmentationSpecializeArmorTinkering
{
get => GetProperty(PropertyInt.AugmentationSpecializeArmorTinkering) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpecializeArmorTinkering); else SetProperty(PropertyInt.AugmentationSpecializeArmorTinkering, value); }
}
///
/// Yoshi's Essence
/// Using this gem will specialize your skill in Item Tinkering and raise your skill points accordingly.
/// Once specialized, you will not be able to unspecialize or untrain Item Tinkering.
/// You must have this skill Trained in order to use this gem.
/// This augmentation cannot be repeated.
///
public int AugmentationSpecializeItemTinkering
{
get => GetProperty(PropertyInt.AugmentationSpecializeItemTinkering) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpecializeItemTinkering); else SetProperty(PropertyInt.AugmentationSpecializeItemTinkering, value); }
}
///
/// Celdiseth's Essence
/// Using this gem will specialize your skill in Magic Item Tinkering and raise your skill points accordingly.
/// Once specialized, you will not be able to unspecialize or untrain Magic Item Tinkering.
/// You must have this skill Trained in order to use this gem.
/// This augmentation cannot be repeated.
///
public int AugmentationSpecializeMagicItemTinkering
{
get => GetProperty(PropertyInt.AugmentationSpecializeMagicItemTinkering) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpecializeMagicItemTinkering); else SetProperty(PropertyInt.AugmentationSpecializeMagicItemTinkering, value); }
}
///
/// Koga's Essence
/// Using this gem will specialize your skill in Weapon Tinkering and raise your skill points accordingly.
/// Once specialized, you will not be able to unspecialize or untrain Weapon Tinkering.
/// You must have this skill Trained in order to use this gem.
/// This augmentation cannot be repeated.
///
public int AugmentationSpecializeWeaponTinkering
{
get => GetProperty(PropertyInt.AugmentationSpecializeWeaponTinkering) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpecializeWeaponTinkering); else SetProperty(PropertyInt.AugmentationSpecializeWeaponTinkering, value); }
}
///
/// Ciandra's Essence
/// Using this gem will specialize your skill in Salvaging and raise your skill points accordingly.
/// Once specialized, you will not be able to unspecialize or untrain Salvaging.
/// You must have this skill Trained in order to use this gem.
/// This augmentation cannot be repeated.
///
public int AugmentationSpecializeSalvaging
{
get => GetProperty(PropertyInt.AugmentationSpecializeSalvaging) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSpecializeSalvaging); else SetProperty(PropertyInt.AugmentationSpecializeSalvaging, value); }
}
///
/// Master of the Steel Circle
/// Your effective melee skill when using any melee weapon is increased by +10.
/// This augmentation cannot be repeated.
///
public int AugmentationSkilledMelee
{
get => GetProperty(PropertyInt.AugmentationSkilledMelee) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSkilledMelee); else SetProperty(PropertyInt.AugmentationSkilledMelee, value); }
}
///
/// Master of the Five Fold Path
/// Your effective magic skill when using any magic weapon is increased by +10.
/// This augmentation cannot be repeated.
///
public int AugmentationSkilledMagic
{
get => GetProperty(PropertyInt.AugmentationSkilledMagic) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSkilledMagic); else SetProperty(PropertyInt.AugmentationSkilledMagic, value); }
}
///
/// Master of the Focused Eye
/// Your effective missile skill when using any missile weapon is increased by +10.
/// This augmentation cannot be repeated.
///
public int AugmentationSkilledMissile
{
get => GetProperty(PropertyInt.AugmentationSkilledMissile) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationSkilledMissile); else SetProperty(PropertyInt.AugmentationSkilledMissile, value); }
}
///
/// Archmage's Endurance
/// +20% spell duration (max 5 stacks)
///
public int AugmentationIncreasedSpellDuration
{
get => GetProperty(PropertyInt.AugmentationIncreasedSpellDuration) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.AugmentationIncreasedSpellDuration); else SetProperty(PropertyInt.AugmentationIncreasedSpellDuration, value); }
}
// ========================================
// ======= Luminance Augmentations ========
// ========================================
///
/// Aura of Aetheric Vision
/// Slightly increase your chance to gain an Aetheria Surge on a successful hit with a weapon or spell (max 5 stacks)
///
public int LumAugSurgeChanceRating
{
get => GetProperty(PropertyInt.LumAugSurgeChanceRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugSurgeChanceRating); else SetProperty(PropertyInt.LumAugSurgeChanceRating, value); }
}
///
/// Aura of the Craftsman
/// Increases the effective skill level of your crafting and tinkering skills by 1 point (max 5 stacks)
///
public int LumAugSkilledCraft
{
get => GetProperty(PropertyInt.LumAugSkilledCraft) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugSkilledCraft); else SetProperty(PropertyInt.LumAugSkilledCraft, value); }
}
///
/// Aura of Glory / Aura of Retribution (Seer)
/// Increases your critical damage rating by 1 point (max 5 stacks glory, max 5 stacks retribution)
///
public int LumAugCritDamageRating
{
get => GetProperty(PropertyInt.LumAugCritDamageRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugCritDamageRating); else SetProperty(PropertyInt.LumAugCritDamageRating, value); }
}
///
/// Aura of Mana Flow
/// Reduces the mana consumption of your items equal to 5 rating points per level (max 5 stacks)
/// This is expressed as a rating, where the mana consumption is multiplied by the following: 100 / (100 + Mana Consumption Reduction Rating)
///
public int LumAugItemManaUsage
{
get => GetProperty(PropertyInt.LumAugItemManaUsage) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugItemManaUsage); else SetProperty(PropertyInt.LumAugItemManaUsage, value); }
}
///
/// Aura of Mana Infusion
/// Increases the mana provided by Mana Stones to your items (max 5 stacks)
/// The mana is increased by a rating of 5 per level.
///
public int LumAugItemManaGain
{
get => GetProperty(PropertyInt.LumAugItemManaGain) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugItemManaGain); else SetProperty(PropertyInt.LumAugItemManaGain, value); }
}
///
/// Aura of Protection / Aura of Invulnerability (Seer)
/// Increases your damage reduction rating by 1 (max 5 stacks protection, max 5 stacks invulnerability)
///
public int LumAugDamageReductionRating
{
get => GetProperty(PropertyInt.LumAugDamageReductionRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugDamageReductionRating); else SetProperty(PropertyInt.LumAugDamageReductionRating, value); }
}
///
/// Aura of Purity
/// Increases the amount that healing affects you by 1 heal rating (max 5 stacks)
///
public int LumAugHealingRating
{
get => GetProperty(PropertyInt.LumAugHealingRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugHealingRating); else SetProperty(PropertyInt.LumAugHealingRating, value); }
}
///
/// Skill
/// Gain an additional skill credit (max 2 stacks)
///
// where to store the stack data for this?
///
/// Aura of Temperance / Aura of Hardening (Seer)
/// Increases your critical damage reduction rating by 1 (max 5 stacks temperance, max 5 stacks hardening)
///
public int LumAugCritReductionRating
{
get => GetProperty(PropertyInt.LumAugCritReductionRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugCritReductionRating); else SetProperty(PropertyInt.LumAugCritReductionRating, value); }
}
///
/// Aura of Valor / Aura of Destruction (Seer)
/// Increases your damage rating by 1 (max 5 stacks valor, max 5 stacks destruction)
///
public int LumAugDamageRating
{
get => GetProperty(PropertyInt.LumAugDamageRating) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugDamageRating); else SetProperty(PropertyInt.LumAugDamageRating, value); }
}
///
/// Aura of the World
/// Increases the effective skill level of all your skills by 1 point (max 10 stacks)
///
public int LumAugAllSkills
{
get => GetProperty(PropertyInt.LumAugAllSkills) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugAllSkills); else SetProperty(PropertyInt.LumAugAllSkills, value); }
}
// ============= Seer Auras ===============
///
/// Aura of Specialization
/// Increases your specialized skills by 2 (max 5 stacks)
///
public int LumAugSkilledSpec
{
get => GetProperty(PropertyInt.LumAugSkilledSpec) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugSkilledSpec); else SetProperty(PropertyInt.LumAugSkilledSpec, value); }
}
// ============== Masteries ===============
public int MeleeMastery
{
get => GetProperty(PropertyInt.MeleeMastery) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.MeleeMastery); else SetProperty(PropertyInt.MeleeMastery, value); }
}
public int RangedMastery
{
get => GetProperty(PropertyInt.RangedMastery) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.RangedMastery); else SetProperty(PropertyInt.RangedMastery, value); }
}
// ============ Enlightenment =============
public int Enlightenment
{
get => GetProperty(PropertyInt.Enlightenment) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.Enlightenment); else SetProperty(PropertyInt.Enlightenment, value); }
}
public int LumAugVitality
{
get => GetProperty(PropertyInt.LumAugVitality) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.LumAugVitality); else SetProperty(PropertyInt.LumAugVitality, value); }
}
// ========================================
// =============== Rares ==================
// ========================================
public double LastRareUsedTimestamp
{
get => GetProperty(PropertyFloat.LastRareUsedTimestamp) ?? 0;
set { if (value == 0) RemoveProperty(PropertyFloat.LastRareUsedTimestamp); else SetProperty(PropertyFloat.LastRareUsedTimestamp, value); }
}
// ========================================
// =============== Barber =================
// ========================================
public bool BarberActive
{
get => GetProperty(PropertyBool.BarberActive) ?? false;
set { if (!value) RemoveProperty(PropertyBool.BarberActive); else SetProperty(PropertyBool.BarberActive, value); }
}
public void UpdateProperty(WorldObject obj, PropertyInt prop, int? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdatePropertyInt(obj, prop, value ?? 0);
SendNetwork(msg, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyBool prop, bool? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdatePropertyBool(obj, prop, value ?? false);
SendNetwork(msg, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyFloat prop, double? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdatePropertyFloat(obj, prop, value ?? 0.0);
SendNetwork(msg, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyDataId prop, uint? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdatePropertyDataID(obj, prop, value ?? 0);
SendNetwork(msg, broadcast);
}
///
/// Updates a property on the server, and broadcasts to appropriate players
///
/// If true, also broadcasts to all players who know about this player
public void UpdateProperty(PropertyInstanceId prop, uint? value, bool broadcast = false)
{
UpdateProperty(this, prop, value, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyInstanceId prop, uint? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdateInstanceID(obj, prop, new ObjectGuid(value ?? 0));
SendNetwork(msg, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyString prop, string value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value);
else
obj.RemoveProperty(prop);
// the client seems to cache these values somewhere,
// and the object will not update until relogging or CO
var msg = new GameMessagePublicUpdatePropertyString(obj, prop, value);
SendNetwork(msg, broadcast);
}
public void UpdateProperty(WorldObject obj, PropertyInt64 prop, long? value, bool broadcast = false)
{
if (value != null)
obj.SetProperty(prop, value.Value);
else
obj.RemoveProperty(prop);
var msg = new GameMessagePublicUpdatePropertyInt64(obj, prop, value ?? 0);
SendNetwork(msg, broadcast);
}
public void SendNetwork(GameMessage msg, bool broadcast)
{
if (broadcast)
EnqueueBroadcast(msg);
else
Session.Network.EnqueueSend(msg);
}
// ========================================
// =============== Gags ===================
// ========================================
public double AllegianceGagDuration
{
get => GetProperty(PropertyFloat.AllegianceGagDuration) ?? 0;
set { if (value == 0) RemoveProperty(PropertyFloat.AllegianceGagDuration); else SetProperty(PropertyFloat.AllegianceGagDuration, value); }
}
public double AllegianceGagTimestamp
{
get => GetProperty(PropertyFloat.AllegianceGagTimestamp) ?? 0;
set { if (value == 0) RemoveProperty(PropertyFloat.AllegianceGagTimestamp); else SetProperty(PropertyFloat.AllegianceGagTimestamp, value); }
}
public double GagDuration
{
get => GetProperty(PropertyFloat.GagDuration) ?? 0;
set { if (value == 0) RemoveProperty(PropertyFloat.GagDuration); else SetProperty(PropertyFloat.GagDuration, value); }
}
public double GagTimestamp
{
get => GetProperty(PropertyFloat.GagTimestamp) ?? 0;
set { if (value == 0) RemoveProperty(PropertyFloat.GagTimestamp); else SetProperty(PropertyFloat.GagTimestamp, value); }
}
public bool IsAllegianceGagged
{
get => GetProperty(PropertyBool.IsAllegianceGagged) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsAllegianceGagged); else SetProperty(PropertyBool.IsAllegianceGagged, value); }
}
public bool IsGagged
{
get => GetProperty(PropertyBool.IsGagged) ?? false;
set { if (!value) RemoveProperty(PropertyBool.IsGagged); else SetProperty(PropertyBool.IsGagged, value); }
}
public bool RecallsDisabled
{
get => GetProperty(PropertyBool.RecallsDisabled) ?? false;
set { if (!value) RemoveProperty(PropertyBool.RecallsDisabled); else SetProperty(PropertyBool.RecallsDisabled, value); }
}
public AetheriaBitfield AetheriaFlags
{
get => (AetheriaBitfield)(GetProperty(PropertyInt.AetheriaBitfield) ?? 0);
set { if (value == 0) RemoveProperty(PropertyInt.AetheriaBitfield); else SetProperty(PropertyInt.AetheriaBitfield, (int)value); }
}
public SquelchMask SquelchGlobal
{
get => (SquelchMask)(GetProperty(PropertyInt.SquelchGlobal) ?? 0);
set { if (value == 0) RemoveProperty(PropertyInt.SquelchGlobal); else SetProperty(PropertyInt.SquelchGlobal, (int)value); }
}
public uint? RequestedAppraisalTarget
{
get => GetProperty(PropertyInstanceId.RequestedAppraisalTarget);
set { if (!value.HasValue) RemoveProperty(PropertyInstanceId.RequestedAppraisalTarget); else SetProperty(PropertyInstanceId.RequestedAppraisalTarget, value.Value); }
}
public double? AppraisalRequestedTimestamp
{
get => GetProperty(PropertyFloat.AppraisalRequestedTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyFloat.AppraisalRequestedTimestamp); else SetProperty(PropertyFloat.AppraisalRequestedTimestamp, value.Value); }
}
///
/// ACE is currently using this for the last successful appraised object guid
///
public uint? CurrentAppraisalTarget
{
get => GetProperty(PropertyInstanceId.CurrentAppraisalTarget);
set { if (!value.HasValue) RemoveProperty(PropertyInstanceId.CurrentAppraisalTarget); else SetProperty(PropertyInstanceId.CurrentAppraisalTarget, value.Value); }
}
public double? LastPortalTeleportTimestamp
{
get => GetProperty(PropertyFloat.LastPortalTeleportTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyFloat.LastPortalTeleportTimestamp); else SetProperty(PropertyFloat.LastPortalTeleportTimestamp, value.Value); }
}
public bool OlthoiPk
{
get => GetProperty(PropertyBool.OlthoiPk) ?? false;
set { if (!value) RemoveProperty(PropertyBool.OlthoiPk); else SetProperty(PropertyBool.OlthoiPk, value); }
}
public bool NoOlthoiTalk
{
get => GetProperty(PropertyBool.NoOlthoiTalk) ?? false;
set { if (!value) RemoveProperty(PropertyBool.NoOlthoiTalk); else SetProperty(PropertyBool.NoOlthoiTalk, value); }
}
// not sure of the exact use for these fields in retail
// from the name, i would be inclined to think the last time an OlthoiPlayer found / looted some slag
// it could also mean the last time a Player corpse generated some slag
// going to lean towards the latter, and use it to indicate the last time a Player died to an OlthoiPlayer
public int? OlthoiLootTimestamp
{
get => GetProperty(PropertyInt.OlthoiLootTimestamp);
set { if (!value.HasValue) RemoveProperty(PropertyInt.OlthoiLootTimestamp); else SetProperty(PropertyInt.OlthoiLootTimestamp, value.Value); }
}
public int? OlthoiLootStep
{
get => GetProperty(PropertyInt.OlthoiLootStep);
set { if (!value.HasValue) RemoveProperty(PropertyInt.OlthoiLootStep); else SetProperty(PropertyInt.OlthoiLootStep, value.Value); }
}
///
/// Returns player's augmentation resistance for damage type
///
public int GetAugmentationResistance(DamageType damageType)
{
switch (damageType)
{
case DamageType.Slash:
return AugmentationResistanceSlash;
case DamageType.Pierce:
return AugmentationResistancePierce;
case DamageType.Bludgeon:
return AugmentationResistanceBlunt;
case DamageType.Fire:
return AugmentationResistanceFire;
case DamageType.Cold:
return AugmentationResistanceFrost;
case DamageType.Acid:
return AugmentationResistanceAcid;
case DamageType.Electric:
return AugmentationResistanceLightning;
}
return 0;
}
public int ImbueAttempts
{
get => GetProperty(PropertyInt.ImbueAttempts) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.ImbueAttempts); else SetProperty(PropertyInt.ImbueAttempts, value); }
}
public int ImbueSuccesses
{
get => GetProperty(PropertyInt.ImbueSuccesses) ?? 0;
set { if (value == 0) RemoveProperty(PropertyInt.ImbueSuccesses); else SetProperty(PropertyInt.ImbueSuccesses, value); }
}
}
}