Advertisement
Guest User

kjanko 3

a guest
Jan 18th, 2010
666
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 213.93 KB | None | 0 0
  1. Index: configs/logon.conf
  2. ===================================================================
  3. --- configs/logon.conf (revision 3116)
  4. +++ configs/logon.conf (working copy)
  5. @@ -69,8 +69,8 @@
  6. * As of the last update, version 3.1.3 was build 9947.
  7. */
  8.  
  9. -<Client MinBuild = "10482"
  10. - MaxBuild = "10505">
  11. +<Client MinBuild = "10958"
  12. + MaxBuild = "11159">
  13.  
  14. /* WorldServer Setup
  15. *
  16. Index: extras/map_extractor/adt.cpp
  17. ===================================================================
  18. --- extras/map_extractor/adt.cpp (revision 3116)
  19. +++ extras/map_extractor/adt.cpp (working copy)
  20. @@ -338,6 +338,10 @@
  21. nextpos = mf.getPos() + 0x1C0; // size fix
  22.  
  23. }
  24. + if(fourcc=0xefb88b70) // infinite loop fix, right?
  25. + {
  26. + nextpos = mf.getPos() + 0x1199;
  27. + }
  28. else
  29. /*if(fourcc==0x4d434c51) //MCLQ
  30. {
  31. Index: extras/Spell_to_sql/src/defines.h
  32. ===================================================================
  33. --- extras/Spell_to_sql/src/defines.h (revision 3116)
  34. +++ extras/Spell_to_sql/src/defines.h (working copy)
  35. @@ -13,12 +13,12 @@
  36.  
  37. #define SERVER_DECL __declspec(dllexport)
  38.  
  39. -#define SPELL_DBC_CLIENT_BUILD 10314 // 3.2
  40. +#define SPELL_DBC_CLIENT_BUILD 10958 // 3.2
  41.  
  42. #define SQL_INSERTS_PER_QUERY 1000
  43.  
  44. //this might change from 1 version to another of the DBC
  45. -#define SPELL_COLUMN_COUNT 239
  46. +#define SPELL_COLUMN_COUNT 240
  47. //last column is "skip_this_for_sql"
  48.  
  49. const char sql_translation_table[SPELL_COLUMN_COUNT][3][300] =
  50. @@ -262,4 +262,5 @@
  51. {"uint32", "UNK5", "0"}, //237
  52. {"uint32", "UNK6", "0"}, //238
  53. {"uint32", "UNK7", "0"}, //239
  54. + {"uint32", "UNK8", "0"}, //240
  55. };
  56. Index: extras/spellfailure_extractor/spellfailure_extractor.cpp
  57. ===================================================================
  58. --- extras/spellfailure_extractor/spellfailure_extractor.cpp (revision 3116)
  59. +++ extras/spellfailure_extractor/spellfailure_extractor.cpp (working copy)
  60. @@ -18,7 +18,6 @@
  61. *
  62. * spellfailure_extractor.cpp : Defines the entry point for the console application.
  63. */
  64. -
  65. #include <cstring>
  66. #include <cstdio>
  67. #include <cstdlib>
  68. Index: src/arcemu-logonserver/AutoPatcher.cpp
  69. ===================================================================
  70. --- src/arcemu-logonserver/AutoPatcher.cpp (revision 3116)
  71. +++ src/arcemu-logonserver/AutoPatcher.cpp (working copy)
  72. @@ -65,7 +65,7 @@
  73. if(hFile == INVALID_HANDLE_VALUE)
  74. continue;
  75.  
  76. - Log.Notice("PatchMgr", "Found patch for b%u locale `%s`.", srcversion,locality);
  77. + Log.Notice("PatchMgr", "Found patch for %u locale `%s`.", srcversion,locality);
  78. pPatch = new Patch;
  79. size = GetFileSize(hFile, &sizehigh);
  80. pPatch->FileSize = size;
  81. Index: src/arcemu-logonserver/Main.cpp
  82. ===================================================================
  83. --- src/arcemu-logonserver/Main.cpp (revision 3116)
  84. +++ src/arcemu-logonserver/Main.cpp (working copy)
  85. @@ -183,7 +183,7 @@
  86. }
  87. }
  88. m_allowedIpLock.Release();
  89. - return false;
  90. + return true;
  91. }
  92.  
  93. bool IsServerAllowedMod(unsigned int IP)
  94. @@ -198,7 +198,7 @@
  95. }
  96. }
  97. m_allowedIpLock.Release();
  98. - return false;
  99. + return true;
  100. }
  101.  
  102. bool Rehash()
  103. Index: src/arcemu-shared/AuthCodes.h
  104. ===================================================================
  105. --- src/arcemu-shared/AuthCodes.h (revision 3116)
  106. +++ src/arcemu-shared/AuthCodes.h (working copy)
  107. @@ -20,7 +20,7 @@
  108. #ifndef _AUTHCODES_H
  109. #define _AUTHCODES_H
  110.  
  111. -// client 3.2.2a, 2009/10/06
  112. +// client 3.3.0, 2009/12/20
  113. enum LoginErrorCode
  114. {
  115. E_RESPONSE_SUCCESS = 0x00,
  116. @@ -98,42 +98,43 @@
  117. E_CHAR_CREATE_CHARACTER_SWAP_FACTION = 0x42,
  118. E_CHAR_CREATE_CHARACTER_RACE_ONLY = 0x43,
  119. E_CHAR_CREATE_CHARACTER_GOLD_LIMIT = 0x44,
  120. + E_CHAR_CREATE_FORCE_LOGIN = 0x45,
  121.  
  122. - E_CHAR_DELETE_IN_PROGRESS = 0x45,
  123. - E_CHAR_DELETE_SUCCESS = 0x46,
  124. - E_CHAR_DELETE_FAILED = 0x47,
  125. - E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 0x48,
  126. - E_CHAR_DELETE_FAILED_GUILD_LEADER = 0x49,
  127. - E_CHAR_DELETE_FAILED_ARENA_CAPTAIN = 0x4A,
  128. + E_CHAR_DELETE_IN_PROGRESS = 0x46,
  129. + E_CHAR_DELETE_SUCCESS = 0x47,
  130. + E_CHAR_DELETE_FAILED = 0x48,
  131. + E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 0x49,
  132. + E_CHAR_DELETE_FAILED_GUILD_LEADER = 0x4A,
  133. + E_CHAR_DELETE_FAILED_ARENA_CAPTAIN = 0x4B,
  134.  
  135. - E_CHAR_LOGIN_IN_PROGRESS = 0x4B,
  136. - E_CHAR_LOGIN_SUCCESS = 0x4C,
  137. - E_CHAR_LOGIN_NO_WORLD = 0x4D,
  138. - E_CHAR_LOGIN_DUPLICATE_CHARACTER = 0x4E,
  139. - E_CHAR_LOGIN_NO_INSTANCES = 0x4F,
  140. - E_CHAR_LOGIN_FAILED = 0x50,
  141. - E_CHAR_LOGIN_DISABLED = 0x51,
  142. - E_CHAR_LOGIN_NO_CHARACTER = 0x52,
  143. - E_CHAR_LOGIN_LOCKED_FOR_TRANSFER = 0x53,
  144. - E_CHAR_LOGIN_LOCKED_BY_BILLING = 0x54,
  145. + E_CHAR_LOGIN_IN_PROGRESS = 0x4C,
  146. + E_CHAR_LOGIN_SUCCESS = 0x4D,
  147. + E_CHAR_LOGIN_NO_WORLD = 0x4E,
  148. + E_CHAR_LOGIN_DUPLICATE_CHARACTER = 0x4F,
  149. + E_CHAR_LOGIN_NO_INSTANCES = 0x50,
  150. + E_CHAR_LOGIN_FAILED = 0x51,
  151. + E_CHAR_LOGIN_DISABLED = 0x52,
  152. + E_CHAR_LOGIN_NO_CHARACTER = 0x53,
  153. + E_CHAR_LOGIN_LOCKED_FOR_TRANSFER = 0x54,
  154. + E_CHAR_LOGIN_LOCKED_BY_BILLING = 0x55,
  155.  
  156. - E_CHAR_NAME_SUCCESS = 0x55,
  157. - E_CHAR_NAME_FAILURE = 0x56,
  158. - E_CHAR_NAME_NO_NAME = 0x57,
  159. - E_CHAR_NAME_TOO_SHORT = 0x58,
  160. - E_CHAR_NAME_TOO_LONG = 0x59,
  161. - E_CHAR_NAME_INVALID_CHARACTER = 0x5A,
  162. - E_CHAR_NAME_MIXED_LANGUAGES = 0x5B,
  163. - E_CHAR_NAME_PROFANE = 0x5C,
  164. - E_CHAR_NAME_RESERVED = 0x5D,
  165. - E_CHAR_NAME_INVALID_APOSTROPHE = 0x5E,
  166. - E_CHAR_NAME_MULTIPLE_APOSTROPHES = 0x5F,
  167. - E_CHAR_NAME_THREE_CONSECUTIVE = 0x60,
  168. - E_CHAR_NAME_INVALID_SPACE = 0x61,
  169. - E_CHAR_NAME_CONSECUTIVE_SPACES = 0x62,
  170. - E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 0x63,
  171. - E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 0x64,
  172. - E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 0x65,
  173. + E_CHAR_NAME_SUCCESS = 0x56,
  174. + E_CHAR_NAME_FAILURE = 0x57,
  175. + E_CHAR_NAME_NO_NAME = 0x58,
  176. + E_CHAR_NAME_TOO_SHORT = 0x59,
  177. + E_CHAR_NAME_TOO_LONG = 0x5A,
  178. + E_CHAR_NAME_INVALID_CHARACTER = 0x5B,
  179. + E_CHAR_NAME_MIXED_LANGUAGES = 0x5C,
  180. + E_CHAR_NAME_PROFANE = 0x5D,
  181. + E_CHAR_NAME_RESERVED = 0x5E,
  182. + E_CHAR_NAME_INVALID_APOSTROPHE = 0x5F,
  183. + E_CHAR_NAME_MULTIPLE_APOSTROPHES = 0x60,
  184. + E_CHAR_NAME_THREE_CONSECUTIVE = 0x61,
  185. + E_CHAR_NAME_INVALID_SPACE = 0x62,
  186. + E_CHAR_NAME_CONSECUTIVE_SPACES = 0x63,
  187. + E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 0x64,
  188. + E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 0x65,
  189. + E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 0x66,
  190. };
  191.  
  192. //These defines are for use with OutPacket
  193. @@ -212,41 +213,42 @@
  194. #define CHAR_CREATE_CHARACTER_SWAP_FACTION "\x42"
  195. #define CHAR_CREATE_CHARACTER_RACE_ONLY "\x43"
  196. #define CHAR_CREATE_CHARACTER_GOLD_LIMIT "\x44"
  197. +#define CHAR_CREATE_FORCE_LOGIN "\x45"
  198.  
  199. -#define CHAR_DELETE_IN_PROGRESS "\x45"
  200. -#define CHAR_DELETE_SUCCESS "\x46"
  201. -#define CHAR_DELETE_FAILED "\x47"
  202. -#define CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x48"
  203. -#define CHAR_DELETE_FAILED_GUILD_LEADER "\x49"
  204. -#define CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4A"
  205. +#define CHAR_DELETE_IN_PROGRESS "\x46"
  206. +#define CHAR_DELETE_SUCCESS "\x47"
  207. +#define CHAR_DELETE_FAILED "\x48"
  208. +#define CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x49"
  209. +#define CHAR_DELETE_FAILED_GUILD_LEADER "\x4A"
  210. +#define CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4B"
  211.  
  212. -#define CHAR_LOGIN_IN_PROGRESS "\x4B"
  213. -#define CHAR_LOGIN_SUCCESS "\x4C"
  214. -#define CHAR_LOGIN_NO_WORLD "\x4D"
  215. -#define CHAR_LOGIN_DUPLICATE_CHARACTER "\x4E"
  216. -#define CHAR_LOGIN_NO_INSTANCES "\x4F"
  217. -#define CHAR_LOGIN_FAILED "\x50"
  218. -#define CHAR_LOGIN_DISABLED "\x51"
  219. -#define CHAR_LOGIN_NO_CHARACTER "\x52"
  220. -#define CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x53"
  221. -#define CHAR_LOGIN_LOCKED_BY_BILLING "\x54"
  222. +#define CHAR_LOGIN_IN_PROGRESS "\x4C"
  223. +#define CHAR_LOGIN_SUCCESS "\x4D"
  224. +#define CHAR_LOGIN_NO_WORLD "\x4E"
  225. +#define CHAR_LOGIN_DUPLICATE_CHARACTER "\x4F"
  226. +#define CHAR_LOGIN_NO_INSTANCES "\x50"
  227. +#define CHAR_LOGIN_FAILED "\x51"
  228. +#define CHAR_LOGIN_DISABLED "\x52"
  229. +#define CHAR_LOGIN_NO_CHARACTER "\x53"
  230. +#define CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x54"
  231. +#define CHAR_LOGIN_LOCKED_BY_BILLING "\x55"
  232.  
  233. -#define CHAR_NAME_SUCCESS "\x55"
  234. -#define CHAR_NAME_FAILURE "\x56"
  235. -#define CHAR_NAME_NO_NAME "\x57"
  236. -#define CHAR_NAME_TOO_SHORT "\x58"
  237. -#define CHAR_NAME_TOO_LONG "\x59"
  238. -#define CHAR_NAME_INVALID_CHARACTER "\x5A"
  239. -#define CHAR_NAME_MIXED_LANGUAGES "\x5B"
  240. -#define CHAR_NAME_PROFANE "\x5C"
  241. -#define CHAR_NAME_RESERVED "\x5D"
  242. -#define CHAR_NAME_INVALID_APOSTROPHE "\x5E"
  243. -#define CHAR_NAME_MULTIPLE_APOSTROPHES "\x5F"
  244. -#define CHAR_NAME_THREE_CONSECUTIVE "\x60"
  245. -#define CHAR_NAME_INVALID_SPACE "\x61"
  246. -#define CHAR_NAME_CONSECUTIVE_SPACES "\x62"
  247. -#define CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x63"
  248. -#define CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x64"
  249. -#define CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x65"
  250. +#define CHAR_NAME_SUCCESS "\x56"
  251. +#define CHAR_NAME_FAILURE "\x57"
  252. +#define CHAR_NAME_NO_NAME "\x58"
  253. +#define CHAR_NAME_TOO_SHORT "\x59"
  254. +#define CHAR_NAME_TOO_LONG "\x5A"
  255. +#define CHAR_NAME_INVALID_CHARACTER "\x5B"
  256. +#define CHAR_NAME_MIXED_LANGUAGES "\x5C"
  257. +#define CHAR_NAME_PROFANE "\x5D"
  258. +#define CHAR_NAME_RESERVED "\x5E"
  259. +#define CHAR_NAME_INVALID_APOSTROPHE "\x5F"
  260. +#define CHAR_NAME_MULTIPLE_APOSTROPHES "\x60"
  261. +#define CHAR_NAME_THREE_CONSECUTIVE "\x61"
  262. +#define CHAR_NAME_INVALID_SPACE "\x62"
  263. +#define CHAR_NAME_CONSECUTIVE_SPACES "\x63"
  264. +#define CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x64"
  265. +#define CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x65"
  266. +#define CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x66"
  267.  
  268. #endif
  269. Index: src/arcemu-shared/Database/DBCStores.cpp
  270. ===================================================================
  271. --- src/arcemu-shared/Database/DBCStores.cpp (revision 3116)
  272. +++ src/arcemu-shared/Database/DBCStores.cpp (working copy)
  273. @@ -97,7 +97,7 @@
  274. const char* GlyphSlotEntryFormat = "uuu";
  275. const char* skilllineentrYFormat = "uuulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  276.  
  277. -const char* BattlemasterListEntryFormat = "uiiiiiiiiuuuuuiiiiiiiiiiiiiiiiiiuux";
  278. +const char* BattlemasterListEntryFormat = "uiiiiiiiiuiiiiiiiiiiiiiiiiiiuux";
  279.  
  280. const char* CharTitlesEntryfmt =
  281. "u" // ID
  282. @@ -270,6 +270,7 @@
  283. "x" //Added in 3.1
  284. "xxx" // unk 3.2.0, float!
  285. "x" // unk 3.2.0
  286. + "x" // unk 3.3.0
  287. ;
  288.  
  289.  
  290. @@ -286,7 +287,7 @@
  291. const char* areatableFormat = "uuuuuxxxuxulxxxxxxxxxxxxxxxxuxxxxxxx";
  292. const char* factiontemplatedbcFormat = "uuuuuuuuuuuuuu";
  293. const char* auctionhousedbcFormat = "uuuuxxxxxxxxxxxxxxxxx";
  294. -const char* factiondbcFormat = "uiuuuuuuuuiiiiuuuuulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  295. +const char* factiondbcFormat = "uiuuuuuuuuiiiiuuuuuxxxxlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  296. const char* dbctaxinodeFormat = "uufffxxxxxxxxxxxxxxxxxuu";
  297. const char* dbctaxipathFormat = "uuuu";
  298. const char* dbctaxipathnodeFormat = "uuuufffuuxx";
  299. @@ -299,19 +300,20 @@
  300. "s" // 1 name_internal
  301. "u" // 2 map_type
  302. "u" // 3 is_pvp_zone
  303. - "lxxxxxxxxxxxxxxxx" // 4-20 real_name
  304. - "u" // 21 linked_zone
  305. - "xxxxxxxxxxxxxxxxx" // 22-38 hordeIntro
  306. - "xxxxxxxxxxxxxxxxx" // 39-55 allianceIntro
  307. - "u" // 56 multimap_id
  308. - "x" // 57 unk_float (all 1 but arathi 1.25)
  309. - "u" // 58 parent_map
  310. - "u" // 59 start_x
  311. - "u" // 60 start_y
  312. - "x" // 61 unk
  313. - "u" // 62 addon
  314. - "x" // 63 unk
  315. - "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
  316. + "x" // 4 0 or 1 for battlegrounds (not arenas)
  317. + "lxxxxxxxxxxxxxxxx" // 5-21 real_name
  318. + "u" // 22 linked_zone
  319. + "lxxxxxxxxxxxxxxxx" // 23-39 hordeIntro
  320. + "lxxxxxxxxxxxxxxxx" // 40-56 allianceIntro
  321. + "u" // 57 multimap_id
  322. + "x" // 58 unk_float (all 1 but arathi 1.25)
  323. + "u" // 59 parent_map
  324. + "u" // 60 start_x
  325. + "u" // 61 start_y
  326. + "x" // 62 unk
  327. + "u" // 63 addon
  328. + "x" // 64 normalReqText
  329. + "u"; // 65 Max players
  330.  
  331. const char* itemrandomsuffixformat = "uxxxxxxxxxxxxxxxxxxuuuxxuuuxx";//19, 20, 21, 24, 25, 26
  332. const char* chatchannelformat = "iixssssssssssssssslxxxxxxxxxxxxxxxxxx";
  333. Index: src/arcemu-shared/Database/DBCStores.h
  334. ===================================================================
  335. --- src/arcemu-shared/Database/DBCStores.h (revision 3116)
  336. +++ src/arcemu-shared/Database/DBCStores.h (working copy)
  337. @@ -476,18 +476,14 @@
  338. {
  339. uint32 bg_index;
  340. int32 maps[8];
  341. - uint32 instance_type;
  342. - uint32 max_players_per_faction;
  343. - uint32 min_players_per_faction;
  344. - uint32 flag; // EOTS AND SOTA have this set to nine, otherwise it's zero
  345. - uint32 always_true;
  346. - uint32 some_id;
  347. + uint32 type;
  348. + uint32 maxplayersperteam;
  349. + uint32 isused;
  350. + uint32 flags;
  351. int32 zeros[15];
  352. uint32 unk[2];
  353. uint32 always_same; // Always 16712190
  354. - uint32 minimum_payer_level; // ??? Is it, 3.0.8 doesn't match 3.0.3 numbers
  355. - // Do not use for now (NAQUADA)
  356. - //char* name;
  357. + uint32 minimum_player_level; // ??? Is it, 3.0.8 doesn't match 3.0.3 numbers
  358. };
  359.  
  360. struct BankSlotPrice
  361. @@ -694,16 +690,16 @@
  362. uint32 Attributes; //5
  363. uint32 AttributesEx; //6
  364. uint32 AttributesExB; //7
  365. - uint32 AttributesExC; //8 // Flags to
  366. - uint32 AttributesExD; //9 // Flags....
  367. - uint32 AttributesExE; //10 // Flags 2.0.1 unknown one
  368. + uint32 AttributesExC; //8 // Flags to
  369. + uint32 AttributesExD; //9 // Flags....
  370. + uint32 AttributesExE; //10 // Flags 2.0.1 unknown one
  371. uint32 AttributesExF; //11
  372. - //12 UNK
  373. - uint32 RequiredShapeShift; //13 // Flags BitMask for shapeshift spells
  374. - //14 UNK
  375. - uint32 ShapeshiftExclude; //15-> this is wrong // Flags BitMask for which shapeshift forms this spell can NOT be used in.
  376. - //16 UNK
  377. - uint32 Targets; //17 - N / M
  378. + //uint32 AttributesExG, //12 Flags maybe?
  379. + uint32 RequiredShapeShift; //13 // Flags BitMask for shapeshift spells
  380. + //uint32 Unknown2, //14 Float?
  381. + uint32 ShapeshiftExclude; //15-> this is wrong // Flags BitMask for which shapeshift forms this spell can NOT be used in.
  382. + //uint32 Unknown3 //16
  383. + uint32 Targets; //17 - N / M
  384. uint32 TargetCreatureType; //18
  385. uint32 RequiresSpellFocus; //19
  386. uint32 FacingCasterFlags; //20
  387. @@ -717,7 +713,7 @@
  388. uint32 targetAuraSpellNot; //28
  389. uint32 CastingTimeIndex; //29
  390. uint32 RecoveryTime; //30
  391. - uint32 CategoryRecoveryTime; //31 recoverytime
  392. + uint32 CategoryRecoveryTime; //31 recoverytime
  393. uint32 InterruptFlags; //32
  394. uint32 AuraInterruptFlags; //33
  395. uint32 ChannelInterruptFlags; //34
  396. @@ -759,27 +755,27 @@
  397. uint32 EffectChainTarget[3]; //111 - 113
  398. uint32 EffectItemType[3]; //114 - 116 Not sure maybe we should rename it. its the relation to field: SpellGroupType
  399. uint32 EffectMiscValue[3]; //117 - 119
  400. - uint32 EffectMiscValueB[3]; //120 - 122 2.4.3
  401. + uint32 EffectMiscValueB[3]; //120 - 122 2.4.3
  402. uint32 EffectTriggerSpell[3]; //123 - 125
  403. float EffectPointsPerComboPoint[3]; //126 - 128
  404. uint32 EffectSpellClassMask[3][3]; //129 - 137
  405. uint32 SpellVisual; //138
  406. uint32 field114; //139
  407. uint32 spellIconID; //140
  408. - uint32 activeIconID; //141 activeIconID;
  409. + uint32 activeIconID; //141 activeIconID;
  410. uint32 spellPriority; //142
  411. char* Name; //143
  412. -// char* NameAlt[15]; //144-158 not used
  413. -// uint32 NameFlags; //159 not used
  414. +// char* NameAlt[15]; //144-158 not used
  415. +// uint32 NameFlags; //159 not used
  416. char* Rank; //160
  417. -// char* RankAlt[15]; //161-175 not used
  418. -// uint32 RankFlags; //176 not used
  419. +// char* RankAlt[15]; //161-175 not used
  420. +// uint32 RankFlags; //176 not used
  421. char* Description; //177
  422. -// char* DescriptionAlt[15]; //178-192 not used
  423. -// uint32 DescriptionFlags; //193 not used
  424. +// char* DescriptionAlt[15]; //178-192 not used
  425. +// uint32 DescriptionFlags; //193 not used
  426. char* BuffDescription; //194
  427. -// char* BuffDescription[15]; //195-209 not used
  428. -// uint32 buffdescflags; //210 not used
  429. +// char* BuffDescription[15]; //195-209 not used
  430. +// uint32 buffdescflags; //210 not used
  431. uint32 ManaCostPercentage; //211
  432. uint32 StartRecoveryCategory; //212
  433. uint32 StartRecoveryTime; //213
  434. @@ -787,59 +783,67 @@
  435. uint32 SpellFamilyName; //215
  436. uint32 SpellGroupType[3]; //216-218
  437. uint32 MaxTargets; //219
  438. - uint32 Spell_Dmg_Type; //220 dmg_class Integer 0=None, 1=Magic, 2=Melee, 3=Ranged
  439. - uint32 PreventionType; //221 0,1,2 related to Spell_Dmg_Type I think
  440. - int32 StanceBarOrder; //222 related to paladin aura's
  441. - float dmg_multiplier[3]; //223 - 225 if the name is correct I dono
  442. - uint32 MinFactionID; //226 only one spellid:6994 has this value = 369 UNUSED
  443. - uint32 MinReputation; //227 only one spellid:6994 has this value = 4 UNUSED
  444. - uint32 RequiredAuraVision; //228 3 spells 1 or 2
  445. + uint32 Spell_Dmg_Type; //220 dmg_class Integer 0=None, 1=Magic, 2=Melee, 3=Ranged
  446. + uint32 PreventionType; //221 0,1,2 related to Spell_Dmg_Type I think
  447. + int32 StanceBarOrder; //222 related to paladin aura's
  448. + float dmg_multiplier[3]; //223 - 225 if the name is correct I dono
  449. + uint32 MinFactionID; //226 only one spellid:6994 has this value = 369 UNUSED
  450. + uint32 MinReputation; //227 only one spellid:6994 has this value = 4 UNUSED
  451. + uint32 RequiredAuraVision; //228 3 spells 1 or 2
  452. uint32 TotemCategory[2]; //229-230
  453. int32 RequiresAreaId; //231
  454. uint32 School; //232
  455. - uint32 RuneCostID; //233 from 3.0.1
  456. -// uint32 SpellMissileID; //234 from 3.0.1
  457. + uint32 RuneCostID; //233 from 3.0.1
  458. +// uint32 SpellMissileID; //234 from 3.0.1
  459. +// uint32 PowerDisplayId; //235 PowerDisplayId.dbc from 3.1.0
  460. +// uint32 Unknown5[3]; //236 from 3.2.0
  461. +// uint32 spellDescriptionVariableID; //237 from 3.2.0
  462.  
  463. /// CUSTOM: these fields are used for the modifications made in the world.cpp
  464. - uint32 DiminishStatus; //
  465. - uint32 proc_interval; //!!! CUSTOM, <Fill description for variable>
  466. + uint32 DiminishStatus; //!!! CUSTOM, <Fill description for variable>
  467. + uint32 proc_interval; //!!! CUSTOM, <Fill description for variable>
  468. //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
  469. //caster can only cast on 1 target these spells
  470. uint32 BGR_one_buff_from_caster_on_1target; //!!! CUSTOM, <Fill description for variable>
  471. //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
  472. - uint32 BGR_one_buff_on_target; //!!! CUSTOM, these are related to creating a item through a spell
  473. + uint32 BGR_one_buff_on_target; //!!! CUSTOM, these are related to creating a item through a spell
  474. //caster can have only 1 Aura per spell group, ex pal auras
  475. - uint32 BGR_one_buff_from_caster_on_self;//!!! CUSTOM, these are related to creating a item through a spell
  476. -// uint32 buffIndexType; //!!! CUSTOM, <Fill description for variable>
  477. - uint32 c_is_flags; //!!! CUSTOM, store spell checks in a static way : isdamageind,ishealing
  478. -// uint32 buffType; //!!! CUSTOM, these are related to creating a item through a spell
  479. - uint32 RankNumber; //!!! CUSTOM, this protects players from having >1 rank of a spell
  480. - uint32 NameHash; //!!! CUSTOM, related to custom spells, summon spell quest related spells
  481. - uint32 talent_tree; //!!! CUSTOM,
  482. - uint32 in_front_status; //!!! CUSTOM,
  483. - uint32 EffectSpellGroupRelation_high[3]; //!!! this is not contained in client dbc but server must have it
  484. + uint32 BGR_one_buff_from_caster_on_self; //!!! CUSTOM, these are related to creating a item through a spell
  485. +// uint32 buffIndexType; //!!! CUSTOM, <Fill description for variable>
  486. + uint32 c_is_flags; //!!! CUSTOM, store spell checks in a static way : isdamageind,ishealing
  487. +// uint32 buffType; //!!! CUSTOM, these are related to creating a item through a spell
  488. + uint32 RankNumber; //!!! CUSTOM, this protects players from having >1 rank of a spell
  489. + uint32 NameHash; //!!! CUSTOM, related to custom spells, summon spell quest related spells
  490. + uint32 talent_tree; //!!! CUSTOM,
  491. + uint32 in_front_status; //!!! CUSTOM,
  492. + uint32 EffectSpellGroupRelation_high[3]; //!!! this is not contained in client dbc but server must have it
  493. uint32 ThreatForSpell;
  494. float ThreatForSpellCoef;
  495. uint32 ProcOnNameHash[3];
  496. - uint32 spell_coef_flags; //!!! CUSTOM, store flags for spell coefficient calculations
  497. + uint32 spell_coef_flags; //!!! CUSTOM, store flags for spell coefficient calculations
  498.  
  499. - float base_range_or_radius_sqr; //!!! CUSTOM, needed for aoe spells most of the time
  500. + float base_range_or_radius_sqr; //!!! CUSTOM, needed for aoe spells most of the time
  501. // love me or hate me, all "In a cone in front of the caster" spells don't necessarily mean "in front"
  502. float cone_width;
  503. //Spell Coefficient
  504. - float casttime_coef; //!!! CUSTOM, faster spell bonus calculation
  505. - float fixed_dddhcoef; //!!! CUSTOM, fixed DD-DH coefficient for some spells
  506. - float fixed_hotdotcoef; //!!! CUSTOM, fixed HOT-DOT coefficient for some spells
  507. - float Dspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
  508. - float OTspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
  509. - int ai_target_type;
  510. + float Base_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
  511. + float Misc_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
  512. + float AP_coef; //!!! CUSTOM, Additional coef from AP
  513. + float RAP_coef; //!!! CUSTOM, Additional coef from RAP
  514.  
  515. - bool self_cast_only;
  516. - bool apply_on_shapeshift_change;
  517. - bool always_apply;
  518. - bool is_melee_spell; //!!! CUSTOM,
  519. - bool is_ranged_spell; //!!! CUSTOM,
  520. - bool spell_can_crit; //!!! CUSTOM,
  521. + float casttime_coef; //!!! CUSTOM, faster spell bonus calculation
  522. + float fixed_dddhcoef; //!!! CUSTOM, fixed DD-DH coefficient for some spells
  523. + float fixed_hotdotcoef; //!!! CUSTOM, fixed HOT-DOT coefficient for some spells
  524. + float Dspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in DD&DH
  525. + float OTspell_coef_override; //!!! CUSTOM, overrides any spell coefficient calculation and use this value in HOT&DOT
  526. + int ai_target_type; //!!! CUSTOM, <Fill description for variable>
  527. +
  528. + bool self_cast_only; //!!! CUSTOM, <Fill description for variable>
  529. + bool apply_on_shapeshift_change; //!!! CUSTOM, <Fill description for variable>
  530. + bool always_apply; //!!! CUSTOM, <Fill description for variable>
  531. + bool is_melee_spell; //!!! CUSTOM, <Fill description for variable>
  532. + bool is_ranged_spell; //!!! CUSTOM, <Fill description for variable>
  533. + bool spell_can_crit; //!!! CUSTOM, <Fill description for variable>
  534. bool noproc;
  535.  
  536. uint32 SchoolMask; // Custom
  537. Index: src/arcemu-world/AchievementMgr.h
  538. ===================================================================
  539. --- src/arcemu-world/AchievementMgr.h (revision 3116)
  540. +++ src/arcemu-world/AchievementMgr.h (working copy)
  541. @@ -193,8 +193,13 @@
  542. ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE= 112,
  543. ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113,
  544. ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114,
  545. - // 0..114 => 115 criteria types total
  546. - ACHIEVEMENT_CRITERIA_TYPE_TOTAL = 115,
  547. + ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS = 115, // only 1 found in 3.3.0
  548. + ACHIEVEMENT_CRITERIA_TYPE_116 = 116,
  549. + ACHIEVEMENT_CRITERIA_TYPE_117 = 117,
  550. + ACHIEVEMENT_CRITERIA_TYPE_118 = 118,
  551. + ACHIEVEMENT_CRITERIA_TYPE_FINISH_RANDOM_DUNGEON = 119,
  552. + // 0..119 => 120 criteria types total
  553. + ACHIEVEMENT_CRITERIA_TYPE_TOTAL = 120 // 0..114 => 115 criteria types total
  554. };
  555.  
  556. /**
  557. Index: src/arcemu-world/BattlegroundMgr.cpp
  558. ===================================================================
  559. --- src/arcemu-world/BattlegroundMgr.cpp (revision 3116)
  560. +++ src/arcemu-world/BattlegroundMgr.cpp (working copy)
  561. @@ -814,13 +814,13 @@
  562. switch(dbcIndex)
  563. {
  564. case BATTLEGROUND_ALTERAC_VALLEY:
  565. - return Config.MainConfig.GetIntDefault("Battleground", "AV_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  566. + return Config.MainConfig.GetIntDefault("Battleground", "AV_MIN", 10);
  567. case BATTLEGROUND_WARSONG_GULCH:
  568. - return Config.MainConfig.GetIntDefault("Battleground", "WS_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  569. + return Config.MainConfig.GetIntDefault("Battleground", "WS_MIN", 3);
  570. case BATTLEGROUND_ARATHI_BASIN:
  571. - return Config.MainConfig.GetIntDefault("Battleground", "AB_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  572. + return Config.MainConfig.GetIntDefault("Battleground", "AB_MIN", 3);
  573. case BATTLEGROUND_EYE_OF_THE_STORM:
  574. - return Config.MainConfig.GetIntDefault("Battleground", "EOS_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  575. + return Config.MainConfig.GetIntDefault("Battleground", "EOS_MIN", 3);
  576. case BATTLEGROUND_ARENA_2V2:
  577. return 2;
  578. case BATTLEGROUND_ARENA_3V3:
  579. @@ -828,9 +828,9 @@
  580. case BATTLEGROUND_ARENA_5V5:
  581. return 5;
  582. case BATTLEGROUND_STRAND_OF_THE_ANCIENT:
  583. - return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MIN", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  584. + return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MIN", 5);
  585. default:
  586. - return dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction;
  587. + return 3;
  588. }
  589. }
  590.  
  591. @@ -840,13 +840,13 @@
  592. switch(dbcIndex)
  593. {
  594. case BATTLEGROUND_ALTERAC_VALLEY:
  595. - return Config.MainConfig.GetIntDefault("Battleground", "AV_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  596. + return 40;
  597. case BATTLEGROUND_WARSONG_GULCH:
  598. - return Config.MainConfig.GetIntDefault("Battleground", "WS_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  599. + return 10;
  600. case BATTLEGROUND_ARATHI_BASIN:
  601. - return Config.MainConfig.GetIntDefault("Battleground", "AB_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  602. + return 10;
  603. case BATTLEGROUND_EYE_OF_THE_STORM:
  604. - return Config.MainConfig.GetIntDefault("Battleground", "EOS_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  605. + return 20;
  606. case BATTLEGROUND_ARENA_2V2:
  607. return 2;
  608. case BATTLEGROUND_ARENA_3V3:
  609. @@ -854,9 +854,9 @@
  610. case BATTLEGROUND_ARENA_5V5:
  611. return 5;
  612. case BATTLEGROUND_STRAND_OF_THE_ANCIENT:
  613. - return Config.MainConfig.GetIntDefault("Battleground", "SOTA_MAX", dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction);
  614. + return 20;
  615. default:
  616. - return dbcBattlemasterListStore.LookupEntry(dbcIndex)->min_players_per_faction;
  617. + return 9000;
  618. }
  619. }
  620.  
  621. @@ -1450,6 +1450,8 @@
  622. data << uint8(0xC);
  623. data << uint32(6);
  624. data << uint16(0x1F90);
  625. + data << uint8(0); // 3.3.0
  626. + data << uint8(0); // 3.3.0
  627. data << uint32(11);
  628. data << uint8(RatedMatch); // 1 = rated match
  629. }
  630. @@ -1458,6 +1460,8 @@
  631. data << uint32(0);
  632. data << uint8(0) << uint8(2);
  633. data << Type;
  634. + data << uint8(0); // 3.3.0
  635. + data << uint8(0); // 3.3.0
  636. data << uint16(0x1F90);
  637. data << InstanceID;
  638. data << uint8(0);
  639. Index: src/arcemu-world/CharacterHandler.cpp
  640. ===================================================================
  641. --- src/arcemu-world/CharacterHandler.cpp (revision 3116)
  642. +++ src/arcemu-world/CharacterHandler.cpp (working copy)
  643. @@ -946,17 +946,17 @@
  644.  
  645.  
  646. #ifdef WIN32
  647. - _player->BroadcastMessage("Server: %sArcEmu %s - %s-Windows-%s", MSG_COLOR_WHITE, BUILD_TAG, CONFIG, ARCH);
  648. + _player->BroadcastMessage("Server: %sArcEmu 3.3 Patch Support By Terrorblade %s - %s-Windows-%s", MSG_COLOR_WHITE, BUILD_TAG, CONFIG, ARCH);
  649. #else
  650. - _player->BroadcastMessage("Server: %sArcEmu %s - %s-%s", MSG_COLOR_WHITE, BUILD_TAG, PLATFORM_TEXT, ARCH);
  651. + _player->BroadcastMessage("Server: %sArcEmu 3.3 Patch Support By Terrorblade %s - %s-%s", MSG_COLOR_WHITE, BUILD_TAG, PLATFORM_TEXT, ARCH);
  652. #endif
  653.  
  654. // Revision
  655. - _player->BroadcastMessage("Revision: %s%u", MSG_COLOR_CYAN, BUILD_REVISION);
  656. + _player->BroadcastMessage("Revision: %s%u 3.3 Patch revison 12", MSG_COLOR_CYAN, BUILD_REVISION);
  657. // Bugs
  658. - _player->BroadcastMessage("Bugs: %s%s", MSG_COLOR_SEXHOTPINK, BUGTRACKER);
  659. + //_player->BroadcastMessage("Bugs: %s%s", MSG_COLOR_SEXHOTPINK, BUGTRACKER);
  660. // Recruiting message
  661. - _player->BroadcastMessage(RECRUITING);
  662. + //_player->BroadcastMessage(RECRUITING);
  663. // Shows Online players, and connection peak
  664. _player->BroadcastMessage("Online Players: %s%u |rPeak: %s%u|r Accepted Connections: %s%u",
  665. MSG_COLOR_SEXGREEN, sWorld.GetSessionCount(), MSG_COLOR_SEXBLUE, sWorld.PeakSessionCount, MSG_COLOR_SEXBLUE, sWorld.mAcceptedConnections);
  666. Index: src/arcemu-world/Chat.h
  667. ===================================================================
  668. --- src/arcemu-world/Chat.h (revision 3116)
  669. +++ src/arcemu-world/Chat.h (working copy)
  670. @@ -80,6 +80,7 @@
  671. CHAT_MSG_RESTRICTED = 46,
  672. CHAT_MSG_ACHIEVEMENT = 48,
  673. CHAT_MSG_GUILD_ACHIEVEMENT = 49,
  674. + CHAT_MSG_PARTY_LEADER = 51,
  675. };
  676.  
  677. enum Languages
  678. Index: src/arcemu-world/ChatHandler.cpp
  679. ===================================================================
  680. --- src/arcemu-world/ChatHandler.cpp (revision 3116)
  681. +++ src/arcemu-world/ChatHandler.cpp (working copy)
  682. @@ -130,6 +130,7 @@
  683. case CHAT_MSG_SAY:
  684. case CHAT_MSG_EMOTE:
  685. case CHAT_MSG_PARTY:
  686. + case CHAT_MSG_PARTY_LEADER:
  687. case CHAT_MSG_RAID:
  688. case CHAT_MSG_RAID_LEADER:
  689. case CHAT_MSG_RAID_WARNING:
  690. @@ -240,6 +241,7 @@
  691.  
  692. } break;
  693. case CHAT_MSG_PARTY:
  694. + case CHAT_MSG_PARTY_LEADER:
  695. case CHAT_MSG_RAID:
  696. case CHAT_MSG_RAID_LEADER:
  697. case CHAT_MSG_RAID_WARNING:
  698. Index: src/arcemu-world/Group.cpp
  699. ===================================================================
  700. --- src/arcemu-world/Group.cpp (revision 3116)
  701. +++ src/arcemu-world/Group.cpp (working copy)
  702. @@ -295,6 +295,7 @@
  703. data << uint8(0); // unk2
  704. //data << uint64(0); // unk3
  705. data << uint64(0x500000000004BC0CULL);
  706. + data << uint32(0); // 3.3 - increments every time a group list update is being sent to client
  707. data << uint32(m_MemberCount-1); // we don't include self
  708.  
  709. for( j = 0; j < m_SubGroupCount; j++ )
  710. @@ -312,7 +313,8 @@
  711. if( (*itr2) == NULL )
  712. continue;
  713.  
  714. - data << (*itr2)->name << (*itr2)->guid << uint32(0); // highguid
  715. + data << (*itr2)->name;
  716. + data << (*itr2)->guid << uint32(0); // highguid
  717.  
  718. if( (*itr2)->m_loggedInPlayer != NULL )
  719. data << uint8( 1 );
  720. @@ -331,6 +333,7 @@
  721. flags |= 4;
  722.  
  723. data << flags;
  724. + data << uint8(0); // 3.3 - may have some use
  725. }
  726. }
  727. }
  728. @@ -350,6 +353,7 @@
  729. data << uint8( m_LootThreshold );
  730. data << uint8( m_difficulty );
  731. data << uint8( m_raiddifficulty );
  732. + data << uint8( 0 ); // 3.3 - unk
  733.  
  734. if( !(*itr1)->m_loggedInPlayer->IsInWorld() )
  735. (*itr1)->m_loggedInPlayer->CopyAndSendDelayedPacket( &data );
  736. @@ -749,10 +753,10 @@
  737.  
  738. void Group::SendNullUpdate( Player *pPlayer )
  739. {
  740. - // this packet is 24 bytes long. // AS OF 2.1.0
  741. - uint8 buffer[24];
  742. - memset(buffer, 0, 24);
  743. - pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 24, buffer );
  744. + // this packet is 28 bytes long. // AS OF 3.3
  745. + uint8 buffer[28];
  746. + memset(buffer, 0, 28);
  747. + pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 28, buffer );
  748. }
  749.  
  750. // player is object class because its called from unit class
  751. Index: src/arcemu-world/ItemPrototype.h
  752. ===================================================================
  753. --- src/arcemu-world/ItemPrototype.h (revision 3116)
  754. +++ src/arcemu-world/ItemPrototype.h (working copy)
  755. @@ -318,9 +318,9 @@
  756. MANA_REGENERATION = 43,
  757. ARMOR_PENETRATION_RATING = 44,
  758. SPELL_POWER = 45,
  759. - HEALTH_REGEN = 46,
  760. - SPELL_PENETRATION = 47,
  761. - BLOCK_VALUE = 48,
  762. + HEALTH_REGEN = 46,
  763. + SPELL_PENETRATION = 47,
  764. + BLOCK_VALUE = 48,
  765. };
  766.  
  767. enum ITEM_DAMAGE_TYPE
  768. @@ -340,6 +340,7 @@
  769. ON_EQUIP = 1,
  770. CHANCE_ON_HIT = 2,
  771. SOULSTONE = 4,
  772. + NO_COOLDOWN = 5,
  773. LEARNING = 6,
  774. };
  775.  
  776. @@ -410,6 +411,16 @@
  777.  
  778. enum Item_Subclass
  779. {
  780. + // Consumable
  781. + ITEM_SUBCLASS_POTION = 0,
  782. + ITEM_SUBCLASS_ELIXIR = 1,
  783. + ITEM_SUBCLASS_FLASK = 2,
  784. + ITEM_SUBCLASS_SCROLL = 3,
  785. + ITEM_SUBCLASS_FOOD = 4,
  786. + ITEM_SUBCLASS_ITEM_ENHANCEMENT = 5,
  787. + ITEM_SUBCLASS_BANDAGE = 6,
  788. + ITEM_SUBCLASS_CONSUMABLE_OTHER = 7,
  789. +
  790. // Weapon
  791. ITEM_SUBCLASS_WEAPON_AXE = 0,
  792. ITEM_SUBCLASS_WEAPON_TWOHAND_AXE = 1,
  793. Index: src/arcemu-world/Level0.cpp
  794. ===================================================================
  795. --- src/arcemu-world/Level0.cpp (revision 3116)
  796. +++ src/arcemu-world/Level0.cpp (working copy)
  797. @@ -278,7 +278,7 @@
  798. GreenSystemMessage(m_session, "Server Revision: |r%sArcEmu r%u/%s-%s-%s %s(www.arcemu.org)", MSG_COLOR_WHITE,
  799. BUILD_REVISION, CONFIG, PLATFORM_TEXT, ARCH, MSG_COLOR_LIGHTBLUE);
  800. GreenSystemMessage(m_session, "Server Uptime: |r%s", sWorld.GetUptimeString().c_str());
  801. - GreenSystemMessage(m_session, "Current Players: |r%d (%d GMs)", count, gm);
  802. + GreenSystemMessage(m_session, "Current Players: |r%d (%d GMs) (%d Peak)", count, gm,(int)sWorld.PeakSessionCount);
  803. GreenSystemMessage(m_session, "Active Thread Count: |r%u", ThreadPool.GetActiveThreadCount());
  804. GreenSystemMessage(m_session, "Free Thread Count: |r%u", ThreadPool.GetFreeThreadCount());
  805. GreenSystemMessage(m_session, "Average Latency: |r%.3fms", (float)((float)avg / (float)count));
  806. Index: src/arcemu-world/LfgMgr.cpp
  807. ===================================================================
  808. --- src/arcemu-world/LfgMgr.cpp (revision 3116)
  809. +++ src/arcemu-world/LfgMgr.cpp (working copy)
  810. @@ -86,7 +86,7 @@
  811. return false;
  812. }
  813.  
  814. -void LfgMgr::SetPlayerInLFGqueue(Player *pl,uint32 LfgDungeonId)
  815. +void LfgMgr::SetPlayerInLFGqueue(Player *pl, uint32 LfgDungeonId)
  816. {
  817. if( pl == NULL )
  818. return;
  819. Index: src/arcemu-world/LfgMgr.h
  820. ===================================================================
  821. --- src/arcemu-world/LfgMgr.h (revision 3116)
  822. +++ src/arcemu-world/LfgMgr.h (working copy)
  823. @@ -32,8 +32,8 @@
  824. LFG_DAILY_HEROIC_DUNGEON = 9,
  825. };
  826.  
  827. -#define MAX_DUNGEONS 257+1 // check max entry's +1 on lfgdungeons.dbc
  828. -#define MAX_LFG_QUEUE_ID 3
  829. +#define MAX_DUNGEONS 280+1 // check max entry's +1 on lfgdungeons.dbc
  830. +#define MAX_LFG_QUEUE_ID 2
  831. #define LFG_MATCH_TIMEOUT 30 // in seconds
  832.  
  833. class LfgMatch;
  834. @@ -75,7 +75,7 @@
  835. uint32 DungeonId;
  836. Group * pGroup;
  837.  
  838. - LfgMatch(uint32 did) : DungeonId(did),pGroup(NULL) { }
  839. + LfgMatch(uint32 did) : DungeonId(did), pGroup(NULL) { }
  840. };
  841.  
  842. extern uint32 LfgDungeonTypes[MAX_DUNGEONS];
  843. Index: src/arcemu-world/LootMgr.cpp
  844. ===================================================================
  845. --- src/arcemu-world/LootMgr.cpp (revision 3116)
  846. +++ src/arcemu-world/LootMgr.cpp (working copy)
  847. @@ -650,7 +650,7 @@
  848. #define NEED 1
  849. #define GREED 2
  850.  
  851. -LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 itemunk1, uint32 itemunk2, MapMgr * mgr) : EventableObject()
  852. +LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 randomsuffixid, uint32 randompropertyid, MapMgr * mgr) : EventableObject()
  853. {
  854. _mgr = mgr;
  855. sEventMgr.AddEvent(this, &LootRoll::Finalize, EVENT_LOOT_ROLL_FINALIZE, 60000, 1, 0);
  856. @@ -658,8 +658,8 @@
  857. _guid = guid;
  858. _slotid = slotid;
  859. _itemid = itemid;
  860. - _itemunk1 = itemunk1;
  861. - _itemunk2 = itemunk2;
  862. + _randomsuffixid = randomsuffixid;
  863. + _randompropertyid = randompropertyid;
  864. _remaining = groupcount;
  865. }
  866.  
  867. @@ -710,7 +710,7 @@
  868. /*
  869. data.Initialize(SMSG_LOOT_ROLL);
  870. data << _guid << _slotid << itr->first;
  871. - data << _itemid << _itemunk1 << _itemunk2;
  872. + data << _itemid << _randomsuffixid << _randompropertyid;
  873. data << uint8(itr->second) << uint8(NEED);
  874. if(gplr && gplr->GetGroup())
  875. gplr->GetGroup()->SendPacketToAll(&data);
  876. @@ -730,7 +730,7 @@
  877. /*
  878. data.Initialize(SMSG_LOOT_ROLL);
  879. data << _guid << _slotid << itr->first;
  880. - data << _itemid << _itemunk1 << _itemunk2;
  881. + data << _itemid << _randomsuffixid << _randompropertyid;
  882. data << uint8(itr->second) << uint8(GREED);
  883. if(gplr && gplr->GetGroup())
  884. gplr->GetGroup()->SendPacketToAll(&data);
  885. @@ -778,7 +778,7 @@
  886. {
  887. /* all passed */
  888. data.Initialize(SMSG_LOOT_ALL_PASSED);
  889. - data << _guid << _groupcount << _itemid << _itemunk1 << _itemunk2;
  890. + data << _guid << _groupcount << _itemid << _randomsuffixid << _randompropertyid;
  891. set<uint32>::iterator pitr = m_passRolls.begin();
  892. while(_player == NULL && pitr != m_passRolls.end())
  893. _player = _mgr->GetPlayer( (*(pitr++)) );
  894. @@ -799,7 +799,7 @@
  895.  
  896. pLoot->items.at(_slotid).roll = 0;
  897. data.Initialize(SMSG_LOOT_ROLL_WON);
  898. - data << _guid << _slotid << _itemid << _itemunk1 << _itemunk2;
  899. + data << _guid << _slotid << _itemid << _randomsuffixid << _randompropertyid;
  900. data << _player->GetGUID() << uint8(highest) << uint8(hightype);
  901. if(_player->InGroup())
  902. _player->GetGroup()->SendPacketToAll(&data);
  903. @@ -891,9 +891,10 @@
  904. WorldPacket data(34);
  905. data.SetOpcode(SMSG_LOOT_ROLL);
  906. data << _guid << _slotid << player->GetGUID();
  907. - data << _itemid << _itemunk1 << _itemunk2;
  908. + data << _itemid << _randomsuffixid << _randompropertyid;
  909.  
  910. - if(choice == NEED) {
  911. + if(choice == NEED)
  912. + {
  913. m_NeedRolls.insert( std::make_pair(player->GetLowGUID(), roll) );
  914. data << uint8(roll) << uint8(NEED);
  915. }
  916. @@ -908,6 +909,8 @@
  917. m_passRolls.insert( player->GetLowGUID() );
  918. data << uint8(128) << uint8(128);
  919. }
  920. +
  921. + data << uint8( 0 ); // Requires research - possibly related to disenchanting of loot
  922.  
  923. if(player->InGroup())
  924. player->GetGroup()->SendPacketToAll(&data);
  925. Index: src/arcemu-world/LootMgr.h
  926. ===================================================================
  927. --- src/arcemu-world/LootMgr.h (revision 3116)
  928. +++ src/arcemu-world/LootMgr.h (working copy)
  929. @@ -49,8 +49,8 @@
  930. uint32 _groupcount;
  931. uint32 _slotid;
  932. uint32 _itemid;
  933. - uint32 _itemunk1;
  934. - uint32 _itemunk2;
  935. + uint32 _randomsuffixid;
  936. + uint32 _randompropertyid;
  937. uint32 _remaining;
  938. uint64 _guid;
  939. MapMgr * _mgr;
  940. Index: src/arcemu-world/MailSystem.cpp
  941. ===================================================================
  942. --- src/arcemu-world/MailSystem.cpp (revision 3116)
  943. +++ src/arcemu-world/MailSystem.cpp (working copy)
  944. @@ -418,9 +418,9 @@
  945. // mark the message as read
  946. message->read_flag = 1;
  947.  
  948. - // mail now has a 3 day expiry time
  949. + // mail now has a 30 day expiry time
  950. if(!sMailSystem.MailOption(MAIL_FLAG_NO_EXPIRY))
  951. - message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 3);
  952. + message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 30);
  953.  
  954. // update it in sql
  955. CharacterDatabase.WaitExecute("UPDATE mailbox SET read_flag = 1, expiry_time = %u WHERE message_id = %u", message->message_id, message->expire_time);
  956. Index: src/arcemu-world/Master.cpp
  957. ===================================================================
  958. --- src/arcemu-world/Master.cpp (revision 3116)
  959. +++ src/arcemu-world/Master.cpp (working copy)
  960. @@ -20,7 +20,7 @@
  961.  
  962. #include "StdAfx.h"
  963.  
  964. -#define BANNER "ArcEmu %s r%u/%s-%s-%s :: World Server"
  965. +#define BANNER "ArcEmu 3.3 Patch Support By Terrorblade %s r%u/%s-%s-%s :: World Server"
  966.  
  967. #ifndef WIN32
  968. #include <sched.h>
  969. @@ -194,18 +194,16 @@
  970. printf(" Website: http://www.ArcEmu.org \n");
  971. printf(" Forums: http://www.ArcEmu.org/forums/ \n");
  972. printf(" Credits: http://www.ArcEmu.org/credits \n");
  973. - printf(" SVN: http://arcemu.info/svn/ \n");
  974. + printf(" SVN: svn://arcemu.info/svn/ \n");
  975. printf(" Have fun! \n");
  976. Log.Line();
  977. -#ifdef REPACK
  978. Log.Color(TRED);
  979. printf("Warning: Using repacks is potentially dangerous. You should always compile\n");
  980. printf("from the source yourself at www.arcemu.org.\n");
  981. printf("By using this repack, you agree to not visit the arcemu website and ask\nfor support.\n");
  982. - printf("For all support, you should visit the repacker's website at %s\n", REPACK_WEBSITE);
  983. + printf("For all support, you should visit the repacker's thread from the forum you got it from. \n");
  984. Log.Color(TNORMAL);
  985. Log.Line();
  986. -#endif
  987. Log.log_level = 3;
  988.  
  989. if(do_version)
  990. Index: src/arcemu-world/Master.h
  991. ===================================================================
  992. --- src/arcemu-world/Master.h (revision 3116)
  993. +++ src/arcemu-world/Master.h (working copy)
  994. @@ -28,7 +28,7 @@
  995. #include "MainServerDefines.h"
  996.  
  997. #ifndef _VERSION
  998. -# define _VERSION "3.2.0"
  999. +# define _VERSION "3.3.0"
  1000. #endif
  1001.  
  1002. #if PLATFORM == PLATFORM_WIN32
  1003. Index: src/arcemu-world/NPCHandler.cpp
  1004. ===================================================================
  1005. --- src/arcemu-world/NPCHandler.cpp (revision 3116)
  1006. +++ src/arcemu-world/NPCHandler.cpp (working copy)
  1007. @@ -22,22 +22,22 @@
  1008.  
  1009. trainertype trainer_types[TRAINER_TYPE_MAX] =
  1010. {
  1011. -{ "Warrior", 0 },
  1012. -{ "Paladin", 0 },
  1013. -{ "Rogue" , 0 },
  1014. -{ "Warlock", 0 },
  1015. -{ "Mage", 0 },
  1016. +{ "Warrior", 0 },
  1017. +{ "Paladin", 0 },
  1018. +{ "Rogue" , 0 },
  1019. +{ "Warlock", 0 },
  1020. +{ "Mage", 0 },
  1021. { "Shaman", 0 },
  1022. { "Priest", 0 },
  1023. { "Hunter", 0 },
  1024. -{ "Druid", 0 },
  1025. -{ "Leatherwork", 2 },
  1026. -{ "Skinning", 2 },
  1027. -{ "Fishing", 2 },
  1028. -{ "First Aid", 2 },
  1029. -{ "Physician", 2 },
  1030. -{ "Engineer", 2 },
  1031. -{ "Weapon Master", 0 },
  1032. +{ "Druid", 0 },
  1033. +{ "Leatherwork", 2 },
  1034. +{ "Skinning", 2 },
  1035. +{ "Fishing", 2 },
  1036. +{ "First Aid", 2 },
  1037. +{ "Physician", 2 },
  1038. +{ "Engineer", 2 },
  1039. +{ "Weapon Master", 0 },
  1040. };
  1041.  
  1042. bool CanTrainAt(Player * plr, Trainer * trn)
  1043. Index: src/arcemu-world/Opcodes.cpp
  1044. ===================================================================
  1045. --- src/arcemu-world/Opcodes.cpp (revision 3116)
  1046. +++ src/arcemu-world/Opcodes.cpp (working copy)
  1047. @@ -1117,8 +1117,8 @@
  1048. {SMSG_CALENDAR_EVENT_UPDATED_ALERT, "SMSG_CALENDAR_EVENT_UPDATED_ALERT"},
  1049. {SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT, "SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT"},
  1050. {CMSG_CALENDAR_COMPLAIN, "CMSG_CALENDAR_COMPLAIN"},
  1051. - {SMSG_CALENDAR_EVENT_RESERVED_2, "SMSG_CALENDAR_EVENT_RESERVED_2"},
  1052. - {SMSG_CALENDAR_EVENT_RESERVED_3, "SMSG_CALENDAR_EVENT_RESERVED_3"},
  1053. + {CMSG_CALENDAR_GET_NUM_PENDING, "CMSG_CALENDAR_GET_NUM_PENDING"},
  1054. + {SMSG_CALENDAR_SEND_NUM_PENDING, "SMSG_CALENDAR_SEND_NUM_PENDING"},
  1055. {CMSG_SAVE_DANCE, "CMSG_SAVE_DANCE"},
  1056. {SMSG_NOTIFY_DANCE, "SMSG_NOTIFY_DANCE"},
  1057. {CMSG_PLAY_DANCE, "CMSG_PLAY_DANCE"},
  1058. @@ -1206,14 +1206,53 @@
  1059. {SMSG_CONTROL_VECHICLE, "SMSG_CONTROL_VECHICLE"},
  1060. {SMSG_CRITERIA_DELETED, "SMSG_CRITERIA_DELETED"},
  1061. {SMSG_ACHIEVEMENT_DELETED, "SMSG_ACHIEVEMENT_DELETED"},
  1062. - {UMSG_UNKNOWN_1184, "UMSG_UNKNOWN_1184"},
  1063. - {UMSG_UNKNOWN_1185, "UMSG_UNKNOWN_1185"},
  1064. - {UMSG_UNKNOWN_1186, "UMSG_UNKNOWN_1186"},
  1065. - {UMSG_UNKNOWN_1187, "UMSG_UNKNOWN_1187"},
  1066. + {CMSG_SERVER_INFO_QUERY, "CMSG_SERVER_INFO_QUERY"},
  1067. + {SMSG_SERVER_INFO_RESPONSE, "SMSG_SERVER_INFO_RESPONSE"},
  1068. + {CMSG_CHECK_LOGIN_CRITERIA, "CMSG_CHECK_LOGIN_CRITERIA"},
  1069. + {SMSG_SERVER_BUCK_DATA_START, "SMSG_SERVER_BUCK_DATA_START"},
  1070. +
  1071. + {CMSG_QUERY_VEHICLE_STATUS, "CMSG_QUERY_VEHICLE_STATUS"},
  1072. + {UMSG_UNKNOWN_1189, "UMSG_UNKNOWN_1189"},
  1073. + {SMSG_UNKNOWN_1190, "SMSG_UNKNOWN_1190"},
  1074. + {SMSG_UNKNOWN_1191, "SMSG_UNKNOWN_1191"},
  1075. + {CMSG_UNKNOWN_1192, "CMSG_UNKNOWN_1192"},
  1076. + {CMSG_EJECT_PASSENGER, "CMSG_EJECT_PASSENGER"},
  1077. + {SMSG_PET_GUIDS, "SMSG_PET_GUIDS"},
  1078. + {SMSG_CLIENTCACHE_VERSION, "SMSG_CLIENTCACHE_VERSION"},
  1079. + {UMSG_UNKNOWN_1196, "UMSG_UNKNOWN_1196"},
  1080. + {UMSG_UNKNOWN_1197, "UMSG_UNKNOWN_1197"},
  1081. + {UMSG_UNKNOWN_1198, "UMSG_UNKNOWN_1198"},
  1082. + {UMSG_UNKNOWN_1199, "UMSG_UNKNOWN_1199"},
  1083. + {UMSG_UNKNOWN_1200, "UMSG_UNKNOWN_1200"},
  1084. + {UMSG_UNKNOWN_1201, "UMSG_UNKNOWN_1201"},
  1085. + {SMSG_ITEMREFUNDINFO, "SMSG_UNKNOWN_1202"},
  1086. + {CMSG_ITEMREFUNDINFO, "CMSG_UNKNOWN_1203"},
  1087. + {CMSG_ITEMREFUNDREQUEST, "CMSG_UNKNOWN_1204"},
  1088. + {SMSG_ITEMREFUNDREQUEST, "SMSG_UNKNOWN_1205"},
  1089. + {CMSG_UNKNOWN_1206, "CMSG_UNKNOWN_1206"},
  1090. + {SMSG_UNKNOWN_1207, "CMSG_UNKNOWN_1180"},
  1091. + {CMSG_LFG_SET_ROLES, "CMSG_LFG_SET_ROLES"},
  1092. + {UMSG_UNKNOWN_1209, "UMSG_UNKNOWN_1209"},
  1093. + {CMSG_UNKNOWN_1210, "CMSG_UNKNOWN_1210"},
  1094. + {SMSG_UNKNOWN_1211, "SMSG_UNKNOWN_1211"},
  1095. + {SMSG_EQUIPMENT_SET_LIST, "SMSG_EQUIPMENT_SET_LIST"},
  1096. + {CMSG_EQUIPMENT_SET_SAVE, "CMSG_EQUIPMENT_SET_SAVE"},
  1097. + {CMSG_UNKNOWN_1214, "CMSG_UNKNOWN_1214"},
  1098. + {SMSG_UNKNOWN_1215, "SMSG_UNKNOWN_1215"},
  1099. + {SMSG_TALENTS_INFO, "SMSG_TALENTS_INFO"},
  1100. + {CMSG_LEARN_TALENTS_MULTIPLE, "CMSG_LEARN_TALENTS_MULTIPLE"},
  1101. + {CMSG_LEARN_PREVIEW_TALENTS_PET, "CMSG_LEARN_PREVIEW_TALENTS_PET"},
  1102. + {UMSG_UNKNOWN_1219, "UMSG_UNKNOWN_1219"},
  1103. + {UMSG_UNKNOWN_1220, "UMSG_UNKNOWN_1220"},
  1104. + {UMSG_UNKNOWN_1221, "UMSG_UNKNOWN_1221"},
  1105. + {UMSG_UNKNOWN_1222, "UMSG_UNKNOWN_1222"},
  1106. + {SMSG_UNKNOWN_1223, "SMSG_UNKNOWN_1223"},
  1107. + {SMSG_UNKNOWN_1224, "SMSG_UNKNOWN_1224"},
  1108. + {UMSG_UNKNOWN_1225, "UMSG_UNKNOWN_1225"},
  1109. + {UMSG_UNKNOWN_1226, "UMSG_UNKNOWN_1226"},
  1110. + {CMSG_EQUIPMENT_SET_USE, "CMSG_EQUIPMENT_SET_USE"},
  1111. + {SMSG_EQUIPMENT_SET_USE_RESULT, "SMSG_EQUIPMENT_SET_USE_RESULT"},
  1112. {NUM_MSG_TYPES, "NUM_MSG_TYPES"},
  1113. - {CMSG_LFG_SET_ROLES, "CMSG_LFG_SET_ROLES"},
  1114. - {SMSG_EQUIPMENT_SET_LIST, "SMSG_EQUIPMENT_SET_LIST"},
  1115. - {SMSG_TALENTS_INFO, "SMSG_TALENTS_INFO"},
  1116. {CMSG_LEARN_TALENTS_MULTIPLE, "CMSG_LEARN_TALENTS_MULTIPLE"},
  1117. {MSG_SET_RAID_DIFFICULTY, "MSG_SET_RAID_DIFFICULTY"},
  1118. {CMSG_WORLD_STATE_UI_TIMER_UPDATE, "CMSG_WORLD_STATE_UI_TIMER_UPDATE"},
  1119. Index: src/arcemu-world/Opcodes.h
  1120. ===================================================================
  1121. --- src/arcemu-world/Opcodes.h (revision 3116)
  1122. +++ src/arcemu-world/Opcodes.h (working copy)
  1123. @@ -741,7 +741,7 @@
  1124. SMSG_CHAR_RENAME = 0x2C8,
  1125. CMSG_MOVE_SPLINE_DONE = 0x2C9,
  1126. CMSG_MOVE_FALL_RESET = 0x2CA,
  1127. - SMSG_UPDATE_LAST_INSTANCE_CREATED = 0x2CB,
  1128. + SMSG_UPDATE_LAST_INSTANCE_CREATED = 0x2CB,
  1129. SMSG_RAID_INSTANCE_INFO = 0x2CC,
  1130. CMSG_REQUEST_RAID_INFO = 0x2CD,
  1131. CMSG_MOVE_TIME_SKIPPED = 0x2CE,
  1132. @@ -1121,8 +1121,8 @@
  1133. SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x444,
  1134. SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT = 0x445,
  1135. CMSG_CALENDAR_COMPLAIN = 0x446,
  1136. - SMSG_CALENDAR_EVENT_RESERVED_2 = 0x447,
  1137. - SMSG_CALENDAR_EVENT_RESERVED_3 = 0x448,
  1138. + CMSG_CALENDAR_GET_NUM_PENDING = 0x447,
  1139. + SMSG_CALENDAR_SEND_NUM_PENDING = 0x448,
  1140. CMSG_SAVE_DANCE = 0x449,
  1141. SMSG_NOTIFY_DANCE = 0x44A,
  1142. CMSG_PLAY_DANCE = 0x44B,
  1143. @@ -1210,19 +1210,51 @@
  1144. SMSG_CONTROL_VECHICLE = 0x49D, // empty
  1145. SMSG_CRITERIA_DELETED = 0x49E, // uint32
  1146. SMSG_ACHIEVEMENT_DELETED = 0x49F, // uint32
  1147. - UMSG_UNKNOWN_1184 = 0x4A0, // not found in client
  1148. - UMSG_UNKNOWN_1185 = 0x4A1,
  1149. - UMSG_UNKNOWN_1186 = 0x4A2,
  1150. - UMSG_UNKNOWN_1187 = 0x4A3,
  1151. -// NUM_MSG_TYPES = 0x4A4,
  1152. - SMSG_ITEMREFUNDINFO = 0x4B2,
  1153. - CMSG_ITEMREFUNDINFO = 0x4B3,
  1154. - CMSG_ITEMREFUNDREQUEST = 0x4B4,
  1155. - SMSG_ITEMREFUNDREQUEST = 0x4B5,
  1156. + CMSG_SERVER_INFO_QUERY = 0x4A0, // not found
  1157. + SMSG_SERVER_INFO_RESPONSE = 0x4A1, // not found
  1158. + CMSG_CHECK_LOGIN_CRITERIA = 0x4A2, // not found
  1159. + SMSG_SERVER_BUCK_DATA_START = 0x4A3, // not found
  1160. + CMSG_QUERY_VEHICLE_STATUS = 0x4A4, // not found
  1161. + UMSG_UNKNOWN_1189 = 0x4A5, // not found, old SMSG_PET_GUIDS
  1162. + SMSG_UNKNOWN_1190 = 0x4A6, // smsg unk, old SMSG_CLIENTCACHE_VERSION
  1163. + SMSG_UNKNOWN_1191 = 0x4A7, // smsg guid+uint32 (vehicle)
  1164. + CMSG_UNKNOWN_1192 = 0x4A8, // cmsg uint64
  1165. + CMSG_EJECT_PASSENGER = 0x4A9, // cmsg uint64
  1166. + SMSG_PET_GUIDS = 0x4AA, // shifted+5
  1167. + SMSG_CLIENTCACHE_VERSION = 0x4AB, // shifted+5
  1168. + UMSG_UNKNOWN_1196 = 0x4AC, // not found
  1169. + UMSG_UNKNOWN_1197 = 0x4AD, // not found
  1170. + UMSG_UNKNOWN_1198 = 0x4AE, // not found
  1171. + UMSG_UNKNOWN_1199 = 0x4AF, // not found
  1172. + UMSG_UNKNOWN_1200 = 0x4B0, // not found
  1173. + UMSG_UNKNOWN_1201 = 0x4B1, // not found
  1174. + SMSG_ITEMREFUNDINFO = 0x4B2, // refund something
  1175. + CMSG_ITEMREFUNDINFO = 0x4B3, // refund request?
  1176. + CMSG_ITEMREFUNDREQUEST = 0x4B4, // lua: ContainerRefundItemPurchase
  1177. + SMSG_ITEMREFUNDREQUEST = 0x4B5, // refund something
  1178. + CMSG_UNKNOWN_1206 = 0x4B6, // CMSG, uint32
  1179. + SMSG_UNKNOWN_1207 = 0x4B7, // SMSG, string+float
  1180. CMSG_LFG_SET_ROLES = 0x4B8, // CMSG, empty, lua: SetLFGRoles
  1181. + UMSG_UNKNOWN_1209 = 0x4B9, // not found
  1182. + CMSG_UNKNOWN_1210 = 0x4BA, // CMSG, uint64, lua: CalendarContextEventSignUp
  1183. + SMSG_UNKNOWN_1211 = 0x4BB, // SMSG, calendar related
  1184. SMSG_EQUIPMENT_SET_LIST = 0x4BC, // SMSG, equipment manager list?
  1185. + CMSG_EQUIPMENT_SET_SAVE = 0x4BD, // CMSG, lua: SaveEquipmentSet
  1186. + CMSG_UNKNOWN_1214 = 0x4BE, // CMSG, missle?
  1187. + SMSG_UNKNOWN_1215 = 0x4BF, // SMSG, uint64, uint8, 3 x float
  1188. SMSG_TALENTS_INFO = 0x4C0, // SMSG, talents related
  1189. - CMSG_LEARN_TALENTS_MULTIPLE = 0x4C1,
  1190. + CMSG_LEARN_TALENTS_MULTIPLE = 0x4C1, // CMSG, lua: LearnPreviewTalents (for player?)
  1191. + CMSG_LEARN_PREVIEW_TALENTS_PET = 0x4C2, // CMSG, lua: LearnPreviewTalents (for pet?)
  1192. + UMSG_UNKNOWN_1219 = 0x4C3, // not found
  1193. + UMSG_UNKNOWN_1220 = 0x4C4, // not found
  1194. + UMSG_UNKNOWN_1221 = 0x4C5, // not found
  1195. + UMSG_UNKNOWN_1222 = 0x4C6, // not found
  1196. + SMSG_UNKNOWN_1223 = 0x4C7, // uint64, arena pet?
  1197. + SMSG_UNKNOWN_1224 = 0x4C8, // uint32 "Can't change arena team..."
  1198. + UMSG_UNKNOWN_1225 = 0x4C9, // not found
  1199. + UMSG_UNKNOWN_1226 = 0x4CA, // not found
  1200. + CMSG_EQUIPMENT_SET_USE = 0x4CB, // CMSG, lua: UseEquipmentSet
  1201. + SMSG_EQUIPMENT_SET_USE_RESULT = 0x4CC, // SMSG, UseEquipmentSetResult?
  1202. MSG_SET_RAID_DIFFICULTY = 0x4EB,
  1203. CMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F6,
  1204. SMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F7,
  1205. Index: src/arcemu-world/Pet.cpp
  1206. ===================================================================
  1207. --- src/arcemu-world/Pet.cpp (revision 3116)
  1208. +++ src/arcemu-world/Pet.cpp (working copy)
  1209. @@ -20,15 +20,16 @@
  1210.  
  1211. #include "StdAfx.h"
  1212.  
  1213. -#define WATER_ELEMENTAL 510
  1214. -#define PET_IMP 416
  1215. -#define PET_VOIDWALKER 1860
  1216. -#define PET_SUCCUBUS 1863
  1217. -#define PET_FELHUNTER 417
  1218. -#define PET_FELGUARD 17252
  1219. -#define SHADOWFIEND 19668
  1220. -#define SPIRITWOLF 29264
  1221. -#define DANCINGRUNEWEAPON 27893
  1222. +#define WATER_ELEMENTAL 510
  1223. +#define PET_IMP 416
  1224. +#define PET_VOIDWALKER 1860
  1225. +#define PET_SUCCUBUS 1863
  1226. +#define PET_FELHUNTER 417
  1227. +#define PET_FELGUARD 17252
  1228. +#define SHADOWFIEND 19668
  1229. +#define SPIRITWOLF 29264
  1230. +#define DANCINGRUNEWEAPON 27893
  1231. +#define TREANT 1964
  1232.  
  1233. uint32 Pet::GetAutoCastTypeForSpell( SpellEntry * ent )
  1234. {
  1235. @@ -111,6 +112,9 @@
  1236. case DANCINGRUNEWEAPON:
  1237. m_name = "Rune Weapon";
  1238. break;
  1239. + case TREANT:
  1240. + m_name = "Treant";
  1241. + break;
  1242. case PET_IMP:
  1243. case PET_VOIDWALKER:
  1244. case PET_SUCCUBUS:
  1245. @@ -142,7 +146,7 @@
  1246. return;
  1247. }
  1248.  
  1249. - if( owner->GetSummon() != NULL )
  1250. + if( owner->GetSummon() != NULL && type != 4 )
  1251. owner->GetSummon()->Dismiss(); // to avoid problems caused by loosing reference to old pet
  1252.  
  1253. m_Owner = owner;
  1254. @@ -1251,6 +1255,7 @@
  1255. stat_index = 4;
  1256. break;
  1257. case 29264:
  1258. + case TREANT:
  1259. stat_index = 5;
  1260. break;
  1261. case 27893:
  1262. Index: src/arcemu-world/Player.cpp
  1263. ===================================================================
  1264. --- src/arcemu-world/Player.cpp (revision 3116)
  1265. +++ src/arcemu-world/Player.cpp (working copy)
  1266. @@ -3751,7 +3751,7 @@
  1267. // clear all fields
  1268. for(int i = 0; i < 25; ++i)
  1269. {
  1270. - baseindex = PLAYER_QUEST_LOG_1_1 + (i * 4);
  1271. + baseindex = PLAYER_QUEST_LOG_1_1 + (i * 5);
  1272. SetUInt32Value(baseindex + 0, 0);
  1273. SetUInt32Value(baseindex + 1, 0);
  1274. SetUInt32Value(baseindex + 2, 0);
  1275. @@ -4654,7 +4654,7 @@
  1276.  
  1277. if(getRace()==RACE_NIGHTELF)
  1278. {
  1279. - SpellEntry *inf=dbcSpell.LookupEntry(9036); // Cebernic:20584 triggered.
  1280. + SpellEntry *inf=dbcSpell.LookupEntry(9036);
  1281. Spell * sp = new Spell(this,inf,true,NULL);
  1282. sp->prepare(&tgt);
  1283. }
  1284. @@ -6472,6 +6472,36 @@
  1285. return true;
  1286. }
  1287.  
  1288. +void Player::SendPreventSchoolCast(uint32 SpellSchool, uint32 unTimeMs)
  1289. +{
  1290. + WorldPacket data(SMSG_SPELL_COOLDOWN, 8 + 1 + mSpells.size() * 8);
  1291. + data << GetGUID();
  1292. + data << uint8(0x0);
  1293. + SpellSet::iterator sitr;
  1294. + for (sitr = mSpells.begin(); sitr != mSpells.end(); ++sitr)
  1295. + {
  1296. + uint32 SpellId = (*sitr);
  1297. +
  1298. + SpellEntry * spellInfo = dbcSpell.LookupEntry(SpellId);
  1299. + if (!spellInfo)
  1300. + {
  1301. + ASSERT(spellInfo);
  1302. + continue;
  1303. + }
  1304. +
  1305. + // Not send cooldown for this spells
  1306. + if (spellInfo->Attributes & ATTRIBUTES_TRIGGER_COOLDOWN)
  1307. + continue;
  1308. +
  1309. + if( spellInfo->School == SpellSchool )
  1310. + {
  1311. + data << uint32(SpellId);
  1312. + data << uint32(unTimeMs); // in m.secs
  1313. + }
  1314. + }
  1315. + GetSession()->SendPacket(&data);
  1316. +}
  1317. +
  1318. void Player::EventActivateGameObject(GameObject* obj)
  1319. {
  1320. obj->BuildFieldUpdatePacket(this, GAMEOBJECT_DYNAMIC, 1 | 8);
  1321. @@ -8274,6 +8304,13 @@
  1322. data << uint8( 1 );
  1323. SendMessageToSet( &data, true );
  1324.  
  1325. + //Send hook OnDuelFinished
  1326. +
  1327. + if ( WinCondition != 0 )
  1328. + sHookInterface.OnDuelFinished( DuelingWith, this );
  1329. + else
  1330. + sHookInterface.OnDuelFinished( this, DuelingWith );
  1331. +
  1332. //Clear Duel Related Stuff
  1333.  
  1334. GameObject* arbiter = m_mapMgr ? GetMapMgr()->GetGameObject(GetUInt32Value(PLAYER_DUEL_ARBITER)) : 0;
  1335. @@ -9813,6 +9850,30 @@
  1336. return float2int32(r);
  1337. }
  1338.  
  1339. +uint32 Player::GetFlametongueDMG(uint32 spellid)
  1340. +{
  1341. + float dmg = 0;
  1342. + Item * i = GetItemInterface()->GetInventoryItem( EQUIPMENT_SLOT_MAINHAND );
  1343. + float delay = float(i->GetProto()->Delay * 0.001f);
  1344. + SpellEntry * sp = dbcSpell.LookupEntry(spellid);
  1345. +
  1346. + if( delay == 0 )
  1347. + return 1;
  1348. +
  1349. + // Based on calculation from Shauren, thx for it
  1350. + float min = (float)sp->EffectBasePoints[0]/77.0f;
  1351. + float max = (float)sp->EffectBasePoints[0]/25.0f;
  1352. +
  1353. + dmg = float(float(min * delay) * 0.88f);
  1354. +
  1355. + if( dmg < min )
  1356. + dmg = min;
  1357. + else if( dmg > max )
  1358. + dmg = max;
  1359. +
  1360. + return float2int32(dmg);
  1361. +}
  1362. +
  1363. void Player::EventPortToGM(Player *p)
  1364. {
  1365. SafeTeleport(p->GetMapId(),p->GetInstanceID(),p->GetPosition());
  1366. Index: src/arcemu-world/Player.h
  1367. ===================================================================
  1368. --- src/arcemu-world/Player.h (revision 3116)
  1369. +++ src/arcemu-world/Player.h (working copy)
  1370. @@ -275,7 +275,13 @@
  1371. PVPTITLE_RELENTLESS_GLADIATOR = 134,
  1372. PVPTITLE_GRAND_CRUSADER = 135,
  1373. PVPTITLE_THE_ARGENT_DEFENDER = 136,
  1374. - PVPTITLE_END = 137,
  1375. + PVPTITLE_THE_PATIENT = 137,
  1376. + PVPTITLE_THE_LIGHT_OF_THE_DAWN = 138,
  1377. + PVPTITLE_BANE_OF_THE_FALLEN_KING = 139,
  1378. + PVPTITLE_THE_KINGSLAYER = 140,
  1379. + PVPTITLE_OF_THE_ASHEN_VERDICT = 141,
  1380. + PVPTITLE_WRATHFUL_GLADIATOR = 142,
  1381. + PVPTITLE_END = 143,
  1382. };
  1383.  
  1384. enum PvPAreaStatus
  1385. @@ -1152,6 +1158,8 @@
  1386. uint32 GetMainMeleeDamage(uint32 AP_owerride); //i need this for windfury
  1387. uint32 GetMaxLevel(){ return GetUInt32Value(PLAYER_FIELD_MAX_LEVEL); }
  1388.  
  1389. + uint32 GetFlametongueDMG(uint32 spellid); // for flametongue
  1390. +
  1391. const uint64& GetSelection( ) const { return m_curSelection; }
  1392. const uint64& GetTarget( ) const { return m_curTarget; }
  1393. void SetSelection(const uint64 &guid) { m_curSelection = guid; }
  1394. @@ -1170,6 +1178,7 @@
  1395. void removeSpellByHashName(uint32 hash);
  1396. bool removeSpell(uint32 SpellID, bool MoveToDeleted, bool SupercededSpell, uint32 SupercededSpellID);
  1397. bool removeDeletedSpell( uint32 SpellID );
  1398. + void SendPreventSchoolCast(uint32 SpellSchool, uint32 unTimeMs);
  1399.  
  1400. // PLEASE DO NOT INLINE!
  1401. void AddOnStrikeSpell(SpellEntry* sp, uint32 delay)
  1402. Index: src/arcemu-world/PlayerPacketWrapper.cpp
  1403. ===================================================================
  1404. --- src/arcemu-world/PlayerPacketWrapper.cpp (revision 3116)
  1405. +++ src/arcemu-world/PlayerPacketWrapper.cpp (working copy)
  1406. @@ -531,7 +531,8 @@
  1407. data2 << uint32( 0 );
  1408.  
  1409. data2 << uint32( iter->iItemsCount );
  1410. - data2 << uint32( 60000 ); // countdown
  1411. + data2 << uint32( 60000 ); // countdown
  1412. + data2 << uint8( 7 ); // some sort of flags that require research
  1413. }
  1414.  
  1415. Group * pGroup = m_playerInfo->m_Group;
  1416. Index: src/arcemu-world/Quest.cpp
  1417. ===================================================================
  1418. --- src/arcemu-world/Quest.cpp (revision 3116)
  1419. +++ src/arcemu-world/Quest.cpp (working copy)
  1420. @@ -32,50 +32,71 @@
  1421. LocalizedQuest * lci = (language>0) ? sLocalizationMgr.GetLocalizedQuest(qst->id, language) : NULL;
  1422. uint32 i;
  1423.  
  1424. - *data << uint32(qst->id); // Quest ID
  1425. - *data << uint32(2); // Unknown, always seems to be 2
  1426. + *data << uint32(qst->id); // Quest ID
  1427. + *data << uint32(2); // Unknown, always seems to be 2
  1428. *data << uint32(qst->max_level); // Quest level
  1429. + *data << uint32(qst->min_level); // Quest required level
  1430.  
  1431. if(qst->quest_sort > 0)
  1432. - *data << int32(-(int32)qst->quest_sort); // Negative if pointing to a sort.
  1433. + *data << int32(-(int32)qst->quest_sort); // Negative if pointing to a sort.
  1434. else
  1435. - *data << uint32(qst->zone_id); // Positive if pointing to a zone.
  1436. + *data << uint32(qst->zone_id); // Positive if pointing to a zone.
  1437.  
  1438. - *data << uint32(qst->type); // Info ID / Type
  1439. - *data << qst->suggestedplayers; // suggested players
  1440. - *data << uint32(qst->required_rep_faction); // Faction ID
  1441. - *data << uint32(qst->required_rep_value); // Faction Amount
  1442. - *data << uint32(0); // Unknown (always 0)
  1443. - *data << uint32(0); // Unknown (always 0)
  1444. + *data << uint32(qst->type); // Info ID / Type
  1445. + *data << qst->suggestedplayers; // suggested players
  1446. + *data << uint32(qst->required_rep_faction); // Faction ID
  1447. + *data << uint32(qst->required_rep_value); // Faction Amount
  1448. + *data << uint32(0); // Unknown (always 0)
  1449. + *data << uint32(0); // Unknown (always 0)
  1450. *data << uint32(qst->next_quest_id); // Next Quest ID
  1451. - *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) ); // Copper reward
  1452. - *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0); // Required Money
  1453. - *data << uint32(qst->effect_on_player); // Spell casted on player upon completion
  1454. - *data << uint32(qst->reward_spell); // Spell added to spellbook upon completion
  1455. - *data << qst->bonushonor; // 2.3.0 - bonus honor
  1456. - *data << uint32(qst->srcitem); // Item given at the start of a quest (srcitem)
  1457. - *data << uint32(qst->quest_flags); // Quest Flags
  1458. - *data << qst->rewardtitleid; // 2.4.0 unk
  1459. + *data << uint32(0); // Column id +1 from QuestXp.dbc, entry is quest level
  1460. + *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) ); // Copper reward
  1461. + *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0); // Required Money
  1462. + *data << uint32(qst->effect_on_player); // Spell casted on player upon completion
  1463. + *data << uint32(qst->reward_spell); // Spell added to spellbook upon completion
  1464. + *data << uint32(qst->bonushonor); // 2.3.0 - bonus honor
  1465. + *data << float(0); // 3.3.0 - some multiplier for honor
  1466. + *data << uint32(qst->srcitem); // Item given at the start of a quest (srcitem)
  1467. + *data << uint32(qst->quest_flags); // Quest Flags
  1468. + *data << qst->rewardtitleid; // 2.4.0 unk
  1469. *data << uint32(0); // playerkillcount
  1470. *data << qst->rewardtalents;
  1471. + *data << uint32(0); // 3.3.0 Unknown
  1472. + *data << uint32(0); // 3.3.0 Unknown
  1473.  
  1474. // (loop 4 times)
  1475. for(i = 0; i < 4; ++i)
  1476. {
  1477. - *data << qst->reward_item[i]; // Forced Reward Item [i]
  1478. - *data << qst->reward_itemcount[i]; // Forced Reward Item Count [i]
  1479. + *data << qst->reward_item[i]; // Forced Reward Item [i]
  1480. + *data << qst->reward_itemcount[i]; // Forced Reward Item Count [i]
  1481. }
  1482.  
  1483. // (loop 6 times)
  1484. for(i = 0; i < 6; ++i)
  1485. {
  1486. - *data << qst->reward_choiceitem[i]; // Choice Reward Item [i]
  1487. + *data << qst->reward_choiceitem[i]; // Choice Reward Item [i]
  1488. *data << qst->reward_choiceitemcount[i]; // Choice Reward Item Count [i]
  1489. }
  1490.  
  1491. - *data << qst->point_mapid; // Unknown
  1492. - *data << qst->point_x; // Unknown
  1493. - *data << qst->point_y; // Unknown
  1494. + // (loop 5 times) - these 3 loops are here to allow displaying rep rewards in client (not handled in core yet)
  1495. + for(uint32 i = 0; i < 5; ++i)
  1496. + {
  1497. + *data << uint32(qst->reward_repfaction[i]); // reward factions ids
  1498. + }
  1499. +
  1500. + for(uint32 i = 0; i < 5; ++i)
  1501. + {
  1502. + *data << uint32(0); // column index in QuestFactionReward.dbc but use unknown
  1503. + }
  1504. +
  1505. + for(uint32 i = 0; i < 5; ++i) // Unknown
  1506. + {
  1507. + *data << uint32(0);
  1508. + }
  1509. +
  1510. + *data << qst->point_mapid; // Unknown
  1511. + *data << qst->point_x; // Unknown
  1512. + *data << qst->point_y; // Unknown
  1513. *data << qst->point_opt; // Unknown
  1514.  
  1515. if(lci)
  1516. @@ -84,25 +105,28 @@
  1517. *data << lci->Objectives;
  1518. *data << lci->Details;
  1519. *data << lci->EndText;
  1520. + *data << uint8(0);
  1521. }
  1522. else
  1523. {
  1524. - *data << qst->title; // Title / name of quest
  1525. - *data << qst->objectives; // Objectives / description
  1526. - *data << qst->details; // Details
  1527. - *data << qst->endtext; // Subdescription
  1528. + *data << qst->title; // Title / name of quest
  1529. + *data << qst->objectives; // Objectives / description
  1530. + *data << qst->details; // Details
  1531. + *data << qst->endtext; // Subdescription
  1532. + *data << uint8(0); // most 3.3.0 quests i seen have something like "Return to NPCNAME"
  1533. }
  1534.  
  1535. for(i = 0; i < 4; ++i)
  1536. {
  1537. - *data << qst->required_mob[i]; // Kill mob entry ID [i]
  1538. - *data << qst->required_mobcount[i]; // Kill mob count [i]
  1539. - *data << uint32( 0 ); // Unknown
  1540. + *data << qst->required_mob[i]; // Kill mob entry ID [i]
  1541. + *data << qst->required_mobcount[i]; // Kill mob count [i]
  1542. + *data << uint32(0); // Unknown
  1543. + *data << uint32(0); // 3.3.0 Unknown
  1544. }
  1545.  
  1546. for(i = 0; i < 6; ++i)
  1547. {
  1548. - *data << qst->required_item[i]; // Collect item [i]
  1549. + *data << qst->required_item[i]; // Collect item [i]
  1550. *data << qst->required_itemcount[i]; // Collect item count [i]
  1551. }
  1552.  
  1553. @@ -399,7 +423,7 @@
  1554. uint32 field0 = 0; // 0x01000000 = "Objective Complete" - 0x02 = Quest Failed - 0x04 = Quest Accepted
  1555.  
  1556. // next field is count (kills, etc)
  1557. - uint32 field1 = 0;
  1558. + uint64 field1 = 0;
  1559.  
  1560. // explored areas
  1561. if(m_quest->count_requiredtriggers)
  1562. @@ -475,12 +499,12 @@
  1563. for(int i = 0; i < 4; ++i)
  1564. {
  1565. if( m_quest->required_mob[i] && m_mobcount[i] > 0 )
  1566. - p[i] |= (uint8)m_mobcount[i];
  1567. + p[2*i] |= (uint8)m_mobcount[i];
  1568. }
  1569. }
  1570.  
  1571. m_plr->SetUInt32Value(base + 1, field0);
  1572. - m_plr->SetUInt32Value(base + 2, field1);
  1573. + m_plr->SetUInt64Value(base + 2, field1);
  1574. m_plr->SetUInt32Value(base + 3, ( m_time_left ? (uint32)(UNIXTIME+m_time_left/1000) : 0 ) );
  1575. }
  1576.  
  1577. Index: src/arcemu-world/Quest.h
  1578. ===================================================================
  1579. --- src/arcemu-world/Quest.h (revision 3116)
  1580. +++ src/arcemu-world/Quest.h (working copy)
  1581. @@ -37,18 +37,18 @@
  1582.  
  1583. enum QUEST_STATUS
  1584. {
  1585. - QMGR_QUEST_NOT_AVAILABLE = 0x00, // There aren't any quests available. | "No Mark"
  1586. - QMGR_QUEST_AVAILABLELOW_LEVEL = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !"
  1587. - QMGR_QUEST_CHAT = 0x02, // Quest available it shows a talk balloon. | "No Mark"
  1588. - // 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).
  1589. - QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL = 0x03,
  1590. - QMGR_QUEST_REPEATABLE_LOWLEVEL = 0x04,
  1591. - QMGR_QUEST_NOT_FINISHED = 0x05, // Quest isn't finished yet. | "Gray Question ? Mark"
  1592. - QMGR_QUEST_REPEATABLE_FINISHED = 0x06,
  1593. - QMGR_QUEST_REPEATABLE = 0x07, // Quest repeatable | "Blue Question ? Mark"
  1594. - QMGR_QUEST_AVAILABLE = 0x08, // Quest available, and your level is enough | "Yellow Quotation ! Mark"
  1595. - QMGR_QUEST_FINISHED = 0x0A, // Quest has been finished. | "Yellow Question ? Mark" (7 has no minimap icon)
  1596. - //QUEST_ITEM_UPDATE = 0x06 // Yellow Question "?" Mark. //Unknown
  1597. + QMGR_QUEST_NOT_AVAILABLE = 0x00, // There aren't any quests available. | "No Mark"
  1598. + QMGR_QUEST_AVAILABLELOW_LEVEL = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !"
  1599. + QMGR_QUEST_CHAT = 0x02, // Quest available it shows a talk balloon. | "No Mark"
  1600. + // 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).
  1601. + QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL = 0x03,
  1602. + QMGR_QUEST_REPEATABLE_LOWLEVEL = 0x04,
  1603. + QMGR_QUEST_NOT_FINISHED = 0x05, // Quest isn't finished yet. | "Gray Question ? Mark"
  1604. + QMGR_QUEST_REPEATABLE_FINISHED = 0x06,
  1605. + QMGR_QUEST_REPEATABLE = 0x07, // Quest repeatable | "Blue Question ? Mark"
  1606. + QMGR_QUEST_AVAILABLE = 0x08, // Quest available, and your level is enough | "Yellow Quotation ! Mark"
  1607. + QMGR_QUEST_FINISHED = 0x0A, // Quest has been finished. | "Yellow Question ? Mark" (7 has no minimap icon)
  1608. + //QUEST_ITEM_UPDATE = 0x06 // Yellow Question "?" Mark. //Unknown
  1609. };
  1610.  
  1611. enum QuestStatus // dupe for scriptdev2
  1612. @@ -284,7 +284,7 @@
  1613.  
  1614. ARCEMU_INLINE uint32 GetBaseField(uint32 slot)
  1615. {
  1616. - return PLAYER_QUEST_LOG_1_1 + (slot * 4);
  1617. + return PLAYER_QUEST_LOG_1_1 + (slot * 5);
  1618. }
  1619.  
  1620. private:
  1621. Index: src/arcemu-world/QuestHandler.cpp
  1622. ===================================================================
  1623. --- src/arcemu-world/QuestHandler.cpp (revision 3116)
  1624. +++ src/arcemu-world/QuestHandler.cpp (working copy)
  1625. @@ -116,9 +116,11 @@
  1626. uint64 guid;
  1627. uint32 quest_id;
  1628. uint32 status = 0;
  1629. + uint8 unk;
  1630.  
  1631. recv_data >> guid;
  1632. recv_data >> quest_id;
  1633. + recv_data >> unk;
  1634.  
  1635. Object *qst_giver = NULL;
  1636.  
  1637. Index: src/arcemu-world/QuestMgr.cpp
  1638. ===================================================================
  1639. --- src/arcemu-world/QuestMgr.cpp (revision 3116)
  1640. +++ src/arcemu-world/QuestMgr.cpp (working copy)
  1641. @@ -302,8 +302,8 @@
  1642. ItemPrototype * it;
  1643. uint32 i = 0;
  1644. data->SetOpcode(SMSG_QUESTGIVER_OFFER_REWARD);
  1645. - *data << qst_giver->GetGUID();
  1646. - *data << qst->id;
  1647. + *data << uint64(qst_giver->GetGUID());
  1648. + *data << uint32(qst->id);
  1649.  
  1650. if( lq )
  1651. {
  1652. @@ -318,7 +318,7 @@
  1653.  
  1654. //uint32 a = 0, b = 0, c = 1, d = 0, e = 1;
  1655.  
  1656. - *data << ( qst->next_quest_id ? uint32(1) : uint32(0) );// next quest shit
  1657. + *data << ( qst->next_quest_id ? uint8(1) : uint8(0) );// next quest shit
  1658. *data << uint32(0); // maybe required money
  1659.  
  1660. *data << qst->completionemotecount;
  1661. @@ -358,14 +358,23 @@
  1662. }
  1663. }
  1664.  
  1665. -
  1666. + *data << uint32(0);
  1667. *data << GenerateRewardMoney( plr, qst );
  1668. - *data << qst->bonushonor;
  1669. + *data << (qst->bonushonor * 10);
  1670. + *data << float(0);
  1671. *data << uint32(0);
  1672. *data << qst->reward_spell;
  1673. *data << qst->effect_on_player;
  1674. *data << qst->rewardtitleid;
  1675. *data << qst->rewardtalents;
  1676. + *data << uint32(0);
  1677. + *data << uint32(0);
  1678. + for(int i = 0; i < 5; ++i) // reward factions ids
  1679. + *data << uint32(0);
  1680. + for(int i = 0; i < 5; ++i) // columnid in QuestFactionReward.dbc (zero based)?
  1681. + *data << uint32(0);
  1682. + for(int i = 0; i < 5; ++i) // reward reputation override?
  1683. + *data << uint32(0);
  1684. }
  1685.  
  1686. void QuestMgr::BuildQuestDetails(WorldPacket *data, Quest* qst, Object* qst_giver, uint32 menutype, uint32 language, Player * plr)
  1687. @@ -392,10 +401,11 @@
  1688. *data << qst->objectives;
  1689. }
  1690.  
  1691. - *data << uint32(1); // Activate accept
  1692. + *data << uint8(1); // Activate accept
  1693. *data << qst->suggestedplayers; // "Suggested players"
  1694. *data << uint8(0); // Added in 3.0.2, name or text(?)
  1695. *data << uint8(0); //VLack: some 3.1.x thing
  1696. + *data << uint8(0); //new 3.3
  1697.  
  1698.  
  1699. ItemPrototype *ip;
  1700. @@ -427,12 +437,23 @@
  1701. }
  1702.  
  1703. *data << GenerateRewardMoney( plr, qst ); // Money reward
  1704. - *data << qst->bonushonor; // Honor reward
  1705. + *data << uint32(0); //New 3.3
  1706. + *data << (qst->bonushonor * 10); // Honor reward
  1707. + *data << float(0); //New 3.3
  1708. *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
  1709. *data << qst->effect_on_player; // this is the spell (id) the quest finisher casts on you as a reward
  1710. *data << qst->rewardtitleid; // Title reward (ID)
  1711. *data << qst->rewardtalents; // Talent reward
  1712. + *data << uint32(0); // new 3.3.0
  1713. + *data << uint32(0); // new 3.3.0
  1714. + for(int i = 0; i < 5; ++i)
  1715. + *data << uint32(0);
  1716. + for(int i = 0; i < 5; ++i)
  1717. + *data << uint32(0);
  1718. + for(int i = 0; i < 5; ++i)
  1719. + *data << uint32(0);
  1720.  
  1721. +
  1722. *data << qst->detailemotecount; // Amount of emotes (4?)
  1723. for( i = 0; i < qst->detailemotecount; i++ )
  1724. {
  1725. @@ -475,15 +496,27 @@
  1726. *data << qst->count_required_item;
  1727.  
  1728. // (loop for each item)
  1729. - for(uint32 i = 0; i < 4; ++i)
  1730. + for(uint32 i = 0; i < 6; ++i)
  1731. {
  1732. if(qst->required_item[i] != 0)
  1733. {
  1734. - *data << qst->required_item[i];
  1735. - *data << qst->required_itemcount[i];
  1736. - it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]);
  1737. - *data << (it ? it->DisplayInfoID : uint32(0));
  1738. + *data << qst->required_item[i];
  1739. + *data << qst->required_itemcount[i];
  1740. + it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]);
  1741. + *data << (it ? it->DisplayInfoID : uint32(0));
  1742. }
  1743. + else
  1744. + {
  1745. + *data << uint32(0);
  1746. + *data << uint32(0);
  1747. + *data << uint32(0);
  1748. + }
  1749. + *data << uint32(0);
  1750. + *data << uint32(0);
  1751. + *data << uint32(0);
  1752. + *data << uint32(0);
  1753. + *data << uint32(0);
  1754. + *data << uint32(0);
  1755. }
  1756.  
  1757. // wtf is this?
  1758. @@ -493,9 +526,10 @@
  1759. }
  1760. else
  1761. {
  1762. - *data << uint32(2);
  1763. + *data << uint32(3);
  1764. }
  1765.  
  1766. + *data << uint32(4);
  1767. *data << uint32(8);
  1768. *data << uint32(10);
  1769. }
  1770. @@ -527,7 +561,7 @@
  1771. data << uint32( qst->id );
  1772. data << uint32( xp );
  1773. data << uint32( GenerateRewardMoney( plr, qst ) );
  1774. - data << uint32( 0 );
  1775. + data << uint32(qst->bonushonor * 10);
  1776. data << uint32( rewardtalents );
  1777. data << uint32( qst->count_reward_item ); //Reward item count
  1778.  
  1779. Index: src/arcemu-world/ScriptMgr.cpp
  1780. ===================================================================
  1781. --- src/arcemu-world/ScriptMgr.cpp (revision 3116)
  1782. +++ src/arcemu-world/ScriptMgr.cpp (working copy)
  1783. @@ -1128,3 +1128,10 @@
  1784. for(ServerHookList::iterator itr = hookList.begin(); itr != hookList.end(); ++itr)
  1785. ((tOnAdvanceSkillLine)*itr)(pPlayer, skillLine, current);
  1786. }
  1787. +
  1788. +void HookInterface::OnDuelFinished(Player * Winner, Player * Looser)
  1789. +{
  1790. + ServerHookList hookList = sScriptMgr._hooks[SERVER_HOOK_EVENT_ON_DUEL_FINISHED];
  1791. + for(ServerHookList::iterator itr = hookList.begin(); itr != hookList.end(); ++itr)
  1792. + ((tOnDuelFinished)*itr)(Winner, Looser);
  1793. +}
  1794. Index: src/arcemu-world/ScriptMgr.h
  1795. ===================================================================
  1796. --- src/arcemu-world/ScriptMgr.h (revision 3116)
  1797. +++ src/arcemu-world/ScriptMgr.h (working copy)
  1798. @@ -64,6 +64,7 @@
  1799. SERVER_HOOK_EVENT_ON_POST_LEVELUP = 27,
  1800. SERVER_HOOK_EVENT_ON_PRE_DIE = 28, //general unit die, not only based on players
  1801. SERVER_HOOK_EVENT_ON_ADVANCE_SKILLLINE = 29,
  1802. + SERVER_HOOK_EVENT_ON_DUEL_FINISHED = 30,
  1803.  
  1804. NUM_SERVER_HOOKS,
  1805. };
  1806. @@ -107,6 +108,7 @@
  1807. typedef void(*tOnPostLevelUp)(Player * pPlayer);
  1808. typedef void(*tOnPreUnitDie)(Unit *killer, Unit *target);
  1809. typedef void(*tOnAdvanceSkillLine)(Player * pPlayer, uint32 SkillLine, uint32 Current);
  1810. +typedef void(*tOnDuelFinished)(Player * Winner, Player * Looser);
  1811.  
  1812. class Spell;
  1813. class Aura;
  1814. @@ -397,6 +399,7 @@
  1815. void OnPostLevelUp(Player * pPlayer);
  1816. void OnPreUnitDie(Unit *Killer, Unit *Victim);
  1817. void OnAdvanceSkillLine(Player * pPlayer, uint32 SkillLine, uint32 Current);
  1818. + void OnDuelFinished(Player * Winner, Player * Looser);
  1819. };
  1820.  
  1821. #define sScriptMgr ScriptMgr::getSingleton()
  1822. Index: src/arcemu-world/Spell.cpp
  1823. ===================================================================
  1824. --- src/arcemu-world/Spell.cpp (revision 3116)
  1825. +++ src/arcemu-world/Spell.cpp (working copy)
  1826. @@ -102,7 +102,7 @@
  1827.  
  1828. if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
  1829. {
  1830. - data >> m_srcX >> m_srcY >> m_srcZ;
  1831. + data >> m_srcguid >> m_srcX >> m_srcY >> m_srcZ;
  1832.  
  1833. if( !( m_targetMask & TARGET_FLAG_DEST_LOCATION ) )
  1834. {
  1835. @@ -114,7 +114,7 @@
  1836.  
  1837. if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
  1838. {
  1839. - data >> guid >> m_destX >> m_destY >> m_destZ;
  1840. + data >> m_destguid >> m_destX >> m_destY >> m_destZ;
  1841. if( !( m_targetMask & TARGET_FLAG_SOURCE_LOCATION ) )
  1842. {
  1843. m_srcX = m_destX;
  1844. @@ -139,19 +139,14 @@
  1845. if( /*m_targetMask == TARGET_FLAG_SELF || */m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_CORPSE | TARGET_FLAG_CORPSE2 | TARGET_FLAG_OBJECT | TARGET_FLAG_GLYPH) )
  1846. FastGUIDPack( data, m_unitTarget );
  1847.  
  1848. - if( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM ) )
  1849. - FastGUIDPack( data, m_itemTarget );
  1850. + if( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM ) )
  1851. + FastGUIDPack( data, m_itemTarget );
  1852.  
  1853. if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
  1854. - data << m_srcX << m_srcY << m_srcZ;
  1855. + data << m_srcguid << m_srcX << m_srcY << m_srcZ;
  1856.  
  1857. if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
  1858. - { //VLack: guess what, some Aspire fix
  1859. - if(m_unitTarget) FastGUIDPack( data, m_unitTarget );
  1860. - else data << uint8(0);
  1861. - data << m_destX << m_destY << m_destZ;
  1862. - }
  1863. -// data << uint8(0) << m_destX << m_destY << m_destZ;
  1864. + data << m_destguid << m_destX << m_destY << m_destZ;
  1865.  
  1866. if( m_targetMask & TARGET_FLAG_STRING )
  1867. data << m_strTarget.c_str();
  1868. @@ -5388,10 +5383,12 @@
  1869. switch( m_spellInfo->Id )
  1870. {
  1871. case 20267: //Judgement of Light
  1872. - if( playerTarget != NULL )
  1873. - amount = (int)(0.10f * playerTarget->GetUInt32Value(UNIT_FIELD_ATTACK_POWER) + 0.10f * playerTarget->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1));
  1874. - else
  1875. - amount = (int)(0.10f * unitTarget->GetUInt32Value(UNIT_FIELD_ATTACK_POWER));
  1876. + {
  1877. + // Patch 3.2.0 (2009-08-04): Now heals for 2% of the attacker's maximum health instead of a
  1878. + // variable amount based on the spell power and attack power of the judging paladin.
  1879. + if( p_caster != NULL )
  1880. + amount = float2int32(p_caster->GetUInt32Value(UNIT_FIELD_MAXHEALTH) * 0.02f);
  1881. + }
  1882. break;
  1883. case 20167: //Seal of Light
  1884. if( p_caster != NULL )
  1885. Index: src/arcemu-world/Spell.h
  1886. ===================================================================
  1887. --- src/arcemu-world/Spell.h (revision 3116)
  1888. +++ src/arcemu-world/Spell.h (working copy)
  1889. @@ -354,12 +354,13 @@
  1890.  
  1891. enum CastInterruptFlags
  1892. {
  1893. - CAST_INTERRUPT_NULL = 0x0,
  1894. - CAST_INTERRUPT_ON_SILENCE = 0x1,
  1895. - CAST_INTERRUPT_PUSHBACK = 0x2, // seems to be whether or not the spell is pushed back on dmg
  1896. - CAST_INTERRUPT_ON_STUNNED = 0x4, // could be wrong
  1897. - CAST_INTERRUPT_ON_MOVEMENT = 0x8,
  1898. - CAST_INTERRUPT_ON_DAMAGE_TAKEN = 0x10
  1899. + CAST_INTERRUPT_NULL = 0x0,
  1900. + CAST_INTERRUPT_ON_MOVEMENT = 0x1,
  1901. + CAST_INTERRUPT_PUSHBACK = 0x2, // seems to be whether or not the spell is pushed back on dmg
  1902. + CAST_INTERRUPT_ON_INTERRUPT_CAST = 0x4, // ? probably interrupt only cast
  1903. + CAST_INTERRUPT_ON_INTERRUPT_SCHOOL = 0x8, // seems that on 3.2.0 spell with this interrupts only 1 school, like counterspell
  1904. + CAST_INTERRUPT_ON_DAMAGE_TAKEN = 0x10,
  1905. + CAST_INTERRUPT_ON_INTERRUPT_ALL = 0x20 // guessed
  1906. };
  1907.  
  1908. enum AuraInterruptFlags
  1909. @@ -713,6 +714,13 @@
  1910. TARGET_TYPE_MECHANICAL = 0x100,
  1911. };
  1912.  
  1913. +enum PreventionType
  1914. +{
  1915. + PREVENTION_TYPE_NONE = 0,
  1916. + PREVENTION_TYPE_SILENCE = 1,
  1917. + PREVENTION_TYPE_PACIFY = 2
  1918. +};
  1919. +
  1920. /****************SpellExtraFlags*****************/
  1921. /* SpellExtraFlags defines */
  1922. /* */
  1923. @@ -1310,7 +1318,9 @@
  1924. uint16 m_targetMaskExtended; // this could be a 32 also
  1925. uint64 m_unitTarget;
  1926. uint64 m_itemTarget;
  1927. + WoWGuid m_srcguid;
  1928. float m_srcX, m_srcY, m_srcZ;
  1929. + WoWGuid m_destguid;
  1930. float m_destX, m_destY, m_destZ;
  1931. string m_strTarget;
  1932. };
  1933. @@ -1791,6 +1801,8 @@
  1934. void SpellEffectDispelMechanic(uint32 i);
  1935. void SpellEffectSummonDeadPet(uint32 i);
  1936. void SpellEffectDestroyAllTotems(uint32 i);
  1937. + void SpellEffectDurabilityDamage(uint32 i);
  1938. + void SpellEffectDurabilityDamagePCT(uint32 i);
  1939. void SpellEffectSummonDemon(uint32 i);
  1940. void SpellEffectResurrectNew(uint32 i);
  1941. void SpellEffectAttackMe(uint32 i);
  1942. Index: src/arcemu-world/SpellAuras.cpp
  1943. ===================================================================
  1944. --- src/arcemu-world/SpellAuras.cpp (revision 3116)
  1945. +++ src/arcemu-world/SpellAuras.cpp (working copy)
  1946. @@ -4052,6 +4052,30 @@
  1947. }
  1948. }
  1949.  
  1950. +void Aura::EventPeriodicTriggerDummy()
  1951. +{
  1952. + switch( GetSpellProto()->NameHash )
  1953. + {
  1954. + case SPELL_HASH_DEMONIC_CIRCLE__SUMMON:
  1955. + {
  1956. + GameObject * circle = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
  1957. + SpellEntry * sp = dbcSpell.LookupEntryForced(62388);
  1958. + if(circle && m_target->CalcDistance(circle) <= 40)
  1959. + {
  1960. + if(!m_target->HasAura(62388))
  1961. + {
  1962. + Aura * N = new Aura(sp, -1, m_target, m_target);
  1963. + m_target->AddAura(N);
  1964. + }
  1965. + }
  1966. + else
  1967. + {
  1968. + m_target->RemoveAura(62388);
  1969. + }
  1970. + }break;
  1971. + }
  1972. +}
  1973. +
  1974. void Aura::SpellAuraModPacify(bool apply)
  1975. {
  1976. // Can't Attack
  1977. @@ -5804,6 +5828,12 @@
  1978. }
  1979. }
  1980. p_target->setDeathState(ALIVE);
  1981. + p_target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_COMBAT);
  1982. + if(p_target->hasStateFlag(UF_ATTACKING))
  1983. + p_target->clearStateFlag(UF_ATTACKING);
  1984. +
  1985. + p_target->GetSession()->OutPacket(SMSG_CANCEL_COMBAT);
  1986. + p_target->GetSession()->OutPacket(SMSG_CANCEL_AUTO_REPEAT);
  1987. }
  1988. else
  1989. {
  1990. @@ -6074,6 +6104,20 @@
  1991. }
  1992. else
  1993. SetNegative();
  1994. + // Demonic Circle: Teleport
  1995. + if (m_spellProto->Id == 48020)
  1996. + {
  1997. + if (!m_target->IsPlayer())
  1998. + return;
  1999. + if (apply)
  2000. + {
  2001. + GameObject* obj = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
  2002. + if(obj == 0)
  2003. + return;
  2004. + if (m_target->CalcDistance(obj) <= 40)
  2005. + ((Player*)m_target)->SafeTeleport(obj->GetMapId(), obj->GetInstanceID(), obj->GetPositionX(),obj->GetPositionY(),obj->GetPositionZ(),m_target->GetOrientation());
  2006. + }
  2007. + }
  2008. }
  2009. else
  2010. m_target->MechanicsDispels[mod->m_miscValue]--;
  2011. @@ -6312,6 +6356,26 @@
  2012. {
  2013. switch( m_spellProto->NameHash )
  2014. {
  2015. + case SPELL_HASH_DEMONIC_CIRCLE__SUMMON:
  2016. + {
  2017. + if (apply)
  2018. + {
  2019. + sEventMgr.AddEvent(this, &Aura::EventPeriodicTriggerDummy, EVENT_UNK, 1000, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
  2020. + }
  2021. + else
  2022. + {
  2023. + sEventMgr.RemoveEvents(this);
  2024. + m_target->RemoveAura(62388);
  2025. +
  2026. + if(!m_target->m_ObjectSlots[0])
  2027. + return;
  2028. + GameObject * Obj = m_target->GetMapMgr()->GetGameObject(m_target->m_ObjectSlots[0]);
  2029. + if(Obj != 0)
  2030. + Obj->Delete();
  2031. + }
  2032. +
  2033. + }break;
  2034. +
  2035. case SPELL_HASH_ASPECT_OF_THE_VIPER:
  2036. if( p_target )
  2037. {
  2038. @@ -6420,11 +6484,14 @@
  2039.  
  2040. void Aura::EventPeriodicDrink(uint32 amount)
  2041. {
  2042. - uint32 v = m_target->GetPower( POWER_TYPE_MANA ) + amount;
  2043. + if ( !m_target )
  2044. + return;
  2045.  
  2046. - if( v > m_target->GetMaxPower( POWER_TYPE_MANA ) )
  2047. - v = m_target->GetMaxPower( POWER_TYPE_MANA );
  2048. + uint32 v = m_target->GetUInt32Value(UNIT_FIELD_POWER1) + amount;
  2049. + if( v > m_target->GetUInt32Value(UNIT_FIELD_MAXPOWER1) )
  2050. + v = m_target->GetUInt32Value(UNIT_FIELD_MAXPOWER1);
  2051.  
  2052. +
  2053. m_target->SetPower( POWER_TYPE_MANA, v);
  2054. }
  2055.  
  2056. Index: src/arcemu-world/SpellAuras.h
  2057. ===================================================================
  2058. --- src/arcemu-world/SpellAuras.h (revision 3116)
  2059. +++ src/arcemu-world/SpellAuras.h (working copy)
  2060. @@ -737,6 +737,7 @@
  2061. void EventPeriodicHealPct(float);
  2062. void EventPeriodicManaPct(float);
  2063. void EventPeriodicRegenManaStatPct(uint32 perc,uint32 stat);
  2064. + void EventPeriodicTriggerDummy();
  2065. void RelocateEvents();
  2066. int32 event_GetInstanceID();
  2067.  
  2068. Index: src/arcemu-world/SpellEffects.cpp
  2069. ===================================================================
  2070. --- src/arcemu-world/SpellEffects.cpp (revision 3116)
  2071. +++ src/arcemu-world/SpellEffects.cpp (working copy)
  2072. @@ -60,7 +60,7 @@
  2073. &Spell::SpellEffectLearnSpell, //SPELL_EFFECT_LEARN_SPELL - 36
  2074. &Spell::SpellEffectSpellDefense, //SPELL_EFFECT_SPELL_DEFENSE - 37
  2075. &Spell::SpellEffectDispel, //SPELL_EFFECT_DISPEL - 38
  2076. - &Spell::SpellEffectNULL, //SPELL_EFFECT_LANGUAGE - 39
  2077. + &Spell::SpellEffectNULL, //SPELL_EFFECT_LANGUAGE - 39
  2078. &Spell::SpellEffectDualWield, //SPELL_EFFECT_DUAL_WIELD - 40
  2079. &Spell::SpellEffectSummonWild, //SPELL_EFFECT_SUMMON_WILD - 41
  2080. &Spell::SpellEffectSummonGuardian, //SPELL_EFFECT_SUMMON_GUARDIAN - 42
  2081. @@ -132,11 +132,11 @@
  2082. &Spell::SpellEffectDispelMechanic, //SPELL_EFFECT_DISPEL_MECHANIC - 108
  2083. &Spell::SpellEffectSummonDeadPet, //SPELL_EFFECT_SUMMON_DEAD_PET - 109
  2084. &Spell::SpellEffectDestroyAllTotems, //SPELL_EFFECT_DESTROY_ALL_TOTEMS - 110
  2085. - &Spell::SpellEffectNULL, //SPELL_EFFECT_DURABILITY_DAMAGE - 111
  2086. + &Spell::SpellEffectDurabilityDamage, //SPELL_EFFECT_DURABILITY_DAMAGE - 111
  2087. &Spell::SpellEffectSummonDemon, //SPELL_EFFECT_SUMMON_DEMON - 112
  2088. &Spell::SpellEffectResurrectNew, //SPELL_EFFECT_RESURRECT_NEW - 113
  2089. &Spell::SpellEffectAttackMe, //SPELL_EFFECT_ATTACK_ME - 114
  2090. - &Spell::SpellEffectNULL, //SPELL_EFFECT_DURABILITY_DAMAGE_PCT - 115
  2091. + &Spell::SpellEffectDurabilityDamagePCT, //SPELL_EFFECT_DURABILITY_DAMAGE_PCT - 115
  2092. &Spell::SpellEffectSkinPlayerCorpse, //SPELL_EFFECT_SKIN_PLAYER_CORPSE - 116
  2093. &Spell::SpellEffectNULL, //SPELL_EFFECT_SPIRIT_HEAL - 117//Not used
  2094. &Spell::SpellEffectSkill, //SPELL_EFFECT_SKILL - 118
  2095. @@ -146,7 +146,7 @@
  2096. &Spell::SpellEffectNULL, // unknown - 122 //not used
  2097. &Spell::SpellEffectFilming, //SPELL_EFFECT_FILMING - 123 // http://www.thottbot.com/?sp=27998: flightpath
  2098. &Spell::SpellEffectPlayerPull, //SPELL_EFFECT_PLAYER_PULL - 124 - http://thottbot.com/e2312
  2099. - &Spell::SpellEffectReduceThreatPercent, //SPELL_EFFECT_REDUCE_THREAT_PERCENT - 125 // Reduce Threat by % //http://www.thottbot.com/?sp=32835
  2100. + &Spell::SpellEffectReduceThreatPercent, //SPELL_EFFECT_REDUCE_THREAT_PERCENT - 125 // Reduce Threat by % //http://www.thottbot.com/?sp=32835
  2101. &Spell::SpellEffectSpellSteal, //SPELL_EFFECT_SPELL_STEAL - 126 // Steal Beneficial Buff (Magic) //http://www.thottbot.com/?sp=30449
  2102. &Spell::SpellEffectProspecting, // unknown - 127 // Search 5 ore of a base metal for precious gems. This will destroy the ore in the process.
  2103. &Spell::SpellEffectApplyAura128, // unknown - 128 // Adjust a stats by %: Mod Stat // ITS FLAT
  2104. @@ -453,9 +453,6 @@
  2105. // moar cheaters
  2106. if( !p_caster || (u_caster && u_caster->IsPet() ) )
  2107. return;
  2108. -
  2109. - if( p_caster->GetSession()->GetPermissionCount() == 0 )
  2110. - return;
  2111. }
  2112. }
  2113. //instant kill effects don't have a log
  2114. @@ -477,6 +474,7 @@
  2115.  
  2116. uint32 dmg = 0;
  2117. bool static_damage = false;
  2118. + bool force_crit = false;
  2119.  
  2120. if(GetProto()->EffectChainTarget[i])//chain
  2121. {
  2122. @@ -630,10 +628,26 @@
  2123. break;
  2124.  
  2125. case SPELL_HASH_JUDGEMENT_OF_COMMAND:
  2126. - if( !unitTarget->IsStunned() )
  2127. - dmg = dmg >> 1;
  2128. + {
  2129. + if( !unitTarget->IsStunned() )
  2130. + dmg = dmg >> 1;
  2131. + }
  2132. break;
  2133.  
  2134. + case SPELL_HASH_EXORCISM:
  2135. + {
  2136. + if( p_caster != NULL )
  2137. + {
  2138. + float sph = (float)(p_caster->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1));
  2139. + float ap = (float)(p_caster->GetAP());
  2140. + dmg += float2int32((0.15f * sph) + (0.15f * ap));
  2141. + if(unitTarget && (TO_CREATURE(unitTarget)->GetCreatureInfo()->Type == UNIT_TYPE_UNDEAD ||
  2142. + TO_CREATURE(unitTarget)->GetCreatureInfo()->Type == UNIT_TYPE_DEMON))
  2143. + force_crit = true;
  2144. + }
  2145. + }
  2146. + break;
  2147. +
  2148. default:
  2149. break;
  2150. }
  2151. @@ -720,7 +734,7 @@
  2152. _type = MELEE;
  2153. }
  2154.  
  2155. - u_caster->Strike( unitTarget, _type, GetProto(), 0, 0, dmg, pSpellId == 0, true );
  2156. + u_caster->Strike( unitTarget, _type, GetProto(), 0, 0, dmg, pSpellId == 0, true, force_crit );
  2157. }
  2158. }
  2159. }
  2160. @@ -1319,7 +1333,7 @@
  2161. }
  2162. else
  2163. {
  2164. - summon->CreateAsSummon(26125, ci, NULL, p_caster, GetProto(), 6, 120, vec); // 2 min duration
  2165. + summon->CreateAsSummon(26125, ci, NULL, p_caster, GetProto(), 6, 60, vec); // 1 min duration
  2166. }
  2167. summon->CastSpell(summon,50142,true);
  2168. if(vec) delete vec;
  2169. @@ -1394,6 +1408,18 @@
  2170. unitTarget->GetAIInterface()->taunt(u_caster,true);
  2171. }
  2172. }break;
  2173. + // Bloodworms
  2174. + case 50452:
  2175. + {
  2176. + if(!u_caster || !u_caster->isAlive() || !unitTarget)
  2177. + return;
  2178. +
  2179. + uint32 cnt = (2 + RandomUInt(2)); // 2 - 4 worms
  2180. + for(uint8 j = 0; j < cnt; j++)
  2181. + {
  2182. + SpellEffectSummon(i);
  2183. + }
  2184. + }break;
  2185. /*************************
  2186. Non-Class spells
  2187. - Done
  2188. @@ -1665,365 +1691,7 @@
  2189. Spell * spe = new Spell(u_caster,inf,true,NULL);
  2190. spe->prepare(&tgt);
  2191. }break;
  2192. - /*************************
  2193. - Non-Class spells
  2194. - - ToDo
  2195. - *************************/
  2196. - case 6668:// Red Firework
  2197. - {
  2198. - // Shoots a firework into the air that bursts into a thousand red stars
  2199. - }break;
  2200. - case 8344:// Universal Remote
  2201. - {
  2202. - //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.
  2203. - }break;
  2204. - case 9976:// Polly Eats the E.C.A.C.
  2205. - {
  2206. - //FIX ME: Don't know what this does
  2207. - }break;
  2208. - case 10137:// Fizzule's Whistle
  2209. - {
  2210. - //FIXME:Blow on the whistle to let Fizzule know you're an ally
  2211. - //This item comes after a finish of quest at venture co.
  2212. - //You must whistle this every time you reach there to make Fizzule
  2213. - //ally to you.
  2214. - }break;
  2215. - case 11540:// Blue Firework
  2216. - {
  2217. - //Shoots a firework into the air that bursts into a thousand blue stars
  2218. - }break;
  2219. - case 11541:// Green Firework
  2220. - {
  2221. - //Shoots a firework into the air that bursts into a thousand green stars
  2222. - }break;
  2223. - case 11542:// Red Streaks Firework
  2224. - {
  2225. - //Shoots a firework into the air that bursts into a thousand red streaks
  2226. - }break;
  2227. - case 11543:// Red, White and Blue Firework
  2228. - {
  2229. - //Shoots a firework into the air that bursts into red, white and blue stars
  2230. - }break;
  2231. - case 11544:// Yellow Rose Firework
  2232. - {
  2233. - //Shoots a firework into the air that bursts in a yellow pattern
  2234. - }break;
  2235. - case 12151:// Summon Atal'ai Skeleton
  2236. - {
  2237. - //8324 Atal'ai Skeleton
  2238. -
  2239. - //FIXME:Add here remove in time event
  2240. - }break;
  2241. - case 13006:// Shrink Ray
  2242. - {
  2243. - //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...
  2244. - //-Make you bigger (attack power +250)
  2245. - //-Make you smaller (attack power -250)
  2246. - //-Make them bigger (same effect as above)
  2247. - //-Make your entire party bigger
  2248. - //-Make your entire party smaller
  2249. - //-Make every attacking enemy bigger
  2250. - //-Make ever attacking enemy smaller
  2251. - //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.
  2252. - //Search for spells of this
  2253. -
  2254. -
  2255. - //13004 - grow <- this one
  2256. - //13010 - shrink <-this one
  2257. - //
  2258. - }break;
  2259. - case 13180:// Gnomish Mind Control Cap
  2260. - {
  2261. - // FIXME:Take control of humanoid target by chance(it can be player)
  2262. - }break;
  2263. - case 13278:// Gnomish Death Ray
  2264. - {
  2265. - // FIXME:The devices charges over time using your life force and then directs a burst of energy at your opponent
  2266. - //Drops life
  2267. - }break;
  2268. - case 13280:// Gnomish Death Ray
  2269. - {
  2270. - //FIX ME: Drop life
  2271. - }break;
  2272. - case 17816:// Sharp Dresser
  2273. - {
  2274. - //Impress others with your fashion sense
  2275. - }break;
  2276. - case 21343:// Snowball
  2277. - {
  2278. - }break;
  2279. - case 23645:// Hourglass Sand
  2280. - {
  2281. - //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
  2282. - }break;
  2283. - case 24325:// Pagle's Point Cast - Create Mudskunk Lure
  2284. - {
  2285. - //FIXME:Load with 5 Zulian Mudskunks, and then cast from Pagle's Point in Zul'Gurub
  2286. - }
  2287. - case 24392:// Frosty Zap
  2288. - {
  2289. - //FIXME:Your Frostbolt spells have a 6% chance to restore 50 mana when cast.
  2290. - //damage == 50
  2291. - }break;
  2292. - case 25822:// Firecrackers
  2293. - {
  2294. - //FIXME:Find firecrackers
  2295. - }break;
  2296. - case 26373:// Lunar Invitation
  2297. - {
  2298. - //FIX ME: Teleports the caster from within Greater Moonlight
  2299. - }break;
  2300. - case 26374:// Elune's Candle
  2301. - {
  2302. - //FIXME:Shoots a firework at target
  2303. - }break;
  2304. - case 26889:// Give Friendship Bracelet
  2305. - {
  2306. - //Give to a Heartbroken player to cheer them up
  2307. - //laugh emote
  2308. - }break;
  2309. - case 27662:// Throw Cupid's Dart
  2310. - {
  2311. - //FIXME:Shoot a player, and Kwee Q. Peddlefeet will find them! (Only works on players with no current critter pets.)
  2312. - }break;
  2313. - case 28414:// Call Ashbringer
  2314. - {
  2315. - //http://www.thottbot.com/?i=53974
  2316. - }break;
  2317. - case 28806:// Toss Fuel on Bonfire
  2318. - {
  2319. - //FIXME:Dont know what this dummy does
  2320. - }break;
  2321. - case 7669:// Bethor's Potion
  2322. - {
  2323. - // related to Hex of Ravenclaw,
  2324. - // its a dispell spell.
  2325. - //FIXME:Dont know what's the usage of this dummy
  2326. - }break;
  2327. - case 8283:// Snufflenose Command
  2328. - {
  2329. - //FIXME:Quest Blueleaf Tubers
  2330. - //For use on a Snufflenose Gopher
  2331. - }break;
  2332. - case 8913:// Sacred Cleansing
  2333. - {
  2334. - //FIXME:Removes the protective enchantments around Morbent Fel
  2335. - //Quest Morbent Fel
  2336. - }break;
  2337. - case 9962://Capture Treant
  2338. - {
  2339. - //Quest Treant Muisek
  2340. - }break;
  2341. - case 10113:// Flare Gun's flare
  2342. - {
  2343. - //FIXME:Quest Deep Cover
  2344. - //1543 may need to cast this
  2345. - //2 flares and the /salute
  2346. - }break;
  2347. - case 10617:// Release Rageclaw
  2348. - {
  2349. - //Quest Druid of the Claw
  2350. - //Use on the fallen body of Rageclaw
  2351. - }break;
  2352. - case 11402:// Shay's Bell
  2353. - {
  2354. - //FIXME:Quest Wandering Shay
  2355. - //Ring to call Shay back to you
  2356. - }break;
  2357. - case 11548:// Summon Spider God
  2358. - {
  2359. - //FIXME:Quest Summoning Shadra (Elite)
  2360. - //Use at the Shadra'Alor Altar to summon the spider god
  2361. - }break;
  2362. - case 11610:// Gammerita Turtle Camera
  2363. - {
  2364. - //Quest The Super Snapper FX
  2365. - }break;
  2366. - case 11886:// Capture Wildkin
  2367. - {
  2368. - //Quest Testing the Vessel
  2369. - //Shrink and Capture a Fallen Wildkin
  2370. - }break;
  2371. - case 11887:// Capture Hippogryph
  2372. - {
  2373. - //FIXME:Same with 11888
  2374. - //Quest Hippogryph Muisek
  2375. - }break;
  2376. - case 11888:// Capture Faerie Dragon
  2377. - {
  2378. - //FIXME:Check Faerie Dragon Muisek is killed or not if its killed update quest
  2379. - //And allow create of fearie Dragon which is effect 1
  2380. - //Quest: Faerie Dragon Muisek
  2381. - }break;
  2382. - case 11889:// Capture Mountain Giant
  2383. - {
  2384. - //FIXME:Same with 11888
  2385. - //Quest: Mountain Giant Muisek
  2386. - }break;
  2387. - case 12189:// Summon Echeyakee
  2388. - {
  2389. - //3475 Echeyakee
  2390. -
  2391. - //FIXME:Quest Echeyakee
  2392. - }break;
  2393. - case 12283:// Xiggs Signal Flare
  2394. - {
  2395. - //Quest Signal for Pickup
  2396. - //To be used at the makeshift helipad in Azshara. It will summon Pilot Xiggs Fuselighter to pick up the tablet rubbings
  2397. - }break;
  2398. - case 12938:// Fel Curse
  2399. - {
  2400. - //FIXME:Makes near target killable(servants of Razelikh the Defiler)
  2401. - }break;
  2402. - case 14247:// Blazerunner Dispel
  2403. - {
  2404. - //FIXME:Quest Aquementas and some more
  2405. - }break;
  2406. - case 14250:// Capture Grark
  2407. - {
  2408. - //Quest Precarious Predicament
  2409. - }break;
  2410. - case 14813:// Rocknot's Ale
  2411. - {
  2412. - //you throw the mug
  2413. - //and the guy gets pissed well everyone gets pissed and he crushes the door so you can get past
  2414. - //maybe after like 30 seconds so you can get past. but like I said I have never done it myself
  2415. - //so I am not 100% sure what happens.
  2416. - }break;
  2417. - case 15991://Revive Ringo
  2418. - {
  2419. - //Quest A Little Help From My Friends
  2420. - //Revive Ringo with water
  2421. - }break;
  2422. - case 15998:// Capture Worg Pup
  2423. - {
  2424. - //FIXME:Ends Kibler's Exotic Pets (Dungeon) quest
  2425. - }break;
  2426. - case 16031:// Releasing Corrupt Ooze
  2427. - {
  2428. - //FIXME:Released ooze moves to master ooze and "Merged Ooze Sample"
  2429. - //occurs after some time.This item helps to finish quest
  2430. - }break;
  2431. - case 16378:// Temperature Reading
  2432. - {
  2433. - //FIXME:Quest Finding the Source
  2434. - //Take a reading of the temperature at a hot spot.
  2435. - }break;
  2436. - case 17166:// Release Umi's Yeti
  2437. - {
  2438. - //Quest Are We There, Yeti?
  2439. - //Select Umi's friend and click to release the Mechanical Yeti
  2440. - }break;
  2441. - case 17271:// Test Fetid Skull
  2442. - {
  2443. - //FIXME:Marauders of Darrowshire
  2444. - //Wave over a Fetid skull to test its resonance
  2445. - }break;
  2446. - case 18153:// Kodo Kombobulator
  2447. - {
  2448. - //FIXME:Kodo Roundup Quest
  2449. - //Kodo Kombobulator on any Ancient, Aged, or Dying Kodo to lure the Kodo to follow (one at a time)
  2450. - }break;
  2451. - case 19250:// Placing Smokey's Explosives
  2452. - {
  2453. - //This is something related to quest i think
  2454. - }break;
  2455. - case 19512:// Apply Salve
  2456. - {
  2457. - //FIXME:Cure a sickly animal afflicted by the taint of poisoning
  2458. - }break;
  2459. - case 20804:// Triage
  2460. - {
  2461. - //Quest Triage
  2462. - //Use on Injured, Badly Injured, and Critically Injured Soldiers
  2463. - }break;
  2464. - case 21050:// Melodious Rapture
  2465. - {
  2466. - //Quest Deeprun Rat Roundup
  2467. - }break;
  2468. - case 21332:// Aspect of Neptulon
  2469. - {
  2470. - //FIXME:Used on plagued water elementals in Eastern Plaguelands
  2471. - //Quest:Poisoned Water
  2472. - }break;
  2473. - case 21960:// Manifest Spirit
  2474. - {
  2475. - //FIXME:Forces the spirits of the first centaur Kahns to manifest in the physical world
  2476. - //thats a quest
  2477. - //its for maraudon i think
  2478. - //u use that on the spirit mobs
  2479. - //to release them
  2480. - }break;
  2481. - case 23359:// Transmogrify!
  2482. - {
  2483. - //Quest Zapped Giants
  2484. - //Zap a Feralas giant into a more manageable form
  2485. - }break;
  2486. - case 27184:// Summon Mor Grayhoof
  2487. - {
  2488. - //16044 Mor Grayhoof Trigger
  2489. - //16080 Mor Grayhoof
  2490. -
  2491. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2492. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2493. - }break;
  2494. - case 27190:// Summon Isalien
  2495. - {
  2496. - //16045 Isalien Trigger
  2497. - //16097 Isalien
  2498. -
  2499. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2500. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2501. - }break;
  2502. - case 27191:// Summon the remains of Jarien and Sothos
  2503. - {
  2504. - /*
  2505. - 16046 Jarien and Sothos Trigger
  2506. - 16101 Jarien
  2507. - 16103 Spirit of Jarien
  2508. -
  2509. - 16102 Sothos
  2510. - 16104 Spirit of Sothos
  2511. - */
  2512. -
  2513. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2514. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2515. - }break;
  2516. - case 27201:// Summon the spirit of Kormok
  2517. - {
  2518. - /*16047 Kormok Trigger
  2519. - 16118 Kormok
  2520. - */
  2521. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2522. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2523. - }break;
  2524. - case 27202:// Summon Lord Valthalak
  2525. - {
  2526. - /*
  2527. - 16042 Lord Valthalak
  2528. - 16048 Lord Valthalak Trigger
  2529. - 16073 Spirit of Lord Valthalak
  2530. -
  2531. - */
  2532. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2533. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2534. - }break;
  2535. - case 27203:// Summon the spirits of the dead at haunted locations
  2536. - {
  2537. - //Related to quests The Left Piece of Lord Valthalak's Amulet (Dungeon)
  2538. - //and The Right Piece of Lord Valthalak's Amulet (Dungeon)
  2539. - }break;
  2540. - case 27517:// Use this banner at the Arena in Blackrock Depths to challenge Theldren
  2541. - {
  2542. - //This is used to make Theldren spawn at the place where it used
  2543. - //I couldn't find theldrin, and his men in creature names database
  2544. - //Someone has to write this and this is related to The Challenge quest
  2545. - /*By moving to the center grate, you trigger the arena event.
  2546. - A random group of mobs (spiders, worms, bats, raptors) spawns,
  2547. - and you have to kill them. After the last one dies, and a small
  2548. - break, a boss mob spawns. Successfully completing this event
  2549. - turns the arena spectators from red to yellow*/
  2550. - }break;
  2551. +
  2552. case 29858: //Soulshatter
  2553. {
  2554. if( !u_caster || !u_caster->isAlive() || !unitTarget || !unitTarget->isAlive() )
  2555. @@ -3017,9 +2685,6 @@
  2556. skill = SKILL_WANDS;
  2557. spell = SPELL_RANGED_GENERAL;
  2558. }break;
  2559. - //case 3386: // spears
  2560. - // skill = 0; // ??!!
  2561. - // break;
  2562. default:
  2563. {
  2564. skill = 0;
  2565. @@ -4916,24 +4581,61 @@
  2566. }
  2567. }
  2568. }
  2569. - // FIXME:This thing prevent target from spell casting too but cant find.
  2570. +
  2571. uint32 school = 0;
  2572. + uint32 prevtype = 0;
  2573. if(unitTarget->GetCurrentSpell())
  2574. {
  2575. - school=unitTarget->GetCurrentSpell()->GetProto()->School;
  2576. + prevtype = unitTarget->GetCurrentSpell()->GetProto()->PreventionType;
  2577. +
  2578. + if((GetProto()->InterruptFlags & CAST_INTERRUPT_ON_INTERRUPT_SCHOOL) && (prevtype == PREVENTION_TYPE_SILENCE))
  2579. + {
  2580. + school = unitTarget->GetCurrentSpell()->GetProto()->School;
  2581. + }
  2582. +
  2583. unitTarget->GetCurrentSpell()->cancel();
  2584. }
  2585. if(school)//prevent from casts in this school
  2586. {
  2587. int32 duration = GetDuration();
  2588. - if(unitTarget->IsPlayer()){ // Check for interruption reducing talents
  2589. + if(unitTarget->IsPlayer())
  2590. + {
  2591. int32 DurationModifier = static_cast< Player* >( unitTarget )->MechanicDurationPctMod[MECHANIC_INTERRUPTED];
  2592. if(DurationModifier >= - 100)
  2593. duration = (duration * (100 + DurationModifier)) / 100;
  2594. }
  2595. +
  2596. unitTarget->SchoolCastPrevent[school] = duration + getMSTime();
  2597. - // TODO: visual!
  2598. +
  2599. + if(unitTarget->IsPlayer())
  2600. + {
  2601. + TO_PLAYER(unitTarget)->SendPreventSchoolCast(school, duration + getMSTime());
  2602. + }
  2603. }
  2604. + else if((GetProto()->InterruptFlags & CAST_INTERRUPT_ON_INTERRUPT_ALL) && (prevtype == PREVENTION_TYPE_SILENCE))
  2605. + {
  2606. + int32 duration = GetDuration();
  2607. +
  2608. + if(unitTarget->IsPlayer())
  2609. + {
  2610. + // Check for interruption reducing talents
  2611. + int32 DurationModifier = static_cast< Player* >( unitTarget )->MechanicDurationPctMod[MECHANIC_INTERRUPTED];
  2612. +
  2613. + if(DurationModifier >= - 100)
  2614. + duration = (duration * (100 + DurationModifier)) / 100;
  2615. + }
  2616. +
  2617. + for( uint8 j = 0; j < 7; j++)
  2618. + {
  2619. + unitTarget->SchoolCastPrevent[j] = duration + getMSTime();
  2620. + if(unitTarget->IsPlayer())
  2621. + {
  2622. + TO_PLAYER(unitTarget)->SendPreventSchoolCast(j, duration + getMSTime());
  2623. + }
  2624. + }
  2625. + }
  2626. +
  2627. + return;
  2628. }
  2629.  
  2630. void Spell::SpellEffectDistract(uint32 i) // Distract
  2631. @@ -5820,7 +5522,7 @@
  2632.  
  2633. void Spell::SpellEffectActivateObject(uint32 i) // Activate Object
  2634. {
  2635. - /*if(!p_caster)
  2636. +/* if(!p_caster)
  2637. return;
  2638.  
  2639. if(!gameObjTarget)
  2640. @@ -6131,10 +5833,10 @@
  2641. if( !Enchantment )
  2642. return;
  2643.  
  2644. - /* Windfury Totem removed in 3.0.2
  2645. - 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
  2646. - return;
  2647. - */
  2648. + //Windfury totem effect no longer exists it gives haste
  2649. + //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
  2650. + //return;
  2651. +
  2652.  
  2653. item->RemoveEnchantment( 1 );
  2654. item->AddEnchantment( Enchantment, Duration, false, true, false, 1 );
  2655. @@ -6355,7 +6057,7 @@
  2656. if(proportion)
  2657. {
  2658. value1 = value1 / (10 * proportion);
  2659. - value2 = value2 / 10 * proportion;
  2660. + value2 = value2 / (10 * proportion);
  2661. }
  2662. else
  2663. {
  2664. @@ -6367,7 +6069,7 @@
  2665. dy = cosf(m_caster->GetOrientation());
  2666.  
  2667. WorldPacket data(SMSG_MOVE_KNOCK_BACK, 50);
  2668. - data << unitTarget->GetNewGUID();
  2669. + data << playerTarget->GetNewGUID();
  2670. data << getMSTime();
  2671. data << dy << dx;
  2672. data << value1;
  2673. @@ -7394,4 +7096,193 @@
  2674. p_caster->GetSession()->SendPacket(&data);
  2675. p_caster->SetPower( p_caster->GetPowerType(), 0);
  2676. p_caster->SendPowerUpdate(false);
  2677. -}
  2678. \ No newline at end of file
  2679. +}
  2680. +
  2681. +void Spell::SpellEffectDurabilityDamage(uint32 i)
  2682. +{
  2683. + if(!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
  2684. + return;
  2685. +
  2686. + int16 slot = static_cast<int16>(GetProto()->EffectMiscValue[i]);
  2687. +
  2688. + Item * pItem;
  2689. + Container * pContainer;
  2690. + uint32 j, k;
  2691. +
  2692. + // FIXME: some spells effects have value -1/-2
  2693. + // Possibly its mean -1 all player equipped items and -2 all items
  2694. + if(slot < 0)
  2695. + {
  2696. + for( k = 0; k < MAX_INVENTORY_SLOT; k++ )
  2697. + {
  2698. + pItem = p_caster->GetItemInterface()->GetInventoryItem( static_cast<uint16>( k ) );
  2699. + if( pItem != NULL )
  2700. + {
  2701. + if( pItem->IsContainer() )
  2702. + {
  2703. + pContainer = static_cast<Container*>( pItem );
  2704. + for( j = 0; j < pContainer->GetProto()->ContainerSlots; ++j )
  2705. + {
  2706. + pItem = pContainer->GetItem( static_cast<uint16>( j ) );
  2707. + if( pItem != NULL )
  2708. + {
  2709. + uint32 maxdur = pItem->GetDurabilityMax();
  2710. + uint32 olddur = pItem->GetDurability();
  2711. + uint32 newdur = (olddur) - (damage);
  2712. +
  2713. + if(newdur < 0)
  2714. + newdur = 0;
  2715. +
  2716. + if( newdur > maxdur )
  2717. + newdur = maxdur;
  2718. +
  2719. + pItem->SetDurability(newdur);
  2720. + }
  2721. + }
  2722. + }
  2723. + else
  2724. + {
  2725. + uint32 maxdur = pItem->GetDurabilityMax();
  2726. + uint32 olddur = pItem->GetDurability();
  2727. + uint32 newdur = (olddur) - (damage);
  2728. +
  2729. + if(newdur < 0)
  2730. + newdur = 0;
  2731. +
  2732. + if( newdur > maxdur )
  2733. + newdur = maxdur;
  2734. +
  2735. + // Apply / Disapply enchantements from this item
  2736. + pItem->SetDurability(newdur);
  2737. + if( newdur == 0 && olddur > 0 )
  2738. + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), false );
  2739. + else if( newdur > 0 && olddur == 0 )
  2740. + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), true );
  2741. + }
  2742. + }
  2743. + }
  2744. + return;
  2745. + }
  2746. +
  2747. + // invalid slot value
  2748. + if(slot >= INVENTORY_SLOT_BAG_END)
  2749. + return;
  2750. +
  2751. + pItem = p_caster->GetItemInterface()->GetInventoryItem( slot );
  2752. + if( pItem )
  2753. + {
  2754. + uint32 maxdur = pItem->GetDurabilityMax();
  2755. + uint32 olddur = pItem->GetDurability();
  2756. + uint32 newdur = (olddur) - (damage);
  2757. +
  2758. + if(newdur < 0)
  2759. + newdur = 0;
  2760. +
  2761. + if( newdur > maxdur )
  2762. + newdur = maxdur;
  2763. +
  2764. + pItem->SetDurability(newdur);
  2765. +
  2766. + // Apply / Disapply enchantements from this item
  2767. + if( newdur == 0 && olddur > 0 )
  2768. + p_caster->ApplyItemMods( pItem, slot, false );
  2769. + else if( newdur > 0 && olddur == 0 )
  2770. + p_caster->ApplyItemMods( pItem, slot, true );
  2771. + }
  2772. +}
  2773. +
  2774. +void Spell::SpellEffectDurabilityDamagePCT(uint32 i)
  2775. +{
  2776. + if(!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
  2777. + return;
  2778. +
  2779. + int16 slot = static_cast<int16>(GetProto()->EffectMiscValue[i]);
  2780. +
  2781. + Item * pItem;
  2782. + Container * pContainer;
  2783. + uint32 j, k;
  2784. +
  2785. + // FIXME: some spells effects have value -1/-2
  2786. + // Possibly its mean -1 all player equipped items and -2 all items
  2787. + if(slot < 0)
  2788. + {
  2789. + for( k = 0; k < MAX_INVENTORY_SLOT; k++ )
  2790. + {
  2791. + pItem = p_caster->GetItemInterface()->GetInventoryItem( static_cast<uint16>( k ) );
  2792. + if( pItem != NULL )
  2793. + {
  2794. + if( pItem->IsContainer() )
  2795. + {
  2796. + pContainer = static_cast<Container*>( pItem );
  2797. + for( j = 0; j < pContainer->GetProto()->ContainerSlots; ++j )
  2798. + {
  2799. + pItem = pContainer->GetItem( static_cast<uint16>( j ) );
  2800. + if( pItem != NULL )
  2801. + {
  2802. + uint32 maxdur = pItem->GetDurabilityMax();
  2803. + uint32 olddur = pItem->GetDurability();
  2804. + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
  2805. +
  2806. + if(newdur < 0)
  2807. + newdur = 0;
  2808. +
  2809. + if( newdur > maxdur )
  2810. + newdur = maxdur;
  2811. +
  2812. + pItem->SetDurability(newdur);
  2813. + }
  2814. + }
  2815. + }
  2816. + else
  2817. + {
  2818. + uint32 maxdur = pItem->GetDurabilityMax();
  2819. + uint32 olddur = pItem->GetDurability();
  2820. + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
  2821. +
  2822. + if(newdur < 0)
  2823. + newdur = 0;
  2824. +
  2825. + if( newdur > maxdur )
  2826. + newdur = maxdur;
  2827. +
  2828. + // Apply / Disapply enchantements from this item
  2829. + pItem->SetDurability(newdur);
  2830. + if( newdur == 0 && olddur > 0 )
  2831. + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), false );
  2832. + else if( newdur > 0 && olddur == 0 )
  2833. + p_caster->ApplyItemMods( pItem, static_cast<uint16>( k ), true );
  2834. + }
  2835. + }
  2836. + }
  2837. + return;
  2838. + }
  2839. +
  2840. + // invalid slot value
  2841. + if(slot >= INVENTORY_SLOT_BAG_END)
  2842. + return;
  2843. +
  2844. + if(damage <= 0)
  2845. + return;
  2846. +
  2847. + pItem = p_caster->GetItemInterface()->GetInventoryItem( slot );
  2848. + if( pItem )
  2849. + {
  2850. + uint32 maxdur = pItem->GetDurabilityMax();
  2851. + uint32 olddur = pItem->GetDurability();
  2852. + uint32 newdur = (olddur - (uint32)(maxdur * (damage/100.0)));
  2853. +
  2854. + if(newdur < 0)
  2855. + newdur = 0;
  2856. +
  2857. + if( newdur > maxdur )
  2858. + newdur = maxdur;
  2859. +
  2860. + pItem->SetDurability(newdur);
  2861. +
  2862. + // Apply / Disapply enchantements from this item
  2863. + if( newdur == 0 && olddur > 0 )
  2864. + p_caster->ApplyItemMods( pItem, slot, false );
  2865. + else if( newdur > 0 && olddur == 0 )
  2866. + p_caster->ApplyItemMods( pItem, slot, true );
  2867. + }
  2868. +}
  2869. Index: src/arcemu-world/SpellFixes.cpp
  2870. ===================================================================
  2871. --- src/arcemu-world/SpellFixes.cpp (revision 3116)
  2872. +++ src/arcemu-world/SpellFixes.cpp (working copy)
  2873. @@ -1271,6 +1271,35 @@
  2874. sp->rangeIndex = 4;
  2875. }
  2876.  
  2877. + // MesoX: Serendipity http://www.wowhead.com/?spell=63730
  2878. + sp = dbcSpell.LookupEntryForced( 63730 ); // Rank 1
  2879. + if( sp != NULL )
  2880. + {
  2881. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  2882. + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
  2883. + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
  2884. + sp->procChance = 100;
  2885. + sp->EffectTriggerSpell[0] = 63731;
  2886. + }
  2887. + sp = dbcSpell.LookupEntryForced( 63733 ); // Rank 2
  2888. + if( sp != NULL )
  2889. + {
  2890. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  2891. + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
  2892. + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
  2893. + sp->procChance = 100;
  2894. + sp->EffectTriggerSpell[0] = 63735;
  2895. + }
  2896. + sp = dbcSpell.LookupEntryForced( 63737 ); // Rank 2
  2897. + if( sp != NULL )
  2898. + {
  2899. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  2900. + sp->ProcOnNameHash[0] = SPELL_HASH_BINDING_HEAL;
  2901. + sp->ProcOnNameHash[1] = SPELL_HASH_FLASH_HEAL;
  2902. + sp->procChance = 100;
  2903. + sp->EffectTriggerSpell[0] = 63734;
  2904. + }
  2905. +
  2906. //////////////////////////////////////////
  2907. // SHAMAN //
  2908. //////////////////////////////////////////
  2909. @@ -1286,6 +1315,13 @@
  2910. sp->EffectImplicitTargetB[1] = 0;
  2911. }
  2912.  
  2913. + // Flametongue Weapon coef fix
  2914. + if( sp->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON || sp->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON__PASSIVE_ )
  2915. + {
  2916. + sp->fixed_dddhcoef = 0.1f;
  2917. + sp->School = 2;
  2918. + }
  2919. +
  2920. // Lightning Shield - cannot crit
  2921. if( sp->NameHash == SPELL_HASH_LIGHTNING_SHIELD ) // not a mistake, the correct proc spell for lightning shield is also called lightning shield
  2922. sp->spell_can_crit = false;
  2923. @@ -1413,57 +1449,175 @@
  2924. //SPELL COEFFICIENT SETTINGS END
  2925. /////////////////////////////////////////////////////////////////
  2926.  
  2927. - EnchantEntry* Enchantment;
  2928. + EnchantEntry * Enchantment;
  2929.  
  2930. - // Flametongue weapon
  2931. - Enchantment = dbcEnchant.LookupEntryForced( 2634 );
  2932. + /********************************************************
  2933. + * Flametongue Enchantment
  2934. + ********************************************************/
  2935. +
  2936. + // Shaman - Flametongue Weapon Rank 1
  2937. + Enchantment = dbcEnchant.LookupEntryForced( 5 );
  2938. if( Enchantment != NULL )
  2939. {
  2940. - Enchantment->type[0] = 1;
  2941. - Enchantment->spell[0] = 25488;
  2942. + // Flametongue Weapon (Passive)
  2943. + sp = dbcSpell.LookupEntryForced( 10400 );
  2944. + if( sp != NULL )
  2945. + {
  2946. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  2947. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  2948. + sp->EffectTriggerSpell[0] = 8024; //for the logs and rest
  2949. + sp->procChance = 100;
  2950. + sp->maxstack = 1;
  2951. + }
  2952. }
  2953. - Enchantment = dbcEnchant.LookupEntryForced( 1666 );
  2954. +
  2955. + // Shaman - Flametongue Weapon Rank 2
  2956. + Enchantment = dbcEnchant.LookupEntryForced( 4 );
  2957. if( Enchantment != NULL )
  2958. {
  2959. - Enchantment->type[0] = 1;
  2960. - Enchantment->spell[0] = 16344;
  2961. + // Flametongue Weapon (Passive)
  2962. + sp = dbcSpell.LookupEntryForced( 15567 );
  2963. + if( sp != NULL )
  2964. + {
  2965. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  2966. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  2967. + sp->EffectTriggerSpell[0] = 8027; //for the logs and rest
  2968. + sp->procChance = 100;
  2969. + sp->maxstack = 1;
  2970. + }
  2971. }
  2972. - Enchantment = dbcEnchant.LookupEntryForced( 1665 );
  2973. +
  2974. + // Shaman - Flametongue Weapon Rank 3
  2975. + Enchantment = dbcEnchant.LookupEntryForced( 3 );
  2976. if( Enchantment != NULL )
  2977. {
  2978. - Enchantment->type[0] = 1;
  2979. - Enchantment->spell[0] = 16343;
  2980. + // Flametongue Weapon (Passive)
  2981. + sp = dbcSpell.LookupEntryForced( 15568 );
  2982. + if( sp != NULL )
  2983. + {
  2984. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  2985. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  2986. + sp->EffectTriggerSpell[0] = 8030; //for the logs and rest
  2987. + sp->procChance = 100;
  2988. + sp->maxstack = 1;
  2989. + }
  2990. }
  2991. +
  2992. + // Shaman - Flametongue Weapon Rank 4
  2993. Enchantment = dbcEnchant.LookupEntryForced( 523 );
  2994. if( Enchantment != NULL )
  2995. {
  2996. - Enchantment->type[0] = 1;
  2997. - Enchantment->spell[0] = 10445;
  2998. + // Flametongue Weapon (Passive)
  2999. + sp = dbcSpell.LookupEntryForced( 15569 );
  3000. + if( sp != NULL )
  3001. + {
  3002. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3003. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3004. + sp->EffectTriggerSpell[0] = 16339; //for the logs and rest
  3005. + sp->procChance = 100;
  3006. + sp->maxstack = 1;
  3007. + }
  3008. }
  3009. - Enchantment = dbcEnchant.LookupEntryForced( 3 );
  3010. +
  3011. + // Shaman - Flametongue Weapon Rank 5
  3012. + Enchantment = dbcEnchant.LookupEntryForced( 1665 );
  3013. if( Enchantment != NULL )
  3014. {
  3015. - Enchantment->type[0] = 1;
  3016. - Enchantment->spell[0] = 8029;
  3017. + // Flametongue Weapon (Passive)
  3018. + sp = dbcSpell.LookupEntryForced( 16311 );
  3019. + if( sp != NULL )
  3020. + {
  3021. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3022. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3023. + sp->EffectTriggerSpell[0] = 16341; //for the logs and rest
  3024. + sp->procChance = 100;
  3025. + sp->maxstack = 1;
  3026. + }
  3027. }
  3028. - Enchantment = dbcEnchant.LookupEntryForced( 4 );
  3029. + // Shaman - Flametongue Weapon Rank 6
  3030. + Enchantment = dbcEnchant.LookupEntryForced( 1666 );
  3031. if( Enchantment != NULL )
  3032. {
  3033. - Enchantment->type[0] = 1;
  3034. - Enchantment->spell[0] = 8028;
  3035. + // Flametongue Weapon (Passive)
  3036. + sp = dbcSpell.LookupEntryForced( 16312 );
  3037. + if( sp != NULL )
  3038. + {
  3039. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3040. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3041. + sp->EffectTriggerSpell[0] = 16342; //for the logs and rest
  3042. + sp->procChance = 100;
  3043. + sp->maxstack = 1;
  3044. + }
  3045. }
  3046. - Enchantment = dbcEnchant.LookupEntryForced( 5 );
  3047. +
  3048. + // Shaman - Flametongue Weapon Rank 7
  3049. + Enchantment = dbcEnchant.LookupEntryForced( 2634 );
  3050. if( Enchantment != NULL )
  3051. {
  3052. - Enchantment->type[0] = 1;
  3053. - Enchantment->spell[0] = 8026;
  3054. + // Flametongue Weapon (Passive)
  3055. + sp = dbcSpell.LookupEntryForced( 16313 );
  3056. + if( sp != NULL )
  3057. + {
  3058. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3059. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3060. + sp->EffectTriggerSpell[0] = 25489; //for the logs and rest
  3061. + sp->procChance = 100;
  3062. + sp->maxstack = 1;
  3063. + }
  3064. }
  3065. +
  3066. + // Shaman - Flametongue Weapon Rank 8
  3067. + Enchantment = dbcEnchant.LookupEntryForced( 3779 );
  3068. + if( Enchantment != NULL )
  3069. + {
  3070. + // Flametongue Weapon (Passive)
  3071. + sp = dbcSpell.LookupEntryForced( 58784 );
  3072. + if( sp != NULL )
  3073. + {
  3074. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3075. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3076. + sp->EffectTriggerSpell[0] = 58785; //for the logs and rest
  3077. + sp->procChance = 100;
  3078. + sp->maxstack = 1;
  3079. + }
  3080. + }
  3081.  
  3082. + // Shaman - Flametongue Weapon Rank 9
  3083. + Enchantment = dbcEnchant.LookupEntryForced( 3780 );
  3084. + if( Enchantment != NULL )
  3085. + {
  3086. + // Flametongue Weapon (Passive)
  3087. + sp = dbcSpell.LookupEntryForced( 58791 );
  3088. + if( sp != NULL )
  3089. + {
  3090. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3091. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3092. + sp->EffectTriggerSpell[0] = 58789; //for the logs and rest
  3093. + sp->procChance = 100;
  3094. + sp->maxstack = 1;
  3095. + }
  3096. + }
  3097. +
  3098. + // Shaman - Flametongue Weapon Rank 10
  3099. + Enchantment = dbcEnchant.LookupEntryForced( 3781 );
  3100. + if( Enchantment != NULL )
  3101. + {
  3102. + // Flametongue Weapon (Passive)
  3103. + sp = dbcSpell.LookupEntryForced( 58792 );
  3104. + if( sp != NULL )
  3105. + {
  3106. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3107. + sp->procFlags = PROC_ON_MELEE_ATTACK; //we do not need proc on spell ;)
  3108. + sp->EffectTriggerSpell[0] = 58790; //for the logs and rest
  3109. + sp->procChance = 100;
  3110. + sp->maxstack = 1;
  3111. + }
  3112. + }
  3113. /********************************************************
  3114. * Windfury Enchantment
  3115. ********************************************************/
  3116.  
  3117. - Enchantment = dbcEnchant.LookupEntryForced( 283 );
  3118. + /*Enchantment = dbcEnchant.LookupEntryForced( 283 );
  3119. if( Enchantment != NULL )
  3120. {
  3121. Enchantment->spell[0] = 33757; //this is actually good
  3122. @@ -1541,7 +1695,7 @@
  3123. sp->proc_interval = 3000;//http://www.wowwiki.com/Windfury_Weapon
  3124. sp->maxstack = 1;
  3125. }
  3126. - }
  3127. + }*/
  3128.  
  3129. /**********************************************************
  3130. * PROFFESION - Enchant Cloak - Major Resistance
  3131. @@ -4496,11 +4650,6 @@
  3132. sp->EffectDieSides[0] = 0;
  3133. }
  3134.  
  3135. - // Flametongue Weapon - 10% spd coefficient
  3136. - sp = dbcSpell.LookupEntryForced( 29469 );
  3137. - if( sp != NULL )
  3138. - sp->fixed_dddhcoef = 0.1f;
  3139. -
  3140. // Flametongue Totem - 0% spd coefficient
  3141. sp = dbcSpell.LookupEntryForced( 16368 );
  3142. if( sp != NULL )
  3143. @@ -4922,7 +5071,7 @@
  3144. sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3145. sp->EffectTriggerSpell[0] = 48108;
  3146. sp->procChance= 33;
  3147. - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
  3148. + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
  3149. sp->procCharges = 0;
  3150. }
  3151.  
  3152. @@ -4934,7 +5083,7 @@
  3153. sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3154. sp->EffectTriggerSpell[0] = 48108;
  3155. sp->procChance= 66;
  3156. - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
  3157. + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
  3158. sp->procCharges = 0;
  3159. }
  3160.  
  3161. @@ -4946,7 +5095,7 @@
  3162. sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3163. sp->EffectTriggerSpell[0] = 48108;
  3164. sp->procChance= 100;
  3165. - sp->procFlags = PROC_ON_SPELL_HIT | PROC_ON_SPELL_CRIT_HIT;
  3166. + sp->procFlags = PROC_ON_SPELL_CRIT_HIT;
  3167. sp->procCharges = 0;
  3168. }
  3169.  
  3170. @@ -5095,6 +5244,7 @@
  3171. sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3172. sp->EffectTriggerSpell[1] = 36032;
  3173. sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  3174. + sp->ProcOnNameHash[1] = SPELL_HASH_ARCANE_BLAST;
  3175. }
  3176.  
  3177. sp = dbcSpell.LookupEntryForced( 42897 );
  3178. @@ -5103,13 +5253,14 @@
  3179. sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3180. sp->EffectTriggerSpell[1] = 36032;
  3181. sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  3182. + sp->ProcOnNameHash[1] = SPELL_HASH_ARCANE_BLAST;
  3183. }
  3184.  
  3185. //mage - Arcane Blast Proc
  3186. sp = dbcSpell.LookupEntryForced( 36032 );
  3187. {
  3188. sp->procFlags = 0;
  3189. - sp->maxstack = 3;
  3190. + sp->maxstack = 4;
  3191. sp->procCharges = 0;
  3192. sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
  3193. }
  3194. @@ -5407,6 +5558,21 @@
  3195.  
  3196. // Insert warlock spell fixes here
  3197.  
  3198. + //Dummy for Demonic Circle
  3199. + sp = dbcSpell.LookupEntryForced( 48018 );
  3200. + if (sp != NULL)
  3201. + {
  3202. + sp->EffectImplicitTargetA[1] = 1;
  3203. + CreateDummySpell(62388);
  3204. + sp = dbcSpell.LookupEntryForced( 62388 );
  3205. + if (sp != NULL)
  3206. + {
  3207. + sp->Effect[0] = 6;
  3208. + sp->EffectApplyAuraName[0] = SPELL_AURA_DUMMY;
  3209. + sp->DurationIndex = 11;
  3210. + }
  3211. + }
  3212. +
  3213. //megai2: Immolation Aura
  3214. sp = dbcSpell.LookupEntryForced( 50589 );
  3215. if (sp != NULL)
  3216. @@ -6372,15 +6538,30 @@
  3217. // Druid - Infected Wounds
  3218. sp = dbcSpell.LookupEntryForced( 48483 );
  3219. if( sp != NULL )
  3220. - sp->procFlags = PROC_ON_CAST_SPELL;
  3221. + {
  3222. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  3223. + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
  3224. + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
  3225. + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
  3226. + }
  3227.  
  3228. sp = dbcSpell.LookupEntryForced( 48484 );
  3229. if( sp != NULL )
  3230. - sp->procFlags = PROC_ON_CAST_SPELL;
  3231. + {
  3232. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  3233. + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
  3234. + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
  3235. + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
  3236. + }
  3237.  
  3238. sp = dbcSpell.LookupEntryForced( 48485 );
  3239. if( sp != NULL )
  3240. - sp->procFlags = PROC_ON_CAST_SPELL;
  3241. + {
  3242. + sp->procFlags = PROC_ON_CAST_SPECIFIC_SPELL;
  3243. + sp->ProcOnNameHash[0] = SPELL_HASH_SHRED;
  3244. + sp->ProcOnNameHash[1] = SPELL_HASH_MAUL;
  3245. + sp->ProcOnNameHash[2] = SPELL_HASH_MANGLE;
  3246. + }
  3247.  
  3248. // Druid - Bash - Interrupt effect
  3249. sp = dbcSpell.LookupEntryForced( 5211 );
  3250. @@ -7833,6 +8014,8 @@
  3251. if( sp != NULL )
  3252. {
  3253. sp->c_is_flags |= SPELL_FLAG_IS_FORCEDDEBUFF;
  3254. + sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
  3255. + sp->EffectTriggerSpell[1] = 20584; // MesoX: Trigger spell with other values, like transform etc.
  3256. }
  3257.  
  3258. sp = dbcSpell.LookupEntryForced( 8326 );
  3259. @@ -8016,6 +8199,41 @@
  3260. sp->Attributes = ATTRIBUTES_CANT_BE_DPB;
  3261. }
  3262.  
  3263. + /**********************************************************
  3264. + * Bloodworms - handled in dummy code
  3265. + **********************************************************/
  3266. +
  3267. + // Bloodworms proc spell
  3268. + sp = dbcSpell.LookupEntryForced( 50452 );
  3269. + if( sp != NULL )
  3270. + {
  3271. + sp->Effect[0] = SPELL_EFFECT_DUMMY;
  3272. + }
  3273. +
  3274. + // Bloodworms Rank 1
  3275. + sp = dbcSpell.LookupEntryForced( 49027 );
  3276. + if( sp != NULL )
  3277. + {
  3278. + sp->procFlags = PROC_ON_MELEE_ATTACK;
  3279. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3280. + }
  3281. +
  3282. + // Bloodworms Rank 2
  3283. + sp = dbcSpell.LookupEntryForced( 49542 );
  3284. + if( sp != NULL )
  3285. + {
  3286. + sp->procFlags = PROC_ON_MELEE_ATTACK;
  3287. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3288. + }
  3289. +
  3290. + // Bloodworms Rank 3
  3291. + sp = dbcSpell.LookupEntryForced( 49543 );
  3292. + if( sp != NULL )
  3293. + {
  3294. + sp->procFlags = PROC_ON_MELEE_ATTACK;
  3295. + sp->EffectApplyAuraName[0] = SPELL_AURA_PROC_TRIGGER_SPELL;
  3296. + }
  3297. +
  3298. //Frost Strike
  3299. sp = dbcSpell.LookupEntryForced( 49143 );
  3300. if( sp != NULL )
  3301. @@ -8259,4 +8477,11 @@
  3302. sp->EffectImplicitTargetA[0] = EFF_TARGET_SCRIPTED_OR_SINGLE_TARGET;
  3303. sp->c_is_flags |= SPELL_FLAG_IS_FORCEDBUFF;
  3304. }
  3305. -}
  3306. \ No newline at end of file
  3307. +
  3308. + // Unlocking Soul Prison
  3309. + sp = dbcSpell.LookupEntryForced( 54669 );
  3310. + if( sp )
  3311. + {
  3312. + sp->Effect[0] = SPELL_EFFECT_DUMMY;
  3313. + }
  3314. +}
  3315. Index: src/arcemu-world/SpellTarget.cpp
  3316. ===================================================================
  3317. --- src/arcemu-world/SpellTarget.cpp (revision 3116)
  3318. +++ src/arcemu-world/SpellTarget.cpp (working copy)
  3319. @@ -23,15 +23,15 @@
  3320. /// Function pointer holder
  3321. pSpellTarget SpellTargetHandler[EFF_TARGET_LIST_LENGTH_MARKER] =
  3322. {
  3323. - &Spell::SpellTargetDefault, // 0
  3324. + &Spell::SpellTargetDefault, // 0
  3325. &Spell::SpellTargetSelf, // 1
  3326. &Spell::SpellTargetNULL, // 2 Not handled (Test spells)
  3327. &Spell::SpellTargetInvisibleAOE, // 3
  3328. &Spell::SpellTargetFriendly, // 4
  3329. - &Spell::SpellTargetPet, // 5
  3330. - &Spell::SpellTargetSingleTargetEnemy, // 6
  3331. + &Spell::SpellTargetPet, // 5
  3332. + &Spell::SpellTargetSingleTargetEnemy, // 6
  3333. &Spell::SpellTargetNULL, // 7
  3334. - &Spell::SpellTargetCustomAreaOfEffect, // 8
  3335. + &Spell::SpellTargetCustomAreaOfEffect, // 8
  3336. &Spell::SpellTargetNULL, // 9 Not handled (no spells)
  3337. &Spell::SpellTargetNULL, // 10 Not handled (no spells)
  3338. &Spell::SpellTargetNULL, // 11 Not handled (Test spells)
  3339. @@ -41,66 +41,66 @@
  3340. &Spell::SpellTargetAreaOfEffect, // 15
  3341. &Spell::SpellTargetAreaOfEffect, // 16
  3342. &Spell::SpellTargetNULL, // 17 Target is a location
  3343. - &Spell::SpellTargetLandUnderCaster, // 18
  3344. + &Spell::SpellTargetLandUnderCaster, // 18
  3345. &Spell::SpellTargetNULL, // 19 Not handled (Test spells)
  3346. &Spell::SpellTargetAllPartyMembersRangeNR, // 20
  3347. - &Spell::SpellTargetSingleTargetFriend, // 21
  3348. - &Spell::SpellTargetAoE, // 22
  3349. + &Spell::SpellTargetSingleTargetFriend, // 21
  3350. + &Spell::SpellTargetAoE, // 22
  3351. &Spell::SpellTargetSingleGameobjectTarget, // 23
  3352. - &Spell::SpellTargetInFrontOfCaster, // 24
  3353. + &Spell::SpellTargetInFrontOfCaster, // 24
  3354. &Spell::SpellTargetSingleFriend, // 25
  3355. &Spell::SpellTargetGameobject_itemTarget, // 26
  3356. &Spell::SpellTargetPetOwner, // 27
  3357. - &Spell::SpellTargetEnemysAreaOfEffect, // 28 channeled
  3358. + &Spell::SpellTargetEnemysAreaOfEffect, // 28 channeled
  3359. &Spell::SpellTargetTypeTAOE, // 29
  3360. - &Spell::SpellTargetAllyBasedAreaEffect, // 30
  3361. - &Spell::SpellTargetScriptedEffects, // 31
  3362. - &Spell::SpellTargetSummon, // 32
  3363. - &Spell::SpellTargetNearbyPartyMembers, // 33
  3364. + &Spell::SpellTargetAllyBasedAreaEffect, // 30
  3365. + &Spell::SpellTargetScriptedEffects, // 31
  3366. + &Spell::SpellTargetSummon, // 32
  3367. + &Spell::SpellTargetNearbyPartyMembers, // 33
  3368. &Spell::SpellTargetNULL, // 34 Not handled (No spells)
  3369. &Spell::SpellTargetSingleTargetPartyMember, // 35
  3370. &Spell::SpellTargetScriptedEffects2, // 36
  3371. - &Spell::SpellTargetPartyMember, // 37
  3372. - &Spell::SpellTargetDummyTarget, // 38
  3373. - &Spell::SpellTargetFishing, // 39
  3374. - &Spell::SpellTargetType40, // 40
  3375. - &Spell::SpellTargetTotem, // 41
  3376. - &Spell::SpellTargetTotem, // 42
  3377. - &Spell::SpellTargetTotem, // 43
  3378. - &Spell::SpellTargetTotem, // 44
  3379. - &Spell::SpellTargetChainTargeting, // 45
  3380. - &Spell::SpellTargetSimpleTargetAdd, // 46
  3381. - &Spell::SpellTargetSimpleTargetAdd, // 47
  3382. - &Spell::SpellTargetSimpleTargetAdd, // 48
  3383. - &Spell::SpellTargetSimpleTargetAdd, // 49
  3384. - &Spell::SpellTargetSimpleTargetAdd, // 50
  3385. + &Spell::SpellTargetPartyMember, // 37
  3386. + &Spell::SpellTargetDummyTarget, // 38
  3387. + &Spell::SpellTargetFishing, // 39
  3388. + &Spell::SpellTargetType40, // 40
  3389. + &Spell::SpellTargetTotem, // 41
  3390. + &Spell::SpellTargetTotem, // 42
  3391. + &Spell::SpellTargetTotem, // 43
  3392. + &Spell::SpellTargetTotem, // 44
  3393. + &Spell::SpellTargetChainTargeting, // 45
  3394. + &Spell::SpellTargetSimpleTargetAdd, // 46
  3395. + &Spell::SpellTargetSimpleTargetAdd, // 47
  3396. + &Spell::SpellTargetSimpleTargetAdd, // 48
  3397. + &Spell::SpellTargetSimpleTargetAdd, // 49
  3398. + &Spell::SpellTargetSimpleTargetAdd, // 50
  3399. &Spell::SpellTargetNULL, // 51
  3400. - &Spell::SpellTargetSimpleTargetAdd, // 52
  3401. + &Spell::SpellTargetSimpleTargetAdd, // 52
  3402. &Spell::SpellTargetTargetAreaSelectedUnit, // 53
  3403. &Spell::SpellTargetInFrontOfCaster2, // 54
  3404. &Spell::SpellTargetNULL, // 55 Not handled (Not really handled by the current spell system)
  3405. &Spell::SpellTargetAllRaid, // 56
  3406. - &Spell::SpellTargetTargetPartyMember, // 57
  3407. + &Spell::SpellTargetTargetPartyMember, // 57
  3408. &Spell::SpellTargetNULL, // 58
  3409. &Spell::SpellTargetNULL, // 59
  3410. &Spell::SpellTargetNULL, // 60 // scripted target fill..
  3411. - &Spell::SpellTargetSameGroupSameClass, // 61
  3412. + &Spell::SpellTargetSameGroupSameClass, // 61
  3413. &Spell::SpellTargetNULL, // 62 // targets the priest champion, big range..
  3414. - &Spell::SpellTargetSimpleTargetAdd, // 63 // summon [] creature
  3415. - &Spell::SpellTargetSimpleTargetAdd, // 64 // summon [] creature
  3416. - &Spell::SpellTargetSimpleTargetAdd, // 65 // summon [] creature
  3417. - &Spell::SpellTargetSimpleTargetAdd, // 66 // summon [] creature
  3418. - &Spell::SpellTargetSimpleTargetAdd, // 67 // summon [] creature
  3419. + &Spell::SpellTargetSimpleTargetAdd, // 63 // summon [] creature
  3420. + &Spell::SpellTargetSimpleTargetAdd, // 64 // summon [] creature
  3421. + &Spell::SpellTargetSimpleTargetAdd, // 65 // summon [] creature
  3422. + &Spell::SpellTargetSimpleTargetAdd, // 66 // summon [] creature
  3423. + &Spell::SpellTargetSimpleTargetAdd, // 67 // summon [] creature
  3424. &Spell::SpellTargetNULL, // 68 Not handled (No spells)
  3425. - &Spell::SpellTargetTotem, // 69 // Spitfire totem
  3426. + &Spell::SpellTargetTotem, // 69 // Spitfire totem
  3427. &Spell::SpellTargetNULL, // 70 Not handled (No spells)
  3428. &Spell::SpellTargetNULL, // 71 Not handled (No spells)
  3429. - &Spell::SpellTargetSimpleTargetAdd, // 72 // summon [] creature + trow items
  3430. - &Spell::SpellTargetSummon, // 73
  3431. + &Spell::SpellTargetSimpleTargetAdd, // 72 // summon [] creature + trow items
  3432. + &Spell::SpellTargetSummon, // 73
  3433. &Spell::SpellTargetNULL, // 74
  3434. &Spell::SpellTargetNULL, // 75
  3435. &Spell::SpellTargetNULL, // 76
  3436. - &Spell::SpellTargetSingleTargetEnemy, // 77
  3437. + &Spell::SpellTargetSingleTargetEnemy, // 77
  3438. &Spell::SpellTargetNULL, // 78
  3439. &Spell::SpellTargetNULL, // 79
  3440. &Spell::SpellTargetNULL, // 80
  3441. Index: src/arcemu-world/Stats.cpp
  3442. ===================================================================
  3443. --- src/arcemu-world/Stats.cpp (revision 3116)
  3444. +++ src/arcemu-world/Stats.cpp (working copy)
  3445. @@ -490,6 +490,9 @@
  3446. uint32 offset;
  3447. Item *it = NULL;
  3448.  
  3449. + if(ability && ability->NameHash == SPELL_HASH_FLAMETONGUE_WEAPON)
  3450. + return 0;
  3451. +
  3452. if(pAttacker->disarmed && pAttacker->IsPlayer())
  3453. {
  3454. offset=UNIT_FIELD_MINDAMAGE;
  3455. Index: src/arcemu-world/Unit.cpp
  3456. ===================================================================
  3457. --- src/arcemu-world/Unit.cpp (revision 3116)
  3458. +++ src/arcemu-world/Unit.cpp (working copy)
  3459. @@ -1210,6 +1210,25 @@
  3460.  
  3461. switch( spellId )
  3462. {
  3463. + case 48108: // Mage - Hot Streak
  3464. + {
  3465. + if( CastingSpell == NULL )
  3466. + continue;
  3467. +
  3468. + if( CastingSpell->NameHash != SPELL_HASH_FIREBALL ||
  3469. + CastingSpell->NameHash != SPELL_HASH_FIRE_BLAST ||
  3470. + CastingSpell->NameHash != SPELL_HASH_SCORCH ||
  3471. + CastingSpell->NameHash != SPELL_HASH_LIVING_BOMB ||
  3472. + CastingSpell->NameHash != SPELL_HASH_FROSTFIRE_BOLT )
  3473. + continue;
  3474. +
  3475. + /*if( plr->CritsInRow < 1 )
  3476. + {
  3477. + plr->CritsInRow++;
  3478. + continue;
  3479. + }*/
  3480. + }
  3481. + break;
  3482. case 32747: //Deadly Throw Interrupt (rogue arena gloves set)
  3483. {
  3484. if( CastingSpell == NULL )
  3485. @@ -1964,38 +1983,27 @@
  3486. if(CastingSpell->NameHash != SPELL_HASH_JUDGEMENT_OF_COMMAND && CastingSpell->NameHash != SPELL_HASH_JUDGEMENT)
  3487. continue;
  3488. }break;
  3489. - // Flametongue Totem
  3490. + /*// Flametongue Totem
  3491. case 25555:
  3492. case 16389:
  3493. case 10523:
  3494. case 8248:
  3495. - case 8253:
  3496. + case 8253:*/
  3497. // Flametongue Weapon
  3498. - case 8026:
  3499. - case 8028:
  3500. - case 8029:
  3501. - case 10445:
  3502. - case 16343:
  3503. - case 16344:
  3504. - case 25488:
  3505. + case 8024:
  3506. + case 8027:
  3507. + case 8030:
  3508. + case 16339:
  3509. + case 16341:
  3510. + case 16342:
  3511. + case 25489:
  3512. + case 58785:
  3513. + case 58789:
  3514. + case 58790:
  3515. {
  3516. - if(spellId == 25555 ||
  3517. - spellId == 16389 ||
  3518. - spellId == 10523 ||
  3519. - spellId == 8248 ||
  3520. - spellId == 8253)
  3521. - spellId = 16368; // Flametongue Totem proc
  3522. - else
  3523. - spellId = 29469; // Flametongue Weapon proc
  3524. - Item * mh = static_cast< Player* >( this )->GetItemInterface()->GetInventoryItem( EQUIPMENT_SLOT_MAINHAND );
  3525. -
  3526. - if( mh != NULL)
  3527. - {
  3528. - float mhs = float( mh->GetProto()->Delay );
  3529. - dmg_overwrite = FL2UINT( mhs * 0.001f * (spe->EffectBasePoints[0] + 1)/88 );
  3530. - }
  3531. - else
  3532. - continue;
  3533. + uint32 dmg = static_cast< Player* >( this )->GetFlametongueDMG( origId );
  3534. + SpellEntry * sp_for_the_logs = dbcSpell.LookupEntry( spellId );
  3535. + Strike( victim, MELEE, sp_for_the_logs, dmg, 0, 0, true, false );
  3536. }break;
  3537. case 16246:
  3538. {
  3539. @@ -2671,6 +2679,8 @@
  3540. // Remove lightning overload aura after procing
  3541. RemoveAura(39805);
  3542. }
  3543. + /*if( TO_PLAYER(this)->CritsInRow > 0 )
  3544. + TO_PLAYER(this)->CritsInRow = 0;*/
  3545. }
  3546.  
  3547. m_chargeSpellsInUse = true;
  3548. @@ -3248,7 +3258,7 @@
  3549. return roll_results[r];
  3550. }
  3551.  
  3552. -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 )
  3553. +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 )
  3554. {
  3555. //==========================================================================================
  3556. //==============================Unacceptable Cases Processing===============================
  3557. @@ -3673,6 +3683,8 @@
  3558. {
  3559. r++;
  3560. }
  3561. + if(force_crit)
  3562. + r=5;
  3563. //--------------------------------postroll processing---------------------------------------
  3564. uint32 abs = 0;
  3565.  
  3566. @@ -4148,6 +4160,13 @@
  3567. if ( owner != NULL )
  3568. Energize(owner, 34433, uint32(2.5f*realdamage + 0.5f), POWER_TYPE_MANA );
  3569. }
  3570. + //ugly hack for Bloodsworm restoring hp
  3571. + if( GetUInt64Value(UNIT_FIELD_SUMMONEDBY) != 0 && GetUInt32Value(OBJECT_FIELD_ENTRY) == 28017 )
  3572. + {
  3573. + Player * owner = GetMapMgr()->GetPlayer((uint32)GetUInt64Value(UNIT_FIELD_SUMMONEDBY));
  3574. + if ( owner != NULL )
  3575. + Heal(owner, 50452, float2int32(1.5f*realdamage) );
  3576. + }
  3577. }
  3578.  
  3579. //==========================================================================================
  3580. Index: src/arcemu-world/Unit.h
  3581. ===================================================================
  3582. --- src/arcemu-world/Unit.h (revision 3116)
  3583. +++ src/arcemu-world/Unit.h (working copy)
  3584. @@ -912,7 +912,7 @@
  3585.  
  3586. //// Combat
  3587. uint32 GetSpellDidHitResult( Unit* pVictim, uint32 weapon_damage_type, SpellEntry* ability );
  3588. - 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 );
  3589. + 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 );
  3590. uint32 m_procCounter;
  3591. uint32 HandleProc(uint32 flag, Unit* Victim, SpellEntry* CastingSpell,uint32 dmg=-1,uint32 abs= 0);
  3592. void HandleProcDmgShield(uint32 flag, Unit* attacker);//almost the same as handleproc :P
  3593. Index: src/arcemu-world/UpdateFields.h
  3594. ===================================================================
  3595. --- src/arcemu-world/UpdateFields.h (revision 3116)
  3596. +++ src/arcemu-world/UpdateFields.h (working copy)
  3597. @@ -5,421 +5,423 @@
  3598. *
  3599. * This program is free software: you can redistribute it and/or modify
  3600. * it under the terms of the GNU Affero General Public License as published by
  3601. - * the Free Software Foundation, either version 3 of the License, or
  3602. + * the Free Software Foundation either version 3 of the License or
  3603. * any later version.
  3604. *
  3605. - * This program is distributed in the hope that it will be useful,
  3606. + * This program is distributed in the hope that it will be useful
  3607. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  3608. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  3609. * GNU Affero General Public License for more details.
  3610. *
  3611. * You should have received a copy of the GNU Affero General Public License
  3612. - * along with this program. If not, see <http://www.gnu.org/licenses/>.
  3613. + * along with this program. If not see <http://www.gnu.org/licenses/>.
  3614. *
  3615. */
  3616.  
  3617. -/** 3.2.0 UpdateFields as of whenever i extracted them.
  3618. +/** 3.3.0 UpdateFields
  3619. */
  3620.  
  3621. #ifndef ARCEMU_UPDATEFIELDS_H
  3622. #define ARCEMU_UPDATEFIELDS_H
  3623.  
  3624. //ObjectFields
  3625. -#define OBJECT_FIELD_GUID 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  3626. -#define OBJECT_FIELD_TYPE 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
  3627. -#define OBJECT_FIELD_ENTRY 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
  3628. -#define OBJECT_FIELD_SCALE_X 0x0004 // Size: 1, Type: FLOAT, Flags: PUBLIC
  3629. -#define OBJECT_FIELD_PADDING 0x0005 // Size: 1, Type: INT, Flags: NONE
  3630. -#define OBJECT_END 0x0006
  3631. +#define OBJECT_FIELD_GUID 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  3632. +#define OBJECT_FIELD_TYPE 0x0002 // Size: 1 Type: INT Flags: PUBLIC
  3633. +#define OBJECT_FIELD_ENTRY 0x0003 // Size: 1 Type: INT Flags: PUBLIC
  3634. +#define OBJECT_FIELD_SCALE_X 0x0004 // Size: 1 Type: FLOAT Flags: PUBLIC
  3635. +#define OBJECT_FIELD_PADDING 0x0005 // Size: 1 Type: INT Flags: NONE
  3636. +#define OBJECT_END 0x0006
  3637.  
  3638. #define LOWGUID OBJECT_FIELD_GUID
  3639. #define HIGHGUID ( OBJECT_FIELD_GUID + 1 )
  3640.  
  3641. //ItemFields
  3642. -#define ITEM_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  3643. -#define ITEM_FIELD_CONTAINED OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
  3644. -#define ITEM_FIELD_CREATOR OBJECT_END + 0x0004 // Size: 2, Type: LONG, Flags: PUBLIC
  3645. -#define ITEM_FIELD_GIFTCREATOR OBJECT_END + 0x0006 // Size: 2, Type: LONG, Flags: PUBLIC
  3646. -#define ITEM_FIELD_STACK_COUNT OBJECT_END + 0x0008 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
  3647. -#define ITEM_FIELD_DURATION OBJECT_END + 0x0009 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
  3648. -#define ITEM_FIELD_SPELL_CHARGES OBJECT_END + 0x000A // Size: 5, Type: INT, Flags: OWNER, ITEM_OWNER
  3649. -#define ITEM_FIELD_FLAGS OBJECT_END + 0x000F // Size: 1, Type: INT, Flags: PUBLIC
  3650. -#define ITEM_FIELD_ENCHANTMENT_1_1 OBJECT_END + 0x0010 // Size: 2, Type: INT, Flags: PUBLIC
  3651. -#define ITEM_FIELD_ENCHANTMENT_1_3 OBJECT_END + 0x0012 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3652. -#define ITEM_FIELD_ENCHANTMENT_2_1 OBJECT_END + 0x0013 // Size: 2, Type: INT, Flags: PUBLIC
  3653. -#define ITEM_FIELD_ENCHANTMENT_2_3 OBJECT_END + 0x0015 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3654. -#define ITEM_FIELD_ENCHANTMENT_3_1 OBJECT_END + 0x0016 // Size: 2, Type: INT, Flags: PUBLIC
  3655. -#define ITEM_FIELD_ENCHANTMENT_3_3 OBJECT_END + 0x0018 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3656. -#define ITEM_FIELD_ENCHANTMENT_4_1 OBJECT_END + 0x0019 // Size: 2, Type: INT, Flags: PUBLIC
  3657. -#define ITEM_FIELD_ENCHANTMENT_4_3 OBJECT_END + 0x001B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3658. -#define ITEM_FIELD_ENCHANTMENT_5_1 OBJECT_END + 0x001C // Size: 2, Type: INT, Flags: PUBLIC
  3659. -#define ITEM_FIELD_ENCHANTMENT_5_3 OBJECT_END + 0x001E // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3660. -#define ITEM_FIELD_ENCHANTMENT_6_1 OBJECT_END + 0x001F // Size: 2, Type: INT, Flags: PUBLIC
  3661. -#define ITEM_FIELD_ENCHANTMENT_6_3 OBJECT_END + 0x0021 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3662. -#define ITEM_FIELD_ENCHANTMENT_7_1 OBJECT_END + 0x0022 // Size: 2, Type: INT, Flags: PUBLIC
  3663. -#define ITEM_FIELD_ENCHANTMENT_7_3 OBJECT_END + 0x0024 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3664. -#define ITEM_FIELD_ENCHANTMENT_8_1 OBJECT_END + 0x0025 // Size: 2, Type: INT, Flags: PUBLIC
  3665. -#define ITEM_FIELD_ENCHANTMENT_8_3 OBJECT_END + 0x0027 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3666. -#define ITEM_FIELD_ENCHANTMENT_9_1 OBJECT_END + 0x0028 // Size: 2, Type: INT, Flags: PUBLIC
  3667. -#define ITEM_FIELD_ENCHANTMENT_9_3 OBJECT_END + 0x002A // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3668. -#define ITEM_FIELD_ENCHANTMENT_10_1 OBJECT_END + 0x002B // Size: 2, Type: INT, Flags: PUBLIC
  3669. -#define ITEM_FIELD_ENCHANTMENT_10_3 OBJECT_END + 0x002D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3670. -#define ITEM_FIELD_ENCHANTMENT_11_1 OBJECT_END + 0x002E // Size: 2, Type: INT, Flags: PUBLIC
  3671. -#define ITEM_FIELD_ENCHANTMENT_11_3 OBJECT_END + 0x0030 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3672. -#define ITEM_FIELD_ENCHANTMENT_12_1 OBJECT_END + 0x0031 // Size: 2, Type: INT, Flags: PUBLIC
  3673. -#define ITEM_FIELD_ENCHANTMENT_12_3 OBJECT_END + 0x0033 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3674. -#define ITEM_FIELD_PROPERTY_SEED OBJECT_END + 0x0034 // Size: 1, Type: INT, Flags: PUBLIC
  3675. -#define ITEM_FIELD_RANDOM_PROPERTIES_ID OBJECT_END + 0x0035 // Size: 1, Type: INT, Flags: PUBLIC
  3676. -#define ITEM_FIELD_ITEM_TEXT_ID OBJECT_END + 0x0036 // Size: 1, Type: INT, Flags: OWNER
  3677. -#define ITEM_FIELD_DURABILITY OBJECT_END + 0x0037 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
  3678. -#define ITEM_FIELD_MAXDURABILITY OBJECT_END + 0x0038 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
  3679. -#define ITEM_FIELD_CREATE_PLAYED_TIME OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: PUBLIC
  3680. -#define ITEM_END OBJECT_END + 0x003A
  3681. +#define ITEM_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  3682. +#define ITEM_FIELD_CONTAINED OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
  3683. +#define ITEM_FIELD_CREATOR OBJECT_END + 0x0004 // Size: 2 Type: LONG Flags: PUBLIC
  3684. +#define ITEM_FIELD_GIFTCREATOR OBJECT_END + 0x0006 // Size: 2 Type: LONG Flags: PUBLIC
  3685. +#define ITEM_FIELD_STACK_COUNT OBJECT_END + 0x0008 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
  3686. +#define ITEM_FIELD_DURATION OBJECT_END + 0x0009 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
  3687. +#define ITEM_FIELD_SPELL_CHARGES OBJECT_END + 0x000A // Size: 5 Type: INT Flags: OWNER ITEM_OWNER
  3688. +#define ITEM_FIELD_FLAGS OBJECT_END + 0x000F // Size: 1 Type: INT Flags: PUBLIC
  3689. +#define ITEM_FIELD_ENCHANTMENT_1_1 OBJECT_END + 0x0010 // Size: 2 Type: INT Flags: PUBLIC
  3690. +#define ITEM_FIELD_ENCHANTMENT_1_3 OBJECT_END + 0x0012 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3691. +#define ITEM_FIELD_ENCHANTMENT_2_1 OBJECT_END + 0x0013 // Size: 2 Type: INT Flags: PUBLIC
  3692. +#define ITEM_FIELD_ENCHANTMENT_2_3 OBJECT_END + 0x0015 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3693. +#define ITEM_FIELD_ENCHANTMENT_3_1 OBJECT_END + 0x0016 // Size: 2 Type: INT Flags: PUBLIC
  3694. +#define ITEM_FIELD_ENCHANTMENT_3_3 OBJECT_END + 0x0018 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3695. +#define ITEM_FIELD_ENCHANTMENT_4_1 OBJECT_END + 0x0019 // Size: 2 Type: INT Flags: PUBLIC
  3696. +#define ITEM_FIELD_ENCHANTMENT_4_3 OBJECT_END + 0x001B // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3697. +#define ITEM_FIELD_ENCHANTMENT_5_1 OBJECT_END + 0x001C // Size: 2 Type: INT Flags: PUBLIC
  3698. +#define ITEM_FIELD_ENCHANTMENT_5_3 OBJECT_END + 0x001E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3699. +#define ITEM_FIELD_ENCHANTMENT_6_1 OBJECT_END + 0x001F // Size: 2 Type: INT Flags: PUBLIC
  3700. +#define ITEM_FIELD_ENCHANTMENT_6_3 OBJECT_END + 0x0021 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3701. +#define ITEM_FIELD_ENCHANTMENT_7_1 OBJECT_END + 0x0022 // Size: 2 Type: INT Flags: PUBLIC
  3702. +#define ITEM_FIELD_ENCHANTMENT_7_3 OBJECT_END + 0x0024 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3703. +#define ITEM_FIELD_ENCHANTMENT_8_1 OBJECT_END + 0x0025 // Size: 2 Type: INT Flags: PUBLIC
  3704. +#define ITEM_FIELD_ENCHANTMENT_8_3 OBJECT_END + 0x0027 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3705. +#define ITEM_FIELD_ENCHANTMENT_9_1 OBJECT_END + 0x0028 // Size: 2 Type: INT Flags: PUBLIC
  3706. +#define ITEM_FIELD_ENCHANTMENT_9_3 OBJECT_END + 0x002A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3707. +#define ITEM_FIELD_ENCHANTMENT_10_1 OBJECT_END + 0x002B // Size: 2 Type: INT Flags: PUBLIC
  3708. +#define ITEM_FIELD_ENCHANTMENT_10_3 OBJECT_END + 0x002D // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3709. +#define ITEM_FIELD_ENCHANTMENT_11_1 OBJECT_END + 0x002E // Size: 2 Type: INT Flags: PUBLIC
  3710. +#define ITEM_FIELD_ENCHANTMENT_11_3 OBJECT_END + 0x0030 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3711. +#define ITEM_FIELD_ENCHANTMENT_12_1 OBJECT_END + 0x0031 // Size: 2 Type: INT Flags: PUBLIC
  3712. +#define ITEM_FIELD_ENCHANTMENT_12_3 OBJECT_END + 0x0033 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  3713. +#define ITEM_FIELD_PROPERTY_SEED OBJECT_END + 0x0034 // Size: 1 Type: INT Flags: PUBLIC
  3714. +#define ITEM_FIELD_RANDOM_PROPERTIES_ID OBJECT_END + 0x0035 // Size: 1 Type: INT Flags: PUBLIC
  3715. +#define ITEM_FIELD_ITEM_TEXT_ID OBJECT_END + 0x0036 // Size: 1 Type: INT Flags: OWNER
  3716. +#define ITEM_FIELD_DURABILITY OBJECT_END + 0x0037 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
  3717. +#define ITEM_FIELD_MAXDURABILITY OBJECT_END + 0x0038 // Size: 1 Type: INT Flags: OWNER ITEM_OWNER
  3718. +#define ITEM_FIELD_CREATE_PLAYED_TIME OBJECT_END + 0x0039 // Size: 1 Type: INT Flags: PUBLIC
  3719. +#define ITEM_END OBJECT_END + 0x003A
  3720.  
  3721. //ContainerFields
  3722. -#define CONTAINER_FIELD_NUM_SLOTS ITEM_END + 0x0000 // Size: 1, Type: INT, Flags: PUBLIC
  3723. -#define CONTAINER_ALIGN_PAD ITEM_END + 0x0001 // Size: 1, Type: BYTES, Flags: NONE
  3724. -#define CONTAINER_FIELD_SLOT_1 ITEM_END + 0x0002 // Size: 72, Type: LONG, Flags: PUBLIC
  3725. -#define CONTAINER_END ITEM_END + 0x004A
  3726. +#define CONTAINER_FIELD_NUM_SLOTS ITEM_END + 0x0000 // Size: 1 Type: INT Flags: PUBLIC
  3727. +#define CONTAINER_ALIGN_PAD ITEM_END + 0x0001 // Size: 1 Type: BYTES Flags: NONE
  3728. +#define CONTAINER_FIELD_SLOT_1 ITEM_END + 0x0002 // Size: 72 Type: LONG Flags: PUBLIC
  3729. +#define CONTAINER_END ITEM_END + 0x004A
  3730.  
  3731. //UnitFields
  3732. -#define UNIT_FIELD_CHARM OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  3733. -#define UNIT_FIELD_SUMMON OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
  3734. -#define UNIT_FIELD_CRITTER OBJECT_END + 0x0004 // Size: 2, Type: LONG, Flags: PRIVATE
  3735. -#define UNIT_FIELD_CHARMEDBY OBJECT_END + 0x0006 // Size: 2, Type: LONG, Flags: PUBLIC
  3736. -#define UNIT_FIELD_SUMMONEDBY OBJECT_END + 0x0008 // Size: 2, Type: LONG, Flags: PUBLIC
  3737. -#define UNIT_FIELD_CREATEDBY OBJECT_END + 0x000A // Size: 2, Type: LONG, Flags: PUBLIC
  3738. -#define UNIT_FIELD_TARGET OBJECT_END + 0x000C // Size: 2, Type: LONG, Flags: PUBLIC
  3739. -#define UNIT_FIELD_CHANNEL_OBJECT OBJECT_END + 0x000E // Size: 2, Type: LONG, Flags: PUBLIC
  3740. -#define UNIT_FIELD_BYTES_0 OBJECT_END + 0x0010 // Size: 1, Type: BYTES, Flags: PUBLIC
  3741. -#define UNIT_FIELD_HEALTH OBJECT_END + 0x0011 // Size: 1, Type: INT, Flags: PUBLIC
  3742. -#define UNIT_FIELD_POWER1 OBJECT_END + 0x0012 // Size: 1, Type: INT, Flags: PUBLIC
  3743. -#define UNIT_FIELD_POWER2 OBJECT_END + 0x0013 // Size: 1, Type: INT, Flags: PUBLIC
  3744. -#define UNIT_FIELD_POWER3 OBJECT_END + 0x0014 // Size: 1, Type: INT, Flags: PUBLIC
  3745. -#define UNIT_FIELD_POWER4 OBJECT_END + 0x0015 // Size: 1, Type: INT, Flags: PUBLIC
  3746. -#define UNIT_FIELD_POWER5 OBJECT_END + 0x0016 // Size: 1, Type: INT, Flags: PUBLIC
  3747. -#define UNIT_FIELD_POWER6 OBJECT_END + 0x0017 // Size: 1, Type: INT, Flags: PUBLIC
  3748. -#define UNIT_FIELD_POWER7 OBJECT_END + 0x0018 // Size: 1, Type: INT, Flags: PUBLIC
  3749. -#define UNIT_FIELD_MAXHEALTH OBJECT_END + 0x0019 // Size: 1, Type: INT, Flags: PUBLIC
  3750. -#define UNIT_FIELD_MAXPOWER1 OBJECT_END + 0x001A // Size: 1, Type: INT, Flags: PUBLIC
  3751. -#define UNIT_FIELD_MAXPOWER2 OBJECT_END + 0x001B // Size: 1, Type: INT, Flags: PUBLIC
  3752. -#define UNIT_FIELD_MAXPOWER3 OBJECT_END + 0x001C // Size: 1, Type: INT, Flags: PUBLIC
  3753. -#define UNIT_FIELD_MAXPOWER4 OBJECT_END + 0x001D // Size: 1, Type: INT, Flags: PUBLIC
  3754. -#define UNIT_FIELD_MAXPOWER5 OBJECT_END + 0x001E // Size: 1, Type: INT, Flags: PUBLIC
  3755. -#define UNIT_FIELD_MAXPOWER6 OBJECT_END + 0x001F // Size: 1, Type: INT, Flags: PUBLIC
  3756. -#define UNIT_FIELD_MAXPOWER7 OBJECT_END + 0x0020 // Size: 1, Type: INT, Flags: PUBLIC
  3757. -#define UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER OBJECT_END + 0x0021 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
  3758. -#define UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER OBJECT_END + 0x0028 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
  3759. -#define UNIT_FIELD_LEVEL OBJECT_END + 0x002F // Size: 1, Type: INT, Flags: PUBLIC
  3760. -#define UNIT_FIELD_FACTIONTEMPLATE OBJECT_END + 0x0030 // Size: 1, Type: INT, Flags: PUBLIC
  3761. -#define UNIT_VIRTUAL_ITEM_SLOT_ID OBJECT_END + 0x0031 // Size: 3, Type: INT, Flags: PUBLIC
  3762. -#define UNIT_FIELD_FLAGS OBJECT_END + 0x0034 // Size: 1, Type: INT, Flags: PUBLIC
  3763. -#define UNIT_FIELD_FLAGS_2 OBJECT_END + 0x0035 // Size: 1, Type: INT, Flags: PUBLIC
  3764. -#define UNIT_FIELD_AURASTATE OBJECT_END + 0x0036 // Size: 1, Type: INT, Flags: PUBLIC
  3765. -#define UNIT_FIELD_BASEATTACKTIME OBJECT_END + 0x0037 // Size: 2, Type: INT, Flags: PUBLIC
  3766. -#define UNIT_FIELD_RANGEDATTACKTIME OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: PRIVATE
  3767. -#define UNIT_FIELD_BOUNDINGRADIUS OBJECT_END + 0x003A // Size: 1, Type: FLOAT, Flags: PUBLIC
  3768. -#define UNIT_FIELD_COMBATREACH OBJECT_END + 0x003B // Size: 1, Type: FLOAT, Flags: PUBLIC
  3769. -#define UNIT_FIELD_DISPLAYID OBJECT_END + 0x003C // Size: 1, Type: INT, Flags: PUBLIC
  3770. -#define UNIT_FIELD_NATIVEDISPLAYID OBJECT_END + 0x003D // Size: 1, Type: INT, Flags: PUBLIC
  3771. -#define UNIT_FIELD_MOUNTDISPLAYID OBJECT_END + 0x003E // Size: 1, Type: INT, Flags: PUBLIC
  3772. -#define UNIT_FIELD_MINDAMAGE OBJECT_END + 0x003F // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
  3773. -#define UNIT_FIELD_MAXDAMAGE OBJECT_END + 0x0040 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
  3774. -#define UNIT_FIELD_MINOFFHANDDAMAGE OBJECT_END + 0x0041 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
  3775. -#define UNIT_FIELD_MAXOFFHANDDAMAGE OBJECT_END + 0x0042 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
  3776. -#define UNIT_FIELD_BYTES_1 OBJECT_END + 0x0043 // Size: 1, Type: BYTES, Flags: PUBLIC
  3777. -#define UNIT_FIELD_PETNUMBER OBJECT_END + 0x0044 // Size: 1, Type: INT, Flags: PUBLIC
  3778. -#define UNIT_FIELD_PET_NAME_TIMESTAMP OBJECT_END + 0x0045 // Size: 1, Type: INT, Flags: PUBLIC
  3779. -#define UNIT_FIELD_PETEXPERIENCE OBJECT_END + 0x0046 // Size: 1, Type: INT, Flags: OWNER
  3780. -#define UNIT_FIELD_PETNEXTLEVELEXP OBJECT_END + 0x0047 // Size: 1, Type: INT, Flags: OWNER
  3781. -#define UNIT_DYNAMIC_FLAGS OBJECT_END + 0x0048 // Size: 1, Type: INT, Flags: DYNAMIC
  3782. -#define UNIT_CHANNEL_SPELL OBJECT_END + 0x0049 // Size: 1, Type: INT, Flags: PUBLIC
  3783. -#define UNIT_MOD_CAST_SPEED OBJECT_END + 0x004A // Size: 1, Type: FLOAT, Flags: PUBLIC
  3784. -#define UNIT_CREATED_BY_SPELL OBJECT_END + 0x004B // Size: 1, Type: INT, Flags: PUBLIC
  3785. -#define UNIT_NPC_FLAGS OBJECT_END + 0x004C // Size: 1, Type: INT, Flags: DYNAMIC
  3786. -#define UNIT_NPC_EMOTESTATE OBJECT_END + 0x004D // Size: 1, Type: INT, Flags: PUBLIC
  3787. -#define UNIT_FIELD_STAT0 OBJECT_END + 0x004E // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3788. -#define UNIT_FIELD_STAT1 OBJECT_END + 0x004F // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3789. -#define UNIT_FIELD_STAT2 OBJECT_END + 0x0050 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3790. -#define UNIT_FIELD_STAT3 OBJECT_END + 0x0051 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3791. -#define UNIT_FIELD_STAT4 OBJECT_END + 0x0052 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3792. -#define UNIT_FIELD_POSSTAT0 OBJECT_END + 0x0053 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3793. -#define UNIT_FIELD_POSSTAT1 OBJECT_END + 0x0054 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3794. -#define UNIT_FIELD_POSSTAT2 OBJECT_END + 0x0055 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3795. -#define UNIT_FIELD_POSSTAT3 OBJECT_END + 0x0056 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3796. -#define UNIT_FIELD_POSSTAT4 OBJECT_END + 0x0057 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3797. -#define UNIT_FIELD_NEGSTAT0 OBJECT_END + 0x0058 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3798. -#define UNIT_FIELD_NEGSTAT1 OBJECT_END + 0x0059 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3799. -#define UNIT_FIELD_NEGSTAT2 OBJECT_END + 0x005A // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3800. -#define UNIT_FIELD_NEGSTAT3 OBJECT_END + 0x005B // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3801. -#define UNIT_FIELD_NEGSTAT4 OBJECT_END + 0x005C // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3802. -#define UNIT_FIELD_RESISTANCES OBJECT_END + 0x005D // Size: 7, Type: INT, Flags: PRIVATE, OWNER, PARTY_LEADER
  3803. -#define UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE OBJECT_END + 0x0064 // Size: 7, Type: INT, Flags: PRIVATE, OWNER
  3804. -#define UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE OBJECT_END + 0x006B // Size: 7, Type: INT, Flags: PRIVATE, OWNER
  3805. -#define UNIT_FIELD_BASE_MANA OBJECT_END + 0x0072 // Size: 1, Type: INT, Flags: PUBLIC
  3806. -#define UNIT_FIELD_BASE_HEALTH OBJECT_END + 0x0073 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3807. -#define UNIT_FIELD_BYTES_2 OBJECT_END + 0x0074 // Size: 1, Type: BYTES, Flags: PUBLIC
  3808. -#define UNIT_FIELD_ATTACK_POWER OBJECT_END + 0x0075 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3809. -#define UNIT_FIELD_ATTACK_POWER_MODS OBJECT_END + 0x0076 // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
  3810. -#define UNIT_FIELD_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x0077 // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
  3811. -#define UNIT_FIELD_RANGED_ATTACK_POWER OBJECT_END + 0x0078 // Size: 1, Type: INT, Flags: PRIVATE, OWNER
  3812. -#define UNIT_FIELD_RANGED_ATTACK_POWER_MODS OBJECT_END + 0x0079 // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
  3813. -#define UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x007A // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
  3814. -#define UNIT_FIELD_MINRANGEDDAMAGE OBJECT_END + 0x007B // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
  3815. -#define UNIT_FIELD_MAXRANGEDDAMAGE OBJECT_END + 0x007C // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
  3816. -#define UNIT_FIELD_POWER_COST_MODIFIER OBJECT_END + 0x007D // Size: 7, Type: INT, Flags: PRIVATE, OWNER
  3817. -#define UNIT_FIELD_POWER_COST_MULTIPLIER OBJECT_END + 0x0084 // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
  3818. -#define UNIT_FIELD_MAXHEALTHMODIFIER OBJECT_END + 0x008B // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
  3819. -#define UNIT_FIELD_HOVERHEIGHT OBJECT_END + 0x008C // Size: 1, Type: FLOAT, Flags: PUBLIC
  3820. -#define UNIT_FIELD_PADDING OBJECT_END + 0x008D // Size: 1, Type: INT, Flags: NONE
  3821. -#define UNIT_END OBJECT_END + 0x008E
  3822. -#define PLAYER_DUEL_ARBITER UNIT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  3823. -#define PLAYER_FLAGS UNIT_END + 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
  3824. -#define PLAYER_GUILDID UNIT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
  3825. -#define PLAYER_GUILDRANK UNIT_END + 0x0004 // Size: 1, Type: INT, Flags: PUBLIC
  3826. -#define PLAYER_BYTES UNIT_END + 0x0005 // Size: 1, Type: BYTES, Flags: PUBLIC
  3827. -#define PLAYER_BYTES_2 UNIT_END + 0x0006 // Size: 1, Type: BYTES, Flags: PUBLIC
  3828. -#define PLAYER_BYTES_3 UNIT_END + 0x0007 // Size: 1, Type: BYTES, Flags: PUBLIC
  3829. -#define PLAYER_DUEL_TEAM UNIT_END + 0x0008 // Size: 1, Type: INT, Flags: PUBLIC
  3830. -#define PLAYER_GUILD_TIMESTAMP UNIT_END + 0x0009 // Size: 1, Type: INT, Flags: PUBLIC
  3831. -#define PLAYER_QUEST_LOG_1_1 UNIT_END + 0x000A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3832. -#define PLAYER_QUEST_LOG_1_2 UNIT_END + 0x000B // Size: 1, Type: INT, Flags: PRIVATE
  3833. -#define PLAYER_QUEST_LOG_1_3 UNIT_END + 0x000C // Size: 1, Type: BYTES, Flags: PRIVATE
  3834. -#define PLAYER_QUEST_LOG_1_4 UNIT_END + 0x000D // Size: 1, Type: INT, Flags: PRIVATE
  3835. -#define PLAYER_QUEST_LOG_2_1 UNIT_END + 0x000E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3836. -#define PLAYER_QUEST_LOG_2_2 UNIT_END + 0x000F // Size: 1, Type: INT, Flags: PRIVATE
  3837. -#define PLAYER_QUEST_LOG_2_3 UNIT_END + 0x0010 // Size: 1, Type: BYTES, Flags: PRIVATE
  3838. -#define PLAYER_QUEST_LOG_2_4 UNIT_END + 0x0011 // Size: 1, Type: INT, Flags: PRIVATE
  3839. -#define PLAYER_QUEST_LOG_3_1 UNIT_END + 0x0012 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3840. -#define PLAYER_QUEST_LOG_3_2 UNIT_END + 0x0013 // Size: 1, Type: INT, Flags: PRIVATE
  3841. -#define PLAYER_QUEST_LOG_3_3 UNIT_END + 0x0014 // Size: 1, Type: BYTES, Flags: PRIVATE
  3842. -#define PLAYER_QUEST_LOG_3_4 UNIT_END + 0x0015 // Size: 1, Type: INT, Flags: PRIVATE
  3843. -#define PLAYER_QUEST_LOG_4_1 UNIT_END + 0x0016 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3844. -#define PLAYER_QUEST_LOG_4_2 UNIT_END + 0x0017 // Size: 1, Type: INT, Flags: PRIVATE
  3845. -#define PLAYER_QUEST_LOG_4_3 UNIT_END + 0x0018 // Size: 1, Type: BYTES, Flags: PRIVATE
  3846. -#define PLAYER_QUEST_LOG_4_4 UNIT_END + 0x0019 // Size: 1, Type: INT, Flags: PRIVATE
  3847. -#define PLAYER_QUEST_LOG_5_1 UNIT_END + 0x001A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3848. -#define PLAYER_QUEST_LOG_5_2 UNIT_END + 0x001B // Size: 1, Type: INT, Flags: PRIVATE
  3849. -#define PLAYER_QUEST_LOG_5_3 UNIT_END + 0x001C // Size: 1, Type: BYTES, Flags: PRIVATE
  3850. -#define PLAYER_QUEST_LOG_5_4 UNIT_END + 0x001D // Size: 1, Type: INT, Flags: PRIVATE
  3851. -#define PLAYER_QUEST_LOG_6_1 UNIT_END + 0x001E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3852. -#define PLAYER_QUEST_LOG_6_2 UNIT_END + 0x001F // Size: 1, Type: INT, Flags: PRIVATE
  3853. -#define PLAYER_QUEST_LOG_6_3 UNIT_END + 0x0020 // Size: 1, Type: BYTES, Flags: PRIVATE
  3854. -#define PLAYER_QUEST_LOG_6_4 UNIT_END + 0x0021 // Size: 1, Type: INT, Flags: PRIVATE
  3855. -#define PLAYER_QUEST_LOG_7_1 UNIT_END + 0x0022 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3856. -#define PLAYER_QUEST_LOG_7_2 UNIT_END + 0x0023 // Size: 1, Type: INT, Flags: PRIVATE
  3857. -#define PLAYER_QUEST_LOG_7_3 UNIT_END + 0x0024 // Size: 1, Type: BYTES, Flags: PRIVATE
  3858. -#define PLAYER_QUEST_LOG_7_4 UNIT_END + 0x0025 // Size: 1, Type: INT, Flags: PRIVATE
  3859. -#define PLAYER_QUEST_LOG_8_1 UNIT_END + 0x0026 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3860. -#define PLAYER_QUEST_LOG_8_2 UNIT_END + 0x0027 // Size: 1, Type: INT, Flags: PRIVATE
  3861. -#define PLAYER_QUEST_LOG_8_3 UNIT_END + 0x0028 // Size: 1, Type: BYTES, Flags: PRIVATE
  3862. -#define PLAYER_QUEST_LOG_8_4 UNIT_END + 0x0029 // Size: 1, Type: INT, Flags: PRIVATE
  3863. -#define PLAYER_QUEST_LOG_9_1 UNIT_END + 0x002A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3864. -#define PLAYER_QUEST_LOG_9_2 UNIT_END + 0x002B // Size: 1, Type: INT, Flags: PRIVATE
  3865. -#define PLAYER_QUEST_LOG_9_3 UNIT_END + 0x002C // Size: 1, Type: BYTES, Flags: PRIVATE
  3866. -#define PLAYER_QUEST_LOG_9_4 UNIT_END + 0x002D // Size: 1, Type: INT, Flags: PRIVATE
  3867. -#define PLAYER_QUEST_LOG_10_1 UNIT_END + 0x002E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3868. -#define PLAYER_QUEST_LOG_10_2 UNIT_END + 0x002F // Size: 1, Type: INT, Flags: PRIVATE
  3869. -#define PLAYER_QUEST_LOG_10_3 UNIT_END + 0x0030 // Size: 1, Type: BYTES, Flags: PRIVATE
  3870. -#define PLAYER_QUEST_LOG_10_4 UNIT_END + 0x0031 // Size: 1, Type: INT, Flags: PRIVATE
  3871. -#define PLAYER_QUEST_LOG_11_1 UNIT_END + 0x0032 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3872. -#define PLAYER_QUEST_LOG_11_2 UNIT_END + 0x0033 // Size: 1, Type: INT, Flags: PRIVATE
  3873. -#define PLAYER_QUEST_LOG_11_3 UNIT_END + 0x0034 // Size: 1, Type: BYTES, Flags: PRIVATE
  3874. -#define PLAYER_QUEST_LOG_11_4 UNIT_END + 0x0035 // Size: 1, Type: INT, Flags: PRIVATE
  3875. -#define PLAYER_QUEST_LOG_12_1 UNIT_END + 0x0036 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3876. -#define PLAYER_QUEST_LOG_12_2 UNIT_END + 0x0037 // Size: 1, Type: INT, Flags: PRIVATE
  3877. -#define PLAYER_QUEST_LOG_12_3 UNIT_END + 0x0038 // Size: 1, Type: BYTES, Flags: PRIVATE
  3878. -#define PLAYER_QUEST_LOG_12_4 UNIT_END + 0x0039 // Size: 1, Type: INT, Flags: PRIVATE
  3879. -#define PLAYER_QUEST_LOG_13_1 UNIT_END + 0x003A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3880. -#define PLAYER_QUEST_LOG_13_2 UNIT_END + 0x003B // Size: 1, Type: INT, Flags: PRIVATE
  3881. -#define PLAYER_QUEST_LOG_13_3 UNIT_END + 0x003C // Size: 1, Type: BYTES, Flags: PRIVATE
  3882. -#define PLAYER_QUEST_LOG_13_4 UNIT_END + 0x003D // Size: 1, Type: INT, Flags: PRIVATE
  3883. -#define PLAYER_QUEST_LOG_14_1 UNIT_END + 0x003E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3884. -#define PLAYER_QUEST_LOG_14_2 UNIT_END + 0x003F // Size: 1, Type: INT, Flags: PRIVATE
  3885. -#define PLAYER_QUEST_LOG_14_3 UNIT_END + 0x0040 // Size: 1, Type: BYTES, Flags: PRIVATE
  3886. -#define PLAYER_QUEST_LOG_14_4 UNIT_END + 0x0041 // Size: 1, Type: INT, Flags: PRIVATE
  3887. -#define PLAYER_QUEST_LOG_15_1 UNIT_END + 0x0042 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3888. -#define PLAYER_QUEST_LOG_15_2 UNIT_END + 0x0043 // Size: 1, Type: INT, Flags: PRIVATE
  3889. -#define PLAYER_QUEST_LOG_15_3 UNIT_END + 0x0044 // Size: 1, Type: BYTES, Flags: PRIVATE
  3890. -#define PLAYER_QUEST_LOG_15_4 UNIT_END + 0x0045 // Size: 1, Type: INT, Flags: PRIVATE
  3891. -#define PLAYER_QUEST_LOG_16_1 UNIT_END + 0x0046 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3892. -#define PLAYER_QUEST_LOG_16_2 UNIT_END + 0x0047 // Size: 1, Type: INT, Flags: PRIVATE
  3893. -#define PLAYER_QUEST_LOG_16_3 UNIT_END + 0x0048 // Size: 1, Type: BYTES, Flags: PRIVATE
  3894. -#define PLAYER_QUEST_LOG_16_4 UNIT_END + 0x0049 // Size: 1, Type: INT, Flags: PRIVATE
  3895. -#define PLAYER_QUEST_LOG_17_1 UNIT_END + 0x004A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3896. -#define PLAYER_QUEST_LOG_17_2 UNIT_END + 0x004B // Size: 1, Type: INT, Flags: PRIVATE
  3897. -#define PLAYER_QUEST_LOG_17_3 UNIT_END + 0x004C // Size: 1, Type: BYTES, Flags: PRIVATE
  3898. -#define PLAYER_QUEST_LOG_17_4 UNIT_END + 0x004D // Size: 1, Type: INT, Flags: PRIVATE
  3899. -#define PLAYER_QUEST_LOG_18_1 UNIT_END + 0x004E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3900. -#define PLAYER_QUEST_LOG_18_2 UNIT_END + 0x004F // Size: 1, Type: INT, Flags: PRIVATE
  3901. -#define PLAYER_QUEST_LOG_18_3 UNIT_END + 0x0050 // Size: 1, Type: BYTES, Flags: PRIVATE
  3902. -#define PLAYER_QUEST_LOG_18_4 UNIT_END + 0x0051 // Size: 1, Type: INT, Flags: PRIVATE
  3903. -#define PLAYER_QUEST_LOG_19_1 UNIT_END + 0x0052 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3904. -#define PLAYER_QUEST_LOG_19_2 UNIT_END + 0x0053 // Size: 1, Type: INT, Flags: PRIVATE
  3905. -#define PLAYER_QUEST_LOG_19_3 UNIT_END + 0x0054 // Size: 1, Type: BYTES, Flags: PRIVATE
  3906. -#define PLAYER_QUEST_LOG_19_4 UNIT_END + 0x0055 // Size: 1, Type: INT, Flags: PRIVATE
  3907. -#define PLAYER_QUEST_LOG_20_1 UNIT_END + 0x0056 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3908. -#define PLAYER_QUEST_LOG_20_2 UNIT_END + 0x0057 // Size: 1, Type: INT, Flags: PRIVATE
  3909. -#define PLAYER_QUEST_LOG_20_3 UNIT_END + 0x0058 // Size: 1, Type: BYTES, Flags: PRIVATE
  3910. -#define PLAYER_QUEST_LOG_20_4 UNIT_END + 0x0059 // Size: 1, Type: INT, Flags: PRIVATE
  3911. -#define PLAYER_QUEST_LOG_21_1 UNIT_END + 0x005A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3912. -#define PLAYER_QUEST_LOG_21_2 UNIT_END + 0x005B // Size: 1, Type: INT, Flags: PRIVATE
  3913. -#define PLAYER_QUEST_LOG_21_3 UNIT_END + 0x005C // Size: 1, Type: BYTES, Flags: PRIVATE
  3914. -#define PLAYER_QUEST_LOG_21_4 UNIT_END + 0x005D // Size: 1, Type: INT, Flags: PRIVATE
  3915. -#define PLAYER_QUEST_LOG_22_1 UNIT_END + 0x005E // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3916. -#define PLAYER_QUEST_LOG_22_2 UNIT_END + 0x005F // Size: 1, Type: INT, Flags: PRIVATE
  3917. -#define PLAYER_QUEST_LOG_22_3 UNIT_END + 0x0060 // Size: 1, Type: BYTES, Flags: PRIVATE
  3918. -#define PLAYER_QUEST_LOG_22_4 UNIT_END + 0x0061 // Size: 1, Type: INT, Flags: PRIVATE
  3919. -#define PLAYER_QUEST_LOG_23_1 UNIT_END + 0x0062 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3920. -#define PLAYER_QUEST_LOG_23_2 UNIT_END + 0x0063 // Size: 1, Type: INT, Flags: PRIVATE
  3921. -#define PLAYER_QUEST_LOG_23_3 UNIT_END + 0x0064 // Size: 1, Type: BYTES, Flags: PRIVATE
  3922. -#define PLAYER_QUEST_LOG_23_4 UNIT_END + 0x0065 // Size: 1, Type: INT, Flags: PRIVATE
  3923. -#define PLAYER_QUEST_LOG_24_1 UNIT_END + 0x0066 // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3924. -#define PLAYER_QUEST_LOG_24_2 UNIT_END + 0x0067 // Size: 1, Type: INT, Flags: PRIVATE
  3925. -#define PLAYER_QUEST_LOG_24_3 UNIT_END + 0x0068 // Size: 1, Type: BYTES, Flags: PRIVATE
  3926. -#define PLAYER_QUEST_LOG_24_4 UNIT_END + 0x0069 // Size: 1, Type: INT, Flags: PRIVATE
  3927. -#define PLAYER_QUEST_LOG_25_1 UNIT_END + 0x006A // Size: 1, Type: INT, Flags: PARTY_MEMBER
  3928. -#define PLAYER_QUEST_LOG_25_2 UNIT_END + 0x006B // Size: 1, Type: INT, Flags: PRIVATE
  3929. -#define PLAYER_QUEST_LOG_25_3 UNIT_END + 0x006C // Size: 1, Type: BYTES, Flags: PRIVATE
  3930. -#define PLAYER_QUEST_LOG_25_4 UNIT_END + 0x006D // Size: 1, Type: INT, Flags: PRIVATE
  3931. -#define PLAYER_VISIBLE_ITEM_1_ENTRYID UNIT_END + 0x006E // Size: 1, Type: INT, Flags: PUBLIC
  3932. -#define PLAYER_VISIBLE_ITEM_1_ENCHANTMENT UNIT_END + 0x006F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3933. -#define PLAYER_VISIBLE_ITEM_2_ENTRYID UNIT_END + 0x0070 // Size: 1, Type: INT, Flags: PUBLIC
  3934. -#define PLAYER_VISIBLE_ITEM_2_ENCHANTMENT UNIT_END + 0x0071 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3935. -#define PLAYER_VISIBLE_ITEM_3_ENTRYID UNIT_END + 0x0072 // Size: 1, Type: INT, Flags: PUBLIC
  3936. -#define PLAYER_VISIBLE_ITEM_3_ENCHANTMENT UNIT_END + 0x0073 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3937. -#define PLAYER_VISIBLE_ITEM_4_ENTRYID UNIT_END + 0x0074 // Size: 1, Type: INT, Flags: PUBLIC
  3938. -#define PLAYER_VISIBLE_ITEM_4_ENCHANTMENT UNIT_END + 0x0075 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3939. -#define PLAYER_VISIBLE_ITEM_5_ENTRYID UNIT_END + 0x0076 // Size: 1, Type: INT, Flags: PUBLIC
  3940. -#define PLAYER_VISIBLE_ITEM_5_ENCHANTMENT UNIT_END + 0x0077 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3941. -#define PLAYER_VISIBLE_ITEM_6_ENTRYID UNIT_END + 0x0078 // Size: 1, Type: INT, Flags: PUBLIC
  3942. -#define PLAYER_VISIBLE_ITEM_6_ENCHANTMENT UNIT_END + 0x0079 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3943. -#define PLAYER_VISIBLE_ITEM_7_ENTRYID UNIT_END + 0x007A // Size: 1, Type: INT, Flags: PUBLIC
  3944. -#define PLAYER_VISIBLE_ITEM_7_ENCHANTMENT UNIT_END + 0x007B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3945. -#define PLAYER_VISIBLE_ITEM_8_ENTRYID UNIT_END + 0x007C // Size: 1, Type: INT, Flags: PUBLIC
  3946. -#define PLAYER_VISIBLE_ITEM_8_ENCHANTMENT UNIT_END + 0x007D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3947. -#define PLAYER_VISIBLE_ITEM_9_ENTRYID UNIT_END + 0x007E // Size: 1, Type: INT, Flags: PUBLIC
  3948. -#define PLAYER_VISIBLE_ITEM_9_ENCHANTMENT UNIT_END + 0x007F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3949. -#define PLAYER_VISIBLE_ITEM_10_ENTRYID UNIT_END + 0x0080 // Size: 1, Type: INT, Flags: PUBLIC
  3950. -#define PLAYER_VISIBLE_ITEM_10_ENCHANTMENT UNIT_END + 0x0081 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3951. -#define PLAYER_VISIBLE_ITEM_11_ENTRYID UNIT_END + 0x0082 // Size: 1, Type: INT, Flags: PUBLIC
  3952. -#define PLAYER_VISIBLE_ITEM_11_ENCHANTMENT UNIT_END + 0x0083 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3953. -#define PLAYER_VISIBLE_ITEM_12_ENTRYID UNIT_END + 0x0084 // Size: 1, Type: INT, Flags: PUBLIC
  3954. -#define PLAYER_VISIBLE_ITEM_12_ENCHANTMENT UNIT_END + 0x0085 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3955. -#define PLAYER_VISIBLE_ITEM_13_ENTRYID UNIT_END + 0x0086 // Size: 1, Type: INT, Flags: PUBLIC
  3956. -#define PLAYER_VISIBLE_ITEM_13_ENCHANTMENT UNIT_END + 0x0087 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3957. -#define PLAYER_VISIBLE_ITEM_14_ENTRYID UNIT_END + 0x0088 // Size: 1, Type: INT, Flags: PUBLIC
  3958. -#define PLAYER_VISIBLE_ITEM_14_ENCHANTMENT UNIT_END + 0x0089 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3959. -#define PLAYER_VISIBLE_ITEM_15_ENTRYID UNIT_END + 0x008A // Size: 1, Type: INT, Flags: PUBLIC
  3960. -#define PLAYER_VISIBLE_ITEM_15_ENCHANTMENT UNIT_END + 0x008B // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3961. -#define PLAYER_VISIBLE_ITEM_16_ENTRYID UNIT_END + 0x008C // Size: 1, Type: INT, Flags: PUBLIC
  3962. -#define PLAYER_VISIBLE_ITEM_16_ENCHANTMENT UNIT_END + 0x008D // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3963. -#define PLAYER_VISIBLE_ITEM_17_ENTRYID UNIT_END + 0x008E // Size: 1, Type: INT, Flags: PUBLIC
  3964. -#define PLAYER_VISIBLE_ITEM_17_ENCHANTMENT UNIT_END + 0x008F // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3965. -#define PLAYER_VISIBLE_ITEM_18_ENTRYID UNIT_END + 0x0090 // Size: 1, Type: INT, Flags: PUBLIC
  3966. -#define PLAYER_VISIBLE_ITEM_18_ENCHANTMENT UNIT_END + 0x0091 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3967. -#define PLAYER_VISIBLE_ITEM_19_ENTRYID UNIT_END + 0x0092 // Size: 1, Type: INT, Flags: PUBLIC
  3968. -#define PLAYER_VISIBLE_ITEM_19_ENCHANTMENT UNIT_END + 0x0093 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
  3969. -#define PLAYER_CHOSEN_TITLE UNIT_END + 0x0094 // Size: 1, Type: INT, Flags: PUBLIC
  3970. -#define PLAYER_FAKE_INEBRIATION UNIT_END + 0x0095 // Size: 1, Type: INT, Flags: PUBLIC
  3971. -#define PLAYER_FIELD_INV_SLOT_HEAD UNIT_END + 0x0096 // Size: 46, Type: LONG, Flags: PRIVATE
  3972. -#define PLAYER_FIELD_PACK_SLOT_1 UNIT_END + 0x00C4 // Size: 32, Type: LONG, Flags: PRIVATE
  3973. -#define PLAYER_FIELD_BANK_SLOT_1 UNIT_END + 0x00E4 // Size: 56, Type: LONG, Flags: PRIVATE
  3974. -#define PLAYER_FIELD_BANKBAG_SLOT_1 UNIT_END + 0x011C // Size: 14, Type: LONG, Flags: PRIVATE
  3975. -#define PLAYER_FIELD_VENDORBUYBACK_SLOT_1 UNIT_END + 0x012A // Size: 24, Type: LONG, Flags: PRIVATE
  3976. -#define PLAYER_FIELD_KEYRING_SLOT_1 UNIT_END + 0x0142 // Size: 64, Type: LONG, Flags: PRIVATE
  3977. -#define PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 UNIT_END + 0x0182 // Size: 64, Type: LONG, Flags: PRIVATE
  3978. -#define PLAYER_FARSIGHT UNIT_END + 0x01C2 // Size: 2, Type: LONG, Flags: PRIVATE
  3979. -#define PLAYER__FIELD_KNOWN_TITLES UNIT_END + 0x01C4 // Size: 2, Type: LONG, Flags: PRIVATE
  3980. -#define PLAYER__FIELD_KNOWN_TITLES1 UNIT_END + 0x01C6 // Size: 2, Type: LONG, Flags: PRIVATE
  3981. -#define PLAYER__FIELD_KNOWN_TITLES2 UNIT_END + 0x01C8 // Size: 2, Type: LONG, Flags: PRIVATE
  3982. -#define PLAYER_FIELD_KNOWN_CURRENCIES UNIT_END + 0x01CA // Size: 2, Type: LONG, Flags: PRIVATE
  3983. -#define PLAYER_XP UNIT_END + 0x01CC // Size: 1, Type: INT, Flags: PRIVATE
  3984. -#define PLAYER_NEXT_LEVEL_XP UNIT_END + 0x01CD // Size: 1, Type: INT, Flags: PRIVATE
  3985. -#define PLAYER_SKILL_INFO_1_1 UNIT_END + 0x01CE // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
  3986. -#define PLAYER_CHARACTER_POINTS1 UNIT_END + 0x034E // Size: 1, Type: INT, Flags: PRIVATE
  3987. -#define PLAYER_CHARACTER_POINTS2 UNIT_END + 0x034F // Size: 1, Type: INT, Flags: PRIVATE
  3988. -#define PLAYER_TRACK_CREATURES UNIT_END + 0x0350 // Size: 1, Type: INT, Flags: PRIVATE
  3989. -#define PLAYER_TRACK_RESOURCES UNIT_END + 0x0351 // Size: 1, Type: INT, Flags: PRIVATE
  3990. -#define PLAYER_BLOCK_PERCENTAGE UNIT_END + 0x0352 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3991. -#define PLAYER_DODGE_PERCENTAGE UNIT_END + 0x0353 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3992. -#define PLAYER_PARRY_PERCENTAGE UNIT_END + 0x0354 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3993. -#define PLAYER_EXPERTISE UNIT_END + 0x0355 // Size: 1, Type: INT, Flags: PRIVATE
  3994. -#define PLAYER_OFFHAND_EXPERTISE UNIT_END + 0x0356 // Size: 1, Type: INT, Flags: PRIVATE
  3995. -#define PLAYER_CRIT_PERCENTAGE UNIT_END + 0x0357 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3996. -#define PLAYER_RANGED_CRIT_PERCENTAGE UNIT_END + 0x0358 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3997. -#define PLAYER_OFFHAND_CRIT_PERCENTAGE UNIT_END + 0x0359 // Size: 1, Type: FLOAT, Flags: PRIVATE
  3998. -#define PLAYER_SPELL_CRIT_PERCENTAGE1 UNIT_END + 0x035A // Size: 7, Type: FLOAT, Flags: PRIVATE
  3999. -#define PLAYER_SHIELD_BLOCK UNIT_END + 0x0361 // Size: 1, Type: INT, Flags: PRIVATE
  4000. -#define PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE UNIT_END + 0x0362 // Size: 1, Type: FLOAT, Flags: PRIVATE
  4001. -#define PLAYER_EXPLORED_ZONES_1 UNIT_END + 0x0363 // Size: 128, Type: BYTES, Flags: PRIVATE
  4002. -#define PLAYER_REST_STATE_EXPERIENCE UNIT_END + 0x03E3 // Size: 1, Type: INT, Flags: PRIVATE
  4003. -#define PLAYER_FIELD_COINAGE UNIT_END + 0x03E4 // Size: 1, Type: INT, Flags: PRIVATE
  4004. -#define PLAYER_FIELD_MOD_DAMAGE_DONE_POS UNIT_END + 0x03E5 // Size: 7, Type: INT, Flags: PRIVATE
  4005. -#define PLAYER_FIELD_MOD_DAMAGE_DONE_NEG UNIT_END + 0x03EC // Size: 7, Type: INT, Flags: PRIVATE
  4006. -#define PLAYER_FIELD_MOD_DAMAGE_DONE_PCT UNIT_END + 0x03F3 // Size: 7, Type: INT, Flags: PRIVATE
  4007. -#define PLAYER_FIELD_MOD_HEALING_DONE_POS UNIT_END + 0x03FA // Size: 1, Type: INT, Flags: PRIVATE
  4008. -#define PLAYER_FIELD_MOD_HEALING_PCT UNIT_END + 0x03FB // Size: 1, Type: FLOAT, Flags: PRIVATE
  4009. -#define PLAYER_FIELD_MOD_HEALING_DONE_PCT UNIT_END + 0x03FC // Size: 1, Type: FLOAT, Flags: PRIVATE
  4010. -#define PLAYER_FIELD_MOD_TARGET_RESISTANCE UNIT_END + 0x03FD // Size: 1, Type: INT, Flags: PRIVATE
  4011. -#define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x03FE // Size: 1, Type: INT, Flags: PRIVATE
  4012. -#define PLAYER_FIELD_BYTES UNIT_END + 0x03FF // Size: 1, Type: BYTES, Flags: PRIVATE
  4013. -#define PLAYER_AMMO_ID UNIT_END + 0x0400 // Size: 1, Type: INT, Flags: PRIVATE
  4014. -#define PLAYER_SELF_RES_SPELL UNIT_END + 0x0401 // Size: 1, Type: INT, Flags: PRIVATE
  4015. -#define PLAYER_FIELD_PVP_MEDALS UNIT_END + 0x0402 // Size: 1, Type: INT, Flags: PRIVATE
  4016. -#define PLAYER_FIELD_BUYBACK_PRICE_1 UNIT_END + 0x0403 // Size: 12, Type: INT, Flags: PRIVATE
  4017. -#define PLAYER_FIELD_BUYBACK_TIMESTAMP_1 UNIT_END + 0x040F // Size: 12, Type: INT, Flags: PRIVATE
  4018. -#define PLAYER_FIELD_KILLS UNIT_END + 0x041B // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
  4019. -#define PLAYER_FIELD_TODAY_CONTRIBUTION UNIT_END + 0x041C // Size: 1, Type: INT, Flags: PRIVATE
  4020. -#define PLAYER_FIELD_YESTERDAY_CONTRIBUTION UNIT_END + 0x041D // Size: 1, Type: INT, Flags: PRIVATE
  4021. -#define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS UNIT_END + 0x041E // Size: 1, Type: INT, Flags: PRIVATE
  4022. -#define PLAYER_FIELD_BYTES2 UNIT_END + 0x041F // Size: 1, Type: 6, Flags: PRIVATE
  4023. -#define PLAYER_FIELD_WATCHED_FACTION_INDEX UNIT_END + 0x0420 // Size: 1, Type: INT, Flags: PRIVATE
  4024. -#define PLAYER_FIELD_COMBAT_RATING_1 UNIT_END + 0x0421 // Size: 25, Type: INT, Flags: PRIVATE
  4025. -#define PLAYER_FIELD_ARENA_TEAM_INFO_1_1 UNIT_END + 0x043A // Size: 21, Type: INT, Flags: PRIVATE
  4026. -#define PLAYER_FIELD_HONOR_CURRENCY UNIT_END + 0x044F // Size: 1, Type: INT, Flags: PRIVATE
  4027. -#define PLAYER_FIELD_ARENA_CURRENCY UNIT_END + 0x0450 // Size: 1, Type: INT, Flags: PRIVATE
  4028. -#define PLAYER_FIELD_MAX_LEVEL UNIT_END + 0x0451 // Size: 1, Type: INT, Flags: PRIVATE
  4029. -#define PLAYER_FIELD_DAILY_QUESTS_1 UNIT_END + 0x0452 // Size: 25, Type: INT, Flags: PRIVATE
  4030. -#define PLAYER_RUNE_REGEN_1 UNIT_END + 0x046B // Size: 4, Type: FLOAT, Flags: PRIVATE
  4031. -#define PLAYER_NO_REAGENT_COST_1 UNIT_END + 0x046F // Size: 3, Type: INT, Flags: PRIVATE
  4032. -#define PLAYER_FIELD_GLYPH_SLOTS_1 UNIT_END + 0x0472 // Size: 6, Type: INT, Flags: PRIVATE
  4033. -#define PLAYER_FIELD_GLYPHS_1 UNIT_END + 0x0478 // Size: 6, Type: INT, Flags: PRIVATE
  4034. -#define PLAYER_GLYPHS_ENABLED UNIT_END + 0x047E // Size: 1, Type: INT, Flags: PRIVATE
  4035. -#define PLAYER_FIELD_PADDING UNIT_END + 0x047F // Size: 1, Type: INT, Flags: NONE
  4036. -#define PLAYER_END UNIT_END + 0x0480
  4037. +#define UNIT_FIELD_CHARM OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  4038. +#define UNIT_FIELD_SUMMON OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
  4039. +#define UNIT_FIELD_CRITTER OBJECT_END + 0x0004 // Size: 2 Type: LONG Flags: PRIVATE
  4040. +#define UNIT_FIELD_CHARMEDBY OBJECT_END + 0x0006 // Size: 2 Type: LONG Flags: PUBLIC
  4041. +#define UNIT_FIELD_SUMMONEDBY OBJECT_END + 0x0008 // Size: 2 Type: LONG Flags: PUBLIC
  4042. +#define UNIT_FIELD_CREATEDBY OBJECT_END + 0x000A // Size: 2 Type: LONG Flags: PUBLIC
  4043. +#define UNIT_FIELD_TARGET OBJECT_END + 0x000C // Size: 2 Type: LONG Flags: PUBLIC
  4044. +#define UNIT_FIELD_CHANNEL_OBJECT OBJECT_END + 0x000E // Size: 2 Type: LONG Flags: PUBLIC
  4045. +#define UNIT_FIELD_BYTES_0 OBJECT_END + 0x0010 // Size: 1 Type: BYTES Flags: PUBLIC
  4046. +#define UNIT_FIELD_HEALTH OBJECT_END + 0x0011 // Size: 1 Type: INT Flags: PUBLIC
  4047. +#define UNIT_FIELD_POWER1 OBJECT_END + 0x0012 // Size: 1 Type: INT Flags: PUBLIC
  4048. +#define UNIT_FIELD_POWER2 OBJECT_END + 0x0013 // Size: 1 Type: INT Flags: PUBLIC
  4049. +#define UNIT_FIELD_POWER3 OBJECT_END + 0x0014 // Size: 1 Type: INT Flags: PUBLIC
  4050. +#define UNIT_FIELD_POWER4 OBJECT_END + 0x0015 // Size: 1 Type: INT Flags: PUBLIC
  4051. +#define UNIT_FIELD_POWER5 OBJECT_END + 0x0016 // Size: 1 Type: INT Flags: PUBLIC
  4052. +#define UNIT_FIELD_POWER6 OBJECT_END + 0x0017 // Size: 1 Type: INT Flags: PUBLIC
  4053. +#define UNIT_FIELD_POWER7 OBJECT_END + 0x0018 // Size: 1 Type: INT Flags: PUBLIC
  4054. +#define UNIT_FIELD_MAXHEALTH OBJECT_END + 0x0019 // Size: 1 Type: INT Flags: PUBLIC
  4055. +#define UNIT_FIELD_MAXPOWER1 OBJECT_END + 0x001A // Size: 1 Type: INT Flags: PUBLIC
  4056. +#define UNIT_FIELD_MAXPOWER2 OBJECT_END + 0x001B // Size: 1 Type: INT Flags: PUBLIC
  4057. +#define UNIT_FIELD_MAXPOWER3 OBJECT_END + 0x001C // Size: 1 Type: INT Flags: PUBLIC
  4058. +#define UNIT_FIELD_MAXPOWER4 OBJECT_END + 0x001D // Size: 1 Type: INT Flags: PUBLIC
  4059. +#define UNIT_FIELD_MAXPOWER5 OBJECT_END + 0x001E // Size: 1 Type: INT Flags: PUBLIC
  4060. +#define UNIT_FIELD_MAXPOWER6 OBJECT_END + 0x001F // Size: 1 Type: INT Flags: PUBLIC
  4061. +#define UNIT_FIELD_MAXPOWER7 OBJECT_END + 0x0020 // Size: 1 Type: INT Flags: PUBLIC
  4062. +#define UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER OBJECT_END + 0x0021 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
  4063. +#define UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER OBJECT_END + 0x0028 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
  4064. +#define UNIT_FIELD_LEVEL OBJECT_END + 0x002F // Size: 1 Type: INT Flags: PUBLIC
  4065. +#define UNIT_FIELD_FACTIONTEMPLATE OBJECT_END + 0x0030 // Size: 1 Type: INT Flags: PUBLIC
  4066. +#define UNIT_VIRTUAL_ITEM_SLOT_ID OBJECT_END + 0x0031 // Size: 3 Type: INT Flags: PUBLIC
  4067. +#define UNIT_FIELD_FLAGS OBJECT_END + 0x0034 // Size: 1 Type: INT Flags: PUBLIC
  4068. +#define UNIT_FIELD_FLAGS_2 OBJECT_END + 0x0035 // Size: 1 Type: INT Flags: PUBLIC
  4069. +#define UNIT_FIELD_AURASTATE OBJECT_END + 0x0036 // Size: 1 Type: INT Flags: PUBLIC
  4070. +#define UNIT_FIELD_BASEATTACKTIME OBJECT_END + 0x0037 // Size: 2 Type: INT Flags: PUBLIC
  4071. +#define UNIT_FIELD_RANGEDATTACKTIME OBJECT_END + 0x0039 // Size: 1 Type: INT Flags: PRIVATE
  4072. +#define UNIT_FIELD_BOUNDINGRADIUS OBJECT_END + 0x003A // Size: 1 Type: FLOAT Flags: PUBLIC
  4073. +#define UNIT_FIELD_COMBATREACH OBJECT_END + 0x003B // Size: 1 Type: FLOAT Flags: PUBLIC
  4074. +#define UNIT_FIELD_DISPLAYID OBJECT_END + 0x003C // Size: 1 Type: INT Flags: PUBLIC
  4075. +#define UNIT_FIELD_NATIVEDISPLAYID OBJECT_END + 0x003D // Size: 1 Type: INT Flags: PUBLIC
  4076. +#define UNIT_FIELD_MOUNTDISPLAYID OBJECT_END + 0x003E // Size: 1 Type: INT Flags: PUBLIC
  4077. +#define UNIT_FIELD_MINDAMAGE OBJECT_END + 0x003F // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
  4078. +#define UNIT_FIELD_MAXDAMAGE OBJECT_END + 0x0040 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
  4079. +#define UNIT_FIELD_MINOFFHANDDAMAGE OBJECT_END + 0x0041 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
  4080. +#define UNIT_FIELD_MAXOFFHANDDAMAGE OBJECT_END + 0x0042 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER PARTY_LEADER
  4081. +#define UNIT_FIELD_BYTES_1 OBJECT_END + 0x0043 // Size: 1 Type: BYTES Flags: PUBLIC
  4082. +#define UNIT_FIELD_PETNUMBER OBJECT_END + 0x0044 // Size: 1 Type: INT Flags: PUBLIC
  4083. +#define UNIT_FIELD_PET_NAME_TIMESTAMP OBJECT_END + 0x0045 // Size: 1 Type: INT Flags: PUBLIC
  4084. +#define UNIT_FIELD_PETEXPERIENCE OBJECT_END + 0x0046 // Size: 1 Type: INT Flags: OWNER
  4085. +#define UNIT_FIELD_PETNEXTLEVELEXP OBJECT_END + 0x0047 // Size: 1 Type: INT Flags: OWNER
  4086. +#define UNIT_DYNAMIC_FLAGS OBJECT_END + 0x0048 // Size: 1 Type: INT Flags: DYNAMIC
  4087. +#define UNIT_CHANNEL_SPELL OBJECT_END + 0x0049 // Size: 1 Type: INT Flags: PUBLIC
  4088. +#define UNIT_MOD_CAST_SPEED OBJECT_END + 0x004A // Size: 1 Type: FLOAT Flags: PUBLIC
  4089. +#define UNIT_CREATED_BY_SPELL OBJECT_END + 0x004B // Size: 1 Type: INT Flags: PUBLIC
  4090. +#define UNIT_NPC_FLAGS OBJECT_END + 0x004C // Size: 1 Type: INT Flags: DYNAMIC
  4091. +#define UNIT_NPC_EMOTESTATE OBJECT_END + 0x004D // Size: 1 Type: INT Flags: PUBLIC
  4092. +#define UNIT_FIELD_STAT0 OBJECT_END + 0x004E // Size: 1 Type: INT Flags: PRIVATE OWNER
  4093. +#define UNIT_FIELD_STAT1 OBJECT_END + 0x004F // Size: 1 Type: INT Flags: PRIVATE OWNER
  4094. +#define UNIT_FIELD_STAT2 OBJECT_END + 0x0050 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4095. +#define UNIT_FIELD_STAT3 OBJECT_END + 0x0051 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4096. +#define UNIT_FIELD_STAT4 OBJECT_END + 0x0052 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4097. +#define UNIT_FIELD_POSSTAT0 OBJECT_END + 0x0053 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4098. +#define UNIT_FIELD_POSSTAT1 OBJECT_END + 0x0054 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4099. +#define UNIT_FIELD_POSSTAT2 OBJECT_END + 0x0055 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4100. +#define UNIT_FIELD_POSSTAT3 OBJECT_END + 0x0056 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4101. +#define UNIT_FIELD_POSSTAT4 OBJECT_END + 0x0057 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4102. +#define UNIT_FIELD_NEGSTAT0 OBJECT_END + 0x0058 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4103. +#define UNIT_FIELD_NEGSTAT1 OBJECT_END + 0x0059 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4104. +#define UNIT_FIELD_NEGSTAT2 OBJECT_END + 0x005A // Size: 1 Type: INT Flags: PRIVATE OWNER
  4105. +#define UNIT_FIELD_NEGSTAT3 OBJECT_END + 0x005B // Size: 1 Type: INT Flags: PRIVATE OWNER
  4106. +#define UNIT_FIELD_NEGSTAT4 OBJECT_END + 0x005C // Size: 1 Type: INT Flags: PRIVATE OWNER
  4107. +#define UNIT_FIELD_RESISTANCES OBJECT_END + 0x005D // Size: 7 Type: INT Flags: PRIVATE OWNER PARTY_LEADER
  4108. +#define UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE OBJECT_END + 0x0064 // Size: 7 Type: INT Flags: PRIVATE OWNER
  4109. +#define UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE OBJECT_END + 0x006B // Size: 7 Type: INT Flags: PRIVATE OWNER
  4110. +#define UNIT_FIELD_BASE_MANA OBJECT_END + 0x0072 // Size: 1 Type: INT Flags: PUBLIC
  4111. +#define UNIT_FIELD_BASE_HEALTH OBJECT_END + 0x0073 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4112. +#define UNIT_FIELD_BYTES_2 OBJECT_END + 0x0074 // Size: 1 Type: BYTES Flags: PUBLIC
  4113. +#define UNIT_FIELD_ATTACK_POWER OBJECT_END + 0x0075 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4114. +#define UNIT_FIELD_ATTACK_POWER_MODS OBJECT_END + 0x0076 // Size: 1 Type: TWO_SHORT Flags: PRIVATE OWNER
  4115. +#define UNIT_FIELD_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x0077 // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
  4116. +#define UNIT_FIELD_RANGED_ATTACK_POWER OBJECT_END + 0x0078 // Size: 1 Type: INT Flags: PRIVATE OWNER
  4117. +#define UNIT_FIELD_RANGED_ATTACK_POWER_MODS OBJECT_END + 0x0079 // Size: 1 Type: TWO_SHORT Flags: PRIVATE OWNER
  4118. +#define UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER OBJECT_END + 0x007A // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
  4119. +#define UNIT_FIELD_MINRANGEDDAMAGE OBJECT_END + 0x007B // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
  4120. +#define UNIT_FIELD_MAXRANGEDDAMAGE OBJECT_END + 0x007C // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
  4121. +#define UNIT_FIELD_POWER_COST_MODIFIER OBJECT_END + 0x007D // Size: 7 Type: INT Flags: PRIVATE OWNER
  4122. +#define UNIT_FIELD_POWER_COST_MULTIPLIER OBJECT_END + 0x0084 // Size: 7 Type: FLOAT Flags: PRIVATE OWNER
  4123. +#define UNIT_FIELD_MAXHEALTHMODIFIER OBJECT_END + 0x008B // Size: 1 Type: FLOAT Flags: PRIVATE OWNER
  4124. +#define UNIT_FIELD_HOVERHEIGHT OBJECT_END + 0x008C // Size: 1 Type: FLOAT Flags: PUBLIC
  4125. +#define UNIT_FIELD_PADDING OBJECT_END + 0x008D // Size: 1 Type: INT Flags: NONE
  4126. +#define UNIT_END OBJECT_END + 0x008E
  4127. +
  4128. +#define PLAYER_DUEL_ARBITER UNIT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  4129. +#define PLAYER_FLAGS UNIT_END + 0x0002 // Size: 1 Type: INT Flags: PUBLIC
  4130. +#define PLAYER_GUILDID UNIT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
  4131. +#define PLAYER_GUILDRANK UNIT_END + 0x0004 // Size: 1 Type: INT Flags: PUBLIC
  4132. +#define PLAYER_BYTES UNIT_END + 0x0005 // Size: 1 Type: BYTES Flags: PUBLIC
  4133. +#define PLAYER_BYTES_2 UNIT_END + 0x0006 // Size: 1 Type: BYTES Flags: PUBLIC
  4134. +#define PLAYER_BYTES_3 UNIT_END + 0x0007 // Size: 1 Type: BYTES Flags: PUBLIC
  4135. +#define PLAYER_DUEL_TEAM UNIT_END + 0x0008 // Size: 1 Type: INT Flags: PUBLIC
  4136. +#define PLAYER_GUILD_TIMESTAMP UNIT_END + 0x0009 // Size: 1 Type: INT Flags: PUBLIC
  4137. +#define PLAYER_QUEST_LOG_1_1 UNIT_END + 0x000A // Size: 1 Type: INT Flags: PARTY_MEMBER
  4138. +#define PLAYER_QUEST_LOG_1_2 UNIT_END + 0x000B // Size: 1 Type: INT Flags: PRIVATE
  4139. +#define PLAYER_QUEST_LOG_1_3 UNIT_END + 0x000C // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4140. +#define PLAYER_QUEST_LOG_1_5 UNIT_END + 0x000E // Size: 1 Type: INT Flags: PRIVATE
  4141. +#define PLAYER_QUEST_LOG_2_1 UNIT_END + 0x000F // Size: 1 Type: INT Flags: PARTY_MEMBER
  4142. +#define PLAYER_QUEST_LOG_2_2 UNIT_END + 0x0010 // Size: 1 Type: INT Flags: PRIVATE
  4143. +#define PLAYER_QUEST_LOG_2_3 UNIT_END + 0x0011 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4144. +#define PLAYER_QUEST_LOG_2_5 UNIT_END + 0x0013 // Size: 1 Type: INT Flags: PRIVATE
  4145. +#define PLAYER_QUEST_LOG_3_1 UNIT_END + 0x0014 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4146. +#define PLAYER_QUEST_LOG_3_2 UNIT_END + 0x0015 // Size: 1 Type: INT Flags: PRIVATE
  4147. +#define PLAYER_QUEST_LOG_3_3 UNIT_END + 0x0016 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4148. +#define PLAYER_QUEST_LOG_3_5 UNIT_END + 0x0018 // Size: 1 Type: INT Flags: PRIVATE
  4149. +#define PLAYER_QUEST_LOG_4_1 UNIT_END + 0x0019 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4150. +#define PLAYER_QUEST_LOG_4_2 UNIT_END + 0x001A // Size: 1 Type: INT Flags: PRIVATE
  4151. +#define PLAYER_QUEST_LOG_4_3 UNIT_END + 0x001B // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4152. +#define PLAYER_QUEST_LOG_4_5 UNIT_END + 0x001D // Size: 1 Type: INT Flags: PRIVATE
  4153. +#define PLAYER_QUEST_LOG_5_1 UNIT_END + 0x001E // Size: 1 Type: INT Flags: PARTY_MEMBER
  4154. +#define PLAYER_QUEST_LOG_5_2 UNIT_END + 0x001F // Size: 1 Type: INT Flags: PRIVATE
  4155. +#define PLAYER_QUEST_LOG_5_3 UNIT_END + 0x0020 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4156. +#define PLAYER_QUEST_LOG_5_5 UNIT_END + 0x0022 // Size: 1 Type: INT Flags: PRIVATE
  4157. +#define PLAYER_QUEST_LOG_6_1 UNIT_END + 0x0023 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4158. +#define PLAYER_QUEST_LOG_6_2 UNIT_END + 0x0024 // Size: 1 Type: INT Flags: PRIVATE
  4159. +#define PLAYER_QUEST_LOG_6_3 UNIT_END + 0x0025 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4160. +#define PLAYER_QUEST_LOG_6_5 UNIT_END + 0x0027 // Size: 1 Type: INT Flags: PRIVATE
  4161. +#define PLAYER_QUEST_LOG_7_1 UNIT_END + 0x0028 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4162. +#define PLAYER_QUEST_LOG_7_2 UNIT_END + 0x0029 // Size: 1 Type: INT Flags: PRIVATE
  4163. +#define PLAYER_QUEST_LOG_7_3 UNIT_END + 0x002A // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4164. +#define PLAYER_QUEST_LOG_7_5 UNIT_END + 0x002C // Size: 1 Type: INT Flags: PRIVATE
  4165. +#define PLAYER_QUEST_LOG_8_1 UNIT_END + 0x002D // Size: 1 Type: INT Flags: PARTY_MEMBER
  4166. +#define PLAYER_QUEST_LOG_8_2 UNIT_END + 0x002E // Size: 1 Type: INT Flags: PRIVATE
  4167. +#define PLAYER_QUEST_LOG_8_3 UNIT_END + 0x002F // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4168. +#define PLAYER_QUEST_LOG_8_5 UNIT_END + 0x0031 // Size: 1 Type: INT Flags: PRIVATE
  4169. +#define PLAYER_QUEST_LOG_9_1 UNIT_END + 0x0032 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4170. +#define PLAYER_QUEST_LOG_9_2 UNIT_END + 0x0033 // Size: 1 Type: INT Flags: PRIVATE
  4171. +#define PLAYER_QUEST_LOG_9_3 UNIT_END + 0x0034 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4172. +#define PLAYER_QUEST_LOG_9_5 UNIT_END + 0x0036 // Size: 1 Type: INT Flags: PRIVATE
  4173. +#define PLAYER_QUEST_LOG_10_1 UNIT_END + 0x0037 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4174. +#define PLAYER_QUEST_LOG_10_2 UNIT_END + 0x0038 // Size: 1 Type: INT Flags: PRIVATE
  4175. +#define PLAYER_QUEST_LOG_10_3 UNIT_END + 0x0039 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4176. +#define PLAYER_QUEST_LOG_10_5 UNIT_END + 0x003B // Size: 1 Type: INT Flags: PRIVATE
  4177. +#define PLAYER_QUEST_LOG_11_1 UNIT_END + 0x003C // Size: 1 Type: INT Flags: PARTY_MEMBER
  4178. +#define PLAYER_QUEST_LOG_11_2 UNIT_END + 0x003D // Size: 1 Type: INT Flags: PRIVATE
  4179. +#define PLAYER_QUEST_LOG_11_3 UNIT_END + 0x003E // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4180. +#define PLAYER_QUEST_LOG_11_5 UNIT_END + 0x0040 // Size: 1 Type: INT Flags: PRIVATE
  4181. +#define PLAYER_QUEST_LOG_12_1 UNIT_END + 0x0041 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4182. +#define PLAYER_QUEST_LOG_12_2 UNIT_END + 0x0042 // Size: 1 Type: INT Flags: PRIVATE
  4183. +#define PLAYER_QUEST_LOG_12_3 UNIT_END + 0x0043 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4184. +#define PLAYER_QUEST_LOG_12_5 UNIT_END + 0x0045 // Size: 1 Type: INT Flags: PRIVATE
  4185. +#define PLAYER_QUEST_LOG_13_1 UNIT_END + 0x0046 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4186. +#define PLAYER_QUEST_LOG_13_2 UNIT_END + 0x0047 // Size: 1 Type: INT Flags: PRIVATE
  4187. +#define PLAYER_QUEST_LOG_13_3 UNIT_END + 0x0048 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4188. +#define PLAYER_QUEST_LOG_13_5 UNIT_END + 0x004A // Size: 1 Type: INT Flags: PRIVATE
  4189. +#define PLAYER_QUEST_LOG_14_1 UNIT_END + 0x004B // Size: 1 Type: INT Flags: PARTY_MEMBER
  4190. +#define PLAYER_QUEST_LOG_14_2 UNIT_END + 0x004C // Size: 1 Type: INT Flags: PRIVATE
  4191. +#define PLAYER_QUEST_LOG_14_3 UNIT_END + 0x004D // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4192. +#define PLAYER_QUEST_LOG_14_5 UNIT_END + 0x004F // Size: 1 Type: INT Flags: PRIVATE
  4193. +#define PLAYER_QUEST_LOG_15_1 UNIT_END + 0x0050 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4194. +#define PLAYER_QUEST_LOG_15_2 UNIT_END + 0x0051 // Size: 1 Type: INT Flags: PRIVATE
  4195. +#define PLAYER_QUEST_LOG_15_3 UNIT_END + 0x0052 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4196. +#define PLAYER_QUEST_LOG_15_5 UNIT_END + 0x0054 // Size: 1 Type: INT Flags: PRIVATE
  4197. +#define PLAYER_QUEST_LOG_16_1 UNIT_END + 0x0055 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4198. +#define PLAYER_QUEST_LOG_16_2 UNIT_END + 0x0056 // Size: 1 Type: INT Flags: PRIVATE
  4199. +#define PLAYER_QUEST_LOG_16_3 UNIT_END + 0x0057 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4200. +#define PLAYER_QUEST_LOG_16_5 UNIT_END + 0x0059 // Size: 1 Type: INT Flags: PRIVATE
  4201. +#define PLAYER_QUEST_LOG_17_1 UNIT_END + 0x005A // Size: 1 Type: INT Flags: PARTY_MEMBER
  4202. +#define PLAYER_QUEST_LOG_17_2 UNIT_END + 0x005B // Size: 1 Type: INT Flags: PRIVATE
  4203. +#define PLAYER_QUEST_LOG_17_3 UNIT_END + 0x005C // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4204. +#define PLAYER_QUEST_LOG_17_5 UNIT_END + 0x005E // Size: 1 Type: INT Flags: PRIVATE
  4205. +#define PLAYER_QUEST_LOG_18_1 UNIT_END + 0x005F // Size: 1 Type: INT Flags: PARTY_MEMBER
  4206. +#define PLAYER_QUEST_LOG_18_2 UNIT_END + 0x0060 // Size: 1 Type: INT Flags: PRIVATE
  4207. +#define PLAYER_QUEST_LOG_18_3 UNIT_END + 0x0061 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4208. +#define PLAYER_QUEST_LOG_18_5 UNIT_END + 0x0063 // Size: 1 Type: INT Flags: PRIVATE
  4209. +#define PLAYER_QUEST_LOG_19_1 UNIT_END + 0x0064 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4210. +#define PLAYER_QUEST_LOG_19_2 UNIT_END + 0x0065 // Size: 1 Type: INT Flags: PRIVATE
  4211. +#define PLAYER_QUEST_LOG_19_3 UNIT_END + 0x0066 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4212. +#define PLAYER_QUEST_LOG_19_5 UNIT_END + 0x0068 // Size: 1 Type: INT Flags: PRIVATE
  4213. +#define PLAYER_QUEST_LOG_20_1 UNIT_END + 0x0069 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4214. +#define PLAYER_QUEST_LOG_20_2 UNIT_END + 0x006A // Size: 1 Type: INT Flags: PRIVATE
  4215. +#define PLAYER_QUEST_LOG_20_3 UNIT_END + 0x006B // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4216. +#define PLAYER_QUEST_LOG_20_5 UNIT_END + 0x006D // Size: 1 Type: INT Flags: PRIVATE
  4217. +#define PLAYER_QUEST_LOG_21_1 UNIT_END + 0x006E // Size: 1 Type: INT Flags: PARTY_MEMBER
  4218. +#define PLAYER_QUEST_LOG_21_2 UNIT_END + 0x006F // Size: 1 Type: INT Flags: PRIVATE
  4219. +#define PLAYER_QUEST_LOG_21_3 UNIT_END + 0x0070 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4220. +#define PLAYER_QUEST_LOG_21_5 UNIT_END + 0x0072 // Size: 1 Type: INT Flags: PRIVATE
  4221. +#define PLAYER_QUEST_LOG_22_1 UNIT_END + 0x0073 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4222. +#define PLAYER_QUEST_LOG_22_2 UNIT_END + 0x0074 // Size: 1 Type: INT Flags: PRIVATE
  4223. +#define PLAYER_QUEST_LOG_22_3 UNIT_END + 0x0075 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4224. +#define PLAYER_QUEST_LOG_22_5 UNIT_END + 0x0077 // Size: 1 Type: INT Flags: PRIVATE
  4225. +#define PLAYER_QUEST_LOG_23_1 UNIT_END + 0x0078 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4226. +#define PLAYER_QUEST_LOG_23_2 UNIT_END + 0x0079 // Size: 1 Type: INT Flags: PRIVATE
  4227. +#define PLAYER_QUEST_LOG_23_3 UNIT_END + 0x007A // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4228. +#define PLAYER_QUEST_LOG_23_5 UNIT_END + 0x007C // Size: 1 Type: INT Flags: PRIVATE
  4229. +#define PLAYER_QUEST_LOG_24_1 UNIT_END + 0x007D // Size: 1 Type: INT Flags: PARTY_MEMBER
  4230. +#define PLAYER_QUEST_LOG_24_2 UNIT_END + 0x007E // Size: 1 Type: INT Flags: PRIVATE
  4231. +#define PLAYER_QUEST_LOG_24_3 UNIT_END + 0x007F // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4232. +#define PLAYER_QUEST_LOG_24_5 UNIT_END + 0x0081 // Size: 1 Type: INT Flags: PRIVATE
  4233. +#define PLAYER_QUEST_LOG_25_1 UNIT_END + 0x0082 // Size: 1 Type: INT Flags: PARTY_MEMBER
  4234. +#define PLAYER_QUEST_LOG_25_2 UNIT_END + 0x0083 // Size: 1 Type: INT Flags: PRIVATE
  4235. +#define PLAYER_QUEST_LOG_25_3 UNIT_END + 0x0084 // Size: 2 Type: TWO_SHORT Flags: PRIVATE
  4236. +#define PLAYER_QUEST_LOG_25_5 UNIT_END + 0x0086 // Size: 1 Type: INT Flags: PRIVATE
  4237. +#define PLAYER_VISIBLE_ITEM_1_ENTRYID UNIT_END + 0x0087 // Size: 1 Type: INT Flags: PUBLIC
  4238. +#define PLAYER_VISIBLE_ITEM_1_ENCHANTMENT UNIT_END + 0x0088 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4239. +#define PLAYER_VISIBLE_ITEM_2_ENTRYID UNIT_END + 0x0089 // Size: 1 Type: INT Flags: PUBLIC
  4240. +#define PLAYER_VISIBLE_ITEM_2_ENCHANTMENT UNIT_END + 0x008A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4241. +#define PLAYER_VISIBLE_ITEM_3_ENTRYID UNIT_END + 0x008B // Size: 1 Type: INT Flags: PUBLIC
  4242. +#define PLAYER_VISIBLE_ITEM_3_ENCHANTMENT UNIT_END + 0x008C // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4243. +#define PLAYER_VISIBLE_ITEM_4_ENTRYID UNIT_END + 0x008D // Size: 1 Type: INT Flags: PUBLIC
  4244. +#define PLAYER_VISIBLE_ITEM_4_ENCHANTMENT UNIT_END + 0x008E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4245. +#define PLAYER_VISIBLE_ITEM_5_ENTRYID UNIT_END + 0x008F // Size: 1 Type: INT Flags: PUBLIC
  4246. +#define PLAYER_VISIBLE_ITEM_5_ENCHANTMENT UNIT_END + 0x0090 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4247. +#define PLAYER_VISIBLE_ITEM_6_ENTRYID UNIT_END + 0x0091 // Size: 1 Type: INT Flags: PUBLIC
  4248. +#define PLAYER_VISIBLE_ITEM_6_ENCHANTMENT UNIT_END + 0x0092 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4249. +#define PLAYER_VISIBLE_ITEM_7_ENTRYID UNIT_END + 0x0093 // Size: 1 Type: INT Flags: PUBLIC
  4250. +#define PLAYER_VISIBLE_ITEM_7_ENCHANTMENT UNIT_END + 0x0094 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4251. +#define PLAYER_VISIBLE_ITEM_8_ENTRYID UNIT_END + 0x0095 // Size: 1 Type: INT Flags: PUBLIC
  4252. +#define PLAYER_VISIBLE_ITEM_8_ENCHANTMENT UNIT_END + 0x0096 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4253. +#define PLAYER_VISIBLE_ITEM_9_ENTRYID UNIT_END + 0x0097 // Size: 1 Type: INT Flags: PUBLIC
  4254. +#define PLAYER_VISIBLE_ITEM_9_ENCHANTMENT UNIT_END + 0x0098 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4255. +#define PLAYER_VISIBLE_ITEM_10_ENTRYID UNIT_END + 0x0099 // Size: 1 Type: INT Flags: PUBLIC
  4256. +#define PLAYER_VISIBLE_ITEM_10_ENCHANTMENT UNIT_END + 0x009A // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4257. +#define PLAYER_VISIBLE_ITEM_11_ENTRYID UNIT_END + 0x009B // Size: 1 Type: INT Flags: PUBLIC
  4258. +#define PLAYER_VISIBLE_ITEM_11_ENCHANTMENT UNIT_END + 0x009C // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4259. +#define PLAYER_VISIBLE_ITEM_12_ENTRYID UNIT_END + 0x009D // Size: 1 Type: INT Flags: PUBLIC
  4260. +#define PLAYER_VISIBLE_ITEM_12_ENCHANTMENT UNIT_END + 0x009E // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4261. +#define PLAYER_VISIBLE_ITEM_13_ENTRYID UNIT_END + 0x009F // Size: 1 Type: INT Flags: PUBLIC
  4262. +#define PLAYER_VISIBLE_ITEM_13_ENCHANTMENT UNIT_END + 0x00A0 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4263. +#define PLAYER_VISIBLE_ITEM_14_ENTRYID UNIT_END + 0x00A1 // Size: 1 Type: INT Flags: PUBLIC
  4264. +#define PLAYER_VISIBLE_ITEM_14_ENCHANTMENT UNIT_END + 0x00A2 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4265. +#define PLAYER_VISIBLE_ITEM_15_ENTRYID UNIT_END + 0x00A3 // Size: 1 Type: INT Flags: PUBLIC
  4266. +#define PLAYER_VISIBLE_ITEM_15_ENCHANTMENT UNIT_END + 0x00A4 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4267. +#define PLAYER_VISIBLE_ITEM_16_ENTRYID UNIT_END + 0x00A5 // Size: 1 Type: INT Flags: PUBLIC
  4268. +#define PLAYER_VISIBLE_ITEM_16_ENCHANTMENT UNIT_END + 0x00A6 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4269. +#define PLAYER_VISIBLE_ITEM_17_ENTRYID UNIT_END + 0x00A7 // Size: 1 Type: INT Flags: PUBLIC
  4270. +#define PLAYER_VISIBLE_ITEM_17_ENCHANTMENT UNIT_END + 0x00A8 // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4271. +#define PLAYER_VISIBLE_ITEM_18_ENTRYID UNIT_END + 0x00A9 // Size: 1 Type: INT Flags: PUBLIC
  4272. +#define PLAYER_VISIBLE_ITEM_18_ENCHANTMENT UNIT_END + 0x00AA // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4273. +#define PLAYER_VISIBLE_ITEM_19_ENTRYID UNIT_END + 0x00AB // Size: 1 Type: INT Flags: PUBLIC
  4274. +#define PLAYER_VISIBLE_ITEM_19_ENCHANTMENT UNIT_END + 0x00AC // Size: 1 Type: TWO_SHORT Flags: PUBLIC
  4275. +#define PLAYER_CHOSEN_TITLE UNIT_END + 0x00AD // Size: 1 Type: INT Flags: PUBLIC
  4276. +#define PLAYER_FAKE_INEBRIATION UNIT_END + 0x00AE // Size: 1 Type: INT Flags: PUBLIC
  4277. +#define PLAYER_FIELD_PAD_0 UNIT_END + 0x00AF // Size: 1 Type: INT Flags: NONE
  4278. +#define PLAYER_FIELD_INV_SLOT_HEAD UNIT_END + 0x00B0 // Size: 46 Type: LONG Flags: PRIVATE
  4279. +#define PLAYER_FIELD_PACK_SLOT_1 UNIT_END + 0x00DE // Size: 32 Type: LONG Flags: PRIVATE
  4280. +#define PLAYER_FIELD_BANK_SLOT_1 UNIT_END + 0x00FE // Size: 56 Type: LONG Flags: PRIVATE
  4281. +#define PLAYER_FIELD_BANKBAG_SLOT_1 UNIT_END + 0x0136 // Size: 14 Type: LONG Flags: PRIVATE
  4282. +#define PLAYER_FIELD_VENDORBUYBACK_SLOT_1 UNIT_END + 0x0144 // Size: 24 Type: LONG Flags: PRIVATE
  4283. +#define PLAYER_FIELD_KEYRING_SLOT_1 UNIT_END + 0x015C // Size: 64 Type: LONG Flags: PRIVATE
  4284. +#define PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 UNIT_END + 0x019C // Size: 64 Type: LONG Flags: PRIVATE
  4285. +#define PLAYER_FARSIGHT UNIT_END + 0x01DC // Size: 2 Type: LONG Flags: PRIVATE
  4286. +#define PLAYER__FIELD_KNOWN_TITLES UNIT_END + 0x01DE // Size: 2 Type: LONG Flags: PRIVATE
  4287. +#define PLAYER__FIELD_KNOWN_TITLES1 UNIT_END + 0x01E0 // Size: 2 Type: LONG Flags: PRIVATE
  4288. +#define PLAYER__FIELD_KNOWN_TITLES2 UNIT_END + 0x01E2 // Size: 2 Type: LONG Flags: PRIVATE
  4289. +#define PLAYER_FIELD_KNOWN_CURRENCIES UNIT_END + 0x01E4 // Size: 2 Type: LONG Flags: PRIVATE
  4290. +#define PLAYER_XP UNIT_END + 0x01E6 // Size: 1 Type: INT Flags: PRIVATE
  4291. +#define PLAYER_NEXT_LEVEL_XP UNIT_END + 0x01E7 // Size: 1 Type: INT Flags: PRIVATE
  4292. +#define PLAYER_SKILL_INFO_1_1 UNIT_END + 0x01E8 // Size: 384 Type: TWO_SHORT Flags: PRIVATE
  4293. +#define PLAYER_CHARACTER_POINTS1 UNIT_END + 0x0368 // Size: 1 Type: INT Flags: PRIVATE
  4294. +#define PLAYER_CHARACTER_POINTS2 UNIT_END + 0x0369 // Size: 1 Type: INT Flags: PRIVATE
  4295. +#define PLAYER_TRACK_CREATURES UNIT_END + 0x036A // Size: 1 Type: INT Flags: PRIVATE
  4296. +#define PLAYER_TRACK_RESOURCES UNIT_END + 0x036B // Size: 1 Type: INT Flags: PRIVATE
  4297. +#define PLAYER_BLOCK_PERCENTAGE UNIT_END + 0x036C // Size: 1 Type: FLOAT Flags: PRIVATE
  4298. +#define PLAYER_DODGE_PERCENTAGE UNIT_END + 0x036D // Size: 1 Type: FLOAT Flags: PRIVATE
  4299. +#define PLAYER_PARRY_PERCENTAGE UNIT_END + 0x036E // Size: 1 Type: FLOAT Flags: PRIVATE
  4300. +#define PLAYER_EXPERTISE UNIT_END + 0x036F // Size: 1 Type: INT Flags: PRIVATE
  4301. +#define PLAYER_OFFHAND_EXPERTISE UNIT_END + 0x0370 // Size: 1 Type: INT Flags: PRIVATE
  4302. +#define PLAYER_CRIT_PERCENTAGE UNIT_END + 0x0371 // Size: 1 Type: FLOAT Flags: PRIVATE
  4303. +#define PLAYER_RANGED_CRIT_PERCENTAGE UNIT_END + 0x0372 // Size: 1 Type: FLOAT Flags: PRIVATE
  4304. +#define PLAYER_OFFHAND_CRIT_PERCENTAGE UNIT_END + 0x0373 // Size: 1 Type: FLOAT Flags: PRIVATE
  4305. +#define PLAYER_SPELL_CRIT_PERCENTAGE1 UNIT_END + 0x0374 // Size: 7 Type: FLOAT Flags: PRIVATE
  4306. +#define PLAYER_SHIELD_BLOCK UNIT_END + 0x037B // Size: 1 Type: INT Flags: PRIVATE
  4307. +#define PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE UNIT_END + 0x037C // Size: 1 Type: FLOAT Flags: PRIVATE
  4308. +#define PLAYER_EXPLORED_ZONES_1 UNIT_END + 0x037D // Size: 128 Type: BYTES Flags: PRIVATE
  4309. +#define PLAYER_REST_STATE_EXPERIENCE UNIT_END + 0x03FD // Size: 1 Type: INT Flags: PRIVATE
  4310. +#define PLAYER_FIELD_COINAGE UNIT_END + 0x03FE // Size: 1 Type: INT Flags: PRIVATE
  4311. +#define PLAYER_FIELD_MOD_DAMAGE_DONE_POS UNIT_END + 0x03FF // Size: 7 Type: INT Flags: PRIVATE
  4312. +#define PLAYER_FIELD_MOD_DAMAGE_DONE_NEG UNIT_END + 0x0406 // Size: 7 Type: INT Flags: PRIVATE
  4313. +#define PLAYER_FIELD_MOD_DAMAGE_DONE_PCT UNIT_END + 0x040D // Size: 7 Type: INT Flags: PRIVATE
  4314. +#define PLAYER_FIELD_MOD_HEALING_DONE_POS UNIT_END + 0x0414 // Size: 1 Type: INT Flags: PRIVATE
  4315. +#define PLAYER_FIELD_MOD_HEALING_PCT UNIT_END + 0x0415 // Size: 1 Type: FLOAT Flags: PRIVATE
  4316. +#define PLAYER_FIELD_MOD_HEALING_DONE_PCT UNIT_END + 0x0416 // Size: 1 Type: FLOAT Flags: PRIVATE
  4317. +#define PLAYER_FIELD_MOD_TARGET_RESISTANCE UNIT_END + 0x0417 // Size: 1 Type: INT Flags: PRIVATE
  4318. +#define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x0418 // Size: 1 Type: INT Flags: PRIVATE
  4319. +#define PLAYER_FIELD_BYTES UNIT_END + 0x0419 // Size: 1 Type: BYTES Flags: PRIVATE
  4320. +#define PLAYER_AMMO_ID UNIT_END + 0x041A // Size: 1 Type: INT Flags: PRIVATE
  4321. +#define PLAYER_SELF_RES_SPELL UNIT_END + 0x041B // Size: 1 Type: INT Flags: PRIVATE
  4322. +#define PLAYER_FIELD_PVP_MEDALS UNIT_END + 0x041C // Size: 1 Type: INT Flags: PRIVATE
  4323. +#define PLAYER_FIELD_BUYBACK_PRICE_1 UNIT_END + 0x041D // Size: 12 Type: INT Flags: PRIVATE
  4324. +#define PLAYER_FIELD_BUYBACK_TIMESTAMP_1 UNIT_END + 0x0429 // Size: 12 Type: INT Flags: PRIVATE
  4325. +#define PLAYER_FIELD_KILLS UNIT_END + 0x0435 // Size: 1 Type: TWO_SHORT Flags: PRIVATE
  4326. +#define PLAYER_FIELD_TODAY_CONTRIBUTION UNIT_END + 0x0436 // Size: 1 Type: INT Flags: PRIVATE
  4327. +#define PLAYER_FIELD_YESTERDAY_CONTRIBUTION UNIT_END + 0x0437 // Size: 1 Type: INT Flags: PRIVATE
  4328. +#define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS UNIT_END + 0x0438 // Size: 1 Type: INT Flags: PRIVATE
  4329. +#define PLAYER_FIELD_BYTES2 UNIT_END + 0x0439 // Size: 1 Type: 6 Flags: PRIVATE
  4330. +#define PLAYER_FIELD_WATCHED_FACTION_INDEX UNIT_END + 0x043A // Size: 1 Type: INT Flags: PRIVATE
  4331. +#define PLAYER_FIELD_COMBAT_RATING_1 UNIT_END + 0x043B // Size: 25 Type: INT Flags: PRIVATE
  4332. +#define PLAYER_FIELD_ARENA_TEAM_INFO_1_1 UNIT_END + 0x0454 // Size: 21 Type: INT Flags: PRIVATE
  4333. +#define PLAYER_FIELD_HONOR_CURRENCY UNIT_END + 0x0469 // Size: 1 Type: INT Flags: PRIVATE
  4334. +#define PLAYER_FIELD_ARENA_CURRENCY UNIT_END + 0x046A // Size: 1 Type: INT Flags: PRIVATE
  4335. +#define PLAYER_FIELD_MAX_LEVEL UNIT_END + 0x046B // Size: 1 Type: INT Flags: PRIVATE
  4336. +#define PLAYER_FIELD_DAILY_QUESTS_1 UNIT_END + 0x046C // Size: 25 Type: INT Flags: PRIVATE
  4337. +#define PLAYER_RUNE_REGEN_1 UNIT_END + 0x0485 // Size: 4 Type: FLOAT Flags: PRIVATE
  4338. +#define PLAYER_NO_REAGENT_COST_1 UNIT_END + 0x0489 // Size: 3 Type: INT Flags: PRIVATE
  4339. +#define PLAYER_FIELD_GLYPH_SLOTS_1 UNIT_END + 0x048C // Size: 6 Type: INT Flags: PRIVATE
  4340. +#define PLAYER_FIELD_GLYPHS_1 UNIT_END + 0x0492 // Size: 6 Type: INT Flags: PRIVATE
  4341. +#define PLAYER_GLYPHS_ENABLED UNIT_END + 0x0498 // Size: 1 Type: INT Flags: PRIVATE
  4342. +#define PLAYER_FIELD_PADDING UNIT_END + 0x0499 // Size: 1 Type: INT Flags: NONE
  4343. +#define PLAYER_END UNIT_END + 0x049A
  4344.  
  4345. //GameObjectFields
  4346. -#define OBJECT_FIELD_CREATED_BY OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  4347. -#define GAMEOBJECT_DISPLAYID OBJECT_END + 0x0002 // Size: 1, Type: INT, Flags: PUBLIC
  4348. -#define GAMEOBJECT_FLAGS OBJECT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
  4349. -#define GAMEOBJECT_PARENTROTATION OBJECT_END + 0x0004 // Size: 4, Type: FLOAT, Flags: PUBLIC
  4350. -#define GAMEOBJECT_DYNAMIC OBJECT_END + 0x0008 // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC
  4351. -#define GAMEOBJECT_FACTION OBJECT_END + 0x0009 // Size: 1, Type: INT, Flags: PUBLIC
  4352. -#define GAMEOBJECT_LEVEL OBJECT_END + 0x000A // Size: 1, Type: INT, Flags: PUBLIC
  4353. -#define GAMEOBJECT_BYTES_1 OBJECT_END + 0x000B // Size: 1, Type: BYTES, Flags: PUBLIC
  4354. -#define GAMEOBJECT_END OBJECT_END + 0x000C
  4355. +#define OBJECT_FIELD_CREATED_BY OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  4356. +#define GAMEOBJECT_DISPLAYID OBJECT_END + 0x0002 // Size: 1 Type: INT Flags: PUBLIC
  4357. +#define GAMEOBJECT_FLAGS OBJECT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
  4358. +#define GAMEOBJECT_PARENTROTATION OBJECT_END + 0x0004 // Size: 4 Type: FLOAT Flags: PUBLIC
  4359. +#define GAMEOBJECT_DYNAMIC OBJECT_END + 0x0008 // Size: 1 Type: TWO_SHORT Flags: DYNAMIC
  4360. +#define GAMEOBJECT_FACTION OBJECT_END + 0x0009 // Size: 1 Type: INT Flags: PUBLIC
  4361. +#define GAMEOBJECT_LEVEL OBJECT_END + 0x000A // Size: 1 Type: INT Flags: PUBLIC
  4362. +#define GAMEOBJECT_BYTES_1 OBJECT_END + 0x000B // Size: 1 Type: BYTES Flags: PUBLIC
  4363. +#define GAMEOBJECT_END OBJECT_END + 0x000C
  4364.  
  4365. //DynamicObjectFields
  4366. -#define DYNAMICOBJECT_CASTER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  4367. -#define DYNAMICOBJECT_BYTES OBJECT_END + 0x0002 // Size: 1, Type: BYTES, Flags: PUBLIC
  4368. -#define DYNAMICOBJECT_SPELLID OBJECT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC
  4369. -#define DYNAMICOBJECT_RADIUS OBJECT_END + 0x0004 // Size: 1, Type: FLOAT, Flags: PUBLIC
  4370. -#define DYNAMICOBJECT_CASTTIME OBJECT_END + 0x0005 // Size: 1, Type: INT, Flags: PUBLIC
  4371. -#define DYNAMICOBJECT_END OBJECT_END + 0x0006
  4372. +#define DYNAMICOBJECT_CASTER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  4373. +#define DYNAMICOBJECT_BYTES OBJECT_END + 0x0002 // Size: 1 Type: BYTES Flags: PUBLIC
  4374. +#define DYNAMICOBJECT_SPELLID OBJECT_END + 0x0003 // Size: 1 Type: INT Flags: PUBLIC
  4375. +#define DYNAMICOBJECT_RADIUS OBJECT_END + 0x0004 // Size: 1 Type: FLOAT Flags: PUBLIC
  4376. +#define DYNAMICOBJECT_CASTTIME OBJECT_END + 0x0005 // Size: 1 Type: INT Flags: PUBLIC
  4377. +#define DYNAMICOBJECT_END OBJECT_END + 0x0006
  4378.  
  4379. //CorpseFields
  4380. -#define CORPSE_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2, Type: LONG, Flags: PUBLIC
  4381. -#define CORPSE_FIELD_PARTY OBJECT_END + 0x0002 // Size: 2, Type: LONG, Flags: PUBLIC
  4382. -#define CORPSE_FIELD_DISPLAY_ID OBJECT_END + 0x0004 // Size: 1, Type: INT, Flags: PUBLIC
  4383. -#define CORPSE_FIELD_ITEM OBJECT_END + 0x0005 // Size: 19, Type: INT, Flags: PUBLIC
  4384. -#define CORPSE_FIELD_BYTES_1 OBJECT_END + 0x0018 // Size: 1, Type: BYTES, Flags: PUBLIC
  4385. -#define CORPSE_FIELD_BYTES_2 OBJECT_END + 0x0019 // Size: 1, Type: BYTES, Flags: PUBLIC
  4386. -#define CORPSE_FIELD_GUILD OBJECT_END + 0x001A // Size: 1, Type: INT, Flags: PUBLIC
  4387. -#define CORPSE_FIELD_FLAGS OBJECT_END + 0x001B // Size: 1, Type: INT, Flags: PUBLIC
  4388. -#define CORPSE_FIELD_DYNAMIC_FLAGS OBJECT_END + 0x001C // Size: 1, Type: INT, Flags: DYNAMIC
  4389. -#define CORPSE_FIELD_PAD OBJECT_END + 0x001D // Size: 1, Type: INT, Flags: NONE
  4390. -#define CORPSE_END OBJECT_END + 0x001E
  4391. +#define CORPSE_FIELD_OWNER OBJECT_END + 0x0000 // Size: 2 Type: LONG Flags: PUBLIC
  4392. +#define CORPSE_FIELD_PARTY OBJECT_END + 0x0002 // Size: 2 Type: LONG Flags: PUBLIC
  4393. +#define CORPSE_FIELD_DISPLAY_ID OBJECT_END + 0x0004 // Size: 1 Type: INT Flags: PUBLIC
  4394. +#define CORPSE_FIELD_ITEM OBJECT_END + 0x0005 // Size: 19 Type: INT Flags: PUBLIC
  4395. +#define CORPSE_FIELD_BYTES_1 OBJECT_END + 0x0018 // Size: 1 Type: BYTES Flags: PUBLIC
  4396. +#define CORPSE_FIELD_BYTES_2 OBJECT_END + 0x0019 // Size: 1 Type: BYTES Flags: PUBLIC
  4397. +#define CORPSE_FIELD_GUILD OBJECT_END + 0x001A // Size: 1 Type: INT Flags: PUBLIC
  4398. +#define CORPSE_FIELD_FLAGS OBJECT_END + 0x001B // Size: 1 Type: INT Flags: PUBLIC
  4399. +#define CORPSE_FIELD_DYNAMIC_FLAGS OBJECT_END + 0x001C // Size: 1 Type: INT Flags: DYNAMIC
  4400. +#define CORPSE_FIELD_PAD OBJECT_END + 0x001D // Size: 1 Type: INT Flags: NONE
  4401. +#define CORPSE_END OBJECT_END + 0x001E
  4402.  
  4403. #define UNIT_FIELD_STRENGTH UNIT_FIELD_STAT0
  4404. #define UNIT_FIELD_AGILITY UNIT_FIELD_STAT1
  4405. @@ -429,8 +431,8 @@
  4406. //VLack: Don't forget to fix up these when generating this file from a new client!!!
  4407. //#define PLAYER_VISIBLE_ITEM_LENGTH (PLAYER_VISIBLE_ITEM_2_ENTRYID - PLAYER_VISIBLE_ITEM_1_ENTRYID)
  4408. #define PLAYER_VISIBLE_ITEM_LENGTH 2
  4409. -#define GAMEOBJECT_PARENTROTATION_01 OBJECT_END + 0x0005 // Size: 4, Type: FLOAT, Flags: PUBLIC
  4410. -#define GAMEOBJECT_PARENTROTATION_02 OBJECT_END + 0x0006 // Size: 4, Type: FLOAT, Flags: PUBLIC
  4411. -#define GAMEOBJECT_PARENTROTATION_03 OBJECT_END + 0x0007 // Size: 4, Type: FLOAT, Flags: PUBLIC
  4412. +#define GAMEOBJECT_PARENTROTATION_01 OBJECT_END + 0x0005 // Size: 4 Type: FLOAT Flags: PUBLIC
  4413. +#define GAMEOBJECT_PARENTROTATION_02 OBJECT_END + 0x0006 // Size: 4 Type: FLOAT Flags: PUBLIC
  4414. +#define GAMEOBJECT_PARENTROTATION_03 OBJECT_END + 0x0007 // Size: 4 Type: FLOAT Flags: PUBLIC
  4415.  
  4416. #endif
  4417. Index: src/arcemu-world/WorldSession.cpp
  4418. ===================================================================
  4419. --- src/arcemu-world/WorldSession.cpp (revision 3116)
  4420. +++ src/arcemu-world/WorldSession.cpp (working copy)
  4421. @@ -574,7 +574,8 @@
  4422. WorldPacketHandlers[CMSG_MOVE_HOVER_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
  4423. WorldPacketHandlers[CMSG_MOVE_SET_CAN_FLY_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
  4424. WorldPacketHandlers[MSG_MOVE_START_DESCEND].handler = &WorldSession::HandleMovementOpcodes;
  4425. -
  4426. + WorldPacketHandlers[CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK].handler = &WorldSession::HandleAcknowledgementOpcodes;
  4427. +
  4428. // Action Buttons
  4429. WorldPacketHandlers[CMSG_SET_ACTION_BUTTON].handler = &WorldSession::HandleSetActionButtonOpcode;
  4430. WorldPacketHandlers[CMSG_REPOP_REQUEST].handler = &WorldSession::HandleRepopRequestOpcode;
  4431.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement