Inventory logger

This commit is contained in:
erik 2025-05-12 20:27:00 +02:00
parent 29fba4b7cb
commit de2057789a
41 changed files with 12834 additions and 171 deletions

View 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,
}
}

View 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;
}
}
}

View 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
};
}
}

View 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;
}
}
}

View 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
{
}
}

View 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;
}
}
}

View 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;
}
}
}

View 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
}
}

View 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,
}
}

View 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
}
}

View 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
{
}
}

View 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
View 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
}
}

View 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
}
}

View 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,
}
}

View 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
}
}

View 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
}
}