Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: configs/logon.conf
- ===================================================================
- --- configs/logon.conf (revision 3116)
- +++ configs/logon.conf (working copy)
- @@ -69,8 +69,8 @@
- * As of the last update, version 3.1.3 was build 9947.
- */
- -<Client MinBuild = "10482"
- - MaxBuild = "10505">
- +<Client MinBuild = "10958"
- + MaxBuild = "11159">
- /* WorldServer Setup
- *
- Index: extras/map_extractor/adt.cpp
- ===================================================================
- --- extras/map_extractor/adt.cpp (revision 3116)
- +++ extras/map_extractor/adt.cpp (working copy)
- @@ -338,6 +338,10 @@
- nextpos = mf.getPos() + 0x1C0; // size fix
- }
- + if(fourcc=0xefb88b70) // infinite loop fix, right?
- + {
- + nextpos = mf.getPos() + 0x1199;
- + }
- else
- /*if(fourcc==0x4d434c51) //MCLQ
- {
- Index: extras/Spell_to_sql/src/defines.h
- ===================================================================
- --- extras/Spell_to_sql/src/defines.h (revision 3116)
- +++ extras/Spell_to_sql/src/defines.h (working copy)
- @@ -13,12 +13,12 @@
- #define SERVER_DECL __declspec(dllexport)
- -#define SPELL_DBC_CLIENT_BUILD 10314 // 3.2
- +#define SPELL_DBC_CLIENT_BUILD 10958 // 3.2
- #define SQL_INSERTS_PER_QUERY 1000
- //this might change from 1 version to another of the DBC
- -#define SPELL_COLUMN_COUNT 239
- +#define SPELL_COLUMN_COUNT 240
- //last column is "skip_this_for_sql"
- const char sql_translation_table[SPELL_COLUMN_COUNT][3][300] =
- @@ -262,4 +262,5 @@
- {"uint32", "UNK5", "0"}, //237
- {"uint32", "UNK6", "0"}, //238
- {"uint32", "UNK7", "0"}, //239
- + {"uint32", "UNK8", "0"}, //240
- };
- Index: extras/spellfailure_extractor/spellfailure_extractor.cpp
- ===================================================================
- --- extras/spellfailure_extractor/spellfailure_extractor.cpp (revision 3116)
- +++ extras/spellfailure_extractor/spellfailure_extractor.cpp (working copy)
- @@ -18,7 +18,6 @@
- *
- * spellfailure_extractor.cpp : Defines the entry point for the console application.
- */
- -
- #include <cstring>
- #include <cstdio>
- #include <cstdlib>
- Index: src/arcemu-logonserver/AutoPatcher.cpp
- ===================================================================
- --- src/arcemu-logonserver/AutoPatcher.cpp (revision 3116)
- +++ src/arcemu-logonserver/AutoPatcher.cpp (working copy)
- @@ -65,7 +65,7 @@
- if(hFile == INVALID_HANDLE_VALUE)
- continue;
- - Log.Notice("PatchMgr", "Found patch for b%u locale `%s`.", srcversion,locality);
- + Log.Notice("PatchMgr", "Found patch for %u locale `%s`.", srcversion,locality);
- pPatch = new Patch;
- size = GetFileSize(hFile, &sizehigh);
- pPatch->FileSize = size;
- Index: src/arcemu-logonserver/Main.cpp
- ===================================================================
- --- src/arcemu-logonserver/Main.cpp (revision 3116)
- +++ src/arcemu-logonserver/Main.cpp (working copy)
- @@ -183,7 +183,7 @@
- }
- }
- m_allowedIpLock.Release();
- - return false;
- + return true;
- }
- bool IsServerAllowedMod(unsigned int IP)
- @@ -198,7 +198,7 @@
- }
- }
- m_allowedIpLock.Release();
- - return false;
- + return true;
- }
- bool Rehash()
- Index: src/arcemu-shared/AuthCodes.h
- ===================================================================
- --- src/arcemu-shared/AuthCodes.h (revision 3116)
- +++ src/arcemu-shared/AuthCodes.h (working copy)
- @@ -20,7 +20,7 @@
- #ifndef _AUTHCODES_H
- #define _AUTHCODES_H
- -// client 3.2.2a, 2009/10/06
- +// client 3.3.0, 2009/12/20
- enum LoginErrorCode
- {
- E_RESPONSE_SUCCESS = 0x00,
- @@ -98,42 +98,43 @@
- E_CHAR_CREATE_CHARACTER_SWAP_FACTION = 0x42,
- E_CHAR_CREATE_CHARACTER_RACE_ONLY = 0x43,
- E_CHAR_CREATE_CHARACTER_GOLD_LIMIT = 0x44,
- + E_CHAR_CREATE_FORCE_LOGIN = 0x45,
- - E_CHAR_DELETE_IN_PROGRESS = 0x45,
- - E_CHAR_DELETE_SUCCESS = 0x46,
- - E_CHAR_DELETE_FAILED = 0x47,
- - E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 0x48,
- - E_CHAR_DELETE_FAILED_GUILD_LEADER = 0x49,
- - E_CHAR_DELETE_FAILED_ARENA_CAPTAIN = 0x4A,
- + E_CHAR_DELETE_IN_PROGRESS = 0x46,
- + E_CHAR_DELETE_SUCCESS = 0x47,
- + E_CHAR_DELETE_FAILED = 0x48,
- + E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 0x49,
- + E_CHAR_DELETE_FAILED_GUILD_LEADER = 0x4A,
- + E_CHAR_DELETE_FAILED_ARENA_CAPTAIN = 0x4B,
- - E_CHAR_LOGIN_IN_PROGRESS = 0x4B,
- - E_CHAR_LOGIN_SUCCESS = 0x4C,
- - E_CHAR_LOGIN_NO_WORLD = 0x4D,
- - E_CHAR_LOGIN_DUPLICATE_CHARACTER = 0x4E,
- - E_CHAR_LOGIN_NO_INSTANCES = 0x4F,
- - E_CHAR_LOGIN_FAILED = 0x50,
- - E_CHAR_LOGIN_DISABLED = 0x51,
- - E_CHAR_LOGIN_NO_CHARACTER = 0x52,
- - E_CHAR_LOGIN_LOCKED_FOR_TRANSFER = 0x53,
- - E_CHAR_LOGIN_LOCKED_BY_BILLING = 0x54,
- + E_CHAR_LOGIN_IN_PROGRESS = 0x4C,
- + E_CHAR_LOGIN_SUCCESS = 0x4D,
- + E_CHAR_LOGIN_NO_WORLD = 0x4E,
- + E_CHAR_LOGIN_DUPLICATE_CHARACTER = 0x4F,
- + E_CHAR_LOGIN_NO_INSTANCES = 0x50,
- + E_CHAR_LOGIN_FAILED = 0x51,
- + E_CHAR_LOGIN_DISABLED = 0x52,
- + E_CHAR_LOGIN_NO_CHARACTER = 0x53,
- + E_CHAR_LOGIN_LOCKED_FOR_TRANSFER = 0x54,
- + E_CHAR_LOGIN_LOCKED_BY_BILLING = 0x55,
- - E_CHAR_NAME_SUCCESS = 0x55,
- - E_CHAR_NAME_FAILURE = 0x56,
- - E_CHAR_NAME_NO_NAME = 0x57,
- - E_CHAR_NAME_TOO_SHORT = 0x58,
- - E_CHAR_NAME_TOO_LONG = 0x59,
- - E_CHAR_NAME_INVALID_CHARACTER = 0x5A,
- - E_CHAR_NAME_MIXED_LANGUAGES = 0x5B,
- - E_CHAR_NAME_PROFANE = 0x5C,
- - E_CHAR_NAME_RESERVED = 0x5D,
- - E_CHAR_NAME_INVALID_APOSTROPHE = 0x5E,
- - E_CHAR_NAME_MULTIPLE_APOSTROPHES = 0x5F,
- - E_CHAR_NAME_THREE_CONSECUTIVE = 0x60,
- - E_CHAR_NAME_INVALID_SPACE = 0x61,
- - E_CHAR_NAME_CONSECUTIVE_SPACES = 0x62,
- - E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 0x63,
- - E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 0x64,
- - E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 0x65,
- + E_CHAR_NAME_SUCCESS = 0x56,
- + E_CHAR_NAME_FAILURE = 0x57,
- + E_CHAR_NAME_NO_NAME = 0x58,
- + E_CHAR_NAME_TOO_SHORT = 0x59,
- + E_CHAR_NAME_TOO_LONG = 0x5A,
- + E_CHAR_NAME_INVALID_CHARACTER = 0x5B,
- + E_CHAR_NAME_MIXED_LANGUAGES = 0x5C,
- + E_CHAR_NAME_PROFANE = 0x5D,
- + E_CHAR_NAME_RESERVED = 0x5E,
- + E_CHAR_NAME_INVALID_APOSTROPHE = 0x5F,
- + E_CHAR_NAME_MULTIPLE_APOSTROPHES = 0x60,
- + E_CHAR_NAME_THREE_CONSECUTIVE = 0x61,
- + E_CHAR_NAME_INVALID_SPACE = 0x62,
- + E_CHAR_NAME_CONSECUTIVE_SPACES = 0x63,
- + E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 0x64,
- + E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 0x65,
- + E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 0x66,
- };
- //These defines are for use with OutPacket
- @@ -212,41 +213,42 @@
- #define CHAR_CREATE_CHARACTER_SWAP_FACTION "\x42"
- #define CHAR_CREATE_CHARACTER_RACE_ONLY "\x43"
- #define CHAR_CREATE_CHARACTER_GOLD_LIMIT "\x44"
- +#define CHAR_CREATE_FORCE_LOGIN "\x45"
- -#define CHAR_DELETE_IN_PROGRESS "\x45"
- -#define CHAR_DELETE_SUCCESS "\x46"
- -#define CHAR_DELETE_FAILED "\x47"
- -#define CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x48"
- -#define CHAR_DELETE_FAILED_GUILD_LEADER "\x49"
- -#define CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4A"
- +#define CHAR_DELETE_IN_PROGRESS "\x46"
- +#define CHAR_DELETE_SUCCESS "\x47"
- +#define CHAR_DELETE_FAILED "\x48"
- +#define CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x49"
- +#define CHAR_DELETE_FAILED_GUILD_LEADER "\x4A"
- +#define CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4B"
- -#define CHAR_LOGIN_IN_PROGRESS "\x4B"
- -#define CHAR_LOGIN_SUCCESS "\x4C"
- -#define CHAR_LOGIN_NO_WORLD "\x4D"
- -#define CHAR_LOGIN_DUPLICATE_CHARACTER "\x4E"
- -#define CHAR_LOGIN_NO_INSTANCES "\x4F"
- -#define CHAR_LOGIN_FAILED "\x50"
- -#define CHAR_LOGIN_DISABLED "\x51"
- -#define CHAR_LOGIN_NO_CHARACTER "\x52"
- -#define CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x53"
- -#define CHAR_LOGIN_LOCKED_BY_BILLING "\x54"
- +#define CHAR_LOGIN_IN_PROGRESS "\x4C"
- +#define CHAR_LOGIN_SUCCESS "\x4D"
- +#define CHAR_LOGIN_NO_WORLD "\x4E"
- +#define CHAR_LOGIN_DUPLICATE_CHARACTER "\x4F"
- +#define CHAR_LOGIN_NO_INSTANCES "\x50"
- +#define CHAR_LOGIN_FAILED "\x51"
- +#define CHAR_LOGIN_DISABLED "\x52"
- +#define CHAR_LOGIN_NO_CHARACTER "\x53"
- +#define CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x54"
- +#define CHAR_LOGIN_LOCKED_BY_BILLING "\x55"
- -#define CHAR_NAME_SUCCESS "\x55"
- -#define CHAR_NAME_FAILURE "\x56"
- -#define CHAR_NAME_NO_NAME "\x57"
- -#define CHAR_NAME_TOO_SHORT "\x58"
- -#define CHAR_NAME_TOO_LONG "\x59"
- -#define CHAR_NAME_INVALID_CHARACTER "\x5A"
- -#define CHAR_NAME_MIXED_LANGUAGES "\x5B"
- -#define CHAR_NAME_PROFANE "\x5C"
- -#define CHAR_NAME_RESERVED "\x5D"
- -#define CHAR_NAME_INVALID_APOSTROPHE "\x5E"
- -#define CHAR_NAME_MULTIPLE_APOSTROPHES "\x5F"
- -#define CHAR_NAME_THREE_CONSECUTIVE "\x60"
- -#define CHAR_NAME_INVALID_SPACE "\x61"
- -#define CHAR_NAME_CONSECUTIVE_SPACES "\x62"
- -#define CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x63"
- -#define CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x64"
- -#define CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x65"
- +#define CHAR_NAME_SUCCESS "\x56"
- +#define CHAR_NAME_FAILURE "\x57"
- +#define CHAR_NAME_NO_NAME "\x58"
- +#define CHAR_NAME_TOO_SHORT "\x59"
- +#define CHAR_NAME_TOO_LONG "\x5A"
- +#define CHAR_NAME_INVALID_CHARACTER "\x5B"
- +#define CHAR_NAME_MIXED_LANGUAGES "\x5C"
- +#define CHAR_NAME_PROFANE "\x5D"
- +#define CHAR_NAME_RESERVED "\x5E"
- +#define CHAR_NAME_INVALID_APOSTROPHE "\x5F"
- +#define CHAR_NAME_MULTIPLE_APOSTROPHES "\x60"
- +#define CHAR_NAME_THREE_CONSECUTIVE "\x61"
- +#define CHAR_NAME_INVALID_SPACE "\x62"
- +#define CHAR_NAME_CONSECUTIVE_SPACES "\x63"
- +#define CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x64"
- +#define CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x65"
- +#define CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x66"
- #endif
- Index: src/arcemu-shared/Database/DBCStores.cpp
- ===================================================================
- --- src/arcemu-shared/Database/DBCStores.cpp (revision 3116)
- +++ src/arcemu-shared/Database/DBCStores.cpp (working copy)
- @@ -97,7 +97,7 @@
- const char* GlyphSlotEntryFormat = "uuu";
- const char* skilllineentrYFormat = "uuulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
- -const char* BattlemasterListEntryFormat = "uiiiiiiiiuuuuuiiiiiiiiiiiiiiiiiiuux";
- +const char* BattlemasterListEntryFormat = "uiiiiiiiiuiiiiiiiiiiiiiiiiiiuux";
- const char* CharTitlesEntryfmt =
- "u" // ID
- @@ -270,6 +270,7 @@
- "x" //Added in 3.1
- "xxx" // unk 3.2.0, float!
- "x" // unk 3.2.0
- + "x" // unk 3.3.0
- ;
- @@ -286,7 +287,7 @@
- const char* areatableFormat = "uuuuuxxxuxulxxxxxxxxxxxxxxxxuxxxxxxx";
- const char* factiontemplatedbcFormat = "uuuuuuuuuuuuuu";
- const char* auctionhousedbcFormat = "uuuuxxxxxxxxxxxxxxxxx";
- -const char* factiondbcFormat = "uiuuuuuuuuiiiiuuuuulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
- +const char* factiondbcFormat = "uiuuuuuuuuiiiiuuuuuxxxxlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
- const char* dbctaxinodeFormat = "uufffxxxxxxxxxxxxxxxxxuu";
- const char* dbctaxipathFormat = "uuuu";
- const char* dbctaxipathnodeFormat = "uuuufffuuxx";
- @@ -299,19 +300,20 @@
- "s" // 1 name_internal
- "u" // 2 map_type
- "u" // 3 is_pvp_zone
- - "lxxxxxxxxxxxxxxxx" // 4-20 real_name
- - "u" // 21 linked_zone
- - "xxxxxxxxxxxxxxxxx" // 22-38 hordeIntro
- - "xxxxxxxxxxxxxxxxx" // 39-55 allianceIntro
- - "u" // 56 multimap_id
- - "x" // 57 unk_float (all 1 but arathi 1.25)
- - "u" // 58 parent_map
- - "u" // 59 start_x
- - "u" // 60 start_y
- - "x" // 61 unk
- - "u" // 62 addon
- - "x" // 63 unk
- - "x"; // 64 unk, but as it is always one of the following ones, it could be a max. player count: 0, 5, 10, 20, 25, 40
- + "x" // 4 0 or 1 for battlegrounds (not arenas)
- + "lxxxxxxxxxxxxxxxx" // 5-21 real_name
- + "u" // 22 linked_zone
- + "lxxxxxxxxxxxxxxxx" // 23-39 hordeIntro
- + "lxxxxxxxxxxxxxxxx" // 40-56 allianceIntro
- + "u" // 57 multimap_id
- + "x" // 58 unk_float (all 1 but arathi 1.25)
- + "u" // 59 parent_map
- + "u" // 60 start_x
- + "u" // 61 start_y
- + "x" // 62 unk
- + "u" // 63 addon
- + "x" // 64 normalReqText
- + "u"; // 65 Max players
- const char* itemrandomsuffixformat = "uxxxxxxxxxxxxxxxxxxuuuxxuuuxx";//19, 20, 21, 24, 25, 26
- const char* chatchannelformat = "iixssssssssssssssslxxxxxxxxxxxxxxxxxx";
- Index: src/arcemu-shared/Database/DBCStores.h
- ===================================================================
- --- src/arcemu-shared/Database/DBCStores.h (revision 3116)
- +++ src/arcemu-shared/Database/DBCStores.h (working copy)
- @@ -476,18 +476,14 @@
- {
- uint32 bg_index;
- int32 maps[8];
- - uint32 instance_type;
- - uint32 max_players_per_faction;
- - uint32 min_players_per_faction;
- - uint32 flag; // EOTS AND SOTA have this set to nine, otherwise it's zero
- - uint32 always_true;
- - uint32 some_id;
- + uint32 type;
- + uint32 maxplayersperteam;
- + uint32 isused;
- + uint32 flags;
- int32 zeros[15];
- uint32 unk[2];
- uint32 always_same; // Always 16712190
- - uint32 minimum_payer_level; // ??? Is it, 3.0.8 doesn't match 3.0.3 numbers
- - // Do not use for now (NAQUADA)
- - //char* name;
- + uint32 minimum_player_level; // ??? Is it, 3.0.8 doesn't match 3.0.3 numbers
- };
- struct BankSlotPrice
- @@ -694,16 +690,16 @@
- uint32 Attributes; //5
- uint32 AttributesEx; //6
- uint32 AttributesExB; //7
- - uint32 AttributesExC; //8 // Flags to
- - uint32 AttributesExD; //9 // Flags....
- - uint32 AttributesExE; //10 // Flags 2.0.1 unknown one
- + uint32 AttributesExC; //8 // Flags to
- + uint32 AttributesExD; //9 // Flags....
- + uint32 AttributesExE; //10 // Flags 2.0.1 unknown one
- uint32 AttributesExF; //11
- - //12 UNK
- - uint32 RequiredShapeShift; //13 // Flags BitMask for shapeshift spells
- - //14 UNK
- - uint32 ShapeshiftExclude; //15-> this is wrong // Flags BitMask for which shapeshift forms this spell can NOT be used in.
- - //16 UNK
- - uint32 Targets; //17 - N / M
- + //uint32 AttributesExG, //12 Flags maybe?
- + uint32 RequiredShapeShift; //13 // Flags BitMask for shapeshift spells
- + //uint32 Unknown2, //14 Float?
- + uint32 ShapeshiftExclude; //15-> this is wrong // Flags BitMask for which shapeshift forms this spell can NOT be used in.
- + //uint32 Unknown3 //16
- + uint32 Targets; //17 - N / M
- uint32 TargetCreatureType; //18
- uint32 RequiresSpellFocus; //19
- uint32 FacingCasterFlags; //20
- @@ -717,7 +713,7 @@
- uint32 targetAuraSpellNot; //28
- uint32 CastingTimeIndex; //29
- uint32 RecoveryTime; //30
- - uint32 CategoryRecoveryTime; //31 recoverytime
- + uint32 CategoryRecoveryTime; //31 recoverytime
- uint32 InterruptFlags; //32
- uint32 AuraInterruptFlags; //33
- uint32 ChannelInterruptFlags; //34
- @@ -759,27 +755,27 @@
- uint32 EffectChainTarget[3]; //111 - 113
- uint32 EffectItemType[3]; //114 - 116 Not sure maybe we should rename it. its the relation to field: SpellGroupType
- uint32 EffectMiscValue[3]; //117 - 119
- - uint32 EffectMiscValueB[3]; //120 - 122 2.4.3
- + uint32 EffectMiscValueB[3]; //120 - 122 2.4.3
- uint32 EffectTriggerSpell[3]; //123 - 125
- float EffectPointsPerComboPoint[3]; //126 - 128
- uint32 EffectSpellClassMask[3][3]; //129 - 137
- uint32 SpellVisual; //138
- uint32 field114; //139
- uint32 spellIconID; //140
- - uint32 activeIconID; //141 activeIconID;
- + uint32 activeIconID; //141 activeIconID;
- uint32 spellPriority; //142
- char* Name; //143
- -// char* NameAlt[15]; //144-158 not used
- -// uint32 NameFlags; //159 not used
- +// char* NameAlt[15]; //144-158 not used
- +// uint32 NameFlags; //159 not used
- char* Rank; //160
- -// char* RankAlt[15]; //161-175 not used
- -// uint32 RankFlags; //176 not used
- +// char* RankAlt[15]; //161-175 not used
- +// uint32 RankFlags; //176 not used
- char* Description; //177
- -// char* DescriptionAlt[15]; //178-192 not used
- -// uint32 DescriptionFlags; //193 not used
- +// char* DescriptionAlt[15]; //178-192 not used
- +// uint32 DescriptionFlags; //193 not used
- char* BuffDescription; //194
- -// char* BuffDescription[15]; //195-209 not used
- -// uint32 buffdescflags; //210 not used
- +// char* BuffDescription[15]; //195-209 not used
- +// uint32 buffdescflags; //210 not used
- uint32 ManaCostPercentage; //211
- uint32 StartRecoveryCategory; //212
- uint32 StartRecoveryTime; //213
- @@ -787,59 +783,67 @@
- uint32 SpellFamilyName; //215
- uint32 SpellGroupType[3]; //216-218
- uint32 MaxTargets; //219
- - uint32 Spell_Dmg_Type; //220 dmg_class Integer 0=None, 1=Magic, 2=Melee, 3=Ranged
- - uint32 PreventionType; //221 0,1,2 related to Spell_Dmg_Type I think
- - int32 StanceBarOrder; //222 related to paladin aura's
- - float dmg_multiplier[3]; //223 - 225 if the name is correct I dono
- - uint32 MinFactionID; //226 only one spellid:6994 has this value = 369 UNUSED
- - uint32 MinReputation; //227 only one spellid:6994 has this value = 4 UNUSED
- - uint32 RequiredAuraVision; //228 3 spells 1 or 2
- + uint32 Spell_Dmg_Type; //220 dmg_class Integer 0=None, 1=Magic, 2=Melee, 3=Ranged
- + uint32 PreventionType; //221 0,1,2 related to Spell_Dmg_Type I think
- + int32 StanceBarOrder; //222 related to paladin aura's
- + float dmg_multiplier[3]; //223 - 225 if the name is correct I dono
- + uint32 MinFactionID; //226 only one spellid:6994 has this value = 369 UNUSED
- + uint32 MinReputation; //227 only one spellid:6994 has this value = 4 UNUSED
- + uint32 RequiredAuraVision; //228 3 spells 1 or 2
- uint32 TotemCategory[2]; //229-230
- int32 RequiresAreaId; //231
- uint32 School; //232
- - uint32 RuneCostID; //233 from 3.0.1
- -// uint32 SpellMissileID; //234 from 3.0.1
- + uint32 RuneCostID; //233 from 3.0.1
- +// uint32 SpellMissileID; //234 from 3.0.1
- +// uint32 PowerDisplayId; //235 PowerDisplayId.dbc from 3.1.0
- +// uint32 Unknown5[3]; //236 from 3.2.0
- +// uint32 spellDescriptionVariableID; //237 from 3.2.0
- /// CUSTOM: these fields are used for the modifications made in the world.cpp
- - uint32 DiminishStatus; //
- - uint32 proc_interval; //!!! CUSTOM, <Fill description for variable>
- + uint32 DiminishStatus; //!!! CUSTOM, <Fill description for variable>
- + uint32 proc_interval; //!!! CUSTOM, <Fill description for variable>
- //Buff Groupin Rule -> caster can cast this spell only on 1 target. Value represents the group spell is part of. Can be part of only 1 group
- //caster can only cast on 1 target these spells
- uint32 BGR_one_buff_from_caster_on_1target; //!!! CUSTOM, <Fill description for variable>
- //target can have only buff of this type on self. Value represents the group spell is part of. Can be part of only 1 group
- - uint32 BGR_one_buff_on_target; //!!! CUSTOM, these are related to creating a item through a spell
- + uint32 BGR_one_buff_on_target; //!!! CUSTOM, these are related to creating a item through a spell
- //caster can have only 1 Aura per spell group, ex pal auras
- - uint32 BGR_one_buff_from_caster_on_self;//!!! CUSTOM, these are related to creating a item through a spell
- -// uint32 buffIndexType; //!!! CUSTOM, <Fill description for variable>
- - uint32 c_is_flags; //!!! CUSTOM, store spell checks in a static way : isdamageind,ishealing
- -// uint32 buffType; //!!! CUSTOM, these are related to creating a item through a spell
- - uint32 RankNumber; //!!! CUSTOM, this protects players from having >1 rank of a spell
- - uint32 NameHash; //!!! CUSTOM, related to custom spells, summon spell quest related spells
- - uint32 talent_tree; //!!! CUSTOM,
- - uint32 in_front_status; //!!! CUSTOM,
- - uint32 EffectSpellGroupRelation_high[3]; //!!! this is not contained in client dbc but server must have it
- + uint32 BGR_one_buff_from_caster_on_self; //!!! CUSTOM, these are related to creating a item through a spell
- +// uint32 buffIndexType; //!!! CUSTOM, <Fill description for variable>
- + uint32 c_is_flags; //!!! CUSTOM, store spell checks in a static way : isdamageind,ishealing
- +// uint32 buffType; //!!! CUSTOM, these are related to creating a item through a spell
- + uint32 RankNumber; //!!! CUSTOM, this protects players from having >1 rank of a spell
- + uint32 NameHash; //!!! CUSTOM, related to custom spells, summon spell quest related spells
- + uint32 talent_tree; //!!! CUSTOM,
- + uint32 in_front_status; //!!! CUSTOM,
- + uint32 EffectSpellGroupRelation_high[3]; //!!! this is not contained in client dbc but server must have it
- uint32 ThreatForSpell;
- float ThreatForSpellCoef;
- uint32 ProcOnNameHash[3];
- - uint32 spell_coef_flags; //!!! CUSTOM, store flags for spell coefficient calculations
- + uint32 spell_coef_flags; //!!! CUSTOM, store flags for spell coefficient calculations
- - float base_range_or_radius_sqr; //!!! CUSTOM, needed for aoe spells most of the time
- + float base_range_or_radius_sqr; //!!! CUSTOM, needed for aoe spells most of the time
- // love me or hate me, all "In a cone in front of the caster" spells don't necessarily mean "in front"
- float cone_width;
- //Spell Coefficient
- - float casttime_coef; //!!! CUSTOM, faster spell bonus calculation
- - float fixed_dddhcoef; //!!! CUSTOM, fixed DD-DH coefficient for some spells
- - float fixed_hotdotcoef; //!!! CUSTOM, fixed HOT-DOT coefficient for some spells
- - float Dspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
- - float OTspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
- - int ai_target_type;
- + float Base_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
- + float Misc_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
- + float AP_coef; //!!! CUSTOM, Additional coef from AP
- + float RAP_coef; //!!! CUSTOM, Additional coef from RAP
- - bool self_cast_only;
- - bool apply_on_shapeshift_change;
- - bool always_apply;
- - bool is_melee_spell; //!!! CUSTOM,
- - bool is_ranged_spell; //!!! CUSTOM,
- - bool spell_can_crit; //!!! CUSTOM,
- + float casttime_coef; //!!! CUSTOM, faster spell bonus calculation
- + float fixed_dddhcoef; //!!! CUSTOM, fixed DD-DH coefficient for some spells
- + float fixed_hotdotcoef; //!!! CUSTOM, fixed HOT-DOT coefficient for some spells
- + float Dspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
- + float OTspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
- + int ai_target_type; //!!! CUSTOM, <Fill description for variable>
- +
- + bool self_cast_only; //!!! CUSTOM, <Fill description for variable>
- + bool apply_on_shapeshift_change; //!!! CUSTOM, <Fill description for variable>
- + bool always_apply; //!!! CUSTOM, <Fill description for variable>
- + bool is_melee_spell; //!!! CUSTOM, <Fill description for variable>
- + bool is_ranged_spell; //!!! CUSTOM, <Fill description for variable>
- + bool spell_can_crit; //!!! CUSTOM, <Fill description for variable>
- bool noproc;
- uint32 SchoolMask; // Custom
- Index: src/arcemu-world/AchievementMgr.h
- ===================================================================
- --- src/arcemu-world/AchievementMgr.h (revision 3116)
- +++ src/arcemu-world/AchievementMgr.h (working copy)
- @@ -193,8 +193,13 @@
- ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE= 112,
- ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113,
- ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114,
- - // 0..114 => 115 criteria types total
- - ACHIEVEMENT_CRITERIA_TYPE_TOTAL = 115,
- + ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS = 115, // only 1 found in 3.3.0
- + ACHIEVEMENT_CRITERIA_TYPE_116 = 116,
- + ACHIEVEMENT_CRITERIA_TYPE_117 = 117,
- + ACHIEVEMENT_CRITERIA_TYPE_118 = 118,
- + ACHIEVEMENT_CRITERIA_TYPE_FINISH_RANDOM_DUNGEON = 119,
- + // 0..119 => 120 criteria types total
- + ACHIEVEMENT_CRITERIA_TYPE_TOTAL = 120 // 0..114 => 115 criteria types total
- };
- /**
- Index: src/arcemu-world/BattlegroundMgr.cpp
- ===================================================================
- --- src/arcemu-world/BattlegroundMgr.cpp (revision 3116)
- +++ src/arcemu-world/BattlegroundMgr.cpp (working copy)
- @@ -814,13 +814,13 @@
- switch(dbcIndex)
- {
- case BATTLEGROUND_ALTERAC_VALLEY:
- - return Config.MainConfig.GetIntDefault("Battleground", "AV_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return Config.MainConfig.GetIntDefault("Battleground", "AV_MIN", 10);
- case BATTLEGROUND_WARSONG_GULCH:
- - return Config.MainConfig.GetIntDefault("Battleground", "WS_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return Config.MainConfig.GetIntDefault("Battleground", "WS_MIN", 3);
- case BATTLEGROUND_ARATHI_BASIN:
- - return Config.MainConfig.GetIntDefault("Battleground", "AB_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return Config.MainConfig.GetIntDefault("Battleground", "AB_MIN", 3);
- case BATTLEGROUND_EYE_OF_THE_STORM:
- - return Config.MainConfig.GetIntDefault("Battleground", "EOS_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return Config.MainConfig.GetIntDefault("Battleground", "EOS_MIN", 3);
- case BATTLEGROUND_ARENA_2V2:
- return 2;
- case BATTLEGROUND_ARENA_3V3:
- @@ -828,9 +828,9 @@
- case BATTLEGROUND_ARENA_5V5:
- return 5;
- case BATTLEGROUND_STRAND_OF_THE_ANCIENT:
- - return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MIN", 5);
- default:
- - return dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction;
- + return 3;
- }
- }
- @@ -840,13 +840,13 @@
- switch(dbcIndex)
- {
- case BATTLEGROUND_ALTERAC_VALLEY:
- - return Config.MainConfig.GetIntDefault("Battleground", "AV_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return 40;
- case BATTLEGROUND_WARSONG_GULCH:
- - return Config.MainConfig.GetIntDefault("Battleground", "WS_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return 10;
- case BATTLEGROUND_ARATHI_BASIN:
- - return Config.MainConfig.GetIntDefault("Battleground", "AB_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return 10;
- case BATTLEGROUND_EYE_OF_THE_STORM:
- - return Config.MainConfig.GetIntDefault("Battleground", "EOS_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return 20;
- case BATTLEGROUND_ARENA_2V2:
- return 2;
- case BATTLEGROUND_ARENA_3V3:
- @@ -854,9 +854,9 @@
- case BATTLEGROUND_ARENA_5V5:
- return 5;
- case BATTLEGROUND_STRAND_OF_THE_ANCIENT:
- - return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
- + return 20;
- default:
- - return dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction;
- + return 9000;
- }
- }
- @@ -1450,6 +1450,8 @@
- data << uint8(0xC);
- data << uint32(6);
- data << uint16(0x1F90);
- + data << uint8(0); // 3.3.0
- + data << uint8(0); // 3.3.0
- data << uint32(11);
- data << uint8(RatedMatch); // 1 = rated match
- }
- @@ -1458,6 +1460,8 @@
- data << uint32(0);
- data << uint8(0) << uint8(2);
- data << Type;
- + data << uint8(0); // 3.3.0
- + data << uint8(0); // 3.3.0
- data << uint16(0x1F90);
- data << InstanceID;
- data << uint8(0);
- Index: src/arcemu-world/CharacterHandler.cpp
- ===================================================================
- --- src/arcemu-world/CharacterHandler.cpp (revision 3116)
- +++ src/arcemu-world/CharacterHandler.cpp (working copy)
- @@ -946,17 +946,17 @@
- #ifdef WIN32
- - _player->BroadcastMessage("Server: %sArcEmu %s - %s-Windows-%s", MSG_COLOR_WHITE, BUILD_TAG, CONFIG, ARCH);
- + _player->BroadcastMessage("Server: %sArcEmu 3.3 Patch Support By Terrorblade %s - %s-Windows-%s", MSG_COLOR_WHITE, BUILD_TAG, CONFIG, ARCH);
- #else
- - _player->BroadcastMessage("Server: %sArcEmu %s - %s-%s", MSG_COLOR_WHITE, BUILD_TAG, PLATFORM_TEXT, ARCH);
- + _player->BroadcastMessage("Server: %sArcEmu 3.3 Patch Support By Terrorblade %s - %s-%s", MSG_COLOR_WHITE, BUILD_TAG, PLATFORM_TEXT, ARCH);
- #endif
- // Revision
- - _player->BroadcastMessage("Revision: %s%u", MSG_COLOR_CYAN, BUILD_REVISION);
- + _player->BroadcastMessage("Revision: %s%u 3.3 Patch revison 12", MSG_COLOR_CYAN, BUILD_REVISION);
- // Bugs
- - _player->BroadcastMessage("Bugs: %s%s", MSG_COLOR_SEXHOTPINK, BUGTRACKER);
- + //_player->BroadcastMessage("Bugs: %s%s", MSG_COLOR_SEXHOTPINK, BUGTRACKER);
- // Recruiting message
- - _player->BroadcastMessage(RECRUITING);
- + //_player->BroadcastMessage(RECRUITING);
- // Shows Online players, and connection peak
- _player->BroadcastMessage("Online Players: %s%u |rPeak: %s%u|r Accepted Connections: %s%u",
- MSG_COLOR_SEXGREEN, sWorld.GetSessionCount(), MSG_COLOR_SEXBLUE, sWorld.PeakSessionCount, MSG_COLOR_SEXBLUE, sWorld.mAcceptedConnections);
- Index: src/arcemu-world/Chat.h
- ===================================================================
- --- src/arcemu-world/Chat.h (revision 3116)
- +++ src/arcemu-world/Chat.h (working copy)
- @@ -80,6 +80,7 @@
- CHAT_MSG_RESTRICTED = 46,
- CHAT_MSG_ACHIEVEMENT = 48,
- CHAT_MSG_GUILD_ACHIEVEMENT = 49,
- + CHAT_MSG_PARTY_LEADER = 51,
- };
- enum Languages
- Index: src/arcemu-world/ChatHandler.cpp
- ===================================================================
- --- src/arcemu-world/ChatHandler.cpp (revision 3116)
- +++ src/arcemu-world/ChatHandler.cpp (working copy)
- @@ -130,6 +130,7 @@
- case CHAT_MSG_SAY:
- case CHAT_MSG_EMOTE:
- case CHAT_MSG_PARTY:
- + case CHAT_MSG_PARTY_LEADER:
- case CHAT_MSG_RAID:
- case CHAT_MSG_RAID_LEADER:
- case CHAT_MSG_RAID_WARNING:
- @@ -240,6 +241,7 @@
- } break;
- case CHAT_MSG_PARTY:
- + case CHAT_MSG_PARTY_LEADER:
- case CHAT_MSG_RAID:
- case CHAT_MSG_RAID_LEADER:
- case CHAT_MSG_RAID_WARNING:
- Index: src/arcemu-world/Group.cpp
- ===================================================================
- --- src/arcemu-world/Group.cpp (revision 3116)
- +++ src/arcemu-world/Group.cpp (working copy)
- @@ -295,6 +295,7 @@
- data << uint8(0); // unk2
- //data << uint64(0); // unk3
- data << uint64(0x500000000004BC0CULL);
- + data << uint32(0); // 3.3 - increments every time a group list update is being sent to client
- data << uint32(m_MemberCount-1); // we don't include self
- for( j = 0; j < m_SubGroupCount; j++ )
- @@ -312,7 +313,8 @@
- if( (*itr2) == NULL )
- continue;
- - data << (*itr2)->name << (*itr2)->guid << uint32(0); // highguid
- + data << (*itr2)->name;
- + data << (*itr2)->guid << uint32(0); // highguid
- if( (*itr2)->m_loggedInPlayer != NULL )
- data << uint8( 1 );
- @@ -331,6 +333,7 @@
- flags |= 4;
- data << flags;
- + data << uint8(0); // 3.3 - may have some use
- }
- }
- }
- @@ -350,6 +353,7 @@
- data << uint8( m_LootThreshold );
- data << uint8( m_difficulty );
- data << uint8( m_raiddifficulty );
- + data << uint8( 0 ); // 3.3 - unk
- if( !(*itr1)->m_loggedInPlayer->IsInWorld() )
- (*itr1)->m_loggedInPlayer->CopyAndSendDelayedPacket( &data );
- @@ -749,10 +753,10 @@
- void Group::SendNullUpdate( Player *pPlayer )
- {
- - // this packet is 24 bytes long. // AS OF 2.1.0
- - uint8 buffer[24];
- - memset(buffer, 0, 24);
- - pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 24, buffer );
- + // this packet is 28 bytes long. // AS OF 3.3
- + uint8 buffer[28];
- + memset(buffer, 0, 28);
- + pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 28, buffer );
- }
- // player is object class because its called from unit class
- Index: src/arcemu-world/ItemPrototype.h
- ===================================================================
- --- src/arcemu-world/ItemPrototype.h (revision 3116)
- +++ src/arcemu-world/ItemPrototype.h (working copy)
- @@ -318,9 +318,9 @@
- MANA_REGENERATION = 43,
- ARMOR_PENETRATION_RATING = 44,
- SPELL_POWER = 45,
- - HEALTH_REGEN = 46,
- - SPELL_PENETRATION = 47,
- - BLOCK_VALUE = 48,
- + HEALTH_REGEN = 46,
- + SPELL_PENETRATION = 47,
- + BLOCK_VALUE = 48,
- };
- enum ITEM_DAMAGE_TYPE
- @@ -340,6 +340,7 @@
- ON_EQUIP = 1,
- CHANCE_ON_HIT = 2,
- SOULSTONE = 4,
- + NO_COOLDOWN = 5,
- LEARNING = 6,
- };
- @@ -410,6 +411,16 @@
- enum Item_Subclass
- {
- + // Consumable
- + ITEM_SUBCLASS_POTION = 0,
- + ITEM_SUBCLASS_ELIXIR = 1,
- + ITEM_SUBCLASS_FLASK = 2,
- + ITEM_SUBCLASS_SCROLL = 3,
- + ITEM_SUBCLASS_FOOD = 4,
- + ITEM_SUBCLASS_ITEM_ENHANCEMENT = 5,
- + ITEM_SUBCLASS_BANDAGE = 6,
- + ITEM_SUBCLASS_CONSUMABLE_OTHER = 7,
- +
- // Weapon
- ITEM_SUBCLASS_WEAPON_AXE = 0,
- ITEM_SUBCLASS_WEAPON_TWOHAND_AXE = 1,
- Index: src/arcemu-world/Level0.cpp
- ===================================================================
- --- src/arcemu-world/Level0.cpp (revision 3116)
- +++ src/arcemu-world/Level0.cpp (working copy)
- @@ -278,7 +278,7 @@
- GreenSystemMessage(m_session, "Server Revision: |r%sArcEmu r%u/%s-%s-%s %s(www.arcemu.org)", MSG_COLOR_WHITE,
- BUILD_REVISION, CONFIG, PLATFORM_TEXT, ARCH, MSG_COLOR_LIGHTBLUE);
- GreenSystemMessage(m_session, "Server Uptime: |r%s", sWorld.GetUptimeString().c_str());
- - GreenSystemMessage(m_session, "Current Players: |r%d (%d GMs)", count, gm);
- + GreenSystemMessage(m_session, "Current Players: |r%d (%d GMs) (%d Peak)", count, gm,(int)sWorld.PeakSessionCount);
- GreenSystemMessage(m_session, "Active Thread Count: |r%u", ThreadPool.GetActiveThreadCount());
- GreenSystemMessage(m_session, "Free Thread Count: |r%u", ThreadPool.GetFreeThreadCount());
- GreenSystemMessage(m_session, "Average Latency: |r%.3fms", (float)((float)avg / (float)count));
- Index: src/arcemu-world/LfgMgr.cpp
- ===================================================================
- --- src/arcemu-world/LfgMgr.cpp (revision 3116)
- +++ src/arcemu-world/LfgMgr.cpp (working copy)
- @@ -86,7 +86,7 @@
- return false;
- }
- -void LfgMgr::SetPlayerInLFGqueue(Player *pl,uint32 LfgDungeonId)
- +void LfgMgr::SetPlayerInLFGqueue(Player *pl, uint32 LfgDungeonId)
- {
- if( pl == NULL )
- return;
- Index: src/arcemu-world/LfgMgr.h
- ===================================================================
- --- src/arcemu-world/LfgMgr.h (revision 3116)
- +++ src/arcemu-world/LfgMgr.h (working copy)
- @@ -32,8 +32,8 @@
- LFG_DAILY_HEROIC_DUNGEON = 9,
- };
- -#define MAX_DUNGEONS 257+1 // check max entry's +1 on lfgdungeons.dbc
- -#define MAX_LFG_QUEUE_ID 3
- +#define MAX_DUNGEONS 280+1 // check max entry's +1 on lfgdungeons.dbc
- +#define MAX_LFG_QUEUE_ID 2
- #define LFG_MATCH_TIMEOUT 30 // in seconds
- class LfgMatch;
- @@ -75,7 +75,7 @@
- uint32 DungeonId;
- Group * pGroup;
- - LfgMatch(uint32 did) : DungeonId(did),pGroup(NULL) { }
- + LfgMatch(uint32 did) : DungeonId(did), pGroup(NULL) { }
- };
- extern uint32 LfgDungeonTypes[MAX_DUNGEONS];
- Index: src/arcemu-world/LootMgr.cpp
- ===================================================================
- --- src/arcemu-world/LootMgr.cpp (revision 3116)
- +++ src/arcemu-world/LootMgr.cpp (working copy)
- @@ -650,7 +650,7 @@
- #define NEED 1
- #define GREED 2
- -LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 itemunk1, uint32 itemunk2, MapMgr * mgr) : EventableObject()
- +LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 randomsuffixid, uint32 randompropertyid, MapMgr * mgr) : EventableObject()
- {
- _mgr = mgr;
- sEventMgr.AddEvent(this, &LootRoll::Finalize, EVENT_LOOT_ROLL_FINALIZE, 60000, 1, 0);
- @@ -658,8 +658,8 @@
- _guid = guid;
- _slotid = slotid;
- _itemid = itemid;
- - _itemunk1 = itemunk1;
- - _itemunk2 = itemunk2;
- + _randomsuffixid = randomsuffixid;
- + _randompropertyid = randompropertyid;
- _remaining = groupcount;
- }
- @@ -710,7 +710,7 @@
- /*
- data.Initialize(SMSG_LOOT_ROLL);
- data << _guid << _slotid << itr->first;
- - data << _itemid << _itemunk1 << _itemunk2;
- + data << _itemid << _randomsuffixid << _randompropertyid;
- data << uint8(itr->second) << uint8(NEED);
- if(gplr && gplr->GetGroup())
- gplr->GetGroup()->SendPacketToAll(&data);
- @@ -730,7 +730,7 @@
- /*
- data.Initialize(SMSG_LOOT_ROLL);
- data << _guid << _slotid << itr->first;
- - data << _itemid << _itemunk1 << _itemunk2;
- + data << _itemid << _randomsuffixid << _randompropertyid;
- data << uint8(itr->second) << uint8(GREED);
- if(gplr && gplr->GetGroup())
- gplr->GetGroup()->SendPacketToAll(&data);
- @@ -778,7 +778,7 @@
- {
- /* all passed */
- data.Initialize(SMSG_LOOT_ALL_PASSED);
- - data << _guid << _groupcount << _itemid << _itemunk1 << _itemunk2;
- + data << _guid << _groupcount << _itemid << _randomsuffixid << _randompropertyid;
- set<uint32>::iterator pitr = m_passRolls.begin();
- while(_player == NULL && pitr != m_passRolls.end())
- _player = _mgr->GetPlayer( (*(pitr++)) );
- @@ -799,7 +799,7 @@
- pLoot->items.at(_slotid).roll = 0;
- data.Initialize(SMSG_LOOT_ROLL_WON);
- - data << _guid << _slotid << _itemid << _itemunk1 << _itemunk2;
- + data << _guid << _slotid << _itemid << _randomsuffixid << _randompropertyid;
- data << _player->GetGUID() << uint8(highest) << uint8(hightype);
- if(_player->InGroup())
- _player->GetGroup()->SendPacketToAll(&data);
- @@ -891,9 +891,10 @@
- WorldPacket data(34);
- data.SetOpcode(SMSG_LOOT_ROLL);
- data << _guid << _slotid << player->GetGUID();
- - data << _itemid << _itemunk1 << _itemunk2;
- + data << _itemid << _randomsuffixid << _randompropertyid;
- - if(choice == NEED) {
- + if(choice == NEED)
- + {
- m_NeedRolls.insert( std::make_pair(player->GetLowGUID(), roll) );
- data << uint8(roll) << uint8(NEED);
- }
- @@ -908,6 +909,8 @@
- m_passRolls.insert( player->GetLowGUID() );
- data << uint8(128) << uint8(128);
- }
- +
- + data << uint8( 0 ); // Requires research - possibly related to disenchanting of loot
- if(player->InGroup())
- player->GetGroup()->SendPacketToAll(&data);
- Index: src/arcemu-world/LootMgr.h
- ===================================================================
- --- src/arcemu-world/LootMgr.h (revision 3116)
- +++ src/arcemu-world/LootMgr.h (working copy)
- @@ -49,8 +49,8 @@
- uint32 _groupcount;
- uint32 _slotid;
- uint32 _itemid;
- - uint32 _itemunk1;
- - uint32 _itemunk2;
- + uint32 _randomsuffixid;
- + uint32 _randompropertyid;
- uint32 _remaining;
- uint64 _guid;
- MapMgr * _mgr;
- Index: src/arcemu-world/MailSystem.cpp
- ===================================================================
- --- src/arcemu-world/MailSystem.cpp (revision 3116)
- +++ src/arcemu-world/MailSystem.cpp (working copy)
- @@ -418,9 +418,9 @@
- // mark the message as read
- message->read_flag = 1;
- - // mail now has a 3 day expiry time
- + // mail now has a 30 day expiry time
- if(!sMailSystem.MailOption(MAIL_FLAG_NO_EXPIRY))
- - message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 3);
- + message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 30);
- // update it in sql
- CharacterDatabase.WaitExecute("UPDATE mailbox SET read_flag = 1, expiry_time = %u WHERE message_id = %u", message->message_id, message->expire_time);
- Index: src/arcemu-world/Master.cpp
- ===================================================================
- --- src/arcemu-world/Master.cpp (revision 3116)
- +++ src/arcemu-world/Master.cpp (working copy)
- @@ -20,7 +20,7 @@
- #include "StdAfx.h"
- -#define BANNER "ArcEmu %s r%u/%s-%s-%s :: World Server"
- +#define BANNER "ArcEmu 3.3 Patch Support By Terrorblade %s r%u/%s-%s-%s :: World Server"
- #ifndef WIN32
- #include <sched.h>
- @@ -194,18 +194,16 @@
- printf(" Website: http://www.ArcEmu.org \n");
- printf(" Forums: http://www.ArcEmu.org/forums/ \n");
- printf(" Credits: http://www.ArcEmu.org/credits \n");
- - printf(" SVN: http://arcemu.info/svn/ \n");
- + printf(" SVN: svn://arcemu.info/svn/ \n");
- printf(" Have fun! \n");
- Log.Line();
- -#ifdef REPACK
- Log.Color(TRED);
- printf("Warning: Using repacks is potentially dangerous. You should always compile\n");
- printf("from the source yourself at www.arcemu.org.\n");
- printf("By using this repack, you agree to not visit the arcemu website and ask\nfor support.\n");
- - printf("For all support, you should visit the repacker's website at %s\n", REPACK_WEBSITE);
- + printf("For all support, you should visit the repacker's thread from the forum you got it from. \n");
- Log.Color(TNORMAL);
- Log.Line();
- -#endif
- Log.log_level = 3;
- if(do_version)
- Index: src/arcemu-world/Master.h
- ===================================================================
- --- src/arcemu-world/Master.h (revision 3116)
- +++ src/arcemu-world/Master.h (working copy)
- @@ -28,7 +28,7 @@
- #include "MainServerDefines.h"
- #ifndef _VERSION
- -# define _VERSION "3.2.0"
- +# define _VERSION "3.3.0"
- #endif
- #if PLATFORM == PLATFORM_WIN32
- Index: src/arcemu-world/NPCHandler.cpp
- ===================================================================
- --- src/arcemu-world/NPCHandler.cpp (revision 3116)
- +++ src/arcemu-world/NPCHandler.cpp (working copy)
- @@ -22,22 +22,22 @@
- trainertype trainer_types[TRAINER_TYPE_MAX] =
- {
- -{ "Warrior", 0 },
- -{ "Paladin", 0 },
- -{ "Rogue" , 0 },
- -{ "Warlock", 0 },
- -{ "Mage", 0 },
- +{ "Warrior", 0 },
- +{ "Paladin", 0 },
- +{ "Rogue" , 0 },
- +{ "Warlock", 0 },
- +{ "Mage", 0 },
- { "Shaman", 0 },
- { "Priest", 0 },
- { "Hunter", 0 },
- -{ "Druid", 0 },
- -{ "Leatherwork", 2 },
- -{ "Skinning", 2 },
- -{ "Fishing", 2 },
- -{ "First Aid", 2 },
- -{ "Physician", 2 },
- -{ "Engineer", 2 },
- -{ "Weapon Master", 0 },
- +{ "Druid", 0 },
- +{ "Leatherwork", 2 },
- +{ "Skinning", 2 },
- +{ "Fishing", 2 },
- +{ "First Aid", 2 },
- +{ "Physician", 2 },
- +{ "Engineer", 2 },
- +{ "Weapon Master", 0 },
- };
- bool CanTrainAt(Player * plr, Trainer * trn)
- Index: src/arcemu-world/Opcodes.cpp
- ===================================================================
- --- src/arcemu-world/Opcodes.cpp (revision 3116)
- +++ src/arcemu-world/Opcodes.cpp (working copy)
- @@ -1117,8 +1117,8 @@
- {SMSG_CALENDAR_EVENT_UPDATED_ALERT, "SMSG_CALENDAR_EVENT_UPDATED_ALERT"},
- {SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT, "SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT"},
- {CMSG_CALENDAR_COMPLAIN, "CMSG_CALENDAR_COMPLAIN"},
- - {SMSG_CALENDAR_EVENT_RESERVED_2, "SMSG_CALENDAR_EVENT_RESERVED_2"},
- - {SMSG_CALENDAR_EVENT_RESERVED_3, "SMSG_CALENDAR_EVENT_RESERVED_3"},
- + {CMSG_CALENDAR_GET_NUM_PENDING, "CMSG_CALENDAR_GET_NUM_PENDING"},
- + {SMSG_CALENDAR_SEND_NUM_PENDING, "SMSG_CALENDAR_SEND_NUM_PENDING"},
- {CMSG_SAVE_DANCE, "CMSG_SAVE_DANCE"},
- {SMSG_NOTIFY_DANCE, "SMSG_NOTIFY_DANCE"},
- {CMSG_PLAY_DANCE, "CMSG_PLAY_DANCE"},
- @@ -1206,14 +1206,53 @@
- {SMSG_CONTROL_VECHICLE, "SMSG_CONTROL_VECHICLE"},
- {SMSG_CRITERIA_DELETED, "SMSG_CRITERIA_DELETED"},
- {SMSG_ACHIEVEMENT_DELETED, "SMSG_ACHIEVEMENT_DELETED"},
- - {UMSG_UNKNOWN_1184, "UMSG_UNKNOWN_1184"},
- - {UMSG_UNKNOWN_1185, "UMSG_UNKNOWN_1185"},
- - {UMSG_UNKNOWN_1186, "UMSG_UNKNOWN_1186"},
- - {UMSG_UNKNOWN_1187, "UMSG_UNKNOWN_1187"},
- + {CMSG_SERVER_INFO_QUERY, "CMSG_SERVER_INFO_QUERY"},
- + {SMSG_SERVER_INFO_RESPONSE, "SMSG_SERVER_INFO_RESPONSE"},
- + {CMSG_CHECK_LOGIN_CRITERIA, "CMSG_CHECK_LOGIN_CRITERIA"},
- + {SMSG_SERVER_BUCK_DATA_START, "SMSG_SERVER_BUCK_DATA_START"},
- +
- + {CMSG_QUERY_VEHICLE_STATUS, "CMSG_QUERY_VEHICLE_STATUS"},
- + {UMSG_UNKNOWN_1189, "UMSG_UNKNOWN_1189"},
- + {SMSG_UNKNOWN_1190, "SMSG_UNKNOWN_1190"},
- + {SMSG_UNKNOWN_1191, "SMSG_UNKNOWN_1191"},
- + {CMSG_UNKNOWN_1192, "CMSG_UNKNOWN_1192"},
- + {CMSG_EJECT_PASSENGER, "CMSG_EJECT_PASSENGER"},
- + {SMSG_PET_GUIDS, "SMSG_PET_GUIDS"},
- + {SMSG_CLIENTCACHE_VERSION, "SMSG_CLIENTCACHE_VERSION"},
- + {UMSG_UNKNOWN_1196, "UMSG_UNKNOWN_1196"},
- + {UMSG_UNKNOWN_1197, "UMSG_UNKNOWN_1197"},
- + {UMSG_UNKNOWN_1198, "UMSG_UNKNOWN_1198"},
- + {UMSG_UNKNOWN_1199, "UMSG_UNKNOWN_1199"},
- + {UMSG_UNKNOWN_1200, "UMSG_UNKNOWN_1200"},
- + {UMSG_UNKNOWN_1201, "UMSG_UNKNOWN_1201"},
- + {SMSG_ITEMREFUNDINFO, "SMSG_UNKNOWN_1202"},
- + {CMSG_ITEMREFUNDINFO, "CMSG_UNKNOWN_1203"},
- + {CMSG_ITEMREFUNDREQUEST, "CMSG_UNKNOWN_1204"},
- + {SMSG_ITEMREFUNDREQUEST, "SMSG_UNKNOWN_1205"},
- + {CMSG_UNKNOWN_1206, "CMSG_UNKNOWN_1206"},
- + {SMSG_UNKNOWN_1207, "CMSG_UNKNOWN_1180"},
- + {CMSG_LFG_SET_ROLES, "CMSG_LFG_SET_ROLES"},
- + {UMSG_UNKNOWN_1209, "UMSG_UNKNOWN_1209"},
- + {CMSG_UNKNOWN_1210, "CMSG_UNKNOWN_1210"},
- + {SMSG_UNKNOWN_1211, "SMSG_UNKNOWN_1211"},
- + {SMSG_EQUIPMENT_SET_LIST, "SMSG_EQUIPMENT_SET_LIST"},
- + {CMSG_EQUIPMENT_SET_SAVE, "CMSG_EQUIPMENT_SET_SAVE"},
- + {CMSG_UNKNOWN_1214, "CMSG_UNKNOWN_1214"},
- + {SMSG_UNKNOWN_1215, "SMSG_UNKNOWN_1215"},
- + {SMSG_TALENTS_INFO, "SMSG_TALENTS_INFO"},
- + {CMSG_LEARN_TALENTS_MULTIPLE, "CMSG_LEARN_TALENTS_MULTIPLE"},
- + {CMSG_LEARN_PREVIEW_TALENTS_PET, "CMSG_LEARN_PREVIEW_TALENTS_PET"},
- + {UMSG_UNKNOWN_1219, "UMSG_UNKNOWN_1219"},
- + {UMSG_UNKNOWN_1220, "UMSG_UNKNOWN_1220"},
- + {UMSG_UNKNOWN_1221, "UMSG_UNKNOWN_1221"},
- + {UMSG_UNKNOWN_1222, "UMSG_UNKNOWN_1222"},
- + {SMSG_UNKNOWN_1223, "SMSG_UNKNOWN_1223"},
- + {SMSG_UNKNOWN_1224, "SMSG_UNKNOWN_1224"},
- + {UMSG_UNKNOWN_1225, "UMSG_UNKNOWN_1225"},
- + {UMSG_UNKNOWN_1226, "UMSG_UNKNOWN_1226"},
- + {CMSG_EQUIPMENT_SET_USE, "CMSG_EQUIPMENT_SET_USE"},
- + {SMSG_EQUIPMENT_SET_USE_RESULT, "SMSG_EQUIPMENT_SET_USE_RESULT"},
- {NUM_MSG_TYPES, "NUM_MSG_TYPES"},
- - {CMSG_LFG_SET_ROLES, "CMSG_LFG_SET_ROLES"},
- - {SMSG_EQUIPMENT_SET_LIST, "SMSG_EQUIPMENT_SET_LIST"},
- - {SMSG_TALENTS_INFO, "SMSG_TALENTS_INFO"},
- {CMSG_LEARN_TALENTS_MULTIPLE, "CMSG_LEARN_TALENTS_MULTIPLE"},
- {MSG_SET_RAID_DIFFICULTY, "MSG_SET_RAID_DIFFICULTY"},
- {CMSG_WORLD_STATE_UI_TIMER_UPDATE, "CMSG_WORLD_STATE_UI_TIMER_UPDATE"},
- Index: src/arcemu-world/Opcodes.h
- ===================================================================
- --- src/arcemu-world/Opcodes.h (revision 3116)
- +++ src/arcemu-world/Opcodes.h (working copy)
- @@ -741,7 +741,7 @@
- SMSG_CHAR_RENAME = 0x2C8,
- CMSG_MOVE_SPLINE_DONE = 0x2C9,
- CMSG_MOVE_FALL_RESET = 0x2CA,
- - SMSG_UPDATE_LAST_INSTANCE_CREATED = 0x2CB,
- + SMSG_UPDATE_LAST_INSTANCE_CREATED = 0x2CB,
- SMSG_RAID_INSTANCE_INFO = 0x2CC,
- CMSG_REQUEST_RAID_INFO = 0x2CD,
- CMSG_MOVE_TIME_SKIPPED = 0x2CE,
- @@ -1121,8 +1121,8 @@
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x444,
- SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT = 0x445,
- CMSG_CALENDAR_COMPLAIN = 0x446,
- - SMSG_CALENDAR_EVENT_RESERVED_2 = 0x447,
- - SMSG_CALENDAR_EVENT_RESERVED_3 = 0x448,
- + CMSG_CALENDAR_GET_NUM_PENDING = 0x447,
- + SMSG_CALENDAR_SEND_NUM_PENDING = 0x448,
- CMSG_SAVE_DANCE = 0x449,
- SMSG_NOTIFY_DANCE = 0x44A,
- CMSG_PLAY_DANCE = 0x44B,
- @@ -1210,19 +1210,51 @@
- SMSG_CONTROL_VECHICLE = 0x49D, // empty
- SMSG_CRITERIA_DELETED = 0x49E, // uint32
- SMSG_ACHIEVEMENT_DELETED = 0x49F, // uint32
- - UMSG_UNKNOWN_1184 = 0x4A0, // not found in client
- - UMSG_UNKNOWN_1185 = 0x4A1,
- - UMSG_UNKNOWN_1186 = 0x4A2,
- - UMSG_UNKNOWN_1187 = 0x4A3,
- -// NUM_MSG_TYPES = 0x4A4,
- - SMSG_ITEMREFUNDINFO = 0x4B2,
- - CMSG_ITEMREFUNDINFO = 0x4B3,
- - CMSG_ITEMREFUNDREQUEST = 0x4B4,
- - SMSG_ITEMREFUNDREQUEST = 0x4B5,
- + CMSG_SERVER_INFO_QUERY = 0x4A0, // not found
- + SMSG_SERVER_INFO_RESPONSE = 0x4A1, // not found
- + CMSG_CHECK_LOGIN_CRITERIA = 0x4A2, // not found
- + SMSG_SERVER_BUCK_DATA_START = 0x4A3, // not found
- + CMSG_QUERY_VEHICLE_STATUS = 0x4A4, // not found
- + UMSG_UNKNOWN_1189 = 0x4A5, // not found, old SMSG_PET_GUIDS
- + SMSG_UNKNOWN_1190 = 0x4A6, // smsg unk, old SMSG_CLIENTCACHE_VERSION
- + SMSG_UNKNOWN_1191 = 0x4A7, // smsg guid+uint32 (vehicle)
- + CMSG_UNKNOWN_1192 = 0x4A8, // cmsg uint64
- + CMSG_EJECT_PASSENGER = 0x4A9, // cmsg uint64
- + SMSG_PET_GUIDS = 0x4AA, // shifted+5
- + SMSG_CLIENTCACHE_VERSION = 0x4AB, // shifted+5
- + UMSG_UNKNOWN_1196 = 0x4AC, // not found
- + UMSG_UNKNOWN_1197 = 0x4AD, // not found
- + UMSG_UNKNOWN_1198 = 0x4AE, // not found
- + UMSG_UNKNOWN_1199 = 0x4AF, // not found
- + UMSG_UNKNOWN_1200 = 0x4B0, // not found
- + UMSG_UNKNOWN_1201 = 0x4B1, // not found
- + SMSG_ITEMREFUNDINFO = 0x4B2, // refund something
- + CMSG_ITEMREFUNDINFO = 0x4B3, // refund request?
- + CMSG_ITEMREFUNDREQUEST = 0x4B4, // lua: ContainerRefundItemPurchase
- + SMSG_ITEMREFUNDREQUEST = 0x4B5, // refund something
- + CMSG_UNKNOWN_1206 = 0x4B6, // CMSG, uint32
- + SMSG_UNKNOWN_1207 = 0x4B7, // SMSG, string+float
- CMSG_LFG_SET_ROLES = 0x4B8, // CMSG, empty, lua: SetLFGRoles
- + UMSG_UNKNOWN_1209 = 0x4B9, // not found
- + CMSG_UNKNOWN_1210 = 0x4BA, // CMSG, uint64, lua: CalendarContextEventSignUp
- + SMSG_UNKNOWN_1211 = 0x4BB, // SMSG, calendar related
- SMSG_EQUIPMENT_SET_LIST = 0x4BC, // SMSG, equipment manager list?
- + CMSG_EQUIPMENT_SET_SAVE = 0x4BD, // CMSG, lua: SaveEquipmentSet
- + CMSG_UNKNOWN_1214 = 0x4BE, // CMSG, missle?
- + SMSG_UNKNOWN_1215 = 0x4BF, // SMSG, uint64, uint8, 3 x float
- SMSG_TALENTS_INFO = 0x4C0, // SMSG, talents related
- - CMSG_LEARN_TALENTS_MULTIPLE = 0x4C1,
- + CMSG_LEARN_TALENTS_MULTIPLE = 0x4C1, // CMSG, lua: LearnPreviewTalents (for player?)
- + CMSG_LEARN_PREVIEW_TALENTS_PET = 0x4C2, // CMSG, lua: LearnPreviewTalents (for pet?)
- + UMSG_UNKNOWN_1219 = 0x4C3, // not found
- + UMSG_UNKNOWN_1220 = 0x4C4, // not found
- + UMSG_UNKNOWN_1221 = 0x4C5, // not found
- + UMSG_UNKNOWN_1222 = 0x4C6, // not found
- + SMSG_UNKNOWN_1223 = 0x4C7, // uint64, arena pet?
- + SMSG_UNKNOWN_1224 = 0x4C8, // uint32 "Can't change arena team..."
- + UMSG_UNKNOWN_1225 = 0x4C9, // not found
- + UMSG_UNKNOWN_1226 = 0x4CA, // not found
- + CMSG_EQUIPMENT_SET_USE = 0x4CB, // CMSG, lua: UseEquipmentSet
- + SMSG_EQUIPMENT_SET_USE_RESULT = 0x4CC, // SMSG, UseEquipmentSetResult?
- MSG_SET_RAID_DIFFICULTY = 0x4EB,
- CMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F6,
- SMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F7,
- Index: src/arcemu-world/Pet.cpp
- ===================================================================
- --- src/arcemu-world/Pet.cpp (revision 3116)
- +++ src/arcemu-world/Pet.cpp (working copy)
- @@ -20,15 +20,16 @@
- #include "StdAfx.h"
- -#define WATER_ELEMENTAL 510
- -#define PET_IMP 416
- -#define PET_VOIDWALKER 1860
- -#define PET_SUCCUBUS 1863
- -#define PET_FELHUNTER 417
- -#define PET_FELGUARD 17252
- -#define SHADOWFIEND 19668
- -#define SPIRITWOLF 29264
- -#define DANCINGRUNEWEAPON 27893
- +#define WATER_ELEMENTAL 510
- +#define PET_IMP 416
- +#define PET_VOIDWALKER 1860
- +#define PET_SUCCUBUS 1863
- +#define PET_FELHUNTER 417
- +#define PET_FELGUARD 17252
- +#define SHADOWFIEND 19668
- +#define SPIRITWOLF 29264
- +#define DANCINGRUNEWEAPON 27893
- +#define TREANT 1964
- uint32 Pet::GetAutoCastTypeForSpell( SpellEntry * ent )
- {
- @@ -111,6 +112,9 @@
- case DANCINGRUNEWEAPON:
- m_name = "Rune Weapon";
- break;
- + case TREANT:
- + m_name = "Treant";
- + break;
- case PET_IMP:
- case PET_VOIDWALKER:
- case PET_SUCCUBUS:
- @@ -142,7 +146,7 @@
- return;
- }
- - if( owner->GetSummon() != NULL )
- + if( owner->GetSummon() != NULL && type != 4 )
- owner->GetSummon()->Dismiss(); // to avoid problems caused by loosing reference to old pet
- m_Owner = owner;
- @@ -1251,6 +1255,7 @@
- stat_index = 4;
- break;
- case 29264:
- + case TREANT:
- stat_index = 5;
- break;
- case 27893:
- Index: src/arcemu-world/Player.cpp
- ===================================================================
- --- src/arcemu-world/Player.cpp (revision 3116)
- +++ src/arcemu-world/Player.cpp (working copy)
- @@ -3751,7 +3751,7 @@
- // clear all fields
- for(int i = 0; i < 25; ++i)
- {
- - baseindex = PLAYER_QUEST_LOG_1_1 + (i * 4);
- + baseindex = PLAYER_QUEST_LOG_1_1 + (i * 5);
- SetUInt32Value(baseindex + 0, 0);
- SetUInt32Value(baseindex + 1, 0);
- SetUInt32Value(baseindex + 2, 0);
- @@ -4654,7 +4654,7 @@
- if(getRace()==RACE_NIGHTELF)
- {
- - SpellEntry *inf=dbcSpell.LookupEntry(9036); // Cebernic:20584 triggered.
- + SpellEntry *inf=dbcSpell.LookupEntry(9036);
- Spell * sp = new Spell(this,inf,true,NULL);
- sp->prepare(&tgt);
- }
- @@ -6472,6 +6472,36 @@
- return true;
- }
- +void Player::SendPreventSchoolCast(uint32 SpellSchool, uint32 unTimeMs)
- +{
- + WorldPacket data(SMSG_SPELL_COOLDOWN, 8 + 1 + mSpells.size() * 8);
- + data << GetGUID();
- + data << uint8(0x0);
- + SpellSet::iterator sitr;
- + for (sitr = mSpells.begin(); sitr != mSpells.end(); ++sitr)
- + {
- + uint32 SpellId = (*sitr);
- +
- + SpellEntry * spellInfo = dbcSpell.LookupEntry(SpellId);
- + if (!spellInfo)
- + {
- + ASSERT(spellInfo);
- + continue;
- + }
- +
- + // Not send cooldown for this spells
- + if (spellInfo->Attributes & ATTRIBUTES_TRIGGER_COOLDOWN)
- + continue;
- +
- + if( spellInfo->School == SpellSchool )
- + {
- + data << uint32(SpellId);
- + data << uint32(unTimeMs); // in m.secs
- + }
- + }
- + GetSession()->SendPacket(&data);
- +}
- +
- void Player::EventActivateGameObject(GameObject* obj)
- {
- obj->BuildFieldUpdatePacket(this, GAMEOBJECT_DYNAMIC, 1 | 8);
- @@ -8274,6 +8304,13 @@
- data << uint8( 1 );
- SendMessageToSet( &data, true );
- + //Send hook OnDuelFinished
- +
- + if ( WinCondition != 0 )
- + sHookInterface.OnDuelFinished( DuelingWith, this );
- + else
- + sHookInterface.OnDuelFinished( this, DuelingWith );
- +
- //Clear Duel Related Stuff
- GameObject* arbiter = m_mapMgr ? GetMapMgr()->GetGameObject(GetUInt32Value(PLAYER_DUEL_ARBITER)) : 0;
- @@ -9813,6 +9850,30 @@
- return float2int32(r);
- }
- +uint32 Player::GetFlametongueDMG(uint32 spellid)
- +{
- + float dmg = 0;
- + Item * i = GetItemInterface()->GetInventoryItem( EQUIPMENT_SLOT_MAINHAND );
- + float delay = float(i->GetProto()->Delay * 0.001f);
- + SpellEntry * sp = dbcSpell.LookupEntry(spellid);
- +
- + if( delay == 0 )
- + return 1;
- +
- + // Based on calculation from Shauren, thx for it
- + float min = (float)sp->EffectBasePoints[0]/77.0f;
- + float max = (float)sp->EffectBasePoints[0]/25.0f;
- +
- + dmg = float(float(min * delay) * 0.88f);
- +
- + if( dmg < min )
- + dmg = min;
- + else if( dmg > max )
- + dmg = max;
- +
- + return float2int32(dmg);
- +}
- +
- void Player::EventPortToGM(Player *p)
- {
- SafeTeleport(p->GetMapId(),p->GetInstanceID(),p->GetPosition());
- Index: src/arcemu-world/Player.h
- ===================================================================
- --- src/arcemu-world/Player.h (revision 3116)
- +++ src/arcemu-world/Player.h (working copy)
- @@ -275,7 +275,13 @@
- PVPTITLE_RELENTLESS_GLADIATOR = 134,
- PVPTITLE_GRAND_CRUSADER = 135,
- PVPTITLE_THE_ARGENT_DEFENDER = 136,
- - PVPTITLE_END = 137,
- + PVPTITLE_THE_PATIENT = 137,
- + PVPTITLE_THE_LIGHT_OF_THE_DAWN = 138,
- + PVPTITLE_BANE_OF_THE_FALLEN_KING = 139,
- + PVPTITLE_THE_KINGSLAYER = 140,
- + PVPTITLE_OF_THE_ASHEN_VERDICT = 141,
- + PVPTITLE_WRATHFUL_GLADIATOR = 142,
- + PVPTITLE_END = 143,
- };
- enum PvPAreaStatus
- @@ -1152,6 +1158,8 @@
- uint32 GetMainMeleeDamage(uint32 AP_owerride); //i need this for windfury
- uint32 GetMaxLevel(){ return GetUInt32Value(PLAYER_FIELD_MAX_LEVEL); }
- + uint32 GetFlametongueDMG(uint32 spellid); // for flametongue
- +
- const uint64& GetSelection( ) const { return m_curSelection; }
- const uint64& GetTarget( ) const { return m_curTarget; }
- void SetSelection(const uint64 &guid) { m_curSelection = guid; }
- @@ -1170,6 +1178,7 @@
- void removeSpellByHashName(uint32 hash);
- bool removeSpell(uint32 SpellID, bool MoveToDeleted, bool SupercededSpell, uint32 SupercededSpellID);
- bool removeDeletedSpell( uint32 SpellID );
- + void SendPreventSchoolCast(uint32 SpellSchool, uint32 unTimeMs);
- // PLEASE DO NOT INLINE!
- void AddOnStrikeSpell(SpellEntry* sp, uint32 delay)
- Index: src/arcemu-world/PlayerPacketWrapper.cpp
- ===================================================================
- --- src/arcemu-world/PlayerPacketWrapper.cpp (revision 3116)
- +++ src/arcemu-world/PlayerPacketWrapper.cpp (working copy)
- @@ -531,7 +531,8 @@
- data2 << uint32( 0 );
- data2 << uint32( iter->iItemsCount );
- - data2 << uint32( 60000 ); // countdown
- + data2 << uint32( 60000 ); // countdown
- + data2 << uint8( 7 ); // some sort of flags that require research
- }
- Group * pGroup = m_playerInfo->m_Group;
- Index: src/arcemu-world/Quest.cpp
- ===================================================================
- --- src/arcemu-world/Quest.cpp (revision 3116)
- +++ src/arcemu-world/Quest.cpp (working copy)
- @@ -32,50 +32,71 @@
- LocalizedQuest * lci = (language>0) ? sLocalizationMgr.GetLocalizedQuest(qst->id, language) : NULL;
- uint32 i;
- - *data << uint32(qst->id); // Quest ID
- - *data << uint32(2); // Unknown, always seems to be 2
- + *data << uint32(qst->id); // Quest ID
- + *data << uint32(2); // Unknown, always seems to be 2
- *data << uint32(qst->max_level); // Quest level
- + *data << uint32(qst->min_level); // Quest required level
- if(qst->quest_sort > 0)
- - *data << int32(-(int32)qst->quest_sort); // Negative if pointing to a sort.
- + *data << int32(-(int32)qst->quest_sort); // Negative if pointing to a sort.
- else
- - *data << uint32(qst->zone_id); // Positive if pointing to a zone.
- + *data << uint32(qst->zone_id); // Positive if pointing to a zone.
- - *data << uint32(qst->type); // Info ID / Type
- - *data << qst->suggestedplayers; // suggested players
- - *data << uint32(qst->required_rep_faction); // Faction ID
- - *data << uint32(qst->required_rep_value); // Faction Amount
- - *data << uint32(0); // Unknown (always 0)
- - *data << uint32(0); // Unknown (always 0)
- + *data << uint32(qst->type); // Info ID / Type
- + *data << qst->suggestedplayers; // suggested players
- + *data << uint32(qst->required_rep_faction); // Faction ID
- + *data << uint32(qst->required_rep_value); // Faction Amount
- + *data << uint32(0); // Unknown (always 0)
- + *data << uint32(0); // Unknown (always 0)
- *data << uint32(qst->next_quest_id); // Next Quest ID
- - *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) ); // Copper reward
- - *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0); // Required Money
- - *data << uint32(qst->effect_on_player); // Spell casted on player upon completion
- - *data << uint32(qst->reward_spell); // Spell added to spellbook upon completion
- - *data << qst->bonushonor; // 2.3.0 - bonus honor
- - *data << uint32(qst->srcitem); // Item given at the start of a quest (srcitem)
- - *data << uint32(qst->quest_flags); // Quest Flags
- - *data << qst->rewardtitleid; // 2.4.0 unk
- + *data << uint32(0); // Column id +1 from QuestXp.dbc, entry is quest level
- + *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) ); // Copper reward
- + *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0); // Required Money
- + *data << uint32(qst->effect_on_player); // Spell casted on player upon completion
- + *data << uint32(qst->reward_spell); // Spell added to spellbook upon completion
- + *data << uint32(qst->bonushonor); // 2.3.0 - bonus honor
- + *data << float(0); // 3.3.0 - some multiplier for honor
- + *data << uint32(qst->srcitem); // Item given at the start of a quest (srcitem)
- + *data << uint32(qst->quest_flags); // Quest Flags
- + *data << qst->rewardtitleid; // 2.4.0 unk
- *data << uint32(0); // playerkillcount
- *data << qst->rewardtalents;
- + *data << uint32(0); // 3.3.0 Unknown
- + *data << uint32(0); // 3.3.0 Unknown
- // (loop 4 times)
- for(i = 0; i < 4; ++i)
- {
- - *data << qst->reward_item[i]; // Forced Reward Item [i]
- - *data << qst->reward_itemcount[i]; // Forced Reward Item Count [i]
- + *data << qst->reward_item[i]; // Forced Reward Item [i]
- + *data << qst->reward_itemcount[i]; // Forced Reward Item Count [i]
- }
- // (loop 6 times)
- for(i = 0; i < 6; ++i)
- {
- - *data << qst->reward_choiceitem[i]; // Choice Reward Item [i]
- + *data << qst->reward_choiceitem[i]; // Choice Reward Item [i]
- *data << qst->reward_choiceitemcount[i]; // Choice Reward Item Count [i]
- }
- - *data << qst->point_mapid; // Unknown
- - *data << qst->point_x; // Unknown
- - *data << qst->point_y; // Unknown
- + // (loop 5 times) - these 3 loops are here to allow displaying rep rewards in client (not handled in core yet)
- + for(uint32 i = 0; i < 5; ++i)
- + {
- + *data << uint32(qst->reward_repfaction[i]); // reward factions ids
- + }
- +
- + for(uint32 i = 0; i < 5; ++i)
- + {
- + *data << uint32(0); // column index in QuestFactionReward.dbc but use unknown
- + }
- +
- + for(uint32 i = 0; i < 5; ++i) // Unknown
- + {
- + *data << uint32(0);
- + }
- +
- + *data << qst->point_mapid; // Unknown
- + *data << qst->point_x; // Unknown
- + *data << qst->point_y; // Unknown
- *data << qst->point_opt; // Unknown
- if(lci)
- @@ -84,25 +105,28 @@
- *data << lci->Objectives;
- *data << lci->Details;
- *data << lci->EndText;
- + *data << uint8(0);
- }
- else
- {
- - *data << qst->title; // Title / name of quest
- - *data << qst->objectives; // Objectives / description
- - *data << qst->details; // Details
- - *data << qst->endtext; // Subdescription
- + *data << qst->title; // Title / name of quest
- + *data << qst->objectives; // Objectives / description
- + *data << qst->details; // Details
- + *data << qst->endtext; // Subdescription
- + *data << uint8(0); // most 3.3.0 quests i seen have something like "Return to NPCNAME"
- }
- for(i = 0; i < 4; ++i)
- {
- - *data << qst->required_mob[i]; // Kill mob entry ID [i]
- - *data << qst->required_mobcount[i]; // Kill mob count [i]
- - *data << uint32( 0 ); // Unknown
- + *data << qst->required_mob[i]; // Kill mob entry ID [i]
- + *data << qst->required_mobcount[i]; // Kill mob count [i]
- + *data << uint32(0); // Unknown
- + *data << uint32(0); // 3.3.0 Unknown
- }
- for(i = 0; i < 6; ++i)
- {
- - *data << qst->required_item[i]; // Collect item [i]
- + *data << qst->required_item[i]; // Collect item [i]
- *data << qst->required_itemcount[i]; // Collect item count [i]
- }
- @@ -399,7 +423,7 @@
- uint32 field0 = 0; // 0x01000000 = "Objective Complete" - 0x02 = Quest Failed - 0x04 = Quest Accepted
- // next field is count (kills, etc)
- - uint32 field1 = 0;
- + uint64 field1 = 0;
- // explored areas
- if(m_quest->count_requiredtriggers)
- @@ -475,12 +499,12 @@
- for(int i = 0; i < 4; ++i)
- {
- if( m_quest->required_mob[i] && m_mobcount[i] > 0 )
- - p[i] |= (uint8)m_mobcount[i];
- + p[2*i] |= (uint8)m_mobcount[i];
- }
- }
- m_plr->SetUInt32Value(base + 1, field0);
- - m_plr->SetUInt32Value(base + 2, field1);
- + m_plr->SetUInt64Value(base + 2, field1);
- m_plr->SetUInt32Value(base + 3, ( m_time_left ? (uint32)(UNIXTIME+m_time_left/1000) : 0 ) );
- }
- Index: src/arcemu-world/Quest.h
- ===================================================================
- --- src/arcemu-world/Quest.h (revision 3116)
- +++ src/arcemu-world/Quest.h (working copy)
- @@ -37,18 +37,18 @@
- enum QUEST_STATUS
- {
- - QMGR_QUEST_NOT_AVAILABLE = 0x00, // There aren't any quests available. | "No Mark"
- - QMGR_QUEST_AVAILABLELOW_LEVEL = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !"
- - QMGR_QUEST_CHAT = 0x02, // Quest available it shows a talk balloon. | "No Mark"
- - // On 3.1.2 0x03 and 0x04 is some new status, so the old ones are now shifted by 2 (0x03->0x05 and so on).
- - QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL = 0x03,
- - QMGR_QUEST_REPEATABLE_LOWLEVEL = 0x04,
- - QMGR_QUEST_NOT_FINISHED = 0x05, // Quest isn't finished yet. | "Gray Question ? Mark"
- - QMGR_QUEST_REPEATABLE_FINISHED = 0x06,
- - QMGR_QUEST_REPEATABLE = 0x07, // Quest repeatable | "Blue Question ? Mark"
- - QMGR_QUEST_AVAILABLE = 0x08, // Quest available, and your level is enough | "Yellow Quotation ! Mark"
- - QMGR_QUEST_FINISHED = 0x0A, // Quest has been finished. | "Yellow Question ? Mark" (7 has no minimap icon)
- - //QUEST_ITEM_UPDATE = 0x06 // Yellow Question "?" Mark. //Unknown
- + QMGR_QUEST_NOT_AVAILABLE = 0x00, // There aren't any quests available. | "No Mark"
- + QMGR_QUEST_AVAILABLELOW_LEVEL = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !"
- + QMGR_QUEST_CHAT = 0x02, // Quest available it shows a talk balloon. | "No Mark"
- + // On 3.1.2 0x03 and 0x04 is some new status, so the old ones are now shifted by 2 (0x03->0x05 and so on).
- + QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL = 0x03,
- + QMGR_QUEST_REPEATABLE_LOWLEVEL = 0x04,
- + QMGR_QUEST_NOT_FINISHED = 0x05, // Quest isn't finished yet. | "Gray Question ? Mark"
- + QMGR_QUEST_REPEATABLE_FINISHED = 0x06,
- + QMGR_QUEST_REPEATABLE = 0x07, // Quest repeatable | "Blue Question ? Mark"
- + QMGR_QUEST_AVAILABLE = 0x08, // Quest available, and your level is enough | "Yellow Quotation ! Mark"
- + QMGR_QUEST_FINISHED = 0x0A, // Quest has been finished. | "Yellow Question ? Mark" (7 has no minimap icon)
- + //QUEST_ITEM_UPDATE = 0x06 // Yellow Question "?" Mark. //Unknown
- };
- enum QuestStatus // dupe for scriptdev2
- @@ -284,7 +284,7 @@
- ARCEMU_INLINE uint32 GetBaseField(uint32 slot)
- {
- - return PLAYER_QUEST_LOG_1_1 + (slot * 4);
- + return PLAYER_QUEST_LOG_1_1 + (slot * 5);
- }
- private:
- Index: src/arcemu-world/QuestHandler.cpp
- ===================================================================
- --- src/arcemu-world/QuestHandler.cpp (revision 3116)
- +++ src/arcemu-world/QuestHandler.cpp (working copy)
- @@ -116,9 +116,11 @@
- uint64 guid;
- uint32 quest_id;
- uint32 status = 0;
- + uint8 unk;
- recv_data >> guid;
- recv_data >> quest_id;
- + recv_data >> unk;
- Object *qst_giver = NULL;
- Index: src/arcemu-world/QuestMgr.cpp
- ===================================================================
- --- src/arcemu-world/QuestMgr.cpp (revision 3116)
- +++ src/arcemu-world/QuestMgr.cpp (working copy)
- @@ -302,8 +302,8 @@
- ItemPrototype * it;
- uint32 i = 0;
- data->SetOpcode(SMSG_QUESTGIVER_OFFER_REWARD);
- - *data << qst_giver->GetGUID();
- - *data << qst->id;
- + *data << uint64(qst_giver->GetGUID());
- + *data << uint32(qst->id);
- if( lq )
- {
- @@ -318,7 +318,7 @@
- //uint32 a = 0, b = 0, c = 1, d = 0, e = 1;
- - *data << ( qst->next_quest_id ? uint32(1) : uint32(0) );// next quest shit
- + *data << ( qst->next_quest_id ? uint8(1) : uint8(0) );// next quest shit
- *data << uint32(0); // maybe required money
- *data << qst->completionemotecount;
- @@ -358,14 +358,23 @@
- }
- }
- -
- + *data << uint32(0);
- *data << GenerateRewardMoney( plr, qst );
- - *data << qst->bonushonor;
- + *data << (qst->bonushonor * 10);
- + *data << float(0);
- *data << uint32(0);
- *data << qst->reward_spell;
- *data << qst->effect_on_player;
- *data << qst->rewardtitleid;
- *data << qst->rewardtalents;
- + *data << uint32(0);
- + *data << uint32(0);
- + for(int i = 0; i < 5; ++i) // reward factions ids
- + *data << uint32(0);
- + for(int i = 0; i < 5; ++i) // columnid in QuestFactionReward.dbc (zero based)?
- + *data << uint32(0);
- + for(int i = 0; i < 5; ++i) // reward reputation override?
- + *data << uint32(0);
- }
- void QuestMgr::BuildQuestDetails(WorldPacket *data, Quest* qst, Object* qst_giver, uint32 menutype, uint32 language, Player * plr)
- @@ -392,10 +401,11 @@
- *data << qst->objectives;
- }
- - *data << uint32(1); // Activate accept
- + *data << uint8(1); // Activate accept
- *data << qst->suggestedplayers; // "Suggested players"
- *data << uint8(0); // Added in 3.0.2, name or text(?)
- *data << uint8(0); //VLack: some 3.1.x thing
- + *data << uint8(0); //new 3.3
- ItemPrototype *ip;
- @@ -427,12 +437,23 @@
- }
- *data << GenerateRewardMoney( plr, qst ); // Money reward
- - *data << qst->bonushonor; // Honor reward
- + *data << uint32(0); //New 3.3
- + *data << (qst->bonushonor * 10); // Honor reward
- + *data << float(0); //New 3.3
- *data << qst->reward_spell; // this is the spell (id) the quest finisher teaches you, or the icon of the spell if effect_on_player is not 0
- *data << qst->effect_on_player; // this is the spell (id) the quest finisher casts on you as a reward
- *data << qst->rewardtitleid; // Title reward (ID)
- *data << qst->rewardtalents; // Talent reward
- + *data << uint32(0); // new 3.3.0
- + *data << uint32(0); // new 3.3.0
- + for(int i = 0; i < 5; ++i)
- + *data << uint32(0);
- + for(int i = 0; i < 5; ++i)
- + *data << uint32(0);
- + for(int i = 0; i < 5; ++i)
- + *data << uint32(0);
- +
- *data << qst->detailemotecount; // Amount of emotes (4?)
- for( i = 0; i < qst->detailemotecount; i++ )
- {
- @@ -475,15 +496,27 @@
- *data << qst->count_required_item;
- // (loop for each item)
- - for(uint32 i = 0; i < 4; ++i)
- + for(uint32 i = 0; i < 6; ++i)
- {
- if(qst->required_item[i] != 0)
- {
- - *data << qst->required_item[i];
- - *data << qst->required_itemcount[i];
- - it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]);
- - *data << (it ? it->DisplayInfoID : uint32(0));
- + *data << qst->required_item[i];
- + *data << qst->required_itemcount[i];
- + it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]);
- + *data << (it ? it->DisplayInfoID : uint32(0));
- }
- + else
- + {
- + *data << uint32(0);
- + *data << uint32(0);
- + *data << uint32(0);
- + }
- + *data << uint32(0);
- + *data << uint32(0);
- + *data << uint32(0);
- + *data << uint32(0);
- + *data << uint32(0);
- + *data << uint32(0);
- }
- // wtf is this?
- @@ -493,9 +526,10 @@
- }
- else
- {
- - *data << uint32(2);
- + *data << uint32(3);
- }
- + *data << uint32(4);
- *data << uint32(8);
- *data << uint32(10);
- }
- @@ -527,7 +561,7 @@
- data << uint32( qst->id );
- data << uint32( xp );
- data << uint32( GenerateRewardMoney( plr, qst ) );
- - data << uint32( 0 );
- + data << uint32(qst->bonushonor * 10);
- data << uint32( rewardtalents );
- data << uint32( qst->count_reward_item ); //Reward item count
- Index: src/arcemu-world/ScriptMgr.cpp
- ===================================================================
- --- src/arcemu-world/ScriptMgr.cpp (revision 3116)
- +++ src/arcemu-world/ScriptMgr.cpp (working copy)
- @@ -1128,3 +1128,10 @@
- for(ServerHookList::iterator itr = hookList.begin(); itr != hookList.end(); ++itr)
- ((tOnAdvanceSkillLine)*itr)(pPlayer, skillLine, current);
- }
- +
- +void HookInterface::OnDuelFinished(Player * Winner, Player * Looser)
- +{
- + ServerHookList hookList = sScriptMgr._hooks[SERVER_HOOK_EVENT_ON_DUEL_FINISHED];
- + for(ServerHookList::iterator itr = hookList.begin(); itr != hookList.end(); ++itr)
- + ((tOnDuelFinished)*itr)(Winner, Looser);
- +}
- Index: src/arcemu-world/ScriptMgr.h
- ===================================================================
- --- src/arcemu-world/ScriptMgr.h (revision 3116)
- +++ src/arcemu-world/ScriptMgr.h (working copy)
- @@ -64,6 +64,7 @@
- SERVER_HOOK_EVENT_ON_POST_LEVELUP = 27,
- SERVER_HOOK_EVENT_ON_PRE_DIE = 28, //general unit die, not only based on players
- SERVER_HOOK_EVENT_ON_ADVANCE_SKILLLINE = 29,
- + SERVER_HOOK_EVENT_ON_DUEL_FINISHED = 30,
- NUM_SERVER_HOOKS,
- };
- @@ -107,6 +108,7 @@
- typedef void(*tOnPostLevelUp)(Player * pPlayer);
- typedef void(*tOnPreUnitDie)(Unit *killer, Unit *target);
- typedef void(*tOnAdvanceSkillLine)(Player * pPlayer, uint32 SkillLine, uint32 Current);
- +typedef void(*tOnDuelFinished)(Player * Winner, Player * Looser);
- class Spell;
- class Aura;
- @@ -397,6 +399,7 @@
- void OnPostLevelUp(Player * pPlayer);
- void OnPreUnitDie(Unit *Killer, Unit *Victim);
- void OnAdvanceSkillLine(Player * pPlayer, uint32 SkillLine, uint32 Current);
- + void OnDuelFinished(Player * Winner, Player * Looser);
- };
- #define sScriptMgr ScriptMgr::getSingleton()
- Index: src/arcemu-world/Spell.cpp
- ===================================================================
- --- src/arcemu-world/Spell.cpp (revision 3116)
- +++ src/arcemu-world/Spell.cpp (working copy)
- @@ -102,7 +102,7 @@
- if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
- {
- - data >> m_srcX >> m_srcY >> m_srcZ;
- + data >> m_srcguid >> m_srcX >> m_srcY >> m_srcZ;
- if( !( m_targetMask & TARGET_FLAG_DEST_LOCATION ) )
- {
- @@ -114,7 +114,7 @@
- if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
- {
- - data >> guid >> m_destX >> m_destY >> m_destZ;
- + data >> m_destguid >> m_destX >> m_destY >> m_destZ;
- if( !( m_targetMask & TARGET_FLAG_SOURCE_LOCATION ) )
- {
- m_srcX = m_destX;
- @@ -139,19 +139,14 @@
- if( /*m_targetMask == TARGET_FLAG_SELF || */m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_CORPSE | TARGET_FLAG_CORPSE2 | TARGET_FLAG_OBJECT | TARGET_FLAG_GLYPH) )
- FastGUIDPack( data, m_unitTarget );
- - if( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM ) )
- - FastGUIDPack( data, m_itemTarget );
- + if( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM ) )
- + FastGUIDPack( data, m_itemTarget );
- if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
- - data << m_srcX << m_srcY << m_srcZ;
- + data << m_srcguid << m_srcX << m_srcY << m_srcZ;
- if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
- - { //VLack: guess what, some Aspire fix
- - if(m_unitTarget) FastGUIDPack( data, m_unitTarget );
- - else data << uint8(0);
- - data << m_destX << m_destY << m_destZ;
- - }
- -// data << uint8(0) << m_destX << m_destY << m_destZ;
- + data << m_destguid << m_destX << m_destY << m_destZ;
- if( m_targetMask & TARGET_FLAG_STRING )
- data << m_strTarget.c_str();
- @@ -5388,10 +5383,12 @@
- switch( m_spellInfo->Id )
- {
- case 20267: //Judgement of Light
- - if( playerTarget != NULL )
- - amount = (int)(0.10f * playerTarget->GetUInt32Value(UNIT_FIELD_ATTACK_POWER) + 0.10f * playerTarget->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1));
- - else
- - amount = (int)(0.10f * unitTarget->GetUInt32Value(UNIT_FIELD_ATTACK_POWER));
- + {
- + // Patch 3.2.0 (2009-08-04): Now heals for 2% of the attacker's maximum health instead of a
- + // variable amount based on the spell power and attack power of the judging paladin.
- + if( p_caster != NULL )
- + amount = float2int32(p_caster->GetUInt32Value(UNIT_FIELD_MAXHEALTH) * 0.02f);
- + }
- break;
- case 20167: //Seal of Light
- if( p_caster != NULL )
- Index: src/arcemu-world/Spell.h
- ===================================================================
- --- src/arcemu-world/Spell.h (revision 3116)
- +++ src/arcemu-world/Spell.h (working copy)
- @@ -354,12 +354,13 @@
- enum CastInterruptFlags
- {
- - CAST_INTERRUPT_NULL = 0x0,
- - CAST_INTERRUPT_ON_SILENCE = 0x1,
- - CAST_INTERRUPT_PUSHBACK = 0x2, // seems to be whether or not the spell is pushed back on dmg
- - CAST_INTERRUPT_ON_STUNNED = 0x4, // could be wrong
- - CAST_INTERRUPT_ON_MOVEMENT = 0x8,
- - CAST_INTERRUPT_ON_DAMAGE_TAKEN = 0x10
- + CAST_INTERRUPT_NULL = 0x0,
- + CAST_INTERRUPT_ON_MOVEMENT = 0x1,
- + CAST_INTERRUPT_PUSHBACK = 0x2, // seems to be whether or not the spell is pushed back on dmg
- + CAST_INTERRUPT_ON_INTERRUPT_CAST = 0x4, // ? probably interrupt only cast
- + CAST_INTERRUPT_ON_INTERRUPT_SCHOOL = 0x8, // seems that on 3.2.0 spell with this interrupts only 1 school, like counterspell
- + CAST_INTERRUPT_ON_DAMAGE_TAKEN = 0x10,
- + CAST_INTERRUPT_ON_INTERRUPT_ALL = 0x20 // guessed
- };
- enum AuraInterruptFlags
- @@ -713,6 +714,13 @@
- TARGET_TYPE_MECHANICAL = 0x100,
- };
- +enum PreventionType
- +{
- + PREVENTION_TYPE_NONE = 0,
- + PREVENTION_TYPE_SILENCE = 1,
- + PREVENTION_TYPE_PACIFY = 2
- +};
- +
- /****************SpellExtraFlags*****************/
- /* SpellExtraFlags defines */
- /* */
- @@ -1310,7 +1318,9 @@
- uint16 m_targetMaskExtended; // this could be a 32 also
- uint64 m_unitTarget;
- uint64 m_itemTarget;
- + WoWGuid m_srcguid;
- float m_srcX, m_srcY, m_srcZ;
- + WoWGuid m_destguid;
- float m_destX, m_destY, m_destZ;
- string m_strTarget;
- };
- @@ -1791,6 +1801,8 @@
- void SpellEffectDispelMechanic(uint32 i);
- void SpellEffectSummonDeadPet(uint32 i);
- void SpellEffectDestroyAllTotems(uint32 i);
- + void SpellEffectDurabilityDamage(uint32 i);
- + void SpellEffectDurabilityDamagePCT(uint32 i);
- void SpellEffectSummonDemon(uint32 i);
- void SpellEffectResurrectNew(uint32 i);
- void SpellEffectAttackMe(uint32 i);
- Index: src/arcemu-world/SpellAuras.cpp
- ===================================================================
- --- src/arcemu-world/SpellAuras.cpp (revision 3116)
- +++ src/arcemu-world/SpellAuras.cpp (working copy)
- @@ -4052,6 +4052,30 @@
- }
- }
- +void Aura::EventPeriodicTriggerDummy()
- +{
- + switch( GetSpellProto()->NameHash )
- + {
- + case SPELL_HASH_DEMONIC_CIRCLE__SUMMON:
- + {
- + GameObject * circle = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
- + SpellEntry * sp = dbcSpell.LookupEntryForced(62388);
- + if(circle && m_target->CalcDistance(circle) <= 40)
- + {
- + if(!m_target->HasAura(62388))
- + {
- + Aura * N = new Aura(sp, -1, m_target, m_target);
- + m_target->AddAura(N);
- + }
- + }
- + else
- + {
- + m_target->RemoveAura(62388);
- + }
- + }break;
- + }
- +}
- +
- void Aura::SpellAuraModPacify(bool apply)
- {
- // Can't Attack
- @@ -5804,6 +5828,12 @@
- }
- }
- p_target->setDeathState(ALIVE);
- + p_target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_COMBAT);
- + if(p_target->hasStateFlag(UF_ATTACKING))
- + p_target->clearStateFlag(UF_ATTACKING);
- +
- + p_target->GetSession()->OutPacket(SMSG_CANCEL_COMBAT);
- + p_target->GetSession()->OutPacket(SMSG_CANCEL_AUTO_REPEAT);
- }
- else
- {
- @@ -6074,6 +6104,20 @@
- }
- else
- SetNegative();
- + // Demonic Circle: Teleport
- + if (m_spellProto->Id == 48020)
- + {
- + if (!m_target->IsPlayer())
- + return;
- + if (apply)
- + {
- + GameObject* obj = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
- + if(obj == 0)
- + return;
- + if (m_target->CalcDistance(obj) <= 40)
- + ((Player*)m_target)->SafeTeleport(obj->GetMapId(), obj->GetInstanceID(), obj->GetPositionX(),obj->GetPositionY(),obj->GetPositionZ(),m_target->GetOrientation());
- + }
- + }
- }
- else
- m_target->MechanicsDispels[mod->m_miscValue]--;
- @@ -6312,6 +6356,26 @@
- {
- switch( m_spellProto->NameHash )
- {
- + case SPELL_HASH_DEMONIC_CIRCLE__SUMMON:
- + {
- + if (apply)
- + {
- + sEventMgr.AddEvent(this, &Aura::EventPeriodicTriggerDummy, EVENT_UNK, 1000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
- + }
- + else
- + {
- + sEventMgr.RemoveEvents(this);
- + m_target->RemoveAura(62388);
- +
- + if(!m_target->m_ObjectSlots[0])
- + return;
- + GameObject * Obj = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
- + if(Obj != 0)
- + Obj->Delete();
- + }
- +
- + }break;
- +
- case SPELL_HASH_ASPECT_OF_THE_VIPER:
- if( p_target )
- {
- @@ -6420,11 +6484,14 @@
- void Aura::EventPeriodicDrink(uint32 amount)
- {
- - uint32 v = m_target->GetPower( POWER_TYPE_MANA ) + amount;
- + if ( !m_target )
- + return;
- - if( v > m_target->GetMaxPower( POWER_TYPE_MANA ) )
- - v = m_target->GetMaxPower( POWER_TYPE_MANA );
- + uint32 v = m_target->GetUInt32Value(UNIT_FIELD_POWER1) + amount;
- + if( v > m_target->GetUInt32Value(UNIT_FIELD_MAXPOWER1) )
- + v = m_target->GetUInt32Value(UNIT_FIELD_MAXPOWER1);
- +
- m_target->SetPower( POWER_TYPE_MANA, v);
- }
- Index: src/arcemu-world/SpellAuras.h
- ===================================================================
- --- src/arcemu-world/SpellAuras.h (revision 3116)
- +++ src/arcemu-world/SpellAuras.h (working copy)
- @@ -737,6 +737,7 @@
- void EventPeriodicHealPct(float);
- void EventPeriodicManaPct(float);
- void EventPeriodicRegenManaStatPct(uint32 perc,uint32 stat);
- + void EventPeriodicTriggerDummy();
- void RelocateEvents();
- int32 event_GetInstanceID();
- Index: src/arcemu-world/SpellEffects.cpp
- ===================================================================
- --- src/arcemu-world/SpellEffects.cpp (revision 3116)
- +++ src/arcemu-world/SpellEffects.cpp (working copy)
- @@ -60,7 +60,7 @@
- &Spell::SpellEffectLearnSpell, //SPELL_EFFECT_LEARN_SPELL - 36
- &Spell::SpellEffectSpellDefense, //SPELL_EFFECT_SPELL_DEFENSE - 37
- &Spell::SpellEffectDispel, //SPELL_EFFECT_DISPEL - 38
- - &Spell::SpellEffectNULL, //SPELL_EFFECT_LANGUAGE - 39
- + &Spell::SpellEffectNULL, //SPELL_EFFECT_LANGUAGE - 39
- &Spell::SpellEffectDualWield, //SPELL_EFFECT_DUAL_WIELD - 40
- &Spell::SpellEffectSummonWild, //SPELL_EFFECT_SUMMON_WILD - 41
- &Spell::SpellEffectSummonGuardian, //SPELL_EFFECT_SUMMON_GUARDIAN - 42
- @@ -132,11 +132,11 @@
- &Spell::SpellEffectDispelMechanic, //SPELL_EFFECT_DISPEL_MECHANIC - 108
- &Spell::SpellEffectSummonDeadPet, //SPELL_EFFECT_SUMMON_DEAD_PET - 109
- &Spell::SpellEffectDestroyAllTotems, //SPELL_EFFECT_DESTROY_ALL_TOTEMS - 110
- - &Spell::SpellEffectNULL, //SPELL_EFFECT_DURABILITY_DAMAGE - 111
- + &Spell::SpellEffectDurabilityDamage, //SPELL_EFFECT_DURABILITY_DAMAGE - 111
- &Spell::SpellEffectSummonDemon, //SPELL_EFFECT_SUMMON_DEMON - 112
- &Spell::SpellEffectResurrectNew, //SPELL_EFFECT_RESURRECT_NEW - 113
- &Spell::SpellEffectAttackMe, //SPELL_EFFECT_ATTACK_ME - 114
- - &Spell::SpellEffectNULL, //SPELL_EFFECT_DURABILITY_DAMAGE_PCT - 115
- + &Spell::SpellEffectDurabilityDamagePCT, //SPELL_EFFECT_DURABILITY_DAMAGE_PCT - 115
- &Spell::SpellEffectSkinPlayerCorpse, //SPELL_EFFECT_SKIN_PLAYER_CORPSE - 116
- &Spell::SpellEffectNULL, //SPELL_EFFECT_SPIRIT_HEAL - 117//Not used
- &Spell::SpellEffectSkill, //SPELL_EFFECT_SKILL - 118
- @@ -146,7 +146,7 @@
- &Spell::SpellEffectNULL, // unknown - 122 //not used
- &Spell::SpellEffectFilming, //SPELL_EFFECT_FILMING - 123 // http://www.thottbot.com/?sp=27998: flightpath
- &Spell::SpellEffectPlayerPull, //SPELL_EFFECT_PLAYER_PULL - 124 - http://thottbot.com/e2312
- - &Spell::SpellEffectReduceThreatPercent, //SPELL_EFFECT_REDUCE_THREAT_PERCENT - 125 // Reduce Threat by % //http://www.thottbot.com/?sp=32835
- + &Spell::SpellEffectReduceThreatPercent, //SPELL_EFFECT_REDUCE_THREAT_PERCENT - 125 // Reduce Threat by % //http://www.thottbot.com/?sp=32835
- &Spell::SpellEffectSpellSteal, //SPELL_EFFECT_SPELL_STEAL - 126 // Steal Beneficial Buff (Magic) //http://www.thottbot.com/?sp=30449
- &Spell::SpellEffectProspecting, // unknown - 127 // Search 5 ore of a base metal for precious gems. This will destroy the ore in the process.
- &Spell::SpellEffectApplyAura128, // unknown - 128 // Adjust a stats by %: Mod Stat // ITS FLAT
- @@ -453,9 +453,6 @@
- // moar cheaters
- if( !p_caster || (u_caster && u_caster->IsPet() ) )
- return;
- -
- - if( p_caster->GetSession()->GetPermissionCount() == 0 )
- - return;
- }
- }
- //instant kill effects don't have a log
- @@ -477,6 +474,7 @@
- uint32 dmg = 0;
- bool static_damage = false;
- + bool force_crit = false;
- if(GetProto()->EffectChainTarget[i])//chain
- {
- @@ -630,10 +628,26 @@
- break;
- case SPELL_HASH_JUDGEMENT_OF_COMMAND:
- - if( !unitTarget->IsStunned() )
- - dmg = dmg >> 1;
- + {
- + if( !unitTarget->IsStunned() )
- + dmg = dmg >> 1;
- + }
- break;
- + case SPELL_HASH_EXORCISM:
- + {
- + if( p_caster != NULL )
- + {
- + float sph = (float)(p_caster->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1));
- + float ap = (float)(p_caster->GetAP());
- + dmg += float2int32((0.15f * sph) + (0.15f * ap));
- + if(unitTarget && (TO_CREATURE(unitTarget)->GetCreatureInfo()->Type == UNIT_TYPE_UNDEAD ||
- + TO_CREATURE(unitTarget)->GetCreatureInfo()->Type == UNIT_TYPE_DEMON))
- + force_crit = true;
- + }
- + }
- + break;
- +
- default:
- break;
- }
- @@ -720,7 +734,7 @@
- _type = MELEE;
- }
- - u_caster->Strike( unitTarget, _type, GetProto(), 0, 0, dmg, pSpellId == 0, true );
- + u_caster->Strike( unitTarget, _type, GetProto(), 0, 0, dmg, pSpellId == 0, true, force_crit );
- }
- }
- }
- @@ -1319,7 +1333,7 @@
- }
- else
- {
- - summon->CreateAsSummon(26125, ci, NULL, p_caster, GetProto(), 6, 120, vec); // 2 min duration
- + summon->CreateAsSummon(26125, ci, NULL, p_caster, GetProto(), 6, 60, vec); // 1 min duration
- }
- summon->CastSpell(summon,50142,true);
- if(vec) delete vec;
- @@ -1394,6 +1408,18 @@
- unitTarget->GetAIInterface()->taunt(u_caster,true);
- }
- }break;
- + // Bloodworms
- + case 50452:
- + {
- + if(!u_caster || !u_caster->isAlive() || !unitTarget)
- + return;
- +
- + uint32 cnt = (2 + RandomUInt(2)); // 2 - 4 worms
- + for(uint8 j = 0; j < cnt; j++)
- + {
- + SpellEffectSummon(i);
- + }
- + }break;
- /*************************
- Non-Class spells
- - Done
- @@ -1665,365 +1691,7 @@
- Spell * spe = new Spell(u_caster,inf,true,NULL);
- spe->prepare(&tgt);
- }break;
- - /*************************
- - Non-Class spells
- - - ToDo
- - *************************/
- - case 6668:// Red Firework
- - {
- - // Shoots a firework into the air that bursts into a thousand red stars
- - }break;
- - case 8344:// Universal Remote
- - {
- - //FIXME:Allows control of a mechanical target for a short time. It may not always work and may just root the machine or make it very very angry. Gnomish engineering at its finest.
- - }break;
- - case 9976:// Polly Eats the E.C.A.C.
- - {
- - //FIX ME: Don't know what this does
- - }break;
- - case 10137:// Fizzule's Whistle
- - {
- - //FIXME:Blow on the whistle to let Fizzule know you're an ally
- - //This item comes after a finish of quest at venture co.
- - //You must whistle this every time you reach there to make Fizzule
- - //ally to you.
- - }break;
- - case 11540:// Blue Firework
- - {
- - //Shoots a firework into the air that bursts into a thousand blue stars
- - }break;
- - case 11541:// Green Firework
- - {
- - //Shoots a firework into the air that bursts into a thousand green stars
- - }break;
- - case 11542:// Red Streaks Firework
- - {
- - //Shoots a firework into the air that bursts into a thousand red streaks
- - }break;
- - case 11543:// Red, White and Blue Firework
- - {
- - //Shoots a firework into the air that bursts into red, white and blue stars
- - }break;
- - case 11544:// Yellow Rose Firework
- - {
- - //Shoots a firework into the air that bursts in a yellow pattern
- - }break;
- - case 12151:// Summon Atal'ai Skeleton
- - {
- - //8324 Atal'ai Skeleton
- -
- - //FIXME:Add here remove in time event
- - }break;
- - case 13006:// Shrink Ray
- - {
- - //FIXME:Schematic is learned from the gnomish engineering trainer. The gnomish/gobblin engineering decision is made when you are lvl40+ and your engineering is 200+. Interestingly, however, when this item fails to shrink the target, it can do a variety of things, such as...
- - //-Make you bigger (attack power +250)
- - //-Make you smaller (attack power -250)
- - //-Make them bigger (same effect as above)
- - //-Make your entire party bigger
- - //-Make your entire party smaller
- - //-Make every attacking enemy bigger
- - //-Make ever attacking enemy smaller
- - //Works to your advantage for the most part (about 70% of the time), but don't use in high-pressure situations, unless you're going to die if you don't. Could tip the scales the wrong way.
- - //Search for spells of this
- -
- -
- - //13004 - grow <- this one
- - //13010 - shrink <-this one
- - //
- - }break;
- - case 13180:// Gnomish Mind Control Cap
- - {
- - // FIXME:Take control of humanoid target by chance(it can be player)
- - }break;
- - case 13278:// Gnomish Death Ray
- - {
- - // FIXME:The devices charges over time using your life force and then directs a burst of energy at your opponent
- - //Drops life
- - }break;
- - case 13280:// Gnomish Death Ray
- - {
- - //FIX ME: Drop life
- - }break;
- - case 17816:// Sharp Dresser
- - {
- - //Impress others with your fashion sense
- - }break;
- - case 21343:// Snowball
- - {
- - }break;
- - case 23645:// Hourglass Sand
- - {
- - //Indeed used at the Chromo fight in BWL. Chromo has a stunning debuff, uncleansable, unless you have hourglass sand. This debuff will stun you every 4 seconds, for 4 seconds. It is resisted a lot though. Mage's and other casters usually have to do this fight with the debuff on, healers, tanks and hunters will get some to cure themselves from the debuff
- - }break;
- - case 24325:// Pagle's Point Cast - Create Mudskunk Lure
- - {
- - //FIXME:Load with 5 Zulian Mudskunks, and then cast from Pagle's Point in Zul'Gurub
- - }
- - case 24392:// Frosty Zap
- - {
- - //FIXME:Your Frostbolt spells have a 6% chance to restore 50 mana when cast.
- - //damage == 50
- - }break;
- - case 25822:// Firecrackers
- - {
- - //FIXME:Find firecrackers
- - }break;
- - case 26373:// Lunar Invitation
- - {
- - //FIX ME: Teleports the caster from within Greater Moonlight
- - }break;
- - case 26374:// Elune's Candle
- - {
- - //FIXME:Shoots a firework at target
- - }break;
- - case 26889:// Give Friendship Bracelet
- - {
- - //Give to a Heartbroken player to cheer them up
- - //laugh emote
- - }break;
- - case 27662:// Throw Cupid's Dart
- - {
- - //FIXME:Shoot a player, and Kwee Q. Peddlefeet will find them! (Only works on players with no current critter pets.)
- - }break;
- - case 28414:// Call Ashbringer
- - {
- - //http://www.thottbot.com/?i=53974
- - }break;
- - case 28806:// Toss Fuel on Bonfire
- - {
- - //FIXME:Dont know what this dummy does
- - }break;
- - case 7669:// Bethor's Potion
- - {
- - // related to Hex of Ravenclaw,
- - // its a dispell spell.
- - //FIXME:Dont know what's the usage of this dummy
- - }break;
- - case 8283:// Snufflenose Command
- - {
- - //FIXME:Quest Blueleaf Tubers
- - //For use on a Snufflenose Gopher
- - }break;
- - case 8913:// Sacred Cleansing
- - {
- - //FIXME:Removes the protective enchantments around Morbent Fel
- - //Quest Morbent Fel
- - }break;
- - case 9962://Capture Treant
- - {
- - //Quest Treant Muisek
- - }break;
- - case 10113:// Flare Gun's flare
- - {
- - //FIXME:Quest Deep Cover
- - //1543 may need to cast this
- - //2 flares and the /salute
- - }break;
- - case 10617:// Release Rageclaw
- - {
- - //Quest Druid of the Claw
- - //Use on the fallen body of Rageclaw
- - }break;
- - case 11402:// Shay's Bell
- - {
- - //FIXME:Quest Wandering Shay
- - //Ring to call Shay back to you
- - }break;
- - case 11548:// Summon Spider God
- - {
- - //FIXME:Quest Summoning Shadra (Elite)
- - //Use at the Shadra'Alor Altar to summon the spider god
- - }break;
- - case 11610:// Gammerita Turtle Camera
- - {
- - //Quest The Super Snapper FX
- - }break;
- - case 11886:// Capture Wildkin
- - {
- - //Quest Testing the Vessel
- - //Shrink and Capture a Fallen Wildkin
- - }break;
- - case 11887:// Capture Hippogryph
- - {
- - //FIXME:Same with 11888
- - //Quest Hippogryph Muisek
- - }break;
- - case 11888:// Capture Faerie Dragon
- - {
- - //FIXME:Check Faerie Dragon Muisek is killed or not if its killed update quest
- - //And allow create of fearie Dragon which is effect 1
- - //Quest: Faerie Dragon Muisek
- - }break;
- - case 11889:// Capture Mountain Giant
- - {
- - //FIXME:Same with 11888
- - //Quest: Mountain Giant Muisek
- - }break;
- - case 12189:// Summon Echeyakee
- - {
- - //3475 Echeyakee
- -
- - //FIXME:Quest Echeyakee
- - }break;
- - case 12283:// Xiggs Signal Flare
- - {
- - //Quest Signal for Pickup
- - //To be used at the makeshift helipad in Azshara. It will summon Pilot Xiggs Fuselighter to pick up the tablet rubbings
- - }break;
- - case 12938:// Fel Curse
- - {
- - //FIXME:Makes near target killable(servants of Razelikh the Defiler)
- - }break;
- - case 14247:// Blazerunner Dispel
- - {
- - //FIXME:Quest Aquementas and some more
- - }break;
- - case 14250:// Capture Grark
- - {
- - //Quest Precarious Predicament
- - }break;
- - case 14813:// Rocknot's Ale
- - {
- - //you throw the mug
- - //and the guy gets pissed well everyone gets pissed and he crushes the door so you can get past
- - //maybe after like 30 seconds so you can get past. but like I said I have never done it myself
- - //so I am not 100% sure what happens.
- - }break;
- - case 15991://Revive Ringo
- - {
- - //Quest A Little Help From My Friends
- - //Revive Ringo with water
- - }break;
- - case 15998:// Capture Worg Pup
- - {
- - //FIXME:Ends Kibler's Exotic Pets (Dungeon) quest
- - }break;
- - case 16031:// Releasing Corrupt Ooze
- - {
- - //FIXME:Released ooze moves to master ooze and "Merged Ooze Sample"
- - //occurs after some time.This item helps to finish quest
- - }break;
- - case 16378:// Temperature Reading
- - {
- - //FIXME:Quest Finding the Source
- - //Take a reading of the temperature at a hot spot.
- - }break;
- - case 17166:// Release Umi's Yeti
- - {
- - //Quest Are We There, Yeti?
- - //Select Umi's friend and click to release the Mechanical Yeti
- - }break;
- - case 17271:// Test Fetid Skull
- - {
- - //FIXME:Marauders of Darrowshire
- - //Wave over a Fetid skull to test its resonance
- - }break;
- - case 18153:// Kodo Kombobulator
- - {
- - //FIXME:Kodo Roundup Quest
- - //Kodo Kombobulator on any Ancient, Aged, or Dying Kodo to lure the Kodo to follow (one at a time)
- - }break;
- - case 19250:// Placing Smokey's Explosives
- - {
- - //This is something related to quest i think
- - }break;
- - case 19512:// Apply Salve
- - {
- - //FIXME:Cure a sickly animal afflicted by the taint of poisoning
- - }break;
- - case 20804:// Triage
- - {
- - //Quest Triage
- - //Use on Injured, Badly Injured, and Critically Injured Soldiers
- - }break;
- - case 21050:// Melodious Rapture
- - {
- - //Quest Deeprun Rat Roundup
- - }break;
- - case 21332:// Aspect of Neptulon
- - {
- - //FIXME:Used on plagued water elementals in Eastern Plaguelands
- - //Quest:Poisoned Water
- - }break;
- - case 21960:// Manifest Spirit
- - {
- - //FIXME:Forces the spirits of the first centaur Kahns to manifest in the physical world
- - //thats a quest
- - //its for maraudon i think
- - //u use that on the spirit mobs
- - //to release them
- - }break;
- - case 23359:// Transmogrify!
- - {
- - //Quest Zapped Giants
- - //Zap a Feralas giant into a more manageable form
- - }break;
- - case 27184:// Summon Mor Grayhoof
- - {
- - //16044 Mor Grayhoof Trigger
- - //16080 Mor Grayhoof
- -
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27190:// Summon Isalien
- - {
- - //16045 Isalien Trigger
- - //16097 Isalien
- -
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27191:// Summon the remains of Jarien and Sothos
- - {
- - /*
- - 16046 Jarien and Sothos Trigger
- - 16101 Jarien
- - 16103 Spirit of Jarien
- -
- - 16102 Sothos
- - 16104 Spirit of Sothos
- - */
- -
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27201:// Summon the spirit of Kormok
- - {
- - /*16047 Kormok Trigger
- - 16118 Kormok
- - */
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27202:// Summon Lord Valthalak
- - {
- - /*
- - 16042 Lord Valthalak
- - 16048 Lord Valthalak Trigger
- - 16073 Spirit of Lord Valthalak
- -
- - */
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27203:// Summon the spirits of the dead at haunted locations
- - {
- - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
- - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
- - }break;
- - case 27517:// Use this banner at the Arena in Blackrock Depths to challenge Theldren
- - {
- - //This is used to make Theldren spawn at the place where it used
- - //I couldn't find theldrin, and his men in creature names database
- - //Someone has to write this and this is related to The Challenge quest
- - /*By moving to the center grate, you trigger the arena event.
- - A random group of mobs (spiders, worms, bats, raptors) spawns,
- - and you have to kill them. After the last one dies, and a small
- - break, a boss mob spawns. Successfully completing this event
- - turns the arena spectators from red to yellow*/
- - }break;
- +
- case 29858: //Soulshatter
- {
- if( !u_caster || !u_caster->isAlive() || !unitTarget || !unitTarget->isAlive() )
- @@ -3017,9 +2685,6 @@
- skill = SKILL_WANDS;
- spell = SPELL_RANGED_GENERAL;
- }break;
- - //case 3386: // spears
- - // skill = 0; // ??!!
- - // break;
- default:
- {
- skill = 0;
- @@ -4916,24 +4581,61 @@
- }
- }
- }
- - // FIXME:This thing prevent target from spell casting too but cant find.
- +
- uint32 school = 0;
- + uint32 prevtype = 0;
- if(unitTarget->GetCurrentSpell())
- {
- - school=unitTarget->GetCurrentSpell()->GetProto()->School;
- + prevtype = unitTarget->GetCurrentSpell()->GetProto()->PreventionType;
- +
- + if((GetProto()->InterruptFlags & CAST_INTERRUPT_ON_INTERRUPT_SCHOOL) && (prevtype == PREVENTION_TYPE_SILENCE))
- + {
- + school = unitTarget->GetCurrentSpell()->GetProto()->School;
- + }
- +
- unitTarget->GetCurrentSpell()->cancel();
- }
- if(school)//prevent from casts in this school
- {
- int32 duration = GetDuration();
- - if(unitTarget->IsPlayer()){ // Check for interruption reducing talents
- + if(unitTarget->IsPlayer())
- + {
- int32 DurationModifier = static_cast< Player* >( unitTarget )->MechanicDurationPctMod[MECHANIC_INTERRUPTED];
- if(DurationModifier >= - 100)
- duration = (duration * (100 + DurationModifier)) / 100;
- }
- +
- unitTarget->SchoolCastPrevent[school] = duration + getMSTime();
- - // TODO: visual!
- +
- + if(unitTarget->IsPlayer())
- + {
- + TO_PLAYER(unitTarget)->SendPreventSchoolCast(school, duration + getMSTime());
- + }
- }
- + else if((GetProto()->InterruptFlags & CAST_INTERRUPT_ON_INTERRUPT_ALL) && (prevtype == PREVENTION_TYPE_SILENCE))
- + {
- + int32 duration = GetDuration();
- +
- + if(unitTarget->IsPlayer())
- + {
- + // Check for interruption reducing talents
- + int32 DurationModifier = static_cast< Player* >( unitTarget )->MechanicDurationPctMod[MECHANIC_INTERRUPTED];
- +
- + if(DurationModifier >= - 100)
- + duration = (duration * (100 + DurationModifier)) / 100;
- + }
- +
- + for( uint8 j = 0; j < 7; j++)
- + {
- + unitTarget->SchoolCastPrevent[j] = duration + getMSTime();
- + if(unitTarget->IsPlayer())
- + {
- + TO_PLAYER(unitTarget)->SendPreventSchoolCast(j, duration + getMSTime());
- + }
- + }
- + }
- +
- + return;
- }
- void Spell::SpellEffectDistract(uint32 i) // Distract
- @@ -5820,7 +5522,7 @@
- void Spell::SpellEffectActivateObject(uint32 i) // Activate Object
- {
- - /*if(!p_caster)
- +/* if(!p_caster)
- return;
- if(!gameObjTarget)
- @@ -6131,10 +5833,10 @@
- if( !Enchantment )
- return;
- - /* Windfury Totem removed in 3.0.2
- - if (m_spellInfo->NameHash == SPELL_HASH_WINDFURY_TOTEM_EFFECT && item->HasEnchantmentOnSlot( 1 ) && item->GetEnchantment( 1 )->Enchantment != Enchantment) //dirty fix for Windfury totem not overwriting existing enchantments
- - return;
- - */
- + //Windfury totem effect no longer exists it gives haste
- + //if (m_spellInfo->NameHash == SPELL_HASH_WINDFURY_TOTEM_EFFECT && item->HasEnchantmentOnSlot( 1 ) && item->GetEnchantment( 1 )->Enchantment != Enchantment) //dirty fix for Windfury totem not overwriting existing enchantments
- + //return;
- +
- item->RemoveEnchantment( 1 );
- item->AddEnchantment( Enchantment, Duration, false, true, false, 1 );
- @@ -6355,7 +6057,7 @@
- if(proportion)
- {
- value1 = value1 / (10 * proportion);
- - value2 = value2 / 10 * proportion;
- + value2 = value2 / (10 * proportion);
- }
- else
- {
- @@ -6367,7 +6069,7 @@
- dy = cosf(m_caster->GetOrientation());
- WorldPacket data(SMSG_MOVE_KNOCK_BACK, 50);
- - data << unitTarget->GetNewGUID();
- + data << playerTarget->GetNewGUID();
- data << getMSTime();
- data << dy << dx;
- data << value1;
- @@ -7394,4 +7096,193 @@
- p_caster->GetSession()->SendPacket(&data);
- p_caster->SetPower( p_caster->GetPowerType(), 0);
- p_caster->SendPowerUpdate(false);
- -}
- \ No newline at end of file
- +}
- +
- +void Spell::SpellEffectDurabilityDamage(uint32 i)
- +{
- + if(!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
- + return;
- +
- + int16 slot = static_cast<int16>(GetProto()->EffectMiscValue[i]);
- +
- + Item * pItem;
- + Container * pContainer;
- + uint32 j, k;
- +
- + // FIXME: some spells effects have value -1/-2
- + // Possibly its mean -1 all player equipped items and -2 all items
- + if(slot < 0)
- + {
- + for( k = 0; k < MAX_INVENTORY_SLOT; k++ )
- + {
- + pItem = p_caster->GetItemInterface()->GetInventoryItem( static_cast<uint16>( k ) );
- + if( pItem != NULL )
- + {
- + if( pItem->IsContainer() )
- + {
- + pContainer = static_cast<Container*>( pItem );
- + for( j = 0; j < pContainer->GetProto()->ContainerSlots; ++j )
- + {
- + pItem = pContainer->GetItem( static_cast<uint16>( j ) );
- + if( pItem != NULL )
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur) - (damage);
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + pItem->SetDurability(newdur);
- + }
- + }
- + }
- + else
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur) - (damage);
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + // Apply / Disapply enchantements from this item
- + pItem->SetDurability(newdur);
- + if( newdur == 0 && olddur > 0 )
- + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), false );
- + else if( newdur > 0 && olddur == 0 )
- + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), true );
- + }
- + }
- + }
- + return;
- + }
- +
- + // invalid slot value
- + if(slot >= INVENTORY_SLOT_BAG_END)
- + return;
- +
- + pItem = p_caster->GetItemInterface()->GetInventoryItem( slot );
- + if( pItem )
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur) - (damage);
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + pItem->SetDurability(newdur);
- +
- + // Apply / Disapply enchantements from this item
- + if( newdur == 0 && olddur > 0 )
- + p_caster->ApplyItemMods( pItem, slot, false );
- + else if( newdur > 0 && olddur == 0 )
- + p_caster->ApplyItemMods( pItem, slot, true );
- + }
- +}
- +
- +void Spell::SpellEffectDurabilityDamagePCT(uint32 i)
- +{
- + if(!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
- + return;
- +
- + int16 slot = static_cast<int16>(GetProto()->EffectMiscValue[i]);
- +
- + Item * pItem;
- + Container * pContainer;
- + uint32 j, k;
- +
- + // FIXME: some spells effects have value -1/-2
- + // Possibly its mean -1 all player equipped items and -2 all items
- + if(slot < 0)
- + {
- + for( k = 0; k < MAX_INVENTORY_SLOT; k++ )
- + {
- + pItem = p_caster->GetItemInterface()->GetInventoryItem( static_cast<uint16>( k ) );
- + if( pItem != NULL )
- + {
- + if( pItem->IsContainer() )
- + {
- + pContainer = static_cast<Container*>( pItem );
- + for( j = 0; j < pContainer->GetProto()->ContainerSlots; ++j )
- + {
- + pItem = pContainer->GetItem( static_cast<uint16>( j ) );
- + if( pItem != NULL )
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + pItem->SetDurability(newdur);
- + }
- + }
- + }
- + else
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + // Apply / Disapply enchantements from this item
- + pItem->SetDurability(newdur);
- + if( newdur == 0 && olddur > 0 )
- + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), false );
- + else if( newdur > 0 && olddur == 0 )
- + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), true );
- + }
- + }
- + }
- + return;
- + }
- +
- + // invalid slot value
- + if(slot >= INVENTORY_SLOT_BAG_END)
- + return;
- +
- + if(damage <= 0)
- + return;
- +
- + pItem = p_caster->GetItemInterface()->GetInventoryItem( slot );
- + if( pItem )
- + {
- + uint32 maxdur = pItem->GetDurabilityMax();
- + uint32 olddur = pItem->GetDurability();
- + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
- +
- + if(newdur < 0)
- + newdur = 0;
- +
- + if( newdur > maxdur )
- + newdur = maxdur;
- +
- + pItem->SetDurability(newdur);
- +
- + // Apply / Disapply enchantements from this item
- + if( newdur == 0 && olddur > 0 )
- + p_caster->ApplyItemMods( pItem, slot, false );
- + else if( newdur > 0 && olddur == 0 )
- + p_caster->ApplyItemMods( pItem, slot, true );
- + }
- +}
- Index: src/arcemu-world/SpellFixes.cpp
- ===================================================================
- --- src/arcemu-world/SpellFixes.cpp (revision 3116)
- +++ src/arcemu-world/SpellFixes.cpp (working copy)
- @@ -1271,6 +1271,35 @@
- sp->rangeIndex = 4;
- }
- + // MesoX: Serendipity http://www.wowhead.com/?spell=63730
- + sp = dbcSpell.LookupEntryForced( 63730 ); // Rank 1
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
- + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
- + sp->procChance = 100;
- + sp->EffectTriggerSpell[0] = 63731;
- + }
- + sp = dbcSpell.LookupEntryForced( 63733 ); // Rank 2
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
- + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
- + sp->procChance = 100;
- + sp->EffectTriggerSpell[0] = 63735;
- + }
- + sp = dbcSpell.LookupEntryForced( 63737 ); // Rank 2
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
- + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
- + sp->procChance = 100;
- + sp->EffectTriggerSpell[0] = 63734;
- + }
- +
- //////////////////////////////////////////
- // SHAMAN //
- //////////////////////////////////////////
- @@ -1286,6 +1315,13 @@
- sp->EffectImplicitTargetB[1] = 0;
- }
- + // Flametongue Weapon coef fix
- + if( sp->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON || sp->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON__PASSIVE_ )
- + {
- + sp->fixed_dddhcoef = 0.1f;
- + sp->School = 2;
- + }
- +
- // Lightning Shield - cannot crit
- if( sp->NameHash == SPELL_HASH_LIGHTNING_SHIELD ) // not a mistake, the correct proc spell for lightning shield is also called lightning shield
- sp->spell_can_crit = false;
- @@ -1413,57 +1449,175 @@
- //SPELL COEFFICIENT SETTINGS END
- /////////////////////////////////////////////////////////////////
- - EnchantEntry* Enchantment;
- + EnchantEntry * Enchantment;
- - // Flametongue weapon
- - Enchantment = dbcEnchant.LookupEntryForced( 2634 );
- + /********************************************************
- + * Flametongue Enchantment
- + ********************************************************/
- +
- + // Shaman - Flametongue Weapon Rank 1
- + Enchantment = dbcEnchant.LookupEntryForced( 5 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 25488;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 10400 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 8024; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- - Enchantment = dbcEnchant.LookupEntryForced( 1666 );
- +
- + // Shaman - Flametongue Weapon Rank 2
- + Enchantment = dbcEnchant.LookupEntryForced( 4 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 16344;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 15567 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 8027; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- - Enchantment = dbcEnchant.LookupEntryForced( 1665 );
- +
- + // Shaman - Flametongue Weapon Rank 3
- + Enchantment = dbcEnchant.LookupEntryForced( 3 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 16343;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 15568 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 8030; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- +
- + // Shaman - Flametongue Weapon Rank 4
- Enchantment = dbcEnchant.LookupEntryForced( 523 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 10445;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 15569 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 16339; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- - Enchantment = dbcEnchant.LookupEntryForced( 3 );
- +
- + // Shaman - Flametongue Weapon Rank 5
- + Enchantment = dbcEnchant.LookupEntryForced( 1665 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 8029;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 16311 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 16341; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- - Enchantment = dbcEnchant.LookupEntryForced( 4 );
- + // Shaman - Flametongue Weapon Rank 6
- + Enchantment = dbcEnchant.LookupEntryForced( 1666 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 8028;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 16312 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 16342; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- - Enchantment = dbcEnchant.LookupEntryForced( 5 );
- +
- + // Shaman - Flametongue Weapon Rank 7
- + Enchantment = dbcEnchant.LookupEntryForced( 2634 );
- if( Enchantment != NULL )
- {
- - Enchantment->type[0] = 1;
- - Enchantment->spell[0] = 8026;
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 16313 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 25489; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- }
- +
- + // Shaman - Flametongue Weapon Rank 8
- + Enchantment = dbcEnchant.LookupEntryForced( 3779 );
- + if( Enchantment != NULL )
- + {
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 58784 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 58785; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- + }
- + // Shaman - Flametongue Weapon Rank 9
- + Enchantment = dbcEnchant.LookupEntryForced( 3780 );
- + if( Enchantment != NULL )
- + {
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 58791 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 58789; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- + }
- +
- + // Shaman - Flametongue Weapon Rank 10
- + Enchantment = dbcEnchant.LookupEntryForced( 3781 );
- + if( Enchantment != NULL )
- + {
- + // Flametongue Weapon (Passive)
- + sp = dbcSpell.LookupEntryForced( 58792 );
- + if( sp != NULL )
- + {
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
- + sp->EffectTriggerSpell[0] = 58790; //for the logs and rest
- + sp->procChance = 100;
- + sp->maxstack = 1;
- + }
- + }
- /********************************************************
- * Windfury Enchantment
- ********************************************************/
- - Enchantment = dbcEnchant.LookupEntryForced( 283 );
- + /*Enchantment = dbcEnchant.LookupEntryForced( 283 );
- if( Enchantment != NULL )
- {
- Enchantment->spell[0] = 33757; //this is actually good
- @@ -1541,7 +1695,7 @@
- sp->proc_interval = 3000;//http://www.wowwiki.com/Windfury_Weapon
- sp->maxstack = 1;
- }
- - }
- + }*/
- /**********************************************************
- * PROFFESION - Enchant Cloak - Major Resistance
- @@ -4496,11 +4650,6 @@
- sp->EffectDieSides[0] = 0;
- }
- - // Flametongue Weapon - 10% spd coefficient
- - sp = dbcSpell.LookupEntryForced( 29469 );
- - if( sp != NULL )
- - sp->fixed_dddhcoef = 0.1f;
- -
- // Flametongue Totem - 0% spd coefficient
- sp = dbcSpell.LookupEntryForced( 16368 );
- if( sp != NULL )
- @@ -4922,7 +5071,7 @@
- sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- sp->EffectTriggerSpell[0] = 48108;
- sp->procChance= 33;
- - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
- + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
- sp->procCharges = 0;
- }
- @@ -4934,7 +5083,7 @@
- sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- sp->EffectTriggerSpell[0] = 48108;
- sp->procChance= 66;
- - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
- + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
- sp->procCharges = 0;
- }
- @@ -4946,7 +5095,7 @@
- sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- sp->EffectTriggerSpell[0] = 48108;
- sp->procChance= 100;
- - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
- + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
- sp->procCharges = 0;
- }
- @@ -5095,6 +5244,7 @@
- sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
- sp->EffectTriggerSpell[1] = 36032;
- sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[1] = SPELL_HASH_ARCANE_BLAST;
- }
- sp = dbcSpell.LookupEntryForced( 42897 );
- @@ -5103,13 +5253,14 @@
- sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
- sp->EffectTriggerSpell[1] = 36032;
- sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[1] = SPELL_HASH_ARCANE_BLAST;
- }
- //mage - Arcane Blast Proc
- sp = dbcSpell.LookupEntryForced( 36032 );
- {
- sp->procFlags = 0;
- - sp->maxstack = 3;
- + sp->maxstack = 4;
- sp->procCharges = 0;
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
- }
- @@ -5407,6 +5558,21 @@
- // Insert warlock spell fixes here
- + //Dummy for Demonic Circle
- + sp = dbcSpell.LookupEntryForced( 48018 );
- + if (sp != NULL)
- + {
- + sp->EffectImplicitTargetA[1] = 1;
- + CreateDummySpell(62388);
- + sp = dbcSpell.LookupEntryForced( 62388 );
- + if (sp != NULL)
- + {
- + sp->Effect[0] = 6;
- + sp->EffectApplyAuraName[0] = SPELL_AURA_DUMMY;
- + sp->DurationIndex = 11;
- + }
- + }
- +
- //megai2: Immolation Aura
- sp = dbcSpell.LookupEntryForced( 50589 );
- if (sp != NULL)
- @@ -6372,15 +6538,30 @@
- // Druid - Infected Wounds
- sp = dbcSpell.LookupEntryForced( 48483 );
- if( sp != NULL )
- - sp->procFlags = PROC_ON_CAST_SPELL;
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
- + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
- + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
- + }
- sp = dbcSpell.LookupEntryForced( 48484 );
- if( sp != NULL )
- - sp->procFlags = PROC_ON_CAST_SPELL;
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
- + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
- + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
- + }
- sp = dbcSpell.LookupEntryForced( 48485 );
- if( sp != NULL )
- - sp->procFlags = PROC_ON_CAST_SPELL;
- + {
- + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
- + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
- + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
- + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
- + }
- // Druid - Bash - Interrupt effect
- sp = dbcSpell.LookupEntryForced( 5211 );
- @@ -7833,6 +8014,8 @@
- if( sp != NULL )
- {
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
- + sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
- + sp->EffectTriggerSpell[1] = 20584; // MesoX: Trigger spell with other values, like transform etc.
- }
- sp = dbcSpell.LookupEntryForced( 8326 );
- @@ -8016,6 +8199,41 @@
- sp->Attributes = ATTRIBUTES_CANT_BE_DPB;
- }
- + /**********************************************************
- + * Bloodworms - handled in dummy code
- + **********************************************************/
- +
- + // Bloodworms proc spell
- + sp = dbcSpell.LookupEntryForced( 50452 );
- + if( sp != NULL )
- + {
- + sp->Effect[0] = SPELL_EFFECT_DUMMY;
- + }
- +
- + // Bloodworms Rank 1
- + sp = dbcSpell.LookupEntryForced( 49027 );
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_MELEE_ATTACK;
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + }
- +
- + // Bloodworms Rank 2
- + sp = dbcSpell.LookupEntryForced( 49542 );
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_MELEE_ATTACK;
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + }
- +
- + // Bloodworms Rank 3
- + sp = dbcSpell.LookupEntryForced( 49543 );
- + if( sp != NULL )
- + {
- + sp->procFlags = PROC_ON_MELEE_ATTACK;
- + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
- + }
- +
- //Frost Strike
- sp = dbcSpell.LookupEntryForced( 49143 );
- if( sp != NULL )
- @@ -8259,4 +8477,11 @@
- sp->EffectImplicitTargetA[0] = EFF_TARGET_SCRIPTED_OR_SINGLE_TARGET;
- sp->c_is_flags |= SPELL_FLAG_IS_FORCEDBUFF;
- }
- -}
- \ No newline at end of file
- +
- + // Unlocking Soul Prison
- + sp = dbcSpell.LookupEntryForced( 54669 );
- + if( sp )
- + {
- + sp->Effect[0] = SPELL_EFFECT_DUMMY;
- + }
- +}
- Index: src/arcemu-world/SpellTarget.cpp
- ===================================================================
- --- src/arcemu-world/SpellTarget.cpp (revision 3116)
- +++ src/arcemu-world/SpellTarget.cpp (working copy)
- @@ -23,15 +23,15 @@
- /// Function pointer holder
- pSpellTarget SpellTargetHandler[EFF_TARGET_LIST_LENGTH_MARKER] =
- {
- - &Spell::SpellTargetDefault, // 0
- + &Spell::SpellTargetDefault, // 0
- &Spell::SpellTargetSelf, // 1
- &Spell::SpellTargetNULL, // 2 Not handled (Test spells)
- &Spell::SpellTargetInvisibleAOE, // 3
- &Spell::SpellTargetFriendly, // 4
- - &Spell::SpellTargetPet, // 5
- - &Spell::SpellTargetSingleTargetEnemy, // 6
- + &Spell::SpellTargetPet, // 5
- + &Spell::SpellTargetSingleTargetEnemy, // 6
- &Spell::SpellTargetNULL, // 7
- - &Spell::SpellTargetCustomAreaOfEffect, // 8
- + &Spell::SpellTargetCustomAreaOfEffect, // 8
- &Spell::SpellTargetNULL, // 9 Not handled (no spells)
- &Spell::SpellTargetNULL, // 10 Not handled (no spells)
- &Spell::SpellTargetNULL, // 11 Not handled (Test spells)
- @@ -41,66 +41,66 @@
- &Spell::SpellTargetAreaOfEffect, // 15
- &Spell::SpellTargetAreaOfEffect, // 16
- &Spell::SpellTargetNULL, // 17 Target is a location
- - &Spell::SpellTargetLandUnderCaster, // 18
- + &Spell::SpellTargetLandUnderCaster, // 18
- &Spell::SpellTargetNULL, // 19 Not handled (Test spells)
- &Spell::SpellTargetAllPartyMembersRangeNR, // 20
- - &Spell::SpellTargetSingleTargetFriend, // 21
- - &Spell::SpellTargetAoE, // 22
- + &Spell::SpellTargetSingleTargetFriend, // 21
- + &Spell::SpellTargetAoE, // 22
- &Spell::SpellTargetSingleGameobjectTarget, // 23
- - &Spell::SpellTargetInFrontOfCaster, // 24
- + &Spell::SpellTargetInFrontOfCaster, // 24
- &Spell::SpellTargetSingleFriend, // 25
- &Spell::SpellTargetGameobject_itemTarget, // 26
- &Spell::SpellTargetPetOwner, // 27
- - &Spell::SpellTargetEnemysAreaOfEffect, // 28 channeled
- + &Spell::SpellTargetEnemysAreaOfEffect, // 28 channeled
- &Spell::SpellTargetTypeTAOE, // 29
- - &Spell::SpellTargetAllyBasedAreaEffect, // 30
- - &Spell::SpellTargetScriptedEffects, // 31
- - &Spell::SpellTargetSummon, // 32
- - &Spell::SpellTargetNearbyPartyMembers, // 33
- + &Spell::SpellTargetAllyBasedAreaEffect, // 30
- + &Spell::SpellTargetScriptedEffects, // 31
- + &Spell::SpellTargetSummon, // 32
- + &Spell::SpellTargetNearbyPartyMembers, // 33
- &Spell::SpellTargetNULL, // 34 Not handled (No spells)
- &Spell::SpellTargetSingleTargetPartyMember, // 35
- &Spell::SpellTargetScriptedEffects2, // 36
- - &Spell::SpellTargetPartyMember, // 37
- - &Spell::SpellTargetDummyTarget, // 38
- - &Spell::SpellTargetFishing, // 39
- - &Spell::SpellTargetType40, // 40
- - &Spell::SpellTargetTotem, // 41
- - &Spell::SpellTargetTotem, // 42
- - &Spell::SpellTargetTotem, // 43
- - &Spell::SpellTargetTotem, // 44
- - &Spell::SpellTargetChainTargeting, // 45
- - &Spell::SpellTargetSimpleTargetAdd, // 46
- - &Spell::SpellTargetSimpleTargetAdd, // 47
- - &Spell::SpellTargetSimpleTargetAdd, // 48
- - &Spell::SpellTargetSimpleTargetAdd, // 49
- - &Spell::SpellTargetSimpleTargetAdd, // 50
- + &Spell::SpellTargetPartyMember, // 37
- + &Spell::SpellTargetDummyTarget, // 38
- + &Spell::SpellTargetFishing, // 39
- + &Spell::SpellTargetType40, // 40
- + &Spell::SpellTargetTotem, // 41
- + &Spell::SpellTargetTotem, // 42
- + &Spell::SpellTargetTotem, // 43
- + &Spell::SpellTargetTotem, // 44
- + &Spell::SpellTargetChainTargeting, // 45
- + &Spell::SpellTargetSimpleTargetAdd, // 46
- + &Spell::SpellTargetSimpleTargetAdd, // 47
- + &Spell::SpellTargetSimpleTargetAdd, // 48
- + &Spell::SpellTargetSimpleTargetAdd, // 49
- + &Spell::SpellTargetSimpleTargetAdd, // 50
- &Spell::SpellTargetNULL, // 51
- - &Spell::SpellTargetSimpleTargetAdd, // 52
- + &Spell::SpellTargetSimpleTargetAdd, // 52
- &Spell::SpellTargetTargetAreaSelectedUnit, // 53
- &Spell::SpellTargetInFrontOfCaster2, // 54
- &Spell::SpellTargetNULL, // 55 Not handled (Not really handled by the current spell system)
- &Spell::SpellTargetAllRaid, // 56
- - &Spell::SpellTargetTargetPartyMember, // 57
- + &Spell::SpellTargetTargetPartyMember, // 57
- &Spell::SpellTargetNULL, // 58
- &Spell::SpellTargetNULL, // 59
- &Spell::SpellTargetNULL, // 60 // scripted target fill..
- - &Spell::SpellTargetSameGroupSameClass, // 61
- + &Spell::SpellTargetSameGroupSameClass, // 61
- &Spell::SpellTargetNULL, // 62 // targets the priest champion, big range..
- - &Spell::SpellTargetSimpleTargetAdd, // 63 // summon [] creature
- - &Spell::SpellTargetSimpleTargetAdd, // 64 // summon [] creature
- - &Spell::SpellTargetSimpleTargetAdd, // 65 // summon [] creature
- - &Spell::SpellTargetSimpleTargetAdd, // 66 // summon [] creature
- - &Spell::SpellTargetSimpleTargetAdd, // 67 // summon [] creature
- + &Spell::SpellTargetSimpleTargetAdd, // 63 // summon [] creature
- + &Spell::SpellTargetSimpleTargetAdd, // 64 // summon [] creature
- + &Spell::SpellTargetSimpleTargetAdd, // 65 // summon [] creature
- + &Spell::SpellTargetSimpleTargetAdd, // 66 // summon [] creature
- + &Spell::SpellTargetSimpleTargetAdd, // 67 // summon [] creature
- &Spell::SpellTargetNULL, // 68 Not handled (No spells)
- - &Spell::SpellTargetTotem, // 69 // Spitfire totem
- + &Spell::SpellTargetTotem, // 69 // Spitfire totem
- &Spell::SpellTargetNULL, // 70 Not handled (No spells)
- &Spell::SpellTargetNULL, // 71 Not handled (No spells)
- - &Spell::SpellTargetSimpleTargetAdd, // 72 // summon [] creature + trow items
- - &Spell::SpellTargetSummon, // 73
- + &Spell::SpellTargetSimpleTargetAdd, // 72 // summon [] creature + trow items
- + &Spell::SpellTargetSummon, // 73
- &Spell::SpellTargetNULL, // 74
- &Spell::SpellTargetNULL, // 75
- &Spell::SpellTargetNULL, // 76
- - &Spell::SpellTargetSingleTargetEnemy, // 77
- + &Spell::SpellTargetSingleTargetEnemy, // 77
- &Spell::SpellTargetNULL, // 78
- &Spell::SpellTargetNULL, // 79
- &Spell::SpellTargetNULL, // 80
- Index: src/arcemu-world/Stats.cpp
- ===================================================================
- --- src/arcemu-world/Stats.cpp (revision 3116)
- +++ src/arcemu-world/Stats.cpp (working copy)
- @@ -490,6 +490,9 @@
- uint32 offset;
- Item *it = NULL;
- + if(ability && ability->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON)
- + return 0;
- +
- if(pAttacker->disarmed && pAttacker->IsPlayer())
- {
- offset=UNIT_FIELD_MINDAMAGE;
- Index: src/arcemu-world/Unit.cpp
- ===================================================================
- --- src/arcemu-world/Unit.cpp (revision 3116)
- +++ src/arcemu-world/Unit.cpp (working copy)
- @@ -1210,6 +1210,25 @@
- switch( spellId )
- {
- + case 48108: // Mage - Hot Streak
- + {
- + if( CastingSpell == NULL )
- + continue;
- +
- + if( CastingSpell->NameHash != SPELL_HASH_FIREBALL ||
- + CastingSpell->NameHash != SPELL_HASH_FIRE_BLAST ||
- + CastingSpell->NameHash != SPELL_HASH_SCORCH ||
- + CastingSpell->NameHash != SPELL_HASH_LIVING_BOMB ||
- + CastingSpell->NameHash != SPELL_HASH_FROSTFIRE_BOLT )
- + continue;
- +
- + /*if( plr->CritsInRow < 1 )
- + {
- + plr->CritsInRow++;
- + continue;
- + }*/
- + }
- + break;
- case 32747: //Deadly Throw Interrupt (rogue arena gloves set)
- {
- if( CastingSpell == NULL )
- @@ -1964,38 +1983,27 @@
- if(CastingSpell->NameHash != SPELL_HASH_JUDGEMENT_OF_COMMAND && CastingSpell->NameHash != SPELL_HASH_JUDGEMENT)
- continue;
- }break;
- - // Flametongue Totem
- + /*// Flametongue Totem
- case 25555:
- case 16389:
- case 10523:
- case 8248:
- - case 8253:
- + case 8253:*/
- // Flametongue Weapon
- - case 8026:
- - case 8028:
- - case 8029:
- - case 10445:
- - case 16343:
- - case 16344:
- - case 25488:
- + case 8024:
- + case 8027:
- + case 8030:
- + case 16339:
- + case 16341:
- + case 16342:
- + case 25489:
- + case 58785:
- + case 58789:
- + case 58790:
- {
- - if(spellId == 25555 ||
- - spellId == 16389 ||
- - spellId == 10523 ||
- - spellId == 8248 ||
- - spellId == 8253)
- - spellId = 16368; // Flametongue Totem proc
- - else
- - spellId = 29469; // Flametongue Weapon proc
- - Item * mh = static_cast< Player* >( this )->GetItemInterface()->GetInventoryItem( EQUIPMENT_SLOT_MAINHAND );
- -
- - if( mh != NULL)
- - {
- - float mhs = float( mh->GetProto()->Delay );
- - dmg_overwrite = FL2UINT( mhs * 0.001f * (spe->EffectBasePoints[0] + 1)/88 );
- - }
- - else
- - continue;
- + uint32 dmg = static_cast< Player* >( this )->GetFlametongueDMG( origId );
- + SpellEntry * sp_for_the_logs = dbcSpell.LookupEntry( spellId );
- + Strike( victim, MELEE, sp_for_the_logs, dmg, 0, 0, true, false );
- }break;
- case 16246:
- {
- @@ -2671,6 +2679,8 @@
- // Remove lightning overload aura after procing
- RemoveAura(39805);
- }
- + /*if( TO_PLAYER(this)->CritsInRow > 0 )
- + TO_PLAYER(this)->CritsInRow = 0;*/
- }
- m_chargeSpellsInUse = true;
- @@ -3248,7 +3258,7 @@
- return roll_results[r];
- }
- -void Unit::Strike( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability, int32 add_damage, int32 pct_dmg_mod, uint32 exclusive_damage, bool disable_proc, bool skip_hit_check )
- +void Unit::Strike( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability, int32 add_damage, int32 pct_dmg_mod, uint32 exclusive_damage, bool disable_proc, bool skip_hit_check, bool force_crit )
- {
- //==========================================================================================
- //==============================Unacceptable Cases Processing===============================
- @@ -3673,6 +3683,8 @@
- {
- r++;
- }
- + if(force_crit)
- + r=5;
- //--------------------------------postroll processing---------------------------------------
- uint32 abs = 0;
- @@ -4148,6 +4160,13 @@
- if ( owner != NULL )
- Energize(owner, 34433, uint32(2.5f*realdamage + 0.5f), POWER_TYPE_MANA );
- }
- + //ugly hack for Bloodsworm restoring hp
- + if( GetUInt64Value(UNIT_FIELD_SUMMONEDBY) != 0 && GetUInt32Value(OBJECT_FIELD_ENTRY) == 28017 )
- + {
- + Player * owner = GetMapMgr()->GetPlayer((uint32)GetUInt64Value(UNIT_FIELD_SUMMONEDBY));
- + if ( owner != NULL )
- + Heal(owner, 50452, float2int32(1.5f*realdamage) );
- + }
- }
- //==========================================================================================
- Index: src/arcemu-world/Unit.h
- ===================================================================
- --- src/arcemu-world/Unit.h (revision 3116)
- +++ src/arcemu-world/Unit.h (working copy)
- @@ -912,7 +912,7 @@
- //// Combat
- uint32 GetSpellDidHitResult( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability );
- - void Strike( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability, int32 add_damage, int32 pct_dmg_mod, uint32 exclusive_damage, bool disable_proc, bool skip_hit_check );
- + void Strike( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability, int32 add_damage, int32 pct_dmg_mod, uint32 exclusive_damage, bool disable_proc, bool skip_hit_check, bool force_crit = false );
- uint32 m_procCounter;
- uint32 HandleProc(uint32 flag, Unit* Victim, SpellEntry* CastingSpell,uint32 dmg=-1,uint32 abs= 0);
- void HandleProcDmgShield(uint32 flag, Unit* attacker);//almost the same as handleproc :P
- Index: src/arcemu-world/UpdateFields.h
- ===================================================================
- --- src/arcemu-world/UpdateFields.h (revision 3116)
- +++ src/arcemu-world/UpdateFields.h (working copy)
- @@ -5,421 +5,423 @@
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- - * the Free Software Foundation, either version 3 of the License, or
- + * the Free Software Foundation either version 3 of the License or
- * any later version.
- *
- - * This program is distributed in the hope that it will be useful,
- + * This program is distributed in the hope that it will be useful
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- - * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + * along with this program. If not see <http://www.gnu.org/licenses/>.
- *
- */
- -/** 3.2.0 UpdateFields as of whenever i extracted them.
- +/** 3.3.0 UpdateFields
- */
- #ifndef ARCEMU_UPDATEFIELDS_H
- #define ARCEMU_UPDATEFIELDS_H
- //ObjectFields
- -#define OBJECT_FIELD_GUID 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define OBJECT_FIELD_TYPE 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
- -#define OBJECT_FIELD_ENTRY 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
- -#define OBJECT_FIELD_SCALE_X 0x0004 // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define OBJECT_FIELD_PADDING 0x0005 // Size: 1, Type: INT, Flags: NONE
- -#define OBJECT_END 0x0006
- +#define OBJECT_FIELD_GUID 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define OBJECT_FIELD_TYPE 0x0002 // Size: 1 Type: INT Flags: PUBLIC
- +#define OBJECT_FIELD_ENTRY 0x0003 // Size: 1 Type: INT Flags: PUBLIC
- +#define OBJECT_FIELD_SCALE_X 0x0004 // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define OBJECT_FIELD_PADDING 0x0005 // Size: 1 Type: INT Flags: NONE
- +#define OBJECT_END 0x0006
- #define LOWGUID OBJECT_FIELD_GUID
- #define HIGHGUID ( OBJECT_FIELD_GUID + 1 )
- //ItemFields
- -#define ITEM_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define ITEM_FIELD_CONTAINED OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define ITEM_FIELD_CREATOR OBJECT_END + 0x0004 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define ITEM_FIELD_GIFTCREATOR OBJECT_END + 0x0006 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define ITEM_FIELD_STACK_COUNT OBJECT_END + 0x0008 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
- -#define ITEM_FIELD_DURATION OBJECT_END + 0x0009 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
- -#define ITEM_FIELD_SPELL_CHARGES OBJECT_END + 0x000A // Size: 5, Type: INT, Flags: OWNER, ITEM_OWNER
- -#define ITEM_FIELD_FLAGS OBJECT_END + 0x000F // Size: 1, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_1_1 OBJECT_END + 0x0010 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_1_3 OBJECT_END + 0x0012 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_2_1 OBJECT_END + 0x0013 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_2_3 OBJECT_END + 0x0015 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_3_1 OBJECT_END + 0x0016 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_3_3 OBJECT_END + 0x0018 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_4_1 OBJECT_END + 0x0019 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_4_3 OBJECT_END + 0x001B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_5_1 OBJECT_END + 0x001C // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_5_3 OBJECT_END + 0x001E // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_6_1 OBJECT_END + 0x001F // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_6_3 OBJECT_END + 0x0021 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_7_1 OBJECT_END + 0x0022 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_7_3 OBJECT_END + 0x0024 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_8_1 OBJECT_END + 0x0025 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_8_3 OBJECT_END + 0x0027 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_9_1 OBJECT_END + 0x0028 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_9_3 OBJECT_END + 0x002A // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_10_1 OBJECT_END + 0x002B // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_10_3 OBJECT_END + 0x002D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_11_1 OBJECT_END + 0x002E // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_11_3 OBJECT_END + 0x0030 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_12_1 OBJECT_END + 0x0031 // Size: 2, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ENCHANTMENT_12_3 OBJECT_END + 0x0033 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define ITEM_FIELD_PROPERTY_SEED OBJECT_END + 0x0034 // Size: 1, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_RANDOM_PROPERTIES_ID OBJECT_END + 0x0035 // Size: 1, Type: INT, Flags: PUBLIC
- -#define ITEM_FIELD_ITEM_TEXT_ID OBJECT_END + 0x0036 // Size: 1, Type: INT, Flags: OWNER
- -#define ITEM_FIELD_DURABILITY OBJECT_END + 0x0037 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
- -#define ITEM_FIELD_MAXDURABILITY OBJECT_END + 0x0038 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
- -#define ITEM_FIELD_CREATE_PLAYED_TIME OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: PUBLIC
- -#define ITEM_END OBJECT_END + 0x003A
- +#define ITEM_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define ITEM_FIELD_CONTAINED OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
- +#define ITEM_FIELD_CREATOR OBJECT_END + 0x0004 // Size: 2 Type: LONG Flags: PUBLIC
- +#define ITEM_FIELD_GIFTCREATOR OBJECT_END + 0x0006 // Size: 2 Type: LONG Flags: PUBLIC
- +#define ITEM_FIELD_STACK_COUNT OBJECT_END + 0x0008 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
- +#define ITEM_FIELD_DURATION OBJECT_END + 0x0009 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
- +#define ITEM_FIELD_SPELL_CHARGES OBJECT_END + 0x000A // Size: 5 Type: INT Flags: OWNER ITEM_OWNER
- +#define ITEM_FIELD_FLAGS OBJECT_END + 0x000F // Size: 1 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_1_1 OBJECT_END + 0x0010 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_1_3 OBJECT_END + 0x0012 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_2_1 OBJECT_END + 0x0013 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_2_3 OBJECT_END + 0x0015 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_3_1 OBJECT_END + 0x0016 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_3_3 OBJECT_END + 0x0018 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_4_1 OBJECT_END + 0x0019 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_4_3 OBJECT_END + 0x001B // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_5_1 OBJECT_END + 0x001C // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_5_3 OBJECT_END + 0x001E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_6_1 OBJECT_END + 0x001F // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_6_3 OBJECT_END + 0x0021 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_7_1 OBJECT_END + 0x0022 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_7_3 OBJECT_END + 0x0024 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_8_1 OBJECT_END + 0x0025 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_8_3 OBJECT_END + 0x0027 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_9_1 OBJECT_END + 0x0028 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_9_3 OBJECT_END + 0x002A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_10_1 OBJECT_END + 0x002B // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_10_3 OBJECT_END + 0x002D // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_11_1 OBJECT_END + 0x002E // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_11_3 OBJECT_END + 0x0030 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_12_1 OBJECT_END + 0x0031 // Size: 2 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ENCHANTMENT_12_3 OBJECT_END + 0x0033 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define ITEM_FIELD_PROPERTY_SEED OBJECT_END + 0x0034 // Size: 1 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_RANDOM_PROPERTIES_ID OBJECT_END + 0x0035 // Size: 1 Type: INT Flags: PUBLIC
- +#define ITEM_FIELD_ITEM_TEXT_ID OBJECT_END + 0x0036 // Size: 1 Type: INT Flags: OWNER
- +#define ITEM_FIELD_DURABILITY OBJECT_END + 0x0037 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
- +#define ITEM_FIELD_MAXDURABILITY OBJECT_END + 0x0038 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
- +#define ITEM_FIELD_CREATE_PLAYED_TIME OBJECT_END + 0x0039 // Size: 1 Type: INT Flags: PUBLIC
- +#define ITEM_END OBJECT_END + 0x003A
- //ContainerFields
- -#define CONTAINER_FIELD_NUM_SLOTS ITEM_END + 0x0000 // Size: 1, Type: INT, Flags: PUBLIC
- -#define CONTAINER_ALIGN_PAD ITEM_END + 0x0001 // Size: 1, Type: BYTES, Flags: NONE
- -#define CONTAINER_FIELD_SLOT_1 ITEM_END + 0x0002 // Size: 72, Type: LONG, Flags: PUBLIC
- -#define CONTAINER_END ITEM_END + 0x004A
- +#define CONTAINER_FIELD_NUM_SLOTS ITEM_END + 0x0000 // Size: 1 Type: INT Flags: PUBLIC
- +#define CONTAINER_ALIGN_PAD ITEM_END + 0x0001 // Size: 1 Type: BYTES Flags: NONE
- +#define CONTAINER_FIELD_SLOT_1 ITEM_END + 0x0002 // Size: 72 Type: LONG Flags: PUBLIC
- +#define CONTAINER_END ITEM_END + 0x004A
- //UnitFields
- -#define UNIT_FIELD_CHARM OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_SUMMON OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_CRITTER OBJECT_END + 0x0004 // Size: 2, Type: LONG, Flags: PRIVATE
- -#define UNIT_FIELD_CHARMEDBY OBJECT_END + 0x0006 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_SUMMONEDBY OBJECT_END + 0x0008 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_CREATEDBY OBJECT_END + 0x000A // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_TARGET OBJECT_END + 0x000C // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_CHANNEL_OBJECT OBJECT_END + 0x000E // Size: 2, Type: LONG, Flags: PUBLIC
- -#define UNIT_FIELD_BYTES_0 OBJECT_END + 0x0010 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define UNIT_FIELD_HEALTH OBJECT_END + 0x0011 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER1 OBJECT_END + 0x0012 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER2 OBJECT_END + 0x0013 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER3 OBJECT_END + 0x0014 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER4 OBJECT_END + 0x0015 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER5 OBJECT_END + 0x0016 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER6 OBJECT_END + 0x0017 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER7 OBJECT_END + 0x0018 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXHEALTH OBJECT_END + 0x0019 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER1 OBJECT_END + 0x001A // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER2 OBJECT_END + 0x001B // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER3 OBJECT_END + 0x001C // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER4 OBJECT_END + 0x001D // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER5 OBJECT_END + 0x001E // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER6 OBJECT_END + 0x001F // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MAXPOWER7 OBJECT_END + 0x0020 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER OBJECT_END + 0x0021 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER OBJECT_END + 0x0028 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_LEVEL OBJECT_END + 0x002F // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_FACTIONTEMPLATE OBJECT_END + 0x0030 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_VIRTUAL_ITEM_SLOT_ID OBJECT_END + 0x0031 // Size: 3, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_FLAGS OBJECT_END + 0x0034 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_FLAGS_2 OBJECT_END + 0x0035 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_AURASTATE OBJECT_END + 0x0036 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_BASEATTACKTIME OBJECT_END + 0x0037 // Size: 2, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_RANGEDATTACKTIME OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: PRIVATE
- -#define UNIT_FIELD_BOUNDINGRADIUS OBJECT_END + 0x003A // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define UNIT_FIELD_COMBATREACH OBJECT_END + 0x003B // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define UNIT_FIELD_DISPLAYID OBJECT_END + 0x003C // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_NATIVEDISPLAYID OBJECT_END + 0x003D // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MOUNTDISPLAYID OBJECT_END + 0x003E // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_MINDAMAGE OBJECT_END + 0x003F // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
- -#define UNIT_FIELD_MAXDAMAGE OBJECT_END + 0x0040 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
- -#define UNIT_FIELD_MINOFFHANDDAMAGE OBJECT_END + 0x0041 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
- -#define UNIT_FIELD_MAXOFFHANDDAMAGE OBJECT_END + 0x0042 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
- -#define UNIT_FIELD_BYTES_1 OBJECT_END + 0x0043 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define UNIT_FIELD_PETNUMBER OBJECT_END + 0x0044 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_PET_NAME_TIMESTAMP OBJECT_END + 0x0045 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_PETEXPERIENCE OBJECT_END + 0x0046 // Size: 1, Type: INT, Flags: OWNER
- -#define UNIT_FIELD_PETNEXTLEVELEXP OBJECT_END + 0x0047 // Size: 1, Type: INT, Flags: OWNER
- -#define UNIT_DYNAMIC_FLAGS OBJECT_END + 0x0048 // Size: 1, Type: INT, Flags: DYNAMIC
- -#define UNIT_CHANNEL_SPELL OBJECT_END + 0x0049 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_MOD_CAST_SPEED OBJECT_END + 0x004A // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define UNIT_CREATED_BY_SPELL OBJECT_END + 0x004B // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_NPC_FLAGS OBJECT_END + 0x004C // Size: 1, Type: INT, Flags: DYNAMIC
- -#define UNIT_NPC_EMOTESTATE OBJECT_END + 0x004D // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_STAT0 OBJECT_END + 0x004E // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_STAT1 OBJECT_END + 0x004F // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_STAT2 OBJECT_END + 0x0050 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_STAT3 OBJECT_END + 0x0051 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_STAT4 OBJECT_END + 0x0052 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POSSTAT0 OBJECT_END + 0x0053 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POSSTAT1 OBJECT_END + 0x0054 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POSSTAT2 OBJECT_END + 0x0055 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POSSTAT3 OBJECT_END + 0x0056 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POSSTAT4 OBJECT_END + 0x0057 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_NEGSTAT0 OBJECT_END + 0x0058 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_NEGSTAT1 OBJECT_END + 0x0059 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_NEGSTAT2 OBJECT_END + 0x005A // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_NEGSTAT3 OBJECT_END + 0x005B // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_NEGSTAT4 OBJECT_END + 0x005C // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_RESISTANCES OBJECT_END + 0x005D // Size: 7, Type: INT, Flags: PRIVATE, OWNER, PARTY_LEADER
- -#define UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE OBJECT_END + 0x0064 // Size: 7, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE OBJECT_END + 0x006B // Size: 7, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_BASE_MANA OBJECT_END + 0x0072 // Size: 1, Type: INT, Flags: PUBLIC
- -#define UNIT_FIELD_BASE_HEALTH OBJECT_END + 0x0073 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_BYTES_2 OBJECT_END + 0x0074 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define UNIT_FIELD_ATTACK_POWER OBJECT_END + 0x0075 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_ATTACK_POWER_MODS OBJECT_END + 0x0076 // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x0077 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_RANGED_ATTACK_POWER OBJECT_END + 0x0078 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_RANGED_ATTACK_POWER_MODS OBJECT_END + 0x0079 // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x007A // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_MINRANGEDDAMAGE OBJECT_END + 0x007B // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_MAXRANGEDDAMAGE OBJECT_END + 0x007C // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POWER_COST_MODIFIER OBJECT_END + 0x007D // Size: 7, Type: INT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_POWER_COST_MULTIPLIER OBJECT_END + 0x0084 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_MAXHEALTHMODIFIER OBJECT_END + 0x008B // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
- -#define UNIT_FIELD_HOVERHEIGHT OBJECT_END + 0x008C // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define UNIT_FIELD_PADDING OBJECT_END + 0x008D // Size: 1, Type: INT, Flags: NONE
- -#define UNIT_END OBJECT_END + 0x008E
- -#define PLAYER_DUEL_ARBITER UNIT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define PLAYER_FLAGS UNIT_END + 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_GUILDID UNIT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_GUILDRANK UNIT_END + 0x0004 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_BYTES UNIT_END + 0x0005 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define PLAYER_BYTES_2 UNIT_END + 0x0006 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define PLAYER_BYTES_3 UNIT_END + 0x0007 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define PLAYER_DUEL_TEAM UNIT_END + 0x0008 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_GUILD_TIMESTAMP UNIT_END + 0x0009 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_QUEST_LOG_1_1 UNIT_END + 0x000A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_1_2 UNIT_END + 0x000B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_1_3 UNIT_END + 0x000C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_1_4 UNIT_END + 0x000D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_2_1 UNIT_END + 0x000E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_2_2 UNIT_END + 0x000F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_2_3 UNIT_END + 0x0010 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_2_4 UNIT_END + 0x0011 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_3_1 UNIT_END + 0x0012 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_3_2 UNIT_END + 0x0013 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_3_3 UNIT_END + 0x0014 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_3_4 UNIT_END + 0x0015 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_4_1 UNIT_END + 0x0016 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_4_2 UNIT_END + 0x0017 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_4_3 UNIT_END + 0x0018 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_4_4 UNIT_END + 0x0019 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_5_1 UNIT_END + 0x001A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_5_2 UNIT_END + 0x001B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_5_3 UNIT_END + 0x001C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_5_4 UNIT_END + 0x001D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_6_1 UNIT_END + 0x001E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_6_2 UNIT_END + 0x001F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_6_3 UNIT_END + 0x0020 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_6_4 UNIT_END + 0x0021 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_7_1 UNIT_END + 0x0022 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_7_2 UNIT_END + 0x0023 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_7_3 UNIT_END + 0x0024 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_7_4 UNIT_END + 0x0025 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_8_1 UNIT_END + 0x0026 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_8_2 UNIT_END + 0x0027 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_8_3 UNIT_END + 0x0028 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_8_4 UNIT_END + 0x0029 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_9_1 UNIT_END + 0x002A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_9_2 UNIT_END + 0x002B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_9_3 UNIT_END + 0x002C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_9_4 UNIT_END + 0x002D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_10_1 UNIT_END + 0x002E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_10_2 UNIT_END + 0x002F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_10_3 UNIT_END + 0x0030 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_10_4 UNIT_END + 0x0031 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_11_1 UNIT_END + 0x0032 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_11_2 UNIT_END + 0x0033 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_11_3 UNIT_END + 0x0034 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_11_4 UNIT_END + 0x0035 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_12_1 UNIT_END + 0x0036 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_12_2 UNIT_END + 0x0037 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_12_3 UNIT_END + 0x0038 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_12_4 UNIT_END + 0x0039 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_13_1 UNIT_END + 0x003A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_13_2 UNIT_END + 0x003B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_13_3 UNIT_END + 0x003C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_13_4 UNIT_END + 0x003D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_14_1 UNIT_END + 0x003E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_14_2 UNIT_END + 0x003F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_14_3 UNIT_END + 0x0040 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_14_4 UNIT_END + 0x0041 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_15_1 UNIT_END + 0x0042 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_15_2 UNIT_END + 0x0043 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_15_3 UNIT_END + 0x0044 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_15_4 UNIT_END + 0x0045 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_16_1 UNIT_END + 0x0046 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_16_2 UNIT_END + 0x0047 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_16_3 UNIT_END + 0x0048 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_16_4 UNIT_END + 0x0049 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_17_1 UNIT_END + 0x004A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_17_2 UNIT_END + 0x004B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_17_3 UNIT_END + 0x004C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_17_4 UNIT_END + 0x004D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_18_1 UNIT_END + 0x004E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_18_2 UNIT_END + 0x004F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_18_3 UNIT_END + 0x0050 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_18_4 UNIT_END + 0x0051 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_19_1 UNIT_END + 0x0052 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_19_2 UNIT_END + 0x0053 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_19_3 UNIT_END + 0x0054 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_19_4 UNIT_END + 0x0055 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_20_1 UNIT_END + 0x0056 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_20_2 UNIT_END + 0x0057 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_20_3 UNIT_END + 0x0058 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_20_4 UNIT_END + 0x0059 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_21_1 UNIT_END + 0x005A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_21_2 UNIT_END + 0x005B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_21_3 UNIT_END + 0x005C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_21_4 UNIT_END + 0x005D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_22_1 UNIT_END + 0x005E // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_22_2 UNIT_END + 0x005F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_22_3 UNIT_END + 0x0060 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_22_4 UNIT_END + 0x0061 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_23_1 UNIT_END + 0x0062 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_23_2 UNIT_END + 0x0063 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_23_3 UNIT_END + 0x0064 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_23_4 UNIT_END + 0x0065 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_24_1 UNIT_END + 0x0066 // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_24_2 UNIT_END + 0x0067 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_24_3 UNIT_END + 0x0068 // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_24_4 UNIT_END + 0x0069 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_25_1 UNIT_END + 0x006A // Size: 1, Type: INT, Flags: PARTY_MEMBER
- -#define PLAYER_QUEST_LOG_25_2 UNIT_END + 0x006B // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_25_3 UNIT_END + 0x006C // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_QUEST_LOG_25_4 UNIT_END + 0x006D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_VISIBLE_ITEM_1_ENTRYID UNIT_END + 0x006E // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_1_ENCHANTMENT UNIT_END + 0x006F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_2_ENTRYID UNIT_END + 0x0070 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_2_ENCHANTMENT UNIT_END + 0x0071 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_3_ENTRYID UNIT_END + 0x0072 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_3_ENCHANTMENT UNIT_END + 0x0073 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_4_ENTRYID UNIT_END + 0x0074 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_4_ENCHANTMENT UNIT_END + 0x0075 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_5_ENTRYID UNIT_END + 0x0076 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_5_ENCHANTMENT UNIT_END + 0x0077 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_6_ENTRYID UNIT_END + 0x0078 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_6_ENCHANTMENT UNIT_END + 0x0079 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_7_ENTRYID UNIT_END + 0x007A // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_7_ENCHANTMENT UNIT_END + 0x007B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_8_ENTRYID UNIT_END + 0x007C // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_8_ENCHANTMENT UNIT_END + 0x007D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_9_ENTRYID UNIT_END + 0x007E // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_9_ENCHANTMENT UNIT_END + 0x007F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_10_ENTRYID UNIT_END + 0x0080 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_10_ENCHANTMENT UNIT_END + 0x0081 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_11_ENTRYID UNIT_END + 0x0082 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_11_ENCHANTMENT UNIT_END + 0x0083 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_12_ENTRYID UNIT_END + 0x0084 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_12_ENCHANTMENT UNIT_END + 0x0085 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_13_ENTRYID UNIT_END + 0x0086 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_13_ENCHANTMENT UNIT_END + 0x0087 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_14_ENTRYID UNIT_END + 0x0088 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_14_ENCHANTMENT UNIT_END + 0x0089 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_15_ENTRYID UNIT_END + 0x008A // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_15_ENCHANTMENT UNIT_END + 0x008B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_16_ENTRYID UNIT_END + 0x008C // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_16_ENCHANTMENT UNIT_END + 0x008D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_17_ENTRYID UNIT_END + 0x008E // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_17_ENCHANTMENT UNIT_END + 0x008F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_18_ENTRYID UNIT_END + 0x0090 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_18_ENCHANTMENT UNIT_END + 0x0091 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_19_ENTRYID UNIT_END + 0x0092 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_VISIBLE_ITEM_19_ENCHANTMENT UNIT_END + 0x0093 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
- -#define PLAYER_CHOSEN_TITLE UNIT_END + 0x0094 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_FAKE_INEBRIATION UNIT_END + 0x0095 // Size: 1, Type: INT, Flags: PUBLIC
- -#define PLAYER_FIELD_INV_SLOT_HEAD UNIT_END + 0x0096 // Size: 46, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_PACK_SLOT_1 UNIT_END + 0x00C4 // Size: 32, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_BANK_SLOT_1 UNIT_END + 0x00E4 // Size: 56, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_BANKBAG_SLOT_1 UNIT_END + 0x011C // Size: 14, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_VENDORBUYBACK_SLOT_1 UNIT_END + 0x012A // Size: 24, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_KEYRING_SLOT_1 UNIT_END + 0x0142 // Size: 64, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 UNIT_END + 0x0182 // Size: 64, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FARSIGHT UNIT_END + 0x01C2 // Size: 2, Type: LONG, Flags: PRIVATE
- -#define PLAYER__FIELD_KNOWN_TITLES UNIT_END + 0x01C4 // Size: 2, Type: LONG, Flags: PRIVATE
- -#define PLAYER__FIELD_KNOWN_TITLES1 UNIT_END + 0x01C6 // Size: 2, Type: LONG, Flags: PRIVATE
- -#define PLAYER__FIELD_KNOWN_TITLES2 UNIT_END + 0x01C8 // Size: 2, Type: LONG, Flags: PRIVATE
- -#define PLAYER_FIELD_KNOWN_CURRENCIES UNIT_END + 0x01CA // Size: 2, Type: LONG, Flags: PRIVATE
- -#define PLAYER_XP UNIT_END + 0x01CC // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_NEXT_LEVEL_XP UNIT_END + 0x01CD // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_SKILL_INFO_1_1 UNIT_END + 0x01CE // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
- -#define PLAYER_CHARACTER_POINTS1 UNIT_END + 0x034E // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_CHARACTER_POINTS2 UNIT_END + 0x034F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_TRACK_CREATURES UNIT_END + 0x0350 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_TRACK_RESOURCES UNIT_END + 0x0351 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_BLOCK_PERCENTAGE UNIT_END + 0x0352 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_DODGE_PERCENTAGE UNIT_END + 0x0353 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_PARRY_PERCENTAGE UNIT_END + 0x0354 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_EXPERTISE UNIT_END + 0x0355 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_OFFHAND_EXPERTISE UNIT_END + 0x0356 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_CRIT_PERCENTAGE UNIT_END + 0x0357 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_RANGED_CRIT_PERCENTAGE UNIT_END + 0x0358 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_OFFHAND_CRIT_PERCENTAGE UNIT_END + 0x0359 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_SPELL_CRIT_PERCENTAGE1 UNIT_END + 0x035A // Size: 7, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_SHIELD_BLOCK UNIT_END + 0x0361 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE UNIT_END + 0x0362 // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_EXPLORED_ZONES_1 UNIT_END + 0x0363 // Size: 128, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_REST_STATE_EXPERIENCE UNIT_END + 0x03E3 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_COINAGE UNIT_END + 0x03E4 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_DAMAGE_DONE_POS UNIT_END + 0x03E5 // Size: 7, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_DAMAGE_DONE_NEG UNIT_END + 0x03EC // Size: 7, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_DAMAGE_DONE_PCT UNIT_END + 0x03F3 // Size: 7, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_HEALING_DONE_POS UNIT_END + 0x03FA // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_HEALING_PCT UNIT_END + 0x03FB // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_HEALING_DONE_PCT UNIT_END + 0x03FC // Size: 1, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_TARGET_RESISTANCE UNIT_END + 0x03FD // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x03FE // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_BYTES UNIT_END + 0x03FF // Size: 1, Type: BYTES, Flags: PRIVATE
- -#define PLAYER_AMMO_ID UNIT_END + 0x0400 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_SELF_RES_SPELL UNIT_END + 0x0401 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_PVP_MEDALS UNIT_END + 0x0402 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_BUYBACK_PRICE_1 UNIT_END + 0x0403 // Size: 12, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_BUYBACK_TIMESTAMP_1 UNIT_END + 0x040F // Size: 12, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_KILLS UNIT_END + 0x041B // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
- -#define PLAYER_FIELD_TODAY_CONTRIBUTION UNIT_END + 0x041C // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_YESTERDAY_CONTRIBUTION UNIT_END + 0x041D // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS UNIT_END + 0x041E // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_BYTES2 UNIT_END + 0x041F // Size: 1, Type: 6, Flags: PRIVATE
- -#define PLAYER_FIELD_WATCHED_FACTION_INDEX UNIT_END + 0x0420 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_COMBAT_RATING_1 UNIT_END + 0x0421 // Size: 25, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_ARENA_TEAM_INFO_1_1 UNIT_END + 0x043A // Size: 21, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_HONOR_CURRENCY UNIT_END + 0x044F // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_ARENA_CURRENCY UNIT_END + 0x0450 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_MAX_LEVEL UNIT_END + 0x0451 // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_DAILY_QUESTS_1 UNIT_END + 0x0452 // Size: 25, Type: INT, Flags: PRIVATE
- -#define PLAYER_RUNE_REGEN_1 UNIT_END + 0x046B // Size: 4, Type: FLOAT, Flags: PRIVATE
- -#define PLAYER_NO_REAGENT_COST_1 UNIT_END + 0x046F // Size: 3, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_GLYPH_SLOTS_1 UNIT_END + 0x0472 // Size: 6, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_GLYPHS_1 UNIT_END + 0x0478 // Size: 6, Type: INT, Flags: PRIVATE
- -#define PLAYER_GLYPHS_ENABLED UNIT_END + 0x047E // Size: 1, Type: INT, Flags: PRIVATE
- -#define PLAYER_FIELD_PADDING UNIT_END + 0x047F // Size: 1, Type: INT, Flags: NONE
- -#define PLAYER_END UNIT_END + 0x0480
- +#define UNIT_FIELD_CHARM OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_SUMMON OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_CRITTER OBJECT_END + 0x0004 // Size: 2 Type: LONG Flags: PRIVATE
- +#define UNIT_FIELD_CHARMEDBY OBJECT_END + 0x0006 // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_SUMMONEDBY OBJECT_END + 0x0008 // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_CREATEDBY OBJECT_END + 0x000A // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_TARGET OBJECT_END + 0x000C // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_CHANNEL_OBJECT OBJECT_END + 0x000E // Size: 2 Type: LONG Flags: PUBLIC
- +#define UNIT_FIELD_BYTES_0 OBJECT_END + 0x0010 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define UNIT_FIELD_HEALTH OBJECT_END + 0x0011 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER1 OBJECT_END + 0x0012 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER2 OBJECT_END + 0x0013 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER3 OBJECT_END + 0x0014 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER4 OBJECT_END + 0x0015 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER5 OBJECT_END + 0x0016 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER6 OBJECT_END + 0x0017 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER7 OBJECT_END + 0x0018 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXHEALTH OBJECT_END + 0x0019 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER1 OBJECT_END + 0x001A // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER2 OBJECT_END + 0x001B // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER3 OBJECT_END + 0x001C // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER4 OBJECT_END + 0x001D // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER5 OBJECT_END + 0x001E // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER6 OBJECT_END + 0x001F // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MAXPOWER7 OBJECT_END + 0x0020 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER OBJECT_END + 0x0021 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER OBJECT_END + 0x0028 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_LEVEL OBJECT_END + 0x002F // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_FACTIONTEMPLATE OBJECT_END + 0x0030 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_VIRTUAL_ITEM_SLOT_ID OBJECT_END + 0x0031 // Size: 3 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_FLAGS OBJECT_END + 0x0034 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_FLAGS_2 OBJECT_END + 0x0035 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_AURASTATE OBJECT_END + 0x0036 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_BASEATTACKTIME OBJECT_END + 0x0037 // Size: 2 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_RANGEDATTACKTIME OBJECT_END + 0x0039 // Size: 1 Type: INT Flags: PRIVATE
- +#define UNIT_FIELD_BOUNDINGRADIUS OBJECT_END + 0x003A // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define UNIT_FIELD_COMBATREACH OBJECT_END + 0x003B // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define UNIT_FIELD_DISPLAYID OBJECT_END + 0x003C // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_NATIVEDISPLAYID OBJECT_END + 0x003D // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MOUNTDISPLAYID OBJECT_END + 0x003E // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_MINDAMAGE OBJECT_END + 0x003F // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
- +#define UNIT_FIELD_MAXDAMAGE OBJECT_END + 0x0040 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
- +#define UNIT_FIELD_MINOFFHANDDAMAGE OBJECT_END + 0x0041 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
- +#define UNIT_FIELD_MAXOFFHANDDAMAGE OBJECT_END + 0x0042 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
- +#define UNIT_FIELD_BYTES_1 OBJECT_END + 0x0043 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define UNIT_FIELD_PETNUMBER OBJECT_END + 0x0044 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_PET_NAME_TIMESTAMP OBJECT_END + 0x0045 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_PETEXPERIENCE OBJECT_END + 0x0046 // Size: 1 Type: INT Flags: OWNER
- +#define UNIT_FIELD_PETNEXTLEVELEXP OBJECT_END + 0x0047 // Size: 1 Type: INT Flags: OWNER
- +#define UNIT_DYNAMIC_FLAGS OBJECT_END + 0x0048 // Size: 1 Type: INT Flags: DYNAMIC
- +#define UNIT_CHANNEL_SPELL OBJECT_END + 0x0049 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_MOD_CAST_SPEED OBJECT_END + 0x004A // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define UNIT_CREATED_BY_SPELL OBJECT_END + 0x004B // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_NPC_FLAGS OBJECT_END + 0x004C // Size: 1 Type: INT Flags: DYNAMIC
- +#define UNIT_NPC_EMOTESTATE OBJECT_END + 0x004D // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_STAT0 OBJECT_END + 0x004E // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_STAT1 OBJECT_END + 0x004F // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_STAT2 OBJECT_END + 0x0050 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_STAT3 OBJECT_END + 0x0051 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_STAT4 OBJECT_END + 0x0052 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POSSTAT0 OBJECT_END + 0x0053 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POSSTAT1 OBJECT_END + 0x0054 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POSSTAT2 OBJECT_END + 0x0055 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POSSTAT3 OBJECT_END + 0x0056 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POSSTAT4 OBJECT_END + 0x0057 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_NEGSTAT0 OBJECT_END + 0x0058 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_NEGSTAT1 OBJECT_END + 0x0059 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_NEGSTAT2 OBJECT_END + 0x005A // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_NEGSTAT3 OBJECT_END + 0x005B // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_NEGSTAT4 OBJECT_END + 0x005C // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_RESISTANCES OBJECT_END + 0x005D // Size: 7 Type: INT Flags: PRIVATE OWNER PARTY_LEADER
- +#define UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE OBJECT_END + 0x0064 // Size: 7 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE OBJECT_END + 0x006B // Size: 7 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_BASE_MANA OBJECT_END + 0x0072 // Size: 1 Type: INT Flags: PUBLIC
- +#define UNIT_FIELD_BASE_HEALTH OBJECT_END + 0x0073 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_BYTES_2 OBJECT_END + 0x0074 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define UNIT_FIELD_ATTACK_POWER OBJECT_END + 0x0075 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_ATTACK_POWER_MODS OBJECT_END + 0x0076 // Size: 1 Type: TWO_SHORT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x0077 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_RANGED_ATTACK_POWER OBJECT_END + 0x0078 // Size: 1 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_RANGED_ATTACK_POWER_MODS OBJECT_END + 0x0079 // Size: 1 Type: TWO_SHORT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x007A // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_MINRANGEDDAMAGE OBJECT_END + 0x007B // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_MAXRANGEDDAMAGE OBJECT_END + 0x007C // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POWER_COST_MODIFIER OBJECT_END + 0x007D // Size: 7 Type: INT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_POWER_COST_MULTIPLIER OBJECT_END + 0x0084 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_MAXHEALTHMODIFIER OBJECT_END + 0x008B // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
- +#define UNIT_FIELD_HOVERHEIGHT OBJECT_END + 0x008C // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define UNIT_FIELD_PADDING OBJECT_END + 0x008D // Size: 1 Type: INT Flags: NONE
- +#define UNIT_END OBJECT_END + 0x008E
- +
- +#define PLAYER_DUEL_ARBITER UNIT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define PLAYER_FLAGS UNIT_END + 0x0002 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_GUILDID UNIT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_GUILDRANK UNIT_END + 0x0004 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_BYTES UNIT_END + 0x0005 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define PLAYER_BYTES_2 UNIT_END + 0x0006 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define PLAYER_BYTES_3 UNIT_END + 0x0007 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define PLAYER_DUEL_TEAM UNIT_END + 0x0008 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_GUILD_TIMESTAMP UNIT_END + 0x0009 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_QUEST_LOG_1_1 UNIT_END + 0x000A // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_1_2 UNIT_END + 0x000B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_1_3 UNIT_END + 0x000C // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_1_5 UNIT_END + 0x000E // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_2_1 UNIT_END + 0x000F // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_2_2 UNIT_END + 0x0010 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_2_3 UNIT_END + 0x0011 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_2_5 UNIT_END + 0x0013 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_3_1 UNIT_END + 0x0014 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_3_2 UNIT_END + 0x0015 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_3_3 UNIT_END + 0x0016 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_3_5 UNIT_END + 0x0018 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_4_1 UNIT_END + 0x0019 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_4_2 UNIT_END + 0x001A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_4_3 UNIT_END + 0x001B // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_4_5 UNIT_END + 0x001D // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_5_1 UNIT_END + 0x001E // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_5_2 UNIT_END + 0x001F // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_5_3 UNIT_END + 0x0020 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_5_5 UNIT_END + 0x0022 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_6_1 UNIT_END + 0x0023 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_6_2 UNIT_END + 0x0024 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_6_3 UNIT_END + 0x0025 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_6_5 UNIT_END + 0x0027 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_7_1 UNIT_END + 0x0028 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_7_2 UNIT_END + 0x0029 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_7_3 UNIT_END + 0x002A // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_7_5 UNIT_END + 0x002C // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_8_1 UNIT_END + 0x002D // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_8_2 UNIT_END + 0x002E // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_8_3 UNIT_END + 0x002F // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_8_5 UNIT_END + 0x0031 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_9_1 UNIT_END + 0x0032 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_9_2 UNIT_END + 0x0033 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_9_3 UNIT_END + 0x0034 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_9_5 UNIT_END + 0x0036 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_10_1 UNIT_END + 0x0037 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_10_2 UNIT_END + 0x0038 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_10_3 UNIT_END + 0x0039 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_10_5 UNIT_END + 0x003B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_11_1 UNIT_END + 0x003C // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_11_2 UNIT_END + 0x003D // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_11_3 UNIT_END + 0x003E // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_11_5 UNIT_END + 0x0040 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_12_1 UNIT_END + 0x0041 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_12_2 UNIT_END + 0x0042 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_12_3 UNIT_END + 0x0043 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_12_5 UNIT_END + 0x0045 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_13_1 UNIT_END + 0x0046 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_13_2 UNIT_END + 0x0047 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_13_3 UNIT_END + 0x0048 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_13_5 UNIT_END + 0x004A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_14_1 UNIT_END + 0x004B // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_14_2 UNIT_END + 0x004C // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_14_3 UNIT_END + 0x004D // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_14_5 UNIT_END + 0x004F // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_15_1 UNIT_END + 0x0050 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_15_2 UNIT_END + 0x0051 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_15_3 UNIT_END + 0x0052 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_15_5 UNIT_END + 0x0054 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_16_1 UNIT_END + 0x0055 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_16_2 UNIT_END + 0x0056 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_16_3 UNIT_END + 0x0057 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_16_5 UNIT_END + 0x0059 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_17_1 UNIT_END + 0x005A // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_17_2 UNIT_END + 0x005B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_17_3 UNIT_END + 0x005C // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_17_5 UNIT_END + 0x005E // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_18_1 UNIT_END + 0x005F // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_18_2 UNIT_END + 0x0060 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_18_3 UNIT_END + 0x0061 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_18_5 UNIT_END + 0x0063 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_19_1 UNIT_END + 0x0064 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_19_2 UNIT_END + 0x0065 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_19_3 UNIT_END + 0x0066 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_19_5 UNIT_END + 0x0068 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_20_1 UNIT_END + 0x0069 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_20_2 UNIT_END + 0x006A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_20_3 UNIT_END + 0x006B // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_20_5 UNIT_END + 0x006D // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_21_1 UNIT_END + 0x006E // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_21_2 UNIT_END + 0x006F // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_21_3 UNIT_END + 0x0070 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_21_5 UNIT_END + 0x0072 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_22_1 UNIT_END + 0x0073 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_22_2 UNIT_END + 0x0074 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_22_3 UNIT_END + 0x0075 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_22_5 UNIT_END + 0x0077 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_23_1 UNIT_END + 0x0078 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_23_2 UNIT_END + 0x0079 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_23_3 UNIT_END + 0x007A // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_23_5 UNIT_END + 0x007C // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_24_1 UNIT_END + 0x007D // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_24_2 UNIT_END + 0x007E // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_24_3 UNIT_END + 0x007F // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_24_5 UNIT_END + 0x0081 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_25_1 UNIT_END + 0x0082 // Size: 1 Type: INT Flags: PARTY_MEMBER
- +#define PLAYER_QUEST_LOG_25_2 UNIT_END + 0x0083 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_25_3 UNIT_END + 0x0084 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_QUEST_LOG_25_5 UNIT_END + 0x0086 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_VISIBLE_ITEM_1_ENTRYID UNIT_END + 0x0087 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_1_ENCHANTMENT UNIT_END + 0x0088 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_2_ENTRYID UNIT_END + 0x0089 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_2_ENCHANTMENT UNIT_END + 0x008A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_3_ENTRYID UNIT_END + 0x008B // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_3_ENCHANTMENT UNIT_END + 0x008C // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_4_ENTRYID UNIT_END + 0x008D // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_4_ENCHANTMENT UNIT_END + 0x008E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_5_ENTRYID UNIT_END + 0x008F // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_5_ENCHANTMENT UNIT_END + 0x0090 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_6_ENTRYID UNIT_END + 0x0091 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_6_ENCHANTMENT UNIT_END + 0x0092 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_7_ENTRYID UNIT_END + 0x0093 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_7_ENCHANTMENT UNIT_END + 0x0094 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_8_ENTRYID UNIT_END + 0x0095 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_8_ENCHANTMENT UNIT_END + 0x0096 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_9_ENTRYID UNIT_END + 0x0097 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_9_ENCHANTMENT UNIT_END + 0x0098 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_10_ENTRYID UNIT_END + 0x0099 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_10_ENCHANTMENT UNIT_END + 0x009A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_11_ENTRYID UNIT_END + 0x009B // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_11_ENCHANTMENT UNIT_END + 0x009C // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_12_ENTRYID UNIT_END + 0x009D // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_12_ENCHANTMENT UNIT_END + 0x009E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_13_ENTRYID UNIT_END + 0x009F // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_13_ENCHANTMENT UNIT_END + 0x00A0 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_14_ENTRYID UNIT_END + 0x00A1 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_14_ENCHANTMENT UNIT_END + 0x00A2 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_15_ENTRYID UNIT_END + 0x00A3 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_15_ENCHANTMENT UNIT_END + 0x00A4 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_16_ENTRYID UNIT_END + 0x00A5 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_16_ENCHANTMENT UNIT_END + 0x00A6 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_17_ENTRYID UNIT_END + 0x00A7 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_17_ENCHANTMENT UNIT_END + 0x00A8 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_18_ENTRYID UNIT_END + 0x00A9 // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_18_ENCHANTMENT UNIT_END + 0x00AA // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_19_ENTRYID UNIT_END + 0x00AB // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_VISIBLE_ITEM_19_ENCHANTMENT UNIT_END + 0x00AC // Size: 1 Type: TWO_SHORT Flags: PUBLIC
- +#define PLAYER_CHOSEN_TITLE UNIT_END + 0x00AD // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_FAKE_INEBRIATION UNIT_END + 0x00AE // Size: 1 Type: INT Flags: PUBLIC
- +#define PLAYER_FIELD_PAD_0 UNIT_END + 0x00AF // Size: 1 Type: INT Flags: NONE
- +#define PLAYER_FIELD_INV_SLOT_HEAD UNIT_END + 0x00B0 // Size: 46 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_PACK_SLOT_1 UNIT_END + 0x00DE // Size: 32 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_BANK_SLOT_1 UNIT_END + 0x00FE // Size: 56 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_BANKBAG_SLOT_1 UNIT_END + 0x0136 // Size: 14 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_VENDORBUYBACK_SLOT_1 UNIT_END + 0x0144 // Size: 24 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_KEYRING_SLOT_1 UNIT_END + 0x015C // Size: 64 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 UNIT_END + 0x019C // Size: 64 Type: LONG Flags: PRIVATE
- +#define PLAYER_FARSIGHT UNIT_END + 0x01DC // Size: 2 Type: LONG Flags: PRIVATE
- +#define PLAYER__FIELD_KNOWN_TITLES UNIT_END + 0x01DE // Size: 2 Type: LONG Flags: PRIVATE
- +#define PLAYER__FIELD_KNOWN_TITLES1 UNIT_END + 0x01E0 // Size: 2 Type: LONG Flags: PRIVATE
- +#define PLAYER__FIELD_KNOWN_TITLES2 UNIT_END + 0x01E2 // Size: 2 Type: LONG Flags: PRIVATE
- +#define PLAYER_FIELD_KNOWN_CURRENCIES UNIT_END + 0x01E4 // Size: 2 Type: LONG Flags: PRIVATE
- +#define PLAYER_XP UNIT_END + 0x01E6 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_NEXT_LEVEL_XP UNIT_END + 0x01E7 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_SKILL_INFO_1_1 UNIT_END + 0x01E8 // Size: 384 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_CHARACTER_POINTS1 UNIT_END + 0x0368 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_CHARACTER_POINTS2 UNIT_END + 0x0369 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_TRACK_CREATURES UNIT_END + 0x036A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_TRACK_RESOURCES UNIT_END + 0x036B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_BLOCK_PERCENTAGE UNIT_END + 0x036C // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_DODGE_PERCENTAGE UNIT_END + 0x036D // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_PARRY_PERCENTAGE UNIT_END + 0x036E // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_EXPERTISE UNIT_END + 0x036F // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_OFFHAND_EXPERTISE UNIT_END + 0x0370 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_CRIT_PERCENTAGE UNIT_END + 0x0371 // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_RANGED_CRIT_PERCENTAGE UNIT_END + 0x0372 // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_OFFHAND_CRIT_PERCENTAGE UNIT_END + 0x0373 // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_SPELL_CRIT_PERCENTAGE1 UNIT_END + 0x0374 // Size: 7 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_SHIELD_BLOCK UNIT_END + 0x037B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE UNIT_END + 0x037C // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_EXPLORED_ZONES_1 UNIT_END + 0x037D // Size: 128 Type: BYTES Flags: PRIVATE
- +#define PLAYER_REST_STATE_EXPERIENCE UNIT_END + 0x03FD // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_COINAGE UNIT_END + 0x03FE // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_DAMAGE_DONE_POS UNIT_END + 0x03FF // Size: 7 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_DAMAGE_DONE_NEG UNIT_END + 0x0406 // Size: 7 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_DAMAGE_DONE_PCT UNIT_END + 0x040D // Size: 7 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_HEALING_DONE_POS UNIT_END + 0x0414 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_HEALING_PCT UNIT_END + 0x0415 // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_HEALING_DONE_PCT UNIT_END + 0x0416 // Size: 1 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_TARGET_RESISTANCE UNIT_END + 0x0417 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x0418 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_BYTES UNIT_END + 0x0419 // Size: 1 Type: BYTES Flags: PRIVATE
- +#define PLAYER_AMMO_ID UNIT_END + 0x041A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_SELF_RES_SPELL UNIT_END + 0x041B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_PVP_MEDALS UNIT_END + 0x041C // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_BUYBACK_PRICE_1 UNIT_END + 0x041D // Size: 12 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_BUYBACK_TIMESTAMP_1 UNIT_END + 0x0429 // Size: 12 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_KILLS UNIT_END + 0x0435 // Size: 1 Type: TWO_SHORT Flags: PRIVATE
- +#define PLAYER_FIELD_TODAY_CONTRIBUTION UNIT_END + 0x0436 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_YESTERDAY_CONTRIBUTION UNIT_END + 0x0437 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS UNIT_END + 0x0438 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_BYTES2 UNIT_END + 0x0439 // Size: 1 Type: 6 Flags: PRIVATE
- +#define PLAYER_FIELD_WATCHED_FACTION_INDEX UNIT_END + 0x043A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_COMBAT_RATING_1 UNIT_END + 0x043B // Size: 25 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_ARENA_TEAM_INFO_1_1 UNIT_END + 0x0454 // Size: 21 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_HONOR_CURRENCY UNIT_END + 0x0469 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_ARENA_CURRENCY UNIT_END + 0x046A // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_MAX_LEVEL UNIT_END + 0x046B // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_DAILY_QUESTS_1 UNIT_END + 0x046C // Size: 25 Type: INT Flags: PRIVATE
- +#define PLAYER_RUNE_REGEN_1 UNIT_END + 0x0485 // Size: 4 Type: FLOAT Flags: PRIVATE
- +#define PLAYER_NO_REAGENT_COST_1 UNIT_END + 0x0489 // Size: 3 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_GLYPH_SLOTS_1 UNIT_END + 0x048C // Size: 6 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_GLYPHS_1 UNIT_END + 0x0492 // Size: 6 Type: INT Flags: PRIVATE
- +#define PLAYER_GLYPHS_ENABLED UNIT_END + 0x0498 // Size: 1 Type: INT Flags: PRIVATE
- +#define PLAYER_FIELD_PADDING UNIT_END + 0x0499 // Size: 1 Type: INT Flags: NONE
- +#define PLAYER_END UNIT_END + 0x049A
- //GameObjectFields
- -#define OBJECT_FIELD_CREATED_BY OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define GAMEOBJECT_DISPLAYID OBJECT_END + 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
- -#define GAMEOBJECT_FLAGS OBJECT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
- -#define GAMEOBJECT_PARENTROTATION OBJECT_END + 0x0004 // Size: 4, Type: FLOAT, Flags: PUBLIC
- -#define GAMEOBJECT_DYNAMIC OBJECT_END + 0x0008 // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC
- -#define GAMEOBJECT_FACTION OBJECT_END + 0x0009 // Size: 1, Type: INT, Flags: PUBLIC
- -#define GAMEOBJECT_LEVEL OBJECT_END + 0x000A // Size: 1, Type: INT, Flags: PUBLIC
- -#define GAMEOBJECT_BYTES_1 OBJECT_END + 0x000B // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define GAMEOBJECT_END OBJECT_END + 0x000C
- +#define OBJECT_FIELD_CREATED_BY OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define GAMEOBJECT_DISPLAYID OBJECT_END + 0x0002 // Size: 1 Type: INT Flags: PUBLIC
- +#define GAMEOBJECT_FLAGS OBJECT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
- +#define GAMEOBJECT_PARENTROTATION OBJECT_END + 0x0004 // Size: 4 Type: FLOAT Flags: PUBLIC
- +#define GAMEOBJECT_DYNAMIC OBJECT_END + 0x0008 // Size: 1 Type: TWO_SHORT Flags: DYNAMIC
- +#define GAMEOBJECT_FACTION OBJECT_END + 0x0009 // Size: 1 Type: INT Flags: PUBLIC
- +#define GAMEOBJECT_LEVEL OBJECT_END + 0x000A // Size: 1 Type: INT Flags: PUBLIC
- +#define GAMEOBJECT_BYTES_1 OBJECT_END + 0x000B // Size: 1 Type: BYTES Flags: PUBLIC
- +#define GAMEOBJECT_END OBJECT_END + 0x000C
- //DynamicObjectFields
- -#define DYNAMICOBJECT_CASTER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define DYNAMICOBJECT_BYTES OBJECT_END + 0x0002 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define DYNAMICOBJECT_SPELLID OBJECT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
- -#define DYNAMICOBJECT_RADIUS OBJECT_END + 0x0004 // Size: 1, Type: FLOAT, Flags: PUBLIC
- -#define DYNAMICOBJECT_CASTTIME OBJECT_END + 0x0005 // Size: 1, Type: INT, Flags: PUBLIC
- -#define DYNAMICOBJECT_END OBJECT_END + 0x0006
- +#define DYNAMICOBJECT_CASTER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define DYNAMICOBJECT_BYTES OBJECT_END + 0x0002 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define DYNAMICOBJECT_SPELLID OBJECT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
- +#define DYNAMICOBJECT_RADIUS OBJECT_END + 0x0004 // Size: 1 Type: FLOAT Flags: PUBLIC
- +#define DYNAMICOBJECT_CASTTIME OBJECT_END + 0x0005 // Size: 1 Type: INT Flags: PUBLIC
- +#define DYNAMICOBJECT_END OBJECT_END + 0x0006
- //CorpseFields
- -#define CORPSE_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define CORPSE_FIELD_PARTY OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
- -#define CORPSE_FIELD_DISPLAY_ID OBJECT_END + 0x0004 // Size: 1, Type: INT, Flags: PUBLIC
- -#define CORPSE_FIELD_ITEM OBJECT_END + 0x0005 // Size: 19, Type: INT, Flags: PUBLIC
- -#define CORPSE_FIELD_BYTES_1 OBJECT_END + 0x0018 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define CORPSE_FIELD_BYTES_2 OBJECT_END + 0x0019 // Size: 1, Type: BYTES, Flags: PUBLIC
- -#define CORPSE_FIELD_GUILD OBJECT_END + 0x001A // Size: 1, Type: INT, Flags: PUBLIC
- -#define CORPSE_FIELD_FLAGS OBJECT_END + 0x001B // Size: 1, Type: INT, Flags: PUBLIC
- -#define CORPSE_FIELD_DYNAMIC_FLAGS OBJECT_END + 0x001C // Size: 1, Type: INT, Flags: DYNAMIC
- -#define CORPSE_FIELD_PAD OBJECT_END + 0x001D // Size: 1, Type: INT, Flags: NONE
- -#define CORPSE_END OBJECT_END + 0x001E
- +#define CORPSE_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
- +#define CORPSE_FIELD_PARTY OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
- +#define CORPSE_FIELD_DISPLAY_ID OBJECT_END + 0x0004 // Size: 1 Type: INT Flags: PUBLIC
- +#define CORPSE_FIELD_ITEM OBJECT_END + 0x0005 // Size: 19 Type: INT Flags: PUBLIC
- +#define CORPSE_FIELD_BYTES_1 OBJECT_END + 0x0018 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define CORPSE_FIELD_BYTES_2 OBJECT_END + 0x0019 // Size: 1 Type: BYTES Flags: PUBLIC
- +#define CORPSE_FIELD_GUILD OBJECT_END + 0x001A // Size: 1 Type: INT Flags: PUBLIC
- +#define CORPSE_FIELD_FLAGS OBJECT_END + 0x001B // Size: 1 Type: INT Flags: PUBLIC
- +#define CORPSE_FIELD_DYNAMIC_FLAGS OBJECT_END + 0x001C // Size: 1 Type: INT Flags: DYNAMIC
- +#define CORPSE_FIELD_PAD OBJECT_END + 0x001D // Size: 1 Type: INT Flags: NONE
- +#define CORPSE_END OBJECT_END + 0x001E
- #define UNIT_FIELD_STRENGTH UNIT_FIELD_STAT0
- #define UNIT_FIELD_AGILITY UNIT_FIELD_STAT1
- @@ -429,8 +431,8 @@
- //VLack: Don't forget to fix up these when generating this file from a new client!!!
- //#define PLAYER_VISIBLE_ITEM_LENGTH (PLAYER_VISIBLE_ITEM_2_ENTRYID - PLAYER_VISIBLE_ITEM_1_ENTRYID)
- #define PLAYER_VISIBLE_ITEM_LENGTH 2
- -#define GAMEOBJECT_PARENTROTATION_01 OBJECT_END + 0x0005 // Size: 4, Type: FLOAT, Flags: PUBLIC
- -#define GAMEOBJECT_PARENTROTATION_02 OBJECT_END + 0x0006 // Size: 4, Type: FLOAT, Flags: PUBLIC
- -#define GAMEOBJECT_PARENTROTATION_03 OBJECT_END + 0x0007 // Size: 4, Type: FLOAT, Flags: PUBLIC
- +#define GAMEOBJECT_PARENTROTATION_01 OBJECT_END + 0x0005 // Size: 4 Type: FLOAT Flags: PUBLIC
- +#define GAMEOBJECT_PARENTROTATION_02 OBJECT_END + 0x0006 // Size: 4 Type: FLOAT Flags: PUBLIC
- +#define GAMEOBJECT_PARENTROTATION_03 OBJECT_END + 0x0007 // Size: 4 Type: FLOAT Flags: PUBLIC
- #endif
- Index: src/arcemu-world/WorldSession.cpp
- ===================================================================
- --- src/arcemu-world/WorldSession.cpp (revision 3116)
- +++ src/arcemu-world/WorldSession.cpp (working copy)
- @@ -574,7 +574,8 @@
- WorldPacketHandlers[CMSG_MOVE_HOVER_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
- WorldPacketHandlers[CMSG_MOVE_SET_CAN_FLY_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
- WorldPacketHandlers[MSG_MOVE_START_DESCEND].handler = &WorldSession::HandleMovementOpcodes;
- -
- + WorldPacketHandlers[CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
- +
- // Action Buttons
- WorldPacketHandlers[CMSG_SET_ACTION_BUTTON].handler = &WorldSession::HandleSetActionButtonOpcode;
- WorldPacketHandlers[CMSG_REPOP_REQUEST].handler = &WorldSession::HandleRepopRequestOpcode;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement