mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Entities: Update updatefields to 7.3.5.25928
This commit is contained in:
@@ -1645,6 +1645,7 @@ CREATE TABLE `characters` (
|
||||
`customDisplay1` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`customDisplay2` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`customDisplay3` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`inventorySlots` tinyint(3) unsigned NOT NULL DEFAULT '16',
|
||||
`bankSlots` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`restState` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`playerFlags` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
@@ -3532,7 +3533,8 @@ INSERT INTO `updates` VALUES
|
||||
('2017_06_04_00_characters.sql','BC80D2B7515CC6E01701070D2DA466727F36DB5E','ARCHIVED','2017-06-04 14:43:26',0),
|
||||
('2017_08_20_00_characters.sql','8C5BBF6AEAA6C7DE2F40A7D3878C8187A4729F13','ARCHIVED','2017-08-20 17:00:00',0),
|
||||
('2017_08_20_01_characters.sql','2F50D5E6BF3888B8C5270D79228A1D0601FAFF1D','ARCHIVED','2017-08-20 17:52:21',0),
|
||||
('2017_10_29_00_characters.sql','8CFC473E7E87E58C317A72016BF69E9050D3BC83','ARCHIVED','2017-04-19 00:07:40',25);
|
||||
('2017_10_29_00_characters.sql','8CFC473E7E87E58C317A72016BF69E9050D3BC83','ARCHIVED','2017-04-19 00:07:40',25),
|
||||
('2018_02_03_00_characters.sql','73E9BFD848D7A22F2A7DD89CF64E30E3A8689512','RELEASED','2018-02-03 23:52:42', 0);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `characters` ADD `inventorySlots` tinyint(3) unsigned NOT NULL DEFAULT '16' AFTER `customDisplay3`;
|
||||
|
||||
UPDATE `character_inventory` SET `slot`=`slot`+8 WHERE `slot`>=39 AND `bag`=0;
|
||||
@@ -79,7 +79,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC);
|
||||
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
|
||||
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
|
||||
@@ -421,7 +421,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_LFG_DATA, "DELETE FROM lfg_data WHERE guid = ?", CONNECTION_ASYNC);
|
||||
|
||||
// Player saving
|
||||
PrepareStatement(CHAR_INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
PrepareStatement(CHAR_INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
"map, instance_id, dungeonDifficulty, raidDifficulty, legacyRaidDifficulty, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, "
|
||||
"taximask, cinematic, "
|
||||
"totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, primarySpecialization, "
|
||||
@@ -429,8 +429,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
"death_expire_time, taxi_path, totalKills, "
|
||||
"todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, "
|
||||
"power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels) VALUES "
|
||||
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?,"
|
||||
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?,"
|
||||
"map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?,"
|
||||
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,primarySpecialization=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?,"
|
||||
"totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,"
|
||||
|
||||
@@ -348,6 +348,7 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] =
|
||||
UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+5
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_LEVEL
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_EFFECTIVE_LEVEL
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_SANDBOX_SCALING_ID
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_MIN
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_MAX
|
||||
UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_DELTA
|
||||
@@ -2095,6 +2096,38 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] =
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+745
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+746
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+747
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+748
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+749
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+750
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+751
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+752
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+753
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+754
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+755
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+756
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+757
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+758
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+759
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+760
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+761
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+762
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+763
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+764
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+765
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+766
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+767
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+768
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+769
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+770
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+771
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+772
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+773
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+774
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+775
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+776
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+777
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+778
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+779
|
||||
UF_FLAG_PRIVATE, // PLAYER_FARSIGHT
|
||||
UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+1
|
||||
UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+2
|
||||
@@ -2119,6 +2152,7 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] =
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_COINAGE+1
|
||||
UF_FLAG_PRIVATE, // PLAYER_XP
|
||||
UF_FLAG_PRIVATE, // PLAYER_NEXT_LEVEL_XP
|
||||
UF_FLAG_PRIVATE, // PLAYER_TRIAL_XP
|
||||
UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID
|
||||
UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+1
|
||||
UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+2
|
||||
@@ -2958,7 +2992,6 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] =
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_LOCAL_FLAGS
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_BYTES
|
||||
UF_FLAG_PRIVATE, // PLAYER_SELF_RES_SPELL
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_PVP_MEDALS
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1
|
||||
UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+1
|
||||
@@ -4870,6 +4903,7 @@ uint32 UnitDynamicUpdateFieldFlags[PLAYER_DYNAMIC_END] =
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_TOYS
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_TRANSMOG
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL
|
||||
UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#ifndef _UPDATEFIELDS_H
|
||||
#define _UPDATEFIELDS_H
|
||||
|
||||
// Auto generated for version 7, 3, 2, 25383
|
||||
// Auto generated for version 7, 3, 5, 25928
|
||||
|
||||
enum ObjectFields
|
||||
{
|
||||
@@ -107,81 +107,82 @@ enum UnitFields
|
||||
UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x042, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x048, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_EFFECTIVE_LEVEL = OBJECT_END + 0x049, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_MIN = OBJECT_END + 0x04A, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_MAX = OBJECT_END + 0x04B, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x04C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x04D, // Size: 1, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x04E, // Size: 6, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x054, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x055, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x056, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x057, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x058, // Size: 2, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x05A, // Size: 1, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x05B, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x05C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x05D, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x05E, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x05F, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x060, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x061, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x062, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x063, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x064, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x065, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x066, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x067, // Size: 1, Flags: OWNER
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x068, // Size: 1, Flags: OWNER
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x069, // Size: 1, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_HASTE = OBJECT_END + 0x06A, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_HASTE = OBJECT_END + 0x06B, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_RANGED_HASTE = OBJECT_END + 0x06C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_HASTE_REGEN = OBJECT_END + 0x06D, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_TIME_RATE = OBJECT_END + 0x06E, // Size: 1, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x06F, // Size: 1, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x070, // Size: 2, Flags: PUBLIC, DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x072, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_STAT = OBJECT_END + 0x073, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT = OBJECT_END + 0x077, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT = OBJECT_END + 0x07B, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x07F, // Size: 7, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x086, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x08D, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MOD_BONUS_ARMOR = OBJECT_END + 0x094, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x095, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x096, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x097, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x098, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x099, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09A, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09B, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x09C, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09D, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09E, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09F, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_SPEED_AURA = OBJECT_END + 0x0A0, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0A1, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0A2, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0A3, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0AA, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0B1, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0B2, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF = OBJECT_END + 0x0B3, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MIN_ITEM_LEVEL = OBJECT_END + 0x0B4, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0B5, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_WILD_BATTLEPET_LEVEL = OBJECT_END + 0x0B6, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP = OBJECT_END + 0x0B7, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_INTERACT_SPELLID = OBJECT_END + 0x0B8, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x0B9, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_ANIM_ID = OBJECT_END + 0x0BA, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_ANIM_KIT_ID = OBJECT_END + 0x0BB, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x0BC, // Size: 4, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_SCALE_DURATION = OBJECT_END + 0x0C0, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOKS_LIKE_MOUNT_ID = OBJECT_END + 0x0C1, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOKS_LIKE_CREATURE_ID = OBJECT_END + 0x0C2, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOK_AT_CONTROLLER_ID = OBJECT_END + 0x0C3, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET = OBJECT_END + 0x0C4, // Size: 4, Flags: PUBLIC
|
||||
UNIT_END = OBJECT_END + 0x0C8,
|
||||
UNIT_FIELD_SANDBOX_SCALING_ID = OBJECT_END + 0x04A, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_MIN = OBJECT_END + 0x04B, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_MAX = OBJECT_END + 0x04C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x04D, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x04E, // Size: 1, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x04F, // Size: 6, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x055, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x056, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x057, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x058, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x059, // Size: 2, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x05B, // Size: 1, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x05C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x05D, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x05E, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x05F, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x060, // Size: 1, Flags: PUBLIC, URGENT
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x061, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x062, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x063, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x064, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x065, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x066, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x067, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x068, // Size: 1, Flags: OWNER
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x069, // Size: 1, Flags: OWNER
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x06A, // Size: 1, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_HASTE = OBJECT_END + 0x06B, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_HASTE = OBJECT_END + 0x06C, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_RANGED_HASTE = OBJECT_END + 0x06D, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_HASTE_REGEN = OBJECT_END + 0x06E, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MOD_TIME_RATE = OBJECT_END + 0x06F, // Size: 1, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x070, // Size: 1, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x071, // Size: 2, Flags: PUBLIC, DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x073, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_STAT = OBJECT_END + 0x074, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT = OBJECT_END + 0x078, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT = OBJECT_END + 0x07C, // Size: 4, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x080, // Size: 7, Flags: PRIVATE, OWNER, SPECIAL_INFO
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x087, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x08E, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MOD_BONUS_ARMOR = OBJECT_END + 0x095, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x096, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x097, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x098, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x099, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09A, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09B, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09C, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x09D, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09E, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09F, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0A0, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_SPEED_AURA = OBJECT_END + 0x0A1, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0A2, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0A3, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0A4, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0AB, // Size: 7, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0B2, // Size: 1, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0B3, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF = OBJECT_END + 0x0B4, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MIN_ITEM_LEVEL = OBJECT_END + 0x0B5, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0B6, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_WILD_BATTLEPET_LEVEL = OBJECT_END + 0x0B7, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP = OBJECT_END + 0x0B8, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_INTERACT_SPELLID = OBJECT_END + 0x0B9, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x0BA, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_ANIM_ID = OBJECT_END + 0x0BB, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_ANIM_KIT_ID = OBJECT_END + 0x0BC, // Size: 1, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x0BD, // Size: 4, Flags: DYNAMIC, URGENT
|
||||
UNIT_FIELD_SCALE_DURATION = OBJECT_END + 0x0C1, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOKS_LIKE_MOUNT_ID = OBJECT_END + 0x0C2, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOKS_LIKE_CREATURE_ID = OBJECT_END + 0x0C3, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOK_AT_CONTROLLER_ID = OBJECT_END + 0x0C4, // Size: 1, Flags: PUBLIC
|
||||
UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET = OBJECT_END + 0x0C5, // Size: 4, Flags: PUBLIC
|
||||
UNIT_END = OBJECT_END + 0x0C9,
|
||||
};
|
||||
|
||||
enum UnitDynamicFields
|
||||
@@ -219,94 +220,94 @@ enum PlayerFields
|
||||
PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY = UNIT_END + 0x366, // Size: 1, Flags: PUBLIC
|
||||
PLAYER_FIELD_PRESTIGE = UNIT_END + 0x367, // Size: 1, Flags: PUBLIC
|
||||
PLAYER_FIELD_HONOR_LEVEL = UNIT_END + 0x368, // Size: 1, Flags: PUBLIC
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x369, // Size: 748, Flags: PRIVATE
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x369, // Size: 780, Flags: PRIVATE
|
||||
PLAYER_FIELD_END_NOT_SELF = UNIT_END + 0x369,
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x655, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_SUMMONED_BATTLE_PET_ID = UNIT_END + 0x659, // Size: 4, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x65D, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x669, // Size: 2, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x66B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x66C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SKILL_LINEID = UNIT_END + 0x66D, // Size: 448, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS = UNIT_END + 0x82D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_TALENT_TIERS = UNIT_END + 0x82E, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x82F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x830, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x831, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x832, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_RANGED_EXPERTISE = UNIT_END + 0x833, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_EXPERTISE = UNIT_END + 0x834, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x835, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x836, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x837, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x838, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x839, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x83A, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x83B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x83C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x83D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x83E, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x83F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_MASTERY = UNIT_END + 0x840, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SPEED = UNIT_END + 0x841, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_LIFESTEAL = UNIT_END + 0x842, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_AVOIDANCE = UNIT_END + 0x843, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_STURDINESS = UNIT_END + 0x844, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_VERSATILITY = UNIT_END + 0x845, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_VERSATILITY_BONUS = UNIT_END + 0x846, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_POWER_DAMAGE = UNIT_END + 0x847, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_POWER_HEALING = UNIT_END + 0x848, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x849, // Size: 320, Flags: PRIVATE
|
||||
PLAYER_FIELD_REST_INFO = UNIT_END + 0x989, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x98D, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x994, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x99B, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x9A2, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x9A3, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x9A4, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT = UNIT_END + 0x9A5, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = UNIT_END + 0x9A6, // Size: 3, Flags: PRIVATE
|
||||
PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS = UNIT_END + 0x9A9, // Size: 3, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_SPELL_POWER_PCT = UNIT_END + 0x9AC, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_RESILIENCE_PERCENT = UNIT_END + 0x9AD, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT = UNIT_END + 0x9AE, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT = UNIT_END + 0x9AF, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x9B0, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x9B1, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LOCAL_FLAGS = UNIT_END + 0x9B2, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x9B3, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x9B4, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x9B5, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x9B6, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x9C2, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x9CE, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = UNIT_END + 0x9CF, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x9D0, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x9D1, // Size: 32, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x9F1, // Size: 42, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0xA1B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA = UNIT_END + 0xA1C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL = UNIT_END + 0xA1D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0xA1E, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_PET_SPELL_POWER = UNIT_END + 0xA22, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_RESEARCHING_1 = UNIT_END + 0xA23, // Size: 10, Flags: PRIVATE
|
||||
PLAYER_PROFESSION_SKILL_LINE_1 = UNIT_END + 0xA2D, // Size: 2, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_HIT_MODIFIER = UNIT_END + 0xA2F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = UNIT_END + 0xA30, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_HOME_REALM_TIME_OFFSET = UNIT_END + 0xA31, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_PET_HASTE = UNIT_END + 0xA32, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0xA33, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES3 = UNIT_END + 0xA34, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY
|
||||
PLAYER_FIELD_LFG_BONUS_FACTION_ID = UNIT_END + 0xA35, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LOOT_SPEC_ID = UNIT_END + 0xA36, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE = UNIT_END + 0xA37, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY
|
||||
PLAYER_FIELD_BAG_SLOT_FLAGS = UNIT_END + 0xA38, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_BAG_SLOT_FLAGS = UNIT_END + 0xA3C, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT = UNIT_END + 0xA43, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_QUEST_COMPLETED = UNIT_END + 0xA44, // Size: 1750, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR = UNIT_END + 0x111A, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR_NEXT_LEVEL = UNIT_END + 0x111B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_END = UNIT_END + 0x111C,
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x675, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_SUMMONED_BATTLE_PET_ID = UNIT_END + 0x679, // Size: 4, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x67D, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x689, // Size: 2, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x68B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x68C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_TRIAL_XP = UNIT_END + 0x68D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SKILL_LINEID = UNIT_END + 0x68E, // Size: 448, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS = UNIT_END + 0x84E, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_TALENT_TIERS = UNIT_END + 0x84F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x850, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x851, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x852, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x853, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_RANGED_EXPERTISE = UNIT_END + 0x854, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_EXPERTISE = UNIT_END + 0x855, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x856, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x857, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x858, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x859, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x85A, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x85B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x85C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x85D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x85E, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x85F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x860, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_MASTERY = UNIT_END + 0x861, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_SPEED = UNIT_END + 0x862, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_LIFESTEAL = UNIT_END + 0x863, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_AVOIDANCE = UNIT_END + 0x864, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_STURDINESS = UNIT_END + 0x865, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_VERSATILITY = UNIT_END + 0x866, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_VERSATILITY_BONUS = UNIT_END + 0x867, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_POWER_DAMAGE = UNIT_END + 0x868, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_POWER_HEALING = UNIT_END + 0x869, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x86A, // Size: 320, Flags: PRIVATE
|
||||
PLAYER_FIELD_REST_INFO = UNIT_END + 0x9AA, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x9AE, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x9B5, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x9BC, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x9C3, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x9C4, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x9C5, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT = UNIT_END + 0x9C6, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = UNIT_END + 0x9C7, // Size: 3, Flags: PRIVATE
|
||||
PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS = UNIT_END + 0x9CA, // Size: 3, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_SPELL_POWER_PCT = UNIT_END + 0x9CD, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_RESILIENCE_PERCENT = UNIT_END + 0x9CE, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT = UNIT_END + 0x9CF, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT = UNIT_END + 0x9D0, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x9D1, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x9D2, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LOCAL_FLAGS = UNIT_END + 0x9D3, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x9D4, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x9D5, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x9D6, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x9E2, // Size: 12, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x9EE, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = UNIT_END + 0x9EF, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x9F0, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x9F1, // Size: 32, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0xA11, // Size: 42, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0xA3B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA = UNIT_END + 0xA3C, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL = UNIT_END + 0xA3D, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0xA3E, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_PET_SPELL_POWER = UNIT_END + 0xA42, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_RESEARCHING_1 = UNIT_END + 0xA43, // Size: 10, Flags: PRIVATE
|
||||
PLAYER_PROFESSION_SKILL_LINE_1 = UNIT_END + 0xA4D, // Size: 2, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_HIT_MODIFIER = UNIT_END + 0xA4F, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = UNIT_END + 0xA50, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_HOME_REALM_TIME_OFFSET = UNIT_END + 0xA51, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_PET_HASTE = UNIT_END + 0xA52, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0xA53, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES3 = UNIT_END + 0xA54, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY
|
||||
PLAYER_FIELD_LFG_BONUS_FACTION_ID = UNIT_END + 0xA55, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_LOOT_SPEC_ID = UNIT_END + 0xA56, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE = UNIT_END + 0xA57, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY
|
||||
PLAYER_FIELD_BAG_SLOT_FLAGS = UNIT_END + 0xA58, // Size: 4, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_BAG_SLOT_FLAGS = UNIT_END + 0xA5C, // Size: 7, Flags: PRIVATE
|
||||
PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT = UNIT_END + 0xA63, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_QUEST_COMPLETED = UNIT_END + 0xA64, // Size: 1750, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR = UNIT_END + 0x113A, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR_NEXT_LEVEL = UNIT_END + 0x113B, // Size: 1, Flags: PRIVATE
|
||||
PLAYER_END = UNIT_END + 0x113C,
|
||||
};
|
||||
|
||||
enum PlayerDynamicFields
|
||||
@@ -320,11 +321,12 @@ enum PlayerDynamicFields
|
||||
PLAYER_DYNAMIC_FIELD_TOYS = UNIT_DYNAMIC_END + 0x006, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_TRANSMOG = UNIT_DYNAMIC_END + 0x007, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG = UNIT_DYNAMIC_END + 0x008, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS = UNIT_DYNAMIC_END + 0x009, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00A, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00B, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS = UNIT_DYNAMIC_END + 0x00C, // Flags: PUBLIC
|
||||
PLAYER_DYNAMIC_END = UNIT_DYNAMIC_END + 0x00D,
|
||||
PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS = UNIT_DYNAMIC_END + 0x009, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS = UNIT_DYNAMIC_END + 0x00A, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00B, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00C, // Flags: PRIVATE
|
||||
PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS = UNIT_DYNAMIC_END + 0x00D, // Flags: PUBLIC
|
||||
PLAYER_DYNAMIC_END = UNIT_DYNAMIC_END + 0x00E,
|
||||
};
|
||||
|
||||
enum GameObjectFields
|
||||
|
||||
@@ -478,6 +478,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
|
||||
SetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_HONOR, REST_STATE_NOT_RAF_LINKED);
|
||||
SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, createInfo->Sex);
|
||||
SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, 0);
|
||||
SetInventorySlotCount(INVENTORY_DEFAULT_SIZE);
|
||||
|
||||
SetGuidValue(OBJECT_FIELD_DATA, ObjectGuid::Empty);
|
||||
SetUInt32Value(PLAYER_GUILDRANK, 0);
|
||||
@@ -655,7 +656,8 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
|
||||
// bags and main-hand weapon must equipped at this moment
|
||||
// now second pass for not equipped (offhand weapon/shield if it attempt equipped before main-hand weapon)
|
||||
// or ammo not equipped in special bag
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
{
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
{
|
||||
@@ -1349,13 +1351,11 @@ void Player::Update(uint32 p_time)
|
||||
|
||||
void Player::setDeathState(DeathState s)
|
||||
{
|
||||
uint32 ressSpellId = 0;
|
||||
|
||||
bool cur = IsAlive();
|
||||
bool oldIsAlive = IsAlive();
|
||||
|
||||
if (s == JUST_DIED)
|
||||
{
|
||||
if (!cur)
|
||||
if (!oldIsAlive)
|
||||
{
|
||||
TC_LOG_ERROR("entities.player", "Player::setDeathState: Attempted to kill a dead player '%s' (%s)", GetName().c_str(), GetGUID().ToString().c_str());
|
||||
return;
|
||||
@@ -1371,12 +1371,8 @@ void Player::setDeathState(DeathState s)
|
||||
//FIXME: is pet dismissed at dying or releasing spirit? if second, add setDeathState(DEAD) to HandleRepopRequestOpcode and define pet unsummon here with (s == DEAD)
|
||||
RemovePet(nullptr, PET_SAVE_NOT_IN_SLOT, true);
|
||||
|
||||
// save value before aura remove in Unit::setDeathState
|
||||
ressSpellId = GetUInt32Value(PLAYER_SELF_RES_SPELL);
|
||||
InitializeSelfResurrectionSpells();
|
||||
|
||||
// passive spell
|
||||
if (!ressSpellId)
|
||||
ressSpellId = GetResurrectionSpellId();
|
||||
UpdateCriteria(CRITERIA_TYPE_DEATH_AT_MAP, 1);
|
||||
UpdateCriteria(CRITERIA_TYPE_DEATH, 1);
|
||||
UpdateCriteria(CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
|
||||
@@ -1387,13 +1383,9 @@ void Player::setDeathState(DeathState s)
|
||||
|
||||
Unit::setDeathState(s);
|
||||
|
||||
// restore resurrection spell id for player after aura remove
|
||||
if (s == JUST_DIED && cur && ressSpellId)
|
||||
SetUInt32Value(PLAYER_SELF_RES_SPELL, ressSpellId);
|
||||
|
||||
if (IsAlive() && !cur)
|
||||
if (IsAlive() && !oldIsAlive)
|
||||
//clear aura case after resurrection by another way (spells will be applied before next death)
|
||||
SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
|
||||
ClearDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
|
||||
}
|
||||
|
||||
void Player::ToggleAFK()
|
||||
@@ -2675,7 +2667,9 @@ void Player::InitStatsForLevel(bool reapplyMods)
|
||||
RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY);
|
||||
|
||||
// restore if need some important flags
|
||||
SetUInt32Value(PLAYER_FIELD_BYTES2, 0); // flags empty by default
|
||||
SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK, 0);
|
||||
SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, 0);
|
||||
SetByteValue(PLAYER_FIELD_BYTES2, 3, 0);
|
||||
|
||||
if (reapplyMods) // reapply stats values only on .reset stats (level) command
|
||||
_ApplyAllStatBonuses();
|
||||
@@ -4390,7 +4384,8 @@ void Player::DurabilityLossAll(double percent, bool inventory)
|
||||
// bags not have durability
|
||||
// for (int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
DurabilityLoss(pItem, percent);
|
||||
|
||||
@@ -4433,7 +4428,8 @@ void Player::DurabilityPointsLossAll(int32 points, bool inventory)
|
||||
// bags not have durability
|
||||
// for (int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
DurabilityPointsLoss(pItem, points);
|
||||
|
||||
@@ -4488,7 +4484,8 @@ uint32 Player::DurabilityRepairAll(bool cost, float discountMod, bool guildBank)
|
||||
{
|
||||
uint32 TotalCost = 0;
|
||||
// equipped, backpack, bags itself
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; i++)
|
||||
TotalCost += DurabilityRepair(((INVENTORY_SLOT_BAG_0 << 8) | i), cost, discountMod, guildBank);
|
||||
|
||||
// bank, buyback and keys not repaired
|
||||
@@ -9443,7 +9440,8 @@ InventoryResult Player::CanUnequipItems(uint32 item, uint32 count) const
|
||||
res = ires;
|
||||
}
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->GetEntry() == item)
|
||||
{
|
||||
@@ -9489,7 +9487,8 @@ InventoryResult Player::CanUnequipItems(uint32 item, uint32 count) const
|
||||
uint32 Player::GetItemCount(uint32 item, bool inBankAlso, Item* skipItem) const
|
||||
{
|
||||
uint32 count = 0;
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; i++)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem != skipItem && pItem->GetEntry() == item)
|
||||
count += pItem->GetCount();
|
||||
@@ -9499,7 +9498,7 @@ uint32 Player::GetItemCount(uint32 item, bool inBankAlso, Item* skipItem) const
|
||||
count += pBag->GetItemCount(item, skipItem);
|
||||
|
||||
if (skipItem && skipItem->GetTemplate()->GetGemProperties())
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem != skipItem && pItem->GetSocketColor(0))
|
||||
count += pItem->GetGemCountWithID(item);
|
||||
@@ -9551,7 +9550,8 @@ uint32 Player::GetItemCount(uint32 item, bool inBankAlso, Item* skipItem) const
|
||||
uint32 Player::GetItemCountWithLimitCategory(uint32 limitCategory, Item* skipItem) const
|
||||
{
|
||||
uint32 count = 0;
|
||||
for (int i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem != skipItem)
|
||||
if (ItemTemplate const* pProto = pItem->GetTemplate())
|
||||
@@ -9592,7 +9592,8 @@ uint32 Player::GetItemCountWithLimitCategory(uint32 limitCategory, Item* skipIte
|
||||
|
||||
Item* Player::GetItemByGuid(ObjectGuid guid) const
|
||||
{
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->GetGUID() == guid)
|
||||
return pItem;
|
||||
@@ -9717,7 +9718,8 @@ Item* Player::GetShield(bool useable) const
|
||||
|
||||
Item* Player::GetChildItemByGuid(ObjectGuid guid) const
|
||||
{
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->GetGUID() == guid)
|
||||
return pItem;
|
||||
@@ -9812,7 +9814,7 @@ bool Player::IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const
|
||||
return true;
|
||||
|
||||
// backpack slots
|
||||
if (slot >= INVENTORY_SLOT_ITEM_START && slot < INVENTORY_SLOT_ITEM_END)
|
||||
if (slot >= INVENTORY_SLOT_ITEM_START && slot < INVENTORY_SLOT_ITEM_START + GetInventorySlotCount())
|
||||
return true;
|
||||
|
||||
// bank main slots
|
||||
@@ -9841,10 +9843,17 @@ bool Player::IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const
|
||||
return false;
|
||||
}
|
||||
|
||||
void Player::SetInventorySlotCount(uint8 slots)
|
||||
{
|
||||
ASSERT(slots <= (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
|
||||
SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots);
|
||||
}
|
||||
|
||||
bool Player::HasItemCount(uint32 item, uint32 count, bool inBankAlso) const
|
||||
{
|
||||
uint32 tempcount = 0;
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; i++)
|
||||
{
|
||||
Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
if (pItem && pItem->GetEntry() == item && !pItem->IsInTrade())
|
||||
@@ -10096,7 +10105,8 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& des
|
||||
bool Player::HasItemTotemCategory(uint32 TotemCategory) const
|
||||
{
|
||||
Item* item;
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = EQUIPMENT_SLOT_START; i < inventoryEnd; ++i)
|
||||
{
|
||||
item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
if (item && DB2Manager::IsTotemCategoryCompatibleWith(item->GetTemplate()->GetTotemCategory(), TotemCategory))
|
||||
@@ -10402,6 +10412,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
|
||||
}
|
||||
|
||||
// not specific slot or have space for partly store only in specific slot
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
|
||||
// in specific bag
|
||||
if (bag != NULL_BAG)
|
||||
@@ -10447,7 +10458,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
|
||||
return EQUIP_ERR_ITEM_MAX_COUNT;
|
||||
}
|
||||
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, inventoryEnd, dest, pProto, count, true, pItem, bag, slot);
|
||||
if (res != EQUIP_ERR_OK)
|
||||
{
|
||||
if (no_space_count)
|
||||
@@ -10535,7 +10546,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
|
||||
}
|
||||
}
|
||||
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, inventoryEnd, dest, pProto, count, false, pItem, bag, slot);
|
||||
if (res != EQUIP_ERR_OK)
|
||||
{
|
||||
if (no_space_count)
|
||||
@@ -10619,7 +10630,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
|
||||
return EQUIP_ERR_ITEM_MAX_COUNT;
|
||||
}
|
||||
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
|
||||
res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, inventoryEnd, dest, pProto, count, true, pItem, bag, slot);
|
||||
if (res != EQUIP_ERR_OK)
|
||||
{
|
||||
if (no_space_count)
|
||||
@@ -10747,7 +10758,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
|
||||
(pProto->GetBonding() == BIND_NONE || pProto->GetBonding() == BIND_ON_ACQUIRE))
|
||||
searchSlotStart = INVENTORY_SLOT_BAG_START;
|
||||
|
||||
res = CanStoreItem_InInventorySlots(searchSlotStart, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
|
||||
res = CanStoreItem_InInventorySlots(searchSlotStart, inventoryEnd, dest, pProto, count, false, pItem, bag, slot);
|
||||
if (res != EQUIP_ERR_OK)
|
||||
{
|
||||
if (no_space_count)
|
||||
@@ -10800,7 +10811,8 @@ InventoryResult Player::CanStoreItems(Item** items, int count, uint32* offending
|
||||
memset(inventoryCounts, 0, sizeof(uint32) * (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
|
||||
memset(bagCounts, 0, sizeof(uint32) * (INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START) * MAX_BAG_SIZE);
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
{
|
||||
item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
if (item2 && !item2->IsInTrade())
|
||||
@@ -10853,7 +10865,7 @@ InventoryResult Player::CanStoreItems(Item** items, int count, uint32* offending
|
||||
{
|
||||
bool b_found = false;
|
||||
|
||||
for (int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; ++t)
|
||||
for (int t = INVENTORY_SLOT_ITEM_START; t < inventoryEnd; ++t)
|
||||
{
|
||||
item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
|
||||
if (item2 && item2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inventoryCounts[t-INVENTORY_SLOT_ITEM_START] + item->GetCount() <= pProto->GetMaxStackSize())
|
||||
@@ -10922,7 +10934,7 @@ InventoryResult Player::CanStoreItems(Item** items, int count, uint32* offending
|
||||
|
||||
// search free slot
|
||||
bool b_found = false;
|
||||
for (int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; ++t)
|
||||
for (int t = INVENTORY_SLOT_ITEM_START; t < inventoryEnd; ++t)
|
||||
{
|
||||
if (inventoryCounts[t-INVENTORY_SLOT_ITEM_START] == 0)
|
||||
{
|
||||
@@ -12328,7 +12340,8 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
|
||||
uint32 remcount = 0;
|
||||
|
||||
// in inventory
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; ++i)
|
||||
{
|
||||
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
{
|
||||
@@ -12548,7 +12561,8 @@ void Player::DestroyZoneLimitedItem(bool update, uint32 new_zone)
|
||||
GetMapId(), new_zone, GetName().c_str(), GetGUID().ToString().c_str());
|
||||
|
||||
// in inventory
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->IsLimitedToAnotherMapOrZone(GetMapId(), new_zone))
|
||||
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
|
||||
@@ -12576,7 +12590,8 @@ void Player::DestroyConjuredItems(bool update)
|
||||
GetName().c_str(), GetGUID().ToString().c_str());
|
||||
|
||||
// in inventory
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->IsConjuredConsumable())
|
||||
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
|
||||
@@ -12599,7 +12614,8 @@ void Player::DestroyConjuredItems(bool update)
|
||||
Item* Player::GetItemByEntry(uint32 entry) const
|
||||
{
|
||||
// in inventory
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->GetEntry() == entry)
|
||||
return pItem;
|
||||
@@ -12628,7 +12644,8 @@ std::vector<Item*> Player::GetItemListByEntry(uint32 entry, bool inBankAlso) con
|
||||
{
|
||||
std::vector<Item*> itemList = std::vector<Item*>();
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; ++i)
|
||||
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (item->GetEntry() == entry)
|
||||
itemList.push_back(item);
|
||||
@@ -13541,7 +13558,8 @@ void Player::RemoveArenaEnchantments(EnchantmentSlot slot)
|
||||
// remove enchants from inventory items
|
||||
// NOTE: no need to remove these from stats, since these aren't equipped
|
||||
// in inventory
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; ++i)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; ++i)
|
||||
if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
if (pItem->GetEnchantmentId(slot))
|
||||
pItem->ClearEnchantment(slot);
|
||||
@@ -17377,17 +17395,17 @@ bool Player::IsLoading() const
|
||||
|
||||
bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
||||
//"SELECT guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
// 21 22 23 24 25 26 27 28 29 30 31 32 33
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//"SELECT guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
// 22 23 24 25 26 27 28 29 30 31 32 33 34
|
||||
//"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
// 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
||||
// 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
||||
//"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
|
||||
// 49 50 51 52 53 54
|
||||
// 50 51 52 53 54 55
|
||||
//"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
|
||||
// 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
||||
// 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
||||
//"health, power1, power2, power3, power4, power5, power6, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, grantableLevels, raidDifficulty, legacyRaidDifficulty, fishing_steps "
|
||||
// 72 73 74 75 76
|
||||
// 73 74 75 76 77
|
||||
//"honor, honorLevel, prestigeLevel, honor_rest_state, honor_rest_bonus "
|
||||
//
|
||||
//"FROM characters WHERE guid = ?", CONNECTION_ASYNC);
|
||||
@@ -17459,8 +17477,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8());
|
||||
SetXP(fields[7].GetUInt32());
|
||||
|
||||
_LoadIntoDataField(fields[65].GetString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE);
|
||||
_LoadIntoDataField(fields[66].GetString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2);
|
||||
_LoadIntoDataField(fields[66].GetString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE);
|
||||
_LoadIntoDataField(fields[67].GetString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2);
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f);
|
||||
@@ -17486,12 +17504,13 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, fields[13].GetUInt8());
|
||||
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
|
||||
SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, customDisplay[i]);
|
||||
SetBankBagSlotCount(fields[17].GetUInt8());
|
||||
SetInventorySlotCount(fields[17].GetUInt8());
|
||||
SetBankBagSlotCount(fields[18].GetUInt8());
|
||||
SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, gender);
|
||||
SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, fields[54].GetUInt8());
|
||||
SetUInt32Value(PLAYER_FLAGS, fields[19].GetUInt32());
|
||||
SetUInt32Value(PLAYER_FLAGS_EX, fields[20].GetUInt32());
|
||||
SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[53].GetUInt32());
|
||||
SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, fields[55].GetUInt8());
|
||||
SetUInt32Value(PLAYER_FLAGS, fields[20].GetUInt32());
|
||||
SetUInt32Value(PLAYER_FLAGS_EX, fields[21].GetUInt32());
|
||||
SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[54].GetUInt32());
|
||||
|
||||
if (!ValidateAppearance(
|
||||
fields[3].GetUInt8(), // race
|
||||
@@ -17509,9 +17528,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
}
|
||||
|
||||
// set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise)
|
||||
SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[67].GetUInt8());
|
||||
SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[68].GetUInt8());
|
||||
|
||||
m_fishingSteps = fields[71].GetUInt8();
|
||||
m_fishingSteps = fields[72].GetUInt8();
|
||||
|
||||
InitDisplayIds();
|
||||
|
||||
@@ -17539,18 +17558,18 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
InitPrimaryProfessions(); // to max set before any spell loaded
|
||||
|
||||
// init saved position, and fix it later if problematic
|
||||
ObjectGuid::LowType transLowGUID = fields[40].GetUInt64();
|
||||
ObjectGuid::LowType transLowGUID = fields[41].GetUInt64();
|
||||
|
||||
Relocate(fields[21].GetFloat(), fields[22].GetFloat(), fields[23].GetFloat(), fields[25].GetFloat());
|
||||
Relocate(fields[22].GetFloat(), fields[23].GetFloat(), fields[24].GetFloat(), fields[26].GetFloat());
|
||||
|
||||
uint32 mapId = fields[24].GetUInt16();
|
||||
uint32 instanceId = fields[62].GetUInt32();
|
||||
uint32 mapId = fields[25].GetUInt16();
|
||||
uint32 instanceId = fields[63].GetUInt32();
|
||||
|
||||
SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID(Difficulty(fields[48].GetUInt8())));
|
||||
SetRaidDifficultyID(CheckLoadedRaidDifficultyID(Difficulty(fields[69].GetUInt8())));
|
||||
SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID(Difficulty(fields[70].GetUInt8())));
|
||||
SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID(Difficulty(fields[49].GetUInt8())));
|
||||
SetRaidDifficultyID(CheckLoadedRaidDifficultyID(Difficulty(fields[70].GetUInt8())));
|
||||
SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID(Difficulty(fields[71].GetUInt8())));
|
||||
|
||||
std::string taxi_nodes = fields[47].GetString();
|
||||
std::string taxi_nodes = fields[48].GetString();
|
||||
|
||||
#define RelocateToHomebind(){ mapId = m_homebindMapId; instanceId = 0; Relocate(m_homebindX, m_homebindY, m_homebindZ); }
|
||||
|
||||
@@ -17575,9 +17594,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
}
|
||||
|
||||
_LoadCurrency(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CURRENCY));
|
||||
SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[49].GetUInt32());
|
||||
SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, fields[50].GetUInt16());
|
||||
SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, fields[51].GetUInt16());
|
||||
SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[50].GetUInt32());
|
||||
SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, fields[51].GetUInt16());
|
||||
SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, fields[52].GetUInt16());
|
||||
|
||||
_LoadBoundInstances(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_BOUND_INSTANCES));
|
||||
_LoadInstanceTimeRestrictions(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES));
|
||||
@@ -17658,7 +17677,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
|
||||
if (transport)
|
||||
{
|
||||
float x = fields[36].GetFloat(), y = fields[37].GetFloat(), z = fields[38].GetFloat(), o = fields[39].GetFloat();
|
||||
float x = fields[37].GetFloat(), y = fields[38].GetFloat(), z = fields[39].GetFloat(), o = fields[40].GetFloat();
|
||||
m_movementInfo.transport.pos.Relocate(x, y, z, o);
|
||||
transport->CalculatePassengerPosition(x, y, z, &o);
|
||||
|
||||
@@ -17852,7 +17871,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
SaveRecallPosition();
|
||||
|
||||
time_t now = time(nullptr);
|
||||
time_t logoutTime = time_t(fields[31].GetUInt32());
|
||||
time_t logoutTime = time_t(fields[32].GetUInt32());
|
||||
|
||||
// since last logout (in seconds)
|
||||
uint32 time_diff = uint32(now - logoutTime); //uint64 is excessive for a time_diff in seconds.. uint32 allows for 136~ year difference.
|
||||
@@ -17865,18 +17884,18 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
|
||||
SetDrunkValue(newDrunkValue);
|
||||
|
||||
m_cinematic = fields[27].GetUInt8();
|
||||
m_Played_time[PLAYED_TIME_TOTAL] = fields[28].GetUInt32();
|
||||
m_Played_time[PLAYED_TIME_LEVEL] = fields[29].GetUInt32();
|
||||
m_cinematic = fields[28].GetUInt8();
|
||||
m_Played_time[PLAYED_TIME_TOTAL] = fields[29].GetUInt32();
|
||||
m_Played_time[PLAYED_TIME_LEVEL] = fields[30].GetUInt32();
|
||||
|
||||
SetTalentResetCost(fields[33].GetUInt32());
|
||||
SetTalentResetTime(time_t(fields[34].GetUInt32()));
|
||||
SetTalentResetCost(fields[34].GetUInt32());
|
||||
SetTalentResetTime(time_t(fields[35].GetUInt32()));
|
||||
|
||||
m_taxi.LoadTaxiMask(fields[26].GetString()); // must be before InitTaxiNodesForLevel
|
||||
m_taxi.LoadTaxiMask(fields[27].GetString()); // must be before InitTaxiNodesForLevel
|
||||
|
||||
uint32 extraflags = fields[41].GetUInt16();
|
||||
uint32 extraflags = fields[42].GetUInt16();
|
||||
|
||||
m_stableSlots = fields[42].GetUInt8();
|
||||
m_stableSlots = fields[43].GetUInt8();
|
||||
if (m_stableSlots > MAX_PET_STABLES)
|
||||
{
|
||||
TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) can't have more stable slots than %u, but has %u in DB",
|
||||
@@ -17884,7 +17903,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
m_stableSlots = MAX_PET_STABLES;
|
||||
}
|
||||
|
||||
m_atLoginFlags = fields[43].GetUInt16();
|
||||
m_atLoginFlags = fields[44].GetUInt16();
|
||||
|
||||
if (HasAtLoginFlag(AT_LOGIN_RENAME))
|
||||
{
|
||||
@@ -17897,7 +17916,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
m_lastHonorUpdateTime = logoutTime;
|
||||
UpdateHonorFields();
|
||||
|
||||
m_deathExpireTime = time_t(fields[46].GetUInt32());
|
||||
m_deathExpireTime = time_t(fields[47].GetUInt32());
|
||||
|
||||
if (m_deathExpireTime > now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP)
|
||||
m_deathExpireTime = now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP - 1;
|
||||
@@ -17929,19 +17948,19 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
InitRunes();
|
||||
|
||||
// rest bonus can only be calculated after InitStatsForLevel()
|
||||
_restMgr->LoadRestBonus(REST_TYPE_XP, PlayerRestState(fields[18].GetUInt8()), fields[30].GetFloat());
|
||||
_restMgr->LoadRestBonus(REST_TYPE_XP, PlayerRestState(fields[19].GetUInt8()), fields[31].GetFloat());
|
||||
|
||||
// load skills after InitStatsForLevel because it triggering aura apply also
|
||||
_LoadSkills(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SKILLS));
|
||||
UpdateSkillsForLevel(); //update skills after load, to make sure they are correctly update at player load
|
||||
|
||||
SetPrimarySpecialization(fields[35].GetUInt32());
|
||||
SetActiveTalentGroup(fields[63].GetUInt8());
|
||||
SetPrimarySpecialization(fields[36].GetUInt32());
|
||||
SetActiveTalentGroup(fields[64].GetUInt8());
|
||||
ChrSpecializationEntry const* primarySpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization());
|
||||
if (!primarySpec || primarySpec->ClassID != getClass() || GetActiveTalentGroup() >= MAX_SPECIALIZATIONS)
|
||||
ResetTalentSpecialization();
|
||||
|
||||
uint32 lootSpecId = fields[64].GetUInt32();
|
||||
uint32 lootSpecId = fields[65].GetUInt32();
|
||||
if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(lootSpecId))
|
||||
if (chrSpec->ClassID == getClass())
|
||||
SetLootSpecId(lootSpecId);
|
||||
@@ -18001,7 +18020,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
|
||||
// check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES
|
||||
// note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded
|
||||
uint32 curTitle = fields[52].GetUInt32();
|
||||
uint32 curTitle = fields[53].GetUInt32();
|
||||
if (curTitle && !HasTitle(curTitle))
|
||||
curTitle = 0;
|
||||
|
||||
@@ -18024,7 +18043,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
UpdateAllStats();
|
||||
|
||||
// restore remembered power/health values (but not more max values)
|
||||
uint32 savedHealth = fields[55].GetUInt32();
|
||||
uint32 savedHealth = fields[56].GetUInt32();
|
||||
SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth);
|
||||
uint32 loadedPowers = 0;
|
||||
for (uint32 i = 0; i < MAX_POWERS; ++i)
|
||||
@@ -18108,7 +18127,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
}
|
||||
|
||||
// RaF stuff.
|
||||
m_grantableLevels = fields[68].GetUInt8();
|
||||
m_grantableLevels = fields[69].GetUInt8();
|
||||
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
|
||||
SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND);
|
||||
|
||||
@@ -18130,16 +18149,16 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_FOLLOWER_ABILITIES)))
|
||||
_garrison = std::move(garrison);
|
||||
|
||||
_InitHonorLevelOnLoadFromDB(fields[72].GetUInt32(), fields[73].GetUInt32(), fields[74].GetUInt32());
|
||||
_InitHonorLevelOnLoadFromDB(fields[73].GetUInt32(), fields[74].GetUInt32(), fields[75].GetUInt32());
|
||||
|
||||
_restMgr->LoadRestBonus(REST_TYPE_HONOR, PlayerRestState(fields[75].GetUInt8()), fields[76].GetFloat());
|
||||
_restMgr->LoadRestBonus(REST_TYPE_HONOR, PlayerRestState(fields[76].GetUInt8()), fields[77].GetFloat());
|
||||
if (time_diff > 0)
|
||||
{
|
||||
//speed collect rest bonus in offline, in logout, far from tavern, city (section/in hour)
|
||||
float bubble0 = 0.031f;
|
||||
//speed collect rest bonus in offline, in logout, in tavern, city (section/in hour)
|
||||
float bubble1 = 0.125f;
|
||||
float bubble = fields[31].GetUInt8() > 0
|
||||
float bubble = fields[32].GetUInt8() > 0
|
||||
? bubble1 * sWorld->getRate(RATE_REST_OFFLINE_IN_TAVERN_OR_CITY)
|
||||
: bubble0 * sWorld->getRate(RATE_REST_OFFLINE_IN_WILDERNESS);
|
||||
|
||||
@@ -19767,6 +19786,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE));
|
||||
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
|
||||
stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i));
|
||||
stmt->setUInt8(index++, GetInventorySlotCount());
|
||||
stmt->setUInt8(index++, GetBankBagSlotCount());
|
||||
stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_XP)));
|
||||
stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
|
||||
@@ -19892,6 +19912,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE));
|
||||
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
|
||||
stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i));
|
||||
stmt->setUInt8(index++, GetInventorySlotCount());
|
||||
stmt->setUInt8(index++, GetBankBagSlotCount());
|
||||
stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_XP)));
|
||||
stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
|
||||
@@ -24673,33 +24694,30 @@ void Player::RemoveItemDependentAurasAndCasts(Item* pItem)
|
||||
InterruptSpell(CurrentSpellTypes(i));
|
||||
}
|
||||
|
||||
uint32 Player::GetResurrectionSpellId() const
|
||||
void Player::InitializeSelfResurrectionSpells()
|
||||
{
|
||||
// search priceless resurrection possibilities
|
||||
uint32 prio = 0;
|
||||
uint32 spell_id = 0;
|
||||
ClearDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
|
||||
|
||||
uint32 spells[3] = { };
|
||||
|
||||
AuraEffectList const& dummyAuras = GetAuraEffectsByType(SPELL_AURA_DUMMY);
|
||||
for (AuraEffectList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr)
|
||||
{
|
||||
// Soulstone Resurrection // prio: 3 (max, non death persistent)
|
||||
if (prio < 2 && (*itr)->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_WARLOCK && (*itr)->GetSpellInfo()->SpellFamilyFlags[1] & 0x1000000)
|
||||
{
|
||||
spell_id = 3026;
|
||||
prio = 3;
|
||||
}
|
||||
if ((*itr)->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_WARLOCK && (*itr)->GetSpellInfo()->SpellFamilyFlags[1] & 0x1000000)
|
||||
spells[0] = 3026;
|
||||
// Twisting Nether // prio: 2 (max)
|
||||
else if ((*itr)->GetId() == 23701 && roll_chance_i(10))
|
||||
{
|
||||
prio = 2;
|
||||
spell_id = 23700;
|
||||
}
|
||||
spells[1] = 23700;
|
||||
}
|
||||
|
||||
// Reincarnation (passive spell) // prio: 1
|
||||
if (prio < 1 && HasSpell(20608) && !GetSpellHistory()->HasCooldown(21169))
|
||||
spell_id = 21169;
|
||||
if (HasSpell(20608) && !GetSpellHistory()->HasCooldown(21169))
|
||||
spells[2] = 21169;
|
||||
|
||||
return spell_id;
|
||||
for (uint32 selfResSpell : spells)
|
||||
if (selfResSpell)
|
||||
AddDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfResSpell);
|
||||
}
|
||||
|
||||
// Used in triggers for check "Only to targets that grant experience or honor" req
|
||||
|
||||
@@ -446,7 +446,7 @@ enum PlayerBytesOffsets
|
||||
enum PlayerBytes2Offsets
|
||||
{
|
||||
PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION = 0, // 3 bytes
|
||||
PLAYER_BYTES_2_OFFSET_FACIAL_STYLE = 3,
|
||||
PLAYER_BYTES_2_OFFSET_FACIAL_STYLE = 3
|
||||
};
|
||||
|
||||
enum PlayerBytes3Offsets
|
||||
@@ -454,7 +454,7 @@ enum PlayerBytes3Offsets
|
||||
PLAYER_BYTES_3_OFFSET_PARTY_TYPE = 0,
|
||||
PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS = 1,
|
||||
PLAYER_BYTES_3_OFFSET_GENDER = 2,
|
||||
PLAYER_BYTES_3_OFFSET_INEBRIATION = 3,
|
||||
PLAYER_BYTES_3_OFFSET_INEBRIATION = 3
|
||||
};
|
||||
|
||||
enum PlayerBytes4Offsets
|
||||
@@ -468,13 +468,14 @@ enum PlayerFieldBytesOffsets
|
||||
PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL = 0,
|
||||
PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES = 1,
|
||||
PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK = 2,
|
||||
PLAYER_FIELD_BYTES_OFFSET_NUM_RESPECS = 3,
|
||||
PLAYER_FIELD_BYTES_OFFSET_NUM_RESPECS = 3
|
||||
};
|
||||
|
||||
enum PlayerFieldBytes2Offsets
|
||||
{
|
||||
PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK = 0,
|
||||
PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION = 1,
|
||||
PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS = 2
|
||||
};
|
||||
|
||||
enum PlayerFieldBytes3Offsets
|
||||
@@ -604,11 +605,12 @@ enum PlayerSlots
|
||||
// first slot for item stored (in any way in player m_items data)
|
||||
PLAYER_SLOT_START = 0,
|
||||
// last+1 slot for item stored (in any way in player m_items data)
|
||||
PLAYER_SLOT_END = 187,
|
||||
PLAYER_SLOT_END = 195,
|
||||
PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START)
|
||||
};
|
||||
|
||||
#define INVENTORY_SLOT_BAG_0 255
|
||||
#define INVENTORY_DEFAULT_SIZE 16
|
||||
|
||||
enum EquipmentSlots : uint8 // 19 slots
|
||||
{
|
||||
@@ -644,41 +646,41 @@ enum InventorySlots : uint8 // 4 slots
|
||||
INVENTORY_SLOT_BAG_END = 23
|
||||
};
|
||||
|
||||
enum InventoryPackSlots : uint8 // 16 slots
|
||||
enum InventoryPackSlots : uint8 // 24 slots
|
||||
{
|
||||
INVENTORY_SLOT_ITEM_START = 23,
|
||||
INVENTORY_SLOT_ITEM_END = 39
|
||||
INVENTORY_SLOT_ITEM_END = 47
|
||||
};
|
||||
|
||||
enum BankItemSlots // 28 slots
|
||||
{
|
||||
BANK_SLOT_ITEM_START = 39,
|
||||
BANK_SLOT_ITEM_END = 67
|
||||
BANK_SLOT_ITEM_START = 47,
|
||||
BANK_SLOT_ITEM_END = 75
|
||||
};
|
||||
|
||||
enum BankBagSlots // 7 slots
|
||||
{
|
||||
BANK_SLOT_BAG_START = 67,
|
||||
BANK_SLOT_BAG_END = 74
|
||||
BANK_SLOT_BAG_START = 75,
|
||||
BANK_SLOT_BAG_END = 82
|
||||
};
|
||||
|
||||
enum BuyBackSlots // 12 slots
|
||||
{
|
||||
// stored in m_buybackitems
|
||||
BUYBACK_SLOT_START = 74,
|
||||
BUYBACK_SLOT_END = 86
|
||||
BUYBACK_SLOT_START = 82,
|
||||
BUYBACK_SLOT_END = 94
|
||||
};
|
||||
|
||||
enum ReagentSlots
|
||||
enum ReagentSlots // 98 slots
|
||||
{
|
||||
REAGENT_SLOT_START = 87,
|
||||
REAGENT_SLOT_END = 184,
|
||||
REAGENT_SLOT_START = 94,
|
||||
REAGENT_SLOT_END = 192,
|
||||
};
|
||||
|
||||
enum ChildEquipmentSlots
|
||||
{
|
||||
CHILD_EQUIPMENT_SLOT_START = 184,
|
||||
CHILD_EQUIPMENT_SLOT_END = 187,
|
||||
CHILD_EQUIPMENT_SLOT_START = 192,
|
||||
CHILD_EQUIPMENT_SLOT_END = 195,
|
||||
};
|
||||
|
||||
struct ItemPosCount
|
||||
@@ -1178,6 +1180,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
static bool IsChildEquipmentPos(uint8 bag, uint8 slot);
|
||||
bool IsValidPos(uint16 pos, bool explicit_pos) const { return IsValidPos(pos >> 8, pos & 255, explicit_pos); }
|
||||
bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const;
|
||||
uint8 GetInventorySlotCount() const { return GetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS); }
|
||||
void SetInventorySlotCount(uint8 slots);
|
||||
uint8 GetBankBagSlotCount() const { return GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS); }
|
||||
void SetBankBagSlotCount(uint8 count) { SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS, count); }
|
||||
bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
|
||||
@@ -1858,7 +1862,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
static void OfflineResurrect(ObjectGuid const& guid, SQLTransaction& trans);
|
||||
bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; }
|
||||
WorldLocation GetCorpseLocation() const { return _corpseLocation; }
|
||||
uint32 GetResurrectionSpellId() const;
|
||||
void InitializeSelfResurrectionSpells();
|
||||
void ResurrectPlayer(float restore_percent, bool applySickness = false);
|
||||
void BuildPlayerRepop();
|
||||
void RepopAtGraveyard();
|
||||
|
||||
@@ -461,19 +461,20 @@ void WorldSession::HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& tot
|
||||
totem->ToTotem()->UnSummon();
|
||||
}
|
||||
|
||||
void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& /*packet*/)
|
||||
void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
|
||||
{
|
||||
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
|
||||
return; // silent return, client should display error by itself and not send this opcode
|
||||
|
||||
if (_player->GetUInt32Value(PLAYER_SELF_RES_SPELL))
|
||||
{
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(_player->GetUInt32Value(PLAYER_SELF_RES_SPELL));
|
||||
if (spellInfo)
|
||||
_player->CastSpell(_player, spellInfo, false, nullptr);
|
||||
std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
|
||||
if (std::find(selfResSpells.begin(), selfResSpells.end(), selfRes.SpellID) == selfResSpells.end())
|
||||
return;
|
||||
|
||||
_player->SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
|
||||
}
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(selfRes.SpellID);
|
||||
if (spellInfo)
|
||||
_player->CastSpell(_player, spellInfo, false, nullptr);
|
||||
|
||||
_player->RemoveDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick)
|
||||
|
||||
@@ -122,7 +122,8 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
|
||||
if (Bag* bag = _player->GetBagByPos(i))
|
||||
freeBagSlots += bag->GetFreeSlots();
|
||||
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
|
||||
uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + _player->GetInventorySlotCount();
|
||||
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < inventoryEnd; i++)
|
||||
if (!_player->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
++freeBagSlots;
|
||||
}
|
||||
|
||||
@@ -821,6 +821,11 @@ void WorldPackets::Spells::UnlearnSkill::Read()
|
||||
_worldPacket >> SkillLine;
|
||||
}
|
||||
|
||||
void WorldPackets::Spells::SelfRes::Read()
|
||||
{
|
||||
_worldPacket >> SpellID;
|
||||
}
|
||||
|
||||
void WorldPackets::Spells::GetMirrorImageData::Read()
|
||||
{
|
||||
_worldPacket >> UnitGUID;
|
||||
|
||||
@@ -823,7 +823,9 @@ namespace WorldPackets
|
||||
public:
|
||||
SelfRes(WorldPacket&& packet) : ClientPacket(CMSG_SELF_RES, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
void Read() override;
|
||||
|
||||
int32 SpellID = 0;
|
||||
};
|
||||
|
||||
class GetMirrorImageData final : public ClientPacket
|
||||
|
||||
@@ -1565,7 +1565,7 @@ class TC_GAME_API WorldSession
|
||||
void SendLfgOfferContinue(uint32 dungeonEntry);
|
||||
void SendLfgTeleportError(lfg::LfgTeleportResult err);
|
||||
|
||||
void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& packet);
|
||||
void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes);
|
||||
void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet);
|
||||
|
||||
// Socket gem
|
||||
|
||||
Reference in New Issue
Block a user