Inventory logger
This commit is contained in:
parent
29fba4b7cb
commit
de2057789a
41 changed files with 12834 additions and 171 deletions
187
Shared/Constants/BoolValueKey.cs
Normal file
187
Shared/Constants/BoolValueKey.cs
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
// https://github.com/ACEmulator/ACE/blob/master/Source/ACE.Entity/Enum/Properties/PropertyBool.cs
|
||||
public enum BoolValueKey
|
||||
{
|
||||
// properties marked as ServerOnly are properties we never saw in PCAPs, from here:
|
||||
// http://ac.yotesfan.com/ace_object/not_used_enums.php
|
||||
// source: @OptimShi
|
||||
// description attributes are used by the weenie editor for a cleaner display name
|
||||
|
||||
Undef = 0,
|
||||
[Ephemeral][ServerOnly]
|
||||
Stuck = 1,
|
||||
[Ephemeral]
|
||||
Open = 2,
|
||||
Locked = 3,
|
||||
RotProof = 4,
|
||||
AllegianceUpdateRequest = 5,
|
||||
AiUsesMana = 6,
|
||||
AiUseHumanMagicAnimations = 7,
|
||||
AllowGive = 8,
|
||||
CurrentlyAttacking = 9,
|
||||
AttackerAi = 10,
|
||||
[ServerOnly]
|
||||
IgnoreCollisions = 11,
|
||||
[ServerOnly]
|
||||
ReportCollisions = 12,
|
||||
[ServerOnly]
|
||||
Ethereal = 13,
|
||||
[ServerOnly]
|
||||
GravityStatus = 14,
|
||||
[ServerOnly]
|
||||
LightsStatus = 15,
|
||||
[ServerOnly]
|
||||
ScriptedCollision = 16,
|
||||
[ServerOnly]
|
||||
Inelastic = 17,
|
||||
[ServerOnly][Ephemeral]
|
||||
Visibility = 18,
|
||||
[ServerOnly]
|
||||
Attackable = 19,
|
||||
SafeSpellComponents = 20,
|
||||
AdvocateState = 21,
|
||||
Inscribable = 22,
|
||||
DestroyOnSell = 23,
|
||||
UiHidden = 24,
|
||||
IgnoreHouseBarriers = 25,
|
||||
HiddenAdmin = 26,
|
||||
PkWounder = 27,
|
||||
PkKiller = 28,
|
||||
NoCorpse = 29,
|
||||
UnderLifestoneProtection = 30,
|
||||
ItemManaUpdatePending = 31,
|
||||
[Ephemeral]
|
||||
GeneratorStatus = 32,
|
||||
[Ephemeral]
|
||||
ResetMessagePending = 33,
|
||||
DefaultOpen = 34,
|
||||
DefaultLocked = 35,
|
||||
DefaultOn = 36,
|
||||
OpenForBusiness = 37,
|
||||
IsFrozen = 38,
|
||||
DealMagicalItems = 39,
|
||||
LogoffImDead = 40,
|
||||
ReportCollisionsAsEnvironment = 41,
|
||||
AllowEdgeSlide = 42,
|
||||
AdvocateQuest = 43,
|
||||
[Ephemeral][SendOnLogin]
|
||||
IsAdmin = 44,
|
||||
[Ephemeral][SendOnLogin]
|
||||
IsArch = 45,
|
||||
[Ephemeral][SendOnLogin]
|
||||
IsSentinel = 46,
|
||||
[SendOnLogin]
|
||||
IsAdvocate = 47,
|
||||
CurrentlyPoweringUp = 48,
|
||||
[Ephemeral]
|
||||
GeneratorEnteredWorld = 49,
|
||||
NeverFailCasting = 50,
|
||||
VendorService = 51,
|
||||
AiImmobile = 52,
|
||||
DamagedByCollisions = 53,
|
||||
IsDynamic = 54,
|
||||
IsHot = 55,
|
||||
IsAffecting = 56,
|
||||
AffectsAis = 57,
|
||||
SpellQueueActive = 58,
|
||||
[Ephemeral]
|
||||
GeneratorDisabled = 59,
|
||||
IsAcceptingTells = 60,
|
||||
LoggingChannel = 61,
|
||||
OpensAnyLock = 62,
|
||||
UnlimitedUse = 63,
|
||||
GeneratedTreasureItem = 64,
|
||||
IgnoreMagicResist = 65,
|
||||
IgnoreMagicArmor = 66,
|
||||
AiAllowTrade = 67,
|
||||
[SendOnLogin]
|
||||
SpellComponentsRequired = 68,
|
||||
IsSellable = 69,
|
||||
IgnoreShieldsBySkill = 70,
|
||||
NoDraw = 71,
|
||||
ActivationUntargeted = 72,
|
||||
HouseHasGottenPriorityBootPos = 73,
|
||||
[Ephemeral]
|
||||
GeneratorAutomaticDestruction = 74,
|
||||
HouseHooksVisible = 75,
|
||||
HouseRequiresMonarch = 76,
|
||||
HouseHooksEnabled = 77,
|
||||
HouseNotifiedHudOfHookCount = 78,
|
||||
AiAcceptEverything = 79,
|
||||
IgnorePortalRestrictions = 80,
|
||||
RequiresBackpackSlot = 81,
|
||||
DontTurnOrMoveWhenGiving = 82,
|
||||
[ServerOnly]
|
||||
NpcLooksLikeObject = 83,
|
||||
IgnoreCloIcons = 84,
|
||||
AppraisalHasAllowedWielder = 85,
|
||||
ChestRegenOnClose = 86,
|
||||
LogoffInMinigame = 87,
|
||||
PortalShowDestination = 88,
|
||||
PortalIgnoresPkAttackTimer = 89,
|
||||
NpcInteractsSilently = 90,
|
||||
Retained = 91,
|
||||
IgnoreAuthor = 92,
|
||||
Limbo = 93,
|
||||
AppraisalHasAllowedActivator = 94,
|
||||
ExistedBeforeAllegianceXpChanges = 95,
|
||||
IsDeaf = 96,
|
||||
[Ephemeral][SendOnLogin]
|
||||
IsPsr = 97,
|
||||
Invincible = 98,
|
||||
Ivoryable = 99,
|
||||
Dyable = 100,
|
||||
CanGenerateRare = 101,
|
||||
CorpseGeneratedRare = 102,
|
||||
NonProjectileMagicImmune = 103,
|
||||
[SendOnLogin]
|
||||
ActdReceivedItems = 104,
|
||||
Unknown105 = 105,
|
||||
[Ephemeral]
|
||||
FirstEnterWorldDone = 106,
|
||||
RecallsDisabled = 107,
|
||||
RareUsesTimer = 108,
|
||||
ActdPreorderReceivedItems = 109,
|
||||
Afk = 110,
|
||||
IsGagged = 111,
|
||||
ProcSpellSelfTargeted = 112,
|
||||
IsAllegianceGagged = 113,
|
||||
EquipmentSetTriggerPiece = 114,
|
||||
Uninscribe = 115,
|
||||
WieldOnUse = 116,
|
||||
ChestClearedWhenClosed = 117,
|
||||
NeverAttack = 118,
|
||||
SuppressGenerateEffect = 119,
|
||||
TreasureCorpse = 120,
|
||||
EquipmentSetAddLevel = 121,
|
||||
BarberActive = 122,
|
||||
TopLayerPriority = 123,
|
||||
NoHeldItemShown = 124,
|
||||
LoginAtLifestone = 125,
|
||||
OlthoiPk = 126,
|
||||
[SendOnLogin]
|
||||
Account15Days = 127,
|
||||
HadNoVitae = 128,
|
||||
NoOlthoiTalk = 129,
|
||||
AutowieldLeft = 130,
|
||||
|
||||
|
||||
// ACE Specific
|
||||
/* custom */
|
||||
[ServerOnly]
|
||||
LinkedPortalOneSummon = 9001,
|
||||
[ServerOnly]
|
||||
LinkedPortalTwoSummon = 9002,
|
||||
[ServerOnly]
|
||||
HouseEvicted = 9003,
|
||||
[ServerOnly]
|
||||
UntrainedSkills = 9004,
|
||||
|
||||
|
||||
// Decal Specific
|
||||
Lockable_Decal = 201326592,
|
||||
Inscribable_Decal = 201326593,
|
||||
}
|
||||
}
|
||||
129
Shared/Constants/CoverageMask.cs
Normal file
129
Shared/Constants/CoverageMask.cs
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// This is the mapping for LongValueKey.Coverage.
|
||||
/// It represents what body parts an armor piece covers when used in defensive/armor calculations.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum CoverageMask
|
||||
{
|
||||
None = 0,
|
||||
|
||||
Unknown = 0x00000001, // Original pants abdomen?
|
||||
|
||||
UnderwearUpperLegs = 0x00000002, // I think... 0x13 = Abdomen/UpperLegs
|
||||
UnderwearLowerLegs = 0x00000004, // I think... 0x16 = Abdomen/UpperLegs/LowerLegs
|
||||
UnderwearChest = 0x00000008,
|
||||
UnderwearAbdomen = 0x00000010, // Original shirt abdomen?
|
||||
UnderwearUpperArms = 0x00000020,
|
||||
UnderwearLowerArms = 0x00000040,
|
||||
// = 0x00000080,
|
||||
|
||||
OuterwearUpperLegs = 0x00000100,
|
||||
OuterwearLowerLegs = 0x00000200,
|
||||
OuterwearChest = 0x00000400,
|
||||
OuterwearAbdomen = 0x00000800,
|
||||
OuterwearUpperArms = 0x00001000,
|
||||
OuterwearLowerArms = 0x00002000,
|
||||
|
||||
Head = 0x00004000,
|
||||
Hands = 0x00008000,
|
||||
Feet = 0x00010000,
|
||||
|
||||
Cloak = 0x00020000,
|
||||
}
|
||||
|
||||
public enum CoverageMaskHelper : uint
|
||||
{
|
||||
// for server comparison only
|
||||
Underwear = CoverageMask.UnderwearUpperLegs | CoverageMask.UnderwearLowerLegs | CoverageMask.UnderwearChest | CoverageMask.UnderwearAbdomen | CoverageMask.UnderwearUpperArms | CoverageMask.UnderwearLowerArms,
|
||||
Outerwear = CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs | CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms | CoverageMask.Head | CoverageMask.Hands | CoverageMask.Feet,
|
||||
|
||||
UnderwearLegs = CoverageMask.UnderwearUpperLegs | CoverageMask.UnderwearLowerLegs,
|
||||
UnderwearArms = CoverageMask.UnderwearUpperArms | CoverageMask.UnderwearLowerArms,
|
||||
|
||||
OuterwearLegs = CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs,
|
||||
OuterwearArms = CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms,
|
||||
|
||||
// exclude abdomen for searching
|
||||
UnderwearShirt = CoverageMask.UnderwearChest | CoverageMask.UnderwearUpperArms | CoverageMask.UnderwearLowerArms,
|
||||
UnderwearPants = CoverageMask.UnderwearUpperLegs | CoverageMask.UnderwearLowerLegs
|
||||
}
|
||||
|
||||
public static class CoverageMaskExtensions
|
||||
{
|
||||
public static int GetTotalBitsSet(this CoverageMask value)
|
||||
{
|
||||
int slotFlags = (int)value;
|
||||
int bitsSet = 0;
|
||||
|
||||
while (slotFlags != 0)
|
||||
{
|
||||
if ((slotFlags & 1) == 1)
|
||||
bitsSet++;
|
||||
slotFlags >>= 1;
|
||||
}
|
||||
|
||||
return bitsSet;
|
||||
}
|
||||
|
||||
public static bool IsBodyArmor(this CoverageMask value) { return ((int)value & 0x0001FF00) != 0; }
|
||||
public static bool IsRobe(this CoverageMask value) { return ((int)value == 0x00013F00); }
|
||||
public static bool IsUnderwear(this CoverageMask value) { return ((int)value & 0x0000007F) != 0; }
|
||||
public static bool IsShirt(this CoverageMask value) { return ((int)value & 0x00000078) != 0; }
|
||||
public static bool IsPants(this CoverageMask value) { return ((int)value & 0x00000017) != 0; }
|
||||
|
||||
public static List<CoverageMask> ReductionOptions(this CoverageMask value)
|
||||
{
|
||||
List<CoverageMask> options = new List<CoverageMask>();
|
||||
|
||||
if (value.GetTotalBitsSet() <= 1 || !value.IsBodyArmor() || value.IsRobe())
|
||||
options.Add(value);
|
||||
else
|
||||
{
|
||||
if (value == (CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms))
|
||||
{
|
||||
options.Add(CoverageMask.OuterwearUpperArms);
|
||||
options.Add(CoverageMask.OuterwearLowerArms);
|
||||
}
|
||||
else if (value == (CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs))
|
||||
{
|
||||
options.Add(CoverageMask.OuterwearUpperLegs);
|
||||
options.Add(CoverageMask.OuterwearLowerLegs);
|
||||
}
|
||||
else if (value == (CoverageMask.OuterwearLowerLegs | CoverageMask.Feet))
|
||||
options.Add(CoverageMask.Feet);
|
||||
else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen))
|
||||
options.Add(CoverageMask.OuterwearChest);
|
||||
else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperArms))
|
||||
options.Add(CoverageMask.OuterwearChest);
|
||||
else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms))
|
||||
options.Add(CoverageMask.OuterwearChest);
|
||||
else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearUpperArms))
|
||||
options.Add(CoverageMask.OuterwearChest);
|
||||
else if (value == (CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs))
|
||||
{
|
||||
options.Add(CoverageMask.OuterwearAbdomen);
|
||||
options.Add(CoverageMask.OuterwearUpperLegs);
|
||||
options.Add(CoverageMask.OuterwearLowerLegs);
|
||||
}
|
||||
else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms))
|
||||
options.Add(CoverageMask.OuterwearChest);
|
||||
else if (value == (CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperLegs))
|
||||
{
|
||||
// This is a emu piece that follows the pre-2010 retail guidelines
|
||||
// https://asheron.fandom.com/wiki/Announcements_-_2010/04_-_Shedding_Skin
|
||||
// For now, we assume only abdomen reduction
|
||||
options.Add(CoverageMask.OuterwearAbdomen);
|
||||
}
|
||||
else
|
||||
throw new Exception("Unable to determine reduction paths for CoverageMask of " + value);
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
}
|
||||
}
|
||||
436
Shared/Constants/Dictionaries.cs
Normal file
436
Shared/Constants/Dictionaries.cs
Normal file
|
|
@ -0,0 +1,436 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
public static class Dictionaries
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a dictionary of skill ids vs names
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static readonly Dictionary<int, string> SkillInfo = new Dictionary<int, string>
|
||||
{
|
||||
// This list was taken from the Alinco source
|
||||
{ 0x1, "Axe" },
|
||||
{ 0x2, "Bow" },
|
||||
{ 0x3, "Crossbow" },
|
||||
{ 0x4, "Dagger" },
|
||||
{ 0x5, "Mace" },
|
||||
{ 0x6, "Melee Defense" },
|
||||
{ 0x7, "Missile Defense" },
|
||||
{ 0x8, "Sling" },
|
||||
{ 0x9, "Spear" },
|
||||
{ 0xA, "Staff" },
|
||||
{ 0xB, "Sword" },
|
||||
{ 0xC, "Thrown Weapons" },
|
||||
{ 0xD, "Unarmed Combat" },
|
||||
{ 0xE, "Arcane Lore" },
|
||||
{ 0xF, "Magic Defense" },
|
||||
{ 0x10, "Mana Conversion" },
|
||||
{ 0x12, "Item Tinkering" },
|
||||
{ 0x13, "Assess Person" },
|
||||
{ 0x14, "Deception" },
|
||||
{ 0x15, "Healing" },
|
||||
{ 0x16, "Jump" },
|
||||
{ 0x17, "Lockpick" },
|
||||
{ 0x18, "Run" },
|
||||
{ 0x1B, "Assess Creature" },
|
||||
{ 0x1C, "Weapon Tinkering" },
|
||||
{ 0x1D, "Armor Tinkering" },
|
||||
{ 0x1E, "Magic Item Tinkering" },
|
||||
{ 0x1F, "Creature Enchantment" },
|
||||
{ 0x20, "Item Enchantment" },
|
||||
{ 0x21, "Life Magic" },
|
||||
{ 0x22, "War Magic" },
|
||||
{ 0x23, "Leadership" },
|
||||
{ 0x24, "Loyalty" },
|
||||
{ 0x25, "Fletching" },
|
||||
{ 0x26, "Alchemy" },
|
||||
{ 0x27, "Cooking" },
|
||||
{ 0x28, "Salvaging" },
|
||||
{ 0x29, "Two Handed Combat" },
|
||||
{ 0x2A, "Gearcraft"},
|
||||
{ 0x2B, "Void" },
|
||||
{ 0x2C, "Heavy Weapons" },
|
||||
{ 0x2D, "Light Weapons" },
|
||||
{ 0x2E, "Finesse Weapons" },
|
||||
{ 0x2F, "Missile Weapons" },
|
||||
{ 0x30, "Shield" },
|
||||
{ 0x31, "Dual Wield" },
|
||||
{ 0x32, "Recklessness" },
|
||||
{ 0x33, "Sneak Attack" },
|
||||
{ 0x34, "Dirty Fighting" },
|
||||
{ 0x35, "Challenge" },
|
||||
{ 0x36, "Summoning" },
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a dictionary of mastery ids vs names
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Dictionary<int, string> MasteryInfo = new Dictionary<int, string>
|
||||
{
|
||||
{ 1, "Unarmed Weapon" },
|
||||
{ 2, "Sword" },
|
||||
{ 3, "Axe" },
|
||||
{ 4, "Mace" },
|
||||
{ 5, "Spear" },
|
||||
{ 6, "Dagger" },
|
||||
{ 7, "Staff" },
|
||||
{ 8, "Bow" },
|
||||
{ 9, "Crossbow" },
|
||||
{ 10, "Thrown" },
|
||||
{ 11, "Two Handed Combat" },
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a dictionary of attribute set ids vs names
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Dictionary<int, string> AttributeSetInfo = new Dictionary<int, string>
|
||||
{
|
||||
// This list was taken from Virindi Tank Loot Editor
|
||||
// 01
|
||||
{ 02, "Test"},
|
||||
// 03
|
||||
{ 04, "Carraida's Benediction"},
|
||||
{ 05, "Noble Relic Set" },
|
||||
{ 06, "Ancient Relic Set" },
|
||||
{ 07, "Relic Alduressa Set" },
|
||||
{ 08, "Shou-jen Set" },
|
||||
{ 09, "Empyrean Rings Set" },
|
||||
{ 10, "Arm, Mind, Heart Set" },
|
||||
{ 11, "Coat of the Perfect Light Set" },
|
||||
{ 12, "Leggings of Perfect Light Set" },
|
||||
{ 13, "Soldier's Set" },
|
||||
{ 14, "Adept's Set" },
|
||||
{ 15, "Archer's Set" },
|
||||
{ 16, "Defender's Set" },
|
||||
{ 17, "Tinker's Set" },
|
||||
{ 18, "Crafter's Set" },
|
||||
{ 19, "Hearty Set" },
|
||||
{ 20, "Dexterous Set" },
|
||||
{ 21, "Wise Set" },
|
||||
{ 22, "Swift Set" },
|
||||
{ 23, "Hardenend Set" },
|
||||
{ 24, "Reinforced Set" },
|
||||
{ 25, "Interlocking Set" },
|
||||
{ 26, "Flame Proof Set" },
|
||||
{ 27, "Acid Proof Set" },
|
||||
{ 28, "Cold Proof Set" },
|
||||
{ 29, "Lightning Proof Set" },
|
||||
{ 30, "Dedication Set" },
|
||||
{ 31, "Gladiatorial Clothing Set" },
|
||||
{ 32, "Ceremonial Clothing" },
|
||||
{ 33, "Protective Clothing" },
|
||||
{ 34, "Noobie Armor" },
|
||||
{ 35, "Sigil of Defense" },
|
||||
{ 36, "Sigil of Destruction" },
|
||||
{ 37, "Sigil of Fury" },
|
||||
{ 38, "Sigil of Growth" },
|
||||
{ 39, "Sigil of Vigor" },
|
||||
{ 40, "Heroic Protector Set" },
|
||||
{ 41, "Heroic Destroyer Set" },
|
||||
{ 42, "Olthoi Armor D Red" },
|
||||
{ 43, "Olthoi Armor C Rat" },
|
||||
{ 44, "Olthoi Armor C Red" },
|
||||
{ 45, "Olthoi Armor D Rat" },
|
||||
{ 46, "Upgraded Relic Alduressa Set" },
|
||||
{ 47, "Upgraded Ancient Relic Set" },
|
||||
{ 48, "Upgraded Noble Relic Set" },
|
||||
{ 49, "Weave of Alchemy" },
|
||||
{ 50, "Weave of Arcane Lore" },
|
||||
{ 51, "Weave of Armor Tinkering" },
|
||||
{ 52, "Weave of Assess Person" },
|
||||
{ 53, "Weave of Light Weapons" },
|
||||
{ 54, "Weave of Missile Weapons" },
|
||||
{ 55, "Weave of Cooking" },
|
||||
{ 56, "Weave of Creature Enchantment" },
|
||||
{ 57, "Weave of Missile Weapons" },
|
||||
{ 58, "Weave of Finesse" },
|
||||
{ 59, "Weave of Deception" },
|
||||
{ 60, "Weave of Fletching" },
|
||||
{ 61, "Weave of Healing" },
|
||||
{ 62, "Weave of Item Enchantment" },
|
||||
{ 63, "Weave of Item Tinkering" },
|
||||
{ 64, "Weave of Leadership" },
|
||||
{ 65, "Weave of Life Magic" },
|
||||
{ 66, "Weave of Loyalty" },
|
||||
{ 67, "Weave of Light Weapons" },
|
||||
{ 68, "Weave of Magic Defense" },
|
||||
{ 69, "Weave of Magic Item Tinkering" },
|
||||
{ 70, "Weave of Mana Conversion" },
|
||||
{ 71, "Weave of Melee Defense" },
|
||||
{ 72, "Weave of Missile Defense" },
|
||||
{ 73, "Weave of Salvaging" },
|
||||
{ 74, "Weave of Light Weapons" },
|
||||
{ 75, "Weave of Light Weapons" },
|
||||
{ 76, "Weave of Heavy Weapons" },
|
||||
{ 77, "Weave of Missile Weapons" },
|
||||
{ 78, "Weave of Two Handed Combat" },
|
||||
{ 79, "Weave of Light Weapons" },
|
||||
{ 80, "Weave of Void Magic" },
|
||||
{ 81, "Weave of War Magic" },
|
||||
{ 82, "Weave of Weapon Tinkering" },
|
||||
{ 83, "Weave of Assess Creature " },
|
||||
{ 84, "Weave of Dirty Fighting" },
|
||||
{ 85, "Weave of Dual Wield" },
|
||||
{ 86, "Weave of Recklessness" },
|
||||
{ 87, "Weave of Shield" },
|
||||
{ 88, "Weave of Sneak Attack" },
|
||||
{ 89, "Ninja_New" },
|
||||
{ 90, "Weave of Summoning" },
|
||||
|
||||
{ 91, "Shrouded Soul" },
|
||||
{ 92, "Darkened Mind" },
|
||||
{ 93, "Clouded Spirit" },
|
||||
{ 94, "Minor Stinging Shrouded Soul" },
|
||||
{ 95, "Minor Sparking Shrouded Soul" },
|
||||
{ 96, "Minor Smoldering Shrouded Soul" },
|
||||
{ 97, "Minor Shivering Shrouded Soul" },
|
||||
{ 98, "Minor Stinging Darkened Mind" },
|
||||
{ 99, "Minor Sparking Darkened Mind" },
|
||||
|
||||
{ 100, "Minor Smoldering Darkened Mind" },
|
||||
{ 101, "Minor Shivering Darkened Mind" },
|
||||
{ 102, "Minor Stinging Clouded Spirit" },
|
||||
{ 103, "Minor Sparking Clouded Spirit" },
|
||||
{ 104, "Minor Smoldering Clouded Spirit" },
|
||||
{ 105, "Minor Shivering Clouded Spirit" },
|
||||
{ 106, "Major Stinging Shrouded Soul" },
|
||||
{ 107, "Major Sparking Shrouded Soul" },
|
||||
{ 108, "Major Smoldering Shrouded Soul" },
|
||||
{ 109, "Major Shivering Shrouded Soul" },
|
||||
|
||||
{ 110, "Major Stinging Darkened Mind" },
|
||||
{ 111, "Major Sparking Darkened Mind" },
|
||||
{ 112, "Major Smoldering Darkened Mind" },
|
||||
{ 113, "Major Shivering Darkened Mind" },
|
||||
{ 114, "Major Stinging Clouded Spirit" },
|
||||
{ 115, "Major Sparking Clouded Spirit" },
|
||||
{ 116, "Major Smoldering Clouded Spirit" },
|
||||
{ 117, "Major Shivering Clouded Spirit" },
|
||||
{ 118, "Blackfire Stinging Shrouded Soul" },
|
||||
{ 119, "Blackfire Sparking Shrouded Soul" },
|
||||
|
||||
{ 120, "Blackfire Smoldering Shrouded Soul" },
|
||||
{ 121, "Blackfire Shivering Shrouded Soul" },
|
||||
{ 122, "Blackfire Stinging Darkened Mind" },
|
||||
{ 123, "Blackfire Sparking Darkened Mind" },
|
||||
{ 124, "Blackfire Smoldering Darkened Mind" },
|
||||
{ 125, "Blackfire Shivering Darkened Mind" },
|
||||
{ 126, "Blackfire Stinging Clouded Spirit" },
|
||||
{ 127, "Blackfire Sparking Clouded Spirit" },
|
||||
{ 128, "Blackfire Smoldering Clouded Spirit" },
|
||||
{ 129, "Blackfire Shivering Clouded Spirit" },
|
||||
|
||||
{ 130, "Shimmering Shadows" },
|
||||
|
||||
{ 131, "Brown Society Locket" },
|
||||
{ 132, "Yellow Society Locket" },
|
||||
{ 133, "Red Society Band" },
|
||||
{ 134, "Green Society Band" },
|
||||
{ 135, "Purple Society Band" },
|
||||
{ 136, "Blue Society Band" },
|
||||
|
||||
{ 137, "Gauntlet Garb" },
|
||||
|
||||
{ 138, "UNKNOWN_138" }, // Possibly Paragon Missile Weapons
|
||||
{ 139, "UNKNOWN_139" }, // Possibly Paragon Casters
|
||||
{ 140, "UNKNOWN_140" }, // Possibly Paragon Melee Weapons
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a dictionary of material ids vs names
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Dictionary<int, string> MaterialInfo = new Dictionary<int, string>
|
||||
{
|
||||
{ 1, "Ceramic" },
|
||||
{ 2, "Porcelain" },
|
||||
// 3
|
||||
{ 4, "Linen" },
|
||||
{ 5, "Satin" },
|
||||
{ 6, "Silk" },
|
||||
{ 7, "Velvet" },
|
||||
{ 8, "Wool" },
|
||||
// 9
|
||||
{ 10, "Agate" },
|
||||
{ 11, "Amber" },
|
||||
{ 12, "Amethyst" },
|
||||
{ 13, "Aquamarine" },
|
||||
{ 14, "Azurite" },
|
||||
{ 15, "Black Garnet" },
|
||||
{ 16, "Black Opal" },
|
||||
{ 17, "Bloodstone" },
|
||||
{ 18, "Carnelian" },
|
||||
{ 19, "Citrine" },
|
||||
{ 20, "Diamond" },
|
||||
{ 21, "Emerald" },
|
||||
{ 22, "Fire Opal" },
|
||||
{ 23, "Green Garnet" },
|
||||
{ 24, "Green Jade" },
|
||||
{ 25, "Hematite" },
|
||||
{ 26, "Imperial Topaz" },
|
||||
{ 27, "Jet" },
|
||||
{ 28, "Lapis Lazuli" },
|
||||
{ 29, "Lavender Jade" },
|
||||
{ 30, "Malachite" },
|
||||
{ 31, "Moonstone" },
|
||||
{ 32, "Onyx" },
|
||||
{ 33, "Opal" },
|
||||
{ 34, "Peridot" },
|
||||
{ 35, "Red Garnet" },
|
||||
{ 36, "Red Jade" },
|
||||
{ 37, "Rose Quartz" },
|
||||
{ 38, "Ruby" },
|
||||
{ 39, "Sapphire" },
|
||||
{ 40, "Smokey Quartz" },
|
||||
{ 41, "Sunstone" },
|
||||
{ 42, "Tiger Eye" },
|
||||
{ 43, "Tourmaline" },
|
||||
{ 44, "Turquoise" },
|
||||
{ 45, "White Jade" },
|
||||
{ 46, "White Quartz" },
|
||||
{ 47, "White Sapphire" },
|
||||
{ 48, "Yellow Garnet" },
|
||||
{ 49, "Yellow Topaz" },
|
||||
{ 50, "Zircon" },
|
||||
{ 51, "Ivory" },
|
||||
{ 52, "Leather" },
|
||||
{ 53, "Armoredillo Hide" },
|
||||
{ 54, "Gromnie Hide" },
|
||||
{ 55, "Reed Shark Hide" },
|
||||
// 56
|
||||
{ 57, "Brass" },
|
||||
{ 58, "Bronze" },
|
||||
{ 59, "Copper" },
|
||||
{ 60, "Gold" },
|
||||
{ 61, "Iron" },
|
||||
{ 62, "Pyreal" },
|
||||
{ 63, "Silver" },
|
||||
{ 64, "Steel" },
|
||||
// 65
|
||||
{ 66, "Alabaster" },
|
||||
{ 67, "Granite" },
|
||||
{ 68, "Marble" },
|
||||
{ 69, "Obsidian" },
|
||||
{ 70, "Sandstone" },
|
||||
{ 71, "Serpentine" },
|
||||
{ 73, "Ebony" },
|
||||
{ 74, "Mahogany" },
|
||||
{ 75, "Oak" },
|
||||
{ 76, "Pine" },
|
||||
{ 77, "Teak" },
|
||||
};
|
||||
|
||||
public struct SpellInfo<T>
|
||||
{
|
||||
public readonly int Key;
|
||||
public readonly T Change;
|
||||
public readonly T Bonus;
|
||||
|
||||
public SpellInfo(int key, T change, T bonus = default(T))
|
||||
{
|
||||
Key = key;
|
||||
Change = change;
|
||||
Bonus = bonus;
|
||||
}
|
||||
}
|
||||
|
||||
// Taken from Decal.Adapter.Wrappers.LongValueKey
|
||||
const int LongValueKey_MaxDamage = 218103842;
|
||||
const int LongValueKey_ArmorLevel = 28;
|
||||
|
||||
public static readonly Dictionary<int, SpellInfo<int>> LongValueKeySpellEffects = new Dictionary<int, SpellInfo<int>>()
|
||||
{
|
||||
// In 2012 they removed these item spells and converted them to auras that are cast on the player, not on the item.
|
||||
{ 1616, new SpellInfo<int>(LongValueKey_MaxDamage, 20)}, // Blood Drinker VI
|
||||
{ 2096, new SpellInfo<int>(LongValueKey_MaxDamage, 22)}, // Infected Caress
|
||||
//{ 5183, new SpellInfo<LongValueKey>(LongValueKey_MaxDamage, 22)}, // Incantation of Blood Drinker Pre Feb-2013
|
||||
//{ 4395, new SpellInfo<LongValueKey>(LongValueKey_MaxDamage, 24, 2)}, // Incantation of Blood Drinker, this spell on the item adds 2 more points of damage over a user casted 8 Pre Feb-2013
|
||||
{ 5183, new SpellInfo<int>(LongValueKey_MaxDamage, 24)}, // Incantation of Blood Drinker Post Feb-2013
|
||||
{ 4395, new SpellInfo<int>(LongValueKey_MaxDamage, 24)}, // Incantation of Blood Drinker Post Feb-2013
|
||||
|
||||
{ 2598, new SpellInfo<int>(LongValueKey_MaxDamage, 2, 2)}, // Minor Blood Thirst
|
||||
{ 2586, new SpellInfo<int>(LongValueKey_MaxDamage, 4, 4)}, // Major Blood Thirst
|
||||
{ 4661, new SpellInfo<int>(LongValueKey_MaxDamage, 7, 7)}, // Epic Blood Thirst
|
||||
{ 6089, new SpellInfo<int>(LongValueKey_MaxDamage, 10, 10)}, // Legendary Blood Thirst
|
||||
|
||||
{ 3688, new SpellInfo<int>(LongValueKey_MaxDamage, 300)}, // Prodigal Blood Drinker
|
||||
|
||||
|
||||
{ 1486, new SpellInfo<int>(LongValueKey_ArmorLevel, 200)}, // Impenetrability VI
|
||||
{ 2108, new SpellInfo<int>(LongValueKey_ArmorLevel, 220)}, // Brogard's Defiance
|
||||
{ 4407, new SpellInfo<int>(LongValueKey_ArmorLevel, 240)}, // Incantation of Impenetrability
|
||||
|
||||
{ 2604, new SpellInfo<int>(LongValueKey_ArmorLevel, 20, 20)}, // Minor Impenetrability
|
||||
{ 2592, new SpellInfo<int>(LongValueKey_ArmorLevel, 40, 40)}, // Major Impenetrability
|
||||
{ 4667, new SpellInfo<int>(LongValueKey_ArmorLevel, 60, 60)}, // Epic Impenetrability
|
||||
{ 6095, new SpellInfo<int>(LongValueKey_ArmorLevel, 80, 80)}, // Legendary Impenetrability
|
||||
};
|
||||
|
||||
// Taken from Decal.Adapter.Wrappers.DoubleValueKey
|
||||
const int DoubleValueKey_ElementalDamageVersusMonsters = 152;
|
||||
const int DoubleValueKey_AttackBonus = 167772172;
|
||||
const int DoubleValueKey_MeleeDefenseBonus = 29;
|
||||
const int DoubleValueKey_ManaCBonus = 144;
|
||||
|
||||
public static readonly Dictionary<int, SpellInfo<double>> DoubleValueKeySpellEffects = new Dictionary<int, SpellInfo<double>>()
|
||||
{
|
||||
// In 2012 they removed these item spells and converted them to auras that are cast on the player, not on the item.
|
||||
{ 3258, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .06)}, // Spirit Drinker VI
|
||||
{ 3259, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .07)}, // Infected Spirit Caress
|
||||
//{ 5182, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .07)}, // Incantation of Spirit Drinker Pre Feb-2013
|
||||
//{ 4414, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .08, .01)}, // Incantation of Spirit Drinker, this spell on the item adds 1 more % of damage over a user casted 8 Pre Feb-2013
|
||||
{ 5182, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .08)}, // Incantation of Spirit Drinker Post Feb-2013
|
||||
{ 4414, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .08)}, // Incantation of Spirit Drinker, this spell on the item adds 1 more % of damage over a user casted 8 Post Feb-2013
|
||||
|
||||
{ 3251, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .01, .01)}, // Minor Spirit Thirst
|
||||
{ 3250, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .03, .03)}, // Major Spirit Thirst
|
||||
{ 4670, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .05, .05)}, // Epic Spirit Thirst
|
||||
{ 6098, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .07, .07)}, // Legendary Spirit Thirst
|
||||
|
||||
{ 3735, new SpellInfo<double>(DoubleValueKey_ElementalDamageVersusMonsters, .15)}, // Prodigal Spirit Drinker
|
||||
|
||||
|
||||
// In 2012 they removed these item spells and converted them to auras that are cast on the player, not on the item.
|
||||
{ 1592, new SpellInfo<double>(DoubleValueKey_AttackBonus, .15)}, // Heart Seeker VI
|
||||
{ 2106, new SpellInfo<double>(DoubleValueKey_AttackBonus, .17)}, // Elysa's Sight
|
||||
{ 4405, new SpellInfo<double>(DoubleValueKey_AttackBonus, .20)}, // Incantation of Heart Seeker
|
||||
|
||||
{ 2603, new SpellInfo<double>(DoubleValueKey_AttackBonus, .03, .03)}, // Minor Heart Thirst
|
||||
{ 2591, new SpellInfo<double>(DoubleValueKey_AttackBonus, .05, .05)}, // Major Heart Thirst
|
||||
{ 4666, new SpellInfo<double>(DoubleValueKey_AttackBonus, .07, .07)}, // Epic Heart Thirst
|
||||
{ 6094, new SpellInfo<double>(DoubleValueKey_AttackBonus, .09, .09)}, // Legendary Heart Thirst
|
||||
|
||||
|
||||
// In 2012 they removed these item spells and converted them to auras that are cast on the player, not on the item.
|
||||
{ 1605, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .15)}, // Defender VI
|
||||
{ 2101, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .17)}, // Cragstone's Will
|
||||
//{ 4400, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .17)}, // Incantation of Defender Pre Feb-2013
|
||||
{ 4400, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .20)}, // Incantation of Defender Post Feb-2013
|
||||
|
||||
{ 2600, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .03, .03)}, // Minor Defender
|
||||
{ 3985, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .04, .04)}, // Mukkir Sense
|
||||
{ 2588, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .05, .05)}, // Major Defender
|
||||
{ 4663, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .07, .07)}, // Epic Defender
|
||||
{ 6091, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .09, .09)}, // Legendary Defender
|
||||
|
||||
{ 3699, new SpellInfo<double>(DoubleValueKey_MeleeDefenseBonus, .25)}, // Prodigal Defender
|
||||
|
||||
|
||||
// In 2012 they removed these item spells and converted them to auras that are cast on the player, not on the item.
|
||||
{ 1480, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.60)}, // Hermetic Link VI
|
||||
{ 2117, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.70)}, // Mystic's Blessing
|
||||
{ 4418, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.80)}, // Incantation of Hermetic Link
|
||||
|
||||
{ 3201, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.05, 1.05)}, // Feeble Hermetic Link
|
||||
{ 3199, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.10, 1.10)}, // Minor Hermetic Link
|
||||
{ 3202, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.15, 1.15)}, // Moderate Hermetic Link
|
||||
{ 3200, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.20, 1.20)}, // Major Hermetic Link
|
||||
{ 6086, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.25, 1.25)}, // Epic Hermetic Link
|
||||
{ 6087, new SpellInfo<double>(DoubleValueKey_ManaCBonus, 1.30, 1.30)}, // Legendary Hermetic Link
|
||||
};
|
||||
}
|
||||
}
|
||||
266
Shared/Constants/DoubleValueKey.cs
Normal file
266
Shared/Constants/DoubleValueKey.cs
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
// https://github.com/ACEmulator/ACE/blob/master/Source/ACE.Entity/Enum/Properties/PropertyFloat.cs
|
||||
public enum DoubleValueKey
|
||||
{
|
||||
// properties marked as ServerOnly are properties we never saw in PCAPs, from here:
|
||||
// http://ac.yotesfan.com/ace_object/not_used_enums.php
|
||||
// source: @OptimShi
|
||||
// description attributes are used by the weenie editor for a cleaner display name
|
||||
|
||||
Undef = 0,
|
||||
HeartbeatInterval = 1,
|
||||
[Ephemeral]
|
||||
HeartbeatTimestamp = 2,
|
||||
HealthRate = 3,
|
||||
StaminaRate = 4,
|
||||
ManaRate = 5,
|
||||
HealthUponResurrection = 6,
|
||||
StaminaUponResurrection = 7,
|
||||
ManaUponResurrection = 8,
|
||||
StartTime = 9,
|
||||
StopTime = 10,
|
||||
ResetInterval = 11,
|
||||
Shade = 12,
|
||||
ArmorModVsSlash = 13,
|
||||
ArmorModVsPierce = 14,
|
||||
ArmorModVsBludgeon = 15,
|
||||
ArmorModVsCold = 16,
|
||||
ArmorModVsFire = 17,
|
||||
ArmorModVsAcid = 18,
|
||||
ArmorModVsElectric = 19,
|
||||
CombatSpeed = 20,
|
||||
WeaponLength = 21,
|
||||
DamageVariance = 22,
|
||||
CurrentPowerMod = 23,
|
||||
AccuracyMod = 24,
|
||||
StrengthMod = 25,
|
||||
MaximumVelocity = 26,
|
||||
RotationSpeed = 27,
|
||||
MotionTimestamp = 28,
|
||||
WeaponDefense = 29,
|
||||
WimpyLevel = 30,
|
||||
VisualAwarenessRange = 31,
|
||||
AuralAwarenessRange = 32,
|
||||
PerceptionLevel = 33,
|
||||
PowerupTime = 34,
|
||||
MaxChargeDistance = 35,
|
||||
ChargeSpeed = 36,
|
||||
BuyPrice = 37,
|
||||
SellPrice = 38,
|
||||
DefaultScale = 39,
|
||||
LockpickMod = 40,
|
||||
RegenerationInterval = 41,
|
||||
RegenerationTimestamp = 42,
|
||||
GeneratorRadius = 43,
|
||||
TimeToRot = 44,
|
||||
DeathTimestamp = 45,
|
||||
PkTimestamp = 46,
|
||||
VictimTimestamp = 47,
|
||||
LoginTimestamp = 48,
|
||||
CreationTimestamp = 49,
|
||||
MinimumTimeSincePk = 50,
|
||||
DeprecatedHousekeepingPriority = 51,
|
||||
AbuseLoggingTimestamp = 52,
|
||||
LastPortalTeleportTimestamp = 53,
|
||||
UseRadius = 54,
|
||||
HomeRadius = 55,
|
||||
ReleasedTimestamp = 56,
|
||||
MinHomeRadius = 57,
|
||||
Facing = 58,
|
||||
ResetTimestamp = 59,
|
||||
LogoffTimestamp = 60,
|
||||
EconRecoveryInterval = 61,
|
||||
WeaponOffense = 62,
|
||||
DamageMod = 63,
|
||||
ResistSlash = 64,
|
||||
ResistPierce = 65,
|
||||
ResistBludgeon = 66,
|
||||
ResistFire = 67,
|
||||
ResistCold = 68,
|
||||
ResistAcid = 69,
|
||||
ResistElectric = 70,
|
||||
ResistHealthBoost = 71,
|
||||
ResistStaminaDrain = 72,
|
||||
ResistStaminaBoost = 73,
|
||||
ResistManaDrain = 74,
|
||||
ResistManaBoost = 75,
|
||||
[Ephemeral]
|
||||
Translucency = 76,
|
||||
PhysicsScriptIntensity = 77,
|
||||
Friction = 78,
|
||||
Elasticity = 79,
|
||||
AiUseMagicDelay = 80,
|
||||
ItemMinSpellcraftMod = 81,
|
||||
ItemMaxSpellcraftMod = 82,
|
||||
ItemRankProbability = 83,
|
||||
Shade2 = 84,
|
||||
Shade3 = 85,
|
||||
Shade4 = 86,
|
||||
ItemEfficiency = 87,
|
||||
ItemManaUpdateTimestamp = 88,
|
||||
SpellGestureSpeedMod = 89,
|
||||
SpellStanceSpeedMod = 90,
|
||||
AllegianceAppraisalTimestamp = 91,
|
||||
PowerLevel = 92,
|
||||
AccuracyLevel = 93,
|
||||
AttackAngle = 94,
|
||||
AttackTimestamp = 95,
|
||||
CheckpointTimestamp = 96,
|
||||
SoldTimestamp = 97,
|
||||
UseTimestamp = 98,
|
||||
UseLockTimestamp = 99,
|
||||
HealkitMod = 100,
|
||||
FrozenTimestamp = 101,
|
||||
HealthRateMod = 102,
|
||||
AllegianceSwearTimestamp = 103,
|
||||
ObviousRadarRange = 104,
|
||||
HotspotCycleTime = 105,
|
||||
HotspotCycleTimeVariance = 106,
|
||||
SpamTimestamp = 107,
|
||||
SpamRate = 108,
|
||||
BondWieldedTreasure = 109,
|
||||
BulkMod = 110,
|
||||
SizeMod = 111,
|
||||
GagTimestamp = 112,
|
||||
GeneratorUpdateTimestamp = 113,
|
||||
DeathSpamTimestamp = 114,
|
||||
DeathSpamRate = 115,
|
||||
WildAttackProbability = 116,
|
||||
FocusedProbability = 117,
|
||||
CrashAndTurnProbability = 118,
|
||||
CrashAndTurnRadius = 119,
|
||||
CrashAndTurnBias = 120,
|
||||
GeneratorInitialDelay = 121,
|
||||
AiAcquireHealth = 122,
|
||||
AiAcquireStamina = 123,
|
||||
AiAcquireMana = 124,
|
||||
/// <summary>
|
||||
/// this had a default of "1" - leaving comment to investigate potential options for defaulting these things (125)
|
||||
/// </summary>
|
||||
[SendOnLogin]
|
||||
ResistHealthDrain = 125,
|
||||
LifestoneProtectionTimestamp = 126,
|
||||
AiCounteractEnchantment = 127,
|
||||
AiDispelEnchantment = 128,
|
||||
TradeTimestamp = 129,
|
||||
AiTargetedDetectionRadius = 130,
|
||||
EmotePriority = 131,
|
||||
[Ephemeral]
|
||||
LastTeleportStartTimestamp = 132,
|
||||
EventSpamTimestamp = 133,
|
||||
EventSpamRate = 134,
|
||||
InventoryOffset = 135,
|
||||
CriticalMultiplier = 136,
|
||||
ManaStoneDestroyChance = 137,
|
||||
SlayerDamageBonus = 138,
|
||||
AllegianceInfoSpamTimestamp = 139,
|
||||
AllegianceInfoSpamRate = 140,
|
||||
NextSpellcastTimestamp = 141,
|
||||
[Ephemeral]
|
||||
AppraisalRequestedTimestamp = 142,
|
||||
AppraisalHeartbeatDueTimestamp = 143,
|
||||
ManaConversionMod = 144,
|
||||
LastPkAttackTimestamp = 145,
|
||||
FellowshipUpdateTimestamp = 146,
|
||||
CriticalFrequency = 147,
|
||||
LimboStartTimestamp = 148,
|
||||
WeaponMissileDefense = 149,
|
||||
WeaponMagicDefense = 150,
|
||||
IgnoreShield = 151,
|
||||
ElementalDamageMod = 152,
|
||||
StartMissileAttackTimestamp = 153,
|
||||
LastRareUsedTimestamp = 154,
|
||||
IgnoreArmor = 155,
|
||||
ProcSpellRate = 156,
|
||||
ResistanceModifier = 157,
|
||||
AllegianceGagTimestamp = 158,
|
||||
AbsorbMagicDamage = 159,
|
||||
CachedMaxAbsorbMagicDamage = 160,
|
||||
GagDuration = 161,
|
||||
AllegianceGagDuration = 162,
|
||||
[SendOnLogin]
|
||||
GlobalXpMod = 163,
|
||||
HealingModifier = 164,
|
||||
ArmorModVsNether = 165,
|
||||
ResistNether = 166,
|
||||
CooldownDuration = 167,
|
||||
[SendOnLogin]
|
||||
WeaponAuraOffense = 168,
|
||||
[SendOnLogin]
|
||||
WeaponAuraDefense = 169,
|
||||
[SendOnLogin]
|
||||
WeaponAuraElemental = 170,
|
||||
[SendOnLogin]
|
||||
WeaponAuraManaConv = 171,
|
||||
|
||||
|
||||
// ACE Specific
|
||||
[ServerOnly]
|
||||
PCAPRecordedWorkmanship = 8004,
|
||||
[ServerOnly]
|
||||
PCAPRecordedVelocityX = 8010,
|
||||
[ServerOnly]
|
||||
PCAPRecordedVelocityY = 8011,
|
||||
[ServerOnly]
|
||||
PCAPRecordedVelocityZ = 8012,
|
||||
[ServerOnly]
|
||||
PCAPRecordedAccelerationX = 8013,
|
||||
[ServerOnly]
|
||||
PCAPRecordedAccelerationY = 8014,
|
||||
[ServerOnly]
|
||||
PCAPRecordedAccelerationZ = 8015,
|
||||
[ServerOnly]
|
||||
PCAPRecordeOmegaX = 8016,
|
||||
[ServerOnly]
|
||||
PCAPRecordeOmegaY = 8017,
|
||||
[ServerOnly]
|
||||
PCAPRecordeOmegaZ = 8018,
|
||||
|
||||
|
||||
// Decal Specific
|
||||
SlashProt_Decal = 167772160,
|
||||
PierceProt_Decal = 167772161,
|
||||
BludgeonProt_Decal = 167772162,
|
||||
AcidProt_Decal = 167772163,
|
||||
LightningProt_Decal = 167772164,
|
||||
FireProt_Decal = 167772165,
|
||||
ColdProt_Decal = 167772166,
|
||||
Heading_Decal = 167772167,
|
||||
ApproachDistance_Decal = 167772168,
|
||||
SalvageWorkmanship_Decal = 167772169,
|
||||
Scale_Decal = 167772170,
|
||||
Variance_Decal = 167772171,
|
||||
AttackBonus_Decal = 167772172,
|
||||
Range_Decal = 167772173,
|
||||
DamageBonus_Decal = 167772174,
|
||||
}
|
||||
|
||||
public static class DoubleValueKeyTools
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a decal specific IntValueKey to the actual IntValueKey.
|
||||
/// If this is not an IntValueKey, 0 will be returned.
|
||||
/// </summary>
|
||||
public static uint ConvertToDouble(DoubleValueKey input)
|
||||
{
|
||||
if (input == DoubleValueKey.SlashProt_Decal) return (int)DoubleValueKey.ArmorModVsSlash;
|
||||
if (input == DoubleValueKey.PierceProt_Decal) return (int)DoubleValueKey.ArmorModVsPierce;
|
||||
if (input == DoubleValueKey.BludgeonProt_Decal) return (int)DoubleValueKey.ArmorModVsBludgeon;
|
||||
if (input == DoubleValueKey.AcidProt_Decal) return (int)DoubleValueKey.ArmorModVsAcid;
|
||||
if (input == DoubleValueKey.LightningProt_Decal) return (int)DoubleValueKey.ArmorModVsElectric;
|
||||
if (input == DoubleValueKey.FireProt_Decal) return (int)DoubleValueKey.ArmorModVsFire;
|
||||
if (input == DoubleValueKey.ColdProt_Decal) return (int)DoubleValueKey.ArmorModVsCold;
|
||||
|
||||
if (input == DoubleValueKey.ApproachDistance_Decal) return (int)DoubleValueKey.UseRadius;
|
||||
if (input == DoubleValueKey.Scale_Decal) return (int)DoubleValueKey.DefaultScale;
|
||||
if (input == DoubleValueKey.Variance_Decal) return (int)DoubleValueKey.DamageVariance;
|
||||
if (input == DoubleValueKey.AttackBonus_Decal) return (int)DoubleValueKey.WeaponOffense;;
|
||||
if (input == DoubleValueKey.Range_Decal) return (int)DoubleValueKey.MaximumVelocity;
|
||||
if (input == DoubleValueKey.DamageBonus_Decal) return (int)DoubleValueKey.DamageMod;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Shared/Constants/EphemeralAttribute.cs
Normal file
11
Shared/Constants/EphemeralAttribute.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// These are properties that aren't saved to the shard.
|
||||
/// </summary>
|
||||
public class EphemeralAttribute : Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
126
Shared/Constants/EquipMask.cs
Normal file
126
Shared/Constants/EquipMask.cs
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
using System;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// This is the mapping for LongValueKey.EquippableSlots.
|
||||
/// It represents where you can drag items to on your paper doll.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum EquipMask : uint
|
||||
{
|
||||
None = 0x00000000,
|
||||
|
||||
HeadWear = 0x00000001,
|
||||
|
||||
ChestWear = 0x00000002,
|
||||
AbdomenWear = 0x00000004,
|
||||
UpperArmWear = 0x00000008,
|
||||
LowerArmWear = 0x00000010,
|
||||
|
||||
HandWear = 0x00000020,
|
||||
|
||||
UpperLegWear = 0x00000040,
|
||||
LowerLegWear = 0x00000080,
|
||||
|
||||
FootWear = 0x00000100,
|
||||
ChestArmor = 0x00000200,
|
||||
AbdomenArmor = 0x00000400,
|
||||
UpperArmArmor = 0x00000800,
|
||||
LowerArmArmor = 0x00001000,
|
||||
UpperLegArmor = 0x00002000,
|
||||
LowerLegArmor = 0x00004000,
|
||||
|
||||
NeckWear = 0x00008000,
|
||||
WristWearLeft = 0x00010000,
|
||||
WristWearRight = 0x00020000,
|
||||
FingerWearLeft = 0x00040000,
|
||||
FingerWearRight = 0x00080000,
|
||||
|
||||
MeleeWeapon = 0x00100000,
|
||||
Shield = 0x00200000,
|
||||
MissileWeapon = 0x00400000,
|
||||
MissileAmmo = 0x00800000,
|
||||
Held = 0x01000000,
|
||||
TwoHanded = 0x02000000,
|
||||
|
||||
TrinketOne = 0x04000000,
|
||||
Cloak = 0x08000000,
|
||||
|
||||
SigilOne = 0x10000000, // Blue
|
||||
SigilTwo = 0x20000000, // Yellow
|
||||
SigilThree = 0x40000000, // Red
|
||||
|
||||
Clothing = 0x80000000 | HeadWear | ChestWear | AbdomenWear | UpperArmWear | LowerArmWear | HandWear | UpperLegWear | LowerLegWear | FootWear,
|
||||
Armor = ChestArmor | AbdomenArmor | UpperArmArmor | LowerArmArmor | UpperLegArmor | LowerLegArmor | FootWear,
|
||||
ArmorExclusive = ChestArmor | AbdomenArmor | UpperArmArmor | LowerArmArmor | UpperLegArmor | LowerLegArmor,
|
||||
Extremity = HeadWear | HandWear | FootWear,
|
||||
Jewelry = NeckWear | WristWearLeft | WristWearRight | FingerWearLeft | FingerWearRight | TrinketOne | Cloak | SigilOne | SigilTwo | SigilThree,
|
||||
WristWear = WristWearLeft | WristWearRight,
|
||||
FingerWear = FingerWearLeft | FingerWearRight,
|
||||
Sigil = SigilOne | SigilTwo | SigilThree,
|
||||
ReadySlot = Held | TwoHanded | TrinketOne | Cloak | SigilOne | SigilTwo,
|
||||
Weapon = SigilTwo | TrinketOne | Held,
|
||||
WeaponReadySlot = SigilOne | SigilTwo | TrinketOne | Held,
|
||||
Selectable = MeleeWeapon | Shield | MissileWeapon | Held | TwoHanded,
|
||||
SelectablePlusAmmo = Selectable | MissileAmmo,
|
||||
All = 0x7FFFFFFF,
|
||||
CanGoInReadySlot = 0x7FFFFFFF
|
||||
}
|
||||
|
||||
public static class EquipMaskExtensions
|
||||
{
|
||||
public static int GetTotalBitsSet(this EquipMask value)
|
||||
{
|
||||
int slotFlags = (int)value;
|
||||
int bitsSet = 0;
|
||||
|
||||
while (slotFlags != 0)
|
||||
{
|
||||
if ((slotFlags & 1) == 1)
|
||||
bitsSet++;
|
||||
slotFlags >>= 1;
|
||||
}
|
||||
|
||||
return bitsSet;
|
||||
}
|
||||
|
||||
// Some feet armor have EquipMask.Feet | EquipMask.PantsLowerLegs
|
||||
|
||||
public static bool IsBodyArmor(this EquipMask value)
|
||||
{
|
||||
return ((int)value & 0x00007F21) != 0;
|
||||
}
|
||||
|
||||
public static bool IsCoreBodyArmor(this EquipMask value)
|
||||
{
|
||||
return (value & (EquipMask.ChestArmor | EquipMask.UpperArmArmor | EquipMask.LowerArmArmor | EquipMask.AbdomenArmor | EquipMask.UpperLegArmor | EquipMask.LowerLegArmor)) != 0;
|
||||
}
|
||||
|
||||
public static bool IsExtremityBodyArmor(this EquipMask value)
|
||||
{
|
||||
return (value & (EquipMask.FootWear | EquipMask.HandWear | EquipMask.HeadWear)) != 0;
|
||||
}
|
||||
|
||||
public static bool IsUnderwear(this EquipMask value)
|
||||
{
|
||||
if (value == (EquipMask.FootWear | EquipMask.LowerLegWear))
|
||||
return false;
|
||||
|
||||
return ((int)value & 0x000000DE) != 0;
|
||||
}
|
||||
|
||||
public static bool IsShirt(this EquipMask value)
|
||||
{
|
||||
return ((int)value & 0x0000001A) != 0;
|
||||
}
|
||||
|
||||
public static bool IsPants(this EquipMask value)
|
||||
{
|
||||
if (value == (EquipMask.FootWear | EquipMask.LowerLegWear))
|
||||
return false;
|
||||
|
||||
return ((int)value & 0x000000C4) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
722
Shared/Constants/IntValueKey.cs
Normal file
722
Shared/Constants/IntValueKey.cs
Normal file
|
|
@ -0,0 +1,722 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
// https://github.com/ACEmulator/ACE/blob/master/Source/ACE.Entity/Enum/Properties/PropertyInt.cs
|
||||
public enum IntValueKey
|
||||
{
|
||||
// properties marked as ServerOnly are properties we never saw in PCAPs, from here:
|
||||
// http://ac.yotesfan.com/ace_object/not_used_enums.php
|
||||
// source: @OptimShi
|
||||
// description attributes are used by the weenie editor for a cleaner display name
|
||||
|
||||
Undef = 0,
|
||||
[ServerOnly]
|
||||
ItemType = 1,
|
||||
CreatureType = 2,
|
||||
[ServerOnly]
|
||||
PaletteTemplate = 3,
|
||||
ClothingPriority = 4,
|
||||
[SendOnLogin]
|
||||
EncumbranceVal = 5, // ENCUMB_VAL_INT,
|
||||
[SendOnLogin]
|
||||
ItemsCapacity = 6,
|
||||
[SendOnLogin]
|
||||
ContainersCapacity = 7,
|
||||
[ServerOnly]
|
||||
Mass = 8,
|
||||
[ServerOnly]
|
||||
ValidLocations = 9, // LOCATIONS_INT
|
||||
[ServerOnly]
|
||||
CurrentWieldedLocation = 10,
|
||||
[ServerOnly]
|
||||
MaxStackSize = 11,
|
||||
[ServerOnly]
|
||||
StackSize = 12,
|
||||
[ServerOnly]
|
||||
StackUnitEncumbrance = 13,
|
||||
[ServerOnly]
|
||||
StackUnitMass = 14,
|
||||
[ServerOnly]
|
||||
StackUnitValue = 15,
|
||||
[ServerOnly]
|
||||
ItemUseable = 16,
|
||||
RareId = 17,
|
||||
[ServerOnly]
|
||||
UiEffects = 18,
|
||||
Value = 19,
|
||||
[Ephemeral][SendOnLogin]
|
||||
CoinValue = 20,
|
||||
TotalExperience = 21,
|
||||
AvailableCharacter = 22,
|
||||
TotalSkillCredits = 23,
|
||||
[SendOnLogin]
|
||||
AvailableSkillCredits = 24,
|
||||
[SendOnLogin]
|
||||
Level = 25,
|
||||
AccountRequirements = 26,
|
||||
ArmorType = 27,
|
||||
ArmorLevel = 28,
|
||||
AllegianceCpPool = 29,
|
||||
[SendOnLogin]
|
||||
AllegianceRank = 30,
|
||||
ChannelsAllowed = 31,
|
||||
ChannelsActive = 32,
|
||||
Bonded = 33,
|
||||
MonarchsRank = 34,
|
||||
AllegianceFollowers = 35,
|
||||
ResistMagic = 36,
|
||||
ResistItemAppraisal = 37,
|
||||
ResistLockpick = 38,
|
||||
DeprecatedResistRepair = 39,
|
||||
[SendOnLogin]
|
||||
CombatMode = 40,
|
||||
CurrentAttackHeight = 41,
|
||||
CombatCollisions = 42,
|
||||
[SendOnLogin]
|
||||
NumDeaths = 43,
|
||||
Damage = 44,
|
||||
DamageType = 45,
|
||||
[ServerOnly]
|
||||
DefaultCombatStyle = 46,
|
||||
[SendOnLogin]
|
||||
AttackType = 47,
|
||||
WeaponSkill = 48,
|
||||
WeaponTime = 49,
|
||||
AmmoType = 50,
|
||||
CombatUse = 51,
|
||||
[ServerOnly]
|
||||
ParentLocation = 52,
|
||||
/// <summary>
|
||||
/// TODO: Migrate inventory order away from this and instead use the new InventoryOrder property
|
||||
/// TODO: PlacementPosition is used (very sparingly) in cache.bin, so it has (or had) a meaning at one point before we hijacked it
|
||||
/// TODO: and used it for our own inventory order
|
||||
/// </summary>
|
||||
[ServerOnly]
|
||||
PlacementPosition = 53,
|
||||
WeaponEncumbrance = 54,
|
||||
WeaponMass = 55,
|
||||
ShieldValue = 56,
|
||||
ShieldEncumbrance = 57,
|
||||
MissileInventoryLocation = 58,
|
||||
FullDamageType = 59,
|
||||
WeaponRange = 60,
|
||||
AttackersSkill = 61,
|
||||
DefendersSkill = 62,
|
||||
AttackersSkillValue = 63,
|
||||
AttackersClass = 64,
|
||||
[ServerOnly]
|
||||
Placement = 65,
|
||||
CheckpointStatus = 66,
|
||||
Tolerance = 67,
|
||||
TargetingTactic = 68,
|
||||
CombatTactic = 69,
|
||||
HomesickTargetingTactic = 70,
|
||||
NumFollowFailures = 71,
|
||||
FriendType = 72,
|
||||
FoeType = 73,
|
||||
MerchandiseItemTypes = 74,
|
||||
MerchandiseMinValue = 75,
|
||||
MerchandiseMaxValue = 76,
|
||||
NumItemsSold = 77,
|
||||
NumItemsBought = 78,
|
||||
MoneyIncome = 79,
|
||||
MoneyOutflow = 80,
|
||||
[Ephemeral]
|
||||
MaxGeneratedObjects = 81,
|
||||
[Ephemeral]
|
||||
InitGeneratedObjects = 82,
|
||||
ActivationResponse = 83,
|
||||
OriginalValue = 84,
|
||||
NumMoveFailures = 85,
|
||||
MinLevel = 86,
|
||||
MaxLevel = 87,
|
||||
LockpickMod = 88,
|
||||
BoosterEnum = 89,
|
||||
BoostValue = 90,
|
||||
MaxStructure = 91,
|
||||
Structure = 92,
|
||||
[ServerOnly]
|
||||
PhysicsState = 93,
|
||||
[ServerOnly]
|
||||
TargetType = 94,
|
||||
RadarBlipColor = 95,
|
||||
EncumbranceCapacity = 96,
|
||||
LoginTimestamp = 97,
|
||||
[SendOnLogin]
|
||||
CreationTimestamp = 98,
|
||||
PkLevelModifier = 99,
|
||||
GeneratorType = 100,
|
||||
AiAllowedCombatStyle = 101,
|
||||
LogoffTimestamp = 102,
|
||||
GeneratorDestructionType = 103,
|
||||
ActivationCreateClass = 104,
|
||||
ItemWorkmanship = 105,
|
||||
ItemSpellcraft = 106,
|
||||
ItemCurMana = 107,
|
||||
ItemMaxMana = 108,
|
||||
ItemDifficulty = 109,
|
||||
ItemAllegianceRankLimit = 110,
|
||||
PortalBitmask = 111,
|
||||
AdvocateLevel = 112,
|
||||
[SendOnLogin]
|
||||
Gender = 113,
|
||||
Attuned = 114,
|
||||
ItemSkillLevelLimit = 115,
|
||||
GateLogic = 116,
|
||||
ItemManaCost = 117,
|
||||
Logoff = 118,
|
||||
Active = 119,
|
||||
AttackHeight = 120,
|
||||
NumAttackFailures = 121,
|
||||
AiCpThreshold = 122,
|
||||
AiAdvancementStrategy = 123,
|
||||
Version = 124,
|
||||
[SendOnLogin]
|
||||
Age = 125,
|
||||
VendorHappyMean = 126,
|
||||
VendorHappyVariance = 127,
|
||||
CloakStatus = 128,
|
||||
[SendOnLogin]
|
||||
VitaeCpPool = 129,
|
||||
NumServicesSold = 130,
|
||||
MaterialType = 131,
|
||||
[SendOnLogin]
|
||||
NumAllegianceBreaks = 132,
|
||||
[Ephemeral]
|
||||
ShowableOnRadar = 133,
|
||||
[SendOnLogin]
|
||||
PlayerKillerStatus = 134,
|
||||
VendorHappyMaxItems = 135,
|
||||
ScorePageNum = 136,
|
||||
ScoreConfigNum = 137,
|
||||
ScoreNumScores = 138,
|
||||
[SendOnLogin]
|
||||
DeathLevel = 139,
|
||||
AiOptions = 140,
|
||||
OpenToEveryone = 141,
|
||||
GeneratorTimeType = 142,
|
||||
GeneratorStartTime = 143,
|
||||
GeneratorEndTime = 144,
|
||||
GeneratorEndDestructionType = 145,
|
||||
XpOverride = 146,
|
||||
NumCrashAndTurns = 147,
|
||||
ComponentWarningThreshold = 148,
|
||||
HouseStatus = 149,
|
||||
[ServerOnly]
|
||||
HookPlacement = 150,
|
||||
[ServerOnly]
|
||||
HookType = 151,
|
||||
[ServerOnly]
|
||||
HookItemType = 152,
|
||||
AiPpThreshold = 153,
|
||||
GeneratorVersion = 154,
|
||||
HouseType = 155,
|
||||
PickupEmoteOffset = 156,
|
||||
WeenieIteration = 157,
|
||||
WieldRequirements = 158,
|
||||
WieldSkillType = 159,
|
||||
WieldDifficulty = 160,
|
||||
HouseMaxHooksUsable = 161,
|
||||
HouseCurrentHooksUsable = 162,
|
||||
AllegianceMinLevel = 163,
|
||||
AllegianceMaxLevel = 164,
|
||||
HouseRelinkHookCount = 165,
|
||||
SlayerCreatureType = 166,
|
||||
ConfirmationInProgress = 167,
|
||||
ConfirmationTypeInProgress = 168,
|
||||
TsysMutationData = 169,
|
||||
NumItemsInMaterial = 170,
|
||||
NumTimesTinkered = 171,
|
||||
AppraisalLongDescDecoration = 172,
|
||||
AppraisalLockpickSuccessPercent = 173,
|
||||
[Ephemeral]
|
||||
AppraisalPages = 174,
|
||||
[Ephemeral]
|
||||
AppraisalMaxPages = 175,
|
||||
AppraisalItemSkill = 176,
|
||||
GemCount = 177,
|
||||
GemType = 178,
|
||||
ImbuedEffect = 179,
|
||||
AttackersRawSkillValue = 180,
|
||||
[SendOnLogin]
|
||||
ChessRank = 181,
|
||||
ChessTotalGames = 182,
|
||||
ChessGamesWon = 183,
|
||||
ChessGamesLost = 184,
|
||||
TypeOfAlteration = 185,
|
||||
SkillToBeAltered = 186,
|
||||
SkillAlterationCount = 187,
|
||||
[SendOnLogin]
|
||||
HeritageGroup = 188,
|
||||
TransferFromAttribute = 189,
|
||||
TransferToAttribute = 190,
|
||||
AttributeTransferCount = 191,
|
||||
[SendOnLogin]
|
||||
FakeFishingSkill = 192,
|
||||
NumKeys = 193,
|
||||
DeathTimestamp = 194,
|
||||
PkTimestamp = 195,
|
||||
VictimTimestamp = 196,
|
||||
HookGroup = 197,
|
||||
AllegianceSwearTimestamp = 198,
|
||||
[SendOnLogin]
|
||||
HousePurchaseTimestamp = 199,
|
||||
RedirectableEquippedArmorCount = 200,
|
||||
MeleeDefenseImbuedEffectTypeCache = 201,
|
||||
MissileDefenseImbuedEffectTypeCache = 202,
|
||||
MagicDefenseImbuedEffectTypeCache = 203,
|
||||
ElementalDamageBonus = 204,
|
||||
ImbueAttempts = 205,
|
||||
ImbueSuccesses = 206,
|
||||
CreatureKills = 207,
|
||||
PlayerKillsPk = 208,
|
||||
PlayerKillsPkl = 209,
|
||||
RaresTierOne = 210,
|
||||
RaresTierTwo = 211,
|
||||
RaresTierThree = 212,
|
||||
RaresTierFour = 213,
|
||||
RaresTierFive = 214,
|
||||
[SendOnLogin]
|
||||
AugmentationStat = 215,
|
||||
[SendOnLogin]
|
||||
AugmentationFamilyStat = 216,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateFamily = 217,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateStrength = 218,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateEndurance = 219,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateCoordination = 220,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateQuickness = 221,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateFocus = 222,
|
||||
[SendOnLogin]
|
||||
AugmentationInnateSelf = 223,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeSalvaging = 224,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeItemTinkering = 225,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeArmorTinkering = 226,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeMagicItemTinkering = 227,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeWeaponTinkering = 228,
|
||||
[SendOnLogin]
|
||||
AugmentationExtraPackSlot = 229,
|
||||
[SendOnLogin]
|
||||
AugmentationIncreasedCarryingCapacity = 230,
|
||||
[SendOnLogin]
|
||||
AugmentationLessDeathItemLoss = 231,
|
||||
[SendOnLogin]
|
||||
AugmentationSpellsRemainPastDeath = 232,
|
||||
[SendOnLogin]
|
||||
AugmentationCriticalDefense = 233,
|
||||
[SendOnLogin]
|
||||
AugmentationBonusXp = 234,
|
||||
[SendOnLogin]
|
||||
AugmentationBonusSalvage = 235,
|
||||
[SendOnLogin]
|
||||
AugmentationBonusImbueChance = 236,
|
||||
[SendOnLogin]
|
||||
AugmentationFasterRegen = 237,
|
||||
[SendOnLogin]
|
||||
AugmentationIncreasedSpellDuration = 238,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceFamily = 239,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceSlash = 240,
|
||||
[SendOnLogin]
|
||||
AugmentationResistancePierce = 241,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceBlunt = 242,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceAcid = 243,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceFire = 244,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceFrost = 245,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceLightning = 246,
|
||||
RaresTierOneLogin = 247,
|
||||
RaresTierTwoLogin = 248,
|
||||
RaresTierThreeLogin = 249,
|
||||
RaresTierFourLogin = 250,
|
||||
RaresTierFiveLogin = 251,
|
||||
RaresLoginTimestamp = 252,
|
||||
RaresTierSix = 253,
|
||||
RaresTierSeven = 254,
|
||||
RaresTierSixLogin = 255,
|
||||
RaresTierSevenLogin = 256,
|
||||
ItemAttributeLimit = 257,
|
||||
ItemAttributeLevelLimit = 258,
|
||||
ItemAttribute2ndLimit = 259,
|
||||
ItemAttribute2ndLevelLimit = 260,
|
||||
CharacterTitleId = 261,
|
||||
NumCharacterTitles = 262,
|
||||
ResistanceModifierType = 263,
|
||||
FreeTinkersBitfield = 264,
|
||||
EquipmentSetId = 265,
|
||||
PetClass = 266,
|
||||
Lifespan = 267,
|
||||
[Ephemeral]
|
||||
RemainingLifespan = 268,
|
||||
UseCreateQuantity = 269,
|
||||
WieldRequirements2 = 270,
|
||||
WieldSkillType2 = 271,
|
||||
WieldDifficulty2 = 272,
|
||||
WieldRequirements3 = 273,
|
||||
WieldSkillType3 = 274,
|
||||
WieldDifficulty3 = 275,
|
||||
WieldRequirements4 = 276,
|
||||
WieldSkillType4 = 277,
|
||||
WieldDifficulty4 = 278,
|
||||
Unique = 279,
|
||||
SharedCooldown = 280,
|
||||
Faction1Bits = 281,
|
||||
Faction2Bits = 282,
|
||||
Faction3Bits = 283,
|
||||
Hatred1Bits = 284,
|
||||
Hatred2Bits = 285,
|
||||
Hatred3Bits = 286,
|
||||
SocietyRankCelhan = 287,
|
||||
SocietyRankEldweb = 288,
|
||||
SocietyRankRadblo = 289,
|
||||
HearLocalSignals = 290,
|
||||
HearLocalSignalsRadius = 291,
|
||||
Cleaving = 292,
|
||||
[SendOnLogin]
|
||||
AugmentationSpecializeGearcraft = 293,
|
||||
[SendOnLogin]
|
||||
AugmentationInfusedCreatureMagic = 294,
|
||||
[SendOnLogin]
|
||||
AugmentationInfusedItemMagic = 295,
|
||||
[SendOnLogin]
|
||||
AugmentationInfusedLifeMagic = 296,
|
||||
[SendOnLogin]
|
||||
AugmentationInfusedWarMagic = 297,
|
||||
[SendOnLogin]
|
||||
AugmentationCriticalExpertise = 298,
|
||||
[SendOnLogin]
|
||||
AugmentationCriticalPower = 299,
|
||||
[SendOnLogin]
|
||||
AugmentationSkilledMelee = 300,
|
||||
[SendOnLogin]
|
||||
AugmentationSkilledMissile = 301,
|
||||
[SendOnLogin]
|
||||
AugmentationSkilledMagic = 302,
|
||||
ImbuedEffect2 = 303,
|
||||
ImbuedEffect3 = 304,
|
||||
ImbuedEffect4 = 305,
|
||||
ImbuedEffect5 = 306,
|
||||
[SendOnLogin]
|
||||
DamageRating = 307,
|
||||
[SendOnLogin]
|
||||
DamageResistRating = 308,
|
||||
[SendOnLogin]
|
||||
AugmentationDamageBonus = 309,
|
||||
[SendOnLogin]
|
||||
AugmentationDamageReduction = 310,
|
||||
ImbueStackingBits = 311,
|
||||
[SendOnLogin]
|
||||
HealOverTime = 312,
|
||||
[SendOnLogin]
|
||||
CritRating = 313,
|
||||
[SendOnLogin]
|
||||
CritDamageRating = 314,
|
||||
[SendOnLogin]
|
||||
CritResistRating = 315,
|
||||
[SendOnLogin]
|
||||
CritDamageResistRating = 316,
|
||||
[SendOnLogin]
|
||||
HealingResistRating = 317,
|
||||
[SendOnLogin]
|
||||
DamageOverTime = 318,
|
||||
ItemMaxLevel = 319,
|
||||
ItemXpStyle = 320,
|
||||
EquipmentSetExtra = 321,
|
||||
[SendOnLogin]
|
||||
AetheriaBitfield = 322,
|
||||
[SendOnLogin]
|
||||
HealingBoostRating = 323,
|
||||
HeritageSpecificArmor = 324,
|
||||
AlternateRacialSkills = 325,
|
||||
[SendOnLogin]
|
||||
AugmentationJackOfAllTrades = 326,
|
||||
[SendOnLogin]
|
||||
AugmentationResistanceNether = 327,
|
||||
[SendOnLogin]
|
||||
AugmentationInfusedVoidMagic = 328,
|
||||
[SendOnLogin]
|
||||
WeaknessRating = 329,
|
||||
[SendOnLogin]
|
||||
NetherOverTime = 330,
|
||||
[SendOnLogin]
|
||||
NetherResistRating = 331,
|
||||
LuminanceAward = 332,
|
||||
[SendOnLogin]
|
||||
LumAugDamageRating = 333,
|
||||
[SendOnLogin]
|
||||
LumAugDamageReductionRating = 334,
|
||||
[SendOnLogin]
|
||||
LumAugCritDamageRating = 335,
|
||||
[SendOnLogin]
|
||||
LumAugCritReductionRating = 336,
|
||||
[SendOnLogin]
|
||||
LumAugSurgeEffectRating = 337,
|
||||
[SendOnLogin]
|
||||
LumAugSurgeChanceRating = 338,
|
||||
[SendOnLogin]
|
||||
LumAugItemManaUsage = 339,
|
||||
[SendOnLogin]
|
||||
LumAugItemManaGain = 340,
|
||||
[SendOnLogin]
|
||||
LumAugVitality = 341,
|
||||
[SendOnLogin]
|
||||
LumAugHealingRating = 342,
|
||||
[SendOnLogin]
|
||||
LumAugSkilledCraft = 343,
|
||||
[SendOnLogin]
|
||||
LumAugSkilledSpec = 344,
|
||||
[SendOnLogin]
|
||||
LumAugNoDestroyCraft = 345,
|
||||
RestrictInteraction = 346,
|
||||
OlthoiLootTimestamp = 347,
|
||||
OlthoiLootStep = 348,
|
||||
UseCreatesContractId = 349,
|
||||
[SendOnLogin]
|
||||
DotResistRating = 350,
|
||||
[SendOnLogin]
|
||||
LifeResistRating = 351,
|
||||
CloakWeaveProc = 352,
|
||||
WeaponType = 353,
|
||||
[SendOnLogin]
|
||||
MeleeMastery = 354,
|
||||
[SendOnLogin]
|
||||
RangedMastery = 355,
|
||||
SneakAttackRating = 356,
|
||||
RecklessnessRating = 357,
|
||||
DeceptionRating = 358,
|
||||
CombatPetRange = 359,
|
||||
[SendOnLogin]
|
||||
WeaponAuraDamage = 360,
|
||||
[SendOnLogin]
|
||||
WeaponAuraSpeed = 361,
|
||||
[SendOnLogin]
|
||||
SummoningMastery = 362,
|
||||
HeartbeatLifespan = 363,
|
||||
UseLevelRequirement = 364,
|
||||
[SendOnLogin]
|
||||
LumAugAllSkills = 365,
|
||||
UseRequiresSkill = 366,
|
||||
UseRequiresSkillLevel = 367,
|
||||
UseRequiresSkillSpec = 368,
|
||||
UseRequiresLevel = 369,
|
||||
[SendOnLogin]
|
||||
GearDamage = 370,
|
||||
[SendOnLogin]
|
||||
GearDamageResist = 371,
|
||||
[SendOnLogin]
|
||||
GearCrit = 372,
|
||||
[SendOnLogin]
|
||||
GearCritResist = 373,
|
||||
[SendOnLogin]
|
||||
GearCritDamage = 374,
|
||||
[SendOnLogin]
|
||||
GearCritDamageResist = 375,
|
||||
[SendOnLogin]
|
||||
GearHealingBoost = 376,
|
||||
[SendOnLogin]
|
||||
GearNetherResist = 377,
|
||||
[SendOnLogin]
|
||||
GearLifeResist = 378,
|
||||
[SendOnLogin]
|
||||
GearMaxHealth = 379,
|
||||
Unknown380 = 380,
|
||||
[SendOnLogin]
|
||||
PKDamageRating = 381,
|
||||
[SendOnLogin]
|
||||
PKDamageResistRating = 382,
|
||||
[SendOnLogin]
|
||||
GearPKDamageRating = 383,
|
||||
[SendOnLogin]
|
||||
GearPKDamageResistRating = 384,
|
||||
Unknown385 = 385,
|
||||
/// <summary>
|
||||
/// Overpower chance % for endgame creatures.
|
||||
/// </summary>
|
||||
[SendOnLogin]
|
||||
Overpower = 386,
|
||||
[SendOnLogin]
|
||||
OverpowerResist = 387,
|
||||
// Client does not display accurately
|
||||
[SendOnLogin]
|
||||
GearOverpower = 388,
|
||||
// Client does not display accurately
|
||||
[SendOnLogin]
|
||||
GearOverpowerResist = 389,
|
||||
// Number of times a character has enlightened
|
||||
[SendOnLogin]
|
||||
Enlightenment = 390,
|
||||
|
||||
|
||||
// ACE Specific
|
||||
[ServerOnly]
|
||||
PCAPRecordedAutonomousMovement = 8007,
|
||||
[ServerOnly]
|
||||
PCAPRecordedMaxVelocityEstimated = 8030,
|
||||
[ServerOnly]
|
||||
PCAPRecordedPlacement = 8041,
|
||||
[ServerOnly]
|
||||
PCAPRecordedAppraisalPages = 8042,
|
||||
[ServerOnly]
|
||||
PCAPRecordedAppraisalMaxPages = 8043,
|
||||
|
||||
//[ServerOnly]
|
||||
//TotalLogins = 9001,
|
||||
//[ServerOnly]
|
||||
//DeletionTimestamp = 9002,
|
||||
//[ServerOnly]
|
||||
//CharacterOptions1 = 9003,
|
||||
//[ServerOnly]
|
||||
//CharacterOptions2 = 9004,
|
||||
//[ServerOnly]
|
||||
//LootTier = 9005,
|
||||
//[ServerOnly]
|
||||
//GeneratorProbability = 9006,
|
||||
//[ServerOnly]
|
||||
//WeenieType = 9007 // I don't think this property type is needed anymore. We don't store the weenie type in the property bags, we store it as a separate field in the base objects.
|
||||
[ServerOnly]
|
||||
CurrentLoyaltyAtLastLogoff = 9008,
|
||||
[ServerOnly]
|
||||
CurrentLeadershipAtLastLogoff = 9009,
|
||||
[ServerOnly]
|
||||
AllegianceOfficerRank = 9010,
|
||||
[ServerOnly]
|
||||
HouseRentTimestamp = 9011,
|
||||
/// <summary>
|
||||
/// Stores the player's selected hairstyle at creation or after a barber use. This is used only for Gear Knights and Olthoi characters who have more than a single part/texture for a "hairstyle" (BodyStyle)
|
||||
/// </summary>
|
||||
[ServerOnly]
|
||||
Hairstyle = 9012,
|
||||
/// <summary>
|
||||
/// Used to store the calculated Clothing Priority for use with armor reduced items and items like Over-Robes.
|
||||
/// </summary>
|
||||
[Ephemeral][ServerOnly]
|
||||
VisualClothingPriority = 9013,
|
||||
[ServerOnly]
|
||||
SquelchGlobal = 9014,
|
||||
|
||||
/// <summary>
|
||||
/// TODO: This is a place holder for future use. See PlacementPosition
|
||||
/// This is the sort order for items in a container
|
||||
/// </summary>
|
||||
[ServerOnly]
|
||||
InventoryOrder = 9015,
|
||||
|
||||
// Decal Specific
|
||||
WeenieClassId_Decal = 218103808,
|
||||
Icon_Decal_DID = 218103809,
|
||||
Container_Decal_IID = 218103810,
|
||||
Landblock_Decal = 218103811,
|
||||
ItemSlots_Decal = 218103812,
|
||||
PackSlots_Decal = 218103813,
|
||||
StackCount_Decal = 218103814,
|
||||
StackMax_Decal = 218103815,
|
||||
Spell_Decal_DID = 218103816,
|
||||
SlotLegacy_Decal = 218103817,
|
||||
Wielder_Decal_IID = 218103818,
|
||||
WieldingSlot_Decal = 218103819,
|
||||
Monarch_Decal_IID = 218103820,
|
||||
Coverage_Decal = 218103821,
|
||||
EquipableSlots_Decal = 218103822,
|
||||
EquipType_Decal = 218103823,
|
||||
IconOutline_Decal = 218103824,
|
||||
MissileType_Decal = 218103825,
|
||||
UsageMask_Decal = 218103826,
|
||||
HouseOwner_Decal_IID = 218103827,
|
||||
HookMask_Decal = 218103828,
|
||||
HookType_Decal = 218103829,
|
||||
Setup_Decal_DID = 218103830,
|
||||
ObjectDescriptionFlags_Decal = 218103831,
|
||||
CreateFlags1_Decal = 218103832,
|
||||
CreateFlags2_Decal = 218103833,
|
||||
Category_Decal = 218103834,
|
||||
Behavior_Decal = 218103835,
|
||||
MagicDef_Decal = 218103836,
|
||||
SpecialProps_Decal = 218103837,
|
||||
SpellCount_Decal = 218103838,
|
||||
WeapSpeed_Decal = 218103839,
|
||||
EquipSkill_Decal = 218103840,
|
||||
DamageType_Decal = 218103841,
|
||||
MaxDamage_Decal = 218103842,
|
||||
Unknown10_Decal = 218103843, // CurrentWieldLocation?
|
||||
Unknown100000_Decal = 218103844, // RadarBlipColor ???
|
||||
Unknown800000_Decal = 218103845,
|
||||
Unknown8000000_Decal = 218103846,
|
||||
PhysicsDataFlags_Decal = 218103847,
|
||||
ActiveSpellCount_Decal = 218103848,
|
||||
IconOverlay_Decal_DID = 218103849,
|
||||
IconUnderlay_Decal_DID = 218103850,
|
||||
Slot_Decal = 231735296,
|
||||
}
|
||||
|
||||
public static class IntValueKeyTools
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a decal specific IntValueKey to the actual IntValueKey.
|
||||
/// If this is not an IntValueKey, 0 will be returned.
|
||||
/// </summary>
|
||||
public static uint ConvertToInt(IntValueKey input)
|
||||
{
|
||||
if (input == IntValueKey.Category_Decal) return (int)IntValueKey.ItemType;
|
||||
if (input == IntValueKey.Coverage_Decal) return (int)IntValueKey.ClothingPriority;
|
||||
if (input == IntValueKey.ItemSlots_Decal) return (int)IntValueKey.ItemsCapacity;
|
||||
if (input == IntValueKey.PackSlots_Decal) return (int)IntValueKey.ContainersCapacity;
|
||||
if (input == IntValueKey.EquipableSlots_Decal) return (int)IntValueKey.ValidLocations;
|
||||
//if (input == IntValueKey.WieldingSlot_Decal) return (int)IntValueKey.CurrentWieldedLocation;
|
||||
if (input == IntValueKey.StackMax_Decal) return (int)IntValueKey.MaxStackSize;
|
||||
if (input == IntValueKey.StackCount_Decal) return (int)IntValueKey.StackSize;
|
||||
if (input == IntValueKey.IconOutline_Decal) return (int)IntValueKey.UiEffects;
|
||||
if (input == IntValueKey.MaxDamage_Decal) return (int)IntValueKey.Damage;
|
||||
if (input == IntValueKey.DamageType_Decal) return (int)IntValueKey.DamageType;
|
||||
if (input == IntValueKey.EquipSkill_Decal) return (int)IntValueKey.WeaponSkill;
|
||||
if (input == IntValueKey.WeapSpeed_Decal) return (int)IntValueKey.WeaponTime;
|
||||
if (input == IntValueKey.MissileType_Decal) return (int)IntValueKey.AmmoType;
|
||||
if (input == IntValueKey.EquipType_Decal) return (int)IntValueKey.CombatUse;
|
||||
if (input == IntValueKey.UsageMask_Decal) return (int)IntValueKey.TargetType;
|
||||
if (input == IntValueKey.HookMask_Decal) return (int)IntValueKey.HookType;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If input is not a IID, 0 will be returned
|
||||
/// </summary>
|
||||
public static uint ConvertToIID(IntValueKey input)
|
||||
{
|
||||
if (input == IntValueKey.Container_Decal_IID) return 2; // CONTAINER_IID
|
||||
if (input == IntValueKey.Wielder_Decal_IID) return 3; // WIELDER_IID
|
||||
if (input == IntValueKey.Monarch_Decal_IID) return 26; // MONARCH_IID
|
||||
if (input == IntValueKey.HouseOwner_Decal_IID) return 32; // HOUSE_OWNER_IID
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If input is not a DID, 0 will be returned
|
||||
/// </summary>
|
||||
public static uint ConvertToDID(IntValueKey input)
|
||||
{
|
||||
if (input == IntValueKey.Setup_Decal_DID) return 1; // SETUP_DID
|
||||
if (input == IntValueKey.Icon_Decal_DID) return 8; // ICON_DID
|
||||
if (input == IntValueKey.Spell_Decal_DID) return 28; // SPELL_DID
|
||||
if (input == IntValueKey.IconOverlay_Decal_DID) return 50; // ICON_OVERLAY_DID
|
||||
if (input == IntValueKey.IconUnderlay_Decal_DID) return 52; // ICON_UNDERLAY_DID
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
54
Shared/Constants/ItemType.cs
Normal file
54
Shared/Constants/ItemType.cs
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
using System;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
[Flags]
|
||||
public enum ItemType : uint
|
||||
{
|
||||
None = 0x00000000,
|
||||
MeleeWeapon = 0x00000001,
|
||||
Armor = 0x00000002,
|
||||
Clothing = 0x00000004,
|
||||
Jewelry = 0x00000008,
|
||||
Creature = 0x00000010,
|
||||
Food = 0x00000020,
|
||||
Money = 0x00000040,
|
||||
Misc = 0x00000080,
|
||||
MissileWeapon = 0x00000100,
|
||||
Container = 0x00000200,
|
||||
Useless = 0x00000400,
|
||||
Gem = 0x00000800,
|
||||
SpellComponents = 0x00001000,
|
||||
Writable = 0x00002000,
|
||||
Key = 0x00004000,
|
||||
Caster = 0x00008000,
|
||||
Portal = 0x00010000,
|
||||
Lockable = 0x00020000,
|
||||
PromissoryNote = 0x00040000,
|
||||
ManaStone = 0x00080000,
|
||||
Service = 0x00100000,
|
||||
MagicWieldable = 0x00200000,
|
||||
CraftCookingBase = 0x00400000,
|
||||
CraftAlchemyBase = 0x00800000,
|
||||
CraftFletchingBase = 0x02000000,
|
||||
CraftAlchemyIntermediate = 0x04000000,
|
||||
CraftFletchingIntermediate = 0x08000000,
|
||||
LifeStone = 0x10000000,
|
||||
TinkeringTool = 0x20000000,
|
||||
TinkeringMaterial = 0x40000000,
|
||||
Gameboard = 0x80000000,
|
||||
|
||||
PortalMagicTarget = Portal | LifeStone,
|
||||
LockableMagicTarget = Misc | Container,
|
||||
Vestements = Armor | Clothing,
|
||||
Weapon = MeleeWeapon | MissileWeapon,
|
||||
WeaponOrCaster = MeleeWeapon | MissileWeapon | Caster,
|
||||
Item = MeleeWeapon | Armor | Clothing | Jewelry | Food | Money | Misc | MissileWeapon | Container |
|
||||
Gem | SpellComponents | Writable | Key | Caster | Portal | PromissoryNote | ManaStone | MagicWieldable,
|
||||
RedirectableItemEnchantmentTarget = MeleeWeapon | Armor | Clothing | MissileWeapon | Caster,
|
||||
ItemEnchantableTarget = MeleeWeapon | Armor | Clothing | Jewelry | Misc | MissileWeapon | Container | Gem | Caster | ManaStone,
|
||||
VendorShopKeep = MeleeWeapon | Armor | Clothing | Food | Misc | MissileWeapon | Container | Useless | Writable | Key |
|
||||
PromissoryNote | CraftFletchingIntermediate | TinkeringMaterial,
|
||||
VendorGrocer = Food | Container | Writable | Key | PromissoryNote | CraftCookingBase
|
||||
}
|
||||
}
|
||||
80
Shared/Constants/MaterialType.cs
Normal file
80
Shared/Constants/MaterialType.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
public enum MaterialType : uint
|
||||
{
|
||||
Unknown = 0x00000000,
|
||||
Ceramic = 0x00000001,
|
||||
Porcelain = 0x00000002,
|
||||
Linen = 0x00000004,
|
||||
Satin = 0x00000005,
|
||||
Silk = 0x00000006,
|
||||
Velvet = 0x00000007,
|
||||
Wool = 0x00000008,
|
||||
Agate = 0x0000000A,
|
||||
Amber = 0x0000000B,
|
||||
Amethyst = 0x0000000C,
|
||||
Aquamarine = 0x0000000D,
|
||||
Azurite = 0x0000000E,
|
||||
BlackGarnet = 0x0000000F,
|
||||
BlackOpal = 0x00000010,
|
||||
Bloodstone = 0x00000011,
|
||||
Carnelian = 0x00000012,
|
||||
Citrine = 0x00000013,
|
||||
Diamond = 0x00000014,
|
||||
Emerald = 0x00000015,
|
||||
FireOpal = 0x00000016,
|
||||
GreenGarnet = 0x00000017,
|
||||
GreenJade = 0x00000018,
|
||||
Hematite = 0x00000019,
|
||||
ImperialTopaz = 0x0000001A,
|
||||
Jet = 0x0000001B,
|
||||
LapisLazuli = 0x0000001C,
|
||||
LavenderJade = 0x0000001D,
|
||||
Malachite = 0x0000001E,
|
||||
Moonstone = 0x0000001F,
|
||||
Onyx = 0x00000020,
|
||||
Opal = 0x00000021,
|
||||
Peridot = 0x00000022,
|
||||
RedGarnet = 0x00000023,
|
||||
RedJade = 0x00000024,
|
||||
RoseQuartz = 0x00000025,
|
||||
Ruby = 0x00000026,
|
||||
Sapphire = 0x00000027,
|
||||
SmokeyQuartz = 0x00000028,
|
||||
Sunstone = 0x00000029,
|
||||
TigerEye = 0x0000002A,
|
||||
Tourmaline = 0x0000002B,
|
||||
Turquoise = 0x0000002C,
|
||||
WhiteJade = 0x0000002D,
|
||||
WhiteQuartz = 0x0000002E,
|
||||
WhiteSapphire = 0x0000002F,
|
||||
YellowGarnet = 0x00000030,
|
||||
YellowTopaz = 0x00000031,
|
||||
Zircon = 0x00000032,
|
||||
Ivory = 0x00000033,
|
||||
Leather = 0x00000034,
|
||||
ArmoredilloHide = 0x00000035,
|
||||
GromnieHide = 0x00000036,
|
||||
ReedSharkHide = 0x00000037,
|
||||
Brass = 0x00000039,
|
||||
Bronze = 0x0000003A,
|
||||
Copper = 0x0000003B,
|
||||
Gold = 0x0000003C,
|
||||
Iron = 0x0000003D,
|
||||
Pyreal = 0x0000003E,
|
||||
Silver = 0x0000003F,
|
||||
Steel = 0x00000040,
|
||||
Alabaster = 0x00000042,
|
||||
Granite = 0x00000043,
|
||||
Marble = 0x00000044,
|
||||
Obsidian = 0x00000045,
|
||||
Sandstone = 0x00000046,
|
||||
Serpentine = 0x00000047,
|
||||
Ebony = 0x00000049,
|
||||
Mahogany = 0x0000004A,
|
||||
Oak = 0x0000004B,
|
||||
Pine = 0x0000004C,
|
||||
Teak = 0x0000004D,
|
||||
}
|
||||
}
|
||||
33
Shared/Constants/QuadValueKey.cs
Normal file
33
Shared/Constants/QuadValueKey.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
// https://github.com/ACEmulator/ACE/blob/master/Source/ACE.Entity/Enum/Properties/PropertyInt64.cs
|
||||
public enum QuadValueKey
|
||||
{
|
||||
Undef = 0,
|
||||
[SendOnLogin]
|
||||
TotalExperience = 1,
|
||||
[SendOnLogin]
|
||||
AvailableExperience = 2,
|
||||
AugmentationCost = 3,
|
||||
ItemTotalXp = 4,
|
||||
ItemBaseXp = 5,
|
||||
[SendOnLogin]
|
||||
AvailableLuminance = 6,
|
||||
[SendOnLogin]
|
||||
MaximumLuminance = 7,
|
||||
InteractionReqs = 8,
|
||||
|
||||
|
||||
// ACE Specific
|
||||
/* custom */
|
||||
[ServerOnly]
|
||||
AllegianceXPCached = 9000,
|
||||
[ServerOnly]
|
||||
AllegianceXPGenerated = 9001,
|
||||
[ServerOnly]
|
||||
AllegianceXPReceived = 9002,
|
||||
[ServerOnly]
|
||||
VerifyXp = 9003
|
||||
}
|
||||
}
|
||||
11
Shared/Constants/SendOnLoginAttribute.cs
Normal file
11
Shared/Constants/SendOnLoginAttribute.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// These are properties that aren't saved to the shard.
|
||||
/// </summary>
|
||||
public class SendOnLoginAttribute : Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
11
Shared/Constants/ServerOnlyAttribute.cs
Normal file
11
Shared/Constants/ServerOnlyAttribute.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// These are properties that aren't saved to the shard.
|
||||
/// </summary>
|
||||
public class ServerOnlyAttribute : Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
67
Shared/Constants/Skill.cs
Normal file
67
Shared/Constants/Skill.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// note: even though these are unnumbered, order is very important. values of "none" or commented
|
||||
/// as retired or unused --ABSOLUTELY CANNOT-- be removed. Skills that are none, retired, or not
|
||||
/// implemented have been removed from the SkillHelper.ValidSkills hashset below.
|
||||
/// </summary>
|
||||
public enum Skill
|
||||
{
|
||||
None,
|
||||
Axe, /* Retired */
|
||||
Bow, /* Retired */
|
||||
Crossbow, /* Retired */
|
||||
Dagger, /* Retired */
|
||||
Mace, /* Retired */
|
||||
MeleeDefense,
|
||||
MissileDefense,
|
||||
Sling, /* Retired */
|
||||
Spear, /* Retired */
|
||||
Staff, /* Retired */
|
||||
Sword, /* Retired */
|
||||
ThrownWeapon, /* Retired */
|
||||
UnarmedCombat, /* Retired */
|
||||
ArcaneLore,
|
||||
MagicDefense,
|
||||
ManaConversion,
|
||||
Spellcraft, /* Unimplemented */
|
||||
ItemTinkering,
|
||||
AssessPerson,
|
||||
Deception,
|
||||
Healing,
|
||||
Jump,
|
||||
Lockpick,
|
||||
Run,
|
||||
Awareness, /* Unimplemented */
|
||||
ArmsAndArmorRepair, /* Unimplemented */
|
||||
AssessCreature,
|
||||
WeaponTinkering,
|
||||
ArmorTinkering,
|
||||
MagicItemTinkering,
|
||||
CreatureEnchantment,
|
||||
ItemEnchantment,
|
||||
LifeMagic,
|
||||
WarMagic,
|
||||
Leadership,
|
||||
Loyalty,
|
||||
Fletching,
|
||||
Alchemy,
|
||||
Cooking,
|
||||
Salvaging,
|
||||
TwoHandedCombat,
|
||||
Gearcraft, /* Retired */
|
||||
VoidMagic,
|
||||
HeavyWeapons,
|
||||
LightWeapons,
|
||||
FinesseWeapons,
|
||||
MissileWeapons,
|
||||
Shield,
|
||||
DualWield,
|
||||
Recklessness,
|
||||
SneakAttack,
|
||||
DirtyFighting,
|
||||
Challenge, /* Unimplemented */
|
||||
Summoning
|
||||
}
|
||||
}
|
||||
707
Shared/Constants/SpellCategory.cs
Normal file
707
Shared/Constants/SpellCategory.cs
Normal file
|
|
@ -0,0 +1,707 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
public enum SpellCategory
|
||||
{
|
||||
Undefined,
|
||||
Strength_Raising,
|
||||
Strength_Lowering,
|
||||
Endurance_Raising,
|
||||
Endurance_Lowering,
|
||||
Quickness_Raising,
|
||||
Quickness_Lowering,
|
||||
Coordination_Raising,
|
||||
Coordination_Lowering,
|
||||
Focus_Raising,
|
||||
Focus_Lowering,
|
||||
Self_Raising,
|
||||
Self_Lowering,
|
||||
Focus_Concentration,
|
||||
Focus_Disruption,
|
||||
Focus_Brilliance,
|
||||
Focus_Dullness,
|
||||
Axe_Raising,
|
||||
Axe_Lowering,
|
||||
Bow_Raising,
|
||||
Bow_Lowering,
|
||||
Crossbow_Raising,
|
||||
Crossbow_Lowering,
|
||||
Dagger_Raising,
|
||||
Dagger_Lowering,
|
||||
Mace_Raising,
|
||||
Mace_Lowering,
|
||||
Spear_Raising,
|
||||
Spear_Lowering,
|
||||
Staff_Raising,
|
||||
Staff_Lowering,
|
||||
Sword_Raising,
|
||||
Sword_Lowering,
|
||||
Thrown_Weapons_Raising,
|
||||
Thrown_Weapons_Lowering,
|
||||
Unarmed_Combat_Raising,
|
||||
Unarmed_Combat_Lowering,
|
||||
Melee_Defense_Raising,
|
||||
Melee_Defense_Lowering,
|
||||
Missile_Defense_Raising,
|
||||
Missile_Defense_Lowering,
|
||||
Magic_Defense_Raising,
|
||||
Magic_Defense_Lowering,
|
||||
Creature_Enchantment_Raising,
|
||||
Creature_Enchantment_Lowering,
|
||||
Item_Enchantment_Raising,
|
||||
Item_Enchantment_Lowering,
|
||||
Life_Magic_Raising,
|
||||
Life_Magic_Lowering,
|
||||
War_Magic_Raising,
|
||||
War_Magic_Lowering,
|
||||
Mana_Conversion_Raising,
|
||||
Mana_Conversion_Lowering,
|
||||
Arcane_Lore_Raising,
|
||||
Arcane_Lore_Lowering,
|
||||
Appraise_Armor_Raising,
|
||||
Appraise_Armor_Lowering,
|
||||
Appraise_Item_Raising,
|
||||
Appraise_Item_Lowering,
|
||||
Appraise_Magic_Item_Raising,
|
||||
Appraise_Magic_Item_Lowering,
|
||||
Appraise_Weapon_Raising,
|
||||
Appraise_Weapon_Lowering,
|
||||
Assess_Monster_Raising,
|
||||
Assess_Monster_Lowering,
|
||||
Deception_Raising,
|
||||
Deception_Lowering,
|
||||
Healing_Raising,
|
||||
Healing_Lowering,
|
||||
Jump_Raising,
|
||||
Jump_Lowering,
|
||||
Leadership_Raising,
|
||||
Leadership_Lowering,
|
||||
Lockpick_Raising,
|
||||
Lockpick_Lowering,
|
||||
Loyalty_Raising,
|
||||
Loyalty_Lowering,
|
||||
Run_Raising,
|
||||
Run_Lowering,
|
||||
Health_Raising,
|
||||
Health_Lowering,
|
||||
Stamina_Raising,
|
||||
Stamina_Lowering,
|
||||
Mana_Raising,
|
||||
Mana_Lowering,
|
||||
Mana_Remedy,
|
||||
Mana_Malediction,
|
||||
Health_Transfer_to_caster,
|
||||
Health_Transfer_from_caster,
|
||||
Stamina_Transfer_to_caster,
|
||||
Stamina_Transfer_from_caster,
|
||||
Mana_Transfer_to_caster,
|
||||
Mana_Transfer_from_caster,
|
||||
Health_Accelerating,
|
||||
Health_Decelerating,
|
||||
Stamina_Accelerating,
|
||||
Stamina_Decelerating,
|
||||
Mana_Accelerating,
|
||||
Mana_Decelerating,
|
||||
Vitae_Raising,
|
||||
Vitae_Lowering,
|
||||
Acid_Protection,
|
||||
Acid_Vulnerability,
|
||||
Bludgeon_Protection,
|
||||
Bludgeon_Vulnerability,
|
||||
Cold_Protection,
|
||||
Cold_Vulnerability,
|
||||
Electric_Protection,
|
||||
Electric_Vulnerability,
|
||||
Fire_Protection,
|
||||
Fire_Vulnerability,
|
||||
Pierce_Protection,
|
||||
Pierce_Vulnerability,
|
||||
Slash_Protection,
|
||||
Slash_Vulnerability,
|
||||
Armor_Raising,
|
||||
Armor_Lowering,
|
||||
Acid_Missile,
|
||||
Bludgeoning_Missile,
|
||||
Cold_Missile,
|
||||
Electric_Missile,
|
||||
Fire_Missile,
|
||||
Piercing_Missile,
|
||||
Slashing_Missile,
|
||||
Acid_Seeker,
|
||||
Bludgeoning_Seeker,
|
||||
Cold_Seeker,
|
||||
Electric_Seeker,
|
||||
Fire_Seeker,
|
||||
Piercing_Seeker,
|
||||
Slashing_Seeker,
|
||||
Acid_Burst,
|
||||
Bludgeoning_Burst,
|
||||
Cold_Burst,
|
||||
Electric_Burst,
|
||||
Fire_Burst,
|
||||
Piercing_Burst,
|
||||
Slashing_Burst,
|
||||
Acid_Blast,
|
||||
Bludgeoning_Blast,
|
||||
Cold_Blast,
|
||||
Electric_Blast,
|
||||
Fire_Blast,
|
||||
Piercing_Blast,
|
||||
Slashing_Blast,
|
||||
Acid_Scatter,
|
||||
Bludgeoning_Scatter,
|
||||
Cold_Scatter,
|
||||
Electric_Scatter,
|
||||
Fire_Scatter,
|
||||
Piercing_Scatter,
|
||||
Slashing_Scatter,
|
||||
Attack_Mod_Raising,
|
||||
Attack_Mod_Lowering,
|
||||
Damage_Raising,
|
||||
Damage_Lowering,
|
||||
Defense_Mod_Raising,
|
||||
Defense_Mod_Lowering,
|
||||
Weapon_Time_Raising,
|
||||
Weapon_Time_Lowering,
|
||||
Armor_Value_Raising,
|
||||
Armor_Value_Lowering,
|
||||
Acid_Resistance_Raising,
|
||||
Acid_Resistance_Lowering,
|
||||
Bludgeon_Resistance_Raising,
|
||||
Bludgeon_Resistance_Lowering,
|
||||
Cold_Resistance_Raising,
|
||||
Cold_Resistance_Lowering,
|
||||
Electric_Resistance_Raising,
|
||||
Electric_Resistance_Lowering,
|
||||
Fire_Resistance_Raising,
|
||||
Fire_Resistance_Lowering,
|
||||
Pierce_Resistance_Raising,
|
||||
Pierce_Resistance_Lowering,
|
||||
Slash_Resistance_Raising,
|
||||
Slash_Resistance_Lowering,
|
||||
Bludgeoning_Resistance_Raising,
|
||||
Bludgeoning_Resistance_Lowering,
|
||||
Slashing_Resistance_Raising,
|
||||
Slashing_Resistance_Lowering,
|
||||
Piercing_Resistance_Raising,
|
||||
Piercing_Resistance_Lowering,
|
||||
Electrical_Resistance_Raising,
|
||||
Electrical_Resistance_Lowering,
|
||||
Frost_Resistance_Raising,
|
||||
Frost_Resistance_Lowering,
|
||||
Flame_Resistance_Raising,
|
||||
Flame_Resistance_Lowering,
|
||||
Acidic_Resistance_Raising,
|
||||
Acidic_Resistance_Lowering,
|
||||
Armor_Level_Raising,
|
||||
Armor_Level_Lowering,
|
||||
Lockpick_Resistance_Raising,
|
||||
Lockpick_Resistance_Lowering,
|
||||
Appraisal_Resistance_Raising,
|
||||
Appraisal_Resistance_Lowering,
|
||||
Vision_Raising,
|
||||
Vision_Lowering,
|
||||
Transparency_Raising,
|
||||
Transparency_Lowering,
|
||||
Portal_Tie,
|
||||
Portal_Recall,
|
||||
Portal_Creation,
|
||||
Portal_Item_Creation,
|
||||
Vitae,
|
||||
Assess_Person_Raising,
|
||||
Assess_Person_Lowering,
|
||||
Acid_Volley,
|
||||
Bludgeoning_Volley,
|
||||
Frost_Volley,
|
||||
Lightning_Volley,
|
||||
Flame_Volley,
|
||||
Force_Volley,
|
||||
Blade_Volley,
|
||||
Portal_Sending,
|
||||
Lifestone_Sending,
|
||||
Cooking_Raising,
|
||||
Cooking_Lowering,
|
||||
Fletching_Raising,
|
||||
Fletching_Lowering,
|
||||
Alchemy_Lowering,
|
||||
Alchemy_Raising,
|
||||
Acid_Ring,
|
||||
Bludgeoning_Ring,
|
||||
Cold_Ring,
|
||||
Electric_Ring,
|
||||
Fire_Ring,
|
||||
Piercing_Ring,
|
||||
Slashing_Ring,
|
||||
Acid_Wall,
|
||||
Bludgeoning_Wall,
|
||||
Cold_Wall,
|
||||
Electric_Wall,
|
||||
Fire_Wall,
|
||||
Piercing_Wall,
|
||||
Slashing_Wall,
|
||||
Acid_Strike,
|
||||
Bludgeoning_Strike,
|
||||
Cold_Strike,
|
||||
Electric_Strike,
|
||||
Fire_Strike,
|
||||
Piercing_Strike,
|
||||
Slashing_Strike,
|
||||
Acid_Streak,
|
||||
Bludgeoning_Streak,
|
||||
Cold_Streak,
|
||||
Electric_Streak,
|
||||
Fire_Streak,
|
||||
Piercing_Streak,
|
||||
Slashing_Streak,
|
||||
Dispel,
|
||||
Creature_Mystic_Raising,
|
||||
Creature_Mystic_Lowering,
|
||||
Item_Mystic_Raising,
|
||||
Item_Mystic_Lowering,
|
||||
War_Mystic_Raising,
|
||||
War_Mystic_Lowering,
|
||||
Health_Restoring,
|
||||
Health_Depleting,
|
||||
Mana_Restoring,
|
||||
Mana_Depleting,
|
||||
Strength_Increase,
|
||||
Strength_Decrease,
|
||||
Endurance_Increase,
|
||||
Endurance_Decrease,
|
||||
Quickness_Increase,
|
||||
Quickness_Decrease,
|
||||
Coordination_Increase,
|
||||
Coordination_Decrease,
|
||||
Focus_Increase,
|
||||
Focus_Decrease,
|
||||
Self_Increase,
|
||||
Self_Decrease,
|
||||
GreatVitality_Raising,
|
||||
PoorVitality_Lowering,
|
||||
GreatVigor_Raising,
|
||||
PoorVigor_Lowering,
|
||||
GreaterIntellect_Raising,
|
||||
LessorIntellect_Lowering,
|
||||
LifeGiver_Raising,
|
||||
LifeTaker_Lowering,
|
||||
StaminaGiver_Raising,
|
||||
StaminaTaker_Lowering,
|
||||
ManaGiver_Raising,
|
||||
ManaTaker_Lowering,
|
||||
Acid_Ward_Protection,
|
||||
Acid_Ward_Vulnerability,
|
||||
Fire_Ward_Protection,
|
||||
Fire_Ward_Vulnerability,
|
||||
Cold_Ward_Protection,
|
||||
Cold_Ward_Vulnerability,
|
||||
Electric_Ward_Protection,
|
||||
Electric_Ward_Vulnerability,
|
||||
Leadership_Obedience_Raising,
|
||||
Leadership_Obedience_Lowering,
|
||||
Melee_Defense_Shelter_Raising,
|
||||
Melee_Defense_Shelter_Lowering,
|
||||
Missile_Defense_Shelter_Raising,
|
||||
Missile_Defense_Shelter_Lowering,
|
||||
Magic_Defense_Shelter_Raising,
|
||||
Magic_Defense_Shelter_Lowering,
|
||||
HuntersAcumen_Raising,
|
||||
HuntersAcumen_Lowering,
|
||||
StillWater_Raising,
|
||||
StillWater_Lowering,
|
||||
StrengthofEarth_Raising,
|
||||
StrengthofEarth_Lowering,
|
||||
Torrent_Raising,
|
||||
Torrent_Lowering,
|
||||
Growth_Raising,
|
||||
Growth_Lowering,
|
||||
CascadeAxe_Raising,
|
||||
CascadeAxe_Lowering,
|
||||
CascadeDagger_Raising,
|
||||
CascadeDagger_Lowering,
|
||||
CascadeMace_Raising,
|
||||
CascadeMace_Lowering,
|
||||
CascadeSpear_Raising,
|
||||
CascadeSpear_Lowering,
|
||||
CascadeStaff_Raising,
|
||||
CascadeStaff_Lowering,
|
||||
StoneCliffs_Raising,
|
||||
StoneCliffs_Lowering,
|
||||
MaxDamage_Raising,
|
||||
MaxDamage_Lowering,
|
||||
Bow_Damage_Raising,
|
||||
Bow_Damage_Lowering,
|
||||
Bow_Range_Raising,
|
||||
Bow_Range_Lowering,
|
||||
Extra_Defense_Mod_Raising,
|
||||
Extra_Defense_Mod_Lowering,
|
||||
Extra_Bow_Skill_Raising,
|
||||
Extra_Bow_Skill_Lowering,
|
||||
Extra_Alchemy_Skill_Raising,
|
||||
Extra_Alchemy_Skill_Lowering,
|
||||
Extra_Arcane_Lore_Skill_Raising,
|
||||
Extra_Arcane_Lore_Skill_Lowering,
|
||||
Extra_Appraise_Armor_Skill_Raising,
|
||||
Extra_Appraise_Armor_Skill_Lowering,
|
||||
Extra_Cooking_Skill_Raising,
|
||||
Extra_Cooking_Skill_Lowering,
|
||||
Extra_Crossbow_Skill_Raising,
|
||||
Extra_Crossbow_Skill_Lowering,
|
||||
Extra_Deception_Skill_Raising,
|
||||
Extra_Deception_Skill_Lowering,
|
||||
Extra_Loyalty_Skill_Raising,
|
||||
Extra_Loyalty_Skill_Lowering,
|
||||
Extra_Fletching_Skill_Raising,
|
||||
Extra_Fletching_Skill_Lowering,
|
||||
Extra_Healing_Skill_Raising,
|
||||
Extra_Healing_Skill_Lowering,
|
||||
Extra_Melee_Defense_Skill_Raising,
|
||||
Extra_Melee_Defense_Skill_Lowering,
|
||||
Extra_Appraise_Item_Skill_Raising,
|
||||
Extra_Appraise_Item_Skill_Lowering,
|
||||
Extra_Jumping_Skill_Raising,
|
||||
Extra_Jumping_Skill_Lowering,
|
||||
Extra_Life_Magic_Skill_Raising,
|
||||
Extra_Life_Magic_Skill_Lowering,
|
||||
Extra_Lockpick_Skill_Raising,
|
||||
Extra_Lockpick_Skill_Lowering,
|
||||
Extra_Appraise_Magic_Item_Skill_Raising,
|
||||
Extra_Appraise_Magic_Item_Skill_Lowering,
|
||||
Extra_Mana_Conversion_Skill_Raising,
|
||||
Extra_Mana_Conversion_Skill_Lowering,
|
||||
Extra_Assess_Creature_Skill_Raising,
|
||||
Extra_Assess_Creature_Skill_Lowering,
|
||||
Extra_Assess_Person_Skill_Raising,
|
||||
Extra_Assess_Person_Skill_Lowering,
|
||||
Extra_Run_Skill_Raising,
|
||||
Extra_Run_Skill_Lowering,
|
||||
Extra_Sword_Skill_Raising,
|
||||
Extra_Sword_Skill_Lowering,
|
||||
Extra_Thrown_Weapons_Skill_Raising,
|
||||
Extra_Thrown_Weapons_Skill_Lowering,
|
||||
Extra_Unarmed_Combat_Skill_Raising,
|
||||
Extra_Unarmed_Combat_Skill_Lowering,
|
||||
Extra_Appraise_Weapon_Skill_Raising,
|
||||
Extra_Appraise_Weapon_Skill_Lowering,
|
||||
Armor_Increase,
|
||||
Armor_Decrease,
|
||||
Extra_Acid_Resistance_Raising,
|
||||
Extra_Acid_Resistance_Lowering,
|
||||
Extra_Bludgeon_Resistance_Raising,
|
||||
Extra_Bludgeon_Resistance_Lowering,
|
||||
Extra_Fire_Resistance_Raising,
|
||||
Extra_Fire_Resistance_Lowering,
|
||||
Extra_Cold_Resistance_Raising,
|
||||
Extra_Cold_Resistance_Lowering,
|
||||
Extra_Attack_Mod_Raising,
|
||||
Extra_Attack_Mod_Lowering,
|
||||
Extra_Armor_Value_Raising,
|
||||
Extra_Armor_Value_Lowering,
|
||||
Extra_Pierce_Resistance_Raising,
|
||||
Extra_Pierce_Resistance_Lowering,
|
||||
Extra_Slash_Resistance_Raising,
|
||||
Extra_Slash_Resistance_Lowering,
|
||||
Extra_Electric_Resistance_Raising,
|
||||
Extra_Electric_Resistance_Lowering,
|
||||
Extra_Weapon_Time_Raising,
|
||||
Extra_Weapon_Time_Lowering,
|
||||
Bludgeon_Ward_Protection,
|
||||
Bludgeon_Ward_Vulnerability,
|
||||
Slash_Ward_Protection,
|
||||
Slash_Ward_Vulnerability,
|
||||
Pierce_Ward_Protection,
|
||||
Pierce_Ward_Vulnerability,
|
||||
Stamina_Restoring,
|
||||
Stamina_Depleting,
|
||||
Fireworks,
|
||||
Health_Divide,
|
||||
Stamina_Divide,
|
||||
Mana_Divide,
|
||||
Coordination_Increase2,
|
||||
Strength_Increase2,
|
||||
Focus_Increase2,
|
||||
Endurance_Increase2,
|
||||
Self_Increase2,
|
||||
Melee_Defense_Multiply,
|
||||
Missile_Defense_Multiply,
|
||||
Magic_Defense_Multiply,
|
||||
Attributes_Decrease,
|
||||
LifeGiver_Raising2,
|
||||
Item_Enchantment_Raising2,
|
||||
Skills_Decrease,
|
||||
Extra_Mana_Conversion_Bonus,
|
||||
War_Mystic_Raising2,
|
||||
War_Mystic_Lowering2,
|
||||
Magic_Defense_Shelter_Raising2,
|
||||
Extra_Life_Magic_Skill_Raising2,
|
||||
Creature_Mystic_Raising2,
|
||||
Item_Mystic_Raising2,
|
||||
Mana_Raising2,
|
||||
Self_Raising2,
|
||||
CreatureEnchantment_Raising2,
|
||||
Salvaging_Raising,
|
||||
Extra_Salvaging_Raising,
|
||||
Extra_Salvaging_Raising2,
|
||||
CascadeAxe_Raising2,
|
||||
Extra_Bow_Skill_Raising2,
|
||||
Extra_Thrown_Weapons_Skill_Raising2,
|
||||
Extra_Crossbow_Skill_Raising2,
|
||||
CascadeDagger_Raising2,
|
||||
CascadeMace_Raising2,
|
||||
Extra_Unarmed_Combat_Skill_Raising2,
|
||||
CascadeSpear_Raising2,
|
||||
CascadeStaff_Raising2,
|
||||
Extra_Sword_Skill_Raising2,
|
||||
Acid_Protection_Rare,
|
||||
Acid_Resistance_Raising_Rare,
|
||||
Alchemy_Raising_Rare,
|
||||
Appraisal_Resistance_Lowering_Rare,
|
||||
Appraise_Armor_Raising_Rare,
|
||||
Appraise_Item_Raising_Rare,
|
||||
Appraise_Magic_Item_Raising_Rare,
|
||||
Appraise_Weapon_Raising_Rare,
|
||||
Arcane_Lore_Raising_Rare,
|
||||
Armor_Raising_Rare,
|
||||
Armor_Value_Raising_Rare,
|
||||
Assess_Monster_Raising_Rare,
|
||||
Assess_Person_Raising_Rare,
|
||||
Attack_Mod_Raising_Rare,
|
||||
Axe_Raising_Rare,
|
||||
Bludgeon_Protection_Rare,
|
||||
Bludgeon_Resistance_Raising_Rare,
|
||||
Bow_Raising_Rare,
|
||||
Cold_Protection_Rare,
|
||||
Cold_Resistance_Raising_Rare,
|
||||
Cooking_Raising_Rare,
|
||||
Coordination_Raising_Rare,
|
||||
Creature_Enchantment_Raising_Rare,
|
||||
Crossbow_Raising_Rare,
|
||||
Dagger_Raising_Rare,
|
||||
Damage_Raising_Rare,
|
||||
Deception_Raising_Rare,
|
||||
Defense_Mod_Raising_Rare,
|
||||
Electric_Protection_Rare,
|
||||
Electric_Resistance_Raising_Rare,
|
||||
Endurance_Raising_Rare,
|
||||
Fire_Protection_Rare,
|
||||
Fire_Resistance_Raising_Rare,
|
||||
Fletching_Raising_Rare,
|
||||
Focus_Raising_Rare,
|
||||
Healing_Raising_Rare,
|
||||
Health_Accelerating_Rare,
|
||||
Item_Enchantment_Raising_Rare,
|
||||
Jump_Raising_Rare,
|
||||
Leadership_Raising_Rare,
|
||||
Life_Magic_Raising_Rare,
|
||||
Lockpick_Raising_Rare,
|
||||
Loyalty_Raising_Rare,
|
||||
Mace_Raising_Rare,
|
||||
Magic_Defense_Raising_Rare,
|
||||
Mana_Accelerating_Rare,
|
||||
Mana_Conversion_Raising_Rare,
|
||||
Melee_Defense_Raising_Rare,
|
||||
Missile_Defense_Raising_Rare,
|
||||
Pierce_Protection_Rare,
|
||||
Pierce_Resistance_Raising_Rare,
|
||||
Quickness_Raising_Rare,
|
||||
Run_Raising_Rare,
|
||||
Self_Raising_Rare,
|
||||
Slash_Protection_Rare,
|
||||
Slash_Resistance_Raising_Rare,
|
||||
Spear_Raising_Rare,
|
||||
Staff_Raising_Rare,
|
||||
Stamina_Accelerating_Rare,
|
||||
Strength_Raising_Rare,
|
||||
Sword_Raising_Rare,
|
||||
Thrown_Weapons_Raising_Rare,
|
||||
Unarmed_Combat_Raising_Rare,
|
||||
War_Magic_Raising_Rare,
|
||||
Weapon_Time_Raising_Rare,
|
||||
Armor_Increase_Inky_Armor,
|
||||
Magic_Defense_Shelter_Raising_Fiun,
|
||||
Extra_Run_Skill_Raising_Fiun,
|
||||
Extra_Mana_Conversion_Skill_Raising_Fiun,
|
||||
Attributes_Increase_Cantrip1,
|
||||
Extra_Melee_Defense_Skill_Raising2,
|
||||
ACTDPurchaseRewardSpell,
|
||||
ACTDPurchaseRewardSpellHealth,
|
||||
SaltAsh_Attack_Mod_Raising,
|
||||
Quickness_Increase2,
|
||||
Extra_Alchemy_Skill_Raising2,
|
||||
Extra_Cooking_Skill_Raising2,
|
||||
Extra_Fletching_Skill_Raising2,
|
||||
Extra_Lockpick_Skill_Raising2,
|
||||
MucorManaWell,
|
||||
Stamina_Restoring2,
|
||||
Allegiance_Raising,
|
||||
Health_DoT,
|
||||
Health_DoT_Secondary,
|
||||
Health_DoT_Tertiary,
|
||||
Health_HoT,
|
||||
Health_HoT_Secondary,
|
||||
Health_HoT_Tertiary,
|
||||
Health_Divide_Secondary,
|
||||
Health_Divide_Tertiary,
|
||||
SetSword_Raising,
|
||||
SetAxe_Raising,
|
||||
SetDagger_Raising,
|
||||
SetMace_Raising,
|
||||
SetSpear_Raising,
|
||||
SetStaff_Raising,
|
||||
SetUnarmed_Raising,
|
||||
SetBow_Raising,
|
||||
SetCrossbow_Raising,
|
||||
SetThrown_Raising,
|
||||
SetItemEnchantment_Raising,
|
||||
SetCreatureEnchantment_Raising,
|
||||
SetWarMagic_Raising,
|
||||
SetLifeMagic_Raising,
|
||||
SetMeleeDefense_Raising,
|
||||
SetMissileDefense_Raising,
|
||||
SetMagicDefense_Raising,
|
||||
SetStamina_Accelerating,
|
||||
SetCooking_Raising,
|
||||
SetFletching_Raising,
|
||||
SetLockpick_Raising,
|
||||
SetAlchemy_Raising,
|
||||
SetSalvaging_Raising,
|
||||
SetArmorExpertise_Raising,
|
||||
SetWeaponExpertise_Raising,
|
||||
SetItemTinkering_Raising,
|
||||
SetMagicItemExpertise_Raising,
|
||||
SetLoyalty_Raising,
|
||||
SetStrength_Raising,
|
||||
SetEndurance_Raising,
|
||||
SetCoordination_Raising,
|
||||
SetQuickness_Raising,
|
||||
SetFocus_Raising,
|
||||
SetWillpower_Raising,
|
||||
SetHealth_Raising,
|
||||
SetStamina_Raising,
|
||||
SetMana_Raising,
|
||||
SetSprint_Raising,
|
||||
SetJumping_Raising,
|
||||
SetSlashResistance_Raising,
|
||||
SetBludgeonResistance_Raising,
|
||||
SetPierceResistance_Raising,
|
||||
SetFlameResistance_Raising,
|
||||
SetAcidResistance_Raising,
|
||||
SetFrostResistance_Raising,
|
||||
SetLightningResistance_Raising,
|
||||
Crafting_LockPick_Raising,
|
||||
Crafting_Fletching_Raising,
|
||||
Crafting_Cooking_Raising,
|
||||
Crafting_Alchemy_Raising,
|
||||
Crafting_ArmorTinkering_Raising,
|
||||
Crafting_WeaponTinkering_Raising,
|
||||
Crafting_MagicTinkering_Raising,
|
||||
Crafting_ItemTinkering_Raising,
|
||||
SkillPercent_Alchemy_Raising,
|
||||
TwoHanded_Raising,
|
||||
TwoHanded_Lowering,
|
||||
Extra_TwoHanded_Skill_Raising,
|
||||
Extra_TwoHanded_Skill_Lowering,
|
||||
Extra_TwoHanded_Skill_Raising2,
|
||||
TwoHanded_Raising_Rare,
|
||||
SetTwoHanded_Raising,
|
||||
GearCraft_Raising,
|
||||
GearCraft_Lowering,
|
||||
Extra_GearCraft_Skill_Raising,
|
||||
Extra_GearCraft_Skill_Lowering,
|
||||
Extra_GearCraft_Skill_Raising2,
|
||||
GearCraft_Raising_Rare,
|
||||
SetGearCraft_Raising,
|
||||
LoyaltyMana_Raising,
|
||||
LoyaltyStamina_Raising,
|
||||
LeadershipHealth_Raising,
|
||||
TrinketDamage_Raising,
|
||||
TrinketDamage_Lowering,
|
||||
TrinketHealth_Raising,
|
||||
TrinketStamina_Raising,
|
||||
TrinketMana_Raising,
|
||||
TrinketXP_Raising,
|
||||
DeceptionArcaneLore_Raising,
|
||||
HealOverTime_Raising,
|
||||
DamageOverTime_Raising,
|
||||
HealingResistRating_Raising,
|
||||
AetheriaDamageRating_Raising,
|
||||
AetheriaDamageReduction_Raising,
|
||||
SKIPPED,
|
||||
AetheriaHealth_Raising,
|
||||
AetheriaStamina_Raising,
|
||||
AetheriaMana_Raising,
|
||||
AetheriaCriticalDamage_Raising,
|
||||
AetheriaHealingAmplification_Raising,
|
||||
AetheriaProcDamageRating_Raising,
|
||||
AetheriaProcDamageReduction_Raising,
|
||||
AetheriaProcHealthOverTime_Raising,
|
||||
AetheriaProcDamageOverTime_Raising,
|
||||
AetheriaProcHealingReduction_Raising,
|
||||
RareDamageRating_Raising,
|
||||
RareDamageReductionRating_Raising,
|
||||
AetheriaEndurance_Raising,
|
||||
NetherDamageOverTime_Raising,
|
||||
NetherDamageOverTime_Raising2,
|
||||
NetherDamageOverTime_Raising3,
|
||||
Nether_Streak,
|
||||
Nether_Missile,
|
||||
Nether_Ring,
|
||||
NetherDamageRating_Lowering,
|
||||
NetherDamageHealingReduction_Raising,
|
||||
Void_Magic_Lowering,
|
||||
Void_Magic_Raising,
|
||||
Void_Mystic_Raising,
|
||||
SetVoidMagic_Raising,
|
||||
Void_Magic_Raising_Rare,
|
||||
Void_Mystic_Raising2,
|
||||
LuminanceDamageRating_Raising,
|
||||
LuminanceDamageReduction_Raising,
|
||||
LuminanceHealth_Raising,
|
||||
AetheriaCriticalReduction_Raising,
|
||||
Extra_Missile_Defense_Skill_Raising,
|
||||
Extra_Missile_Defense_Skill_Lowering,
|
||||
Extra_Missile_Defense_Skill_Raising2,
|
||||
AetheriaHealthResistance_Raising,
|
||||
AetheriaDotResistance_Raising,
|
||||
Cloak_Skill_Raising,
|
||||
Cloak_All_Skill_Raising,
|
||||
Cloak_Magic_Defense_Lowering,
|
||||
Cloak_Melee_Defense_Lowering,
|
||||
Cloak_Missile_Defense_Lowering,
|
||||
DirtyFighting_Lowering,
|
||||
DirtyFighting_Raising,
|
||||
Extra_DirtyFighting_Raising,
|
||||
DualWield_Lowering,
|
||||
DualWield_Raising,
|
||||
Extra_DualWield_Raising,
|
||||
Recklessness_Lowering,
|
||||
Recklessness_Raising,
|
||||
Extra_Recklessness_Raising,
|
||||
Shield_Lowering,
|
||||
Shield_Raising,
|
||||
Extra_Shield_Raising,
|
||||
SneakAttack_Lowering,
|
||||
SneakAttack_Raising,
|
||||
Extra_SneakAttack_Raising,
|
||||
Rare_DirtyFighting_Raising,
|
||||
Rare_DualWield_Raising,
|
||||
Rare_Recklessness_Raising,
|
||||
Rare_Shield_Raising,
|
||||
Rare_SneakAttack_Raising,
|
||||
DF_Attack_Skill_Debuff,
|
||||
DF_Bleed_Damage,
|
||||
DF_Defense_Skill_Debuff,
|
||||
DF_Healing_Debuff,
|
||||
SetDirtyFighting_Raising,
|
||||
SetDualWield_Raising,
|
||||
SetRecklessness_Raising,
|
||||
SetShield_Raising,
|
||||
SetSneakAttack_Raising,
|
||||
LifeGiver_Mhoire,
|
||||
RareDamageRating_Raising2,
|
||||
Spell_Damage_Raising,
|
||||
Summoning_Raising,
|
||||
Summoning_Lowering,
|
||||
Extra_Summoning_Skill_Raising,
|
||||
SetSummoning_Raising
|
||||
}
|
||||
}
|
||||
106
Shared/Constants/StringValueKey.cs
Normal file
106
Shared/Constants/StringValueKey.cs
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
using System.ComponentModel;
|
||||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
// https://github.com/ACEmulator/ACE/blob/master/Source/ACE.Entity/Enum/Properties/PropertyString.cs
|
||||
public enum StringValueKey
|
||||
{
|
||||
// properties marked as ServerOnly are properties we never saw in PCAPs, from here:
|
||||
// http://ac.yotesfan.com/ace_object/not_used_enums.php
|
||||
// source: @OptimShi
|
||||
// description attributes are used by the weenie editor for a cleaner display name
|
||||
Undef = 0,
|
||||
[SendOnLogin]
|
||||
Name = 1,
|
||||
/// <summary>
|
||||
/// default "Adventurer"
|
||||
/// </summary>
|
||||
Title = 2,
|
||||
Sex = 3,
|
||||
HeritageGroup = 4,
|
||||
Template = 5,
|
||||
AttackersName = 6,
|
||||
Inscription = 7,
|
||||
[Description("Scribe Name")]
|
||||
ScribeName = 8,
|
||||
VendorsName = 9,
|
||||
Fellowship = 10,
|
||||
MonarchsName = 11,
|
||||
[ServerOnly]
|
||||
LockCode = 12,
|
||||
[ServerOnly]
|
||||
KeyCode = 13,
|
||||
Use = 14,
|
||||
ShortDesc = 15,
|
||||
LongDesc = 16,
|
||||
ActivationTalk = 17,
|
||||
[ServerOnly]
|
||||
UseMessage = 18,
|
||||
ItemHeritageGroupRestriction = 19,
|
||||
PluralName = 20,
|
||||
MonarchsTitle = 21,
|
||||
ActivationFailure = 22,
|
||||
ScribeAccount = 23,
|
||||
TownName = 24,
|
||||
CraftsmanName = 25,
|
||||
UsePkServerError = 26,
|
||||
ScoreCachedText = 27,
|
||||
ScoreDefaultEntryFormat = 28,
|
||||
ScoreFirstEntryFormat = 29,
|
||||
ScoreLastEntryFormat = 30,
|
||||
ScoreOnlyEntryFormat = 31,
|
||||
ScoreNoEntry = 32,
|
||||
[ServerOnly]
|
||||
Quest = 33,
|
||||
GeneratorEvent = 34,
|
||||
PatronsTitle = 35,
|
||||
HouseOwnerName = 36,
|
||||
QuestRestriction = 37,
|
||||
AppraisalPortalDestination = 38,
|
||||
TinkerName = 39,
|
||||
ImbuerName = 40,
|
||||
HouseOwnerAccount = 41,
|
||||
DisplayName = 42,
|
||||
DateOfBirth = 43,
|
||||
ThirdPartyApi = 44,
|
||||
KillQuest = 45,
|
||||
Afk = 46,
|
||||
AllegianceName = 47,
|
||||
AugmentationAddQuest = 48,
|
||||
KillQuest2 = 49,
|
||||
KillQuest3 = 50,
|
||||
UseSendsSignal = 51,
|
||||
|
||||
[Description("Gear Plating Name")]
|
||||
GearPlatingName = 52,
|
||||
|
||||
|
||||
// ACE Specific
|
||||
[ServerOnly]
|
||||
PCAPRecordedCurrentMotionState = 8006,
|
||||
[ServerOnly]
|
||||
PCAPRecordedServerName = 8031,
|
||||
[ServerOnly]
|
||||
PCAPRecordedCharacterName = 8032,
|
||||
|
||||
/* custom */
|
||||
[ServerOnly]
|
||||
AllegianceMotd = 9001,
|
||||
[ServerOnly]
|
||||
AllegianceMotdSetBy = 9002,
|
||||
[ServerOnly]
|
||||
AllegianceSpeakerTitle = 9003,
|
||||
[ServerOnly]
|
||||
AllegianceSeneschalTitle = 9004,
|
||||
[ServerOnly]
|
||||
AllegianceCastellanTitle = 9005,
|
||||
[ServerOnly]
|
||||
GodState = 9006,
|
||||
[ServerOnly]
|
||||
TinkerLog = 9007,
|
||||
|
||||
|
||||
// Decal Specific
|
||||
SecondaryName_Decal = 184549376,
|
||||
}
|
||||
}
|
||||
79
Shared/Constants/WeenieType.cs
Normal file
79
Shared/Constants/WeenieType.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
public enum WeenieType : uint
|
||||
{
|
||||
Undef,
|
||||
Generic,
|
||||
Clothing,
|
||||
MissileLauncher,
|
||||
Missile,
|
||||
Ammunition,
|
||||
MeleeWeapon,
|
||||
Portal,
|
||||
Book,
|
||||
Coin,
|
||||
Creature,
|
||||
Admin,
|
||||
Vendor,
|
||||
HotSpot,
|
||||
Corpse,
|
||||
Cow,
|
||||
AI,
|
||||
Machine,
|
||||
Food,
|
||||
Door,
|
||||
Chest,
|
||||
Container,
|
||||
Key,
|
||||
Lockpick,
|
||||
PressurePlate,
|
||||
LifeStone,
|
||||
Switch,
|
||||
PKModifier,
|
||||
Healer,
|
||||
LightSource,
|
||||
Allegiance,
|
||||
UNKNOWN__GUESSEDNAME32, // NOTE: Missing 1
|
||||
SpellComponent,
|
||||
ProjectileSpell,
|
||||
Scroll,
|
||||
Caster,
|
||||
Channel,
|
||||
ManaStone,
|
||||
Gem,
|
||||
AdvocateFane,
|
||||
AdvocateItem,
|
||||
Sentinel,
|
||||
GSpellEconomy,
|
||||
LSpellEconomy,
|
||||
CraftTool,
|
||||
LScoreKeeper,
|
||||
GScoreKeeper,
|
||||
GScoreGatherer,
|
||||
ScoreBook,
|
||||
EventCoordinator,
|
||||
Entity,
|
||||
Stackable,
|
||||
HUD,
|
||||
House,
|
||||
Deed,
|
||||
SlumLord,
|
||||
Hook,
|
||||
Storage,
|
||||
BootSpot,
|
||||
HousePortal,
|
||||
Game,
|
||||
GamePiece,
|
||||
SkillAlterationDevice,
|
||||
AttributeTransferDevice,
|
||||
Hooker,
|
||||
AllegianceBindstone,
|
||||
InGameStatKeeper,
|
||||
AugmentationDevice,
|
||||
SocialManager,
|
||||
Pet,
|
||||
PetDevice,
|
||||
CombatPet
|
||||
}
|
||||
}
|
||||
20
Shared/Constants/WieldRequirement.cs
Normal file
20
Shared/Constants/WieldRequirement.cs
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
namespace Mag.Shared.Constants
|
||||
{
|
||||
public enum WieldRequirement
|
||||
{
|
||||
Invalid,
|
||||
Skill,
|
||||
RawSkill,
|
||||
Attrib,
|
||||
RawAttrib,
|
||||
SecondaryAttrib,
|
||||
RawSecondaryAttrib,
|
||||
Level,
|
||||
Training,
|
||||
IntStat,
|
||||
BoolStat,
|
||||
CreatureType,
|
||||
HeritageType
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue