aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-06-03 20:40:34 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:06:57 +0200
commit455959c6064af6f7863a6b4b57cb0ef1646bd8ef (patch)
tree7d7a7cdd3a44643ee5fc7d19521ced1c8b815c66
parent31fda79556e55375962a3c9e46f6dbdbf6e90d18 (diff)
Core/PacketIO: Rewrite updatefield handling
-rw-r--r--sql/base/auth_database.sql19
-rw-r--r--sql/base/characters_database.sql5
-rw-r--r--sql/updates/auth/master/2019_06_08_01_auth.sql2
-rw-r--r--sql/updates/characters/master/2019_06_08_00_characters.sql2
-rw-r--r--sql/updates/world/master/2019_06_08_01_world.sql1
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp8
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp4
-rw-r--r--src/server/game/AI/CreatureAI.cpp4
-rw-r--r--src/server/game/AI/CreatureAISelector.cpp2
-rw-r--r--src/server/game/AI/PlayerAI/PlayerAI.cpp20
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp9
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp3
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp8
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp69
-rw-r--r--src/server/game/Accounts/RBAC.h16
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp2
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp8
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp40
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp6
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp6
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp4
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp13
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp20
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp8
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp20
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp10
-rw-r--r--src/server/game/DataStores/DB2Stores.h1
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp85
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h14
-rw-r--r--src/server/game/Entities/Conversation/Conversation.cpp69
-rw-r--r--src/server/game/Entities/Conversation/Conversation.h51
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp85
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h26
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp161
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp52
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.h13
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp213
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h39
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h12
-rw-r--r--src/server/game/Entities/GameObject/QuaternionData.h48
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp66
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h9
-rw-r--r--src/server/game/Entities/Item/Item.cpp558
-rw-r--r--src/server/game/Entities/Item/Item.h85
-rw-r--r--src/server/game/Entities/Item/ItemEnchantmentMgr.cpp12
-rw-r--r--src/server/game/Entities/Item/ItemEnchantmentMgr.h1
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp801
-rw-r--r--src/server/game/Entities/Object/Object.h310
-rw-r--r--src/server/game/Entities/Object/Position.cpp2
-rw-r--r--src/server/game/Entities/Object/Position.h7
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.cpp36
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h612
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp6525
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFieldFlags.h55
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp3968
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h1132
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateMask.h154
-rw-r--r--src/server/game/Entities/Object/Updates/ViewerDependentValues.h269
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp71
-rw-r--r--src/server/game/Entities/Pet/Pet.h2
-rw-r--r--src/server/game/Entities/Player/CollectionMgr.cpp64
-rw-r--r--src/server/game/Entities/Player/Player.cpp1663
-rw-r--r--src/server/game/Entities/Player/Player.h279
-rw-r--r--src/server/game/Entities/Player/RestMgr.cpp40
-rw-r--r--src/server/game/Entities/Totem/Totem.cpp6
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp4
-rw-r--r--src/server/game/Entities/Transport/Transport.h4
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp179
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp653
-rw-r--r--src/server/game/Entities/Unit/Unit.h244
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h136
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp16
-rw-r--r--src/server/game/Events/GameEventMgr.cpp5
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp13
-rw-r--r--src/server/game/Globals/ObjectMgr.h6
-rw-r--r--src/server/game/Groups/Group.cpp28
-rw-r--r--src/server/game/Groups/Group.h1
-rw-r--r--src/server/game/Guilds/Guild.cpp16
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp52
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp18
-rw-r--r--src/server/game/Handlers/BankHandler.cpp2
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp2
-rw-r--r--src/server/game/Handlers/BattlePetHandler.cpp2
-rw-r--r--src/server/game/Handlers/BlackMarketHandler.cpp7
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp65
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp5
-rw-r--r--src/server/game/Handlers/GarrisonHandler.cpp4
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp7
-rw-r--r--src/server/game/Handlers/HotfixHandler.cpp10
-rw-r--r--src/server/game/Handlers/InspectHandler.cpp14
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp42
-rw-r--r--src/server/game/Handlers/LootHandler.cpp8
-rw-r--r--src/server/game/Handlers/MailHandler.cpp10
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp67
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp14
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp16
-rw-r--r--src/server/game/Handlers/PetHandler.cpp10
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp19
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp2
-rw-r--r--src/server/game/Handlers/SkillHandler.cpp2
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp29
-rw-r--r--src/server/game/Handlers/TaxiHandler.cpp6
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp32
-rw-r--r--src/server/game/Handlers/TransmogrificationHandler.cpp2
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp19
-rw-r--r--src/server/game/Loot/Loot.cpp3
-rw-r--r--src/server/game/Loot/Loot.h5
-rw-r--r--src/server/game/Loot/LootMgr.cpp2
-rw-r--r--src/server/game/Loot/LootMgr.h2
-rw-r--r--src/server/game/Maps/Map.cpp31
-rw-r--r--src/server/game/Maps/MapScripts.cpp48
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp6
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp8
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp6
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h4
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp14
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp10
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.h8
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp9
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h11
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/WorldSession.cpp6
-rw-r--r--src/server/game/Server/WorldSocket.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp307
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp36
-rw-r--r--src/server/game/Spells/SpellEffects.cpp62
-rw-r--r--src/server/game/Spells/SpellHistory.cpp14
-rw-r--r--src/server/game/Spells/SpellInfo.cpp19
-rw-r--r--src/server/scripts/Commands/cs_character.cpp4
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp4
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp270
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp35
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp22
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp84
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp28
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp8
-rw-r--r--src/server/scripts/Commands/cs_reset.cpp13
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp46
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_ghostlands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp4
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp6
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp31
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp6
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp4
-rw-r--r--src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp4
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp10
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp10
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp4
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp4
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp8
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp6
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp6
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp8
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp4
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp4
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp22
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_felwood.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp24
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp12
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp6
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp6
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp12
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp2
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/stonecore.cpp8
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp8
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp14
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp8
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp21
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp7
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp8
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp12
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp10
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp16
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp12
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp22
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp12
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp38
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp6
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp8
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp32
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp8
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp8
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp8
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp14
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp22
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp10
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp24
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp26
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp14
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp8
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp28
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp22
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp24
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp4
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp12
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp8
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp12
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp6
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp8
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp26
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp40
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp22
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp52
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp26
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp22
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp10
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp8
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp26
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp8
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp8
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp10
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp30
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp42
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp6
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp20
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp14
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp8
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp50
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp28
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp16
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp12
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp8
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp10
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp22
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp10
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp38
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp6
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp6
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp18
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp24
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp2
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp8
-rw-r--r--src/server/scripts/Pet/pet_dk.cpp2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp12
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp6
-rw-r--r--src/server/scripts/Spells/spell_pet.cpp12
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp8
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp2
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp6
-rw-r--r--src/server/scripts/World/item_scripts.cpp2
-rw-r--r--src/server/scripts/World/npcs_special.cpp52
-rw-r--r--src/server/shared/Packets/ByteBuffer.h5
368 files changed, 10410 insertions, 12592 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index cd0f77945c2..9dc252d866b 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -754,11 +754,8 @@ INSERT INTO `rbac_linked_permissions` VALUES
(196,304),
(196,305),
(196,306),
-(196,307),
-(196,308),
(196,309),
(196,310),
-(196,313),
(196,314),
(196,319),
(196,320),
@@ -773,13 +770,9 @@ INSERT INTO `rbac_linked_permissions` VALUES
(196,329),
(196,330),
(196,331),
-(196,332),
-(196,333),
-(196,334),
(196,335),
(196,336),
(196,337),
-(196,338),
(196,339),
(196,340),
(196,341),
@@ -1199,7 +1192,6 @@ INSERT INTO `rbac_linked_permissions` VALUES
(198,532),
(198,544),
(198,545),
-(198,546),
(198,547),
(198,548),
(198,549),
@@ -1452,13 +1444,10 @@ INSERT INTO `rbac_permissions` VALUES
(304,'Command: debug bg'),
(305,'Command: debug entervehicle'),
(306,'Command: debug getitemstate'),
-(307,'Command: debug getitemvalue'),
-(308,'Command: debug getvalue'),
(309,'Command: debug hostil'),
(310,'Command: debug itemexpire'),
(311,'Command: debug lootrecipient'),
(312,'Command: debug los'),
-(313,'Command: debug mod32value'),
(314,'Command: debug moveflags'),
(315,'Command: debug play'),
(316,'Command: debug play cinematics'),
@@ -1477,13 +1466,9 @@ INSERT INTO `rbac_permissions` VALUES
(329,'Command: debug send setphaseshift'),
(330,'Command: debug send spellfail'),
(331,'Command: debug setaurastate'),
-(332,'Command: debug setbit'),
-(333,'Command: debug setitemvalue'),
-(334,'Command: debug setvalue'),
(335,'Command: debug setvid'),
(336,'Command: debug spawnvehicle'),
(337,'Command: debug threat'),
-(338,'Command: debug update'),
(339,'Command: debug uws'),
(340,'Command: wpgps'),
(341,'Command: deserter'),
@@ -1690,7 +1675,6 @@ INSERT INTO `rbac_permissions` VALUES
(543,'Command: demorph'),
(544,'Command: modify'),
(545,'Command: modify arenapoints'),
-(546,'Command: modify bit'),
(547,'Command: modify drunk'),
(548,'Command: modify energy'),
(549,'Command: modify faction'),
@@ -2195,7 +2179,8 @@ INSERT INTO `updates` VALUES
('2018_06_29_00_auth.sql','03AAEA7E52848FA5522C3F0C6D9C38B988407480','RELEASED','2018-06-29 22:34:04',0),
('2018_12_09_00_auth_2017_01_06_00_auth.sql','6CCFE6A9774EC733C9863D36A0F15F3534189BBD','RELEASED','2018-11-22 22:21:26',0),
('2018_12_09_01_auth.sql','576C2A11BE671D8420FA3EB705E594E381ECCC56','RELEASED','2018-12-09 14:49:17',0),
-('2019_06_08_00_auth.sql','EA5A78F5A26C17BC790481EA9B3772D3A6912459','RELEASED','2019-05-20 17:21:20',0);
+('2019_06_08_00_auth.sql','EA5A78F5A26C17BC790481EA9B3772D3A6912459','RELEASED','2019-05-20 17:21:20',0),
+('2019_06_08_01_auth.sql','8165B1B787E3ECF0C8C0AD2D641513270977ABB4','RELEASED','2019-06-04 16:51:31',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index fa28bd1fa25..5933558354a 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1625,7 +1625,6 @@ CREATE TABLE `character_void_storage` (
`creatorGuid` bigint(20) unsigned NOT NULL DEFAULT '0',
`randomPropertyType` tinyint(3) unsigned NOT NULL DEFAULT '0',
`randomProperty` int(10) unsigned NOT NULL DEFAULT '0',
- `suffixFactor` int(10) unsigned NOT NULL DEFAULT '0',
`upgradeId` int(10) unsigned NOT NULL DEFAULT '0',
`fixedScalingLevel` int(10) unsigned DEFAULT '0',
`artifactKnowledgeLevel` int(10) unsigned DEFAULT '0',
@@ -2970,7 +2969,6 @@ CREATE TABLE `item_loot_items` (
`needs_quest` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'quest drop',
`rnd_type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'random enchantment type',
`rnd_prop` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'random enchantment added when originally rolled',
- `rnd_suffix` int(10) NOT NULL DEFAULT '0' COMMENT 'random suffix added when originally rolled',
`context` tinyint(3) unsigned NOT NULL DEFAULT '0',
`bonus_list_ids` text COMMENT 'Space separated list of bonus list ids',
PRIMARY KEY (`container_id`,`item_id`)
@@ -3571,7 +3569,8 @@ INSERT INTO `updates` VALUES
('2018_07_31_00_characters.sql','7DA8D4A4534520B23E6F5BBD5B8EE205B799C798','RELEASED','2018-07-31 20:54:39',0),
('2018_12_09_00_characters.sql','7FE9641C93ED762597C08F1E9B6649C9EC2F0E47','RELEASED','2018-09-18 23:34:29',0),
('2018_12_09_01_characters.sql','C80B936AAD94C58A0F33382CED08CFB4E0B6AC34','RELEASED','2018-10-10 22:05:28',0),
-('2018_12_09_02_characters.sql','DBBA0C06985CE8AC4E6E7E94BD6B2673E9ADFAE2','RELEASED','2018-12-02 17:32:31',0);
+('2018_12_09_02_characters.sql','DBBA0C06985CE8AC4E6E7E94BD6B2673E9ADFAE2','RELEASED','2018-12-02 17:32:31',0),
+('2019_06_08_00_characters.sql','6C5AF52AEF03BC019B96E7A07592C22660F9327B','RELEASED','2019-06-03 20:04:47',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/master/2019_06_08_01_auth.sql b/sql/updates/auth/master/2019_06_08_01_auth.sql
new file mode 100644
index 00000000000..1c4f66a2567
--- /dev/null
+++ b/sql/updates/auth/master/2019_06_08_01_auth.sql
@@ -0,0 +1,2 @@
+DELETE FROM `rbac_linked_permissions` WHERE `linkedId` IN (307,308,313,332,333,334,338,546);
+DELETE FROM `rbac_permissions` WHERE `id` IN (307,308,313,332,333,334,338,546);
diff --git a/sql/updates/characters/master/2019_06_08_00_characters.sql b/sql/updates/characters/master/2019_06_08_00_characters.sql
new file mode 100644
index 00000000000..c7ef28d4e34
--- /dev/null
+++ b/sql/updates/characters/master/2019_06_08_00_characters.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `character_void_storage` DROP `suffixFactor`;
+ALTER TABLE `item_loot_items` DROP `rnd_suffix`;
diff --git a/sql/updates/world/master/2019_06_08_01_world.sql b/sql/updates/world/master/2019_06_08_01_world.sql
new file mode 100644
index 00000000000..8a37ec2737f
--- /dev/null
+++ b/sql/updates/world/master/2019_06_08_01_world.sql
@@ -0,0 +1 @@
+DELETE FROM `command` WHERE `name` IN ('debug setbit','debug getvalue','debug getitemvalue','debug Mod32Value','debug setitemvalue','debug setvalue','debug update','modify bit');
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 621a86e0bed..cebd59b2a6d 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -631,8 +631,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_CHAR_FISHINGSTEPS, "DELETE FROM character_fishingsteps WHERE guid = ?", CONNECTION_ASYNC);
// Void Storage
- PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_CHAR_GUID, "DELETE FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_SLOT, "DELETE FROM character_void_storage WHERE slot = ? AND playerGuid = ?", CONNECTION_ASYNC);
@@ -649,10 +649,10 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS, "DELETE FROM guild_finder_guild_settings WHERE guildId = ?", CONNECTION_ASYNC);
// Items that hold loot or money
- PrepareStatement(CHAR_SEL_ITEMCONTAINER_ITEMS, "SELECT item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids FROM item_loot_items WHERE container_id = ?", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_SEL_ITEMCONTAINER_ITEMS, "SELECT item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids FROM item_loot_items WHERE container_id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_DEL_ITEMCONTAINER_ITEMS, "DELETE FROM item_loot_items WHERE container_id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ITEMCONTAINER_ITEM, "DELETE FROM item_loot_items WHERE container_id = ? AND item_id = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_ITEMCONTAINER_ITEMS, "INSERT INTO item_loot_items (container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_ITEMCONTAINER_ITEMS, "INSERT INTO item_loot_items (container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_ITEMCONTAINER_MONEY, "SELECT money FROM item_loot_money WHERE container_id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_DEL_ITEMCONTAINER_MONEY, "DELETE FROM item_loot_money WHERE container_id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_ITEMCONTAINER_MONEY, "INSERT INTO item_loot_money (container_id, money) VALUES (?, ?)", CONNECTION_ASYNC);
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 7b61e3129ca..137eb2cce3b 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -48,14 +48,14 @@ void PossessedAI::UpdateAI(uint32 /*diff*/)
void PossessedAI::JustDied(Unit* /*u*/)
{
// We died while possessed, disable our loot
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
void PossessedAI::KilledUnit(Unit* victim)
{
// We killed a creature, disable victim's loot
if (victim->GetTypeId() == TYPEID_UNIT)
- victim->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
void PossessedAI::OnCharmed(bool /*apply*/)
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index cfa5d2592d1..e138148fb41 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -354,9 +354,9 @@ int32 CreatureAI::VisualizeBoundary(uint32 duration, Unit* owner, bool fill) con
if (TempSummon* point = owner->SummonCreature(BOUNDARY_VISUALIZE_CREATURE, Position(startPosition.GetPositionX() + front.first*BOUNDARY_VISUALIZE_STEP_SIZE, startPosition.GetPositionY() + front.second*BOUNDARY_VISUALIZE_STEP_SIZE, spawnZ), TEMPSUMMON_TIMED_DESPAWN, duration * IN_MILLISECONDS))
{
point->SetObjectScale(BOUNDARY_VISUALIZE_CREATURE_SCALE);
- point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_NPC);
+ point->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_NPC));
if (!hasOutOfBoundsNeighbor)
- point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ point->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
Q.pop();
}
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp
index 92518247b0b..4c73ca178a0 100644
--- a/src/server/game/AI/CreatureAISelector.cpp
+++ b/src/server/game/AI/CreatureAISelector.cpp
@@ -52,7 +52,7 @@ namespace FactorySelector
ai_factory = sCreatureAIRegistry->GetRegistryItem("VehicleAI");
else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER)
ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI");
- else if (creature->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK))
+ else if (creature->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK))
ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI");
else if (creature->IsGuard())
ai_factory = sCreatureAIRegistry->GetRegistryItem("GuardAI");
diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp
index b3cc0ae6979..1d01829fa38 100644
--- a/src/server/game/AI/PlayerAI/PlayerAI.cpp
+++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp
@@ -392,7 +392,7 @@ enum Spells
};
PlayerAI::PlayerAI(Player* player) : UnitAI(player), me(player),
- _selfSpec(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)),
+ _selfSpec(player->GetPrimarySpecialization()),
_isSelfHealer(PlayerAI::IsPlayerHealer(player)),
_isSelfRangedAttacker(PlayerAI::IsPlayerRangedAttacker(player))
{
@@ -407,7 +407,7 @@ Creature* PlayerAI::GetCharmer() const
uint16 PlayerAI::GetSpec(Player const* who /*= nullptr*/) const
{
- return (!who || who == me) ? _selfSpec : who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
+ return (!who || who == me) ? _selfSpec : who->GetPrimarySpecialization();
}
bool PlayerAI::IsPlayerHealer(Player const* who)
@@ -427,15 +427,15 @@ bool PlayerAI::IsPlayerHealer(Player const* who)
default:
return false;
case CLASS_PALADIN:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PALADIN_HOLY;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_PALADIN_HOLY;
case CLASS_PRIEST:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_DISCIPLINE || who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_HOLY;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_DISCIPLINE || who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_HOLY;
case CLASS_SHAMAN:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_RESTORATION;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_SHAMAN_RESTORATION;
case CLASS_MONK:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_MONK_MISTWEAVER;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_MONK_MISTWEAVER;
case CLASS_DRUID:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_DRUID_RESTORATION;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_DRUID_RESTORATION;
}
}
@@ -465,11 +465,11 @@ bool PlayerAI::IsPlayerRangedAttacker(Player const* who)
return false;
}
case CLASS_PRIEST:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_SHADOW;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_SHADOW;
case CLASS_SHAMAN:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_ELEMENTAL;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_SHAMAN_ELEMENTAL;
case CLASS_DRUID:
- return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_DRUID_BALANCE;
+ return who->GetPrimarySpecialization() == TALENT_SPEC_DRUID_BALANCE;
}
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 9aaa1827d95..1f02b7d284b 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -222,7 +222,7 @@ SpellInfo const* ScriptedAI::SelectSpell(Unit* target, uint32 school, uint32 mec
return nullptr;
//Silenced so we can't cast
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED))
+ if (me->HasUnitFlag(UNIT_FLAG_SILENCED))
return nullptr;
//Using the extended script system we first create a list of viable spells
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index 1eb60c23961..0128a8d55a1 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -174,7 +174,7 @@ void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/)
{
me->GetMotionMaster()->MoveTargetedHome();
if (HasImmuneToNPCFlags)
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
Reset();
}
}
@@ -497,11 +497,12 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false
}
//disable npcflags
- me->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
+ if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
{
HasImmuneToNPCFlags = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
}
TC_LOG_DEBUG("scripts", "EscortAI started. ActiveAttacker = %d, Run = %d, PlayerGUID = %s", uint32(m_bIsActiveAttacker), uint32(m_bIsRunning), m_uiPlayerGUID.ToString().c_str());
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
index ef2916b9ea3..07294655449 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
@@ -315,7 +315,8 @@ void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Qu
TC_LOG_DEBUG("scripts", "FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle.");
}
- me->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
AddFollowState(STATE_FOLLOW_INPROGRESS);
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 57bd1da5d83..acd2f794bca 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -126,8 +126,8 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker)
if (invoker && invoker->GetTypeId() == TYPEID_PLAYER)
{
- mEscortNPCFlags = me->GetUInt32Value(UNIT_NPC_FLAGS);
- me->SetFlag(UNIT_NPC_FLAGS, 0);
+ mEscortNPCFlags = me->m_unitData->NpcFlags[0];
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
}
GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, nullptr, mCurrentWPID, GetScript()->GetPathId());
@@ -222,7 +222,7 @@ void SmartAI::EndPath(bool fail)
if (mEscortNPCFlags)
{
- me->SetFlag(UNIT_NPC_FLAGS, mEscortNPCFlags);
+ me->SetNpcFlags(NPCFlags(mEscortNPCFlags));
mEscortNPCFlags = 0;
}
@@ -645,7 +645,7 @@ void SmartAI::JustSummoned(Creature* creature)
void SmartAI::AttackStart(Unit* who)
{
// dont allow charmed npcs to act on their own
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ if (me->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
{
if (who && mCanAutoAttack)
me->Attack(who, true);
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index b7ffba57f6a..a43d592d745 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -809,7 +809,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (IsUnit(*itr))
{
- (*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_EMOTESTATE, e.action.emote.emote);
+ (*itr)->ToUnit()->SetEmoteState(Emote(e.action.emote.emote));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EMOTE_STATE. %s set emotestate to %u",
(*itr)->GetGUID().ToString().c_str(), e.action.emote.emote);
}
@@ -830,13 +830,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (!e.action.unitFlag.type)
{
- (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->AddUnitFlag(UnitFlags(e.action.unitFlag.flag));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. %s added flag %u to UNIT_FIELD_FLAGS",
(*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag);
}
else
{
- (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->AddUnitFlag2(UnitFlags2(e.action.unitFlag.flag));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. %s added flag %u to UNIT_FIELD_FLAGS_2",
(*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag);
}
@@ -858,13 +858,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (!e.action.unitFlag.type)
{
- (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->RemoveUnitFlag(UnitFlags(e.action.unitFlag.flag));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. %s removed flag %u to UNIT_FIELD_FLAGS",
(*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag);
}
else
{
- (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->RemoveUnitFlag2(UnitFlags2(e.action.unitFlag.flag));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. %s removed flag %u to UNIT_FIELD_FLAGS_2",
(*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag);
}
@@ -1922,7 +1922,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToUnit()->SetUInt64Value(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->SetNpcFlags(NPCFlags(e.action.unitFlag.flag));
delete targets;
break;
@@ -1935,7 +1935,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToUnit()->SetFlag64(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->AddNpcFlag(NPCFlags(e.action.unitFlag.flag));
delete targets;
break;
@@ -1948,7 +1948,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToUnit()->RemoveFlag64(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->ToUnit()->RemoveNpcFlag(NPCFlags(e.action.unitFlag.flag));
delete targets;
break;
@@ -2132,7 +2132,25 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsUnit(*itr))
- (*itr)->ToUnit()->SetByteFlag(UNIT_FIELD_BYTES_1, e.action.setunitByte.type, e.action.setunitByte.byte1);
+ {
+ switch (e.action.setunitByte.type)
+ {
+ case 0:
+ (*itr)->ToUnit()->SetStandState(UnitStandStateType(e.action.setunitByte.byte1));
+ break;
+ case 1:
+ // pet talent points
+ break;
+ case 2:
+ (*itr)->ToUnit()->AddVisFlags(UnitVisFlags(e.action.setunitByte.byte1));
+ break;
+ case 3:
+ // this is totally wrong to maintain compatibility with existing scripts
+ // TODO: fix with animtier overhaul
+ (*itr)->ToUnit()->SetAnimTier(UnitBytes1_Flags(*(*itr)->ToUnit()->m_unitData->AnimTier | e.action.setunitByte.byte1), false);
+ break;
+ }
+ }
delete targets;
break;
@@ -2145,7 +2163,23 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsUnit(*itr))
- (*itr)->ToUnit()->RemoveByteFlag(UNIT_FIELD_BYTES_1, e.action.delunitByte.type, e.action.delunitByte.byte1);
+ {
+ switch (e.action.setunitByte.type)
+ {
+ case 0:
+ (*itr)->ToUnit()->SetStandState(UNIT_STAND_STATE_STAND);
+ break;
+ case 1:
+ // pet talent points
+ break;
+ case 2:
+ (*itr)->ToUnit()->RemoveVisFlags(UnitVisFlags(e.action.setunitByte.byte1));
+ break;
+ case 3:
+ (*itr)->ToUnit()->SetAnimTier(UnitBytes1_Flags(*(*itr)->ToUnit()->m_unitData->AnimTier & ~e.action.setunitByte.byte1), false);
+ break;
+ }
+ }
delete targets;
break;
@@ -2183,8 +2217,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
- (*itr)->ToUnit()->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->SetDynamicFlags(e.action.unitFlag.flag);
delete targets;
break;
@@ -2196,8 +2229,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
- (*itr)->ToUnit()->SetFlag(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->AddDynamicFlag(e.action.unitFlag.flag);
delete targets;
break;
@@ -2209,8 +2241,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
- (*itr)->ToUnit()->RemoveFlag(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag);
+ (*itr)->RemoveDynamicFlag(e.action.unitFlag.flag);
delete targets;
break;
@@ -2389,7 +2420,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsGameObject(*itr))
- (*itr)->ToGameObject()->SetUInt32Value(GAMEOBJECT_FLAGS, e.action.goFlag.flag);
+ (*itr)->ToGameObject()->SetFlags(GameObjectFlags(e.action.goFlag.flag));
delete targets;
break;
@@ -2402,7 +2433,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsGameObject(*itr))
- (*itr)->ToGameObject()->SetFlag(GAMEOBJECT_FLAGS, e.action.goFlag.flag);
+ (*itr)->ToGameObject()->AddFlag(GameObjectFlags(e.action.goFlag.flag));
delete targets;
break;
@@ -2415,7 +2446,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsGameObject(*itr))
- (*itr)->ToGameObject()->RemoveFlag(GAMEOBJECT_FLAGS, e.action.goFlag.flag);
+ (*itr)->ToGameObject()->RemoveFlag(GameObjectFlags(e.action.goFlag.flag));
delete targets;
break;
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index f000d4b2476..167bf745555 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -212,13 +212,13 @@ enum RBACPermissions
RBAC_PERM_COMMAND_DEBUG_BG = 304,
RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE = 305,
RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE = 306,
- RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307,
- RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308,
+ RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307, // DEPRECATED: DON'T REUSE
+ RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308, // DEPRECATED: DON'T REUSE
RBAC_PERM_COMMAND_DEBUG_HOSTIL = 309,
RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE = 310,
RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT = 311,
RBAC_PERM_COMMAND_DEBUG_LOS = 312,
- RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313,
+ RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313, // DEPRECATED: DON'T REUSE
RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS = 314,
RBAC_PERM_COMMAND_DEBUG_PLAY = 315,
RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC = 316,
@@ -237,13 +237,13 @@ enum RBACPermissions
RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT = 329,
RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL = 330,
RBAC_PERM_COMMAND_DEBUG_SETAURASTATE = 331,
- RBAC_PERM_COMMAND_DEBUG_SETBIT = 332,
- RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333,
- RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334,
+ RBAC_PERM_COMMAND_DEBUG_SETBIT = 332, // DEPRECATED: DON'T REUSE
+ RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333, // DEPRECATED: DON'T REUSE
+ RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334, // DEPRECATED: DON'T REUSE
RBAC_PERM_COMMAND_DEBUG_SETVID = 335,
RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE = 336,
RBAC_PERM_COMMAND_DEBUG_THREAT = 337,
- RBAC_PERM_COMMAND_DEBUG_UPDATE = 338,
+ RBAC_PERM_COMMAND_DEBUG_UPDATE = 338, // DEPRECATED: DON'T REUSE
RBAC_PERM_COMMAND_DEBUG_UWS = 339,
RBAC_PERM_COMMAND_WPGPS = 340,
RBAC_PERM_COMMAND_DESERTER = 341,
@@ -451,7 +451,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_DEMORPH = 543,
RBAC_PERM_COMMAND_MODIFY = 544,
RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545,
- RBAC_PERM_COMMAND_MODIFY_BIT = 546,
+ RBAC_PERM_COMMAND_MODIFY_BIT = 546, // DEPRECATED: DON'T REUSE
RBAC_PERM_COMMAND_MODIFY_DRUNK = 547,
RBAC_PERM_COMMAND_MODIFY_ENERGY = 548,
RBAC_PERM_COMMAND_MODIFY_FACTION = 549,
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 7b2b726a574..d266f72491a 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -502,7 +502,7 @@ void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievem
//! Since no common attributes were found, (not even in titleRewardFlags field)
//! we explicitly check by ID. Maybe in the future we could move the achievement_reward
//! condition fields to the condition system.
- if (uint32 titleId = reward->TitleId[achievement->ID == 1793 ? _owner->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) : (_owner->GetTeam() == ALLIANCE ? 0 : 1)])
+ if (uint32 titleId = reward->TitleId[achievement->ID == 1793 ? _owner->m_playerData->NativeSex : (_owner->GetTeam() == ALLIANCE ? 0 : 1)])
if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId))
_owner->SetTitle(titleEntry);
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 4422703aef0..e7944aa8e14 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -657,7 +657,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0
SetCriteriaProgress(criteria, referencePlayer->GetReputationMgr().GetVisibleFactionCount(), referencePlayer);
break;
case CRITERIA_TYPE_EARN_HONORABLE_KILL:
- SetCriteriaProgress(criteria, referencePlayer->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS), referencePlayer);
+ SetCriteriaProgress(criteria, referencePlayer->m_activePlayerData->LifetimeHonorableKills, referencePlayer);
break;
case CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
SetCriteriaProgress(criteria, referencePlayer->GetMoney(), referencePlayer, PROGRESS_HIGHEST);
@@ -1445,12 +1445,12 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (area->AreaBit < 0)
continue;
- uint16 playerIndexOffset = uint16(uint32(area->AreaBit) / 32);
+ uint16 playerIndexOffset = uint16(uint32(area->AreaBit) / 64);
if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE)
continue;
- uint32 mask = 1 << (uint32(area->AreaBit) % 32);
- if (referencePlayer->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + playerIndexOffset) & mask)
+ uint64 mask = uint64(1) << (area->AreaBit % 64);
+ if (referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & mask)
{
matchFound = true;
break;
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 6368980db42..f6d0de1a64f 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -718,41 +718,7 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
if (name.empty())
continue;
- // DO NOT use GetItemEnchantMod(proto->RandomProperty) as it may return a result
- // that matches the search but it may not equal item->GetItemRandomPropertyId()
- // used in BuildAuctionInfo() which then causes wrong items to be listed
- int32 propRefID = item->GetItemRandomPropertyId();
-
- if (propRefID)
- {
- // Append the suffix to the name (ie: of the Monkey) if one exists
- // These are found in ItemRandomSuffix.dbc and ItemRandomProperties.dbc
- // even though the DBC names seem misleading
-
- const char* suffix = nullptr;
-
- if (propRefID < 0)
- {
- const ItemRandomSuffixEntry* itemRandSuffix = sItemRandomSuffixStore.LookupEntry(-propRefID);
- if (itemRandSuffix)
- suffix = itemRandSuffix->Name->Str[player->GetSession()->GetSessionDbcLocale()];
- }
- else
- {
- const ItemRandomPropertiesEntry* itemRandProp = sItemRandomPropertiesStore.LookupEntry(propRefID);
- if (itemRandProp)
- suffix = itemRandProp->Name->Str[player->GetSession()->GetSessionDbcLocale()];
- }
-
- // dbc local name
- if (suffix)
- {
- // Append the suffix (ie: of the Monkey) to the name using localization
- // or default enUS if localization is invalid
- name += ' ';
- name += suffix;
- }
- }
+ // TODO: Generate name using ItemNameDescription
// Perform the search (with or without suffix)
if (!Utf8FitTo(name, searchedname))
@@ -852,9 +818,9 @@ void AuctionEntry::BuildAuctionInfo(std::vector<WorldPackets::AuctionHouse::Auct
}
uint8 i = 0;
- for (ItemDynamicFieldGems const& gemData : item->GetGems())
+ for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
WorldPackets::Item::ItemGemData gem;
gem.Slot = i;
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index 27b97e0eca6..02ac7c2ffe1 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -444,7 +444,7 @@ void BattlePetMgr::SummonPet(ObjectGuid guid)
return;
// TODO: set proper CreatureID for spell DEFAULT_SUMMON_BATTLE_PET_SPELL (default EffectMiscValueA is 40721 - Murkimus the Gladiator)
- _owner->GetPlayer()->SetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, guid);
+ _owner->GetPlayer()->SetSummonedBattlePetGUID(guid);
_owner->GetPlayer()->CastSpell(_owner->GetPlayer(), speciesEntry->SummonSpellID ? speciesEntry->SummonSpellID : uint32(DEFAULT_SUMMON_BATTLE_PET_SPELL));
// TODO: set pet level, quality... update fields
@@ -454,10 +454,10 @@ void BattlePetMgr::DismissPet()
{
Player* ownerPlayer = _owner->GetPlayer();
Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*ownerPlayer, ownerPlayer->GetCritterGUID());
- if (pet && ownerPlayer->GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) == pet->GetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID))
+ if (pet && *ownerPlayer->m_activePlayerData->SummonedBattlePetGUID == pet->GetBattlePetCompanionGUID())
{
pet->DespawnOrUnsummon();
- ownerPlayer->SetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, ObjectGuid::Empty);
+ ownerPlayer->SetSummonedBattlePetGUID(ObjectGuid::Empty);
}
}
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 39aced653c8..0bd37951c5a 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -493,7 +493,7 @@ void Battlefield::HideNpc(Creature* creature)
{
creature->CombatStop();
creature->SetReactState(REACT_PASSIVE);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
creature->DisappearAndDie();
creature->SetVisible(false);
}
@@ -501,14 +501,14 @@ void Battlefield::HideNpc(Creature* creature)
void Battlefield::ShowNpc(Creature* creature, bool aggressive)
{
creature->SetVisible(true);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ creature->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
if (!creature->IsAlive())
creature->Respawn(true);
if (aggressive)
creature->SetReactState(REACT_AGGRESSIVE);
else
{
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->SetReactState(REACT_PASSIVE);
}
}
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index c5c46a15377..3d87b2aa66e 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -567,7 +567,7 @@ void BattlefieldWG::OnBattleStart()
// Update faction of relic, only attacker can click on
relic->SetFaction(WintergraspFaction[GetAttackerTeam()]);
// Set in use (not allow to click on before last door is broken)
- relic->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE);
+ relic->AddFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE));
m_titansRelicGUID = relic->GetGUID();
}
else
@@ -1476,7 +1476,7 @@ void BfWGGameObjectBuilding::Destroyed()
go->SetGoState(GO_STATE_ACTIVE);
_wg->SetRelicInteractible(true);
if (_wg->GetRelic())
- _wg->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE);
+ _wg->GetRelic()->RemoveFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE));
else
TC_LOG_ERROR("bg.battlefield.wg", "Titan Relic not found.");
break;
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index eaa973abec7..20613f3f840 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -491,7 +491,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
player->SendDirectMessage(battlefieldStatus.Write());
// Correctly display EnemyUnitFrame
- player->SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, player->GetBGTeam());
+ player->SetArenaFaction(player->GetBGTeam());
player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
player->ResetAllPowers();
@@ -1034,7 +1034,7 @@ void Battleground::TeleportPlayerToExploitLocation(Player* player)
void Battleground::AddPlayer(Player* player)
{
// remove afk from player
- if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK))
+ if (player->isAFK())
player->ToggleAFK();
// score struct must be created in inherited class
@@ -1044,7 +1044,7 @@ void Battleground::AddPlayer(Player* player)
BattlegroundPlayer bp;
bp.OfflineRemoveTime = 0;
bp.Team = team;
- bp.ActiveSpec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
+ bp.ActiveSpec = player->GetPrimarySpecialization();
// Add to list/maps
m_Players[player->GetGUID()] = bp;
@@ -1288,7 +1288,7 @@ void Battleground::BuildPvPLogDataPacket(WorldPackets::Battleground::PVPLogData&
if (Player* player = ObjectAccessor::GetPlayer(GetBgMap(), playerData.PlayerGUID))
{
playerData.IsInWorld = true;
- playerData.PrimaryTalentTree = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
+ playerData.PrimaryTalentTree = player->GetPrimarySpecialization();
playerData.Sex = player->getGender();
playerData.Race = player->getRace();
playerData.Class = player->getClass();
@@ -1618,9 +1618,6 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float
// casting visual effect
creature->SetChannelSpellId(SPELL_SPIRIT_HEAL_CHANNEL);
creature->SetChannelSpellXSpellVisualId(VISUAL_SPIRIT_HEAL_CHANNEL);
- // correct cast speed
- creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
- creature->SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f);
//creature->CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true);
return true;
}
@@ -1736,7 +1733,7 @@ void Battleground::HandleKillPlayer(Player* victim, Player* killer)
if (!isArena())
{
// To be able to remove insignia -- ONLY IN Battlegrounds
- victim->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ victim->AddUnitFlag(UNIT_FLAG_SKINNABLE);
RewardXPAtKill(killer, victim);
}
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index 4ec9c553bb1..3d343d2364c 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -137,9 +137,9 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
{
if (siege->IsAlive())
{
- if (siege->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_CANNOT_SWIM|UNIT_FLAG_IMMUNE_TO_PC))
+ if (siege->HasUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_CANNOT_SWIM | UNIT_FLAG_IMMUNE_TO_PC)))
// following sniffs the vehicle always has UNIT_FLAG_CANNOT_SWIM
- siege->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_IMMUNE_TO_PC);
+ siege->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
else
siege->SetHealth(siege->GetMaxHealth());
}
@@ -182,7 +182,7 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
DelObject(nodePoint[i].gameobject_type);
AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
- GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
+ GetBGObject(nodePoint[i].gameobject_type)->SetFaction(nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
UpdateNodeWorldState(&nodePoint[i]);
HandleCapturedNodes(&nodePoint[i], false);
@@ -234,7 +234,7 @@ void BattlegroundIC::StartingEventOpenDoors()
DoorOpen(BG_IC_GO_DOODAD_VR_PORTCULLIS01_2);
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i)
- GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i)
GetBGObject(BG_IC_TeleporterEffects[i].type)->SetGoState(GO_STATE_ACTIVE);
@@ -485,7 +485,7 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
EndBattleground(0);
}
- GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
+ GetBGObject(nodePoint[i].gameobject_type)->SetFaction(nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
UpdateNodeWorldState(&nodePoint[i]);
// we dont need iterating if we are here
@@ -575,7 +575,7 @@ void BattlegroundIC::HandleContestedNodes(ICNodePoint* node)
for (Creature* cannon : cannons)
{
cannon->GetVehicleKit()->RemoveAllPassengers();
- cannon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ cannon->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
}
else if (node->nodeType == NODE_TYPE_WORKSHOP)
@@ -607,7 +607,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* node, bool recapture)
gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f);
for (Creature* cannon : cannons)
- cannon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ cannon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u)
{
@@ -762,7 +762,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* node, bool recapture)
if (Creature* siegeEngine = GetBGCreature(siegeType))
{
- siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_CANNOT_SWIM|UNIT_FLAG_IMMUNE_TO_PC);
+ siegeEngine->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_CANNOT_SWIM | UNIT_FLAG_IMMUNE_TO_PC));
siegeEngine->setFaction(BG_IC_Factions[(node->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
}
@@ -801,12 +801,12 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
if (player->GetTeamId() == TEAM_ALLIANCE)
{
DoorOpen(BG_IC_GO_HORDE_KEEP_PORTCULLIS);
- GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
else
{
DoorOpen(BG_IC_GO_DOODAD_PORTCULLISACTIVE02);
- GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
uint32 textId;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 9b14fa92c3f..36ddedb1f32 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -674,9 +674,9 @@ void BattlegroundSA::DemolisherStartState(bool start)
if (Creature* dem = GetBGCreature(i))
{
if (start)
- dem->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ dem->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
else
- dem->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ dem->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
}
}
}
@@ -758,9 +758,9 @@ void BattlegroundSA::UpdateObjectInteractionFlags(uint32 objectId)
if (GameObject* go = GetBGObject(objectId))
{
if (CanInteractWithObject(objectId))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
else
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
}
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 912d273b136..adcd5f0543a 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -2494,7 +2494,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->Gender >= 0 && player->getGender() != condition->Gender)
return false;
- if (condition->NativeGender >= 0 && player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) != condition->NativeGender)
+ if (condition->NativeGender >= 0 && player->m_playerData->NativeSex != condition->NativeGender)
return false;
if (condition->PowerType != -1 && condition->PowerTypeComp)
@@ -2506,7 +2506,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->ChrSpecializationIndex >= 0 || condition->ChrSpecializationRole >= 0)
{
- if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)))
+ if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetPrimarySpecialization()))
{
if (condition->ChrSpecializationIndex >= 0 && spec->OrderIndex != condition->ChrSpecializationIndex)
return false;
@@ -2590,10 +2590,10 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
}
}
- if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & player->GetUInt32Value(ACTIVE_PLAYER_FIELD_PVP_MEDALS)))
+ if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & *player->m_activePlayerData->PvpMedals))
return false;
- if (condition->LifetimeMaxPVPRank && player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK) != condition->LifetimeMaxPVPRank)
+ if (condition->LifetimeMaxPVPRank && player->m_activePlayerData->LifetimeMaxRank != condition->LifetimeMaxPVPRank)
return false;
if (condition->MovementFlags[0] && !(player->GetUnitMovementFlags() & condition->MovementFlags[0]))
@@ -2647,7 +2647,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
results.fill(true);
for (std::size_t i = 0; i < PrevQuestCount::value; ++i)
if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(condition->PrevQuestID[i]))
- results[i] = (player->GetUInt32Value(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5)) & (1 << ((questBit - 1) & 31))) != 0;
+ results[i] = (player->m_activePlayerData->QuestCompleted[((questBit - 1) >> 6)] & (UI64LIT(1) << ((questBit - 1) & 63))) != 0;
if (!PlayerConditionLogic(condition->PrevQuestLogic, results))
return false;
@@ -2731,7 +2731,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
for (std::size_t i = 0; i < ExploredCount::value; ++i)
{
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(condition->Explored[i]))
- if (area->AreaBit != -1 && !(player->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + area->AreaBit / 32) & (1 << (uint32(area->AreaBit) % 32))))
+ if (area->AreaBit != -1 && !(player->m_activePlayerData->ExploredZones[area->AreaBit / 64] & (UI64LIT(1) << (uint32(area->AreaBit) % 64))))
return false;
}
}
@@ -2839,16 +2839,16 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
}
}
- if (condition->MinAvgItemLevel && int32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL))) < condition->MinAvgItemLevel)
+ if (condition->MinAvgItemLevel && int32(std::floor(player->m_playerData->AvgItemLevel[0])) < condition->MinAvgItemLevel)
return false;
- if (condition->MaxAvgItemLevel && int32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL))) > condition->MaxAvgItemLevel)
+ if (condition->MaxAvgItemLevel && int32(std::floor(player->m_playerData->AvgItemLevel[0])) > condition->MaxAvgItemLevel)
return false;
- if (condition->MinAvgEquippedItemLevel && uint32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL + 1))) < condition->MinAvgEquippedItemLevel)
+ if (condition->MinAvgEquippedItemLevel && uint32(std::floor(player->m_playerData->AvgItemLevel[1])) < condition->MinAvgEquippedItemLevel)
return false;
- if (condition->MaxAvgEquippedItemLevel && uint32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL + 1))) > condition->MaxAvgEquippedItemLevel)
+ if (condition->MaxAvgEquippedItemLevel && uint32(std::floor(player->m_playerData->AvgItemLevel[1])) > condition->MaxAvgEquippedItemLevel)
return false;
if (condition->ModifierTreeID && !player->ModifierTreeSatisfied(condition->ModifierTreeID))
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 74e53d79887..09ff125f3a6 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -394,6 +394,7 @@ namespace
std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes;
std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems;
RulesetItemUpgradeContainer _rulesetItemUpgrade;
+ std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine;
std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill;
SkillRaceClassInfoContainer _skillRaceClassInfoBySkill;
SpecializationSpellsContainer _specializationSpellsBySpec;
@@ -1026,6 +1027,10 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
for (RulesetItemUpgradeEntry const* rulesetItemUpgrade : sRulesetItemUpgradeStore)
_rulesetItemUpgrade[rulesetItemUpgrade->ItemID] = rulesetItemUpgrade->ItemUpgradeID;
+ for (SkillLineEntry const* skill : sSkillLineStore)
+ if (skill->ParentSkillLineID)
+ _skillLinesByParentSkillLine[skill->ParentSkillLineID].push_back(skill);
+
for (SkillLineAbilityEntry const* skillLineAbility : sSkillLineAbilityStore)
_skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility);
@@ -2329,6 +2334,11 @@ uint32 DB2Manager::GetRulesetItemUpgrade(uint32 itemId) const
return 0;
}
+std::vector<SkillLineEntry const*> const* DB2Manager::GetSkillLinesForParentSkill(uint32 parentSkillId) const
+{
+ return Trinity::Containers::MapGetValuePtr(_skillLinesByParentSkillLine, parentSkillId);
+}
+
std::vector<SkillLineAbilityEntry const*> const* DB2Manager::GetSkillLineAbilitiesBySkill(uint32 skillId) const
{
return Trinity::Containers::MapGetValuePtr(_skillLineAbilitiesBySkillupSkill, skillId);
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index 2960d4fb185..158ecb9de15 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -328,6 +328,7 @@ public:
std::vector<RewardPackXCurrencyTypeEntry const*> const* GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const;
std::vector<RewardPackXItemEntry const*> const* GetRewardPackItemsByRewardID(uint32 rewardPackID) const;
uint32 GetRulesetItemUpgrade(uint32 itemId) const;
+ std::vector<SkillLineEntry const*> const* GetSkillLinesForParentSkill(uint32 parentSkillId) const;
std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const;
SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_);
std::vector<SpecializationSpellsEntry const*> const* GetSpecializationSpells(uint32 specId) const;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 64ac5d0694e..1632fce9e6d 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -48,9 +48,6 @@ AreaTrigger::AreaTrigger() : WorldObject(false), MapObject(), _aurEff(nullptr),
m_updateFlag.Stationary = true;
m_updateFlag.AreaTrigger = true;
-
- m_valuesCount = AREATRIGGER_END;
- _dynamicValuesCount = AREATRIGGER_DYNAMIC_END;
}
AreaTrigger::~AreaTrigger()
@@ -114,19 +111,33 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn
SetObjectScale(1.0f);
- SetGuidValue(AREATRIGGER_CASTER, caster->GetGUID());
- SetGuidValue(AREATRIGGER_CREATING_EFFECT_GUID, castId);
+ auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::Caster), caster->GetGUID());
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::CreatingEffectGUID), castId);
- SetUInt32Value(AREATRIGGER_SPELLID, spell->Id);
- SetUInt32Value(AREATRIGGER_SPELL_FOR_VISUALS, spell->Id);
- SetUInt32Value(AREATRIGGER_SPELL_X_SPELL_VISUAL_ID, spellXSpellVisualId);
- SetUInt32Value(AREATRIGGER_TIME_TO_TARGET_SCALE, GetMiscTemplate()->TimeToTargetScale != 0 ? GetMiscTemplate()->TimeToTargetScale : GetUInt32Value(AREATRIGGER_DURATION));
- SetFloatValue(AREATRIGGER_BOUNDS_RADIUS_2D, GetTemplate()->MaxSearchRadius);
- SetUInt32Value(AREATRIGGER_DECAL_PROPERTIES_ID, GetMiscTemplate()->DecalPropertiesId);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellID), spell->Id);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellForVisuals), spell->Id);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellXSpellVisualID), spellXSpellVisualId);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTargetScale), GetMiscTemplate()->TimeToTargetScale != 0 ? GetMiscTemplate()->TimeToTargetScale : *m_areaTriggerData->Duration);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetTemplate()->MaxSearchRadius);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), GetMiscTemplate()->DecalPropertiesId);
- for (uint8 scaleCurveIndex = 0; scaleCurveIndex < MAX_AREATRIGGER_SCALE; ++scaleCurveIndex)
- if (GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex])
- SetUInt32Value(AREATRIGGER_EXTRA_SCALE_CURVE + scaleCurveIndex, GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex]);
+ if (GetMiscTemplate()->ExtraScale.Data.Structured.StartTimeOffset)
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::StartTimeOffset), GetMiscTemplate()->ExtraScale.Data.Structured.StartTimeOffset);
+ if (GetMiscTemplate()->ExtraScale.Data.Structured.Points[0] || GetMiscTemplate()->ExtraScale.Data.Structured.Points[1])
+ {
+ Position point(GetMiscTemplate()->ExtraScale.Data.Structured.Points[0], GetMiscTemplate()->ExtraScale.Data.Structured.Points[1]);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::Points, 0), point);
+ }
+ if (GetMiscTemplate()->ExtraScale.Data.Structured.Points[2] || GetMiscTemplate()->ExtraScale.Data.Structured.Points[3])
+ {
+ Position point(GetMiscTemplate()->ExtraScale.Data.Structured.Points[2], GetMiscTemplate()->ExtraScale.Data.Structured.Points[3]);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::Points, 1), point);
+ }
+ if (GetMiscTemplate()->ExtraScale.Data.Raw[5])
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::ParameterCurve), GetMiscTemplate()->ExtraScale.Data.Raw[5]);
+ if (GetMiscTemplate()->ExtraScale.Data.Structured.OverrideActive)
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::OverrideActive), GetMiscTemplate()->ExtraScale.Data.Structured.OverrideActive);
PhasingHandler::InheritPhaseShift(this, caster);
@@ -137,7 +148,7 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn
UpdateShape();
- uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : GetUInt32Value(AREATRIGGER_DURATION);
+ uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : *m_areaTriggerData->Duration;
if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT))
{
@@ -248,7 +259,7 @@ void AreaTrigger::SetDuration(int32 newDuration)
_totalDuration = newDuration;
// negative duration (permanent areatrigger) sent as 0
- SetUInt32Value(AREATRIGGER_DURATION, std::max(newDuration, 0));
+ SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Duration), std::max(newDuration, 0));
}
void AreaTrigger::_UpdateDuration(int32 newDuration)
@@ -256,7 +267,8 @@ void AreaTrigger::_UpdateDuration(int32 newDuration)
_duration = newDuration;
// should be sent in object create packets only
- m_uint32Values[AREATRIGGER_DURATION] = _duration;
+ SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Duration), _duration);
+ const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::Duration);
}
float AreaTrigger::GetProgress() const
@@ -632,7 +644,8 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 tim
_spline->initLengths();
// should be sent in object create packets only
- m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget;
+ SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
+ const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::TimeToTarget);
if (IsInWorld())
{
@@ -668,7 +681,8 @@ void AreaTrigger::InitCircularMovement(AreaTriggerCircularMovementInfo const& cm
ASSERT(cmi.Center.is_initialized() || cmi.PathTarget.is_initialized());
// should be sent in object create packets only
- m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget;
+ SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
+ const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::TimeToTarget);
_circularMovementInfo = cmi;
@@ -849,3 +863,36 @@ void AreaTrigger::AI_Destroy()
{
_ai.reset();
}
+
+void AreaTrigger::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_areaTriggerData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void AreaTrigger::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_AREATRIGGER))
+ m_areaTriggerData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void AreaTrigger::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&AreaTrigger::m_areaTriggerData);
+ Object::ClearUpdateMask(remove);
+}
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index ceb22ebd74a..732e0c4eb35 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -44,6 +44,10 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
AreaTrigger();
~AreaTrigger();
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
+
void AddToWorld() override;
void RemoveFromWorld() override;
@@ -60,11 +64,11 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
void Update(uint32 diff) override;
void Remove();
bool IsRemoved() const { return _isRemoved; }
- uint32 GetSpellId() const { return GetUInt32Value(AREATRIGGER_SPELLID); }
+ uint32 GetSpellId() const { return m_areaTriggerData->SpellID; }
AuraEffect const* GetAuraEffect() const { return _aurEff; }
uint32 GetTimeSinceCreated() const { return _timeSinceCreated; }
- uint32 GetTimeToTarget() const { return GetUInt32Value(AREATRIGGER_TIME_TO_TARGET); }
- uint32 GetTimeToTargetScale() const { return GetUInt32Value(AREATRIGGER_TIME_TO_TARGET_SCALE); }
+ uint32 GetTimeToTarget() const { return m_areaTriggerData->TimeToTarget; }
+ uint32 GetTimeToTargetScale() const { return m_areaTriggerData->TimeToTargetScale; }
int32 GetDuration() const { return _duration; }
int32 GetTotalDuration() const { return _totalDuration; }
void SetDuration(int32 newDuration);
@@ -76,7 +80,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
AreaTriggerTemplate const* GetTemplate() const;
uint32 GetScriptId() const;
- ObjectGuid const& GetCasterGuid() const { return GetGuidValue(AREATRIGGER_CASTER); }
+ ObjectGuid const& GetCasterGuid() const { return m_areaTriggerData->Caster; }
Unit* GetCaster() const;
Unit* GetTarget() const;
@@ -94,6 +98,8 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
void UpdateShape();
+ UF::UpdateField<UF::AreaTriggerData, 0, TYPEID_AREATRIGGER> m_areaTriggerData;
+
protected:
void _UpdateDuration(int32 newDuration);
float GetProgress() const;
diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp
index 1f898fb1700..e1996a4c9e6 100644
--- a/src/server/game/Entities/Conversation/Conversation.cpp
+++ b/src/server/game/Entities/Conversation/Conversation.cpp
@@ -32,9 +32,6 @@ Conversation::Conversation() : WorldObject(false), _duration(0), _textureKitId(0
m_updateFlag.Stationary = true;
m_updateFlag.Conversation = true;
-
- m_valuesCount = CONVERSATION_END;
- _dynamicValuesCount = CONVERSATION_DYNAMIC_END;
}
Conversation::~Conversation()
@@ -122,7 +119,7 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
SetEntry(conversationEntry);
SetObjectScale(1.0f);
- SetUInt32Value(CONVERSATION_LAST_LINE_END_TIME, conversationTemplate->LastLineEndTime);
+ SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::LastLineEndTime), conversationTemplate->LastLineEndTime);
_duration = conversationTemplate->LastLineEndTime;
_textureKitId = conversationTemplate->TextureKitId;
@@ -130,11 +127,10 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
{
if (ConversationActorTemplate const* actor = conversationTemplate->Actors[actorIndex])
{
- ConversationDynamicFieldActor actorField;
- actorField.ActorTemplate.CreatureId = actor->CreatureId;
- actorField.ActorTemplate.CreatureModelId = actor->CreatureModelId;
- actorField.Type = ConversationDynamicFieldActor::ActorType::CreatureActor;
- SetDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIndex, &actorField);
+ UF::ConversationActor& actorField = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Actors));
+ actorField.CreatureID = actor->CreatureId;
+ actorField.CreatureDisplayInfoID = actor->CreatureModelId;
+ actorField.Type = AsUnderlyingType(ActorType::CreatureActor);
}
}
@@ -152,19 +148,28 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
}
std::set<uint16> actorIndices;
+ std::vector<UF::ConversationLine> lines;
for (ConversationLineTemplate const* line : conversationTemplate->Lines)
{
actorIndices.insert(line->ActorIdx);
- AddDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_LINES, line);
+ lines.emplace_back();
+ UF::ConversationLine& lineField = lines.back();
+ lineField.ConversationLineID = line->Id;
+ lineField.StartTime = line->StartTime;
+ lineField.UiCameraID = line->UiCameraID;
+ lineField.ActorIndex = line->ActorIdx;
+ lineField.Flags = line->Flags;
}
+ SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Lines), std::move(lines));
+
sScriptMgr->OnConversationCreate(this, creator);
// All actors need to be set
for (uint16 actorIndex : actorIndices)
{
- ConversationDynamicFieldActor const* actor = GetDynamicStructuredValue<ConversationDynamicFieldActor>(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIndex);
- if (!actor || actor->IsEmpty())
+ UF::ConversationActor const* actor = actorIndex < m_conversationData->Actors.size() ? &m_conversationData->Actors[actorIndex] : nullptr;
+ if (!actor || (!actor->CreatureID && actor->ActorGUID.IsEmpty()))
{
TC_LOG_ERROR("entities.conversation", "Failed to create conversation (Id: %u) due to missing actor (Idx: %u).", conversationEntry, actorIndex);
return false;
@@ -179,10 +184,9 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
void Conversation::AddActor(ObjectGuid const& actorGuid, uint16 actorIdx)
{
- ConversationDynamicFieldActor actorField;
- actorField.ActorGuid = actorGuid;
- actorField.Type = ConversationDynamicFieldActor::ActorType::WorldObjectActor;
- SetDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIdx, &actorField);
+ auto actorField = m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Actors, actorIdx);
+ SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::ActorGUID), actorGuid);
+ SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Type), AsUnderlyingType(ActorType::WorldObjectActor));
}
void Conversation::AddParticipant(ObjectGuid const& participantGuid)
@@ -194,3 +198,36 @@ uint32 Conversation::GetScriptId() const
{
return sConversationDataStore->GetConversationTemplate(GetEntry())->ScriptId;
}
+
+void Conversation::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_conversationData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Conversation::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_CONVERSATION))
+ m_conversationData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Conversation::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Conversation::m_conversationData);
+ Object::ClearUpdateMask(remove);
+}
diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h
index e91fa236e9c..868a344b47d 100644
--- a/src/server/game/Entities/Conversation/Conversation.h
+++ b/src/server/game/Entities/Conversation/Conversation.h
@@ -25,44 +25,13 @@
class Unit;
class SpellInfo;
-#pragma pack(push, 1)
-struct ConversationDynamicFieldActor
+namespace UF
{
- ConversationDynamicFieldActor() : Type(0), Padding(0)
+ inline bool operator==(ConversationLine const& left, ConversationLine const& right)
{
- memset(Raw.Data, 0, sizeof(Raw.Data));
+ return left.ConversationLineID == right.ConversationLineID;
}
-
- bool IsEmpty() const
- {
- return ActorGuid.IsEmpty(); // this one is good enough
- }
-
- enum ActorType
- {
- WorldObjectActor = 0,
- CreatureActor = 1
- };
-
- union
- {
- ObjectGuid ActorGuid;
- struct
- {
- uint32 CreatureId;
- uint32 CreatureModelId;
- } ActorTemplate;
-
- struct
- {
- uint32 Data[4];
- } Raw;
- };
-
- uint32 Type;
- uint32 Padding;
-};
-#pragma pack(pop)
+}
class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversation>
{
@@ -70,6 +39,10 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat
Conversation();
~Conversation();
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
+
void AddToWorld() override;
void RemoveFromWorld() override;
@@ -95,6 +68,14 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat
uint32 GetScriptId() const;
+ UF::UpdateField<UF::ConversationData, 0, TYPEID_CONVERSATION> m_conversationData;
+
+ enum class ActorType
+ {
+ WorldObjectActor = 0,
+ CreatureActor = 1
+ };
+
private:
Position _stationaryPosition;
ObjectGuid _creatorGuid;
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 9a2d7750f8a..2934d3cda98 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -35,9 +35,6 @@ Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type
m_updateFlag.Stationary = true;
- m_valuesCount = CORPSE_END;
- _dynamicValuesCount = CORPSE_DYNAMIC_END;
-
m_time = time(NULL);
lootForBody = false;
@@ -86,7 +83,7 @@ bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner)
Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(owner->GetMapId(), 0, guidlow));
SetObjectScale(1.0f);
- SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID());
+ SetOwnerGUID(owner->GetGUID());
_cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
@@ -101,6 +98,13 @@ void Corpse::SaveToDB()
SQLTransaction trans = CharacterDatabase.BeginTransaction();
DeleteFromDB(trans);
+ std::ostringstream items;
+ for (uint16 index = 0; index < EQUIPMENT_SLOT_END; ++index)
+ items << m_corpseData->Items[index] << ' ';
+
+ uint32 bytes1 = (uint32(*m_corpseData->RaceID) << 8) | (uint32(*m_corpseData->Sex) << 16) | (uint32(*m_corpseData->SkinID) << 24);
+ uint32 bytes2 = (uint32(*m_corpseData->FaceID)) | (uint32(*m_corpseData->HairStyleID) << 8) | (uint32(*m_corpseData->HairColorID) << 16) | (uint32(*m_corpseData->FacialHairStyleID) << 24);
+
uint16 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE);
stmt->setUInt64(index++, GetOwnerGUID().GetCounter()); // guid
@@ -109,12 +113,12 @@ void Corpse::SaveToDB()
stmt->setFloat (index++, GetPositionZ()); // posZ
stmt->setFloat (index++, GetOrientation()); // orientation
stmt->setUInt16(index++, GetMapId()); // mapId
- stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_DISPLAY_ID)); // displayId
- stmt->setString(index++, _ConcatFields(CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END)); // itemCache
- stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_1)); // bytes1
- stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_2)); // bytes2
- stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_FLAGS)); // flags
- stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS)); // dynFlags
+ stmt->setUInt32(index++, m_corpseData->DisplayID); // displayId
+ stmt->setString(index++, items.str()); // itemCache
+ stmt->setUInt32(index++, bytes1); // bytes1
+ stmt->setUInt32(index++, bytes2); // bytes2
+ stmt->setUInt8 (index++, m_corpseData->Flags); // flags
+ stmt->setUInt8 (index++, m_corpseData->DynamicFlags); // dynFlags
stmt->setUInt32(index++, uint32(m_time)); // time
stmt->setUInt8 (index++, GetType()); // corpseType
stmt->setUInt32(index++, GetInstanceId()); // instanceId
@@ -162,15 +166,25 @@ bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields)
Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(mapId, 0, guid));
SetObjectScale(1.0f);
- SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32());
- _LoadIntoDataField(fields[6].GetString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END);
- SetUInt32Value(CORPSE_FIELD_BYTES_1, fields[7].GetUInt32());
- SetUInt32Value(CORPSE_FIELD_BYTES_2, fields[8].GetUInt32());
- SetUInt32Value(CORPSE_FIELD_FLAGS, fields[9].GetUInt8());
- SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[10].GetUInt8());
- SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Create<HighGuid::Player>(fields[14].GetUInt64()));
- if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(GetGuidValue(CORPSE_FIELD_OWNER)))
- SetUInt32Value(CORPSE_FIELD_FACTIONTEMPLATE, sChrRacesStore.AssertEntry(characterInfo->Race)->FactionID);
+ SetDisplayId(fields[5].GetUInt32());
+ Tokenizer items(fields[6].GetString(), ' ', EQUIPMENT_SLOT_END);
+ if (items.size() == EQUIPMENT_SLOT_END)
+ for (uint32 index = 0; index < EQUIPMENT_SLOT_END; ++index)
+ SetItem(index, atoul(items[index]));
+
+ uint32 bytes1 = fields[7].GetUInt32();
+ uint32 bytes2 = fields[8].GetUInt32();
+ SetRace((bytes1 >> 8) & 0xFF);
+ SetSex((bytes1 >> 16) & 0xFF);
+ SetSkin((bytes1 >> 24) & 0xFF);
+ SetFace(bytes2 & 0xFF);
+ SetHairStyle((bytes2 >> 8) & 0xFF);
+ SetHairColor((bytes2 >> 16) & 0xFF);
+ SetFacialHairStyle((bytes2 >> 24) & 0xFF);
+ SetFlags(fields[9].GetUInt8());
+ SetCorpseDynamicFlags(CorpseDynFlags(fields[10].GetUInt8()));
+ SetOwnerGUID(ObjectGuid::Create<HighGuid::Player>(fields[14].GetUInt64()));
+ SetFactionTemplate(sChrRacesStore.AssertEntry(m_corpseData->RaceID)->FactionID);
m_time = time_t(fields[11].GetUInt32());
@@ -203,3 +217,36 @@ bool Corpse::IsExpired(time_t t) const
else
return m_time < t - 3 * DAY;
}
+
+void Corpse::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_corpseData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Corpse::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_CORPSE))
+ m_corpseData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Corpse::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Corpse::m_corpseData);
+ Object::ClearUpdateMask(remove);
+}
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index 58bfab0b555..8abaeae48a3 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -53,6 +53,10 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse>
explicit Corpse(CorpseType type = CORPSE_BONES);
~Corpse();
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
+
void AddToWorld() override;
void RemoveFromWorld() override;
@@ -65,7 +69,25 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse>
void DeleteFromDB(SQLTransaction& trans);
static void DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans);
- ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); }
+ void AddCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
+ void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
+ void SetCorpseDynamicFlags(CorpseDynFlags dynamicFlags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
+ ObjectGuid GetOwnerGUID() const { return m_corpseData->Owner; }
+ void SetOwnerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Owner), owner); }
+ void SetPartyGUID(ObjectGuid partyGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::PartyGUID), partyGuid); }
+ void SetGuildGUID(ObjectGuid guildGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::GuildGUID), guildGuid); }
+ void SetDisplayId(uint32 displayId) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DisplayID), displayId); }
+ void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::RaceID), race); }
+ void SetSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Sex), sex); }
+ void SetSkin(uint8 skin) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::SkinID), skin); }
+ void SetFace(uint8 face) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FaceID), face); }
+ void SetHairStyle(uint8 hairStyle) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::HairStyleID), hairStyle); }
+ void SetHairColor(uint8 hairColor) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::HairColorID), hairColor); }
+ void SetFacialHairStyle(uint8 facialHairStyle) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FacialHairStyleID), facialHairStyle); }
+ void SetFlags(uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Flags), flags); }
+ void SetFactionTemplate(int32 factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FactionTemplate), factionTemplate); }
+ void SetItem(uint32 slot, uint32 item) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Items, slot), item); }
+ void SetCustomDisplayOption(uint32 slot, uint8 customDisplayOption) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::CustomDisplayOption, slot), customDisplayOption); }
time_t const& GetGhostTime() const { return m_time; }
void ResetGhostTime() { m_time = time(NULL); }
@@ -80,6 +102,8 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse>
bool IsExpired(time_t t) const;
+ UF::UpdateField<UF::CorpseData, 0, TYPEID_CORPSE> m_corpseData;
+
private:
CorpseType m_type;
time_t m_time;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 55e93719dc1..937ca3a50e4 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -181,8 +181,6 @@ m_AlreadySearchedAssistance(false), m_regenHealth(true), m_cannotReachTarget(fal
m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_waypointID(0), m_path_id(0), m_formation(nullptr), m_focusSpell(nullptr), m_focusDelay(0), m_shouldReacquireTarget(false), m_suppressedOrientation(0.0f)
{
m_regenTimer = CREATURE_REGEN_INTERVAL;
- m_valuesCount = UNIT_END;
- _dynamicValuesCount = UNIT_DYNAMIC_END;
for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i)
m_spells[i] = 0;
@@ -340,10 +338,10 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
m_creatureInfo = cinfo; // map mode related always
// equal to player Race field, but creature does not have race
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, 0);
+ SetRace(0);
// known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class));
+ SetClass(uint8(cinfo->unit_class));
// Cancel load if no model defined
if (!(cinfo->GetFirstValidModel()))
@@ -362,7 +360,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
SetDisplayId(model.CreatureDisplayID, model.DisplayScale);
SetNativeDisplayId(model.CreatureDisplayID, model.DisplayScale);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender);
+ SetGender(minfo->gender);
// Load creature equipment
if (!data || data->equipmentId == 0)
@@ -375,12 +373,12 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
SetName(normalInfo->Name); // at normal entry always
- SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
- SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_TIME_RATE, 1.0f);
+ SetModCastingSpeed(1.0f);
+ SetModSpellHaste(1.0f);
+ SetModHaste(1.0f);
+ SetModRangedHaste(1.0f);
+ SetModHasteRegen(1.0f);
+ SetModTimeRate(1.0f);
SetSpeedRate(MOVE_WALK, cinfo->speed_walk);
SetSpeedRate(MOVE_RUN, cinfo->speed_run);
@@ -390,7 +388,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
// Will set UNIT_FIELD_BOUNDINGRADIUS, UNIT_FIELD_COMBATREACH and UNIT_FIELD_DISPLAYSCALE
SetObjectScale(cinfo->scale);
- SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight);
+ SetHoverHeight(cinfo->HoverHeight);
// checked at loading
m_defaultMovementType = MovementGeneratorType(cinfo->MovementType);
@@ -423,19 +421,20 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
ObjectMgr::ChooseCreatureFlags(cInfo, npcFlags, unitFlags, unitFlags2, unitFlags3, dynamicFlags, data);
if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT)
- SetUInt64Value(UNIT_NPC_FLAGS, npcFlags | sGameEventMgr->GetNPCFlag(this));
- else
- SetUInt64Value(UNIT_NPC_FLAGS, npcFlags);
+ npcFlags |= sGameEventMgr->GetNPCFlag(this);
+
+ SetNpcFlags(NPCFlags(npcFlags & 0xFFFFFFFF));
+ SetNpcFlags2(NPCFlags2(npcFlags >> 32));
- SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags);
- SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2);
- SetUInt32Value(UNIT_FIELD_FLAGS_3, unitFlags3);
+ SetUnitFlags(UnitFlags(unitFlags));
+ SetUnitFlags2(UnitFlags2(unitFlags2));
+ SetUnitFlags3(UnitFlags3(unitFlags3));
- SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dynamicFlags);
+ SetDynamicFlags(dynamicFlags);
- SetUInt32Value(UNIT_FIELD_STATE_ANIM_ID, sAnimationDataStore.GetNumRows());
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StateAnimID), sAnimationDataStore.GetNumRows());
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
SetBaseAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
SetBaseAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
@@ -478,7 +477,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
// trigger creature is always not selectable and can not be attacked
if (IsTrigger())
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
InitializeReactState();
@@ -566,7 +565,7 @@ void Creature::Update(uint32 diff)
else if (m_corpseRemoveTime <= time(NULL))
{
RemoveCorpse(false);
- TC_LOG_DEBUG("entities.unit", "Removing corpse... %u ", GetUInt32Value(OBJECT_FIELD_ENTRY));
+ TC_LOG_DEBUG("entities.unit", "Removing corpse... %u ", GetEntry());
}
break;
}
@@ -681,7 +680,7 @@ void Creature::Update(uint32 diff)
if (!IsInEvadeMode() && (!bInCombat || IsPolymorphed() || CanNotReachTarget())) // regenerate health if not in combat or if polymorphed
RegenerateHealth();
- if (HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER))
+ if (HasUnitFlag2(UNIT_FLAG2_REGENERATE_POWER))
{
if (GetPowerType() == POWER_ENERGY)
Regenerate(POWER_ENERGY);
@@ -920,7 +919,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float
//! Need to be called after LoadCreaturesAddon - MOVEMENTFLAG_HOVER is set there
if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
{
- z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ z += m_unitData->HoverHeight;
//! Relocate again with updated Z coord
Relocate(x, y, z, ang);
@@ -932,7 +931,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float
{
SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender);
+ SetGender(minfo->gender);
}
LastUsedScriptID = GetScriptId();
@@ -1066,7 +1065,7 @@ void Creature::SetLootRecipient(Unit* unit)
{
m_lootRecipient.Clear();
m_lootRecipientGroup.Clear();
- RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED);
+ RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED);
return;
}
@@ -1081,7 +1080,7 @@ void Creature::SetLootRecipient(Unit* unit)
if (Group* group = player->GetGroup())
m_lootRecipientGroup = group->GetGUID();
- SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED);
+ AddDynamicFlag(UNIT_DYNFLAG_TAPPED);
}
// return true if this creature is tapped by the player or by a member of his group.
@@ -1121,11 +1120,11 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic
CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId);
uint32 displayId = GetNativeDisplayId();
- uint64 npcflag = GetUInt64Value(UNIT_NPC_FLAGS);
- uint32 unitFlags = GetUInt32Value(UNIT_FIELD_FLAGS);
- uint32 unitFlags2 = GetUInt32Value(UNIT_FIELD_FLAGS_2);
- uint32 unitFlags3 = GetUInt32Value(UNIT_FIELD_FLAGS_3);
- uint32 dynamicflags = GetUInt32Value(OBJECT_DYNAMIC_FLAGS);
+ uint64 npcflag = (uint64(m_unitData->NpcFlags[1]) << 32) | m_unitData->NpcFlags[0];
+ uint32 unitFlags = m_unitData->Flags;
+ uint32 unitFlags2 = m_unitData->Flags2;
+ uint32 unitFlags3 = m_unitData->Flags3;
+ uint32 dynamicflags = m_objectData->DynamicFlags;
// check if it's a custom model and if not, use 0 for displayId
CreatureTemplate const* cinfo = GetCreatureTemplate();
@@ -1240,14 +1239,14 @@ void Creature::SelectLevel()
if (HasScalableLevels())
{
- SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN, cInfo->levelScaling->MinLevel);
- SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX, cInfo->levelScaling->MaxLevel);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), cInfo->levelScaling->MinLevel);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), cInfo->levelScaling->MaxLevel);
int8 mindelta = std::min(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin);
int8 maxdelta = std::max(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin);
int8 delta = mindelta == maxdelta ? mindelta : irand(mindelta, maxdelta);
- SetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA, delta);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelDelta), delta);
}
UpdateLevelDependantStats();
@@ -1632,9 +1631,9 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const
return false;
// This set of checks is should be done only for creatures
- if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters
- || (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false
- || (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well
+ if ((HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters
+ || (HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false
+ || (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well
return false;
// Do not attack non-combat pets
@@ -1749,9 +1748,10 @@ void Creature::setDeathState(DeathState s)
DoNotReacquireTarget(); // cancel delayed re-target
SetTarget(ObjectGuid::Empty); // drop target - dead mobs shouldn't ever target things
- SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
- SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); // if creature is mounted on a virtual mount, remove it at death
+ SetMountDisplayId(0); // if creature is mounted on a virtual mount, remove it at death
setActive(false);
@@ -1795,16 +1795,17 @@ void Creature::setDeathState(DeathState s)
ObjectMgr::ChooseCreatureFlags(cInfo, npcFlags, unitFlags, unitFlags2, unitFlags3, dynamicFlags, creatureData);
if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT)
- SetUInt64Value(UNIT_NPC_FLAGS, npcFlags | sGameEventMgr->GetNPCFlag(this));
- else
- SetUInt64Value(UNIT_NPC_FLAGS, npcFlags);
+ npcFlags |= sGameEventMgr->GetNPCFlag(this);
+
+ SetNpcFlags(NPCFlags(npcFlags & 0xFFFFFFFF));
+ SetNpcFlags2(NPCFlags2(npcFlags >> 32));
- SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags);
- SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2);
- SetUInt32Value(UNIT_FIELD_FLAGS_3, unitFlags3);
- SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dynamicFlags);
+ SetUnitFlags(UnitFlags(unitFlags));
+ SetUnitFlags2(UnitFlags2(unitFlags2));
+ SetUnitFlags3(UnitFlags3(unitFlags3));
+ SetDynamicFlags(dynamicFlags);
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool));
}
@@ -1852,7 +1853,7 @@ void Creature::Respawn(bool force)
{
SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender);
+ SetGender(minfo->gender);
}
GetMotionMaster()->InitDefault();
@@ -2020,9 +2021,9 @@ SpellInfo const* Creature::reachWithSpellAttack(Unit* victim)
float dist = GetDistance(victim);
if (dist > range || dist < minrange)
continue;
- if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED))
+ if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasUnitFlag(UNIT_FLAG_SILENCED))
continue;
- if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
+ if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasUnitFlag(UNIT_FLAG_PACIFIED))
continue;
return spellInfo;
}
@@ -2070,9 +2071,9 @@ SpellInfo const* Creature::reachWithSpellCure(Unit* victim)
// continue;
if (dist > range || dist < minrange)
continue;
- if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED))
+ if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasUnitFlag(UNIT_FLAG_SILENCED))
continue;
- if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
+ if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasUnitFlag(UNIT_FLAG_PACIFIED))
continue;
return spellInfo;
}
@@ -2188,7 +2189,7 @@ bool Creature::CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction /
if (IsCivilian())
return false;
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC))
+ if (HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC)))
return false;
// skip fighting creature
@@ -2233,7 +2234,7 @@ bool Creature::_IsTargetAcceptable(const Unit* target) const
if (target->HasUnitState(UNIT_STATE_DIED))
{
// guards can detect fake death
- if (IsGuard() && target->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH))
+ if (IsGuard() && target->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH))
return true;
else
return false;
@@ -2323,18 +2324,16 @@ bool Creature::LoadCreaturesAddon()
// 2 StandFlags
// 3 StandMiscFlags
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, uint8(cainfo->bytes1 & 0xFF));
- //SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, uint8((cainfo->bytes1 >> 8) & 0xFF));
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, 0);
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, uint8((cainfo->bytes1 >> 16) & 0xFF));
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, uint8((cainfo->bytes1 >> 24) & 0xFF));
+ SetStandState(UnitStandStateType(cainfo->bytes1 & 0xFF));
+ SetVisFlags(UnitVisFlags((cainfo->bytes1 >> 16) & 0xFF));
+ SetAnimTier(UnitBytes1_Flags((cainfo->bytes1 >> 24) & 0xFF), false);
//! Suspected correlation between UNIT_FIELD_BYTES_1, offset 3, value 0x2:
//! If no inhabittype_fly (if no MovementFlag_DisableGravity or MovementFlag_CanFly flag found in sniffs)
//! Check using InhabitType as movement flags are assigned dynamically
//! basing on whether the creature is in air or not
//! Set MovementFlag_Hover. Otherwise do nothing.
- if (GetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER) & UNIT_BYTE1_FLAG_HOVER && !(GetCreatureTemplate()->InhabitType & INHABIT_AIR))
+ if (m_unitData->AnimTier & UNIT_BYTE1_FLAG_HOVER && !(GetCreatureTemplate()->InhabitType & INHABIT_AIR))
AddUnitMovementFlag(MOVEMENTFLAG_HOVER);
}
@@ -2345,16 +2344,14 @@ bool Creature::LoadCreaturesAddon()
// 2 PetFlags Pet only, so always 0 for default creature
// 3 ShapeshiftForm Must be determined/set by shapeshift spell/aura
- SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE, uint8(cainfo->bytes2 & 0xFF));
- //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, uint8((cainfo->bytes2 >> 8) & 0xFF));
- //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, uint8((cainfo->bytes2 >> 16) & 0xFF));
- SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, 0);
- //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, uint8((cainfo->bytes2 >> 24) & 0xFF));
- SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, 0);
+ SetSheath(SheathState(cainfo->bytes2 & 0xFF));
+ SetPvpFlags(UNIT_BYTE2_FLAG_NONE);
+ SetPetFlags(UNIT_PET_FLAG_NONE);
+ SetShapeshiftForm(FORM_NONE);
}
if (cainfo->emote != 0)
- SetUInt32Value(UNIT_NPC_EMOTESTATE, cainfo->emote);
+ SetEmoteState(Emote(cainfo->emote));
SetAIAnimKitId(cainfo->aiAnimKit);
SetMovementAnimKitId(cainfo->movementAnimKit);
@@ -2487,7 +2484,7 @@ void Creature::AllLootRemovedFromCorpse()
{
if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient())
if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId))
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ AddUnitFlag(UNIT_FLAG_SKINNABLE);
time_t now = time(NULL);
// Do not reset corpse remove time if corpse is already removed
@@ -2578,12 +2575,12 @@ uint8 Creature::GetLevelForTarget(WorldObject const* target) const
// between UNIT_FIELD_SCALING_LEVEL_MIN and UNIT_FIELD_SCALING_LEVEL_MAX
if (HasScalableLevels())
{
- uint8 targetLevelWithDelta = unitTarget->getLevel() + GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA);
+ uint8 targetLevelWithDelta = unitTarget->getLevel() + m_unitData->ScalingLevelDelta;
if (target->IsPlayer())
- targetLevelWithDelta += target->GetUInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
+ targetLevelWithDelta += target->ToPlayer()->m_activePlayerData->ScalingPlayerLevelDelta;
- return RoundToInterval<uint8>(targetLevelWithDelta, GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN), GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX));
+ return RoundToInterval<uint8>(targetLevelWithDelta, m_unitData->ScalingLevelMin, m_unitData->ScalingLevelMax);
}
}
@@ -2854,8 +2851,8 @@ void Creature::SetObjectScale(float scale)
if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(GetDisplayId()))
{
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * scale);
- SetFloatValue(UNIT_FIELD_COMBATREACH, (IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * scale);
+ SetBoundingRadius((IsPet() ? 1.0f : minfo->bounding_radius) * scale);
+ SetCombatReach((IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * scale);
}
}
@@ -2865,8 +2862,8 @@ void Creature::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/)
if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
{
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale());
- SetFloatValue(UNIT_FIELD_COMBATREACH, (IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * GetObjectScale());
+ SetBoundingRadius((IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale());
+ SetCombatReach((IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * GetObjectScale());
}
}
@@ -2881,7 +2878,7 @@ void Creature::SetTarget(ObjectGuid const& guid)
if (IsFocusing(nullptr, true))
m_suppressedTarget = guid;
else
- SetGuidValue(UNIT_FIELD_TARGET, guid);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid);
}
void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
@@ -2900,7 +2897,7 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
// store pre-cast values for target and orientation (used to later restore)
if (!IsFocusing(nullptr, true))
{ // only overwrite these fields if we aren't transitioning from one spell focus to another
- m_suppressedTarget = GetGuidValue(UNIT_FIELD_TARGET);
+ m_suppressedTarget = GetTarget();
m_suppressedOrientation = GetOrientation();
}
@@ -2908,9 +2905,9 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
// set target, then force send update packet to players if it changed to provide appropriate facing
ObjectGuid newTarget = target ? target->GetGUID() : ObjectGuid::Empty;
- if (GetGuidValue(UNIT_FIELD_TARGET) != newTarget)
+ if (GetTarget() != newTarget)
{
- SetGuidValue(UNIT_FIELD_TARGET, newTarget);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), newTarget);
if ( // here we determine if the (relatively expensive) forced update is worth it, or whether we can afford to wait until the scheduled update tick
( // only require instant update for spells that actually have a visual
@@ -2980,7 +2977,7 @@ void Creature::ReleaseFocus(Spell const* focusSpell, bool withDelay)
if (IsPet()) // player pets do not use delay system
{
- SetGuidValue(UNIT_FIELD_TARGET, m_suppressedTarget);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), m_suppressedTarget);
if (!m_suppressedTarget.IsEmpty())
{
if (WorldObject const* objTarget = ObjectAccessor::GetWorldObject(*this, m_suppressedTarget))
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 2ba13daf39b..5947680d131 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -33,15 +33,12 @@
#include "World.h"
DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject),
- _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _spellXSpellVisualId(0), _isViewpoint(false)
+ _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _isViewpoint(false)
{
m_objectType |= TYPEMASK_DYNAMICOBJECT;
m_objectTypeId = TYPEID_DYNAMICOBJECT;
m_updateFlag.Stationary = true;
-
- m_valuesCount = DYNAMICOBJECT_END;
- _dynamicValuesCount = DYNAMICOBJECT_DYNAMIC_END;
}
DynamicObject::~DynamicObject()
@@ -87,7 +84,6 @@ void DynamicObject::RemoveFromWorld()
bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, SpellInfo const* spell, Position const& pos, float radius, DynamicObjectType type, uint32 spellXSpellVisualId)
{
- _spellXSpellVisualId = spellXSpellVisualId;
SetMap(caster->GetMap());
Relocate(pos);
if (!IsPositionValid())
@@ -101,12 +97,13 @@ bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caste
SetEntry(spell->Id);
SetObjectScale(1.0f);
- SetGuidValue(DYNAMICOBJECT_CASTER, caster->GetGUID());
- SetUInt32Value(DYNAMICOBJECT_TYPE, type);
- SetUInt32Value(DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID, spellXSpellVisualId);
- SetUInt32Value(DYNAMICOBJECT_SPELLID, spell->Id);
- SetFloatValue(DYNAMICOBJECT_RADIUS, radius);
- SetUInt32Value(DYNAMICOBJECT_CASTTIME, getMSTime());
+ auto dynamicObjectData = m_values.ModifyValue(&DynamicObject::m_dynamicObjectData);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Caster), caster->GetGUID());
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Type), type);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellXSpellVisualID), spellXSpellVisualId);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellID), spell->Id);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Radius), radius);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::CastTime), getMSTime());
if (IsWorldObject())
setActive(true); //must before add to map to be put in world container
@@ -248,3 +245,36 @@ SpellInfo const* DynamicObject::GetSpellInfo() const
{
return sSpellMgr->GetSpellInfo(GetSpellId());
}
+
+void DynamicObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_dynamicObjectData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void DynamicObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_DYNAMICOBJECT))
+ m_dynamicObjectData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void DynamicObject::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&DynamicObject::m_dynamicObjectData);
+ Object::ClearUpdateMask(remove);
+}
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h
index 31ab2c0fa8b..269b414272c 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.h
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.h
@@ -39,6 +39,10 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO
DynamicObject(bool isWorldObject);
~DynamicObject();
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
+
void AddToWorld() override;
void RemoveFromWorld() override;
@@ -55,17 +59,18 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO
Unit* GetCaster() const { return _caster; }
void BindToCaster();
void UnbindFromCaster();
- uint32 GetSpellId() const { return GetUInt32Value(DYNAMICOBJECT_SPELLID); }
+ uint32 GetSpellId() const { return m_dynamicObjectData->SpellID; }
SpellInfo const* GetSpellInfo() const;
- ObjectGuid GetCasterGUID() const { return GetGuidValue(DYNAMICOBJECT_CASTER); }
- float GetRadius() const { return GetFloatValue(DYNAMICOBJECT_RADIUS); }
+ ObjectGuid GetCasterGUID() const { return m_dynamicObjectData->Caster; }
+ float GetRadius() const { return m_dynamicObjectData->Radius; }
+
+ UF::UpdateField<UF::DynamicObjectData, 0, TYPEID_DYNAMICOBJECT> m_dynamicObjectData;
protected:
Aura* _aura;
Aura* _removedAura;
Unit* _caster;
int32 _duration; // for non-aura dynobjects
- uint32 _spellXSpellVisualId;
bool _isViewpoint;
};
#endif
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 7f07e5f2930..7a9f826e885 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -40,7 +40,6 @@
#include "ScriptMgr.h"
#include "SpellMgr.h"
#include "Transport.h"
-#include "UpdateFieldFlags.h"
#include "World.h"
#include <G3D/Quat.h>
@@ -64,8 +63,6 @@ GameObject::GameObject() : WorldObject(false), MapObject(),
m_updateFlag.Stationary = true;
m_updateFlag.Rotation = true;
- m_valuesCount = GAMEOBJECT_END;
- _dynamicValuesCount = GAMEOBJECT_DYNAMIC_END;
m_respawnTime = 0;
m_respawnDelayTime = 300;
m_lootState = GO_NOT_READY;
@@ -128,8 +125,7 @@ void GameObject::CleanupsBeforeDelete(bool finalCleanup)
{
WorldObject::CleanupsBeforeDelete(finalCleanup);
- if (m_uint32Values) // field array can be not exist if GameOBject not loaded
- RemoveFromOwner();
+ RemoveFromOwner();
}
void GameObject::RemoveFromOwner()
@@ -267,8 +263,8 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
if (m_goTemplateAddon)
{
- SetUInt32Value(GAMEOBJECT_FACTION, m_goTemplateAddon->faction);
- SetUInt32Value(GAMEOBJECT_FLAGS, m_goTemplateAddon->flags);
+ SetFaction(m_goTemplateAddon->faction);
+ SetFlags(GameObjectFlags(m_goTemplateAddon->flags));
if (m_goTemplateAddon->WorldEffectID)
{
@@ -286,14 +282,14 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
m_model = CreateModel();
if (m_model && m_model->isMapObject())
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_MAP_OBJECT);
+ AddFlag(GO_FLAG_MAP_OBJECT);
// GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
SetGoType(GameobjectTypes(goInfo->type));
m_prevGoState = goState;
SetGoState(goState);
SetGoArtKit(artKit);
- SetUInt32Value(GAMEOBJECT_STATE_ANIM_ID, sAnimationDataStore.GetNumRows());
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::SpawnTrackingStateAnimID), sAnimationDataStore.GetNumRows());
switch (goInfo->type)
{
@@ -302,12 +298,17 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
m_goValue.FishingHole.MaxOpens = urand(GetGOInfo()->fishingHole.minRestock, GetGOInfo()->fishingHole.maxRestock);
break;
case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING:
+ {
// TODO: Get the values somehow, no longer in gameobject_template
m_goValue.Building.Health = 20000/*goinfo->destructibleBuilding.intactNumHits + goinfo->destructibleBuilding.damagedNumHits*/;
m_goValue.Building.MaxHealth = m_goValue.Building.Health;
SetGoAnimProgress(255);
- SetUInt32Value(GAMEOBJECT_PARENTROTATION, m_goInfo->destructibleBuilding.DestructibleModelRec);
+ // yes, even after the updatefield rewrite this garbage hack is still in client
+ QuaternionData reinterpretId;
+ memcpy(&reinterpretId.x, &m_goInfo->destructibleBuilding.DestructibleModelRec, sizeof(float));
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ParentRotation), reinterpretId);
break;
+ }
case GAMEOBJECT_TYPE_TRANSPORT:
{
m_goValue.Transport.AnimationInfo = sTransportMgr->GetTransportAnimInfo(goInfo->entry);
@@ -344,7 +345,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
break;
}
case GAMEOBJECT_TYPE_FISHINGNODE:
- SetUInt32Value(GAMEOBJECT_LEVEL, 1);
+ SetLevel(1);
SetGoAnimProgress(255);
break;
case GAMEOBJECT_TYPE_TRAP:
@@ -361,10 +362,11 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
}
break;
case GAMEOBJECT_TYPE_PHASEABLE_MO:
- SetByteValue(GAMEOBJECT_FLAGS, 1, m_goInfo->phaseableMO.AreaNameSet & 0xF);
+ RemoveFlag(GameObjectFlags(0xF00));
+ AddFlag(GameObjectFlags((m_goInfo->phaseableMO.AreaNameSet & 0xF) << 8));
break;
case GAMEOBJECT_TYPE_CAPTURE_POINT:
- SetUInt32Value(GAMEOBJECT_SPELL_VISUAL_ID, m_goInfo->capturePoint.SpellVisual1);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::SpellVisualID), m_goInfo->capturePoint.SpellVisual1);
break;
default:
SetGoAnimProgress(animProgress);
@@ -511,8 +513,8 @@ void GameObject::Update(uint32 diff)
uint32 visualStateAfter = (m_goValue.Transport.StateUpdateTimer / 20000) & 1;
if (visualStateBefore != visualStateAfter)
{
- ForceValuesUpdateAtIndex(GAMEOBJECT_LEVEL);
- ForceValuesUpdateAtIndex(GAMEOBJECT_BYTES_1);
+ ForceUpdateFieldChange(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Level));
+ ForceUpdateFieldChange(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::State));
}
}
}
@@ -528,7 +530,7 @@ void GameObject::Update(uint32 diff)
if (caster && caster->GetTypeId() == TYPEID_PLAYER)
{
SetGoState(GO_STATE_ACTIVE);
- SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
+ SetFlags(GO_FLAG_NODESPAWN);
UpdateData udata(caster->GetMapId());
WorldPacket packet;
@@ -700,7 +702,7 @@ void GameObject::Update(uint32 diff)
case GAMEOBJECT_TYPE_GOOBER:
if (m_cooldownTime < time(NULL))
{
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
SetLootState(GO_JUST_DEACTIVATED);
m_cooldownTime = 0;
@@ -806,7 +808,7 @@ void GameObject::Update(uint32 diff)
SendGameObjectDespawn();
//reset flags
if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
- SetUInt32Value(GAMEOBJECT_FLAGS, addon->flags);
+ SetFlags(GameObjectFlags(addon->flags));
}
if (!m_respawnDelayTime)
@@ -859,7 +861,7 @@ void GameObject::Delete()
SetGoState(GO_STATE_READY);
if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
- SetUInt32Value(GAMEOBJECT_FLAGS, addon->flags);
+ SetFlags(GameObjectFlags(addon->flags));
uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<GameObject>(GetSpawnId()) : 0;
if (poolid)
@@ -1021,7 +1023,7 @@ bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, boo
if (!GetGOInfo()->GetDespawnPossibility() && !GetGOInfo()->IsDespawnAtAction())
{
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
+ AddFlag(GO_FLAG_NODESPAWN);
m_respawnDelayTime = 0;
m_respawnTime = 0;
}
@@ -1145,7 +1147,7 @@ bool GameObject::IsNeverVisibleFor(WorldObject const* seer) const
if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
return true;
- if (!GetUInt32Value(GAMEOBJECT_DISPLAYID))
+ if (!GetDisplayId())
return true;
return false;
@@ -1206,7 +1208,7 @@ void GameObject::Respawn()
}
}
-bool GameObject::ActivateToQuest(Player* target) const
+bool GameObject::ActivateToQuest(Player const* target) const
{
if (target->HasQuestForGO(GetEntry()))
return true;
@@ -1219,7 +1221,7 @@ bool GameObject::ActivateToQuest(Player* target) const
case GAMEOBJECT_TYPE_QUESTGIVER:
{
GameObject* go = const_cast<GameObject*>(this);
- QuestGiverStatus questStatus = target->GetQuestDialogStatus(go);
+ QuestGiverStatus questStatus = const_cast<Player*>(target)->GetQuestDialogStatus(go);
if (questStatus > DIALOG_STATUS_UNAVAILABLE)
return true;
break;
@@ -1282,7 +1284,7 @@ void GameObject::ResetDoorOrButton()
if (m_lootState == GO_READY || m_lootState == GO_JUST_DEACTIVATED)
return;
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
SetGoState(m_prevGoState);
SetLootState(GO_JUST_DEACTIVATED);
@@ -1305,7 +1307,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f
void GameObject::SetGoArtKit(uint8 kit)
{
- SetByteValue(GAMEOBJECT_BYTES_1, 2, kit);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ArtKit), kit);
GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGOData(m_spawnId));
if (data)
data->artKit = kit;
@@ -1329,9 +1331,9 @@ void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType l
void GameObject::SwitchDoorOrButton(bool activate, bool alternative /* = false */)
{
if (activate)
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ AddFlag(GO_FLAG_IN_USE);
else
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
if (GetGoState() == GO_STATE_READY) //if closed -> open
SetGoState(alternative ? GO_STATE_ACTIVE_ALTERNATIVE : GO_STATE_ACTIVE);
@@ -1526,7 +1528,7 @@ void GameObject::Use(Unit* user)
if (uint32 trapEntry = info->goober.linkedTrap)
TriggeringLinkedGameObject(trapEntry, user);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ AddFlag(GO_FLAG_IN_USE);
SetLootState(GO_ACTIVATED, user);
// this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389)
@@ -2016,15 +2018,15 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
return;
// remove immunity flags, to allow spell to target anything
- trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
+ trigger->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC));
if (Unit* owner = GetOwner())
{
trigger->setFaction(owner->getFaction());
- if (owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
- trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ if (owner->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
+ trigger->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
// copy pvp state flags from owner
- trigger->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, owner->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
+ trigger->SetPvpFlags(owner->GetPvpFlags());
// needed for GO casts for proper target validation checks
trigger->SetOwnerGUID(owner->GetGUID());
trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID());
@@ -2138,10 +2140,7 @@ void GameObject::SetWorldRotation(float qx, float qy, float qz, float qw)
void GameObject::SetParentRotation(QuaternionData const& rotation)
{
- SetFloatValue(GAMEOBJECT_PARENTROTATION + 0, rotation.x);
- SetFloatValue(GAMEOBJECT_PARENTROTATION + 1, rotation.y);
- SetFloatValue(GAMEOBJECT_PARENTROTATION + 2, rotation.z);
- SetFloatValue(GAMEOBJECT_PARENTROTATION + 3, rotation.w);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ParentRotation), rotation);
}
void GameObject::SetWorldRotationAngles(float z_rot, float y_rot, float x_rot)
@@ -2207,7 +2206,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
switch (state)
{
case GO_DESTRUCTIBLE_INTACT:
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
+ RemoveFlag(GameObjectFlags(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED));
SetDisplayId(m_goInfo->displayId);
if (setHealth)
{
@@ -2221,8 +2220,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
EventInform(m_goInfo->destructibleBuilding.DamagedEvent, eventInvoker);
sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
+ RemoveFlag(GO_FLAG_DESTROYED);
+ AddFlag(GO_FLAG_DAMAGED);
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
@@ -2249,8 +2248,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
if (Battleground* bg = eventInvoker->GetBattleground())
bg->DestroyGate(eventInvoker, this);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
+ RemoveFlag(GO_FLAG_DAMAGED);
+ AddFlag(GO_FLAG_DESTROYED);
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
@@ -2269,7 +2268,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
case GO_DESTRUCTIBLE_REBUILDING:
{
EventInform(m_goInfo->destructibleBuilding.RebuildingEvent, eventInvoker);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
+ RemoveFlag(GameObjectFlags(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED));
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
@@ -2316,7 +2315,7 @@ void GameObject::SetLootState(LootState state, Unit* unit)
void GameObject::SetGoState(GOState state)
{
- SetByteValue(GAMEOBJECT_BYTES_1, 0, state);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::State), state);
sScriptMgr->OnGameObjectStateChanged(this, state);
if (m_model && !IsTransport())
{
@@ -2367,7 +2366,7 @@ void GameObject::SetTransportState(GOState state, uint32 stopFrame /*= 0*/)
void GameObject::SetDisplayId(uint32 displayid)
{
- SetUInt32Value(GAMEOBJECT_DISPLAYID, displayid);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::DisplayID), displayid);
UpdateModel();
}
@@ -2396,7 +2395,7 @@ uint8 GameObject::GetNameSetId() const
case GAMEOBJECT_TYPE_GARRISON_BUILDING:
case GAMEOBJECT_TYPE_GARRISON_PLOT:
case GAMEOBJECT_TYPE_PHASEABLE_MO:
- return GetByteValue(GAMEOBJECT_FLAGS, 1) & 0xF;
+ return ((*m_gameObjectData->Flags) >> 8) & 0xF;
default:
break;
}
@@ -2427,7 +2426,10 @@ void GameObject::UpdateModel()
if (m_model)
GetMap()->InsertGameObjectModel(*m_model);
- ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_MAP_OBJECT, m_model && m_model->isMapObject());
+ if (m_model && m_model->isMapObject())
+ AddFlag(GO_FLAG_MAP_OBJECT);
+ else
+ RemoveFlag(GO_FLAG_MAP_OBJECT);
}
Player* GameObject::GetLootRecipient() const
@@ -2493,106 +2495,37 @@ GameObject* GameObject::GetLinkedTrap()
return ObjectAccessor::GetGameObject(*this, m_linkedTrap);
}
-void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
+void GameObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const
{
- if (!target)
- return;
-
- bool isStoppableTransport = GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !m_goValue.Transport.StopFrames->empty();
- bool forcedFlags = GetGoType() == GAMEOBJECT_TYPE_CHEST && GetGOInfo()->chest.usegrouplootrules && HasLootRecipient();
- bool targetIsGM = target->IsGameMaster();
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_gameObjectData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount);
+void GameObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
- uint32* flags = GameObjectUpdateFieldFlags;
- uint32 visibleFlag = UF_FLAG_PUBLIC;
- if (GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
- *data << uint8(blockCount);
- std::size_t maskPos = data->wpos();
- data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType));
+ if (m_values.HasChanged(TYPEID_GAMEOBJECT))
+ m_gameObjectData->WriteUpdate(*data, flags, this, target);
- for (uint16 index = 0; index < m_valuesCount; ++index)
- {
- if (_fieldNotifyFlags & flags[index] ||
- ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
- (index == GAMEOBJECT_FLAGS && forcedFlags))
- {
- UpdateMask::SetUpdateBit(data->contents() + maskPos, index);
-
- if (index == OBJECT_DYNAMIC_FLAGS)
- {
- uint16 dynFlags = 0;
- int16 pathProgress = -1;
- switch (GetGoType())
- {
- case GAMEOBJECT_TYPE_QUESTGIVER:
- if (ActivateToQuest(target))
- dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
- break;
- case GAMEOBJECT_TYPE_CHEST:
- case GAMEOBJECT_TYPE_GOOBER:
- if (ActivateToQuest(target))
- dynFlags |= GO_DYNFLAG_LO_ACTIVATE | GO_DYNFLAG_LO_SPARKLE;
- else if (targetIsGM)
- dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
- break;
- case GAMEOBJECT_TYPE_GENERIC:
- if (ActivateToQuest(target))
- dynFlags |= GO_DYNFLAG_LO_SPARKLE;
- break;
- case GAMEOBJECT_TYPE_TRANSPORT:
- case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT:
- {
- if (uint32 transportPeriod = GetTransportPeriod())
- {
- float timer = float(m_goValue.Transport.PathProgress % transportPeriod);
- pathProgress = int16(timer / float(transportPeriod) * 65535.0f);
- }
- break;
- }
- default:
- break;
- }
-
- *data << uint16(dynFlags);
- *data << int16(pathProgress);
- }
- else if (index == GAMEOBJECT_FLAGS)
- {
- uint32 goFlags = m_uint32Values[GAMEOBJECT_FLAGS];
- if (GetGoType() == GAMEOBJECT_TYPE_CHEST)
- if (GetGOInfo()->chest.usegrouplootrules && !IsLootAllowedFor(target))
- goFlags |= GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE;
-
- *data << goFlags;
- }
- else if (index == GAMEOBJECT_LEVEL)
- {
- if (isStoppableTransport)
- *data << uint32(m_goValue.Transport.PathProgress);
- else
- *data << m_uint32Values[index];
- }
- else if (index == GAMEOBJECT_BYTES_1)
- {
- uint32 bytes1 = m_uint32Values[index];
- if (isStoppableTransport && GetGoState() == GO_STATE_TRANSPORT_ACTIVE)
- {
- if ((m_goValue.Transport.StateUpdateTimer / 20000) & 1)
- {
- bytes1 &= 0xFFFFFF00;
- bytes1 |= GO_STATE_TRANSPORT_STOPPED;
- }
- }
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- *data << bytes1;
- }
- else
- *data << m_uint32Values[index]; // other cases
- }
- }
+void GameObject::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&GameObject::m_gameObjectData);
+ Object::ClearUpdateMask(remove);
}
void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = nullptr*/) const
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index fc53bf4d03e..a22b637f07f 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -85,7 +85,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
explicit GameObject();
~GameObject();
- void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override;
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
void AddToWorld() override;
void RemoveFromWorld() override;
@@ -134,9 +136,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
ABORT();
}
m_spawnedByDefault = false; // all object with owner is despawned after delay
- SetGuidValue(GAMEOBJECT_FIELD_CREATED_BY, owner);
+ SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::CreatedBy), owner);
}
- ObjectGuid GetOwnerGUID() const { return GetGuidValue(GAMEOBJECT_FIELD_CREATED_BY); }
+ ObjectGuid GetOwnerGUID() const { return m_gameObjectData->CreatedBy; }
Unit* GetOwner() const;
void SetSpellId(uint32 id)
@@ -176,16 +178,21 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void SendGameObjectDespawn();
void getFishLoot(Loot* loot, Player* loot_owner);
void getFishLootJunk(Loot* loot, Player* loot_owner);
- GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
- void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); }
- GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
+ bool HasFlag(GameObjectFlags flags) const { return (*m_gameObjectData->Flags & flags) != 0; }
+ void AddFlag(GameObjectFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); }
+ void RemoveFlag(GameObjectFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); }
+ void SetFlags(GameObjectFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); }
+ void SetLevel(uint32 level) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Level), level); }
+ GameobjectTypes GetGoType() const { return GameobjectTypes(*m_gameObjectData->TypeID); }
+ void SetGoType(GameobjectTypes type) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::TypeID), type); }
+ GOState GetGoState() const { return GOState(*m_gameObjectData->State); }
void SetGoState(GOState state);
virtual uint32 GetTransportPeriod() const;
void SetTransportState(GOState state, uint32 stopFrame = 0);
- uint8 GetGoArtKit() const { return GetByteValue(GAMEOBJECT_BYTES_1, 2); }
+ uint8 GetGoArtKit() const { return m_gameObjectData->ArtKit; }
void SetGoArtKit(uint8 artkit);
- uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
- void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
+ uint8 GetGoAnimProgress() const { return m_gameObjectData->PercentHealth; }
+ void SetGoAnimProgress(uint8 animprogress) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::PercentHealth), animprogress); }
static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = UI64LIT(0));
void EnableCollision(bool enable);
@@ -233,7 +240,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
bool hasQuest(uint32 quest_id) const override;
bool hasInvolvedQuest(uint32 quest_id) const override;
- bool ActivateToQuest(Player* target) const;
+ bool ActivateToQuest(Player const* target) const;
void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = NULL);
// 0 = use `gameobject`.`spawntimesecs`
void ResetDoorOrButton();
@@ -258,9 +265,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void SetDestructibleState(GameObjectDestructibleState state, Player* eventInvoker = NULL, bool setHealth = false);
GameObjectDestructibleState GetDestructibleState() const
{
- if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED))
+ if ((*m_gameObjectData->Flags & GO_FLAG_DESTROYED))
return GO_DESTRUCTIBLE_DESTROYED;
- if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED))
+ if ((*m_gameObjectData->Flags & GO_FLAG_DAMAGED))
return GO_DESTRUCTIBLE_DAMAGED;
return GO_DESTRUCTIBLE_INTACT;
}
@@ -272,11 +279,11 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
std::string GetAIName() const;
void SetDisplayId(uint32 displayid);
- uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); }
+ uint32 GetDisplayId() const { return m_gameObjectData->DisplayID; }
uint8 GetNameSetId() const;
- uint32 GetFaction() const { return GetUInt32Value(GAMEOBJECT_FACTION); }
- void SetFaction(uint32 faction) { SetUInt32Value(GAMEOBJECT_FACTION, faction); }
+ uint32 GetFaction() const { return m_gameObjectData->FactionTemplate; }
+ void SetFaction(uint32 faction) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::FactionTemplate), faction); }
GameObjectModel* m_model;
void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL) const;
@@ -303,6 +310,8 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void AIM_Destroy();
bool AIM_Initialize();
+ UF::UpdateField<UF::GameObjectData, 0, TYPEID_GAMEOBJECT> m_gameObjectData;
+
protected:
GameObjectModel* CreateModel();
void UpdateModel(); // updates model in case displayId were changed
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h
index 5944f07654a..9f4ff342a53 100644
--- a/src/server/game/Entities/GameObject/GameObjectData.h
+++ b/src/server/game/Entities/GameObject/GameObjectData.h
@@ -20,6 +20,7 @@
#include "Common.h"
#include "DBCEnums.h"
+#include "QuaternionData.h"
#include "SharedDefines.h"
#include <string>
#include <vector>
@@ -925,17 +926,6 @@ struct GameObjectLocale
std::vector<std::string> Unk1;
};
-struct TC_GAME_API QuaternionData
-{
- float x, y, z, w;
-
- QuaternionData() : x(0.0f), y(0.0f), z(0.0f), w(1.0f) {}
- QuaternionData(float X, float Y, float Z, float W) : x(X), y(Y), z(Z), w(W) {}
-
- bool isUnit() const;
- static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X);
-};
-
// `gameobject_addon` table
struct GameObjectAddon
{
diff --git a/src/server/game/Entities/GameObject/QuaternionData.h b/src/server/game/Entities/GameObject/QuaternionData.h
new file mode 100644
index 00000000000..aecbac48d93
--- /dev/null
+++ b/src/server/game/Entities/GameObject/QuaternionData.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef QuaternionData_h__
+#define QuaternionData_h__
+
+#include "Define.h"
+
+struct TC_GAME_API QuaternionData
+{
+ float x, y, z, w;
+
+ QuaternionData() : x(0.0f), y(0.0f), z(0.0f), w(1.0f)
+ {
+ }
+ QuaternionData(float X, float Y, float Z, float W) : x(X), y(Y), z(Z), w(W)
+ {
+ }
+
+ bool isUnit() const;
+ static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X);
+
+ friend bool operator==(QuaternionData const& left, QuaternionData const& right)
+ {
+ return left.x == right.x && left.y == right.y && left.z == right.z && left.w == right.w;
+ }
+
+ friend bool operator!=(QuaternionData const& left, QuaternionData const& right)
+ {
+ return !(left == right);
+ }
+};
+
+#endif // QuaternionData_h__
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index 5e0beca0019..5d2df6b0466 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -30,9 +30,6 @@ Bag::Bag(): Item()
m_objectType |= TYPEMASK_CONTAINER;
m_objectTypeId = TYPEID_CONTAINER;
- m_valuesCount = CONTAINER_END;
- _dynamicValuesCount = CONTAINER_DYNAMIC_END;
-
memset(m_bagslot, 0, sizeof(Item*) * MAX_BAG_SIZE);
}
@@ -86,21 +83,21 @@ bool Bag::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner
if (owner)
{
- SetGuidValue(ITEM_FIELD_OWNER, owner->GetGUID());
- SetGuidValue(ITEM_FIELD_CONTAINED, owner->GetGUID());
+ SetOwnerGUID(owner->GetGUID());
+ SetContainedIn(owner->GetGUID());
}
- SetUInt32Value(ITEM_FIELD_MAXDURABILITY, itemProto->MaxDurability);
- SetUInt32Value(ITEM_FIELD_DURABILITY, itemProto->MaxDurability);
- SetUInt32Value(ITEM_FIELD_STACK_COUNT, 1);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), itemProto->MaxDurability);
+ SetDurability(itemProto->MaxDurability);
+ SetCount(1);
// Setting the number of Slots the Container has
- SetUInt32Value(CONTAINER_FIELD_NUM_SLOTS, itemProto->GetContainerSlots());
+ SetBagSize(itemProto->GetContainerSlots());
// Cleaning 20 slots
for (uint8 i = 0; i < MAX_BAG_SIZE; ++i)
{
- SetGuidValue(CONTAINER_FIELD_SLOT_1 + (i * 4), ObjectGuid::Empty);
+ SetSlot(i, ObjectGuid::Empty);
m_bagslot[i] = NULL;
}
@@ -118,11 +115,11 @@ bool Bag::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fie
return false;
ItemTemplate const* itemProto = GetTemplate(); // checked in Item::LoadFromDB
- SetUInt32Value(CONTAINER_FIELD_NUM_SLOTS, itemProto->GetContainerSlots());
+ SetBagSize(itemProto->GetContainerSlots());
// cleanup bag content related item value fields (its will be filled correctly from `character_inventory`)
for (uint8 i = 0; i < MAX_BAG_SIZE; ++i)
{
- SetGuidValue(CONTAINER_FIELD_SLOT_1 + (i * 4), ObjectGuid::Empty);
+ SetSlot(i, ObjectGuid::Empty);
delete m_bagslot[i];
m_bagslot[i] = NULL;
}
@@ -157,7 +154,7 @@ void Bag::RemoveItem(uint8 slot, bool /*update*/)
m_bagslot[slot]->SetContainer(NULL);
m_bagslot[slot] = NULL;
- SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 4), ObjectGuid::Empty);
+ SetSlot(slot, ObjectGuid::Empty);
}
void Bag::StoreItem(uint8 slot, Item* pItem, bool /*update*/)
@@ -167,9 +164,9 @@ void Bag::StoreItem(uint8 slot, Item* pItem, bool /*update*/)
if (pItem && pItem->GetGUID() != this->GetGUID())
{
m_bagslot[slot] = pItem;
- SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 4), pItem->GetGUID());
- pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID());
- pItem->SetGuidValue(ITEM_FIELD_OWNER, GetOwnerGUID());
+ SetSlot(slot, pItem->GetGUID());
+ pItem->SetContainedIn(GetGUID());
+ pItem->SetOwnerGUID(GetOwnerGUID());
pItem->SetContainer(this);
pItem->SetSlot(slot);
}
@@ -184,6 +181,43 @@ void Bag::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) cons
m_bagslot[i]->BuildCreateUpdateBlockForPlayer(data, target);
}
+void Bag::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_itemData->WriteCreate(*data, flags, this, target);
+ m_containerData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Bag::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_ITEM))
+ m_itemData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_CONTAINER))
+ m_containerData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Bag::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Bag::m_containerData);
+ Item::ClearUpdateMask(remove);
+}
+
// If the bag is empty returns true
bool Bag::IsEmpty() const
{
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index 3f0e9407da3..ffe5942fb0c 100644
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -47,7 +47,7 @@ class TC_GAME_API Bag : public Item
uint8 GetSlotByItemGUID(ObjectGuid guid) const;
bool IsEmpty() const;
uint32 GetFreeSlots() const;
- uint32 GetBagSize() const { return GetUInt32Value(CONTAINER_FIELD_NUM_SLOTS); }
+ uint32 GetBagSize() const { return m_containerData->NumSlots; }
// DB operations
// overwrite virtual Item::SaveToDB
@@ -58,8 +58,15 @@ class TC_GAME_API Bag : public Item
void DeleteFromDB(SQLTransaction& trans) override;
void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
+
+ UF::UpdateField<UF::ContainerData, 0, TYPEID_CONTAINER> m_containerData;
protected:
+ void SetBagSize(uint32 numSlots) { SetUpdateFieldValue(m_values.ModifyValue(&Bag::m_containerData).ModifyValue(&UF::ContainerData::NumSlots), numSlots); }
+ void SetSlot(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Bag::m_containerData).ModifyValue(&UF::ContainerData::Slots, slot), guid); }
// Bag Storage space
Item* m_bagslot[MAX_BAG_SIZE];
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index af16870c6d5..019264836fc 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -22,6 +22,7 @@
#include "CollectionMgr.h"
#include "Common.h"
#include "ConditionMgr.h"
+#include "Containers.h"
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "GameTables.h"
@@ -110,7 +111,7 @@ void AddItemsSetItem(Player* player, Item* item)
eff->SetBonuses.insert(itemSetSpell);
// spell cast only if fit form requirement, in other case will cast at form change
- if (!itemSetSpell->ChrSpecID || itemSetSpell->ChrSpecID == player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (!itemSetSpell->ChrSpecID || itemSetSpell->ChrSpecID == player->GetPrimarySpecialization())
player->ApplyEquipSpell(spellInfo, NULL, true);
}
}
@@ -275,8 +276,6 @@ Item::Item()
m_objectType |= TYPEMASK_ITEM;
m_objectTypeId = TYPEID_ITEM;
- m_valuesCount = ITEM_END;
- _dynamicValuesCount = ITEM_DYNAMIC_END;
m_slot = 0;
uState = ITEM_NEW;
uQueuePos = -1;
@@ -301,7 +300,7 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne
if (owner)
{
SetOwnerGUID(owner->GetGUID());
- SetGuidValue(ITEM_FIELD_CONTAINED, owner->GetGUID());
+ SetContainedIn(owner->GetGUID());
}
ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(itemId);
@@ -309,16 +308,16 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne
return false;
_bonusData.Initialize(itemProto);
- SetUInt32Value(ITEM_FIELD_STACK_COUNT, 1);
- SetUInt32Value(ITEM_FIELD_MAXDURABILITY, itemProto->MaxDurability);
- SetUInt32Value(ITEM_FIELD_DURABILITY, itemProto->MaxDurability);
+ SetCount(1);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), itemProto->MaxDurability);
+ SetDurability(itemProto->MaxDurability);
for (std::size_t i = 0; i < itemProto->Effects.size(); ++i)
if (i < 5)
SetSpellCharges(i, itemProto->Effects[i]->Charges);
- SetUInt32Value(ITEM_FIELD_DURATION, itemProto->GetDuration());
- SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, 0);
+ SetExpiration(itemProto->GetDuration());
+ SetCreatePlayedTime(0);
if (itemProto->GetArtifactID())
{
@@ -357,19 +356,20 @@ bool Item::IsNotEmptyBag() const
void Item::UpdateDuration(Player* owner, uint32 diff)
{
- if (!GetUInt32Value(ITEM_FIELD_DURATION))
+ uint32 duration = m_itemData->Expiration;
+ if (!duration)
return;
- TC_LOG_DEBUG("entities.player.items", "Item::UpdateDuration Item (Entry: %u Duration %u Diff %u)", GetEntry(), GetUInt32Value(ITEM_FIELD_DURATION), diff);
+ TC_LOG_DEBUG("entities.player.items", "Item::UpdateDuration Item (Entry: %u Duration %u Diff %u)", GetEntry(), duration, diff);
- if (GetUInt32Value(ITEM_FIELD_DURATION) <= diff)
+ if (duration <= diff)
{
sScriptMgr->OnItemExpire(owner, GetTemplate());
owner->DestroyItem(GetBagSlot(), GetSlot(), true);
return;
}
- SetUInt32Value(ITEM_FIELD_DURATION, GetUInt32Value(ITEM_FIELD_DURATION) - diff);
+ SetExpiration(duration - diff);
SetState(ITEM_CHANGED, owner); // save new time in database
}
@@ -388,10 +388,10 @@ void Item::SaveToDB(SQLTransaction& trans)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(uState == ITEM_NEW ? CHAR_REP_ITEM_INSTANCE : CHAR_UPD_ITEM_INSTANCE);
stmt->setUInt32( index, GetEntry());
stmt->setUInt64(++index, GetOwnerGUID().GetCounter());
- stmt->setUInt64(++index, GetGuidValue(ITEM_FIELD_CREATOR).GetCounter());
- stmt->setUInt64(++index, GetGuidValue(ITEM_FIELD_GIFTCREATOR).GetCounter());
+ stmt->setUInt64(++index, GetCreator().GetCounter());
+ stmt->setUInt64(++index, GetGiftCreator().GetCounter());
stmt->setUInt32(++index, GetCount());
- stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_DURATION));
+ stmt->setUInt32(++index, m_itemData->Expiration);
std::ostringstream ssSpells;
if (ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(GetEntry()))
@@ -399,7 +399,7 @@ void Item::SaveToDB(SQLTransaction& trans)
ssSpells << GetSpellCharges(i) << ' ';
stmt->setString(++index, ssSpells.str());
- stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_FLAGS));
+ stmt->setUInt32(++index, m_itemData->DynamicFlags);
std::ostringstream ssEnchants;
for (uint8 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i)
@@ -412,18 +412,18 @@ void Item::SaveToDB(SQLTransaction& trans)
stmt->setUInt8(++index, uint8(GetItemRandomEnchantmentId().Type));
stmt->setUInt32(++index, GetItemRandomEnchantmentId().Id);
- stmt->setUInt16(++index, GetUInt32Value(ITEM_FIELD_DURABILITY));
- stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME));
+ stmt->setUInt16(++index, m_itemData->Durability);
+ stmt->setUInt32(++index, m_itemData->CreatePlayedTime);
stmt->setString(++index, m_text);
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_UPGRADE_ID));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID));
- stmt->setUInt8(++index, uint8(GetUInt32Value(ITEM_FIELD_CONTEXT)));
+ stmt->setUInt8(++index, uint8(m_itemData->Context));
std::ostringstream bonusListIDs;
- for (uint32 bonusListID : GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS))
+ for (int32 bonusListID : *m_itemData->BonusListIDs)
bonusListIDs << bonusListID << ' ';
stmt->setString(++index, bonusListIDs.str());
@@ -431,7 +431,7 @@ void Item::SaveToDB(SQLTransaction& trans)
trans->Append(stmt);
- if ((uState == ITEM_CHANGED) && HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ if ((uState == ITEM_CHANGED) && HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GIFT_OWNER);
stmt->setUInt64(0, GetOwnerGUID().GetCounter());
@@ -443,17 +443,17 @@ void Item::SaveToDB(SQLTransaction& trans)
stmt->setUInt64(0, GetGUID().GetCounter());
trans->Append(stmt);
- if (GetGems().size())
+ if (m_itemData->Gems.size())
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_GEMS);
stmt->setUInt64(0, GetGUID().GetCounter());
uint32 i = 0;
uint32 const gemFields = 4;
- for (ItemDynamicFieldGems const& gemData : GetGems())
+ for (UF::SocketedGem const& gemData : m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
- stmt->setUInt32(1 + i * gemFields, gemData.ItemId);
+ stmt->setUInt32(1 + i * gemFields, gemData.ItemID);
std::ostringstream gemBonusListIDs;
for (uint16 bonusListID : gemData.BonusListIDs)
if (bonusListID)
@@ -529,16 +529,16 @@ void Item::SaveToDB(SQLTransaction& trans)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT);
stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt64(1, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP));
+ stmt->setUInt64(1, m_itemData->ArtifactXP);
stmt->setUInt32(2, GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID));
stmt->setUInt32(3, GetModifier(ITEM_MODIFIER_ARTIFACT_TIER));
trans->Append(stmt);
- for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers())
+ for (UF::ArtifactPower const& artifactPower : m_itemData->ArtifactPowers)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT_POWERS);
stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, artifactPower.ArtifactPowerId);
+ stmt->setUInt32(1, artifactPower.ArtifactPowerID);
stmt->setUInt8(2, artifactPower.PurchasedRank);
trans->Append(stmt);
}
@@ -591,7 +591,7 @@ void Item::SaveToDB(SQLTransaction& trans)
stmt->setUInt64(0, GetGUID().GetCounter());
trans->Append(stmt);
- if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ if (HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
stmt->setUInt64(0, GetGUID().GetCounter());
@@ -656,20 +656,20 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
if (uint64 creator = fields[2].GetUInt64())
{
if (!(itemFlags & ITEM_FIELD_FLAG_CHILD))
- SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(creator));
+ SetCreator(ObjectGuid::Create<HighGuid::Player>(creator));
else
- SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Item>(creator));
+ SetCreator(ObjectGuid::Create<HighGuid::Item>(creator));
}
if (uint64 giftCreator = fields[3].GetUInt64())
- SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid::Create<HighGuid::Player>(giftCreator));
+ SetGiftCreator(ObjectGuid::Create<HighGuid::Player>(giftCreator));
SetCount(fields[4].GetUInt32());
uint32 duration = fields[5].GetUInt32();
- SetUInt32Value(ITEM_FIELD_DURATION, duration);
+ SetExpiration(duration);
// update duration if need, and remove if not need
if ((proto->GetDuration() == 0) != (duration == 0))
{
- SetUInt32Value(ITEM_FIELD_DURATION, proto->GetDuration());
+ SetExpiration(proto->GetDuration());
need_save = true;
}
@@ -678,19 +678,19 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
for (uint8 i = 0; i < proto->Effects.size(); ++i)
SetSpellCharges(i, atoi(tokens[i]));
- SetUInt32Value(ITEM_FIELD_FLAGS, itemFlags);
+ SetItemFlags(ItemFieldFlags(itemFlags));
uint32 durability = fields[11].GetUInt16();
- SetUInt32Value(ITEM_FIELD_DURABILITY, durability);
+ SetDurability(durability);
// update max durability (and durability) if need
- SetUInt32Value(ITEM_FIELD_MAXDURABILITY, proto->MaxDurability);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), proto->MaxDurability);
if (durability > proto->MaxDurability)
{
- SetUInt32Value(ITEM_FIELD_DURABILITY, proto->MaxDurability);
+ SetDurability(proto->MaxDurability);
need_save = true;
}
- SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, fields[12].GetUInt32());
+ SetCreatePlayedTime(fields[12].GetUInt32());
SetText(fields[13].GetString());
uint32 upgradeId = fields[14].GetUInt32();
@@ -714,14 +714,14 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
SetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL, fields[17].GetUInt16());
SetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID, fields[18].GetUInt32());
- SetUInt32Value(ITEM_FIELD_CONTEXT, fields[19].GetUInt8());
+ SetContext(fields[19].GetUInt8());
- Tokenizer bonusListIDs(fields[20].GetString(), ' ');
- for (char const* token : bonusListIDs)
- {
- uint32 bonusListID = atoul(token);
- AddBonuses(bonusListID);
- }
+ Tokenizer bonusListString(fields[20].GetString(), ' ');
+ std::vector<int32> bonusListIDs;
+ bonusListIDs.reserve(bonusListString.size());
+ for (char const* token : bonusListString)
+ bonusListIDs.push_back(atoi(token));
+ SetBonuses(std::move(bonusListIDs));
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS, fields[21].GetUInt32());
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_1, fields[22].GetUInt32());
@@ -756,22 +756,24 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[44].GetUInt32());
// Enchants must be loaded after all other bonus/scaling data
- _LoadIntoDataField(fields[8].GetString(), ITEM_FIELD_ENCHANTMENT, MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET);
- m_randomEnchantment.Type = ItemRandomEnchantmentType(fields[9].GetUInt8());
- m_randomEnchantment.Id = fields[10].GetUInt32();
- if (m_randomEnchantment.Type == ItemRandomEnchantmentType::Property)
- SetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, m_randomEnchantment.Id);
- else if (m_randomEnchantment.Type == ItemRandomEnchantmentType::Suffix)
+ Tokenizer enchantmentTokens(fields[8].GetString(), ' ');
+ if (enchantmentTokens.size() == MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET)
{
- SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, -int32(m_randomEnchantment.Id));
- // recalculate suffix factor
- UpdateItemSuffixFactor();
+ for (uint32 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i)
+ {
+ auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, i);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), atoul(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 0]));
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), atoul(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 1]));
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), atoi(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 2]));
+ }
}
+ m_randomEnchantment.Type = ItemRandomEnchantmentType(fields[9].GetUInt8());
+ m_randomEnchantment.Id = fields[10].GetUInt32();
// Remove bind flag for items vs BIND_NONE set
if (IsSoulBound() && GetBonding() == BIND_NONE)
{
- ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, false);
+ RemoveItemFlag(ITEM_FIELD_FLAG_SOULBOUND);
need_save = true;
}
@@ -779,9 +781,9 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
{
uint8 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD);
- stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_DURATION));
- stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_FLAGS));
- stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_DURABILITY));
+ stmt->setUInt32(index++, m_itemData->Expiration);
+ stmt->setUInt32(index++, m_itemData->DynamicFlags);
+ stmt->setUInt32(index++, m_itemData->Durability);
stmt->setUInt32(index++, GetModifier(ITEM_MODIFIER_UPGRADE_ID));
stmt->setUInt64(index++, guid);
CharacterDatabase.Execute(stmt);
@@ -790,12 +792,12 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
return true;
}
-void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ItemDynamicFieldArtifactPowers>& powers)
+void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerLoadInfo>& powers)
{
for (uint8 i = 0; i <= artifactTier; ++i)
InitArtifactPowers(GetTemplate()->GetArtifactID(), i);
- SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, xp);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp);
SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearanceId);
SetModifier(ITEM_MODIFIER_ARTIFACT_TIER, artifactTier);
@@ -803,7 +805,7 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI
SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID);
uint8 totalPurchasedRanks = 0;
- for (ItemDynamicFieldArtifactPowers& power : powers)
+ for (ArtifactPowerLoadInfo& power : powers)
{
power.CurrentRankWithBonus += power.PurchasedRank;
totalPurchasedRanks += power.PurchasedRank;
@@ -844,17 +846,16 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI
}
}
- SetArtifactPower(&power);
+ SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, power.CurrentRankWithBonus);
}
- for (ItemDynamicFieldArtifactPowers& power : powers)
+ for (ArtifactPowerLoadInfo& power : powers)
{
ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId);
if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS))
continue;
- power.CurrentRankWithBonus = totalPurchasedRanks + 1;
- SetArtifactPower(&power);
+ SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, totalPurchasedRanks + 1);
}
CheckArtifactRelicSlotUnlock(owner ? owner : GetOwner());
@@ -929,32 +930,6 @@ void Item::SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId)
switch (randomPropId.Type)
{
- case ItemRandomEnchantmentType::Property:
- if (ItemRandomPropertiesEntry const* item_rand = sItemRandomPropertiesStore.LookupEntry(randomPropId.Id))
- {
- if (GetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID) != randomPropId.Id)
- {
- SetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, randomPropId.Id);
- SetState(ITEM_CHANGED, GetOwner());
- }
- for (uint32 i = PROP_ENCHANTMENT_SLOT_0; i <= PROP_ENCHANTMENT_SLOT_4; ++i)
- SetEnchantment(EnchantmentSlot(i), item_rand->Enchantment[i - PROP_ENCHANTMENT_SLOT_0], 0, 0);
- }
- break;
- case ItemRandomEnchantmentType::Suffix:
- if (ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(randomPropId.Id))
- {
- if (GetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID) != -int32(randomPropId.Id) || !GetItemSuffixFactor())
- {
- SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, -int32(randomPropId.Id));
- UpdateItemSuffixFactor();
- SetState(ITEM_CHANGED, GetOwner());
- }
-
- for (uint32 i = PROP_ENCHANTMENT_SLOT_0; i <= PROP_ENCHANTMENT_SLOT_4; ++i)
- SetEnchantment(EnchantmentSlot(i), item_rand->Enchantment[i - PROP_ENCHANTMENT_SLOT_0], 0, 0);
- }
- break;
case ItemRandomEnchantmentType::BonusList:
AddBonuses(randomPropId.Id);
break;
@@ -963,22 +938,6 @@ void Item::SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId)
}
}
-void Item::UpdateItemSuffixFactor()
-{
- if (!GetTemplate()->GetRandomSuffix())
- return;
-
- uint32 suffixFactor = 0;
- if (Player* owner = GetOwner())
- suffixFactor = GetRandomPropertyPoints(GetItemLevel(owner), GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass());
- else
- suffixFactor = GenerateEnchSuffixFactor(GetEntry());
-
- if (GetItemSuffixFactor() == suffixFactor)
- return;
- SetUInt32Value(ITEM_FIELD_PROPERTY_SEED, suffixFactor);
-}
-
void Item::SetState(ItemUpdateState state, Player* forplayer)
{
if (uState == ITEM_NEW && state == ITEM_REMOVED)
@@ -1067,7 +1026,7 @@ bool Item::CanBeTraded(bool mail, bool trade) const
if (m_lootGenerated)
return false;
- if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade)))
+ if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade)))
return false;
if (IsBag() && (Player::IsBagPos(GetPos()) || !ToBag()->IsEmpty()))
@@ -1089,7 +1048,7 @@ bool Item::CanBeTraded(bool mail, bool trade) const
void Item::SetCount(uint32 value)
{
- SetUInt32Value(ITEM_FIELD_STACK_COUNT, value);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::StackCount), value);
if (Player* player = GetOwner())
{
@@ -1215,9 +1174,10 @@ void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint
ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner);
ApplyArtifactPowerEnchantmentBonuses(slot, id, true, owner);
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_ID_OFFSET, id);
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET, duration);
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET, charges);
+ auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), id);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), duration);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), charges);
SetState(ITEM_CHANGED, owner);
}
@@ -1226,7 +1186,7 @@ void Item::SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player*
if (GetEnchantmentDuration(slot) == duration)
return;
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET, duration);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot).ModifyValue(&UF::ItemEnchantment::Duration), duration);
SetState(ITEM_CHANGED, owner);
// Cannot use GetOwner() here, has to be passed as an argument to avoid freeze due to hashtable locking
}
@@ -1236,7 +1196,7 @@ void Item::SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges)
if (GetEnchantmentCharges(slot) == charges)
return;
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET, charges);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot).ModifyValue(&UF::ItemEnchantment::Charges), charges);
SetState(ITEM_CHANGED, GetOwner());
}
@@ -1245,20 +1205,18 @@ void Item::ClearEnchantment(EnchantmentSlot slot)
if (!GetEnchantmentId(slot))
return;
- for (uint8 x = 0; x < MAX_ITEM_ENCHANTMENT_EFFECTS; ++x)
- SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + x, 0);
+ auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), 0);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), 0);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), 0);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Inactive), 0);
SetState(ITEM_CHANGED, GetOwner());
}
-DynamicFieldStructuredView<ItemDynamicFieldGems> Item::GetGems() const
-{
- return GetDynamicStructuredValues<ItemDynamicFieldGems>(ITEM_DYNAMIC_FIELD_GEMS);
-}
-
-ItemDynamicFieldGems const* Item::GetGem(uint16 slot) const
+UF::SocketedGem const* Item::GetGem(uint16 slot) const
{
ASSERT(slot < MAX_GEM_SOCKETS);
- return GetDynamicStructuredValue<ItemDynamicFieldGems>(ITEM_DYNAMIC_FIELD_GEMS, slot);
+ return slot < m_itemData->Gems.size() ? &m_itemData->Gems[slot] : nullptr;
}
void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel)
@@ -1315,13 +1273,17 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin
}
}
- SetDynamicStructuredValue(ITEM_DYNAMIC_FIELD_GEMS, slot, gem);
+ auto gemField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Gems, slot);
+ SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::ItemID), gem->ItemId);
+ SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::Context), gem->Context);
+ for (uint32 i = 0; i < 16; ++i)
+ SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::BonusListIDs, i), gem->BonusListIDs[i]);
}
bool Item::GemsFitSockets() const
{
uint32 gemSlot = 0;
- for (ItemDynamicFieldGems const& gemData : GetGems())
+ for (UF::SocketedGem const& gemData : m_itemData->Gems)
{
SocketColor color = GetTemplate()->GetSocketColor(gemSlot);
if (!color) // no socket slot
@@ -1329,7 +1291,7 @@ bool Item::GemsFitSockets() const
uint32 GemColor = 0;
- ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId);
+ ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID);
if (gemProto)
{
GemPropertiesEntry const* gemProperty = sGemPropertiesStore.LookupEntry(gemProto->GetGemProperties());
@@ -1345,17 +1307,17 @@ bool Item::GemsFitSockets() const
uint8 Item::GetGemCountWithID(uint32 GemID) const
{
- return uint8(std::count_if(GetGems().begin(), GetGems().end(), [GemID](ItemDynamicFieldGems const& gemData)
+ return uint8(std::count_if(m_itemData->Gems.begin(), m_itemData->Gems.end(), [GemID](UF::SocketedGem const& gemData)
{
- return gemData.ItemId == GemID;
+ return gemData.ItemID == int32(GemID);
}));
}
uint8 Item::GetGemCountWithLimitCategory(uint32 limitCategory) const
{
- return uint8(std::count_if(GetGems().begin(), GetGems().end(), [limitCategory](ItemDynamicFieldGems const& gemData)
+ return uint8(std::count_if(m_itemData->Gems.begin(), m_itemData->Gems.end(), [limitCategory](UF::SocketedGem const& gemData)
{
- ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId);
+ ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID);
if (!gemProto)
return false;
@@ -1381,7 +1343,7 @@ void Item::SendUpdateSockets()
// time.
void Item::SendTimeUpdate(Player* owner)
{
- uint32 duration = GetUInt32Value(ITEM_FIELD_DURATION);
+ uint32 duration = m_itemData->Expiration;
if (!duration)
return;
@@ -1424,10 +1386,10 @@ Item* Item::CloneItem(uint32 count, Player const* player /*= nullptr*/) const
if (!newItem)
return nullptr;
- newItem->SetGuidValue(ITEM_FIELD_CREATOR, GetGuidValue(ITEM_FIELD_CREATOR));
- newItem->SetGuidValue(ITEM_FIELD_GIFTCREATOR, GetGuidValue(ITEM_FIELD_GIFTCREATOR));
- newItem->SetUInt32Value(ITEM_FIELD_FLAGS, GetUInt32Value(ITEM_FIELD_FLAGS) & ~(ITEM_FIELD_FLAG_REFUNDABLE | ITEM_FIELD_FLAG_BOP_TRADEABLE));
- newItem->SetUInt32Value(ITEM_FIELD_DURATION, GetUInt32Value(ITEM_FIELD_DURATION));
+ newItem->SetCreator(GetCreator());
+ newItem->SetGiftCreator(GetGiftCreator());
+ newItem->SetItemFlags(ItemFieldFlags(*m_itemData->DynamicFlags & ~(ITEM_FIELD_FLAG_REFUNDABLE | ITEM_FIELD_FLAG_BOP_TRADEABLE)));
+ newItem->SetExpiration(m_itemData->Expiration);
// player CAN be NULL in which case we must not update random properties because that accesses player's item update queue
if (player)
newItem->SetItemRandomProperties(GetItemRandomEnchantmentId());
@@ -1444,7 +1406,7 @@ bool Item::IsBindedNotWith(Player const* player) const
if (GetOwnerGUID() == player->GetGUID())
return false;
- if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
+ if (HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE))
if (allowedGUIDs.find(player->GetGUID()) != allowedGUIDs.end())
return false;
@@ -1462,76 +1424,61 @@ void Item::BuildUpdate(UpdateDataMapType& data_map)
ClearUpdateMask(false);
}
-void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
+UF::UpdateFieldFlag Item::GetUpdateFieldFlagsFor(Player const* target) const
{
- if (!target)
- return;
+ if (target->GetGUID() == GetOwnerGUID())
+ return UF::UpdateFieldFlag::Owner;
- std::size_t blockCount = UpdateMask::GetBlockCount(_dynamicValuesCount);
+ return UF::UpdateFieldFlag::None;
+}
- uint32* flags = nullptr;
- uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags);
+void Item::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_itemData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- *data << uint8(blockCount);
- std::size_t maskPos = data->wpos();
- data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType));
+void Item::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
- using DynamicFieldChangeTypeUT = std::underlying_type<UpdateMask::DynamicFieldChangeType>::type;
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
- for (uint16 index = 0; index < _dynamicValuesCount; ++index)
- {
- std::vector<uint32> const& values = _dynamicValues[index];
- if (_fieldNotifyFlags & flags[index] ||
- ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] != UpdateMask::UNCHANGED : !values.empty()) && (flags[index] & visibleFlag)))
- {
- UpdateMask::SetUpdateBit(data->contents() + maskPos, index);
+ if (m_values.HasChanged(TYPEID_ITEM))
+ m_itemData->WriteUpdate(*data, flags, this, target);
- std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size());
- *data << DynamicFieldChangeTypeUT(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType));
- if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED)
- *data << uint32(values.size());
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- std::size_t arrayMaskPos = data->wpos();
- data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType));
- if (index != ITEM_DYNAMIC_FIELD_MODIFIERS)
- {
- for (std::size_t v = 0; v < values.size(); ++v)
- {
- if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v])
- {
- UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v);
- *data << uint32(values[v]);
- }
- }
- }
- else
- {
- uint32 m = 0;
+void Item::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
+{
+ UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
+ valuesMask.Set(TYPEID_ITEM);
- // work around stupid item modifier field requirements - push back values mask by sizeof(m) bytes if size was not appended yet
- if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] != UpdateMask::VALUE_AND_SIZE_CHANGED && _changesMask[ITEM_FIELD_MODIFIERS_MASK])
- {
- data->put(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT), data->read<uint16>(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT)) | UpdateMask::VALUE_AND_SIZE_CHANGED);
- *data << m;
- arrayMaskPos += sizeof(m);
- }
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(valuesMask.GetBlock(0));
- // in case of ITEM_DYNAMIC_FIELD_MODIFIERS it is ITEM_FIELD_MODIFIERS_MASK that controls index of each value, not updatemask
- // so we just have to write this starting from 0 index
- for (std::size_t v = 0; v < values.size(); ++v)
- {
- if (values[v])
- {
- UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, m++);
- *data << uint32(values[v]);
- }
- }
+ UF::ItemData::Mask mask;
+ m_itemData->AppendAllowedFieldsMaskForFlag(mask, flags);
+ m_itemData->WriteUpdate(*data, mask, flags, this, target);
- if (updateType == UPDATETYPE_VALUES && _changesMask[ITEM_FIELD_MODIFIERS_MASK])
- data->put(arrayMaskPos - sizeof(m), m);
- }
- }
- }
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Item::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Item::m_itemData);
+ Object::ClearUpdateMask(remove);
}
void Item::AddToObjectUpdate()
@@ -1577,14 +1524,14 @@ void Item::DeleteRefundDataFromDB(SQLTransaction* trans)
void Item::SetNotRefundable(Player* owner, bool changestate /*= true*/, SQLTransaction* trans /*= nullptr*/, bool addToCollection /*= true*/)
{
- if (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
+ if (!HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE))
return;
WorldPackets::Item::ItemExpirePurchaseRefund itemExpirePurchaseRefund;
itemExpirePurchaseRefund.ItemGUID = GetGUID();
owner->SendDirectMessage(itemExpirePurchaseRefund.Write());
- RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
+ RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE);
// Following is not applicable in the trading procedure
if (changestate)
SetState(ITEM_CHANGED, owner);
@@ -1606,7 +1553,7 @@ void Item::UpdatePlayedTime(Player* owner)
based on the time elapsed since the last update hereof.
*/
// Get current played time
- uint32 current_playtime = GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME);
+ uint32 current_playtime = m_itemData->CreatePlayedTime;
// Calculate time elapsed since last played time update
time_t curtime = time(NULL);
uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate);
@@ -1616,7 +1563,7 @@ void Item::UpdatePlayedTime(Player* owner)
{
// No? Proceed.
// Update the data field
- SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, new_playtime);
+ SetCreatePlayedTime(new_playtime);
// Flag as changed to get saved to DB
SetState(ITEM_CHANGED, owner);
// Speaks for itself
@@ -1631,7 +1578,7 @@ uint32 Item::GetPlayedTime()
{
time_t curtime = time(NULL);
uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate);
- return GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + elapsed;
+ return *m_itemData->CreatePlayedTime + elapsed;
}
bool Item::IsRefundExpired()
@@ -1641,13 +1588,13 @@ bool Item::IsRefundExpired()
void Item::SetSoulboundTradeable(GuidSet const& allowedLooters)
{
- SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE);
+ AddItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE);
allowedGUIDs = allowedLooters;
}
void Item::ClearSoulboundTradeable(Player* currentOwner)
{
- RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE);
+ RemoveItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE);
if (allowedGUIDs.empty())
return;
@@ -1662,7 +1609,7 @@ void Item::ClearSoulboundTradeable(Player* currentOwner)
bool Item::CheckSoulboundTradeExpire()
{
// called from owner's update - GetOwner() MUST be valid
- if (GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + 2*HOUR < GetOwner()->GetTotalPlayedTime())
+ if (m_itemData->CreatePlayedTime + 2*HOUR < GetOwner()->GetTotalPlayedTime())
{
ClearSoulboundTradeable(GetOwner());
return true; // remove from tradeable list
@@ -1695,9 +1642,6 @@ bool Item::IsValidTransmogrificationTarget() const
bool Item::HasStats() const
{
- if (GetItemRandomPropertyId() != 0)
- return true;
-
ItemTemplate const* proto = GetTemplate();
Player const* owner = GetOwner();
for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i)
@@ -2056,7 +2000,7 @@ void Item::ItemContainerSaveLootToDB()
stmt_items = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEMCONTAINER_ITEMS);
- // container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids
+ // container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids
stmt_items->setUInt64(0, loot.containerID.GetCounter());
stmt_items->setUInt32(1, _li->itemid);
stmt_items->setUInt32(2, _li->count);
@@ -2068,12 +2012,11 @@ void Item::ItemContainerSaveLootToDB()
stmt_items->setBool(8, _li->needs_quest);
stmt_items->setUInt8(9, uint8(_li->randomPropertyId.Type));
stmt_items->setUInt32(10, _li->randomPropertyId.Id);
- stmt_items->setUInt32(11, _li->randomSuffix);
- stmt_items->setUInt8(12, _li->context);
+ stmt_items->setUInt8(11, _li->context);
std::ostringstream bonusListIDs;
for (int32 bonusListID : _li->BonusListIDs)
bonusListIDs << bonusListID << ' ';
- stmt_items->setString(13, bonusListIDs.str());
+ stmt_items->setString(12, bonusListIDs.str());
trans->Append(stmt_items);
}
}
@@ -2121,7 +2064,7 @@ bool Item::ItemContainerLoadLootFromDB()
// Fill in the rest of the LootItem from the DB
Field* fields = item_result->Fetch();
- // item_id, itm_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids
+ // item_id, itm_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids
loot_item.itemid = fields[0].GetUInt32();
loot_item.count = fields[1].GetUInt32();
loot_item.follow_loot_rules = fields[2].GetBool();
@@ -2132,9 +2075,8 @@ bool Item::ItemContainerLoadLootFromDB()
loot_item.is_underthreshold = fields[6].GetBool();
loot_item.needs_quest = fields[7].GetBool();
loot_item.randomPropertyId = { ItemRandomEnchantmentType(fields[8].GetUInt8()), fields[9].GetUInt32() };
- loot_item.randomSuffix = fields[10].GetUInt32();
- loot_item.context = fields[11].GetUInt8();
- Tokenizer bonusLists(fields[12].GetString(), ' ');
+ loot_item.context = fields[10].GetUInt8();
+ Tokenizer bonusLists(fields[11].GetString(), ' ');
std::transform(bonusLists.begin(), bonusLists.end(), std::back_inserter(loot_item.BonusListIDs), [](char const* token)
{
return int32(strtol(token, NULL, 10));
@@ -2198,9 +2140,9 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB()
uint32 Item::GetItemLevel(Player const* owner) const
{
- uint32 minItemLevel = owner->GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL);
- uint32 minItemLevelCutoff = owner->GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF);
- uint32 maxItemLevel = GetTemplate()->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL);
+ uint32 minItemLevel = owner->m_unitData->MinItemLevel;
+ uint32 minItemLevelCutoff = owner->m_unitData->MinItemLevelCutoff;
+ uint32 maxItemLevel = GetTemplate()->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->m_unitData->MaxItemLevel;
bool pvpBonus = owner->IsUsingPvpItemLevels();
return Item::GetItemLevel(GetTemplate(), _bonusData, owner->getLevel(), GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), GetModifier(ITEM_MODIFIER_UPGRADE_ID),
minItemLevel, minItemLevelCutoff, maxItemLevel, pvpBonus);
@@ -2313,7 +2255,7 @@ ItemDisenchantLootEntry const* Item::GetDisenchantLoot(ItemTemplate const* itemT
uint32 Item::GetDisplayId(Player const* owner) const
{
ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS;
- if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific))
+ if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific)
transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()];
if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier)))
@@ -2330,19 +2272,48 @@ ItemModifiedAppearanceEntry const* Item::GetItemModifiedAppearance() const
uint32 Item::GetModifier(ItemModifier modifier) const
{
- return GetDynamicValue(ITEM_DYNAMIC_FIELD_MODIFIERS, modifier);
+ if (!(*m_itemData->ModifiersMask & (1 << modifier)))
+ return 0;
+
+ uint32 valueIndex = 0;
+ uint32 mask = m_itemData->ModifiersMask;
+ for (uint32 i = 0; i < modifier; ++i)
+ if (mask & (1 << i))
+ ++valueIndex;
+
+ return m_itemData->Modifiers[valueIndex];
}
void Item::SetModifier(ItemModifier modifier, uint32 value)
{
- ApplyModFlag(ITEM_FIELD_MODIFIERS_MASK, 1 << modifier, value != 0);
- SetDynamicValue(ITEM_DYNAMIC_FIELD_MODIFIERS, modifier, value);
+ uint32 valueIndex = 0;
+ uint32 mask = m_itemData->ModifiersMask;
+ for (uint32 i = 0; i < modifier; ++i)
+ if (mask & (1 << i))
+ ++valueIndex;
+
+ if (value)
+ {
+ if (mask & (1 << modifier))
+ return;
+
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ModifiersMask), 1 << modifier);
+ InsertDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Modifiers), valueIndex) = value;
+ }
+ else
+ {
+ if (!(mask & (1 << modifier)))
+ return;
+
+ RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ModifiersMask), 1 << modifier);
+ RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Modifiers), valueIndex);
+ }
}
uint32 Item::GetVisibleEntry(Player const* owner) const
{
ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS;
- if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific))
+ if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific)
transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()];
if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier)))
@@ -2354,7 +2325,7 @@ uint32 Item::GetVisibleEntry(Player const* owner) const
uint16 Item::GetVisibleAppearanceModId(Player const* owner) const
{
ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS;
- if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific))
+ if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific)
transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()];
if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier)))
@@ -2366,7 +2337,7 @@ uint16 Item::GetVisibleAppearanceModId(Player const* owner) const
uint32 Item::GetVisibleEnchantmentId(Player const* owner) const
{
ItemModifier illusionModifier = ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS;
- if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, IllusionModifierMaskSpecSpecific))
+ if (*m_itemData->ModifiersMask & IllusionModifierMaskSpecSpecific)
illusionModifier = IllusionModifierSlotBySpec[owner->GetActiveTalentGroup()];
if (uint32 enchantIllusion = GetModifier(illusionModifier))
@@ -2385,48 +2356,72 @@ uint16 Item::GetVisibleItemVisual(Player const* owner) const
void Item::AddBonuses(uint32 bonusListID)
{
- if (HasDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, bonusListID))
+ if (std::find(m_itemData->BonusListIDs->begin(), m_itemData->BonusListIDs->end(), bonusListID) != m_itemData->BonusListIDs->end())
return;
if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(bonusListID))
{
- AddDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, bonusListID);
+ std::vector<int32> bonusListIDs = m_itemData->BonusListIDs;
+ bonusListIDs.push_back(bonusListID);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::move(bonusListIDs));
for (ItemBonusEntry const* bonus : *bonuses)
_bonusData.AddBonus(bonus->Type, bonus->Value);
- SetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID, _bonusData.AppearanceModID);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID);
}
}
-DynamicFieldStructuredView<ItemDynamicFieldArtifactPowers> Item::GetArtifactPowers() const
+void Item::SetBonuses(std::vector<int32> bonusListIDs)
+{
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::move(bonusListIDs));
+
+ for (int32 bonusListID : *m_itemData->BonusListIDs)
+ if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(bonusListID))
+ for (ItemBonusEntry const* bonus : *bonuses)
+ _bonusData.AddBonus(bonus->Type, bonus->Value);
+
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID);
+}
+
+void Item::ClearBonuses()
{
- return GetDynamicStructuredValues<ItemDynamicFieldArtifactPowers>(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::vector<int32>());
+ _bonusData.Initialize(GetTemplate());
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID);
}
-ItemDynamicFieldArtifactPowers const* Item::GetArtifactPower(uint32 artifactPowerId) const
+UF::ArtifactPower const* Item::GetArtifactPower(uint32 artifactPowerId) const
{
auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId);
if (indexItr != m_artifactPowerIdToIndex.end())
- return GetDynamicStructuredValue<ItemDynamicFieldArtifactPowers>(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS, indexItr->second);
+ return &m_itemData->ArtifactPowers[indexItr->second];
return nullptr;
}
-void Item::SetArtifactPower(ItemDynamicFieldArtifactPowers const* artifactPower, bool createIfMissing /*= false*/)
+void Item::AddArtifactPower(ArtifactPowerLoadInfo const* artifactPower)
+{
+ uint16 index = uint16(m_artifactPowerIdToIndex.size());
+ m_artifactPowerIdToIndex[artifactPower->ArtifactPowerId] = index;
+
+ UF::ArtifactPower& powerField = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactPowers));
+ powerField.ArtifactPowerID = artifactPower->ArtifactPowerId;
+ powerField.PurchasedRank = artifactPower->PurchasedRank;
+ powerField.CurrentRankWithBonus = artifactPower->CurrentRankWithBonus;
+}
+
+void Item::SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus)
{
- auto indexItr = m_artifactPowerIdToIndex.find(artifactPower->ArtifactPowerId);
- uint16 index;
+ auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId);
if (indexItr != m_artifactPowerIdToIndex.end())
- index = indexItr->second;
- else
{
- if (!createIfMissing)
- return;
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData)
+ .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second)
+ .ModifyValue(&UF::ArtifactPower::PurchasedRank), purchasedRank);
- index = uint16(m_artifactPowerIdToIndex.size());
- m_artifactPowerIdToIndex[artifactPower->ArtifactPowerId] = index;
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData)
+ .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second)
+ .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), currentRankWithBonus);
}
-
- SetDynamicStructuredValue(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS, index, artifactPower);
}
void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier)
@@ -2439,19 +2434,19 @@ void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier)
if (m_artifactPowerIdToIndex.find(artifactPower->ID) != m_artifactPowerIdToIndex.end())
continue;
- ItemDynamicFieldArtifactPowers powerData;
+ ArtifactPowerLoadInfo powerData;
memset(&powerData, 0, sizeof(powerData));
powerData.ArtifactPowerId = artifactPower->ID;
powerData.PurchasedRank = 0;
powerData.CurrentRankWithBonus = (artifactPower->Flags & ARTIFACT_POWER_FLAG_FIRST) == ARTIFACT_POWER_FLAG_FIRST ? 1 : 0;
- SetArtifactPower(&powerData, true);
+ AddArtifactPower(&powerData);
}
}
uint32 Item::GetTotalPurchasedArtifactPowers() const
{
uint32 purchasedRanks = 0;
- for (ItemDynamicFieldArtifactPowers const& power : GetArtifactPowers())
+ for (UF::ArtifactPower const& power : m_itemData->ArtifactPowers)
purchasedRanks += power.PurchasedRank;
return purchasedRanks;
@@ -2466,40 +2461,52 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc
switch (enchant->Effect[i])
{
case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE:
- for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers())
+ for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex)
{
- if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label) == enchant->EffectArg[i])
+ UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex];
+ if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label) == enchant->EffectArg[i])
{
- ItemDynamicFieldArtifactPowers newPower = artifactPower;
+ uint8 newRank = artifactPower.CurrentRankWithBonus;
if (apply)
- newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i];
+ newRank += enchant->EffectPointsMin[i];
else
- newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i];
+ newRank -= enchant->EffectPointsMin[i];
- if (IsEquipped())
- if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0))
- owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData)
+ .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex)
+ .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank);
- SetArtifactPower(&newPower);
+ if (IsEquipped())
+ if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0))
+ owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0);
}
}
break;
case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID:
- if (ItemDynamicFieldArtifactPowers const* artifactPower = GetArtifactPower(enchant->EffectArg[i]))
+ {
+ auto indexItr = m_artifactPowerIdToIndex.find(enchant->EffectArg[i]);
+ uint16 index;
+ if (indexItr != m_artifactPowerIdToIndex.end())
+ index = indexItr->second;
+
+ if (uint16 const* artifactPowerIndex = Trinity::Containers::MapGetValuePtr(m_artifactPowerIdToIndex, enchant->EffectArg[i]))
{
- ItemDynamicFieldArtifactPowers newPower = *artifactPower;
+ uint8 newRank = m_itemData->ArtifactPowers[*artifactPowerIndex].CurrentRankWithBonus;
if (apply)
- newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i];
+ newRank += enchant->EffectPointsMin[i];
else
- newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i];
+ newRank -= enchant->EffectPointsMin[i];
- if (IsEquipped())
- if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0))
- owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData)
+ .ModifyValue(&UF::ItemData::ArtifactPowers, *artifactPowerIndex)
+ .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank);
- SetArtifactPower(&newPower);
+ if (IsEquipped())
+ if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(m_itemData->ArtifactPowers[*artifactPowerIndex].ArtifactPowerID, newRank ? newRank - 1 : 0))
+ owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0);
}
break;
+ }
case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER:
if (slot >= SOCK_ENCHANTMENT_SLOT && slot <= SOCK_ENCHANTMENT_SLOT_3 && _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT] != -1)
{
@@ -2508,21 +2515,24 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc
PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactPowerPicker->PlayerConditionID);
if (!playerCondition || sConditionMgr->IsPlayerMeetingCondition(owner, playerCondition))
{
- for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers())
+ for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex)
{
- if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT])
+ UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex];
+ if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT])
{
- ItemDynamicFieldArtifactPowers newPower = artifactPower;
+ uint8 newRank = artifactPower.CurrentRankWithBonus;
if (apply)
- newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i];
+ newRank += enchant->EffectPointsMin[i];
else
- newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i];
+ newRank -= enchant->EffectPointsMin[i];
- if (IsEquipped())
- if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0))
- owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData)
+ .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex)
+ .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank);
- SetArtifactPower(&newPower);
+ if (IsEquipped())
+ if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0))
+ owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0);
}
}
}
@@ -2566,7 +2576,7 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego
amount = 5 * (amount / 5);
}
- SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) + amount);
+ SetArtifactXP(m_itemData->ArtifactXP + amount);
WorldPackets::Artifact::ArtifactXpGain artifactXpGain;
artifactXpGain.ArtifactGUID = GetGUID();
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 39d4c7fe166..16184639970 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -108,15 +108,14 @@ private:
} _state;
};
-#pragma pack(push, 1)
-struct ItemDynamicFieldArtifactPowers
+struct ArtifactPowerLoadInfo
{
uint32 ArtifactPowerId;
uint8 PurchasedRank;
uint8 CurrentRankWithBonus;
- uint16 Padding;
};
+#pragma pack(push, 1)
struct ItemDynamicFieldGems
{
uint32 ItemId;
@@ -141,23 +140,43 @@ class TC_GAME_API Item : public Object
ItemTemplate const* GetTemplate() const;
BonusData const* GetBonus() const { return &_bonusData; }
- ObjectGuid GetOwnerGUID() const { return GetGuidValue(ITEM_FIELD_OWNER); }
- void SetOwnerGUID(ObjectGuid guid) { SetGuidValue(ITEM_FIELD_OWNER, guid); }
+ ObjectGuid GetOwnerGUID() const { return m_itemData->Owner; }
+ void SetOwnerGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Owner), guid); }
+ ObjectGuid GetContainedIn() const { return m_itemData->ContainedIn; }
+ void SetContainedIn(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ContainedIn), guid); }
+ ObjectGuid GetCreator() const { return m_itemData->Creator; }
+ void SetCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Creator), guid); }
+ ObjectGuid GetGiftCreator() const { return m_itemData->GiftCreator; }
+ void SetGiftCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::GiftCreator), guid); }
Player* GetOwner() const;
+ void SetExpiration(uint32 expiration) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Expiration), expiration); }
+
ItemBondingType GetBonding() const { return _bonusData.Bonding; }
- void SetBinding(bool val) { ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, val); }
- bool IsSoulBound() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND); }
+ void SetBinding(bool val)
+ {
+ if (val)
+ AddItemFlag(ITEM_FIELD_FLAG_SOULBOUND);
+ else
+ RemoveItemFlag(ITEM_FIELD_FLAG_SOULBOUND);
+ }
+ bool HasItemFlag(ItemFieldFlags flag) const { return (*m_itemData->DynamicFlags & flag) != 0; }
+ void AddItemFlag(ItemFieldFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); }
+ void RemoveItemFlag(ItemFieldFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); }
+ void SetItemFlags(ItemFieldFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); }
+ bool IsSoulBound() const { return HasItemFlag(ITEM_FIELD_FLAG_SOULBOUND); }
bool IsBoundAccountWide() const { return (GetTemplate()->GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT) != 0; }
bool IsBattlenetAccountBound() const { return (GetTemplate()->GetFlags2() & ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK) != 0; }
bool IsBindedNotWith(Player const* player) const;
bool IsBoundByEnchant() const;
virtual void SaveToDB(SQLTransaction& trans);
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fields, uint32 entry);
- void LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ItemDynamicFieldArtifactPowers>& powers); // must be called after LoadFromDB to have gems (relics) initialized
+ void LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerLoadInfo>& powers); // must be called after LoadFromDB to have gems (relics) initialized
void CheckArtifactRelicSlotUnlock(Player const* owner);
void AddBonuses(uint32 bonusListID);
+ void SetBonuses(std::vector<int32> bonusListIDs);
+ void ClearBonuses();
static void DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid);
virtual void DeleteFromDB(SQLTransaction& trans);
@@ -178,11 +197,12 @@ class TC_GAME_API Item : public Object
Bag* ToBag() { if (IsBag()) return reinterpret_cast<Bag*>(this); else return NULL; }
const Bag* ToBag() const { if (IsBag()) return reinterpret_cast<const Bag*>(this); else return NULL; }
- bool IsLocked() const { return !HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED); }
+ bool IsLocked() const { return !HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); }
bool IsBag() const { return GetTemplate()->GetInventoryType() == INVTYPE_BAG; }
bool IsCurrencyToken() const { return GetTemplate()->IsCurrencyToken(); }
bool IsNotEmptyBag() const;
- bool IsBroken() const { return GetUInt32Value(ITEM_FIELD_MAXDURABILITY) > 0 && GetUInt32Value(ITEM_FIELD_DURABILITY) == 0; }
+ bool IsBroken() const { return *m_itemData->MaxDurability > 0 && *m_itemData->Durability == 0; }
+ void SetDurability(uint32 durability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Durability), durability); }
bool CanBeTraded(bool mail = false, bool trade = false) const;
void SetInTrade(bool b = true) { mb_in_trade = b; }
bool IsInTrade() const { return mb_in_trade; }
@@ -194,7 +214,7 @@ class TC_GAME_API Item : public Object
bool IsLimitedToAnotherMapOrZone(uint32 cur_mapId, uint32 cur_zoneId) const;
bool GemsFitSockets() const;
- uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); }
+ uint32 GetCount() const { return m_itemData->StackCount; }
void SetCount(uint32 value);
uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); }
uint8 GetGemCountWithID(uint32 GemID) const;
@@ -214,20 +234,16 @@ class TC_GAME_API Item : public Object
uint32 GetSkill();
// RandomPropertyId (signed but stored as unsigned)
- int32 GetItemRandomPropertyId() const { return GetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID); }
- uint32 GetItemSuffixFactor() const { return GetUInt32Value(ITEM_FIELD_PROPERTY_SEED); }
void SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId);
- void UpdateItemSuffixFactor();
ItemRandomEnchantmentId GetItemRandomEnchantmentId() const { return m_randomEnchantment; }
void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, ObjectGuid caster = ObjectGuid::Empty);
void SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* owner);
void SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges);
void ClearEnchantment(EnchantmentSlot slot);
- uint32 GetEnchantmentId(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_ID_OFFSET);}
- uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET);}
- uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET);}
- DynamicFieldStructuredView<ItemDynamicFieldGems> GetGems() const;
- ItemDynamicFieldGems const* GetGem(uint16 slot) const;
+ uint32 GetEnchantmentId(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].ID; }
+ uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Duration; }
+ uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Charges; }
+ UF::SocketedGem const* GetGem(uint16 slot) const;
void SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel);
std::string const& GetText() const { return m_text; }
@@ -237,10 +253,11 @@ class TC_GAME_API Item : public Object
void SendTimeUpdate(Player* owner);
void UpdateDuration(Player* owner, uint32 diff);
+ void SetCreatePlayedTime(uint32 createPlayedTime) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::CreatePlayedTime), createPlayedTime); }
// spell charges (signed but stored as unsigned)
- int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return GetInt32Value(ITEM_FIELD_SPELL_CHARGES + index); }
- void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetInt32Value(ITEM_FIELD_SPELL_CHARGES + index, value); }
+ int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return m_itemData->SpellCharges[index]; }
+ void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::SpellCharges, index), value); }
Loot loot;
bool m_lootGenerated;
@@ -270,8 +287,8 @@ class TC_GAME_API Item : public Object
int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; }
int32 GetItemStatValue(uint32 index, Player const* owner) const;
SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); }
- uint32 GetAppearanceModId() const { return GetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID); }
- void SetAppearanceModId(uint32 appearanceModId) { SetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID, appearanceModId); }
+ uint32 GetAppearanceModId() const { return m_itemData->ItemAppearanceModID; }
+ void SetAppearanceModId(uint32 appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), appearanceModId); }
uint32 GetArmor(Player const* owner) const { return GetTemplate()->GetArmor(GetItemLevel(owner)); }
void GetDamage(Player const* owner, float& minDamage, float& maxDamage) const { GetTemplate()->GetDamage(GetItemLevel(owner), minDamage, maxDamage); }
uint32 GetDisplayId(Player const* owner) const;
@@ -302,7 +319,11 @@ class TC_GAME_API Item : public Object
bool CheckSoulboundTradeExpire();
void BuildUpdate(UpdateDataMapType&) override;
- void BuildDynamicValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override;
+ UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override;
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
+ void ClearUpdateMask(bool remove) override;
void AddToObjectUpdate() override;
void RemoveFromObjectUpdate() override;
@@ -322,23 +343,31 @@ class TC_GAME_API Item : public Object
uint32 GetVisibleEnchantmentId(Player const* owner) const;
uint16 GetVisibleItemVisual(Player const* owner) const;
-
uint32 GetModifier(ItemModifier modifier) const;
void SetModifier(ItemModifier modifier, uint32 value);
ObjectGuid GetChildItem() const { return m_childItem; }
void SetChildItem(ObjectGuid childItem) { m_childItem = childItem; }
- DynamicFieldStructuredView<ItemDynamicFieldArtifactPowers> GetArtifactPowers() const;
- ItemDynamicFieldArtifactPowers const* GetArtifactPower(uint32 artifactPowerId) const;
- void SetArtifactPower(ItemDynamicFieldArtifactPowers const* artifactPower, bool createIfMissing = false);
+ UF::ArtifactPower const* GetArtifactPower(uint32 artifactPowerId) const;
+ void AddArtifactPower(ArtifactPowerLoadInfo const* artifactPower);
+ void SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus);
void InitArtifactPowers(uint8 artifactId, uint8 artifactTier);
uint32 GetTotalPurchasedArtifactPowers() const;
void ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enchantId, bool apply, Player* owner);
void CopyArtifactDataFromParent(Item* parent);
+ void SetArtifactXP(uint64 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); }
void GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId);
+
+ void SetContext(int32 context) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Context), context); }
+
+ void SetPetitionId(uint32 petitionId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::ID), petitionId); }
+ void SetPetitionNumSignatures(uint32 signatures) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::Duration), signatures); }
+
+ UF::UpdateField<UF::ItemData, 0, TYPEID_ITEM> m_itemData;
+
protected:
BonusData _bonusData;
diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
index f0ff4af5b64..7e75ab991d5 100644
--- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
+++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
@@ -186,18 +186,6 @@ ItemRandomEnchantmentId GenerateItemRandomPropertyId(uint32 item_id)
return GetItemEnchantMod(itemProto->GetRandomSuffix(), ItemRandomEnchantmentType::Suffix);
}
-uint32 GenerateEnchSuffixFactor(uint32 item_id)
-{
- ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_id);
-
- if (!itemProto)
- return 0;
- if (!itemProto->GetRandomSuffix())
- return 0;
-
- return GetRandomPropertyPoints(itemProto->GetBaseItemLevel(), itemProto->GetQuality(), itemProto->GetInventoryType(), itemProto->GetSubClass());
-}
-
TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subClass)
{
uint32 propIndex;
diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.h b/src/server/game/Entities/Item/ItemEnchantmentMgr.h
index 90fdeec6f83..91e208cbeb7 100644
--- a/src/server/game/Entities/Item/ItemEnchantmentMgr.h
+++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.h
@@ -39,7 +39,6 @@ struct ItemRandomEnchantmentId
TC_GAME_API void LoadRandomEnchantmentsTable();
TC_GAME_API ItemRandomEnchantmentId GenerateItemRandomPropertyId(uint32 item_id);
-TC_GAME_API uint32 GenerateEnchSuffixFactor(uint32 item_id);
TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subclass);
#endif
diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp
index 69560dc6e8b..3207cdbb146 100644
--- a/src/server/game/Entities/Item/ItemTemplate.cpp
+++ b/src/server/game/Entities/Item/ItemTemplate.cpp
@@ -241,9 +241,9 @@ bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alway
if (GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT && alwaysAllowBoundToAccount)
return true;
- uint32 spec = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID);
+ uint32 spec = player->GetLootSpecId();
if (!spec)
- spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
+ spec = player->GetPrimarySpecialization();
if (!spec)
spec = player->GetDefaultSpecId();
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index ca25867df39..1b65a041fdc 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -43,7 +43,6 @@
#include "Transport.h"
#include "Unit.h"
#include "UpdateData.h"
-#include "UpdateFieldFlags.h"
#include "Util.h"
#include "VMapFactory.h"
#include "Vehicle.h"
@@ -61,19 +60,12 @@ constexpr float VisibilityDistances[AsUnderlyingType(VisibilityDistanceType::Max
MAX_VISIBILITY_DISTANCE
};
-Object::Object()
+Object::Object() : m_values(this)
{
m_objectTypeId = TYPEID_OBJECT;
m_objectType = TYPEMASK_OBJECT;
m_updateFlag.Clear();
- m_uint32Values = nullptr;
- _dynamicValues = nullptr;
- _dynamicChangesArrayMask = nullptr;
- m_valuesCount = 0;
- _dynamicValuesCount = 0;
- _fieldNotifyFlags = UF_FLAG_DYNAMIC;
-
m_inWorld = false;
m_objectUpdated = false;
}
@@ -108,46 +100,12 @@ Object::~Object()
TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in update list!!", GetGUID().ToString().c_str());
ABORT();
}
-
- delete[] m_uint32Values;
- m_uint32Values = nullptr;
-
- delete[] _dynamicValues;
- _dynamicValues = nullptr;
-
- delete[] _dynamicChangesArrayMask;
- _dynamicChangesArrayMask = nullptr;
-}
-
-void Object::_InitValues()
-{
- m_uint32Values = new uint32[m_valuesCount];
- memset(m_uint32Values, 0, m_valuesCount * sizeof(uint32));
-
- _changesMask.resize(m_valuesCount);
- _dynamicChangesMask.resize(_dynamicValuesCount);
- if (_dynamicValuesCount)
- {
- _dynamicValues = new std::vector<uint32>[_dynamicValuesCount];
- _dynamicChangesArrayMask = new std::vector<uint8>[_dynamicValuesCount];
- }
-
- m_objectUpdated = false;
}
void Object::_Create(ObjectGuid const& guid)
{
- if (!m_uint32Values) _InitValues();
-
- SetGuidValue(OBJECT_FIELD_GUID, guid);
-}
-
-std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const
-{
- std::ostringstream ss;
- for (uint16 index = 0; index < size; ++index)
- ss << GetUInt32Value(index + startIndex) << ' ';
- return ss.str();
+ m_objectUpdated = false;
+ m_guid = guid;
}
void Object::AddToWorld()
@@ -155,8 +113,6 @@ void Object::AddToWorld()
if (m_inWorld)
return;
- ASSERT(m_uint32Values);
-
m_inWorld = true;
// synchronize values mirror with values array (changes will send in updatecreate opcode any way
@@ -259,11 +215,9 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
buf << uint8(updateType);
buf << GetGUID();
buf << uint8(objectType);
- buf << uint32(objectTypeMask);
BuildMovementUpdate(&buf, flags);
- BuildValuesUpdate(updateType, &buf, target);
- BuildDynamicValuesUpdate(updateType, &buf, target);
+ BuildValuesCreate(&buf, target);
data->AddUpdateBlock(buf);
}
@@ -281,15 +235,26 @@ void Object::SendUpdateToPlayer(Player* player)
player->SendDirectMessage(&packet);
}
-void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) const
+void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const
+{
+ ByteBuffer buf(500);
+
+ buf << uint8(UPDATETYPE_VALUES);
+ buf << GetGUID();
+
+ BuildValuesUpdate(&buf, target);
+
+ data->AddUpdateBlock(buf);
+}
+
+void Object::BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const
{
ByteBuffer buf(500);
buf << uint8(UPDATETYPE_VALUES);
buf << GetGUID();
- BuildValuesUpdate(UPDATETYPE_VALUES, &buf, target);
- BuildDynamicValuesUpdate(UPDATETYPE_VALUES, &buf, target);
+ BuildValuesUpdateWithFlag(&buf, flags, target);
data->AddUpdateBlock(buf);
}
@@ -310,50 +275,6 @@ void Object::DestroyForPlayer(Player* target) const
target->SendDirectMessage(&packet);
}
-int32 Object::GetInt32Value(uint16 index) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_int32Values[index];
-}
-
-uint32 Object::GetUInt32Value(uint16 index) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_uint32Values[index];
-}
-
-uint64 Object::GetUInt64Value(uint16 index) const
-{
- ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false));
- return *((uint64*)&(m_uint32Values[index]));
-}
-
-float Object::GetFloatValue(uint16 index) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_floatValues[index];
-}
-
-uint8 Object::GetByteValue(uint16 index, uint8 offset) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 4);
- return *(((uint8*)&m_uint32Values[index])+offset);
-}
-
-uint16 Object::GetUInt16Value(uint16 index, uint8 offset) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 2);
- return *(((uint16*)&m_uint32Values[index])+offset);
-}
-
-ObjectGuid const& Object::GetGuidValue(uint16 index) const
-{
- ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false));
- return *((ObjectGuid*)&(m_uint32Values[index]));
-}
-
void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
{
std::vector<uint32> const* PauseTimes = nullptr;
@@ -829,75 +750,18 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
}
}
-void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
+UF::UpdateFieldFlag Object::GetUpdateFieldFlagsFor(Player const* /*target*/) const
{
- if (!target)
- return;
-
- std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount);
-
- uint32* flags = NULL;
- uint32 visibleFlag = GetUpdateFieldData(target, flags);
- ASSERT(flags);
-
- *data << uint8(blockCount);
- std::size_t maskPos = data->wpos();
- data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType));
-
- for (uint16 index = 0; index < m_valuesCount; ++index)
- {
- if (_fieldNotifyFlags & flags[index] ||
- ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)))
- {
- UpdateMask::SetUpdateBit(data->contents() + maskPos, index);
- *data << m_uint32Values[index];
- }
- }
+ return UF::UpdateFieldFlag::None;
}
-void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
+void Object::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag /*flags*/, Player const* /*target*/) const
{
- if (!target)
- return;
-
- std::size_t valueCount = _dynamicValuesCount;
- if (target != this && GetTypeId() == TYPEID_PLAYER)
- valueCount = PLAYER_DYNAMIC_END;
-
- std::size_t blockCount = UpdateMask::GetBlockCount(valueCount);
-
- uint32* flags = nullptr;
- uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags);
-
- *data << uint8(blockCount);
- std::size_t maskPos = data->wpos();
- data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType));
-
- for (uint16 index = 0; index < valueCount; ++index)
- {
- std::vector<uint32> const& values = _dynamicValues[index];
- if (_fieldNotifyFlags & flags[index] ||
- ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] != UpdateMask::UNCHANGED : !values.empty()) && (flags[index] & visibleFlag)))
- {
- UpdateMask::SetUpdateBit(data->contents() + maskPos, index);
-
- std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size());
- *data << uint16(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType));
- if (_dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED && updateType == UPDATETYPE_VALUES)
- *data << uint32(values.size());
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(0);
- std::size_t arrayMaskPos = data->wpos();
- data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType));
- for (std::size_t v = 0; v < values.size(); ++v)
- {
- if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v])
- {
- UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v);
- *data << uint32(values[v]);
- }
- }
- }
- }
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
}
void Object::AddToObjectUpdateIfNeeded()
@@ -911,10 +775,7 @@ void Object::AddToObjectUpdateIfNeeded()
void Object::ClearUpdateMask(bool remove)
{
- memset(_changesMask.data(), 0, _changesMask.size());
- _dynamicChangesMask.assign(_dynamicChangesMask.size(), UpdateMask::UNCHANGED);
- for (uint32 i = 0; i < _dynamicValuesCount; ++i)
- memset(_dynamicChangesArrayMask[i].data(), 0, _dynamicChangesArrayMask[i].size());
+ m_values.ClearChangesMask(&Object::m_objectData);
if (m_objectUpdated)
{
@@ -938,599 +799,6 @@ void Object::BuildFieldsUpdate(Player* player, UpdateDataMapType& data_map) cons
BuildValuesUpdateBlockForPlayer(&iter->second, iter->first);
}
-uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const
-{
- uint32 visibleFlag = UF_FLAG_PUBLIC;
-
- if (target == this)
- visibleFlag |= UF_FLAG_PRIVATE;
-
- switch (GetTypeId())
- {
- case TYPEID_ITEM:
- case TYPEID_CONTAINER:
- flags = ContainerUpdateFieldFlags;
- if (((Item const*)this)->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
- break;
- case TYPEID_AZERITE_EMPOWERED_ITEM:
- flags = AzeriteEmpoweredItemUpdateFieldFlags;
- if (((Item const*)this)->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
- break;
- case TYPEID_AZERITE_ITEM:
- flags = AzeriteItemUpdateFieldFlags;
- if (((Item const*)this)->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
- break;
- case TYPEID_UNIT:
- case TYPEID_PLAYER:
- {
- Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself();
- flags = UnitUpdateFieldFlags;
- if (ToUnit()->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
-
- if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO))
- if (ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID()))
- visibleFlag |= UF_FLAG_SPECIAL_INFO;
-
- if (plr && plr->IsInSameRaidWith(target))
- visibleFlag |= UF_FLAG_PARTY_MEMBER;
- break;
- }
- case TYPEID_GAMEOBJECT:
- flags = GameObjectUpdateFieldFlags;
- if (ToGameObject()->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
- break;
- case TYPEID_DYNAMICOBJECT:
- flags = DynamicObjectUpdateFieldFlags;
- if (ToDynObject()->GetCasterGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
- break;
- case TYPEID_CORPSE:
- flags = CorpseUpdateFieldFlags;
- if (ToCorpse()->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
- break;
- case TYPEID_AREATRIGGER:
- flags = AreaTriggerUpdateFieldFlags;
- break;
- case TYPEID_SCENEOBJECT:
- flags = SceneObjectUpdateFieldFlags;
- break;
- case TYPEID_CONVERSATION:
- flags = ConversationUpdateFieldFlags;
- break;
- case TYPEID_OBJECT:
- case TYPEID_ACTIVE_PLAYER:
- ABORT();
- break;
- }
-
- return visibleFlag;
-}
-
-uint32 Object::GetDynamicUpdateFieldData(Player const* target, uint32*& flags) const
-{
- uint32 visibleFlag = UF_FLAG_PUBLIC;
-
- if (target == this)
- visibleFlag |= UF_FLAG_PRIVATE;
-
- switch (GetTypeId())
- {
- case TYPEID_ITEM:
- case TYPEID_CONTAINER:
- case TYPEID_AZERITE_EMPOWERED_ITEM:
- case TYPEID_AZERITE_ITEM:
- flags = ItemDynamicUpdateFieldFlags;
- if (((Item const*)this)->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
- break;
- case TYPEID_UNIT:
- case TYPEID_PLAYER:
- {
- Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself();
- flags = UnitDynamicUpdateFieldFlags;
- if (ToUnit()->GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
-
- if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO))
- if (ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID()))
- visibleFlag |= UF_FLAG_SPECIAL_INFO;
-
- if (plr && plr->IsInSameRaidWith(target))
- visibleFlag |= UF_FLAG_PARTY_MEMBER;
- break;
- }
- case TYPEID_GAMEOBJECT:
- flags = GameObjectDynamicUpdateFieldFlags;
- break;
- case TYPEID_CONVERSATION:
- flags = ConversationDynamicUpdateFieldFlags;
-
- if (ToConversation()->GetCreatorGuid() == target->GetGUID())
- visibleFlag |= UF_FLAG_0x100;
- break;
- default:
- flags = nullptr;
- break;
- }
-
- return visibleFlag;
-}
-
-void Object::_LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count)
-{
- if (data.empty())
- return;
-
- Tokenizer tokens(data, ' ', count);
-
- if (tokens.size() != count)
- return;
-
- for (uint32 index = 0; index < count; ++index)
- {
- m_uint32Values[startOffset + index] = atoul(tokens[index]);
- _changesMask[startOffset + index] = 1;
- }
-}
-
-void Object::SetInt32Value(uint16 index, int32 value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (m_int32Values[index] != value)
- {
- m_int32Values[index] = value;
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetUInt32Value(uint16 index, uint32 value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (m_uint32Values[index] != value)
- {
- m_uint32Values[index] = value;
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::UpdateUInt32Value(uint16 index, uint32 value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- m_uint32Values[index] = value;
- _changesMask[index] = 1;
-}
-
-void Object::SetUInt64Value(uint16 index, uint64 value)
-{
- ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true));
- if (*((uint64*)&(m_uint32Values[index])) != value)
- {
- m_uint32Values[index] = PAIR64_LOPART(value);
- m_uint32Values[index + 1] = PAIR64_HIPART(value);
- _changesMask[index] = 1;
- _changesMask[index + 1] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-bool Object::AddGuidValue(uint16 index, ObjectGuid const& value)
-{
- ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
- if (!value.IsEmpty() && ((ObjectGuid*)&(m_uint32Values[index]))->IsEmpty())
- {
- *((ObjectGuid*)&(m_uint32Values[index])) = value;
- _changesMask[index] = 1;
- _changesMask[index + 1] = 1;
- _changesMask[index + 2] = 1;
- _changesMask[index + 3] = 1;
-
- AddToObjectUpdateIfNeeded();
- return true;
- }
-
- return false;
-}
-
-bool Object::RemoveGuidValue(uint16 index, ObjectGuid const& value)
-{
- ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
- if (!value.IsEmpty() && *((ObjectGuid*)&(m_uint32Values[index])) == value)
- {
- ((ObjectGuid*)&(m_uint32Values[index]))->Clear();
- _changesMask[index] = 1;
- _changesMask[index + 1] = 1;
- _changesMask[index + 2] = 1;
- _changesMask[index + 3] = 1;
-
- AddToObjectUpdateIfNeeded();
- return true;
- }
-
- return false;
-}
-
-void Object::SetFloatValue(uint16 index, float value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (m_floatValues[index] != value)
- {
- m_floatValues[index] = value;
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetByteValue(uint16 index, uint8 offset, uint8 value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (offset > 3)
- {
- TC_LOG_ERROR("misc", "Object::SetByteValue: wrong offset %u", offset);
- return;
- }
-
- if (uint8(m_uint32Values[index] >> (offset * 8)) != value)
- {
- m_uint32Values[index] &= ~uint32(uint32(0xFF) << (offset * 8));
- m_uint32Values[index] |= uint32(uint32(value) << (offset * 8));
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (offset > 1)
- {
- TC_LOG_ERROR("misc", "Object::SetUInt16Value: wrong offset %u", offset);
- return;
- }
-
- if (uint16(m_uint32Values[index] >> (offset * 16)) != value)
- {
- m_uint32Values[index] &= ~uint32(uint32(0xFFFF) << (offset * 16));
- m_uint32Values[index] |= uint32(uint32(value) << (offset * 16));
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetGuidValue(uint16 index, ObjectGuid const& value)
-{
- ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
- if (*((ObjectGuid*)&(m_uint32Values[index])) != value)
- {
- *((ObjectGuid*)&(m_uint32Values[index])) = value;
- _changesMask[index] = 1;
- _changesMask[index + 1] = 1;
- _changesMask[index + 2] = 1;
- _changesMask[index + 3] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetStatFloatValue(uint16 index, float value)
-{
- if (value < 0)
- value = 0.0f;
-
- SetFloatValue(index, value);
-}
-
-void Object::SetStatInt32Value(uint16 index, int32 value)
-{
- if (value < 0)
- value = 0;
-
- SetUInt32Value(index, uint32(value));
-}
-
-void Object::ApplyModUInt32Value(uint16 index, int32 val, bool apply)
-{
- int32 cur = GetUInt32Value(index);
- cur += (apply ? val : -val);
- if (cur < 0)
- cur = 0;
- SetUInt32Value(index, cur);
-}
-
-void Object::ApplyModInt32Value(uint16 index, int32 val, bool apply)
-{
- int32 cur = GetInt32Value(index);
- cur += (apply ? val : -val);
- SetInt32Value(index, cur);
-}
-
-void Object::ApplyModUInt16Value(uint16 index, uint8 offset, int16 val, bool apply)
-{
- int16 cur = GetUInt16Value(index, offset);
- cur += (apply ? val : -val);
- if (cur < 0)
- cur = 0;
- SetUInt16Value(index, offset, cur);
-}
-
-void Object::ApplyModSignedFloatValue(uint16 index, float val, bool apply)
-{
- float cur = GetFloatValue(index);
- cur += (apply ? val : -val);
- SetFloatValue(index, cur);
-}
-
-void Object::ApplyPercentModFloatValue(uint16 index, float val, bool apply)
-{
- float value = GetFloatValue(index);
- ApplyPercentModFloatVar(value, val, apply);
- SetFloatValue(index, value);
-}
-
-void Object::ApplyModPositiveFloatValue(uint16 index, float val, bool apply)
-{
- float cur = GetFloatValue(index);
- cur += (apply ? val : -val);
- if (cur < 0)
- cur = 0;
- SetFloatValue(index, cur);
-}
-
-void Object::SetFlag(uint16 index, uint32 newFlag)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
- uint32 oldval = m_uint32Values[index];
- uint32 newval = oldval | newFlag;
-
- if (oldval != newval)
- {
- m_uint32Values[index] = newval;
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::RemoveFlag(uint16 index, uint32 oldFlag)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
- ASSERT(m_uint32Values);
-
- uint32 oldval = m_uint32Values[index];
- uint32 newval = oldval & ~oldFlag;
-
- if (oldval != newval)
- {
- m_uint32Values[index] = newval;
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::ToggleFlag(uint16 index, uint32 flag)
-{
- if (HasFlag(index, flag))
- RemoveFlag(index, flag);
- else
- SetFlag(index, flag);
-}
-
-bool Object::HasFlag(uint16 index, uint32 flag) const
-{
- if (index >= m_valuesCount && !PrintIndexError(index, false))
- return false;
-
- return (m_uint32Values[index] & flag) != 0;
-}
-
-void Object::ApplyModFlag(uint16 index, uint32 flag, bool apply)
-{
- if (apply) SetFlag(index, flag); else RemoveFlag(index, flag);
-}
-
-void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (offset > 3)
- {
- TC_LOG_ERROR("misc", "Object::SetByteFlag: wrong offset %u", offset);
- return;
- }
-
- if (!(uint8(m_uint32Values[index] >> (offset * 8)) & newFlag))
- {
- m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8));
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag)
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, true));
-
- if (offset > 3)
- {
- TC_LOG_ERROR("misc", "Object::RemoveByteFlag: wrong offset %u", offset);
- return;
- }
-
- if (uint8(m_uint32Values[index] >> (offset * 8)) & oldFlag)
- {
- m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8));
- _changesMask[index] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::ToggleByteFlag(uint16 index, uint8 offset, uint8 flag)
-{
- if (HasByteFlag(index, offset, flag))
- RemoveByteFlag(index, offset, flag);
- else
- SetByteFlag(index, offset, flag);
-}
-
-bool Object::HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 4);
- return (((uint8*)&m_uint32Values[index])[offset] & flag) != 0;
-}
-
-void Object::SetFlag64(uint16 index, uint64 newFlag)
-{
- uint64 oldval = GetUInt64Value(index);
- uint64 newval = oldval | newFlag;
- SetUInt64Value(index, newval);
-}
-
-void Object::RemoveFlag64(uint16 index, uint64 oldFlag)
-{
- uint64 oldval = GetUInt64Value(index);
- uint64 newval = oldval & ~oldFlag;
- SetUInt64Value(index, newval);
-}
-
-void Object::ToggleFlag64(uint16 index, uint64 flag)
-{
- if (HasFlag64(index, flag))
- RemoveFlag64(index, flag);
- else
- SetFlag64(index, flag);
-}
-
-bool Object::HasFlag64(uint16 index, uint64 flag) const
-{
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return (GetUInt64Value(index) & flag) != 0;
-}
-
-void Object::ApplyModFlag64(uint16 index, uint64 flag, bool apply)
-{
- if (apply) SetFlag64(index, flag); else RemoveFlag64(index, flag);
-}
-
-std::vector<uint32> const& Object::GetDynamicValues(uint16 index) const
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- return _dynamicValues[index];
-}
-
-uint32 Object::GetDynamicValue(uint16 index, uint16 offset) const
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- if (offset >= _dynamicValues[index].size())
- return 0;
- return _dynamicValues[index][offset];
-}
-
-bool Object::HasDynamicValue(uint16 index, uint32 value)
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- std::vector<uint32>& values = _dynamicValues[index];
- for (std::size_t i = 0; i < values.size(); ++i)
- if (values[i] == value)
- return true;
-
- return false;
-}
-
-void Object::AddDynamicValue(uint16 index, uint32 value)
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- SetDynamicValue(index, _dynamicValues[index].size(), value);
-}
-
-void Object::RemoveDynamicValue(uint16 index, uint32 value)
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
-
- // TODO: Research if this is blizzlike to just set value to 0
- std::vector<uint32>& values = _dynamicValues[index];
- for (std::size_t i = 0; i < values.size(); ++i)
- {
- if (values[i] == value)
- {
- values[i] = 0;
- _dynamicChangesMask[index] = UpdateMask::VALUE_CHANGED;
- _dynamicChangesArrayMask[index][i] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
- }
-}
-
-void Object::ClearDynamicValue(uint16 index)
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
-
- if (!_dynamicValues[index].empty())
- {
- _dynamicValues[index].clear();
- _dynamicChangesMask[index] = UpdateMask::VALUE_AND_SIZE_CHANGED;
- _dynamicChangesArrayMask[index].clear();
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-void Object::SetDynamicValue(uint16 index, uint16 offset, uint32 value)
-{
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
-
- UpdateMask::DynamicFieldChangeType changeType = UpdateMask::VALUE_CHANGED;
- std::vector<uint32>& values = _dynamicValues[index];
- if (values.size() <= offset)
- {
- values.resize(offset + 1);
- changeType = UpdateMask::VALUE_AND_SIZE_CHANGED;
- }
-
- if (_dynamicChangesArrayMask[index].size() <= offset)
- _dynamicChangesArrayMask[index].resize((offset / 32 + 1) * 32);
-
- if (values[offset] != value || changeType == UpdateMask::VALUE_AND_SIZE_CHANGED)
- {
- values[offset] = value;
- _dynamicChangesMask[index] = changeType;
- _dynamicChangesArrayMask[index][offset] = 1;
-
- AddToObjectUpdateIfNeeded();
- }
-}
-
-bool Object::PrintIndexError(uint32 index, bool set) const
-{
- TC_LOG_ERROR("misc", "Attempt %s non-existed value field: %u (count: %u) for object typeid: %u type mask: %u", (set ? "set value to" : "get value from"), index, m_valuesCount, GetTypeId(), m_objectType);
-
- // ASSERT must fail after function call
- return false;
-}
-
void MovementInfo::OutDebug()
{
TC_LOG_DEBUG("misc", "MOVEMENT INFO");
@@ -2332,12 +1600,6 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj, bool checkAlert) co
return true;
}
-void Object::ForceValuesUpdateAtIndex(uint32 i)
-{
- _changesMask[i] = 1;
- AddToObjectUpdateIfNeeded();
-}
-
void WorldObject::SendMessageToSet(WorldPacket const* data, bool self) const
{
if (IsInWorld())
@@ -2388,8 +1650,6 @@ void WorldObject::ResetMap()
void WorldObject::AddObjectToRemoveList()
{
- ASSERT(m_uint32Values);
-
Map* map = FindMap();
if (!map)
{
@@ -2480,7 +1740,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
if (summoner)
PhasingHandler::InheritPhaseShift(summon, summoner);
- summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId);
+ summon->SetCreatedBySpell(spellId);
summon->SetHomePosition(pos);
@@ -2783,7 +2043,10 @@ void WorldObject::GetContactPoint(const WorldObject* obj, float &x, float &y, fl
float WorldObject::GetObjectSize() const
{
- return (m_valuesCount > UNIT_FIELD_COMBATREACH) ? m_floatValues[UNIT_FIELD_COMBATREACH] : DEFAULT_WORLD_OBJECT_SIZE;
+ if (Unit const* thisUnit = ToUnit())
+ return thisUnit->m_unitData->CombatReach;
+
+ return DEFAULT_WORLD_OBJECT_SIZE;
}
void WorldObject::MovePosition(Position &pos, float dist, float angle)
@@ -3030,7 +2293,7 @@ struct WorldObjectChangeAccumulator
{
//Caster may be NULL if DynObj is in removelist
if (Player* caster = ObjectAccessor::FindPlayer(guid))
- if (caster->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT) == source->GetGUID())
+ if (*caster->m_activePlayerData->FarsightObject == source->GetGUID())
BuildPacket(caster);
}
}
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 211cb5e221c..00258002f17 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -43,6 +43,7 @@ class DynamicObject;
class GameObject;
class InstanceScript;
class Map;
+class Object;
class Player;
class Scenario;
class TempSummon;
@@ -83,63 +84,38 @@ struct CreateObjectBits
}
};
-namespace UpdateMask
+namespace UF
{
- typedef uint32 BlockType;
-
- enum DynamicFieldChangeType : uint16
- {
- UNCHANGED = 0,
- VALUE_CHANGED = 0x7FFF,
- VALUE_AND_SIZE_CHANGED = 0x8000
- };
-
- inline std::size_t GetBlockCount(std::size_t bitCount)
- {
- using BitsPerBlock = std::integral_constant<std::size_t, sizeof(BlockType) * 8>;
- return (bitCount + BitsPerBlock::value - 1) / BitsPerBlock::value;
- }
-
- inline std::size_t EncodeDynamicFieldChangeType(std::size_t blockCount, DynamicFieldChangeType changeType, uint8 updateType)
+ template<typename T>
+ inline bool SetUpdateFieldValue(UpdateFieldSetter<T>& setter, typename UpdateFieldSetter<T>::ValueType&& value)
{
- return blockCount | ((changeType & VALUE_AND_SIZE_CHANGED) * ((3 - updateType /*this part evaluates to 0 if update type is not VALUES*/) / 3));
+ return setter.SetValue(std::move(value));
}
template<typename T>
- inline void SetUpdateBit(T* data, std::size_t bitIndex)
+ inline typename DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter)
{
- static_assert(std::is_integral<T>::value && std::is_unsigned<T>::value, "Type used for SetUpdateBit data arg is not an unsigned integer");
- using BitsPerBlock = std::integral_constant<std::size_t, sizeof(T) * 8>;
- data[bitIndex / BitsPerBlock::value] |= T(1) << (bitIndex % BitsPerBlock::value);
+ return setter.AddValue();
}
-}
-// Helper class used to iterate object dynamic fields while interpreting them as a structure instead of raw int array
-template<class T>
-class DynamicFieldStructuredView
-{
-public:
- explicit DynamicFieldStructuredView(std::vector<uint32> const& data) : _data(data) { }
-
- T const* begin() const
+ template<typename T>
+ inline typename DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index)
{
- return reinterpret_cast<T const*>(_data.data());
+ return setter.InsertValue(index);
}
- T const* end() const
+ template<typename T>
+ inline void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index)
{
- return reinterpret_cast<T const*>(_data.data() + _data.size());
+ setter.RemoveValue(index);
}
- std::size_t size() const
+ template<typename T>
+ inline void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter<T>& setter)
{
- using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>;
- return _data.size() / BlockCount::value;
+ setter.Clear();
}
-
-private:
- std::vector<uint32> const& _data;
-};
+}
class TC_GAME_API Object
{
@@ -151,12 +127,18 @@ class TC_GAME_API Object
virtual void AddToWorld();
virtual void RemoveFromWorld();
- ObjectGuid const& GetGUID() const { return GetGuidValue(OBJECT_FIELD_GUID); }
- uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); }
- void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); }
+ ObjectGuid const& GetGUID() const { return m_guid; }
+ uint32 GetEntry() const { return m_objectData->EntryID; }
+ void SetEntry(uint32 entry) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::EntryID), entry); }
+
+ float GetObjectScale() const { return m_objectData->Scale; }
+ virtual void SetObjectScale(float scale) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::Scale), scale); }
- float GetObjectScale() const { return GetFloatValue(OBJECT_FIELD_SCALE_X); }
- virtual void SetObjectScale(float scale) { SetFloatValue(OBJECT_FIELD_SCALE_X, scale); }
+ uint32 GetDynamicFlags() const { return m_objectData->DynamicFlags; }
+ bool HasDynamicFlag(uint32 flag) const { return (*m_objectData->DynamicFlags & flag) != 0; }
+ void AddDynamicFlag(uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
+ void RemoveDynamicFlag(uint32 flag) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
+ void SetDynamicFlags(uint32 flag) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
TypeID GetTypeId() const { return m_objectTypeId; }
bool isType(uint16 mask) const { return (mask & m_objectType) != 0; }
@@ -164,126 +146,19 @@ class TC_GAME_API Object
virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
void SendUpdateToPlayer(Player* player);
- void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) const;
+ void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const;
+ void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const;
void BuildOutOfRangeUpdateBlock(UpdateData* data) const;
virtual void DestroyForPlayer(Player* target) const;
- int32 GetInt32Value(uint16 index) const;
- uint32 GetUInt32Value(uint16 index) const;
- uint64 GetUInt64Value(uint16 index) const;
- float GetFloatValue(uint16 index) const;
- uint8 GetByteValue(uint16 index, uint8 offset) const;
- uint16 GetUInt16Value(uint16 index, uint8 offset) const;
- ObjectGuid const& GetGuidValue(uint16 index) const;
-
- void SetInt32Value(uint16 index, int32 value);
- void SetUInt32Value(uint16 index, uint32 value);
- void UpdateUInt32Value(uint16 index, uint32 value);
- void SetUInt64Value(uint16 index, uint64 value);
- void SetFloatValue(uint16 index, float value);
- void SetByteValue(uint16 index, uint8 offset, uint8 value);
- void SetUInt16Value(uint16 index, uint8 offset, uint16 value);
- void SetGuidValue(uint16 index, ObjectGuid const& value);
- void SetStatFloatValue(uint16 index, float value);
- void SetStatInt32Value(uint16 index, int32 value);
-
- bool AddGuidValue(uint16 index, ObjectGuid const& value);
- bool RemoveGuidValue(uint16 index, ObjectGuid const& value);
-
- void ApplyModUInt32Value(uint16 index, int32 val, bool apply);
- void ApplyModInt32Value(uint16 index, int32 val, bool apply);
- void ApplyModUInt16Value(uint16 index, uint8 offset, int16 val, bool apply);
- void ApplyModPositiveFloatValue(uint16 index, float val, bool apply);
- void ApplyModSignedFloatValue(uint16 index, float val, bool apply);
- void ApplyPercentModFloatValue(uint16 index, float val, bool apply);
-
- void SetFlag(uint16 index, uint32 newFlag);
- void RemoveFlag(uint16 index, uint32 oldFlag);
- void ToggleFlag(uint16 index, uint32 flag);
- bool HasFlag(uint16 index, uint32 flag) const;
- void ApplyModFlag(uint16 index, uint32 flag, bool apply);
-
- void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag);
- void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag);
- void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag);
- bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const;
-
- void SetFlag64(uint16 index, uint64 newFlag);
- void RemoveFlag64(uint16 index, uint64 oldFlag);
- void ToggleFlag64(uint16 index, uint64 flag);
- bool HasFlag64(uint16 index, uint64 flag) const;
- void ApplyModFlag64(uint16 index, uint64 flag, bool apply);
-
- std::vector<uint32> const& GetDynamicValues(uint16 index) const;
- uint32 GetDynamicValue(uint16 index, uint16 offset) const;
- bool HasDynamicValue(uint16 index, uint32 value);
- void AddDynamicValue(uint16 index, uint32 value);
- void RemoveDynamicValue(uint16 index, uint32 value);
- void ClearDynamicValue(uint16 index);
- void SetDynamicValue(uint16 index, uint16 offset, uint32 value);
-
- template<class T>
- DynamicFieldStructuredView<T> GetDynamicStructuredValues(uint16 index) const
- {
- static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type");
- using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>;
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- std::vector<uint32> const& values = _dynamicValues[index];
- ASSERT((values.size() % BlockCount::value) == 0, "Dynamic field value count must exactly fit into structure");
- return DynamicFieldStructuredView<T>(values);
- }
-
- template<class T>
- T const* GetDynamicStructuredValue(uint16 index, uint16 offset) const
- {
- static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type");
- using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>;
- ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false));
- std::vector<uint32> const& values = _dynamicValues[index];
- ASSERT((values.size() % BlockCount::value) == 0, "Dynamic field value count must exactly fit into structure");
- if (offset * BlockCount::value >= values.size())
- return nullptr;
- return reinterpret_cast<T const*>(&values[offset * BlockCount::value]);
- }
-
- template<class T>
- void SetDynamicStructuredValue(uint16 index, uint16 offset, T const* value)
- {
- static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type");
- using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>;
- SetDynamicValue(index, (offset + 1) * BlockCount::value - 1, 0); // reserve space
- for (uint16 i = 0; i < BlockCount::value; ++i)
- SetDynamicValue(index, offset * BlockCount::value + i, *(reinterpret_cast<uint32 const*>(value) + i));
- }
-
- template<class T>
- void AddDynamicStructuredValue(uint16 index, T const* value)
- {
- static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type");
- using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>;
- std::vector<uint32> const& values = _dynamicValues[index];
- uint16 offset = uint16(values.size() / BlockCount::value);
- SetDynamicValue(index, (offset + 1) * BlockCount::value - 1, 0); // reserve space
- for (uint16 i = 0; i < BlockCount::value; ++i)
- SetDynamicValue(index, offset * BlockCount::value + i, *(reinterpret_cast<uint32 const*>(value) + i));
- }
-
- void ClearUpdateMask(bool remove);
-
- uint16 GetValuesCount() const { return m_valuesCount; }
+ virtual void ClearUpdateMask(bool remove);
virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
virtual void BuildUpdate(UpdateDataMapType&) { }
void BuildFieldsUpdate(Player*, UpdateDataMapType &) const;
- void SetFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags |= flag; }
- void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= uint16(~flag); }
-
- // FG: some hacky helpers
- void ForceValuesUpdateAtIndex(uint32);
-
inline bool IsPlayer() const { return GetTypeId() == TYPEID_PLAYER; }
Player* ToPlayer() { if (IsPlayer()) return reinterpret_cast<Player*>(this); else return nullptr; }
Player const* ToPlayer() const { if (IsPlayer()) return reinterpret_cast<Player const*>(this); else return nullptr; }
@@ -316,43 +191,117 @@ class TC_GAME_API Object
Conversation* ToConversation() { if (GetTypeId() == TYPEID_CONVERSATION) return reinterpret_cast<Conversation*>(this); else return nullptr; }
Conversation const* ToConversation() const { if (GetTypeId() == TYPEID_CONVERSATION) return reinterpret_cast<Conversation const*>(this); else return nullptr; }
+ UF::UpdateFieldHolder m_values;
+ UF::UpdateField<UF::ObjectData, 0, TYPEID_OBJECT> m_objectData;
+
+ template<typename T>
+ void ForceUpdateFieldChange(UF::UpdateFieldSetter<T> const& /*setter*/)
+ {
+ AddToObjectUpdateIfNeeded();
+ }
+
protected:
Object();
- void _InitValues();
void _Create(ObjectGuid const& guid);
- std::string _ConcatFields(uint16 startIndex, uint16 size) const;
- void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
- uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const;
- uint32 GetDynamicUpdateFieldData(Player const* target, uint32*& flags) const;
+ template<typename T>
+ void SetUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value)
+ {
+ if (UF::SetUpdateFieldValue(setter, std::move(value)))
+ AddToObjectUpdateIfNeeded();
+ }
- void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const;
- virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const;
- virtual void BuildDynamicValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const;
+ template<typename T>
+ void SetUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag)
+ {
+ static_assert(std::is_integral<T>::value, "SetUpdateFieldFlagValue must be used with integral types");
+ SetUpdateFieldValue(setter, setter.GetValue() | flag);
+ }
- uint16 m_objectType;
+ template<typename T>
+ void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag)
+ {
+ static_assert(std::is_integral<T>::value, "RemoveUpdateFieldFlagValue must be used with integral types");
+ SetUpdateFieldValue(setter, setter.GetValue() & ~flag);
+ }
- TypeID m_objectTypeId;
- CreateObjectBits m_updateFlag;
+ template<typename T>
+ typename UF::DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter)
+ {
+ AddToObjectUpdateIfNeeded();
+ return UF::AddDynamicUpdateFieldValue(setter);
+ }
- union
+ template<typename T>
+ typename UF::DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index)
{
- int32 *m_int32Values;
- uint32 *m_uint32Values;
- float *m_floatValues;
- };
+ AddToObjectUpdateIfNeeded();
+ return UF::InsertDynamicUpdateFieldValue(setter, index);
+ }
- std::vector<uint32>* _dynamicValues;
+ template<typename T>
+ void RemoveDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index)
+ {
+ AddToObjectUpdateIfNeeded();
+ UF::RemoveDynamicUpdateFieldValue(setter, index);
+ }
- std::vector<uint8> _changesMask;
- std::vector<UpdateMask::DynamicFieldChangeType> _dynamicChangesMask;
- std::vector<uint8>* _dynamicChangesArrayMask;
+ template<typename T>
+ void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter<T> setter)
+ {
+ AddToObjectUpdateIfNeeded();
+ UF::ClearDynamicUpdateFieldValues(setter);
+ }
- uint16 m_valuesCount;
- uint16 _dynamicValuesCount;
+ // stat system helpers
+ template<typename T>
+ void SetUpdateFieldStatValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value)
+ {
+ static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
+ SetUpdateFieldValue(setter, std::max(value, T(0)));
+ }
+
+ template<typename T>
+ void ApplyModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType mod, bool apply)
+ {
+ static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
+
+ T value = setter.GetValue();
+ if (apply)
+ value += mod;
+ else
+ value -= mod;
+
+ SetUpdateFieldValue(setter, value);
+ }
+
+ template<typename T>
+ void ApplyPercentModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, float percent, bool apply)
+ {
+ static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
+
+ T value = setter.GetValue();
- uint16 _fieldNotifyFlags;
+ // don't want to include Util.h here
+ //ApplyPercentModFloatVar(value, percent, apply);
+ if (percent == -100.0f)
+ percent = -99.99f;
+ value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent));
+
+ SetUpdateFieldValue(setter, value);
+ }
+
+ void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const;
+ virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const;
+ virtual void BuildValuesCreate(ByteBuffer* data, Player const* target) const = 0;
+ virtual void BuildValuesUpdate(ByteBuffer* data, Player const* target) const = 0;
+ virtual void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const;
+
+ uint16 m_objectType;
+
+ TypeID m_objectTypeId;
+ CreateObjectBits m_updateFlag;
virtual void AddToObjectUpdate() = 0;
virtual void RemoveFromObjectUpdate() = 0;
@@ -361,10 +310,9 @@ class TC_GAME_API Object
bool m_objectUpdated;
private:
+ ObjectGuid m_guid;
bool m_inWorld;
- // for output helpfull error messages from asserts
- bool PrintIndexError(uint32 index, bool set) const;
Object(Object const& right) = delete;
Object& operator=(Object const& right) = delete;
};
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index 0ec1e401254..dd79adc9792 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -23,7 +23,7 @@
#include <G3D/g3dmath.h>
#include <sstream>
-bool Position::operator==(Position const &a)
+bool Position::operator==(Position const &a) const
{
return (G3D::fuzzyEq(a.m_positionX, m_positionX) &&
G3D::fuzzyEq(a.m_positionY, m_positionY) &&
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index a5d9651d541..b2f8e312766 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -60,9 +60,9 @@ private:
float m_orientation;
public:
- bool operator==(Position const &a);
+ bool operator==(Position const &a) const;
- inline bool operator!=(Position const &a)
+ inline bool operator!=(Position const &a) const
{
return !(operator==(a));
}
@@ -284,6 +284,9 @@ struct TaggedPosition
operator Position() const { return Pos; }
+ friend bool operator==(TaggedPosition const& left, TaggedPosition const& right) { return left.Pos == right.Pos; }
+ friend bool operator!=(TaggedPosition const& left, TaggedPosition const& right) { return left.Pos != right.Pos; }
+
friend ByteBuffer& operator<<(ByteBuffer& buf, TaggedPosition const& tagged) { return buf << Position::ConstStreamer<Tag>(tagged.Pos); }
friend ByteBuffer& operator>>(ByteBuffer& buf, TaggedPosition& tagged) { return buf >> Position::Streamer<Tag>(tagged.Pos); }
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.cpp b/src/server/game/Entities/Object/Updates/UpdateField.cpp
new file mode 100644
index 00000000000..3ebd711e4fa
--- /dev/null
+++ b/src/server/game/Entities/Object/Updates/UpdateField.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "UpdateField.h"
+#include "ByteBuffer.h"
+
+void UF::WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data)
+{
+ data.WriteBits(size, 32);
+ if (size > 32)
+ {
+ if (data.HasUnfinishedBitPack())
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data.WriteBits(updateMask[block], 32);
+ else
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data << uint32(updateMask[block]);
+ }
+
+ if (size % 32)
+ data.WriteBits(updateMask.back(), size % 32);
+}
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h
new file mode 100644
index 00000000000..99a0cce9d8d
--- /dev/null
+++ b/src/server/game/Entities/Object/Updates/UpdateField.h
@@ -0,0 +1,612 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef UpdateField_h__
+#define UpdateField_h__
+
+#include "ObjectGuid.h"
+#include "UpdateMask.h"
+#include <vector>
+
+class ByteBuffer;
+class Object;
+
+namespace UF
+{
+ enum class UpdateFieldFlag : uint8
+ {
+ None = 0,
+ Owner = 0x01,
+ PartyMember = 0x02,
+ UnitAll = 0x04,
+ Empath = 0x08
+ };
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ class UpdateField;
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ class UpdateFieldArray;
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ class DynamicUpdateField;
+
+ template<typename T, bool PublicSet>
+ struct MutableFieldReference;
+
+ struct IsUpdateFieldStructureTag
+ {
+ };
+ struct HasChangesMaskTag
+ {
+ };
+
+ template<typename T>
+ struct UpdateFieldSetter
+ {
+ using ValueType = T;
+
+ template<typename F>
+ friend bool SetUpdateFieldValue(UpdateFieldSetter<F>& setter, typename UpdateFieldSetter<F>::ValueType&& value);
+
+ UpdateFieldSetter(T& value) : _value(value)
+ {
+ }
+
+ T GetValue() const
+ {
+ return _value;
+ }
+
+ private:
+ bool SetValue(T value)
+ {
+ if (_value != value)
+ {
+ _value = std::move(value);
+ return true;
+ }
+ return false;
+ }
+
+ T& _value;
+ };
+
+ // Same as UpdateFieldSetter but with public setter, used to set member fields for values added to dynamic fields
+ template<typename T>
+ struct UpdateFieldPublicSetter
+ {
+ using ValueType = T;
+
+ UpdateFieldPublicSetter(T& value) : _value(value)
+ {
+ }
+
+ T GetValue() const
+ {
+ return _value;
+ }
+
+ void SetValue(T value)
+ {
+ _value = std::move(value);
+ }
+
+ private:
+ T& _value;
+ };
+
+ template<typename T>
+ struct DynamicUpdateFieldSetter
+ {
+ using ValueType = T;
+ using NewValueType = std::conditional_t<std::is_base_of<HasChangesMaskTag, T>::value, MutableFieldReference<T, true>, T&>;
+
+ template<typename F>
+ friend typename DynamicUpdateFieldSetter<F>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter);
+
+ template<typename F>
+ friend typename DynamicUpdateFieldSetter<F>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index);
+
+ template<typename F>
+ friend void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index);
+
+ template<typename F>
+ friend void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter<F>& setter);
+
+ DynamicUpdateFieldSetter(std::vector<T>& values, std::vector<uint32>& updateMask) : _values(values), _updateMask(updateMask)
+ {
+ }
+
+ private:
+ NewValueType AddValue()
+ {
+ MarkChanged(_values.size());
+ _values.emplace_back();
+ T& value = _values.back();
+ MarkNewValue(value, std::is_base_of<HasChangesMaskTag, T>{});
+ return { value };
+ }
+
+ NewValueType InsertValue(uint32 index)
+ {
+ _values.emplace(_values.begin() + index);
+ for (uint32 i = index; i < _values.size(); ++i)
+ {
+ MarkChanged(i);
+ // also mark all fields of value as changed
+ MarkNewValue(_values[i], std::is_base_of<HasChangesMaskTag, T>{});
+ }
+ return { _values[index] };
+ }
+
+ void RemoveValue(uint32 index)
+ {
+ // remove by shifting entire container - client might rely on values being sorted for certain fields
+ _values.erase(_values.begin() + index);
+ for (uint32 i = index; i < _values.size(); ++i)
+ {
+ MarkChanged(i);
+ // also mark all fields of value as changed
+ MarkNewValue(_values[i], std::is_base_of<HasChangesMaskTag, T>{});
+ }
+ if (_values.size() % 32)
+ _updateMask[UpdateMaskHelpers::GetBlockIndex(_values.size())] &= ~UpdateMaskHelpers::GetBlockFlag(_values.size());
+ else
+ _updateMask.pop_back();
+ }
+
+ void Clear()
+ {
+ _values.clear();
+ _updateMask.clear();
+ }
+
+ void MarkChanged(uint32 index)
+ {
+ uint32 block = UpdateMaskHelpers::GetBlockIndex(index);
+ if (block >= _updateMask.size())
+ _updateMask.resize(block + 1);
+
+ _updateMask[block] |= UpdateMaskHelpers::GetBlockFlag(index);
+ }
+
+ void MarkNewValue(T&, std::false_type)
+ {
+ }
+
+ void MarkNewValue(T& value, std::true_type)
+ {
+ value._changesMask.SetAll();
+ }
+
+ std::vector<T>& _values;
+ std::vector<uint32>& _updateMask;
+ };
+
+ template<typename T, bool PublicSet>
+ struct MutableFieldReference
+ {
+ MutableFieldReference(T& value) : _value(value)
+ {
+ }
+
+ template<typename V, uint32 BlockBit, uint32 Bit, typename U = T>
+ std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value,
+ std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value,
+ MutableFieldReference<V, PublicSet>,
+ std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>>
+ ModifyValue(UpdateField<V, BlockBit, Bit>(T:: * field))
+ {
+ _value._changesMask.Set(BlockBit);
+ _value._changesMask.Set(Bit);
+ return { (_value.*field)._value };
+ }
+
+ template<typename V, std::size_t Size, uint32 Bit, uint32 FirstElementBit, typename U = T>
+ std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value,
+ std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value,
+ MutableFieldReference<V, PublicSet>,
+ std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>>
+ ModifyValue(UpdateFieldArray<V, Size, Bit, FirstElementBit>(T:: * field), uint32 index)
+ {
+ _value._changesMask.Set(Bit);
+ _value._changesMask.Set(FirstElementBit + index);
+ return { (_value.*field)._values[index] };
+ }
+
+ template<typename V, uint32 BlockBit, uint32 Bit, typename U = T>
+ std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value, DynamicUpdateFieldSetter<V>>
+ ModifyValue(DynamicUpdateField<V, BlockBit, Bit>(T::* field))
+ {
+ _value._changesMask.Set(BlockBit);
+ _value._changesMask.Set(Bit);
+ return { (_value.*field)._values, (_value.*field)._updateMask };
+ }
+
+ template<typename V, uint32 BlockBit, uint32 Bit, typename U = T>
+ std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value,
+ std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value,
+ MutableFieldReference<V, PublicSet>,
+ std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>>
+ ModifyValue(DynamicUpdateField<V, BlockBit, Bit>(T:: * field), uint32 index)
+ {
+ if (index >= (_value.*field).size())
+ {
+ // fill with zeros until reaching desired slot
+ (_value.*field)._values.resize(index + 1);
+ (_value.*field)._updateMask.resize(((_value.*field)._values.size() + 31) / 32);
+ }
+
+ _value._changesMask.Set(BlockBit);
+ _value._changesMask.Set(Bit);
+ (_value.*field).MarkChanged(index);
+ return { (_value.*field)._values[index] };
+ }
+
+ template<typename V, typename U = T>
+ std::enable_if_t<!std::is_base_of<HasChangesMaskTag, U>::value && !std::is_array<V>::value,
+ std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>
+ ModifyValue(V(T::* field))
+ {
+ return { _value.*field };
+ }
+
+ template<typename V, std::size_t Size, typename U = T>
+ std::enable_if_t<!std::is_base_of<HasChangesMaskTag, U>::value,
+ std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>
+ ModifyValue(V(T::* field)[Size], uint32 index)
+ {
+ return { (_value.*field)[index] };
+ }
+
+ private:
+ T& _value;
+ };
+
+ template<std::size_t Bits>
+ class HasChangesMask : public HasChangesMaskTag
+ {
+ template<typename T>
+ friend struct DynamicUpdateFieldSetter;
+
+ template<typename T, bool PublicSet>
+ friend struct MutableFieldReference;
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ friend class UpdateField;
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ friend class UpdateFieldArray;
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ friend class DynamicUpdateField;
+
+ public:
+ using Base = HasChangesMask<Bits>;
+ using Mask = UpdateMask<Bits>;
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ MutableFieldReference<T, false> ModifyValue(UpdateField<T, BlockBit, Bit>(Derived::* field))
+ {
+ _changesMask.Set(BlockBit);
+ _changesMask.Set(Bit);
+ return { (static_cast<Derived*>(this)->*field)._value };
+ }
+
+ template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ MutableFieldReference<T, false> ModifyValue(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::* field), uint32 index)
+ {
+ _changesMask.Set(Bit);
+ _changesMask.Set(FirstElementBit + index);
+ return { (static_cast<Derived*>(this)->*field)._values[index] };
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ MutableFieldReference<T, false> ModifyValue(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field))
+ {
+ _changesMask.Set(BlockBit);
+ _changesMask.Set(Bit);
+ return { (static_cast<Derived*>(this)->*field)._values };
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ MutableFieldReference<T, false> ModifyValue(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index)
+ {
+ DynamicUpdateField<T, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field);
+ if (index >= uf.size())
+ {
+ // fill with zeros until reaching desired slot
+ uf._values.resize(index + 1);
+ uf._updateMask.resize((uf._values.size() + 31) / 32);
+ }
+
+ _changesMask.Set(BlockBit);
+ _changesMask.Set(Bit);
+ (static_cast<Derived*>(this)->*field).MarkChanged(index);
+ return { uf._values[index] };
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChanged(UpdateField<T, BlockBit, Bit>(Derived::*))
+ {
+ _changesMask.Reset(Bit);
+ }
+
+ template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ void ClearChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index)
+ {
+ _changesMask.Reset(Bit);
+ _changesMask.Reset(FirstElementBit + index);
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChanged(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index)
+ {
+ _changesMask.Reset(Bit);
+ (static_cast<Derived*>(this)->*field).ClearChanged(index);
+ }
+
+ protected:
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field)
+ {
+ ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{});
+ }
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::false_type) { }
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::true_type)
+ {
+ field._value.ClearChangesMask();
+ }
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field)
+ {
+ ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{});
+ }
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::false_type) { }
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type)
+ {
+ for (uint32 i = 0; i < Size; ++i)
+ field._values[i].ClearChangesMask();
+ }
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field)
+ {
+ ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{});
+ field.ClearChangesMask();
+ }
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::false_type) { }
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::true_type)
+ {
+ for (uint32 i = 0; i < field._values.size(); ++i)
+ field._values[i].ClearChangesMask();
+ }
+
+ UpdateMask<Bits> _changesMask;
+ };
+
+ class UpdateFieldHolder
+ {
+ public:
+ explicit UpdateFieldHolder(Object* owner) : _owner(owner)
+ {
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ MutableFieldReference<T, false> ModifyValue(UpdateField<T, BlockBit, Bit>(Derived::* field))
+ {
+ _changesMask.Set(Bit);
+ return { (static_cast<Derived*>(_owner)->*field)._value };
+ }
+
+ template<typename Derived, typename T, uint32 BlockBit, uint32 Bit>
+ void ClearChangesMask(UpdateField<T, BlockBit, Bit>(Derived::* field))
+ {
+ _changesMask.Reset(Bit);
+ (static_cast<Derived*>(_owner)->*field)._value.ClearChangesMask();
+ }
+
+ uint32 GetChangedObjectTypeMask() const
+ {
+ return _changesMask.GetBlock(0);
+ }
+
+ bool HasChanged(uint32 index) const
+ {
+ return _changesMask[index];
+ }
+
+ private:
+ UpdateMask<NUM_CLIENT_OBJECT_TYPES> _changesMask;
+ Object* _owner;
+ };
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ class UpdateField
+ {
+ template<typename F, bool PublicSet>
+ friend struct MutableFieldReference;
+
+ template<std::size_t Bits>
+ friend class HasChangesMask;
+
+ friend class UpdateFieldHolder;
+
+ public:
+ using ValueType = T;
+
+ operator T const& () const
+ {
+ return _value;
+ }
+ T const* operator->() const
+ {
+ return &_value;
+ }
+ T const& operator*() const
+ {
+ return _value;
+ }
+
+ private:
+ T _value = {};
+ };
+
+ template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ class UpdateFieldArray
+ {
+ template<typename F, bool PublicSet>
+ friend struct MutableFieldReference;
+
+ template<std::size_t Bits>
+ friend class HasChangesMask;
+
+ public:
+ using ValueType = T;
+
+ T const* begin() const
+ {
+ return std::begin(_values);
+ }
+
+ T const* end() const
+ {
+ return std::end(_values);
+ }
+
+ T const& operator[](uint32 index) const
+ {
+ return _values[index];
+ }
+
+ private:
+ T _values[Size] = {};
+ };
+
+ void WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data);
+
+ template<typename T, uint32 BlockBit, uint32 Bit>
+ class DynamicUpdateField
+ {
+ template<typename F, bool PublicSet>
+ friend struct MutableFieldReference;
+
+ template<std::size_t Bits>
+ friend class HasChangesMask;
+
+ public:
+ using ValueType = T;
+
+ typename std::vector<T>::const_iterator begin() const
+ {
+ return _values.begin();
+ }
+
+ typename std::vector<T>::const_iterator end() const
+ {
+ return _values.end();
+ }
+
+ std::size_t size() const
+ {
+ return _values.size();
+ }
+
+ T const& operator[](uint32 index) const
+ {
+ return _values[index];
+ }
+
+ int32 FindIndex(T const& value) const
+ {
+ auto itr = std::find(_values.begin(), _values.end(), value);
+ if (itr != _values.end())
+ return int32(std::distance(_values.begin(), itr));
+
+ return -1;
+ }
+
+ template<typename Pred>
+ int32 FindIndexIf(Pred pred) const
+ {
+ auto itr = std::find_if(_values.begin(), _values.end(), pred);
+ if (itr != _values.end())
+ return int32(std::distance(_values.begin(), itr));
+
+ return -1;
+ }
+
+ bool HasChanged(uint32 index) const
+ {
+ return (_updateMask[index / 32] & (1 << (index % 32))) != 0;
+ }
+
+ void WriteUpdateMask(ByteBuffer& data) const
+ {
+ WriteDynamicFieldUpdateMask(_values.size(), _updateMask, data);
+ }
+
+ private:
+ void MarkChanged(uint32 index)
+ {
+ uint32 block = UpdateMaskHelpers::GetBlockIndex(index);
+ if (block >= _updateMask.size())
+ _updateMask.emplace_back(0);
+
+ _updateMask[block] |= UpdateMaskHelpers::GetBlockFlag(index);
+ }
+
+ void ClearChanged(uint32 index)
+ {
+ uint32 block = UpdateMaskHelpers::GetBlockIndex(index);
+ if (block >= _updateMask.size())
+ _updateMask.emplace_back(0);
+
+ _updateMask[block] &= ~UpdateMaskHelpers::GetBlockFlag(index);
+ }
+
+ void ClearChangesMask()
+ {
+ std::fill(_updateMask.begin(), _updateMask.end(), 0);
+ }
+
+ std::vector<T> _values;
+ std::vector<uint32> _updateMask;
+ };
+
+ template<typename T>
+ struct ViewerDependentValueTag
+ {
+ using ValueType = T;
+ };
+}
+
+#endif // UpdateField_h__
diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp
deleted file mode 100644
index 7b3d1fb2972..00000000000
--- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp
+++ /dev/null
@@ -1,6525 +0,0 @@
-/*
- * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "UpdateFieldFlags.h"
-
-uint32 ContainerUpdateFieldFlags[CONTAINER_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+3
- UF_FLAG_OWNER, // ITEM_FIELD_STACK_COUNT
- UF_FLAG_OWNER, // ITEM_FIELD_DURATION
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+1
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+2
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+3
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+5
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+6
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+7
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+8
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+9
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+10
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+11
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+12
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+13
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+14
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+15
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+16
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+17
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+18
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+19
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+20
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+21
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+22
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+23
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+24
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+25
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+26
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+27
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+28
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+29
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+30
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+31
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+32
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+33
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+34
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+35
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+36
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+37
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+38
- UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED
- UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID
- UF_FLAG_OWNER, // ITEM_FIELD_DURABILITY
- UF_FLAG_OWNER, // ITEM_FIELD_MAXDURABILITY
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME
- UF_FLAG_OWNER, // ITEM_FIELD_MODIFIERS_MASK
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTEXT
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP+1
- UF_FLAG_OWNER, // ITEM_FIELD_APPEARANCE_MOD_ID
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+1
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+2
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+3
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+4
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+5
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+6
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+7
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+8
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+9
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+10
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+11
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+12
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+13
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+14
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+15
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+16
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+17
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+18
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+19
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+20
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+21
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+22
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+23
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+24
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+25
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+26
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+27
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+28
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+29
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+30
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+31
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+32
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+33
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+34
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+35
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+36
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+37
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+38
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+39
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+40
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+41
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+42
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+43
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+44
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+45
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+46
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+47
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+48
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+49
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+50
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+51
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+52
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+53
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+54
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+55
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+56
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+57
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+58
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+59
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+60
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+61
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+62
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+63
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+64
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+65
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+66
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+67
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+68
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+69
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+70
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+71
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+72
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+73
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+74
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+75
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+76
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+77
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+78
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+79
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+80
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+81
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+82
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+83
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+84
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+85
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+86
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+87
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+88
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+89
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+90
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+91
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+92
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+93
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+94
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+95
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+96
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+97
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+98
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+99
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+100
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+101
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+102
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+103
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+104
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+105
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+106
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+107
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+108
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+109
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+110
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+111
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+112
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+113
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+114
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+115
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+116
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+117
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+118
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+119
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+120
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+121
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+122
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+123
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+124
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+125
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+126
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+127
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+128
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+129
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+130
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+131
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+132
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+133
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+134
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+135
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+136
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+137
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+138
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+139
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+140
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+141
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+142
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+143
- UF_FLAG_PUBLIC, // CONTAINER_FIELD_NUM_SLOTS
-};
-
-uint32 AzeriteEmpoweredItemUpdateFieldFlags[AZERITE_EMPOWERED_ITEM_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+3
- UF_FLAG_OWNER, // ITEM_FIELD_STACK_COUNT
- UF_FLAG_OWNER, // ITEM_FIELD_DURATION
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+1
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+2
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+3
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+5
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+6
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+7
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+8
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+9
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+10
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+11
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+12
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+13
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+14
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+15
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+16
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+17
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+18
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+19
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+20
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+21
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+22
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+23
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+24
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+25
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+26
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+27
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+28
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+29
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+30
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+31
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+32
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+33
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+34
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+35
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+36
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+37
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+38
- UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED
- UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID
- UF_FLAG_OWNER, // ITEM_FIELD_DURABILITY
- UF_FLAG_OWNER, // ITEM_FIELD_MAXDURABILITY
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME
- UF_FLAG_OWNER, // ITEM_FIELD_MODIFIERS_MASK
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTEXT
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP+1
- UF_FLAG_OWNER, // ITEM_FIELD_APPEARANCE_MOD_ID
- UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS
- UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+1
- UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+2
- UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+3
-};
-
-uint32 AzeriteItemUpdateFieldFlags[AZERITE_ITEM_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+3
- UF_FLAG_OWNER, // ITEM_FIELD_STACK_COUNT
- UF_FLAG_OWNER, // ITEM_FIELD_DURATION
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+1
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+2
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+3
- UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+1
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+2
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+3
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+4
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+5
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+6
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+7
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+8
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+9
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+10
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+11
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+12
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+13
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+14
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+15
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+16
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+17
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+18
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+19
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+20
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+21
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+22
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+23
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+24
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+25
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+26
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+27
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+28
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+29
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+30
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+31
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+32
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+33
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+34
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+35
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+36
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+37
- UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+38
- UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED
- UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID
- UF_FLAG_OWNER, // ITEM_FIELD_DURABILITY
- UF_FLAG_OWNER, // ITEM_FIELD_MAXDURABILITY
- UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME
- UF_FLAG_OWNER, // ITEM_FIELD_MODIFIERS_MASK
- UF_FLAG_PUBLIC, // ITEM_FIELD_CONTEXT
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP
- UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP+1
- UF_FLAG_OWNER, // ITEM_FIELD_APPEARANCE_MOD_ID
- UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_XP
- UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_XP+1
- UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_LEVEL
- UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_AURA_LEVEL
- UF_FLAG_OWNER, // AZERITE_ITEM_FIELD_KNOWLEDGE_LEVEL
- UF_FLAG_OWNER, // AZERITE_ITEM_FIELD_DEBUG_KNOWLEDGE_WEEK
-};
-
-uint32 ItemDynamicUpdateFieldFlags[ITEM_DYNAMIC_END] =
-{
- UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_MODIFIERS
- UF_FLAG_OWNER | UF_FLAG_0x100, // ITEM_DYNAMIC_FIELD_BONUSLIST_IDS
- UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS
- UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_GEMS
-};
-
-uint32 UnitUpdateFieldFlags[ACTIVE_PLAYER_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+3
- UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER
- UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+1
- UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+2
- UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY
- UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR
- UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET
- UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_DB_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_DB_ID+1
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_CHANNEL_DATA
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_CHANNEL_DATA+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONED_BY_HOME_REALM
- UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_0
- UF_FLAG_PUBLIC, // UNIT_FIELD_DISPLAY_POWER
- UF_FLAG_PUBLIC, // UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_HEALTH
- UF_FLAG_PUBLIC, // UNIT_FIELD_HEALTH+1
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+1
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+2
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+3
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+4
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+5
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXHEALTH
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXHEALTH+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+4
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+4
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+4
- 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_CONTENT_TUNING_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
- UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_FACTION_GROUP
- UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_DAMAGE_ITEM_LEVEL_CURVE_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_FACTIONTEMPLATE
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+1
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+2
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+3
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+4
- UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+5
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_2
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_3
- UF_FLAG_PUBLIC, // UNIT_FIELD_AURASTATE
- UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME
- UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME+1
- UF_FLAG_PRIVATE, // UNIT_FIELD_RANGEDATTACKTIME
- UF_FLAG_PUBLIC, // UNIT_FIELD_BOUNDINGRADIUS
- UF_FLAG_PUBLIC, // UNIT_FIELD_COMBATREACH
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_DISPLAYID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_DISPLAY_SCALE
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_NATIVEDISPLAYID
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_NATIVE_X_DISPLAY_SCALE
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_MOUNTDISPLAYID
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINDAMAGE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXDAMAGE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINOFFHANDDAMAGE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXOFFHANDDAMAGE
- UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_1
- UF_FLAG_PUBLIC, // UNIT_FIELD_PETNUMBER
- UF_FLAG_PUBLIC, // UNIT_FIELD_PET_NAME_TIMESTAMP
- UF_FLAG_OWNER, // UNIT_FIELD_PETEXPERIENCE
- UF_FLAG_OWNER, // UNIT_FIELD_PETNEXTLEVELEXP
- UF_FLAG_PUBLIC, // UNIT_MOD_CAST_SPEED
- UF_FLAG_PUBLIC, // UNIT_MOD_CAST_HASTE
- UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_HASTE
- UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_RANGED_HASTE
- UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_HASTE_REGEN
- UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_TIME_RATE
- UF_FLAG_PUBLIC, // UNIT_CREATED_BY_SPELL
- UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC, // UNIT_NPC_FLAGS
- UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC, // UNIT_NPC_FLAGS+1
- UF_FLAG_PUBLIC, // UNIT_NPC_EMOTESTATE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+4
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+6
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+4
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+6
- UF_FLAG_PUBLIC, // UNIT_FIELD_BASE_MANA
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BASE_HEALTH
- UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_POS
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_NEG
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MULTIPLIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAIN_HAND_WEAPON_ATTACK_POWER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_OFF_HAND_WEAPON_ATTACK_POWER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_HAND_WEAPON_ATTACK_POWER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_SPEED_AURA
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_LIFESTEAL
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MINRANGEDDAMAGE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXRANGEDDAMAGE
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+4
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+6
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+1
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+2
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+3
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+4
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+5
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+6
- UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXHEALTHMODIFIER
- UF_FLAG_PUBLIC, // UNIT_FIELD_HOVERHEIGHT
- UF_FLAG_PUBLIC, // UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF
- UF_FLAG_PUBLIC, // UNIT_FIELD_MIN_ITEM_LEVEL
- UF_FLAG_PUBLIC, // UNIT_FIELD_MAXITEMLEVEL
- UF_FLAG_PUBLIC, // UNIT_FIELD_WILD_BATTLEPET_LEVEL
- UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP
- UF_FLAG_PUBLIC, // UNIT_FIELD_INTERACT_SPELLID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_SPELL_VISUAL_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_ANIM_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_ANIM_KIT_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+1
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+2
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+3
- UF_FLAG_PUBLIC, // UNIT_FIELD_SCALE_DURATION
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOKS_LIKE_MOUNT_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOKS_LIKE_CREATURE_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_ID
- UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID
- UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+1
- UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+2
- UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+3
- UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER
- UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+1
- UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+2
- UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+3
- UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT
- UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+1
- UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+2
- UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+3
- UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID
- UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+1
- UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+2
- UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+3
- UF_FLAG_PUBLIC, // PLAYER_FLAGS
- UF_FLAG_PUBLIC, // PLAYER_FLAGS_EX
- UF_FLAG_PUBLIC, // PLAYER_GUILDRANK
- UF_FLAG_PUBLIC, // PLAYER_GUILDDELETE_DATE
- UF_FLAG_PUBLIC, // PLAYER_GUILDLEVEL
- UF_FLAG_PUBLIC, // PLAYER_BYTES
- UF_FLAG_PUBLIC, // PLAYER_BYTES_2
- UF_FLAG_PUBLIC, // PLAYER_BYTES_3
- UF_FLAG_PUBLIC, // PLAYER_BYTES_4
- UF_FLAG_PUBLIC, // PLAYER_DUEL_TEAM
- UF_FLAG_PUBLIC, // PLAYER_GUILD_TIMESTAMP
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+2
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+3
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+4
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+5
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+6
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+7
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+8
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+9
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+10
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+11
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+12
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+13
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+14
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+15
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+16
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+17
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+18
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+19
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+20
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+21
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+22
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+23
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+24
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+25
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+26
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+27
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+28
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+29
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+30
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+31
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+32
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+33
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+34
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+35
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+36
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+37
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+38
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+39
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+40
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+41
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+42
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+43
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+44
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+45
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+46
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+47
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+48
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+49
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+50
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+51
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+52
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+53
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+54
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+55
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+56
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+57
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+58
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+59
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+60
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+61
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+62
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+63
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+64
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+65
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+66
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+67
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+68
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+69
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+70
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+71
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+72
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+73
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+74
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+75
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+76
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+77
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+78
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+79
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+80
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+81
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+82
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+83
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+84
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+85
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+86
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+87
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+88
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+89
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+90
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+91
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+92
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+93
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+94
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+95
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+96
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+97
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+98
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+99
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+100
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+101
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+102
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+103
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+104
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+105
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+106
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+107
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+108
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+109
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+110
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+111
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+112
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+113
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+114
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+115
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+116
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+117
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+118
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+119
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+120
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+121
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+122
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+123
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+124
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+125
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+126
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+127
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+128
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+129
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+130
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+131
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+132
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+133
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+134
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+135
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+136
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+137
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+138
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+139
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+140
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+141
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+142
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+143
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+144
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+145
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+146
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+147
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+148
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+149
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+150
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+151
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+152
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+153
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+154
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+155
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+156
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+157
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+158
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+159
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+160
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+161
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+162
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+163
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+164
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+165
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+166
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+167
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+168
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+169
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+170
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+171
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+172
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+173
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+174
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+175
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+176
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+177
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+178
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+179
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+180
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+181
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+182
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+183
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+184
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+185
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+186
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+187
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+188
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+189
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+190
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+191
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+192
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+193
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+194
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+195
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+196
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+197
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+198
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+199
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+200
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+201
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+202
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+203
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+204
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+205
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+206
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+207
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+208
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+209
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+210
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+211
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+212
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+213
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+214
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+215
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+216
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+217
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+218
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+219
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+220
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+221
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+222
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+223
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+224
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+225
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+226
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+227
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+228
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+229
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+230
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+231
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+232
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+233
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+234
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+235
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+236
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+237
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+238
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+239
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+240
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+241
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+242
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+243
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+244
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+245
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+246
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+247
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+248
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+249
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+250
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+251
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+252
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+253
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+254
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+255
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+256
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+257
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+258
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+259
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+260
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+261
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+262
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+263
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+264
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+265
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+266
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+267
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+268
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+269
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+270
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+271
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+272
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+273
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+274
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+275
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+276
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+277
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+278
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+279
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+280
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+281
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+282
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+283
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+284
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+285
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+286
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+287
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+288
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+289
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+290
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+291
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+292
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+293
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+294
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+295
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+296
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+297
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+298
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+299
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+300
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+301
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+302
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+303
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+304
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+305
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+306
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+307
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+308
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+309
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+310
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+311
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+312
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+313
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+314
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+315
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+316
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+317
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+318
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+319
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+320
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+321
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+322
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+323
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+324
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+325
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+326
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+327
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+328
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+329
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+330
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+331
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+332
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+333
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+334
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+335
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+336
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+337
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+338
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+339
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+340
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+341
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+342
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+343
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+344
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+345
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+346
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+347
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+348
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+349
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+350
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+351
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+352
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+353
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+354
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+355
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+356
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+357
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+358
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+359
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+360
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+361
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+362
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+363
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+364
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+365
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+366
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+367
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+368
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+369
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+370
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+371
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+372
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+373
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+374
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+375
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+376
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+377
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+378
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+379
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+380
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+381
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+382
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+383
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+384
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+385
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+386
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+387
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+388
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+389
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+390
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+391
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+392
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+393
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+394
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+395
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+396
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+397
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+398
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+399
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+400
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+401
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+402
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+403
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+404
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+405
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+406
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+407
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+408
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+409
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+410
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+411
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+412
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+413
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+414
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+415
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+416
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+417
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+418
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+419
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+420
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+421
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+422
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+423
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+424
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+425
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+426
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+427
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+428
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+429
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+430
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+431
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+432
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+433
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+434
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+435
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+436
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+437
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+438
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+439
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+440
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+441
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+442
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+443
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+444
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+445
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+446
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+447
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+448
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+449
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+450
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+451
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+452
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+453
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+454
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+455
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+456
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+457
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+458
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+459
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+460
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+461
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+462
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+463
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+464
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+465
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+466
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+467
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+468
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+469
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+470
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+471
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+472
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+473
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+474
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+475
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+476
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+477
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+478
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+479
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+480
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+481
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+482
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+483
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+484
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+485
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+486
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+487
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+488
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+489
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+490
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+491
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+492
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+493
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+494
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+495
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+496
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+497
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+498
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+499
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+500
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+501
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+502
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+503
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+504
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+505
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+506
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+507
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+508
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+509
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+510
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+511
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+512
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+513
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+514
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+515
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+516
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+517
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+518
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+519
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+520
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+521
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+522
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+523
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+524
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+525
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+526
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+527
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+528
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+529
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+530
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+531
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+532
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+533
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+534
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+535
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+536
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+537
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+538
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+539
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+540
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+541
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+542
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+543
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+544
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+545
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+546
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+547
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+548
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+549
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+550
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+551
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+552
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+553
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+554
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+555
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+556
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+557
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+558
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+559
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+560
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+561
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+562
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+563
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+564
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+565
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+566
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+567
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+568
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+569
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+570
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+571
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+572
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+573
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+574
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+575
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+576
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+577
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+578
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+579
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+580
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+581
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+582
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+583
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+584
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+585
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+586
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+587
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+588
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+589
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+590
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+591
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+592
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+593
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+594
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+595
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+596
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+597
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+598
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+599
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+600
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+601
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+602
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+603
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+604
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+605
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+606
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+607
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+608
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+609
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+610
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+611
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+612
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+613
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+614
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+615
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+616
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+617
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+618
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+619
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+620
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+621
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+622
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+623
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+624
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+625
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+626
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+627
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+628
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+629
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+630
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+631
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+632
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+633
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+634
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+635
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+636
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+637
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+638
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+639
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+640
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+641
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+642
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+643
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+644
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+645
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+646
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+647
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+648
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+649
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+650
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+651
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+652
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+653
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+654
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+655
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+656
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+657
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+658
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+659
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+660
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+661
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+662
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+663
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+664
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+665
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+666
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+667
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+668
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+669
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+670
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+671
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+672
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+673
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+674
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+675
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+676
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+677
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+678
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+679
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+680
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+681
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+682
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+683
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+684
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+685
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+686
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+687
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+688
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+689
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+690
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+691
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+692
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+693
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+694
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+695
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+696
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+697
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+698
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+699
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+700
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+701
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+702
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+703
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+704
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+705
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+706
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+707
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+708
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+709
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+710
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+711
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+712
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+713
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+714
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+715
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+716
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+717
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+718
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+719
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+720
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+721
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+722
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+723
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+724
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+725
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+726
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+727
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+728
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+729
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+730
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+731
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+732
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+733
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+734
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+735
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+736
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+737
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+738
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+739
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+740
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+741
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+742
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+743
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+744
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+745
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+746
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+747
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+748
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+749
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+750
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+751
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+752
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+753
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+754
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+755
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+756
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+757
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+758
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+759
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+760
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+761
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+762
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+763
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+764
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+765
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+766
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+767
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+768
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+769
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+770
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+771
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+772
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+773
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+774
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+775
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+776
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+777
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+778
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+779
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+780
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+781
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+782
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+783
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+784
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+785
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+786
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+787
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+788
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+789
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+790
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+791
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+792
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+793
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+794
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+795
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+796
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+797
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+798
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+799
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+800
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+801
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+802
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+803
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+804
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+805
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+806
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+807
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+808
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+809
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+810
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+811
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+812
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+813
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+814
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+815
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+816
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+817
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+818
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+819
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+820
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+821
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+822
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+823
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+824
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+825
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+826
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+827
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+828
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+829
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+830
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+831
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+832
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+833
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+834
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+835
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+836
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+837
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+838
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+839
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+840
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+841
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+842
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+843
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+844
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+845
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+846
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+847
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+848
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+849
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+850
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+851
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+852
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+853
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+854
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+855
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+856
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+857
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+858
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+859
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+860
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+861
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+862
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+863
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+864
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+865
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+866
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+867
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+868
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+869
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+870
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+871
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+872
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+873
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+874
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+875
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+876
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+877
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+878
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+879
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+880
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+881
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+882
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+883
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+884
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+885
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+886
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+887
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+888
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+889
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+890
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+891
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+892
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+893
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+894
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+895
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+896
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+897
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+898
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+899
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+900
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+901
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+902
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+903
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+904
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+905
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+906
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+907
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+908
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+909
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+910
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+911
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+912
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+913
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+914
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+915
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+916
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+917
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+918
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+919
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+920
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+921
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+922
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+923
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+924
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+925
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+926
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+927
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+928
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+929
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+930
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+931
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+932
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+933
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+934
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+935
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+936
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+937
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+938
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+939
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+940
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+941
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+942
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+943
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+944
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+945
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+946
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+947
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+948
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+949
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+950
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+951
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+952
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+953
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+954
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+955
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+956
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+957
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+958
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+959
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+960
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+961
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+962
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+963
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+964
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+965
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+966
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+967
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+968
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+969
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+970
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+971
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+972
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+973
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+974
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+975
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+976
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+977
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+978
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+979
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+980
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+981
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+982
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+983
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+984
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+985
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+986
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+987
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+988
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+989
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+990
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+991
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+992
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+993
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+994
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+995
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+996
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+997
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+998
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+999
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1000
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1001
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1002
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1003
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1004
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1005
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1006
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1007
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1008
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1009
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1010
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1011
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1012
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1013
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1014
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1015
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1016
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1017
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1018
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1019
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1020
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1021
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1022
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1023
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1024
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1025
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1026
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1027
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1028
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1029
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1030
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1031
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1032
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1033
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1034
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1035
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1036
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1037
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1038
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1039
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1040
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1041
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1042
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1043
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1044
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1045
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1046
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1047
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1048
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1049
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1050
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1051
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1052
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1053
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1054
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1055
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1056
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1057
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1058
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1059
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1060
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1061
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1062
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1063
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1064
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1065
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1066
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1067
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1068
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1069
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1070
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1071
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1072
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1073
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1074
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1075
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1076
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1077
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1078
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1079
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1080
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1081
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1082
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1083
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1084
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1085
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1086
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1087
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1088
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1089
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1090
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1091
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1092
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1093
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1094
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1095
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1096
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1097
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1098
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1099
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1100
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1101
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1102
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1103
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1104
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1105
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1106
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1107
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1108
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1109
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1110
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1111
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1112
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1113
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1114
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1115
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1116
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1117
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1118
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1119
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1120
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1121
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1122
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1123
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1124
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1125
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1126
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1127
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1128
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1129
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1130
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1131
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1132
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1133
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1134
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1135
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1136
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1137
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1138
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1139
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1140
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1141
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1142
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1143
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1144
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1145
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1146
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1147
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1148
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1149
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1150
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1151
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1152
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1153
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1154
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1155
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1156
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1157
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1158
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1159
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1160
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1161
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1162
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1163
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1164
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1165
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1166
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1167
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1168
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1169
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1170
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1171
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1172
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1173
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1174
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1175
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1176
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1177
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1178
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1179
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1180
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1181
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1182
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1183
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1184
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1185
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1186
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1187
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1188
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1189
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1190
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1191
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1192
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1193
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1194
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1195
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1196
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1197
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1198
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1199
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1200
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1201
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1202
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1203
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1204
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1205
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1206
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1207
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1208
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1209
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1210
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1211
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1212
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1213
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1214
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1215
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1216
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1217
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1218
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1219
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1220
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1221
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1222
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1223
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1224
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1225
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1226
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1227
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1228
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1229
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1230
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1231
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1232
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1233
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1234
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1235
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1236
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1237
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1238
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1239
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1240
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1241
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1242
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1243
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1244
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1245
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1246
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1247
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1248
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1249
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1250
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1251
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1252
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1253
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1254
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1255
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1256
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1257
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1258
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1259
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1260
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1261
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1262
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1263
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1264
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1265
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1266
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1267
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1268
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1269
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1270
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1271
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1272
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1273
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1274
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1275
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1276
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1277
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1278
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1279
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1280
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1281
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1282
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1283
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1284
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1285
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1286
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1287
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1288
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1289
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1290
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1291
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1292
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1293
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1294
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1295
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1296
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1297
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1298
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1299
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1300
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1301
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1302
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1303
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1304
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1305
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1306
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1307
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1308
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1309
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1310
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1311
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1312
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1313
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1314
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1315
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1316
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1317
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1318
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1319
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1320
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1321
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1322
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1323
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1324
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1325
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1326
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1327
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1328
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1329
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1330
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1331
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1332
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1333
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1334
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1335
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1336
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1337
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1338
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1339
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1340
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1341
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1342
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1343
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1344
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1345
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1346
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1347
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1348
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1349
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1350
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1351
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1352
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1353
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1354
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1355
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1356
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1357
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1358
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1359
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1360
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1361
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1362
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1363
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1364
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1365
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1366
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1367
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1368
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1369
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1370
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1371
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1372
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1373
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1374
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1375
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1376
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1377
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1378
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1379
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1380
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1381
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1382
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1383
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1384
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1385
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1386
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1387
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1388
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1389
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1390
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1391
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1392
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1393
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1394
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1395
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1396
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1397
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1398
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1399
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1400
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1401
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1402
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1403
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1404
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1405
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1406
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1407
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1408
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1409
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1410
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1411
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1412
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1413
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1414
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1415
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1416
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1417
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1418
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1419
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1420
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1421
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1422
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1423
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1424
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1425
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1426
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1427
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1428
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1429
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1430
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1431
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1432
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1433
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1434
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1435
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1436
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1437
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1438
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1439
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1440
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1441
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1442
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1443
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1444
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1445
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1446
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1447
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1448
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1449
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1450
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1451
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1452
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1453
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1454
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1455
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1456
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1457
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1458
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1459
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1460
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1461
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1462
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1463
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1464
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1465
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1466
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1467
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1468
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1469
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1470
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1471
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1472
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1473
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1474
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1475
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1476
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1477
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1478
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1479
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1480
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1481
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1482
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1483
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1484
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1485
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1486
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1487
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1488
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1489
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1490
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1491
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1492
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1493
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1494
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1495
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1496
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1497
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1498
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1499
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1500
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1501
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1502
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1503
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1504
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1505
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1506
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1507
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1508
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1509
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1510
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1511
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1512
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1513
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1514
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1515
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1516
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1517
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1518
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1519
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1520
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1521
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1522
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1523
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1524
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1525
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1526
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1527
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1528
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1529
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1530
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1531
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1532
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1533
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1534
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1535
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1536
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1537
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1538
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1539
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1540
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1541
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1542
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1543
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1544
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1545
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1546
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1547
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1548
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1549
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1550
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1551
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1552
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1553
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1554
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1555
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1556
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1557
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1558
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1559
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1560
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1561
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1562
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1563
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1564
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1565
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1566
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1567
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1568
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1569
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1570
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1571
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1572
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1573
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1574
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1575
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1576
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1577
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1578
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1579
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1580
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1581
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1582
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1583
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1584
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1585
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1586
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1587
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1588
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1589
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1590
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1591
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1592
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1593
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1594
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1595
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1596
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1597
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1598
- UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1599
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+1
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+2
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+3
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+4
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+5
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+6
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+7
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+8
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+9
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+10
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+11
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+12
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+13
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+14
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+15
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+16
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+17
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+18
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+19
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+20
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+21
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+22
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+23
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+24
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+25
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+26
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+27
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+28
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+29
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+30
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+31
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+32
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+33
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+34
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+35
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+36
- UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+37
- UF_FLAG_PUBLIC, // PLAYER_CHOSEN_TITLE
- UF_FLAG_PUBLIC, // PLAYER_FAKE_INEBRIATION
- UF_FLAG_PUBLIC, // PLAYER_FIELD_VIRTUAL_PLAYER_REALM
- UF_FLAG_PUBLIC, // PLAYER_FIELD_CURRENT_SPEC_ID
- UF_FLAG_PUBLIC, // PLAYER_FIELD_TAXI_MOUNT_ANIM_KIT_ID
- UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL
- UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+1
- UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+2
- UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+3
- UF_FLAG_PUBLIC, // PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY
- UF_FLAG_PUBLIC, // PLAYER_FIELD_HONOR_LEVEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+32
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+33
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+34
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+35
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+36
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+37
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+38
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+39
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+40
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+41
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+42
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+43
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+44
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+45
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+46
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+47
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+48
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+49
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+50
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+51
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+52
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+53
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+54
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+55
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+56
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+57
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+58
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+59
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+60
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+61
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+62
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+63
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+64
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+65
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+66
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+67
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+68
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+69
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+70
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+71
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+72
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+73
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+74
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+75
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+76
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+77
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+78
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+79
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+80
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+81
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+82
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+83
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+84
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+85
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+86
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+87
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+88
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+89
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+90
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+91
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+92
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+93
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+94
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+95
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+96
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+97
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+98
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+99
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+100
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+101
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+102
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+103
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+104
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+105
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+106
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+107
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+108
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+109
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+110
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+111
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+112
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+113
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+114
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+115
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+116
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+117
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+118
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+119
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+120
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+121
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+122
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+123
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+124
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+125
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+126
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+127
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+128
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+129
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+130
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+131
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+132
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+133
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+134
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+135
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+136
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+137
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+138
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+139
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+140
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+141
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+142
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+143
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+144
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+145
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+146
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+147
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+148
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+149
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+150
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+151
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+152
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+153
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+154
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+155
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+156
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+157
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+158
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+159
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+160
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+161
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+162
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+163
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+164
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+165
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+166
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+167
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+168
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+169
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+170
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+171
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+172
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+173
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+174
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+175
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+176
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+177
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+178
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+179
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+180
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+181
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+182
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+183
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+184
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+185
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+186
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+187
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+188
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+189
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+190
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+191
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+192
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+193
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+194
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+195
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+196
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+197
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+198
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+199
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+200
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+201
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+202
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+203
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+204
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+205
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+206
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+207
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+208
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+209
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+210
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+211
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+212
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+213
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+214
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+215
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+216
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+217
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+218
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+219
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+220
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+221
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+222
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+223
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+224
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+225
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+226
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+227
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+228
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+229
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+230
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+231
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+232
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+233
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+234
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+235
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+236
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+237
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+238
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+239
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+240
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+241
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+242
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+243
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+244
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+245
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+246
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+247
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+248
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+249
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+250
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+251
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+252
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+253
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+254
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+255
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+256
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+257
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+258
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+259
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+260
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+261
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+262
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+263
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+264
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+265
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+266
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+267
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+268
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+269
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+270
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+271
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+272
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+273
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+274
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+275
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+276
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+277
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+278
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+279
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+280
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+281
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+282
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+283
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+284
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+285
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+286
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+287
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+288
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+289
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+290
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+291
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+292
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+293
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+294
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+295
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+296
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+297
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+298
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+299
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+300
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+301
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+302
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+303
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+304
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+305
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+306
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+307
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+308
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+309
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+310
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+311
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+312
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+313
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+314
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+315
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+316
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+317
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+318
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+319
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+320
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+321
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+322
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+323
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+324
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+325
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+326
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+327
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+328
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+329
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+330
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+331
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+332
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+333
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+334
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+335
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+336
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+337
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+338
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+339
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+340
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+341
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+342
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+343
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+344
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+345
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+346
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+347
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+348
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+349
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+350
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+351
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+352
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+353
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+354
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+355
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+356
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+357
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+358
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+359
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+360
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+361
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+362
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+363
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+364
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+365
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+366
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+367
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+368
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+369
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+370
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+371
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+372
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+373
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+374
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+375
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+376
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+377
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+378
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+379
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+380
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+381
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+382
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+383
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+384
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+385
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+386
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+387
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+388
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+389
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+390
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+391
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+392
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+393
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+394
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+395
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+396
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+397
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+398
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+399
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+400
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+401
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+402
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+403
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+404
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+405
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+406
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+407
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+408
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+409
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+410
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+411
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+412
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+413
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+414
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+415
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+416
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+417
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+418
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+419
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+420
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+421
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+422
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+423
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+424
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+425
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+426
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+427
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+428
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+429
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+430
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+431
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+432
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+433
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+434
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+435
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+436
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+437
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+438
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+439
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+440
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+441
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+442
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+443
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+444
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+445
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+446
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+447
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+448
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+449
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+450
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+451
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+452
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+453
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+454
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+455
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+456
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+457
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+458
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+459
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+460
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+461
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+462
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+463
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+464
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+465
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+466
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+467
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+468
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+469
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+470
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+471
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+472
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+473
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+474
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+475
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+476
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+477
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+478
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+479
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+480
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+481
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+482
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+483
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+484
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+485
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+486
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+487
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+488
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+489
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+490
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+491
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+492
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+493
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+494
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+495
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+496
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+497
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+498
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+499
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+500
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+501
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+502
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+503
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+504
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+505
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+506
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+507
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+508
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+509
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+510
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+511
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+512
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+513
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+514
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+515
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+516
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+517
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+518
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+519
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+520
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+521
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+522
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+523
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+524
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+525
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+526
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+527
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+528
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+529
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+530
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+531
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+532
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+533
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+534
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+535
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+536
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+537
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+538
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+539
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+540
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+541
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+542
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+543
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+544
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+545
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+546
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+547
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+548
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+549
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+550
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+551
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+552
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+553
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+554
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+555
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+556
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+557
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+558
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+559
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+560
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+561
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+562
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+563
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+564
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+565
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+566
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+567
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+568
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+569
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+570
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+571
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+572
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+573
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+574
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+575
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+576
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+577
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+578
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+579
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+580
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+581
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+582
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+583
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+584
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+585
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+586
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+587
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+588
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+589
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+590
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+591
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+592
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+593
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+594
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+595
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+596
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+597
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+598
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+599
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+600
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+601
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+602
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+603
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+604
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+605
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+606
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+607
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+608
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+609
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+610
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+611
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+612
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+613
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+614
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+615
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+616
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+617
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+618
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+619
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+620
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+621
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+622
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+623
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+624
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+625
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+626
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+627
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+628
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+629
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+630
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+631
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+632
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+633
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+634
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+635
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+636
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+637
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+638
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+639
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+640
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+641
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+642
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+643
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+644
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+645
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+646
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+647
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+648
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+649
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+650
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+651
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+652
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+653
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+654
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+655
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+656
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+657
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+658
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+659
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+660
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+661
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+662
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+663
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+664
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+665
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+666
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+667
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+668
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+669
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+670
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+671
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+672
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+673
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+674
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+675
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+676
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+677
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+678
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+679
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+680
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+681
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+682
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+683
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+684
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+685
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+686
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+687
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+688
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+689
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+690
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+691
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+692
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+693
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+694
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+695
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+696
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+697
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+698
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+699
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+700
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+701
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+702
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+703
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+704
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+705
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+706
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+707
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+708
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+709
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+710
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+711
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+712
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+713
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+714
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+715
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+716
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+717
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+718
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+719
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+720
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+721
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+722
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+723
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+724
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+725
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+726
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+727
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+728
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+729
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+730
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+731
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+732
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+733
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+734
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+735
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+736
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+737
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+738
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+739
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+740
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+741
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+742
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+743
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+744
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+745
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+746
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+747
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+748
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+749
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+750
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+751
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+752
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+753
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+754
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+755
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+756
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+757
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+758
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+759
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+760
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+761
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+762
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+763
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+764
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+765
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+766
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+767
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+768
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+769
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+770
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+771
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+772
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+773
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+774
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+775
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+776
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+777
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+778
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+779
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COINAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COINAGE+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_XP
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRIAL_XP
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+32
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+33
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+34
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+35
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+36
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+37
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+38
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+39
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+40
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+41
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+42
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+43
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+44
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+45
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+46
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+47
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+48
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+49
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+50
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+51
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+52
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+53
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+54
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+55
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+56
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+57
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+58
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+59
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+60
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+61
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+62
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+63
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+64
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+65
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+66
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+67
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+68
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+69
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+70
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+71
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+72
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+73
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+74
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+75
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+76
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+77
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+78
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+79
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+80
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+81
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+82
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+83
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+84
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+85
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+86
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+87
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+88
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+89
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+90
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+91
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+92
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+93
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+94
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+95
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+96
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+97
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+98
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+99
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+100
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+101
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+102
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+103
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+104
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+105
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+106
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+107
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+108
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+109
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+110
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+111
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+112
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+113
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+114
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+115
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+116
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+117
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+118
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+119
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+120
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+121
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+122
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+123
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+124
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+125
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+126
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+127
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+128
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+129
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+130
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+131
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+132
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+133
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+134
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+135
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+136
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+137
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+138
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+139
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+140
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+141
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+142
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+143
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+144
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+145
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+146
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+147
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+148
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+149
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+150
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+151
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+152
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+153
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+154
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+155
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+156
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+157
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+158
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+159
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+160
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+161
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+162
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+163
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+164
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+165
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+166
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+167
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+168
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+169
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+170
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+171
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+172
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+173
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+174
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+175
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+176
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+177
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+178
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+179
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+180
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+181
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+182
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+183
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+184
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+185
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+186
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+187
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+188
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+189
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+190
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+191
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+192
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+193
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+194
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+195
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+196
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+197
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+198
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+199
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+200
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+201
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+202
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+203
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+204
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+205
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+206
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+207
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+208
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+209
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+210
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+211
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+212
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+213
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+214
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+215
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+216
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+217
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+218
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+219
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+220
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+221
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+222
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+223
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+224
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+225
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+226
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+227
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+228
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+229
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+230
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+231
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+232
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+233
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+234
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+235
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+236
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+237
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+238
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+239
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+240
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+241
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+242
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+243
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+244
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+245
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+246
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+247
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+248
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+249
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+250
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+251
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+252
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+253
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+254
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+255
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+256
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+257
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+258
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+259
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+260
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+261
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+262
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+263
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+264
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+265
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+266
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+267
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+268
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+269
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+270
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+271
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+272
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+273
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+274
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+275
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+276
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+277
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+278
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+279
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+280
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+281
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+282
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+283
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+284
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+285
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+286
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+287
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+288
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+289
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+290
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+291
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+292
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+293
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+294
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+295
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+296
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+297
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+298
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+299
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+300
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+301
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+302
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+303
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+304
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+305
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+306
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+307
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+308
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+309
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+310
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+311
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+312
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+313
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+314
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+315
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+316
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+317
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+318
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+319
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+320
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+321
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+322
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+323
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+324
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+325
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+326
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+327
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+328
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+329
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+330
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+331
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+332
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+333
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+334
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+335
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+336
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+337
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+338
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+339
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+340
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+341
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+342
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+343
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+344
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+345
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+346
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+347
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+348
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+349
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+350
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+351
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+352
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+353
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+354
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+355
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+356
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+357
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+358
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+359
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+360
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+361
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+362
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+363
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+364
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+365
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+366
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+367
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+368
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+369
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+370
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+371
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+372
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+373
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+374
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+375
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+376
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+377
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+378
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+379
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+380
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+381
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+382
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+383
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+384
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+385
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+386
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+387
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+388
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+389
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+390
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+391
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+392
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+393
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+394
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+395
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+396
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+397
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+398
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+399
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+400
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+401
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+402
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+403
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+404
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+405
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+406
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+407
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+408
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+409
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+410
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+411
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+412
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+413
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+414
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+415
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+416
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+417
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+418
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+419
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+420
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+421
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+422
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+423
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+424
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+425
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+426
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+427
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+428
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+429
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+430
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+431
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+432
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+433
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+434
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+435
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+436
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+437
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+438
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+439
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+440
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+441
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+442
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+443
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+444
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+445
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+446
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+447
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+448
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+449
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+450
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+451
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+452
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+453
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+454
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+455
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+456
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+457
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+458
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+459
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+460
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+461
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+462
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+463
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+464
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+465
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+466
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+467
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+468
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+469
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+470
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+471
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+472
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+473
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+474
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+475
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+476
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+477
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+478
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+479
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+480
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+481
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+482
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+483
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+484
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+485
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+486
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+487
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+488
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+489
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+490
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+491
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+492
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+493
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+494
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+495
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+496
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+497
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+498
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+499
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+500
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+501
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+502
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+503
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+504
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+505
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+506
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+507
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+508
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+509
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+510
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+511
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+512
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+513
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+514
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+515
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+516
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+517
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+518
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+519
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+520
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+521
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+522
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+523
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+524
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+525
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+526
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+527
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+528
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+529
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+530
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+531
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+532
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+533
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+534
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+535
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+536
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+537
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+538
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+539
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+540
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+541
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+542
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+543
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+544
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+545
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+546
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+547
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+548
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+549
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+550
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+551
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+552
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+553
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+554
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+555
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+556
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+557
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+558
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+559
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+560
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+561
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+562
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+563
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+564
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+565
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+566
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+567
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+568
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+569
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+570
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+571
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+572
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+573
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+574
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+575
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+576
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+577
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+578
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+579
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+580
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+581
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+582
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+583
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+584
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+585
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+586
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+587
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+588
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+589
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+590
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+591
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+592
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+593
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+594
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+595
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+596
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+597
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+598
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+599
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+600
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+601
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+602
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+603
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+604
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+605
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+606
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+607
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+608
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+609
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+610
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+611
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+612
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+613
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+614
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+615
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+616
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+617
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+618
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+619
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+620
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+621
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+622
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+623
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+624
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+625
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+626
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+627
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+628
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+629
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+630
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+631
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+632
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+633
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+634
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+635
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+636
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+637
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+638
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+639
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+640
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+641
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+642
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+643
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+644
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+645
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+646
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+647
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+648
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+649
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+650
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+651
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+652
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+653
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+654
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+655
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+656
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+657
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+658
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+659
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+660
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+661
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+662
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+663
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+664
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+665
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+666
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+667
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+668
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+669
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+670
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+671
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+672
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+673
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+674
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+675
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+676
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+677
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+678
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+679
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+680
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+681
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+682
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+683
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+684
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+685
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+686
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+687
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+688
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+689
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+690
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+691
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+692
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+693
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+694
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+695
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+696
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+697
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+698
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+699
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+700
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+701
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+702
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+703
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+704
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+705
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+706
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+707
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+708
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+709
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+710
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+711
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+712
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+713
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+714
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+715
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+716
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+717
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+718
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+719
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+720
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+721
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+722
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+723
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+724
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+725
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+726
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+727
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+728
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+729
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+730
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+731
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+732
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+733
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+734
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+735
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+736
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+737
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+738
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+739
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+740
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+741
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+742
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+743
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+744
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+745
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+746
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+747
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+748
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+749
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+750
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+751
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+752
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+753
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+754
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+755
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+756
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+757
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+758
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+759
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+760
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+761
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+762
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+763
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+764
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+765
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+766
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+767
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+768
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+769
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+770
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+771
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+772
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+773
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+774
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+775
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+776
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+777
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+778
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+779
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+780
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+781
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+782
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+783
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+784
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+785
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+786
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+787
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+788
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+789
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+790
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+791
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+792
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+793
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+794
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+795
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+796
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+797
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+798
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+799
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+800
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+801
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+802
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+803
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+804
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+805
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+806
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+807
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+808
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+809
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+810
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+811
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+812
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+813
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+814
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+815
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+816
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+817
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+818
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+819
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+820
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+821
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+822
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+823
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+824
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+825
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+826
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+827
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+828
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+829
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+830
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+831
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+832
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+833
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+834
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+835
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+836
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+837
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+838
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+839
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+840
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+841
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+842
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+843
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+844
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+845
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+846
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+847
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+848
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+849
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+850
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+851
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+852
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+853
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+854
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+855
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+856
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+857
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+858
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+859
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+860
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+861
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+862
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+863
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+864
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+865
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+866
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+867
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+868
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+869
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+870
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+871
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+872
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+873
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+874
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+875
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+876
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+877
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+878
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+879
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+880
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+881
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+882
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+883
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+884
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+885
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+886
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+887
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+888
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+889
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+890
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+891
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+892
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+893
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+894
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+895
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_CHARACTER_POINTS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_CREATURES
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_RESOURCES
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_RESOURCES+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPERTISE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_RANGED_EXPERTISE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING_EXPERTISE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE_FROM_ATTRIBUTE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE_FROM_ATTRIBUTE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SHIELD_BLOCK
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SHIELD_BLOCK_CRIT_PERCENTAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MASTERY
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SPEED
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_AVOIDANCE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_STURDINESS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_VERSATILITY
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_POWER_DAMAGE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_POWER_HEALING
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+32
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+33
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+34
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+35
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+36
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+37
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+38
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+39
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+40
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+41
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+42
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+43
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+44
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+45
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+46
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+47
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+48
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+49
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+50
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+51
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+52
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+53
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+54
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+55
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+56
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+57
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+58
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+59
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+60
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+61
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+62
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+63
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+64
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+65
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+66
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+67
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+68
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+69
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+70
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+71
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+72
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+73
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+74
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+75
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+76
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+77
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+78
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+79
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+80
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+81
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+82
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+83
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+84
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+85
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+86
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+87
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+88
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+89
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+90
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+91
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+92
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+93
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+94
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+95
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+96
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+97
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+98
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+99
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+100
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+101
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+102
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+103
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+104
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+105
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+106
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+107
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+108
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+109
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+110
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+111
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+112
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+113
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+114
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+115
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+116
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+117
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+118
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+119
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+120
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+121
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+122
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+123
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+124
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+125
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+126
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+127
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+128
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+129
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+130
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+131
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+132
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+133
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+134
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+135
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+136
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+137
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+138
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+139
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+140
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+141
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+142
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+143
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+144
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+145
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+146
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+147
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+148
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+149
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+150
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+151
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+152
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+153
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+154
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+155
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+156
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+157
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+158
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+159
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+160
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+161
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+162
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+163
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+164
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+165
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+166
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+167
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+168
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+169
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+170
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+171
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+172
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+173
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+174
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+175
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+176
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+177
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+178
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+179
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+180
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+181
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+182
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+183
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+184
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+185
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+186
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+187
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+188
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+189
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+190
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+191
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+192
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+193
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+194
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+195
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+196
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+197
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+198
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+199
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+200
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+201
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+202
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+203
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+204
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+205
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+206
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+207
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+208
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+209
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+210
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+211
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+212
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+213
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+214
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+215
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+216
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+217
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+218
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+219
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+220
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+221
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+222
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+223
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+224
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+225
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+226
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+227
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+228
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+229
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+230
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+231
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+232
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+233
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+234
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+235
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+236
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+237
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+238
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+239
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+240
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+241
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+242
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+243
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+244
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+245
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+246
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+247
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+248
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+249
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+250
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+251
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+252
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+253
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+254
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+255
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+256
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+257
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+258
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+259
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+260
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+261
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+262
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+263
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+264
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+265
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+266
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+267
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+268
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+269
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+270
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+271
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+272
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+273
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+274
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+275
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+276
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+277
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+278
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+279
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+280
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+281
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+282
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+283
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+284
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+285
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+286
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+287
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+288
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+289
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+290
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+291
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+292
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+293
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+294
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+295
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+296
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+297
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+298
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+299
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+300
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+301
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+302
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+303
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+304
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+305
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+306
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+307
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+308
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+309
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+310
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+311
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+312
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+313
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+314
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+315
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+316
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+317
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+318
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+319
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_RESILIENCE_PERCENT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LOCAL_FLAGS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BYTES
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_MEDALS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KILLS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+32
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+33
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+34
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+35
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+36
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+37
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+38
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+39
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+40
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+41
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+42
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+43
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+44
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+45
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+46
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+47
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+48
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+49
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+50
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+51
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+52
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+53
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_LEVEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PET_SPELL_POWER
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_UI_HIT_MODIFIER
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_UI_SPELL_HIT_MODIFIER
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HOME_REALM_TIME_OFFSET
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_PET_HASTE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BYTES2
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // ACTIVE_PLAYER_FIELD_BYTES3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LFG_BONUS_FACTION_ID
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID
- UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // ACTIVE_PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+2
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+3
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+4
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+5
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+6
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+7
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+8
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+9
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+10
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+11
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+12
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+13
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+14
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+15
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+16
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+17
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+18
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+19
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+20
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+21
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+22
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+23
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+24
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+25
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+26
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+27
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+28
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+29
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+30
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+31
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+32
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+33
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+34
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+35
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+36
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+37
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+38
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+39
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+40
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+41
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+42
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+43
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+44
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+45
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+46
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+47
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+48
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+49
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+50
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+51
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+52
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+53
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+54
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+55
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+56
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+57
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+58
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+59
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+60
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+61
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+62
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+63
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+64
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+65
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+66
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+67
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+68
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+69
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+70
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+71
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+72
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+73
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+74
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+75
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+76
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+77
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+78
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+79
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+80
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+81
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+82
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+83
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+84
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+85
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+86
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+87
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+88
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+89
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+90
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+91
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+92
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+93
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+94
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+95
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+96
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+97
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+98
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+99
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+100
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+101
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+102
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+103
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+104
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+105
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+106
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+107
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+108
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+109
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+110
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+111
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+112
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+113
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+114
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+115
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+116
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+117
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+118
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+119
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+120
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+121
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+122
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+123
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+124
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+125
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+126
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+127
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+128
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+129
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+130
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+131
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+132
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+133
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+134
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+135
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+136
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+137
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+138
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+139
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+140
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+141
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+142
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+143
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+144
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+145
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+146
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+147
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+148
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+149
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+150
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+151
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+152
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+153
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+154
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+155
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+156
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+157
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+158
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+159
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+160
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+161
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+162
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+163
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+164
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+165
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+166
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+167
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+168
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+169
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+170
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+171
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+172
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+173
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+174
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+175
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+176
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+177
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+178
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+179
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+180
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+181
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+182
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+183
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+184
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+185
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+186
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+187
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+188
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+189
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+190
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+191
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+192
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+193
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+194
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+195
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+196
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+197
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+198
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+199
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+200
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+201
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+202
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+203
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+204
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+205
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+206
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+207
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+208
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+209
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+210
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+211
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+212
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+213
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+214
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+215
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+216
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+217
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+218
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+219
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+220
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+221
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+222
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+223
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+224
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+225
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+226
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+227
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+228
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+229
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+230
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+231
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+232
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+233
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+234
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+235
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+236
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+237
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+238
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+239
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+240
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+241
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+242
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+243
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+244
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+245
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+246
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+247
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+248
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+249
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+250
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+251
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+252
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+253
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+254
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+255
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+256
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+257
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+258
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+259
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+260
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+261
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+262
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+263
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+264
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+265
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+266
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+267
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+268
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+269
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+270
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+271
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+272
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+273
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+274
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+275
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+276
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+277
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+278
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+279
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+280
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+281
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+282
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+283
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+284
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+285
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+286
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+287
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+288
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+289
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+290
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+291
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+292
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+293
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+294
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+295
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+296
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+297
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+298
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+299
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+300
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+301
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+302
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+303
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+304
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+305
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+306
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+307
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+308
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+309
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+310
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+311
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+312
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+313
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+314
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+315
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+316
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+317
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+318
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+319
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+320
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+321
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+322
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+323
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+324
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+325
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+326
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+327
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+328
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+329
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+330
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+331
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+332
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+333
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+334
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+335
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+336
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+337
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+338
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+339
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+340
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+341
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+342
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+343
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+344
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+345
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+346
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+347
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+348
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+349
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+350
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+351
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+352
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+353
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+354
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+355
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+356
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+357
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+358
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+359
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+360
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+361
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+362
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+363
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+364
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+365
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+366
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+367
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+368
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+369
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+370
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+371
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+372
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+373
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+374
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+375
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+376
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+377
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+378
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+379
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+380
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+381
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+382
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+383
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+384
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+385
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+386
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+387
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+388
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+389
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+390
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+391
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+392
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+393
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+394
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+395
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+396
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+397
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+398
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+399
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+400
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+401
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+402
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+403
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+404
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+405
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+406
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+407
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+408
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+409
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+410
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+411
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+412
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+413
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+414
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+415
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+416
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+417
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+418
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+419
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+420
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+421
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+422
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+423
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+424
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+425
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+426
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+427
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+428
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+429
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+430
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+431
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+432
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+433
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+434
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+435
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+436
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+437
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+438
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+439
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+440
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+441
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+442
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+443
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+444
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+445
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+446
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+447
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+448
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+449
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+450
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+451
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+452
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+453
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+454
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+455
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+456
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+457
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+458
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+459
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+460
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+461
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+462
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+463
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+464
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+465
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+466
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+467
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+468
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+469
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+470
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+471
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+472
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+473
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+474
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+475
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+476
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+477
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+478
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+479
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+480
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+481
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+482
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+483
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+484
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+485
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+486
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+487
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+488
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+489
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+490
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+491
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+492
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+493
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+494
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+495
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+496
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+497
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+498
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+499
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+500
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+501
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+502
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+503
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+504
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+505
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+506
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+507
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+508
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+509
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+510
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+511
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+512
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+513
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+514
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+515
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+516
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+517
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+518
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+519
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+520
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+521
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+522
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+523
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+524
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+525
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+526
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+527
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+528
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+529
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+530
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+531
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+532
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+533
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+534
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+535
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+536
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+537
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+538
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+539
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+540
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+541
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+542
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+543
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+544
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+545
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+546
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+547
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+548
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+549
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+550
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+551
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+552
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+553
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+554
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+555
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+556
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+557
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+558
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+559
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+560
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+561
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+562
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+563
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+564
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+565
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+566
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+567
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+568
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+569
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+570
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+571
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+572
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+573
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+574
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+575
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+576
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+577
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+578
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+579
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+580
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+581
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+582
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+583
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+584
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+585
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+586
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+587
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+588
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+589
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+590
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+591
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+592
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+593
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+594
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+595
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+596
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+597
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+598
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+599
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+600
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+601
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+602
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+603
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+604
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+605
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+606
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+607
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+608
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+609
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+610
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+611
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+612
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+613
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+614
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+615
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+616
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+617
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+618
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+619
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+620
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+621
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+622
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+623
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+624
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+625
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+626
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+627
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+628
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+629
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+630
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+631
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+632
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+633
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+634
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+635
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+636
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+637
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+638
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+639
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+640
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+641
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+642
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+643
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+644
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+645
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+646
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+647
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+648
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+649
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+650
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+651
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+652
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+653
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+654
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+655
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+656
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+657
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+658
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+659
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+660
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+661
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+662
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+663
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+664
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+665
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+666
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+667
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+668
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+669
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+670
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+671
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+672
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+673
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+674
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+675
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+676
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+677
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+678
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+679
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+680
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+681
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+682
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+683
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+684
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+685
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+686
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+687
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+688
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+689
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+690
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+691
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+692
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+693
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+694
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+695
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+696
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+697
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+698
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+699
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+700
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+701
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+702
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+703
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+704
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+705
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+706
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+707
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+708
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+709
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+710
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+711
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+712
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+713
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+714
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+715
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+716
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+717
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+718
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+719
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+720
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+721
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+722
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+723
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+724
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+725
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+726
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+727
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+728
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+729
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+730
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+731
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+732
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+733
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+734
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+735
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+736
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+737
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+738
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+739
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+740
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+741
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+742
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+743
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+744
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+745
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+746
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+747
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+748
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+749
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+750
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+751
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+752
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+753
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+754
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+755
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+756
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+757
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+758
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+759
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+760
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+761
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+762
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+763
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+764
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+765
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+766
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+767
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+768
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+769
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+770
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+771
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+772
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+773
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+774
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+775
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+776
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+777
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+778
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+779
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+780
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+781
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+782
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+783
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+784
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+785
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+786
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+787
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+788
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+789
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+790
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+791
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+792
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+793
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+794
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+795
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+796
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+797
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+798
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+799
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+800
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+801
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+802
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+803
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+804
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+805
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+806
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+807
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+808
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+809
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+810
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+811
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+812
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+813
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+814
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+815
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+816
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+817
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+818
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+819
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+820
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+821
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+822
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+823
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+824
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+825
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+826
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+827
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+828
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+829
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+830
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+831
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+832
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+833
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+834
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+835
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+836
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+837
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+838
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+839
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+840
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+841
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+842
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+843
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+844
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+845
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+846
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+847
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+848
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+849
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+850
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+851
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+852
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+853
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+854
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+855
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+856
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+857
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+858
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+859
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+860
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+861
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+862
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+863
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+864
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+865
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+866
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+867
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+868
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+869
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+870
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+871
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+872
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+873
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+874
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+875
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+876
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+877
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+878
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+879
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+880
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+881
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+882
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+883
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+884
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+885
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+886
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+887
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+888
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+889
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+890
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+891
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+892
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+893
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+894
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+895
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+896
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+897
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+898
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+899
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+900
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+901
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+902
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+903
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+904
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+905
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+906
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+907
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+908
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+909
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+910
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+911
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+912
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+913
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+914
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+915
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+916
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+917
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+918
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+919
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+920
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+921
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+922
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+923
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+924
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+925
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+926
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+927
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+928
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+929
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+930
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+931
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+932
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+933
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+934
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+935
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+936
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+937
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+938
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+939
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+940
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+941
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+942
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+943
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+944
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+945
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+946
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+947
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+948
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+949
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+950
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+951
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+952
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+953
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+954
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+955
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+956
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+957
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+958
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+959
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+960
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+961
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+962
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+963
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+964
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+965
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+966
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+967
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+968
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+969
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+970
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+971
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+972
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+973
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+974
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+975
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+976
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+977
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+978
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+979
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+980
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+981
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+982
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+983
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+984
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+985
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+986
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+987
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+988
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+989
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+990
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+991
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+992
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+993
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+994
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+995
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+996
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+997
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+998
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+999
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1000
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1001
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1002
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1003
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1004
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1005
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1006
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1007
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1008
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1009
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1010
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1011
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1012
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1013
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1014
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1015
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1016
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1017
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1018
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1019
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1020
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1021
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1022
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1023
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1024
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1025
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1026
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1027
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1028
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1029
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1030
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1031
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1032
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1033
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1034
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1035
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1036
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1037
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1038
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1039
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1040
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1041
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1042
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1043
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1044
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1045
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1046
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1047
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1048
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1049
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1050
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1051
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1052
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1053
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1054
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1055
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1056
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1057
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1058
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1059
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1060
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1061
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1062
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1063
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1064
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1065
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1066
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1067
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1068
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1069
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1070
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1071
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1072
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1073
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1074
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1075
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1076
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1077
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1078
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1079
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1080
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1081
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1082
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1083
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1084
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1085
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1086
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1087
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1088
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1089
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1090
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1091
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1092
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1093
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1094
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1095
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1096
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1097
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1098
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1099
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1100
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1101
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1102
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1103
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1104
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1105
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1106
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1107
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1108
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1109
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1110
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1111
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1112
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1113
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1114
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1115
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1116
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1117
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1118
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1119
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1120
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1121
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1122
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1123
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1124
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1125
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1126
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1127
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1128
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1129
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1130
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1131
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1132
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1133
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1134
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1135
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1136
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1137
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1138
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1139
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1140
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1141
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1142
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1143
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1144
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1145
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1146
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1147
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1148
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1149
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1150
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1151
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1152
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1153
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1154
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1155
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1156
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1157
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1158
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1159
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1160
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1161
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1162
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1163
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1164
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1165
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1166
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1167
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1168
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1169
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1170
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1171
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1172
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1173
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1174
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1175
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1176
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1177
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1178
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1179
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1180
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1181
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1182
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1183
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1184
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1185
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1186
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1187
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1188
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1189
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1190
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1191
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1192
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1193
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1194
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1195
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1196
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1197
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1198
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1199
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1200
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1201
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1202
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1203
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1204
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1205
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1206
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1207
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1208
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1209
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1210
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1211
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1212
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1213
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1214
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1215
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1216
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1217
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1218
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1219
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1220
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1221
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1222
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1223
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1224
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1225
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1226
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1227
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1228
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1229
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1230
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1231
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1232
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1233
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1234
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1235
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1236
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1237
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1238
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1239
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1240
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1241
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1242
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1243
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1244
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1245
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1246
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1247
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1248
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1249
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1250
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1251
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1252
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1253
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1254
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1255
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1256
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1257
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1258
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1259
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1260
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1261
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1262
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1263
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1264
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1265
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1266
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1267
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1268
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1269
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1270
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1271
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1272
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1273
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1274
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1275
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1276
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1277
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1278
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1279
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1280
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1281
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1282
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1283
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1284
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1285
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1286
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1287
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1288
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1289
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1290
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1291
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1292
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1293
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1294
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1295
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1296
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1297
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1298
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1299
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1300
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1301
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1302
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1303
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1304
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1305
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1306
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1307
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1308
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1309
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1310
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1311
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1312
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1313
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1314
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1315
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1316
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1317
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1318
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1319
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1320
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1321
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1322
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1323
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1324
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1325
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1326
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1327
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1328
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1329
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1330
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1331
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1332
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1333
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1334
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1335
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1336
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1337
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1338
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1339
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1340
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1341
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1342
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1343
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1344
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1345
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1346
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1347
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1348
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1349
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1350
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1351
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1352
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1353
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1354
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1355
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1356
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1357
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1358
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1359
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1360
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1361
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1362
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1363
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1364
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1365
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1366
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1367
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1368
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1369
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1370
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1371
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1372
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1373
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1374
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1375
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1376
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1377
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1378
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1379
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1380
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1381
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1382
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1383
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1384
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1385
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1386
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1387
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1388
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1389
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1390
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1391
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1392
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1393
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1394
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1395
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1396
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1397
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1398
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1399
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1400
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1401
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1402
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1403
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1404
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1405
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1406
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1407
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1408
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1409
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1410
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1411
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1412
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1413
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1414
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1415
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1416
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1417
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1418
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1419
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1420
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1421
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1422
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1423
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1424
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1425
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1426
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1427
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1428
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1429
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1430
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1431
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1432
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1433
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1434
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1435
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1436
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1437
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1438
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1439
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1440
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1441
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1442
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1443
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1444
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1445
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1446
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1447
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1448
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1449
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1450
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1451
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1452
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1453
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1454
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1455
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1456
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1457
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1458
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1459
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1460
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1461
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1462
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1463
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1464
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1465
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1466
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1467
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1468
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1469
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1470
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1471
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1472
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1473
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1474
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1475
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1476
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1477
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1478
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1479
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1480
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1481
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1482
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1483
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1484
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1485
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1486
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1487
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1488
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1489
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1490
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1491
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1492
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1493
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1494
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1495
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1496
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1497
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1498
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1499
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1500
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1501
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1502
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1503
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1504
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1505
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1506
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1507
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1508
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1509
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1510
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1511
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1512
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1513
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1514
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1515
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1516
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1517
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1518
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1519
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1520
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1521
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1522
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1523
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1524
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1525
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1526
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1527
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1528
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1529
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1530
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1531
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1532
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1533
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1534
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1535
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1536
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1537
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1538
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1539
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1540
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1541
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1542
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1543
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1544
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1545
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1546
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1547
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1548
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1549
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1550
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1551
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1552
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1553
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1554
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1555
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1556
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1557
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1558
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1559
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1560
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1561
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1562
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1563
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1564
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1565
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1566
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1567
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1568
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1569
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1570
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1571
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1572
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1573
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1574
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1575
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1576
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1577
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1578
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1579
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1580
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1581
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1582
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1583
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1584
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1585
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1586
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1587
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1588
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1589
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1590
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1591
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1592
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1593
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1594
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1595
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1596
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1597
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1598
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1599
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1600
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1601
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1602
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1603
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1604
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1605
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1606
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1607
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1608
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1609
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1610
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1611
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1612
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1613
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1614
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1615
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1616
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1617
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1618
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1619
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1620
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1621
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1622
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1623
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1624
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1625
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1626
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1627
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1628
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1629
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1630
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1631
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1632
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1633
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1634
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1635
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1636
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1637
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1638
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1639
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1640
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1641
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1642
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1643
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1644
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1645
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1646
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1647
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1648
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1649
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1650
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1651
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1652
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1653
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1654
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1655
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1656
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1657
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1658
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1659
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1660
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1661
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1662
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1663
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1664
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1665
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1666
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1667
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1668
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1669
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1670
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1671
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1672
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1673
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1674
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1675
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1676
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1677
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1678
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1679
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1680
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1681
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1682
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1683
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1684
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1685
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1686
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1687
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1688
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1689
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1690
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1691
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1692
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1693
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1694
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1695
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1696
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1697
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1698
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1699
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1700
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1701
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1702
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1703
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1704
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1705
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1706
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1707
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1708
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1709
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1710
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1711
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1712
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1713
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1714
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1715
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1716
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1717
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1718
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1719
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1720
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1721
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1722
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1723
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1724
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1725
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1726
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1727
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1728
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1729
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1730
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1731
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1732
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1733
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1734
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1735
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1736
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1737
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1738
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1739
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1740
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1741
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1742
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1743
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1744
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1745
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1746
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1747
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1748
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1749
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HONOR
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_TIER_MAX_FROM_WINS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_LAST_WEEKS_TIER_MAX_FROM_WINS
-};
-
-uint32 UnitDynamicUpdateFieldFlags[ACTIVE_PLAYER_DYNAMIC_END] =
-{
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_PASSIVE_SPELLS
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_WORLD_EFFECTS
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS
- UF_FLAG_PUBLIC, // PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH_SITE
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID
- UF_FLAG_NONE, //
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL
- UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH
-};
-
-uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+1
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+2
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+3
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+1
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+2
- UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+3
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_DISPLAYID
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_FLAGS
- UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION
- UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+1
- UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+2
- UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+3
- UF_FLAG_PUBLIC, // GAMEOBJECT_FACTION
- UF_FLAG_PUBLIC, // GAMEOBJECT_LEVEL
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_BYTES_1
- UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_SPELL_VISUAL_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_SPELL_VISUAL_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_ANIM_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_ANIM_KIT_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+1
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+2
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+3
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_FIELD_CUSTOM_PARAM
-};
-
-uint32 GameObjectDynamicUpdateFieldFlags[GAMEOBJECT_DYNAMIC_END] =
-{
- UF_FLAG_PUBLIC, // GAMEOBJECT_DYNAMIC_ENABLE_DOODAD_SETS
-};
-
-uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+1
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+2
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+3
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_TYPE
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_SPELLID
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_RADIUS
- UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTTIME
-};
-
-uint32 CorpseUpdateFieldFlags[CORPSE_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER
- UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+1
- UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+2
- UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+3
- UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY
- UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+1
- UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+2
- UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+3
- UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID
- UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+1
- UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+2
- UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+3
- UF_FLAG_PUBLIC, // CORPSE_FIELD_DISPLAY_ID
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+1
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+2
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+3
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+4
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+5
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+6
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+7
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+8
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+9
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+10
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+11
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+12
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+13
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+14
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+15
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+16
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+17
- UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+18
- UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_1
- UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_2
- UF_FLAG_PUBLIC, // CORPSE_FIELD_FLAGS
- UF_FLAG_DYNAMIC, // CORPSE_FIELD_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // CORPSE_FIELD_FACTIONTEMPLATE
- UF_FLAG_PUBLIC, // CORPSE_FIELD_CUSTOM_DISPLAY_OPTION
-};
-
-uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+1
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+2
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+3
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+4
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+5
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+6
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+1
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+2
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+3
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+4
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+5
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+6
- UF_FLAG_PUBLIC, // AREATRIGGER_CASTER
- UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+1
- UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+2
- UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+3
- UF_FLAG_PUBLIC, // AREATRIGGER_DURATION
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET_SCALE
- UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET_EXTRA_SCALE
- UF_FLAG_PUBLIC, // AREATRIGGER_SPELLID
- UF_FLAG_PUBLIC, // AREATRIGGER_SPELL_FOR_VISUALS
- UF_FLAG_PUBLIC, // AREATRIGGER_SPELL_X_SPELL_VISUAL_ID
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // AREATRIGGER_BOUNDS_RADIUS_2D
- UF_FLAG_PUBLIC, // AREATRIGGER_DECAL_PROPERTIES_ID
- UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID
- UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+1
- UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+2
- UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+3
-};
-
-uint32 SceneObjectUpdateFieldFlags[SCENEOBJECT_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_SCRIPT_PACKAGE_ID
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_RND_SEED_VAL
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+1
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+2
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+3
- UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_SCENE_TYPE
-};
-
-uint32 ConversationUpdateFieldFlags[CONVERSATION_END] =
-{
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2
- UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3
- UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY
- UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS
- UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X
- UF_FLAG_DYNAMIC, // CONVERSATION_LAST_LINE_END_TIME
-};
-
-uint32 ConversationDynamicUpdateFieldFlags[CONVERSATION_DYNAMIC_END] =
-{
- UF_FLAG_PUBLIC, // CONVERSATION_DYNAMIC_FIELD_ACTORS
- UF_FLAG_0x100, // CONVERSATION_DYNAMIC_FIELD_LINES
-};
diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h
deleted file mode 100644
index 17475bd093d..00000000000
--- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _UPDATEFIELDFLAGS_H
-#define _UPDATEFIELDFLAGS_H
-
-#include "UpdateFields.h"
-#include "Define.h"
-
-enum UpdatefieldFlags
-{
- UF_FLAG_NONE = 0x000,
- UF_FLAG_PUBLIC = 0x001,
- UF_FLAG_PRIVATE = 0x002,
- UF_FLAG_OWNER = 0x004,
- UF_FLAG_ITEM_OWNER = 0x008,
- UF_FLAG_SPECIAL_INFO = 0x010,
- UF_FLAG_PARTY_MEMBER = 0x020,
- UF_FLAG_UNIT_ALL = 0x040,
- UF_FLAG_DYNAMIC = 0x080,
- UF_FLAG_0x100 = 0x100,
- UF_FLAG_URGENT = 0x200,
- UF_FLAG_URGENT_SELF_ONLY = 0x400
-};
-
-TC_GAME_API extern uint32 ContainerUpdateFieldFlags[CONTAINER_END];
-TC_GAME_API extern uint32 AzeriteEmpoweredItemUpdateFieldFlags[AZERITE_EMPOWERED_ITEM_END];
-TC_GAME_API extern uint32 AzeriteItemUpdateFieldFlags[AZERITE_ITEM_END];
-TC_GAME_API extern uint32 ItemDynamicUpdateFieldFlags[CONTAINER_DYNAMIC_END];
-TC_GAME_API extern uint32 UnitUpdateFieldFlags[ACTIVE_PLAYER_END];
-TC_GAME_API extern uint32 UnitDynamicUpdateFieldFlags[ACTIVE_PLAYER_DYNAMIC_END];
-TC_GAME_API extern uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END];
-TC_GAME_API extern uint32 GameObjectDynamicUpdateFieldFlags[GAMEOBJECT_DYNAMIC_END];
-TC_GAME_API extern uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END];
-TC_GAME_API extern uint32 CorpseUpdateFieldFlags[CORPSE_END];
-TC_GAME_API extern uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END];
-TC_GAME_API extern uint32 SceneObjectUpdateFieldFlags[SCENEOBJECT_END];
-TC_GAME_API extern uint32 ConversationUpdateFieldFlags[CONVERSATION_END];
-TC_GAME_API extern uint32 ConversationDynamicUpdateFieldFlags[CONVERSATION_DYNAMIC_END];
-
-#endif // _UPDATEFIELDFLAGS_H
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
new file mode 100644
index 00000000000..010ef856bd7
--- /dev/null
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -0,0 +1,3968 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "UpdateFields.h"
+#include "ByteBuffer.h"
+#include "Player.h"
+#include "ViewerDependentValues.h"
+
+#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#else
+#pragma warning(push)
+#pragma warning(disable: 4100)
+#endif
+
+namespace UF
+{
+void ObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
+{
+ data << int32(EntryID);
+ data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(DynamicFlags, owner, receiver));
+ data << float(Scale);
+}
+
+void ObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
+{
+ UpdateMask<4> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(EntryID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(DynamicFlags, owner, receiver));
+ }
+ if (changesMask[3])
+ {
+ data << float(Scale);
+ }
+ }
+}
+
+void ObjectData::ClearChangesMask()
+{
+ Base::ClearChangesMask(EntryID);
+ Base::ClearChangesMask(DynamicFlags);
+ Base::ClearChangesMask(Scale);
+ _changesMask.ResetAll();
+}
+
+void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data << int32(ID);
+ data << uint32(Duration);
+ data << int16(Charges);
+ data << uint16(Inactive);
+}
+
+void ItemEnchantment::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ UpdateMask<5> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 5);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(ID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(Duration);
+ }
+ if (changesMask[3])
+ {
+ data << int16(Charges);
+ }
+ if (changesMask[4])
+ {
+ data << uint16(Inactive);
+ }
+ }
+}
+
+void ItemEnchantment::ClearChangesMask()
+{
+ Base::ClearChangesMask(ID);
+ Base::ClearChangesMask(Duration);
+ Base::ClearChangesMask(Charges);
+ Base::ClearChangesMask(Inactive);
+ _changesMask.ResetAll();
+}
+
+void ArtifactPower::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data << int16(ArtifactPowerID);
+ data << uint8(PurchasedRank);
+ data << uint8(CurrentRankWithBonus);
+}
+
+void ArtifactPower::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int16(ArtifactPowerID);
+ data << uint8(PurchasedRank);
+ data << uint8(CurrentRankWithBonus);
+}
+
+void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data << int32(ItemID);
+ for (std::size_t i = 0; i < 16; ++i)
+ {
+ data << uint16(BonusListIDs[i]);
+ }
+ data << uint8(Context);
+}
+
+void SocketedGem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ UpdateMask<20> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 1);
+ if (changesMask.GetBlock(0))
+ data.WriteBits(changesMask.GetBlock(0), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(ItemID);
+ }
+ if (changesMask[2])
+ {
+ data << uint8(Context);
+ }
+ }
+ if (changesMask[3])
+ {
+ for (std::size_t i = 0; i < 16; ++i)
+ {
+ if (changesMask[4 + i])
+ {
+ data << uint16(BonusListIDs[i]);
+ }
+ }
+ }
+}
+
+void SocketedGem::ClearChangesMask()
+{
+ Base::ClearChangesMask(ItemID);
+ Base::ClearChangesMask(Context);
+ Base::ClearChangesMask(BonusListIDs);
+ _changesMask.ResetAll();
+}
+
+void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data << uint32(BonusListIDs->size());
+ for (std::size_t i = 0; i < BonusListIDs->size(); ++i)
+ {
+ data << int32((*BonusListIDs)[i]);
+ }
+ data << Owner;
+ data << ContainedIn;
+ data << Creator;
+ data << GiftCreator;
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(StackCount);
+ data << uint32(Expiration);
+ for (std::size_t i = 0; i < 5; ++i)
+ {
+ data << int32(SpellCharges[i]);
+ }
+ }
+ data << uint32(DynamicFlags);
+ for (std::size_t i = 0; i < 13; ++i)
+ {
+ Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(Durability);
+ data << uint32(MaxDurability);
+ }
+ data << uint32(CreatePlayedTime);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(ModifiersMask);
+ }
+ data << int32(Context);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint64(ArtifactXP);
+ data << uint8(ItemAppearanceModID);
+ }
+ data << uint32(Modifiers.size());
+ data << uint32(ArtifactPowers.size());
+ data << uint32(Gems.size());
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(Field_130);
+ }
+ for (std::size_t i = 0; i < Modifiers.size(); ++i)
+ {
+ data << int32(Modifiers[i]);
+ }
+ for (std::size_t i = 0; i < ArtifactPowers.size(); ++i)
+ {
+ ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ for (std::size_t i = 0; i < Gems.size(); ++i)
+ {
+ Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+}
+
+void ItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ UpdateMask<40> allowedMaskForTarget({ 0xFC0149FFu, 0x000000FFu });
+ AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
+ WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
+}
+
+void ItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+{
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ allowedMaskForTarget |= { 0x03FEB600u, 0x00000000u };
+}
+
+void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data.WriteBits(changesMask.GetBlocksMask(0), 2);
+ for (std::size_t i = 0; i < 2; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBits(BonusListIDs->size(), 32);
+ for (std::size_t i = 0; i < BonusListIDs->size(); ++i)
+ {
+ data << int32((*BonusListIDs)[i]);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ Modifiers.WriteUpdateMask(data);
+ }
+ if (changesMask[3])
+ {
+ ArtifactPowers.WriteUpdateMask(data);
+ }
+ if (changesMask[4])
+ {
+ Gems.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < Modifiers.size(); ++i)
+ {
+ if (Modifiers.HasChanged(i))
+ {
+ data << int32(Modifiers[i]);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ for (std::size_t i = 0; i < ArtifactPowers.size(); ++i)
+ {
+ if (ArtifactPowers.HasChanged(i))
+ {
+ ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ for (std::size_t i = 0; i < Gems.size(); ++i)
+ {
+ if (Gems.HasChanged(i))
+ {
+ Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[5])
+ {
+ data << Owner;
+ }
+ if (changesMask[6])
+ {
+ data << ContainedIn;
+ }
+ if (changesMask[7])
+ {
+ data << Creator;
+ }
+ if (changesMask[8])
+ {
+ data << GiftCreator;
+ }
+ if (changesMask[9])
+ {
+ data << uint32(StackCount);
+ }
+ if (changesMask[10])
+ {
+ data << uint32(Expiration);
+ }
+ if (changesMask[11])
+ {
+ data << uint32(DynamicFlags);
+ }
+ if (changesMask[12])
+ {
+ data << uint32(Durability);
+ }
+ if (changesMask[13])
+ {
+ data << uint32(MaxDurability);
+ }
+ if (changesMask[14])
+ {
+ data << uint32(CreatePlayedTime);
+ }
+ if (changesMask[15])
+ {
+ data << uint32(ModifiersMask);
+ }
+ if (changesMask[16])
+ {
+ data << int32(Context);
+ }
+ if (changesMask[17])
+ {
+ data << uint64(ArtifactXP);
+ }
+ if (changesMask[18])
+ {
+ data << uint8(ItemAppearanceModID);
+ }
+ if (changesMask[19])
+ {
+ data << uint32(Field_130);
+ }
+ }
+ if (changesMask[20])
+ {
+ for (std::size_t i = 0; i < 5; ++i)
+ {
+ if (changesMask[21 + i])
+ {
+ data << int32(SpellCharges[i]);
+ }
+ }
+ }
+ if (changesMask[26])
+ {
+ for (std::size_t i = 0; i < 13; ++i)
+ {
+ if (changesMask[27 + i])
+ {
+ Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+}
+
+void ItemData::ClearChangesMask()
+{
+ Base::ClearChangesMask(BonusListIDs);
+ Base::ClearChangesMask(Modifiers);
+ Base::ClearChangesMask(ArtifactPowers);
+ Base::ClearChangesMask(Gems);
+ Base::ClearChangesMask(Owner);
+ Base::ClearChangesMask(ContainedIn);
+ Base::ClearChangesMask(Creator);
+ Base::ClearChangesMask(GiftCreator);
+ Base::ClearChangesMask(StackCount);
+ Base::ClearChangesMask(Expiration);
+ Base::ClearChangesMask(DynamicFlags);
+ Base::ClearChangesMask(Durability);
+ Base::ClearChangesMask(MaxDurability);
+ Base::ClearChangesMask(CreatePlayedTime);
+ Base::ClearChangesMask(ModifiersMask);
+ Base::ClearChangesMask(Context);
+ Base::ClearChangesMask(ArtifactXP);
+ Base::ClearChangesMask(ItemAppearanceModID);
+ Base::ClearChangesMask(Field_130);
+ Base::ClearChangesMask(SpellCharges);
+ Base::ClearChangesMask(Enchantment);
+ _changesMask.ResetAll();
+}
+
+void ContainerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
+{
+ for (std::size_t i = 0; i < 36; ++i)
+ {
+ data << Slots[i];
+ }
+ data << uint32(NumSlots);
+}
+
+void ContainerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
+{
+ UpdateMask<39> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 2);
+ for (std::size_t i = 0; i < 2; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint32(NumSlots);
+ }
+ }
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < 36; ++i)
+ {
+ if (changesMask[3 + i])
+ {
+ data << Slots[i];
+ }
+ }
+ }
+}
+
+void ContainerData::ClearChangesMask()
+{
+ Base::ClearChangesMask(NumSlots);
+ Base::ClearChangesMask(Slots);
+ _changesMask.ResetAll();
+}
+
+void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ for (std::size_t i = 0; i < 5; ++i)
+ {
+ data << int32(Selections[i]);
+ }
+}
+
+void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ UpdateMask<6> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 1);
+ if (changesMask.GetBlock(0))
+ data.WriteBits(changesMask.GetBlock(0), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ for (std::size_t i = 0; i < 5; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data << int32(Selections[i]);
+ }
+ }
+ }
+}
+
+void AzeriteEmpoweredItemData::ClearChangesMask()
+{
+ Base::ClearChangesMask(Selections);
+ _changesMask.ResetAll();
+}
+
+void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data << uint64(Xp);
+ data << uint32(Level);
+ data << uint32(AuraLevel);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(KnowledgeLevel);
+ data << uint32(DEBUGknowledgeWeek);
+ }
+}
+
+void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ UpdateMask<6> allowedMaskForTarget({ 0x0000000Fu });
+ AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
+ WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
+}
+
+void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+{
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ allowedMaskForTarget |= { 0x00000030u };
+}
+
+void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+{
+ data.WriteBits(changesMask.GetBlock(0), 6);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint64(Xp);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(Level);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(AuraLevel);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(KnowledgeLevel);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(DEBUGknowledgeWeek);
+ }
+ }
+}
+
+void AzeriteItemData::ClearChangesMask()
+{
+ Base::ClearChangesMask(Xp);
+ Base::ClearChangesMask(Level);
+ Base::ClearChangesMask(AuraLevel);
+ Base::ClearChangesMask(KnowledgeLevel);
+ Base::ClearChangesMask(DEBUGknowledgeWeek);
+ _changesMask.ResetAll();
+}
+
+void UnitChannel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data << int32(SpellID);
+ data << int32(SpellXSpellVisualID);
+}
+
+void UnitChannel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(SpellID);
+ data << int32(SpellXSpellVisualID);
+}
+
+void VisibleItem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data << int32(ItemID);
+ data << uint16(ItemAppearanceModID);
+ data << uint16(ItemVisual);
+}
+
+void VisibleItem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ UpdateMask<4> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(ItemID);
+ }
+ if (changesMask[2])
+ {
+ data << uint16(ItemAppearanceModID);
+ }
+ if (changesMask[3])
+ {
+ data << uint16(ItemVisual);
+ }
+ }
+}
+
+void VisibleItem::ClearChangesMask()
+{
+ Base::ClearChangesMask(ItemID);
+ Base::ClearChangesMask(ItemAppearanceModID);
+ Base::ClearChangesMask(ItemVisual);
+ _changesMask.ResetAll();
+}
+
+void PassiveSpellHistory::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data << int32(SpellID);
+ data << int32(AuraSpellID);
+}
+
+void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(SpellID);
+ data << int32(AuraSpellID);
+}
+
+void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(DisplayID, owner, receiver));
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver));
+ }
+ data << uint32(StateSpellVisualID);
+ data << uint32(StateAnimID);
+ data << uint32(StateAnimKitID);
+ data << uint32(StateWorldEffectIDs->size());
+ data << uint32(StateWorldEffectsQuestObjectiveID);
+ for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i)
+ {
+ data << uint32((*StateWorldEffectIDs)[i]);
+ }
+ data << Charm;
+ data << Summon;
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << Critter;
+ }
+ data << CharmedBy;
+ data << SummonedBy;
+ data << CreatedBy;
+ data << DemonCreator;
+ data << LookAtControllerTarget;
+ data << Target;
+ data << BattlePetCompanionGUID;
+ data << uint64(BattlePetDBID);
+ ChannelData->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ data << uint32(SummonedByHomeRealm);
+ data << uint8(Race);
+ data << uint8(ClassId);
+ data << uint8(PlayerClassId);
+ data << uint8(Sex);
+ data << uint8(DisplayPower);
+ data << uint32(OverrideDisplayPowerID);
+ data << int64(Health);
+ for (std::size_t i = 0; i < 6; ++i)
+ {
+ data << int32(Power[i]);
+ data << int32(MaxPower[i]);
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
+ {
+ for (std::size_t i = 0; i < 6; ++i)
+ {
+ data << float(PowerRegenFlatModifier[i]);
+ data << float(PowerRegenInterruptedFlatModifier[i]);
+ }
+ }
+ data << int64(MaxHealth);
+ data << int32(Level);
+ data << int32(EffectiveLevel);
+ data << int32(ContentTuningID);
+ data << int32(ScalingLevelMin);
+ data << int32(ScalingLevelMax);
+ data << int32(ScalingLevelDelta);
+ data << int32(ScalingFactionGroup);
+ data << int32(ScalingHealthItemLevelCurveID);
+ data << int32(ScalingDamageItemLevelCurveID);
+ data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver));
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
+ data << uint32(Flags2);
+ data << uint32(Flags3);
+ data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(AuraState, owner, receiver));
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << uint32(AttackRoundBaseTime[i]);
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << uint32(RangedAttackRoundBaseTime);
+ }
+ data << float(BoundingRadius);
+ data << float(CombatReach);
+ data << float(DisplayScale);
+ data << int32(NativeDisplayID);
+ data << float(NativeXDisplayScale);
+ data << int32(MountDisplayID);
+ data << int32(CosmeticMountDisplayID);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
+ {
+ data << float(MinDamage);
+ data << float(MaxDamage);
+ data << float(MinOffHandDamage);
+ data << float(MaxOffHandDamage);
+ }
+ data << uint8(StandState);
+ data << uint8(PetTalentPoints);
+ data << uint8(VisFlags);
+ data << uint8(AnimTier);
+ data << uint32(PetNumber);
+ data << uint32(PetNameTimestamp);
+ data << uint32(PetExperience);
+ data << uint32(PetNextLevelExperience);
+ data << float(ModCastingSpeed);
+ data << float(ModSpellHaste);
+ data << float(ModHaste);
+ data << float(ModRangedHaste);
+ data << float(ModHasteRegen);
+ data << float(ModTimeRate);
+ data << int32(CreatedBySpell);
+ data << int32(EmoteState);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ data << int32(Stats[i]);
+ data << int32(StatPosBuff[i]);
+ data << int32(StatNegBuff[i]);
+ }
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
+ {
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ data << int32(Resistances[i]);
+ }
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ data << int32(BonusResistanceMods[i]);
+ data << int32(PowerCostModifier[i]);
+ data << float(PowerCostMultiplier[i]);
+ }
+ }
+ data << int32(BaseMana);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << int32(BaseHealth);
+ }
+ data << uint8(SheatheState);
+ data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(PvpFlags, owner, receiver));
+ data << uint8(PetFlags);
+ data << uint8(ShapeshiftForm);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << int32(AttackPower);
+ data << int32(AttackPowerModPos);
+ data << int32(AttackPowerModNeg);
+ data << float(AttackPowerMultiplier);
+ data << int32(RangedAttackPower);
+ data << int32(RangedAttackPowerModPos);
+ data << int32(RangedAttackPowerModNeg);
+ data << float(RangedAttackPowerMultiplier);
+ data << int32(MainHandWeaponAttackPower);
+ data << int32(OffHandWeaponAttackPower);
+ data << int32(RangedWeaponAttackPower);
+ data << int32(SetAttackSpeedAura);
+ data << float(Lifesteal);
+ data << float(MinRangedDamage);
+ data << float(MaxRangedDamage);
+ data << float(ManaCostModifierModifier);
+ data << float(MaxHealthModifier);
+ }
+ data << float(HoverHeight);
+ data << int32(MinItemLevelCutoff);
+ data << int32(MinItemLevel);
+ data << int32(MaxItemLevel);
+ data << int32(AzeriteItemLevel);
+ data << int32(WildBattlePetLevel);
+ data << uint32(BattlePetCompanionNameTimestamp);
+ data << int32(InteractSpellID);
+ data << int32(ScaleDuration);
+ data << int32(SpellOverrideNameID);
+ data << int32(LooksLikeMountID);
+ data << int32(LooksLikeCreatureID);
+ data << int32(LookAtControllerID);
+ data << int32(TaxiNodesID);
+ data << GuildGUID;
+ data << uint32(PassiveSpells.size());
+ data << uint32(WorldEffects.size());
+ data << uint32(ChannelObjects.size());
+ for (std::size_t i = 0; i < PassiveSpells.size(); ++i)
+ {
+ PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ for (std::size_t i = 0; i < WorldEffects.size(); ++i)
+ {
+ data << int32(WorldEffects[i]);
+ }
+ for (std::size_t i = 0; i < ChannelObjects.size(); ++i)
+ {
+ data << ChannelObjects[i];
+ }
+}
+
+void UnitData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ UpdateMask<191> allowedMaskForTarget({ 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFDFFFF9u, 0x001FC003u, 0x00000000u });
+ AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
+ WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
+}
+
+void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+{
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ allowedMaskForTarget |= { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00200006u, 0xFFE03FFCu, 0x7FFFFFFFu };
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
+ allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00200000u, 0x00003FFCu, 0x00000000u };
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
+ allowedMaskForTarget |= { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000003FCu };
+}
+
+void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+{
+ data.WriteBits(changesMask.GetBlocksMask(0), 6);
+ for (std::size_t i = 0; i < 6; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBits(StateWorldEffectIDs->size(), 32);
+ for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i)
+ {
+ data << uint32((*StateWorldEffectIDs)[i]);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ PassiveSpells.WriteUpdateMask(data);
+ }
+ if (changesMask[3])
+ {
+ WorldEffects.WriteUpdateMask(data);
+ }
+ if (changesMask[4])
+ {
+ ChannelObjects.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < PassiveSpells.size(); ++i)
+ {
+ if (PassiveSpells.HasChanged(i))
+ {
+ PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ for (std::size_t i = 0; i < WorldEffects.size(); ++i)
+ {
+ if (WorldEffects.HasChanged(i))
+ {
+ data << int32(WorldEffects[i]);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ for (std::size_t i = 0; i < ChannelObjects.size(); ++i)
+ {
+ if (ChannelObjects.HasChanged(i))
+ {
+ data << ChannelObjects[i];
+ }
+ }
+ }
+ if (changesMask[5])
+ {
+ data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(DisplayID, owner, receiver));
+ }
+ if (changesMask[6])
+ {
+ data << uint32(StateSpellVisualID);
+ }
+ if (changesMask[7])
+ {
+ data << uint32(StateAnimID);
+ }
+ if (changesMask[8])
+ {
+ data << uint32(StateAnimKitID);
+ }
+ if (changesMask[9])
+ {
+ data << uint32(StateWorldEffectsQuestObjectiveID);
+ }
+ if (changesMask[10])
+ {
+ data << Charm;
+ }
+ if (changesMask[11])
+ {
+ data << Summon;
+ }
+ if (changesMask[12])
+ {
+ data << Critter;
+ }
+ if (changesMask[13])
+ {
+ data << CharmedBy;
+ }
+ if (changesMask[14])
+ {
+ data << SummonedBy;
+ }
+ if (changesMask[15])
+ {
+ data << CreatedBy;
+ }
+ if (changesMask[16])
+ {
+ data << DemonCreator;
+ }
+ if (changesMask[17])
+ {
+ data << LookAtControllerTarget;
+ }
+ if (changesMask[18])
+ {
+ data << Target;
+ }
+ if (changesMask[19])
+ {
+ data << BattlePetCompanionGUID;
+ }
+ if (changesMask[20])
+ {
+ data << uint64(BattlePetDBID);
+ }
+ if (changesMask[21])
+ {
+ ChannelData->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ if (changesMask[22])
+ {
+ data << uint32(SummonedByHomeRealm);
+ }
+ if (changesMask[23])
+ {
+ data << uint8(Race);
+ }
+ if (changesMask[24])
+ {
+ data << uint8(ClassId);
+ }
+ if (changesMask[25])
+ {
+ data << uint8(PlayerClassId);
+ }
+ if (changesMask[26])
+ {
+ data << uint8(Sex);
+ }
+ if (changesMask[27])
+ {
+ data << uint8(DisplayPower);
+ }
+ if (changesMask[28])
+ {
+ data << uint32(OverrideDisplayPowerID);
+ }
+ if (changesMask[29])
+ {
+ data << int64(Health);
+ }
+ if (changesMask[30])
+ {
+ data << int64(MaxHealth);
+ }
+ if (changesMask[31])
+ {
+ data << int32(Level);
+ }
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
+ {
+ data << int32(EffectiveLevel);
+ }
+ if (changesMask[34])
+ {
+ data << int32(ContentTuningID);
+ }
+ if (changesMask[35])
+ {
+ data << int32(ScalingLevelMin);
+ }
+ if (changesMask[36])
+ {
+ data << int32(ScalingLevelMax);
+ }
+ if (changesMask[37])
+ {
+ data << int32(ScalingLevelDelta);
+ }
+ if (changesMask[38])
+ {
+ data << int32(ScalingFactionGroup);
+ }
+ if (changesMask[39])
+ {
+ data << int32(ScalingHealthItemLevelCurveID);
+ }
+ if (changesMask[40])
+ {
+ data << int32(ScalingDamageItemLevelCurveID);
+ }
+ if (changesMask[41])
+ {
+ data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver));
+ }
+ if (changesMask[42])
+ {
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
+ }
+ if (changesMask[43])
+ {
+ data << uint32(Flags2);
+ }
+ if (changesMask[44])
+ {
+ data << uint32(Flags3);
+ }
+ if (changesMask[45])
+ {
+ data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(AuraState, owner, receiver));
+ }
+ if (changesMask[46])
+ {
+ data << uint32(RangedAttackRoundBaseTime);
+ }
+ if (changesMask[47])
+ {
+ data << float(BoundingRadius);
+ }
+ if (changesMask[48])
+ {
+ data << float(CombatReach);
+ }
+ if (changesMask[49])
+ {
+ data << float(DisplayScale);
+ }
+ if (changesMask[50])
+ {
+ data << int32(NativeDisplayID);
+ }
+ if (changesMask[51])
+ {
+ data << float(NativeXDisplayScale);
+ }
+ if (changesMask[52])
+ {
+ data << int32(MountDisplayID);
+ }
+ if (changesMask[53])
+ {
+ data << int32(CosmeticMountDisplayID);
+ }
+ if (changesMask[54])
+ {
+ data << float(MinDamage);
+ }
+ if (changesMask[55])
+ {
+ data << float(MaxDamage);
+ }
+ if (changesMask[56])
+ {
+ data << float(MinOffHandDamage);
+ }
+ if (changesMask[57])
+ {
+ data << float(MaxOffHandDamage);
+ }
+ if (changesMask[58])
+ {
+ data << uint8(StandState);
+ }
+ if (changesMask[59])
+ {
+ data << uint8(PetTalentPoints);
+ }
+ if (changesMask[60])
+ {
+ data << uint8(VisFlags);
+ }
+ if (changesMask[61])
+ {
+ data << uint8(AnimTier);
+ }
+ if (changesMask[62])
+ {
+ data << uint32(PetNumber);
+ }
+ if (changesMask[63])
+ {
+ data << uint32(PetNameTimestamp);
+ }
+ }
+ if (changesMask[64])
+ {
+ if (changesMask[65])
+ {
+ data << uint32(PetExperience);
+ }
+ if (changesMask[66])
+ {
+ data << uint32(PetNextLevelExperience);
+ }
+ if (changesMask[67])
+ {
+ data << float(ModCastingSpeed);
+ }
+ if (changesMask[68])
+ {
+ data << float(ModSpellHaste);
+ }
+ if (changesMask[69])
+ {
+ data << float(ModHaste);
+ }
+ if (changesMask[70])
+ {
+ data << float(ModRangedHaste);
+ }
+ if (changesMask[71])
+ {
+ data << float(ModHasteRegen);
+ }
+ if (changesMask[72])
+ {
+ data << float(ModTimeRate);
+ }
+ if (changesMask[73])
+ {
+ data << int32(CreatedBySpell);
+ }
+ if (changesMask[74])
+ {
+ data << int32(EmoteState);
+ }
+ if (changesMask[75])
+ {
+ data << int32(BaseMana);
+ }
+ if (changesMask[76])
+ {
+ data << int32(BaseHealth);
+ }
+ if (changesMask[77])
+ {
+ data << uint8(SheatheState);
+ }
+ if (changesMask[78])
+ {
+ data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(PvpFlags, owner, receiver));
+ }
+ if (changesMask[79])
+ {
+ data << uint8(PetFlags);
+ }
+ if (changesMask[80])
+ {
+ data << uint8(ShapeshiftForm);
+ }
+ if (changesMask[81])
+ {
+ data << int32(AttackPower);
+ }
+ if (changesMask[82])
+ {
+ data << int32(AttackPowerModPos);
+ }
+ if (changesMask[83])
+ {
+ data << int32(AttackPowerModNeg);
+ }
+ if (changesMask[84])
+ {
+ data << float(AttackPowerMultiplier);
+ }
+ if (changesMask[85])
+ {
+ data << int32(RangedAttackPower);
+ }
+ if (changesMask[86])
+ {
+ data << int32(RangedAttackPowerModPos);
+ }
+ if (changesMask[87])
+ {
+ data << int32(RangedAttackPowerModNeg);
+ }
+ if (changesMask[88])
+ {
+ data << float(RangedAttackPowerMultiplier);
+ }
+ if (changesMask[89])
+ {
+ data << int32(MainHandWeaponAttackPower);
+ }
+ if (changesMask[90])
+ {
+ data << int32(OffHandWeaponAttackPower);
+ }
+ if (changesMask[91])
+ {
+ data << int32(RangedWeaponAttackPower);
+ }
+ if (changesMask[92])
+ {
+ data << int32(SetAttackSpeedAura);
+ }
+ if (changesMask[93])
+ {
+ data << float(Lifesteal);
+ }
+ if (changesMask[94])
+ {
+ data << float(MinRangedDamage);
+ }
+ if (changesMask[95])
+ {
+ data << float(MaxRangedDamage);
+ }
+ }
+ if (changesMask[96])
+ {
+ if (changesMask[97])
+ {
+ data << float(ManaCostModifierModifier);
+ }
+ if (changesMask[98])
+ {
+ data << float(MaxHealthModifier);
+ }
+ if (changesMask[99])
+ {
+ data << float(HoverHeight);
+ }
+ if (changesMask[100])
+ {
+ data << int32(MinItemLevelCutoff);
+ }
+ if (changesMask[101])
+ {
+ data << int32(MinItemLevel);
+ }
+ if (changesMask[102])
+ {
+ data << int32(MaxItemLevel);
+ }
+ if (changesMask[103])
+ {
+ data << int32(AzeriteItemLevel);
+ }
+ if (changesMask[104])
+ {
+ data << int32(WildBattlePetLevel);
+ }
+ if (changesMask[105])
+ {
+ data << uint32(BattlePetCompanionNameTimestamp);
+ }
+ if (changesMask[106])
+ {
+ data << int32(InteractSpellID);
+ }
+ if (changesMask[107])
+ {
+ data << int32(ScaleDuration);
+ }
+ if (changesMask[108])
+ {
+ data << int32(SpellOverrideNameID);
+ }
+ if (changesMask[109])
+ {
+ data << int32(LooksLikeMountID);
+ }
+ if (changesMask[110])
+ {
+ data << int32(LooksLikeCreatureID);
+ }
+ if (changesMask[111])
+ {
+ data << int32(LookAtControllerID);
+ }
+ if (changesMask[112])
+ {
+ data << int32(TaxiNodesID);
+ }
+ if (changesMask[113])
+ {
+ data << GuildGUID;
+ }
+ }
+ if (changesMask[114])
+ {
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ if (changesMask[115 + i])
+ {
+ data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver));
+ }
+ }
+ }
+ if (changesMask[117])
+ {
+ for (std::size_t i = 0; i < 6; ++i)
+ {
+ if (changesMask[118 + i])
+ {
+ data << int32(Power[i]);
+ }
+ if (changesMask[124 + i])
+ {
+ data << int32(MaxPower[i]);
+ }
+ if (changesMask[130 + i])
+ {
+ data << float(PowerRegenFlatModifier[i]);
+ }
+ if (changesMask[136 + i])
+ {
+ data << float(PowerRegenInterruptedFlatModifier[i]);
+ }
+ }
+ }
+ if (changesMask[142])
+ {
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ if (changesMask[143 + i])
+ {
+ VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[146])
+ {
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ if (changesMask[147 + i])
+ {
+ data << uint32(AttackRoundBaseTime[i]);
+ }
+ }
+ }
+ if (changesMask[149])
+ {
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ if (changesMask[150 + i])
+ {
+ data << int32(Stats[i]);
+ }
+ if (changesMask[154 + i])
+ {
+ data << int32(StatPosBuff[i]);
+ }
+ if (changesMask[158 + i])
+ {
+ data << int32(StatNegBuff[i]);
+ }
+ }
+ }
+ if (changesMask[162])
+ {
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ if (changesMask[163 + i])
+ {
+ data << int32(Resistances[i]);
+ }
+ if (changesMask[170 + i])
+ {
+ data << int32(BonusResistanceMods[i]);
+ }
+ if (changesMask[177 + i])
+ {
+ data << int32(PowerCostModifier[i]);
+ }
+ if (changesMask[184 + i])
+ {
+ data << float(PowerCostMultiplier[i]);
+ }
+ }
+ }
+}
+
+void UnitData::ClearChangesMask()
+{
+ Base::ClearChangesMask(StateWorldEffectIDs);
+ Base::ClearChangesMask(PassiveSpells);
+ Base::ClearChangesMask(WorldEffects);
+ Base::ClearChangesMask(ChannelObjects);
+ Base::ClearChangesMask(DisplayID);
+ Base::ClearChangesMask(StateSpellVisualID);
+ Base::ClearChangesMask(StateAnimID);
+ Base::ClearChangesMask(StateAnimKitID);
+ Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID);
+ Base::ClearChangesMask(Charm);
+ Base::ClearChangesMask(Summon);
+ Base::ClearChangesMask(Critter);
+ Base::ClearChangesMask(CharmedBy);
+ Base::ClearChangesMask(SummonedBy);
+ Base::ClearChangesMask(CreatedBy);
+ Base::ClearChangesMask(DemonCreator);
+ Base::ClearChangesMask(LookAtControllerTarget);
+ Base::ClearChangesMask(Target);
+ Base::ClearChangesMask(BattlePetCompanionGUID);
+ Base::ClearChangesMask(BattlePetDBID);
+ Base::ClearChangesMask(ChannelData);
+ Base::ClearChangesMask(SummonedByHomeRealm);
+ Base::ClearChangesMask(Race);
+ Base::ClearChangesMask(ClassId);
+ Base::ClearChangesMask(PlayerClassId);
+ Base::ClearChangesMask(Sex);
+ Base::ClearChangesMask(DisplayPower);
+ Base::ClearChangesMask(OverrideDisplayPowerID);
+ Base::ClearChangesMask(Health);
+ Base::ClearChangesMask(MaxHealth);
+ Base::ClearChangesMask(Level);
+ Base::ClearChangesMask(EffectiveLevel);
+ Base::ClearChangesMask(ContentTuningID);
+ Base::ClearChangesMask(ScalingLevelMin);
+ Base::ClearChangesMask(ScalingLevelMax);
+ Base::ClearChangesMask(ScalingLevelDelta);
+ Base::ClearChangesMask(ScalingFactionGroup);
+ Base::ClearChangesMask(ScalingHealthItemLevelCurveID);
+ Base::ClearChangesMask(ScalingDamageItemLevelCurveID);
+ Base::ClearChangesMask(FactionTemplate);
+ Base::ClearChangesMask(Flags);
+ Base::ClearChangesMask(Flags2);
+ Base::ClearChangesMask(Flags3);
+ Base::ClearChangesMask(AuraState);
+ Base::ClearChangesMask(RangedAttackRoundBaseTime);
+ Base::ClearChangesMask(BoundingRadius);
+ Base::ClearChangesMask(CombatReach);
+ Base::ClearChangesMask(DisplayScale);
+ Base::ClearChangesMask(NativeDisplayID);
+ Base::ClearChangesMask(NativeXDisplayScale);
+ Base::ClearChangesMask(MountDisplayID);
+ Base::ClearChangesMask(CosmeticMountDisplayID);
+ Base::ClearChangesMask(MinDamage);
+ Base::ClearChangesMask(MaxDamage);
+ Base::ClearChangesMask(MinOffHandDamage);
+ Base::ClearChangesMask(MaxOffHandDamage);
+ Base::ClearChangesMask(StandState);
+ Base::ClearChangesMask(PetTalentPoints);
+ Base::ClearChangesMask(VisFlags);
+ Base::ClearChangesMask(AnimTier);
+ Base::ClearChangesMask(PetNumber);
+ Base::ClearChangesMask(PetNameTimestamp);
+ Base::ClearChangesMask(PetExperience);
+ Base::ClearChangesMask(PetNextLevelExperience);
+ Base::ClearChangesMask(ModCastingSpeed);
+ Base::ClearChangesMask(ModSpellHaste);
+ Base::ClearChangesMask(ModHaste);
+ Base::ClearChangesMask(ModRangedHaste);
+ Base::ClearChangesMask(ModHasteRegen);
+ Base::ClearChangesMask(ModTimeRate);
+ Base::ClearChangesMask(CreatedBySpell);
+ Base::ClearChangesMask(EmoteState);
+ Base::ClearChangesMask(BaseMana);
+ Base::ClearChangesMask(BaseHealth);
+ Base::ClearChangesMask(SheatheState);
+ Base::ClearChangesMask(PvpFlags);
+ Base::ClearChangesMask(PetFlags);
+ Base::ClearChangesMask(ShapeshiftForm);
+ Base::ClearChangesMask(AttackPower);
+ Base::ClearChangesMask(AttackPowerModPos);
+ Base::ClearChangesMask(AttackPowerModNeg);
+ Base::ClearChangesMask(AttackPowerMultiplier);
+ Base::ClearChangesMask(RangedAttackPower);
+ Base::ClearChangesMask(RangedAttackPowerModPos);
+ Base::ClearChangesMask(RangedAttackPowerModNeg);
+ Base::ClearChangesMask(RangedAttackPowerMultiplier);
+ Base::ClearChangesMask(MainHandWeaponAttackPower);
+ Base::ClearChangesMask(OffHandWeaponAttackPower);
+ Base::ClearChangesMask(RangedWeaponAttackPower);
+ Base::ClearChangesMask(SetAttackSpeedAura);
+ Base::ClearChangesMask(Lifesteal);
+ Base::ClearChangesMask(MinRangedDamage);
+ Base::ClearChangesMask(MaxRangedDamage);
+ Base::ClearChangesMask(ManaCostModifierModifier);
+ Base::ClearChangesMask(MaxHealthModifier);
+ Base::ClearChangesMask(HoverHeight);
+ Base::ClearChangesMask(MinItemLevelCutoff);
+ Base::ClearChangesMask(MinItemLevel);
+ Base::ClearChangesMask(MaxItemLevel);
+ Base::ClearChangesMask(AzeriteItemLevel);
+ Base::ClearChangesMask(WildBattlePetLevel);
+ Base::ClearChangesMask(BattlePetCompanionNameTimestamp);
+ Base::ClearChangesMask(InteractSpellID);
+ Base::ClearChangesMask(ScaleDuration);
+ Base::ClearChangesMask(SpellOverrideNameID);
+ Base::ClearChangesMask(LooksLikeMountID);
+ Base::ClearChangesMask(LooksLikeCreatureID);
+ Base::ClearChangesMask(LookAtControllerID);
+ Base::ClearChangesMask(TaxiNodesID);
+ Base::ClearChangesMask(GuildGUID);
+ Base::ClearChangesMask(NpcFlags);
+ Base::ClearChangesMask(Power);
+ Base::ClearChangesMask(MaxPower);
+ Base::ClearChangesMask(PowerRegenFlatModifier);
+ Base::ClearChangesMask(PowerRegenInterruptedFlatModifier);
+ Base::ClearChangesMask(VirtualItems);
+ Base::ClearChangesMask(AttackRoundBaseTime);
+ Base::ClearChangesMask(Stats);
+ Base::ClearChangesMask(StatPosBuff);
+ Base::ClearChangesMask(StatNegBuff);
+ Base::ClearChangesMask(Resistances);
+ Base::ClearChangesMask(BonusResistanceMods);
+ Base::ClearChangesMask(PowerCostModifier);
+ Base::ClearChangesMask(PowerCostMultiplier);
+ _changesMask.ResetAll();
+}
+
+void QuestLog::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int32(QuestID);
+ data << uint32(StateFlags);
+ data << uint32(EndTime);
+ data << uint32(AcceptTime);
+ for (std::size_t i = 0; i < 24; ++i)
+ {
+ data << int16(ObjectiveProgress[i]);
+ }
+}
+
+void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<30> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 1);
+ if (changesMask.GetBlock(0))
+ data.WriteBits(changesMask.GetBlock(0), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(QuestID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(StateFlags);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(EndTime);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(AcceptTime);
+ }
+ }
+ if (changesMask[5])
+ {
+ for (std::size_t i = 0; i < 24; ++i)
+ {
+ if (changesMask[6 + i])
+ {
+ data << int16(ObjectiveProgress[i]);
+ }
+ }
+ }
+}
+
+void QuestLog::ClearChangesMask()
+{
+ Base::ClearChangesMask(QuestID);
+ Base::ClearChangesMask(StateFlags);
+ Base::ClearChangesMask(EndTime);
+ Base::ClearChangesMask(AcceptTime);
+ Base::ClearChangesMask(ObjectiveProgress);
+ _changesMask.ResetAll();
+}
+
+void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int32(SpellID);
+ data << int32(Charges);
+ data << uint32(Flags);
+ data << uint32(StartTime);
+ data << uint32(EndTime);
+ data << uint32(NextChargeTime);
+ data << uint8(MaxCharges);
+}
+
+void ArenaCooldown::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<8> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 8);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(SpellID);
+ }
+ if (changesMask[2])
+ {
+ data << int32(Charges);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(Flags);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(StartTime);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(EndTime);
+ }
+ if (changesMask[6])
+ {
+ data << uint32(NextChargeTime);
+ }
+ if (changesMask[7])
+ {
+ data << uint8(MaxCharges);
+ }
+ }
+}
+
+void ArenaCooldown::ClearChangesMask()
+{
+ Base::ClearChangesMask(SpellID);
+ Base::ClearChangesMask(Charges);
+ Base::ClearChangesMask(Flags);
+ Base::ClearChangesMask(StartTime);
+ Base::ClearChangesMask(EndTime);
+ Base::ClearChangesMask(NextChargeTime);
+ Base::ClearChangesMask(MaxCharges);
+ _changesMask.ResetAll();
+}
+
+void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << DuelArbiter;
+ data << WowAccount;
+ data << LootTargetGUID;
+ data << uint32(PlayerFlags);
+ data << uint32(PlayerFlagsEx);
+ data << uint32(GuildRankID);
+ data << uint32(GuildDeleteDate);
+ data << int32(GuildLevel);
+ data << uint8(SkinID);
+ data << uint8(FaceID);
+ data << uint8(HairStyleID);
+ data << uint8(HairColorID);
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ data << uint8(CustomDisplayOption[i]);
+ }
+ data << uint8(FacialHairStyleID);
+ data << uint8(PartyType);
+ data << uint8(NativeSex);
+ data << uint8(Inebriation);
+ data << uint8(PvpTitle);
+ data << uint8(ArenaFaction);
+ data << uint32(DuelTeam);
+ data << int32(GuildTimeStamp);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ {
+ for (std::size_t i = 0; i < 100; ++i)
+ {
+ QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ for (std::size_t i = 0; i < 19; ++i)
+ {
+ VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ data << int32(PlayerTitle);
+ data << int32(FakeInebriation);
+ data << uint32(VirtualPlayerRealm);
+ data << uint32(CurrentSpecID);
+ data << int32(TaxiMountAnimKitID);
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ data << float(AvgItemLevel[i]);
+ }
+ data << uint8(CurrentBattlePetBreedQuality);
+ data << int32(HonorLevel);
+ data << uint32(ArenaCooldowns.size());
+ data << int32(Field_B0);
+ data << int32(Field_B4);
+ for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
+ {
+ ArenaCooldowns[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+}
+
+void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<161> allowedMaskForTarget({ 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u });
+ AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
+ WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
+}
+
+void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+{
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ allowedMaskForTarget |= { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u };
+}
+
+void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data.WriteBits(changesMask.GetBlocksMask(0), 6);
+ for (std::size_t i = 0; i < 6; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ ArenaCooldowns.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
+ {
+ if (ArenaCooldowns.HasChanged(i))
+ {
+ ArenaCooldowns[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ data << DuelArbiter;
+ }
+ if (changesMask[3])
+ {
+ data << WowAccount;
+ }
+ if (changesMask[4])
+ {
+ data << LootTargetGUID;
+ }
+ if (changesMask[5])
+ {
+ data << uint32(PlayerFlags);
+ }
+ if (changesMask[6])
+ {
+ data << uint32(PlayerFlagsEx);
+ }
+ if (changesMask[7])
+ {
+ data << uint32(GuildRankID);
+ }
+ if (changesMask[8])
+ {
+ data << uint32(GuildDeleteDate);
+ }
+ if (changesMask[9])
+ {
+ data << int32(GuildLevel);
+ }
+ if (changesMask[10])
+ {
+ data << uint8(SkinID);
+ }
+ if (changesMask[11])
+ {
+ data << uint8(FaceID);
+ }
+ if (changesMask[12])
+ {
+ data << uint8(HairStyleID);
+ }
+ if (changesMask[13])
+ {
+ data << uint8(HairColorID);
+ }
+ if (changesMask[14])
+ {
+ data << uint8(FacialHairStyleID);
+ }
+ if (changesMask[15])
+ {
+ data << uint8(PartyType);
+ }
+ if (changesMask[16])
+ {
+ data << uint8(NativeSex);
+ }
+ if (changesMask[17])
+ {
+ data << uint8(Inebriation);
+ }
+ if (changesMask[18])
+ {
+ data << uint8(PvpTitle);
+ }
+ if (changesMask[19])
+ {
+ data << uint8(ArenaFaction);
+ }
+ if (changesMask[20])
+ {
+ data << uint32(DuelTeam);
+ }
+ if (changesMask[21])
+ {
+ data << int32(GuildTimeStamp);
+ }
+ if (changesMask[22])
+ {
+ data << int32(PlayerTitle);
+ }
+ if (changesMask[23])
+ {
+ data << int32(FakeInebriation);
+ }
+ if (changesMask[24])
+ {
+ data << uint32(VirtualPlayerRealm);
+ }
+ if (changesMask[25])
+ {
+ data << uint32(CurrentSpecID);
+ }
+ if (changesMask[26])
+ {
+ data << int32(TaxiMountAnimKitID);
+ }
+ if (changesMask[27])
+ {
+ data << uint8(CurrentBattlePetBreedQuality);
+ }
+ if (changesMask[28])
+ {
+ data << int32(HonorLevel);
+ }
+ if (changesMask[29])
+ {
+ data << int32(Field_B0);
+ }
+ if (changesMask[30])
+ {
+ data << int32(Field_B4);
+ }
+ }
+ if (changesMask[31])
+ {
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ if (changesMask[32 + i])
+ {
+ data << uint8(CustomDisplayOption[i]);
+ }
+ }
+ }
+ if (changesMask[35])
+ {
+ for (std::size_t i = 0; i < 100; ++i)
+ {
+ if (changesMask[36 + i])
+ {
+ QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[136])
+ {
+ for (std::size_t i = 0; i < 19; ++i)
+ {
+ if (changesMask[137 + i])
+ {
+ VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[156])
+ {
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ if (changesMask[157 + i])
+ {
+ data << float(AvgItemLevel[i]);
+ }
+ }
+ }
+}
+
+void PlayerData::ClearChangesMask()
+{
+ Base::ClearChangesMask(ArenaCooldowns);
+ Base::ClearChangesMask(DuelArbiter);
+ Base::ClearChangesMask(WowAccount);
+ Base::ClearChangesMask(LootTargetGUID);
+ Base::ClearChangesMask(PlayerFlags);
+ Base::ClearChangesMask(PlayerFlagsEx);
+ Base::ClearChangesMask(GuildRankID);
+ Base::ClearChangesMask(GuildDeleteDate);
+ Base::ClearChangesMask(GuildLevel);
+ Base::ClearChangesMask(SkinID);
+ Base::ClearChangesMask(FaceID);
+ Base::ClearChangesMask(HairStyleID);
+ Base::ClearChangesMask(HairColorID);
+ Base::ClearChangesMask(FacialHairStyleID);
+ Base::ClearChangesMask(PartyType);
+ Base::ClearChangesMask(NativeSex);
+ Base::ClearChangesMask(Inebriation);
+ Base::ClearChangesMask(PvpTitle);
+ Base::ClearChangesMask(ArenaFaction);
+ Base::ClearChangesMask(DuelTeam);
+ Base::ClearChangesMask(GuildTimeStamp);
+ Base::ClearChangesMask(PlayerTitle);
+ Base::ClearChangesMask(FakeInebriation);
+ Base::ClearChangesMask(VirtualPlayerRealm);
+ Base::ClearChangesMask(CurrentSpecID);
+ Base::ClearChangesMask(TaxiMountAnimKitID);
+ Base::ClearChangesMask(CurrentBattlePetBreedQuality);
+ Base::ClearChangesMask(HonorLevel);
+ Base::ClearChangesMask(Field_B0);
+ Base::ClearChangesMask(Field_B4);
+ Base::ClearChangesMask(CustomDisplayOption);
+ Base::ClearChangesMask(QuestLog);
+ Base::ClearChangesMask(VisibleItems);
+ Base::ClearChangesMask(AvgItemLevel);
+ _changesMask.ResetAll();
+}
+
+void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ for (std::size_t i = 0; i < 256; ++i)
+ {
+ data << uint16(SkillLineID[i]);
+ data << uint16(SkillStep[i]);
+ data << uint16(SkillRank[i]);
+ data << uint16(SkillStartingRank[i]);
+ data << uint16(SkillMaxRank[i]);
+ data << int16(SkillTempBonus[i]);
+ data << uint16(SkillPermBonus[i]);
+ }
+}
+
+void SkillInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<1793> const& changesMask = _changesMask;
+ for (std::size_t i = 0; i < 1; ++i)
+ data << uint32(changesMask.GetBlocksMask(i));
+ data.WriteBits(changesMask.GetBlocksMask(1), 25);
+ for (std::size_t i = 0; i < 57; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ for (std::size_t i = 0; i < 256; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data << uint16(SkillLineID[i]);
+ }
+ if (changesMask[257 + i])
+ {
+ data << uint16(SkillStep[i]);
+ }
+ if (changesMask[513 + i])
+ {
+ data << uint16(SkillRank[i]);
+ }
+ if (changesMask[769 + i])
+ {
+ data << uint16(SkillStartingRank[i]);
+ }
+ if (changesMask[1025 + i])
+ {
+ data << uint16(SkillMaxRank[i]);
+ }
+ if (changesMask[1281 + i])
+ {
+ data << int16(SkillTempBonus[i]);
+ }
+ if (changesMask[1537 + i])
+ {
+ data << uint16(SkillPermBonus[i]);
+ }
+ }
+ }
+}
+
+void SkillInfo::ClearChangesMask()
+{
+ Base::ClearChangesMask(SkillLineID);
+ Base::ClearChangesMask(SkillStep);
+ Base::ClearChangesMask(SkillRank);
+ Base::ClearChangesMask(SkillStartingRank);
+ Base::ClearChangesMask(SkillMaxRank);
+ Base::ClearChangesMask(SkillTempBonus);
+ Base::ClearChangesMask(SkillPermBonus);
+ _changesMask.ResetAll();
+}
+
+void RestInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << uint32(Threshold);
+ data << uint8(StateID);
+}
+
+void RestInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<3> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint32(Threshold);
+ }
+ if (changesMask[2])
+ {
+ data << uint8(StateID);
+ }
+ }
+}
+
+void RestInfo::ClearChangesMask()
+{
+ Base::ClearChangesMask(Threshold);
+ Base::ClearChangesMask(StateID);
+ _changesMask.ResetAll();
+}
+
+void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << uint32(Field_0);
+ data << uint32(Field_4);
+ data << uint32(Field_8);
+ data << uint32(Field_C);
+ data << uint32(Rating);
+ data << uint32(Field_14);
+ data << uint32(Field_18);
+ data << uint32(PvpTierID);
+ data.WriteBits(Field_20, 1);
+ data.FlushBits();
+}
+
+void PVPInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<10> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 10);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint32(Field_0);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(Field_4);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(Field_8);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(Field_C);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(Rating);
+ }
+ if (changesMask[6])
+ {
+ data << uint32(Field_14);
+ }
+ if (changesMask[7])
+ {
+ data << uint32(Field_18);
+ }
+ if (changesMask[8])
+ {
+ data << uint32(PvpTierID);
+ }
+ if (changesMask[9])
+ {
+ data.WriteBits(Field_20, 1);
+ }
+ }
+ data.FlushBits();
+}
+
+void PVPInfo::ClearChangesMask()
+{
+ Base::ClearChangesMask(Field_0);
+ Base::ClearChangesMask(Field_4);
+ Base::ClearChangesMask(Field_8);
+ Base::ClearChangesMask(Field_C);
+ Base::ClearChangesMask(Rating);
+ Base::ClearChangesMask(Field_14);
+ Base::ClearChangesMask(Field_18);
+ Base::ClearChangesMask(PvpTierID);
+ Base::ClearChangesMask(Field_20);
+ _changesMask.ResetAll();
+}
+
+void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int32(Field_0);
+ data << int32(Field_4);
+ data << int32(Field_8);
+ data.WriteBits(Type, 5);
+ data.FlushBits();
+}
+
+void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(Field_0);
+ data << int32(Field_4);
+ data << int32(Field_8);
+ data.WriteBits(Type, 5);
+ data.FlushBits();
+}
+
+void SpellPctModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int32(ModIndex);
+ data << float(ModifierValue);
+ data << int32(LabelID);
+}
+
+void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(ModIndex);
+ data << float(ModifierValue);
+ data << int32(LabelID);
+}
+
+void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int32(ModIndex);
+ data << int32(ModifierValue);
+ data << int32(LabelID);
+}
+
+void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(ModIndex);
+ data << int32(ModifierValue);
+ data << int32(LabelID);
+}
+
+void Research::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data << int16(ResearchProjectID);
+}
+
+void Research::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int16(ResearchProjectID);
+}
+
+void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ for (std::size_t i = 0; i < 195; ++i)
+ {
+ data << InvSlots[i];
+ }
+ data << FarsightObject;
+ data << SummonedBattlePetGUID;
+ data << uint32(KnownTitles.size());
+ data << uint64(Coinage);
+ data << int32(XP);
+ data << int32(NextLevelXP);
+ data << int32(TrialXP);
+ Skill->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ data << int32(CharacterPoints);
+ data << int32(MaxTalentTiers);
+ data << int32(TrackCreatureMask);
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << uint32(TrackResourceMask[i]);
+ }
+ data << float(MainhandExpertise);
+ data << float(OffhandExpertise);
+ data << float(RangedExpertise);
+ data << float(CombatRatingExpertise);
+ data << float(BlockPercentage);
+ data << float(DodgePercentage);
+ data << float(DodgePercentageFromAttribute);
+ data << float(ParryPercentage);
+ data << float(ParryPercentageFromAttribute);
+ data << float(CritPercentage);
+ data << float(RangedCritPercentage);
+ data << float(OffhandCritPercentage);
+ data << float(SpellCritPercentage);
+ data << int32(ShieldBlock);
+ data << float(ShieldBlockCritPercentage);
+ data << float(Mastery);
+ data << float(Speed);
+ data << float(Avoidance);
+ data << float(Sturdiness);
+ data << int32(Versatility);
+ data << float(VersatilityBonus);
+ data << float(PvpPowerDamage);
+ data << float(PvpPowerHealing);
+ for (std::size_t i = 0; i < 160; ++i)
+ {
+ data << uint64(ExploredZones[i]);
+ }
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ data << int32(ModDamageDonePos[i]);
+ data << int32(ModDamageDoneNeg[i]);
+ data << float(ModDamageDonePercent[i]);
+ }
+ data << int32(ModHealingDonePos);
+ data << float(ModHealingPercent);
+ data << float(ModHealingDonePercent);
+ data << float(ModPeriodicHealingDonePercent);
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ data << float(WeaponDmgMultipliers[i]);
+ data << float(WeaponAtkSpeedMultipliers[i]);
+ }
+ data << float(ModSpellPowerPercent);
+ data << float(ModResiliencePercent);
+ data << float(OverrideSpellPowerByAPPercent);
+ data << float(OverrideAPBySpellPowerPercent);
+ data << int32(ModTargetResistance);
+ data << int32(ModTargetPhysicalResistance);
+ data << int32(LocalFlags);
+ data << uint8(GrantableLevels);
+ data << uint8(MultiActionBars);
+ data << uint8(LifetimeMaxRank);
+ data << uint8(NumRespecs);
+ data << uint32(PvpMedals);
+ for (std::size_t i = 0; i < 12; ++i)
+ {
+ data << uint32(BuybackPrice[i]);
+ data << uint32(BuybackTimestamp[i]);
+ }
+ data << uint16(TodayHonorableKills);
+ data << uint16(YesterdayHonorableKills);
+ data << uint32(LifetimeHonorableKills);
+ data << int32(WatchedFactionIndex);
+ for (std::size_t i = 0; i < 32; ++i)
+ {
+ data << int32(CombatRatings[i]);
+ }
+ data << int32(MaxLevel);
+ data << int32(ScalingPlayerLevelDelta);
+ data << int32(MaxCreatureScalingLevel);
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ data << uint32(NoReagentCostMask[i]);
+ }
+ data << int32(PetSpellPower);
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << int32(ProfessionSkillLine[i]);
+ }
+ data << float(UiHitModifier);
+ data << float(UiSpellHitModifier);
+ data << int32(HomeRealmTimeOffset);
+ data << float(ModPetHaste);
+ data << uint8(LocalRegenFlags);
+ data << uint8(AuraVision);
+ data << uint8(NumBackpackSlots);
+ data << int32(OverrideSpellsID);
+ data << int32(LfgBonusFactionID);
+ data << uint16(LootSpecID);
+ data << uint32(OverrideZonePVPType);
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ data << uint32(BagSlotFlags[i]);
+ }
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ data << uint32(BankBagSlotFlags[i]);
+ }
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+ data << int32(Honor);
+ data << int32(HonorNextLevel);
+ data << int32(PvpRewardAchieved);
+ data << int32(PvpTierMaxFromWins);
+ data << int32(PvpLastWeeksRewardAchieved);
+ data << int32(PvpLastWeeksTierMaxFromWins);
+ data << int32(PvpLastWeeksRewardClaimed);
+ data << uint8(NumBankSlots);
+ data << uint32(ResearchSites.size());
+ data << uint32(ResearchSiteProgress.size());
+ data << uint32(DailyQuestsCompleted.size());
+ data << uint32(AvailableQuestLineXQuestIDs.size());
+ data << uint32(Heirlooms.size());
+ data << uint32(HeirloomFlags.size());
+ data << uint32(Toys.size());
+ data << uint32(ToyFlags.size());
+ data << uint32(Transmog.size());
+ data << uint32(ConditionalTransmog.size());
+ data << uint32(SelfResSpells.size());
+ data << uint32(CharacterRestrictions.size());
+ data << uint32(SpellPctModByLabel.size());
+ data << uint32(SpellFlatModByLabel.size());
+ for (std::size_t i = 0; i < 1; ++i)
+ {
+ data << uint32(Research[i].size());
+ for (std::size_t j = 0; j < Research[i].size(); ++j)
+ {
+ Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ for (std::size_t i = 0; i < KnownTitles.size(); ++i)
+ {
+ data << uint64(KnownTitles[i]);
+ }
+ for (std::size_t i = 0; i < ResearchSites.size(); ++i)
+ {
+ data << uint16(ResearchSites[i]);
+ }
+ for (std::size_t i = 0; i < ResearchSiteProgress.size(); ++i)
+ {
+ data << uint32(ResearchSiteProgress[i]);
+ }
+ for (std::size_t i = 0; i < DailyQuestsCompleted.size(); ++i)
+ {
+ data << int32(DailyQuestsCompleted[i]);
+ }
+ for (std::size_t i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
+ {
+ data << int32(AvailableQuestLineXQuestIDs[i]);
+ }
+ for (std::size_t i = 0; i < Heirlooms.size(); ++i)
+ {
+ data << int32(Heirlooms[i]);
+ }
+ for (std::size_t i = 0; i < HeirloomFlags.size(); ++i)
+ {
+ data << uint32(HeirloomFlags[i]);
+ }
+ for (std::size_t i = 0; i < Toys.size(); ++i)
+ {
+ data << int32(Toys[i]);
+ }
+ for (std::size_t i = 0; i < ToyFlags.size(); ++i)
+ {
+ data << uint32(ToyFlags[i]);
+ }
+ for (std::size_t i = 0; i < Transmog.size(); ++i)
+ {
+ data << uint32(Transmog[i]);
+ }
+ for (std::size_t i = 0; i < ConditionalTransmog.size(); ++i)
+ {
+ data << int32(ConditionalTransmog[i]);
+ }
+ for (std::size_t i = 0; i < SelfResSpells.size(); ++i)
+ {
+ data << int32(SelfResSpells[i]);
+ }
+ for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i)
+ {
+ SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i)
+ {
+ SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ data.WriteBit(BackpackAutoSortDisabled);
+ data.WriteBit(BankAutoSortDisabled);
+ data.WriteBit(SortBagsRightToLeft);
+ data.WriteBit(InsertItemsLeftToRight);
+ for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ {
+ CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ for (std::size_t i = 0; i < 6; ++i)
+ {
+ PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ data.FlushBits();
+}
+
+void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<1455> const& changesMask = _changesMask;
+ for (std::size_t i = 0; i < 1; ++i)
+ data << uint32(changesMask.GetBlocksMask(i));
+ data.WriteBits(changesMask.GetBlocksMask(1), 14);
+ for (std::size_t i = 0; i < 46; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBit(BackpackAutoSortDisabled);
+ }
+ if (changesMask[2])
+ {
+ data.WriteBit(BankAutoSortDisabled);
+ }
+ if (changesMask[3])
+ {
+ data.WriteBit(SortBagsRightToLeft);
+ }
+ if (changesMask[4])
+ {
+ data.WriteBit(InsertItemsLeftToRight);
+ }
+ if (changesMask[5])
+ {
+ KnownTitles.WriteUpdateMask(data);
+ }
+ if (changesMask[6])
+ {
+ ResearchSites.WriteUpdateMask(data);
+ }
+ if (changesMask[7])
+ {
+ ResearchSiteProgress.WriteUpdateMask(data);
+ }
+ if (changesMask[8])
+ {
+ DailyQuestsCompleted.WriteUpdateMask(data);
+ }
+ if (changesMask[9])
+ {
+ AvailableQuestLineXQuestIDs.WriteUpdateMask(data);
+ }
+ if (changesMask[10])
+ {
+ Heirlooms.WriteUpdateMask(data);
+ }
+ if (changesMask[11])
+ {
+ HeirloomFlags.WriteUpdateMask(data);
+ }
+ if (changesMask[12])
+ {
+ Toys.WriteUpdateMask(data);
+ }
+ if (changesMask[13])
+ {
+ ToyFlags.WriteUpdateMask(data);
+ }
+ if (changesMask[14])
+ {
+ Transmog.WriteUpdateMask(data);
+ }
+ if (changesMask[15])
+ {
+ ConditionalTransmog.WriteUpdateMask(data);
+ }
+ if (changesMask[16])
+ {
+ SelfResSpells.WriteUpdateMask(data);
+ }
+ if (changesMask[17])
+ {
+ SpellPctModByLabel.WriteUpdateMask(data);
+ }
+ if (changesMask[18])
+ {
+ SpellFlatModByLabel.WriteUpdateMask(data);
+ }
+ if (changesMask[19])
+ {
+ CharacterRestrictions.WriteUpdateMask(data);
+ }
+ }
+ if (changesMask[20])
+ {
+ for (std::size_t i = 0; i < 1; ++i)
+ {
+ if (changesMask[21 + i])
+ {
+ Research[i].WriteUpdateMask(data);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[20])
+ {
+ for (std::size_t i = 0; i < 1; ++i)
+ {
+ if (changesMask[21 + i])
+ {
+ for (std::size_t j = 0; j < Research[i].size(); ++j)
+ {
+ if (Research[i].HasChanged(j))
+ {
+ Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ }
+ }
+ if (changesMask[0])
+ {
+ if (changesMask[5])
+ {
+ for (std::size_t i = 0; i < KnownTitles.size(); ++i)
+ {
+ if (KnownTitles.HasChanged(i))
+ {
+ data << uint64(KnownTitles[i]);
+ }
+ }
+ }
+ if (changesMask[6])
+ {
+ for (std::size_t i = 0; i < ResearchSites.size(); ++i)
+ {
+ if (ResearchSites.HasChanged(i))
+ {
+ data << uint16(ResearchSites[i]);
+ }
+ }
+ }
+ if (changesMask[7])
+ {
+ for (std::size_t i = 0; i < ResearchSiteProgress.size(); ++i)
+ {
+ if (ResearchSiteProgress.HasChanged(i))
+ {
+ data << uint32(ResearchSiteProgress[i]);
+ }
+ }
+ }
+ if (changesMask[8])
+ {
+ for (std::size_t i = 0; i < DailyQuestsCompleted.size(); ++i)
+ {
+ if (DailyQuestsCompleted.HasChanged(i))
+ {
+ data << int32(DailyQuestsCompleted[i]);
+ }
+ }
+ }
+ if (changesMask[9])
+ {
+ for (std::size_t i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
+ {
+ if (AvailableQuestLineXQuestIDs.HasChanged(i))
+ {
+ data << int32(AvailableQuestLineXQuestIDs[i]);
+ }
+ }
+ }
+ if (changesMask[10])
+ {
+ for (std::size_t i = 0; i < Heirlooms.size(); ++i)
+ {
+ if (Heirlooms.HasChanged(i))
+ {
+ data << int32(Heirlooms[i]);
+ }
+ }
+ }
+ if (changesMask[11])
+ {
+ for (std::size_t i = 0; i < HeirloomFlags.size(); ++i)
+ {
+ if (HeirloomFlags.HasChanged(i))
+ {
+ data << uint32(HeirloomFlags[i]);
+ }
+ }
+ }
+ if (changesMask[12])
+ {
+ for (std::size_t i = 0; i < Toys.size(); ++i)
+ {
+ if (Toys.HasChanged(i))
+ {
+ data << int32(Toys[i]);
+ }
+ }
+ }
+ if (changesMask[13])
+ {
+ for (std::size_t i = 0; i < ToyFlags.size(); ++i)
+ {
+ if (ToyFlags.HasChanged(i))
+ {
+ data << uint32(ToyFlags[i]);
+ }
+ }
+ }
+ if (changesMask[14])
+ {
+ for (std::size_t i = 0; i < Transmog.size(); ++i)
+ {
+ if (Transmog.HasChanged(i))
+ {
+ data << uint32(Transmog[i]);
+ }
+ }
+ }
+ if (changesMask[15])
+ {
+ for (std::size_t i = 0; i < ConditionalTransmog.size(); ++i)
+ {
+ if (ConditionalTransmog.HasChanged(i))
+ {
+ data << int32(ConditionalTransmog[i]);
+ }
+ }
+ }
+ if (changesMask[16])
+ {
+ for (std::size_t i = 0; i < SelfResSpells.size(); ++i)
+ {
+ if (SelfResSpells.HasChanged(i))
+ {
+ data << int32(SelfResSpells[i]);
+ }
+ }
+ }
+ if (changesMask[17])
+ {
+ for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i)
+ {
+ if (SpellPctModByLabel.HasChanged(i))
+ {
+ SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[18])
+ {
+ for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i)
+ {
+ if (SpellFlatModByLabel.HasChanged(i))
+ {
+ SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[19])
+ {
+ for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ {
+ if (CharacterRestrictions.HasChanged(i))
+ {
+ CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[22])
+ {
+ data << FarsightObject;
+ }
+ if (changesMask[23])
+ {
+ data << SummonedBattlePetGUID;
+ }
+ if (changesMask[24])
+ {
+ data << uint64(Coinage);
+ }
+ if (changesMask[25])
+ {
+ data << int32(XP);
+ }
+ if (changesMask[26])
+ {
+ data << int32(NextLevelXP);
+ }
+ if (changesMask[27])
+ {
+ data << int32(TrialXP);
+ }
+ if (changesMask[28])
+ {
+ Skill->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ if (changesMask[29])
+ {
+ data << int32(CharacterPoints);
+ }
+ if (changesMask[30])
+ {
+ data << int32(MaxTalentTiers);
+ }
+ if (changesMask[31])
+ {
+ data << int32(TrackCreatureMask);
+ }
+ if (changesMask[32])
+ {
+ data << float(MainhandExpertise);
+ }
+ if (changesMask[33])
+ {
+ data << float(OffhandExpertise);
+ }
+ }
+ if (changesMask[34])
+ {
+ if (changesMask[35])
+ {
+ data << float(RangedExpertise);
+ }
+ if (changesMask[36])
+ {
+ data << float(CombatRatingExpertise);
+ }
+ if (changesMask[37])
+ {
+ data << float(BlockPercentage);
+ }
+ if (changesMask[38])
+ {
+ data << float(DodgePercentage);
+ }
+ if (changesMask[39])
+ {
+ data << float(DodgePercentageFromAttribute);
+ }
+ if (changesMask[40])
+ {
+ data << float(ParryPercentage);
+ }
+ if (changesMask[41])
+ {
+ data << float(ParryPercentageFromAttribute);
+ }
+ if (changesMask[42])
+ {
+ data << float(CritPercentage);
+ }
+ if (changesMask[43])
+ {
+ data << float(RangedCritPercentage);
+ }
+ if (changesMask[44])
+ {
+ data << float(OffhandCritPercentage);
+ }
+ if (changesMask[45])
+ {
+ data << float(SpellCritPercentage);
+ }
+ if (changesMask[46])
+ {
+ data << int32(ShieldBlock);
+ }
+ if (changesMask[47])
+ {
+ data << float(ShieldBlockCritPercentage);
+ }
+ if (changesMask[48])
+ {
+ data << float(Mastery);
+ }
+ if (changesMask[49])
+ {
+ data << float(Speed);
+ }
+ if (changesMask[50])
+ {
+ data << float(Avoidance);
+ }
+ if (changesMask[51])
+ {
+ data << float(Sturdiness);
+ }
+ if (changesMask[52])
+ {
+ data << int32(Versatility);
+ }
+ if (changesMask[53])
+ {
+ data << float(VersatilityBonus);
+ }
+ if (changesMask[54])
+ {
+ data << float(PvpPowerDamage);
+ }
+ if (changesMask[55])
+ {
+ data << float(PvpPowerHealing);
+ }
+ if (changesMask[56])
+ {
+ data << int32(ModHealingDonePos);
+ }
+ if (changesMask[57])
+ {
+ data << float(ModHealingPercent);
+ }
+ if (changesMask[58])
+ {
+ data << float(ModHealingDonePercent);
+ }
+ if (changesMask[59])
+ {
+ data << float(ModPeriodicHealingDonePercent);
+ }
+ if (changesMask[60])
+ {
+ data << float(ModSpellPowerPercent);
+ }
+ if (changesMask[61])
+ {
+ data << float(ModResiliencePercent);
+ }
+ if (changesMask[62])
+ {
+ data << float(OverrideSpellPowerByAPPercent);
+ }
+ if (changesMask[63])
+ {
+ data << float(OverrideAPBySpellPowerPercent);
+ }
+ if (changesMask[64])
+ {
+ data << int32(ModTargetResistance);
+ }
+ if (changesMask[65])
+ {
+ data << int32(ModTargetPhysicalResistance);
+ }
+ }
+ if (changesMask[66])
+ {
+ if (changesMask[67])
+ {
+ data << int32(LocalFlags);
+ }
+ if (changesMask[68])
+ {
+ data << uint8(GrantableLevels);
+ }
+ if (changesMask[69])
+ {
+ data << uint8(MultiActionBars);
+ }
+ if (changesMask[70])
+ {
+ data << uint8(LifetimeMaxRank);
+ }
+ if (changesMask[71])
+ {
+ data << uint8(NumRespecs);
+ }
+ if (changesMask[72])
+ {
+ data << uint32(PvpMedals);
+ }
+ if (changesMask[73])
+ {
+ data << uint16(TodayHonorableKills);
+ }
+ if (changesMask[74])
+ {
+ data << uint16(YesterdayHonorableKills);
+ }
+ if (changesMask[75])
+ {
+ data << uint32(LifetimeHonorableKills);
+ }
+ if (changesMask[76])
+ {
+ data << int32(WatchedFactionIndex);
+ }
+ if (changesMask[77])
+ {
+ data << int32(MaxLevel);
+ }
+ if (changesMask[78])
+ {
+ data << int32(ScalingPlayerLevelDelta);
+ }
+ if (changesMask[79])
+ {
+ data << int32(MaxCreatureScalingLevel);
+ }
+ if (changesMask[80])
+ {
+ data << int32(PetSpellPower);
+ }
+ if (changesMask[81])
+ {
+ data << float(UiHitModifier);
+ }
+ if (changesMask[82])
+ {
+ data << float(UiSpellHitModifier);
+ }
+ if (changesMask[83])
+ {
+ data << int32(HomeRealmTimeOffset);
+ }
+ if (changesMask[84])
+ {
+ data << float(ModPetHaste);
+ }
+ if (changesMask[85])
+ {
+ data << uint8(LocalRegenFlags);
+ }
+ if (changesMask[86])
+ {
+ data << uint8(AuraVision);
+ }
+ if (changesMask[87])
+ {
+ data << uint8(NumBackpackSlots);
+ }
+ if (changesMask[88])
+ {
+ data << int32(OverrideSpellsID);
+ }
+ if (changesMask[89])
+ {
+ data << int32(LfgBonusFactionID);
+ }
+ if (changesMask[90])
+ {
+ data << uint16(LootSpecID);
+ }
+ if (changesMask[91])
+ {
+ data << uint32(OverrideZonePVPType);
+ }
+ if (changesMask[92])
+ {
+ data << int32(Honor);
+ }
+ if (changesMask[93])
+ {
+ data << int32(HonorNextLevel);
+ }
+ if (changesMask[94])
+ {
+ data << int32(PvpRewardAchieved);
+ }
+ if (changesMask[95])
+ {
+ data << int32(PvpTierMaxFromWins);
+ }
+ if (changesMask[96])
+ {
+ data << int32(PvpLastWeeksRewardAchieved);
+ }
+ if (changesMask[97])
+ {
+ data << int32(PvpLastWeeksTierMaxFromWins);
+ }
+ }
+ if (changesMask[98])
+ {
+ if (changesMask[99])
+ {
+ data << int32(PvpLastWeeksRewardClaimed);
+ }
+ if (changesMask[100])
+ {
+ data << uint8(NumBankSlots);
+ }
+ }
+ if (changesMask[101])
+ {
+ for (std::size_t i = 0; i < 195; ++i)
+ {
+ if (changesMask[102 + i])
+ {
+ data << InvSlots[i];
+ }
+ }
+ }
+ if (changesMask[297])
+ {
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ if (changesMask[298 + i])
+ {
+ data << uint32(TrackResourceMask[i]);
+ }
+ }
+ }
+ if (changesMask[300])
+ {
+ for (std::size_t i = 0; i < 160; ++i)
+ {
+ if (changesMask[301 + i])
+ {
+ data << uint64(ExploredZones[i]);
+ }
+ }
+ }
+ if (changesMask[461])
+ {
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ if (changesMask[462 + i])
+ {
+ RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[464])
+ {
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ if (changesMask[465 + i])
+ {
+ data << int32(ModDamageDonePos[i]);
+ }
+ if (changesMask[472 + i])
+ {
+ data << int32(ModDamageDoneNeg[i]);
+ }
+ if (changesMask[479 + i])
+ {
+ data << float(ModDamageDonePercent[i]);
+ }
+ }
+ }
+ if (changesMask[486])
+ {
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ if (changesMask[487 + i])
+ {
+ data << float(WeaponDmgMultipliers[i]);
+ }
+ if (changesMask[490 + i])
+ {
+ data << float(WeaponAtkSpeedMultipliers[i]);
+ }
+ }
+ }
+ if (changesMask[493])
+ {
+ for (std::size_t i = 0; i < 12; ++i)
+ {
+ if (changesMask[494 + i])
+ {
+ data << uint32(BuybackPrice[i]);
+ }
+ if (changesMask[506 + i])
+ {
+ data << uint32(BuybackTimestamp[i]);
+ }
+ }
+ }
+ if (changesMask[518])
+ {
+ for (std::size_t i = 0; i < 32; ++i)
+ {
+ if (changesMask[519 + i])
+ {
+ data << int32(CombatRatings[i]);
+ }
+ }
+ }
+ if (changesMask[558])
+ {
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ if (changesMask[559 + i])
+ {
+ data << uint32(NoReagentCostMask[i]);
+ }
+ }
+ }
+ if (changesMask[563])
+ {
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ if (changesMask[564 + i])
+ {
+ data << int32(ProfessionSkillLine[i]);
+ }
+ }
+ }
+ if (changesMask[566])
+ {
+ for (std::size_t i = 0; i < 4; ++i)
+ {
+ if (changesMask[567 + i])
+ {
+ data << uint32(BagSlotFlags[i]);
+ }
+ }
+ }
+ if (changesMask[571])
+ {
+ for (std::size_t i = 0; i < 7; ++i)
+ {
+ if (changesMask[572 + i])
+ {
+ data << uint32(BankBagSlotFlags[i]);
+ }
+ }
+ }
+ if (changesMask[579])
+ {
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ if (changesMask[580 + i])
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+ }
+ }
+ if (changesMask[551])
+ {
+ for (std::size_t i = 0; i < 6; ++i)
+ {
+ if (changesMask[552 + i])
+ {
+ PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ data.FlushBits();
+}
+
+void ActivePlayerData::ClearChangesMask()
+{
+ Base::ClearChangesMask(BackpackAutoSortDisabled);
+ Base::ClearChangesMask(BankAutoSortDisabled);
+ Base::ClearChangesMask(SortBagsRightToLeft);
+ Base::ClearChangesMask(InsertItemsLeftToRight);
+ Base::ClearChangesMask(Research);
+ Base::ClearChangesMask(KnownTitles);
+ Base::ClearChangesMask(ResearchSites);
+ Base::ClearChangesMask(ResearchSiteProgress);
+ Base::ClearChangesMask(DailyQuestsCompleted);
+ Base::ClearChangesMask(AvailableQuestLineXQuestIDs);
+ Base::ClearChangesMask(Heirlooms);
+ Base::ClearChangesMask(HeirloomFlags);
+ Base::ClearChangesMask(Toys);
+ Base::ClearChangesMask(ToyFlags);
+ Base::ClearChangesMask(Transmog);
+ Base::ClearChangesMask(ConditionalTransmog);
+ Base::ClearChangesMask(SelfResSpells);
+ Base::ClearChangesMask(SpellPctModByLabel);
+ Base::ClearChangesMask(SpellFlatModByLabel);
+ Base::ClearChangesMask(CharacterRestrictions);
+ Base::ClearChangesMask(FarsightObject);
+ Base::ClearChangesMask(SummonedBattlePetGUID);
+ Base::ClearChangesMask(Coinage);
+ Base::ClearChangesMask(XP);
+ Base::ClearChangesMask(NextLevelXP);
+ Base::ClearChangesMask(TrialXP);
+ Base::ClearChangesMask(Skill);
+ Base::ClearChangesMask(CharacterPoints);
+ Base::ClearChangesMask(MaxTalentTiers);
+ Base::ClearChangesMask(TrackCreatureMask);
+ Base::ClearChangesMask(MainhandExpertise);
+ Base::ClearChangesMask(OffhandExpertise);
+ Base::ClearChangesMask(RangedExpertise);
+ Base::ClearChangesMask(CombatRatingExpertise);
+ Base::ClearChangesMask(BlockPercentage);
+ Base::ClearChangesMask(DodgePercentage);
+ Base::ClearChangesMask(DodgePercentageFromAttribute);
+ Base::ClearChangesMask(ParryPercentage);
+ Base::ClearChangesMask(ParryPercentageFromAttribute);
+ Base::ClearChangesMask(CritPercentage);
+ Base::ClearChangesMask(RangedCritPercentage);
+ Base::ClearChangesMask(OffhandCritPercentage);
+ Base::ClearChangesMask(SpellCritPercentage);
+ Base::ClearChangesMask(ShieldBlock);
+ Base::ClearChangesMask(ShieldBlockCritPercentage);
+ Base::ClearChangesMask(Mastery);
+ Base::ClearChangesMask(Speed);
+ Base::ClearChangesMask(Avoidance);
+ Base::ClearChangesMask(Sturdiness);
+ Base::ClearChangesMask(Versatility);
+ Base::ClearChangesMask(VersatilityBonus);
+ Base::ClearChangesMask(PvpPowerDamage);
+ Base::ClearChangesMask(PvpPowerHealing);
+ Base::ClearChangesMask(ModHealingDonePos);
+ Base::ClearChangesMask(ModHealingPercent);
+ Base::ClearChangesMask(ModHealingDonePercent);
+ Base::ClearChangesMask(ModPeriodicHealingDonePercent);
+ Base::ClearChangesMask(ModSpellPowerPercent);
+ Base::ClearChangesMask(ModResiliencePercent);
+ Base::ClearChangesMask(OverrideSpellPowerByAPPercent);
+ Base::ClearChangesMask(OverrideAPBySpellPowerPercent);
+ Base::ClearChangesMask(ModTargetResistance);
+ Base::ClearChangesMask(ModTargetPhysicalResistance);
+ Base::ClearChangesMask(LocalFlags);
+ Base::ClearChangesMask(GrantableLevels);
+ Base::ClearChangesMask(MultiActionBars);
+ Base::ClearChangesMask(LifetimeMaxRank);
+ Base::ClearChangesMask(NumRespecs);
+ Base::ClearChangesMask(PvpMedals);
+ Base::ClearChangesMask(TodayHonorableKills);
+ Base::ClearChangesMask(YesterdayHonorableKills);
+ Base::ClearChangesMask(LifetimeHonorableKills);
+ Base::ClearChangesMask(WatchedFactionIndex);
+ Base::ClearChangesMask(MaxLevel);
+ Base::ClearChangesMask(ScalingPlayerLevelDelta);
+ Base::ClearChangesMask(MaxCreatureScalingLevel);
+ Base::ClearChangesMask(PetSpellPower);
+ Base::ClearChangesMask(UiHitModifier);
+ Base::ClearChangesMask(UiSpellHitModifier);
+ Base::ClearChangesMask(HomeRealmTimeOffset);
+ Base::ClearChangesMask(ModPetHaste);
+ Base::ClearChangesMask(LocalRegenFlags);
+ Base::ClearChangesMask(AuraVision);
+ Base::ClearChangesMask(NumBackpackSlots);
+ Base::ClearChangesMask(OverrideSpellsID);
+ Base::ClearChangesMask(LfgBonusFactionID);
+ Base::ClearChangesMask(LootSpecID);
+ Base::ClearChangesMask(OverrideZonePVPType);
+ Base::ClearChangesMask(Honor);
+ Base::ClearChangesMask(HonorNextLevel);
+ Base::ClearChangesMask(PvpRewardAchieved);
+ Base::ClearChangesMask(PvpTierMaxFromWins);
+ Base::ClearChangesMask(PvpLastWeeksRewardAchieved);
+ Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins);
+ Base::ClearChangesMask(PvpLastWeeksRewardClaimed);
+ Base::ClearChangesMask(NumBankSlots);
+ Base::ClearChangesMask(InvSlots);
+ Base::ClearChangesMask(TrackResourceMask);
+ Base::ClearChangesMask(ExploredZones);
+ Base::ClearChangesMask(RestInfo);
+ Base::ClearChangesMask(ModDamageDonePos);
+ Base::ClearChangesMask(ModDamageDoneNeg);
+ Base::ClearChangesMask(ModDamageDonePercent);
+ Base::ClearChangesMask(WeaponDmgMultipliers);
+ Base::ClearChangesMask(WeaponAtkSpeedMultipliers);
+ Base::ClearChangesMask(BuybackPrice);
+ Base::ClearChangesMask(BuybackTimestamp);
+ Base::ClearChangesMask(CombatRatings);
+ Base::ClearChangesMask(PvpInfo);
+ Base::ClearChangesMask(NoReagentCostMask);
+ Base::ClearChangesMask(ProfessionSkillLine);
+ Base::ClearChangesMask(BagSlotFlags);
+ Base::ClearChangesMask(BankBagSlotFlags);
+ Base::ClearChangesMask(QuestCompleted);
+ _changesMask.ResetAll();
+}
+
+void GameObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
+{
+ data << int32(DisplayID);
+ data << uint32(SpellVisualID);
+ data << uint32(StateSpellVisualID);
+ data << uint32(SpawnTrackingStateAnimID);
+ data << uint32(SpawnTrackingStateAnimKitID);
+ data << uint32(StateWorldEffectIDs->size());
+ data << uint32(StateWorldEffectsQuestObjectiveID);
+ for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i)
+ {
+ data << uint32((*StateWorldEffectIDs)[i]);
+ }
+ data << CreatedBy;
+ data << GuildGUID;
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
+ data << float(ParentRotation->x);
+ data << float(ParentRotation->y);
+ data << float(ParentRotation->z);
+ data << float(ParentRotation->w);
+ data << int32(FactionTemplate);
+ data << int32(ViewerDependentValue<LevelTag>::GetValue(Level, owner, receiver));
+ data << int8(ViewerDependentValue<StateTag>::GetValue(State, owner, receiver));
+ data << int8(TypeID);
+ data << uint8(ArtKit);
+ data << uint8(PercentHealth);
+ data << uint32(EnableDoodadSets.size());
+ data << uint32(CustomParam);
+ for (std::size_t i = 0; i < EnableDoodadSets.size(); ++i)
+ {
+ data << int32(EnableDoodadSets[i]);
+ }
+}
+
+void GameObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
+{
+ UpdateMask<20> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 20);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBits(StateWorldEffectIDs->size(), 32);
+ for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i)
+ {
+ data << uint32((*StateWorldEffectIDs)[i]);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ EnableDoodadSets.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < EnableDoodadSets.size(); ++i)
+ {
+ if (EnableDoodadSets.HasChanged(i))
+ {
+ data << int32(EnableDoodadSets[i]);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data << int32(DisplayID);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(SpellVisualID);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(StateSpellVisualID);
+ }
+ if (changesMask[6])
+ {
+ data << uint32(SpawnTrackingStateAnimID);
+ }
+ if (changesMask[7])
+ {
+ data << uint32(SpawnTrackingStateAnimKitID);
+ }
+ if (changesMask[8])
+ {
+ data << uint32(StateWorldEffectsQuestObjectiveID);
+ }
+ if (changesMask[9])
+ {
+ data << CreatedBy;
+ }
+ if (changesMask[10])
+ {
+ data << GuildGUID;
+ }
+ if (changesMask[11])
+ {
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
+ }
+ if (changesMask[12])
+ {
+ data << float(ParentRotation->x);
+ data << float(ParentRotation->y);
+ data << float(ParentRotation->z);
+ data << float(ParentRotation->w);
+ }
+ if (changesMask[13])
+ {
+ data << int32(FactionTemplate);
+ }
+ if (changesMask[14])
+ {
+ data << int32(ViewerDependentValue<LevelTag>::GetValue(Level, owner, receiver));
+ }
+ if (changesMask[15])
+ {
+ data << int8(ViewerDependentValue<StateTag>::GetValue(State, owner, receiver));
+ }
+ if (changesMask[16])
+ {
+ data << int8(TypeID);
+ }
+ if (changesMask[17])
+ {
+ data << uint8(ArtKit);
+ }
+ if (changesMask[18])
+ {
+ data << uint8(PercentHealth);
+ }
+ if (changesMask[19])
+ {
+ data << uint32(CustomParam);
+ }
+ }
+}
+
+void GameObjectData::ClearChangesMask()
+{
+ Base::ClearChangesMask(StateWorldEffectIDs);
+ Base::ClearChangesMask(EnableDoodadSets);
+ Base::ClearChangesMask(DisplayID);
+ Base::ClearChangesMask(SpellVisualID);
+ Base::ClearChangesMask(StateSpellVisualID);
+ Base::ClearChangesMask(SpawnTrackingStateAnimID);
+ Base::ClearChangesMask(SpawnTrackingStateAnimKitID);
+ Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID);
+ Base::ClearChangesMask(CreatedBy);
+ Base::ClearChangesMask(GuildGUID);
+ Base::ClearChangesMask(Flags);
+ Base::ClearChangesMask(ParentRotation);
+ Base::ClearChangesMask(FactionTemplate);
+ Base::ClearChangesMask(Level);
+ Base::ClearChangesMask(State);
+ Base::ClearChangesMask(TypeID);
+ Base::ClearChangesMask(ArtKit);
+ Base::ClearChangesMask(PercentHealth);
+ Base::ClearChangesMask(CustomParam);
+ _changesMask.ResetAll();
+}
+
+void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
+{
+ data << Caster;
+ data << int32(SpellXSpellVisualID);
+ data << int32(SpellID);
+ data << float(Radius);
+ data << uint32(CastTime);
+ data << uint8(Type);
+}
+
+void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
+{
+ UpdateMask<7> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 7);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << Caster;
+ }
+ if (changesMask[2])
+ {
+ data << int32(SpellXSpellVisualID);
+ }
+ if (changesMask[3])
+ {
+ data << int32(SpellID);
+ }
+ if (changesMask[4])
+ {
+ data << float(Radius);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(CastTime);
+ }
+ if (changesMask[6])
+ {
+ data << uint8(Type);
+ }
+ }
+}
+
+void DynamicObjectData::ClearChangesMask()
+{
+ Base::ClearChangesMask(Caster);
+ Base::ClearChangesMask(SpellXSpellVisualID);
+ Base::ClearChangesMask(SpellID);
+ Base::ClearChangesMask(Radius);
+ Base::ClearChangesMask(CastTime);
+ Base::ClearChangesMask(Type);
+ _changesMask.ResetAll();
+}
+
+void CorpseData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
+{
+ data << uint32(DynamicFlags);
+ data << Owner;
+ data << PartyGUID;
+ data << GuildGUID;
+ data << uint32(DisplayID);
+ for (std::size_t i = 0; i < 19; ++i)
+ {
+ data << uint32(Items[i]);
+ }
+ data << uint8(Unused);
+ data << uint8(RaceID);
+ data << uint8(Sex);
+ data << uint8(SkinID);
+ data << uint8(FaceID);
+ data << uint8(HairStyleID);
+ data << uint8(HairColorID);
+ data << uint8(FacialHairStyleID);
+ data << uint32(Flags);
+ data << int32(FactionTemplate);
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ data << uint8(CustomDisplayOption[i]);
+ }
+}
+
+void CorpseData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
+{
+ UpdateMask<40> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 2);
+ for (std::size_t i = 0; i < 2; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint32(DynamicFlags);
+ }
+ if (changesMask[2])
+ {
+ data << Owner;
+ }
+ if (changesMask[3])
+ {
+ data << PartyGUID;
+ }
+ if (changesMask[4])
+ {
+ data << GuildGUID;
+ }
+ if (changesMask[5])
+ {
+ data << uint32(DisplayID);
+ }
+ if (changesMask[6])
+ {
+ data << uint8(Unused);
+ }
+ if (changesMask[7])
+ {
+ data << uint8(RaceID);
+ }
+ if (changesMask[8])
+ {
+ data << uint8(Sex);
+ }
+ if (changesMask[9])
+ {
+ data << uint8(SkinID);
+ }
+ if (changesMask[10])
+ {
+ data << uint8(FaceID);
+ }
+ if (changesMask[11])
+ {
+ data << uint8(HairStyleID);
+ }
+ if (changesMask[12])
+ {
+ data << uint8(HairColorID);
+ }
+ if (changesMask[13])
+ {
+ data << uint8(FacialHairStyleID);
+ }
+ if (changesMask[14])
+ {
+ data << uint32(Flags);
+ }
+ if (changesMask[15])
+ {
+ data << int32(FactionTemplate);
+ }
+ }
+ if (changesMask[16])
+ {
+ for (std::size_t i = 0; i < 19; ++i)
+ {
+ if (changesMask[17 + i])
+ {
+ data << uint32(Items[i]);
+ }
+ }
+ }
+ if (changesMask[36])
+ {
+ for (std::size_t i = 0; i < 3; ++i)
+ {
+ if (changesMask[37 + i])
+ {
+ data << uint8(CustomDisplayOption[i]);
+ }
+ }
+ }
+}
+
+void CorpseData::ClearChangesMask()
+{
+ Base::ClearChangesMask(DynamicFlags);
+ Base::ClearChangesMask(Owner);
+ Base::ClearChangesMask(PartyGUID);
+ Base::ClearChangesMask(GuildGUID);
+ Base::ClearChangesMask(DisplayID);
+ Base::ClearChangesMask(Unused);
+ Base::ClearChangesMask(RaceID);
+ Base::ClearChangesMask(Sex);
+ Base::ClearChangesMask(SkinID);
+ Base::ClearChangesMask(FaceID);
+ Base::ClearChangesMask(HairStyleID);
+ Base::ClearChangesMask(HairColorID);
+ Base::ClearChangesMask(FacialHairStyleID);
+ Base::ClearChangesMask(Flags);
+ Base::ClearChangesMask(FactionTemplate);
+ Base::ClearChangesMask(Items);
+ Base::ClearChangesMask(CustomDisplayOption);
+ _changesMask.ResetAll();
+}
+
+void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << uint32(StartTimeOffset);
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << Points[i];
+ }
+ data << uint32(ParameterCurve);
+ data.WriteBit(OverrideActive);
+ data.FlushBits();
+}
+
+void ScaleCurve::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+{
+ data.WriteBit(OverrideActive);
+ data.FlushBits();
+ data << uint32(StartTimeOffset);
+ data << uint32(ParameterCurve);
+ for (std::size_t i = 0; i < 2; ++i)
+ {
+ data << Points[i];
+ }
+ data.FlushBits();
+}
+
+void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+{
+ OverrideScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ data << Caster;
+ data << uint32(Duration);
+ data << uint32(TimeToTarget);
+ data << uint32(TimeToTargetScale);
+ data << uint32(TimeToTargetExtraScale);
+ data << int32(SpellID);
+ data << int32(SpellForVisuals);
+ data << int32(SpellXSpellVisualID);
+ data << float(BoundsRadius2D);
+ data << uint32(DecalPropertiesID);
+ data << CreatingEffectGUID;
+ ExtraScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+}
+
+void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+{
+ UpdateMask<14> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 14);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ OverrideScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ if (changesMask[3])
+ {
+ data << Caster;
+ }
+ if (changesMask[4])
+ {
+ data << uint32(Duration);
+ }
+ if (changesMask[5])
+ {
+ data << uint32(TimeToTarget);
+ }
+ if (changesMask[6])
+ {
+ data << uint32(TimeToTargetScale);
+ }
+ if (changesMask[7])
+ {
+ data << uint32(TimeToTargetExtraScale);
+ }
+ if (changesMask[8])
+ {
+ data << int32(SpellID);
+ }
+ if (changesMask[9])
+ {
+ data << int32(SpellForVisuals);
+ }
+ if (changesMask[10])
+ {
+ data << int32(SpellXSpellVisualID);
+ }
+ if (changesMask[11])
+ {
+ data << float(BoundsRadius2D);
+ }
+ if (changesMask[12])
+ {
+ data << uint32(DecalPropertiesID);
+ }
+ if (changesMask[13])
+ {
+ data << CreatingEffectGUID;
+ }
+ if (changesMask[2])
+ {
+ ExtraScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+}
+
+void AreaTriggerData::ClearChangesMask()
+{
+ Base::ClearChangesMask(OverrideScaleCurve);
+ Base::ClearChangesMask(ExtraScaleCurve);
+ Base::ClearChangesMask(Caster);
+ Base::ClearChangesMask(Duration);
+ Base::ClearChangesMask(TimeToTarget);
+ Base::ClearChangesMask(TimeToTargetScale);
+ Base::ClearChangesMask(TimeToTargetExtraScale);
+ Base::ClearChangesMask(SpellID);
+ Base::ClearChangesMask(SpellForVisuals);
+ Base::ClearChangesMask(SpellXSpellVisualID);
+ Base::ClearChangesMask(BoundsRadius2D);
+ Base::ClearChangesMask(DecalPropertiesID);
+ Base::ClearChangesMask(CreatingEffectGUID);
+ _changesMask.ResetAll();
+}
+
+void SceneObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
+{
+ data << int32(ScriptPackageID);
+ data << uint32(RndSeedVal);
+ data << CreatedBy;
+ data << uint32(SceneType);
+}
+
+void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
+{
+ UpdateMask<5> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 5);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(ScriptPackageID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(RndSeedVal);
+ }
+ if (changesMask[3])
+ {
+ data << CreatedBy;
+ }
+ if (changesMask[4])
+ {
+ data << uint32(SceneType);
+ }
+ }
+}
+
+void SceneObjectData::ClearChangesMask()
+{
+ Base::ClearChangesMask(ScriptPackageID);
+ Base::ClearChangesMask(RndSeedVal);
+ Base::ClearChangesMask(CreatedBy);
+ Base::ClearChangesMask(SceneType);
+ _changesMask.ResetAll();
+}
+
+void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ data << int32(ConversationLineID);
+ data << uint32(StartTime);
+ data << int32(UiCameraID);
+ data << uint8(ActorIndex);
+ data << uint8(Flags);
+}
+
+void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(ConversationLineID);
+ data << uint32(StartTime);
+ data << int32(UiCameraID);
+ data << uint8(ActorIndex);
+ data << uint8(Flags);
+}
+
+void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ data << uint32(CreatureID);
+ data << uint32(CreatureDisplayInfoID);
+ data << ActorGUID;
+ data << int32(Field_18);
+ data.WriteBits(Type, 1);
+ data.FlushBits();
+}
+
+void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << uint32(CreatureID);
+ data << uint32(CreatureDisplayInfoID);
+ data << ActorGUID;
+ data << int32(Field_18);
+ data.WriteBits(Type, 1);
+ data.FlushBits();
+}
+
+void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ data << uint32(Lines->size());
+ for (std::size_t i = 0; i < Lines->size(); ++i)
+ {
+ (*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ data << int32(LastLineEndTime);
+ data << uint32(Actors.size());
+ for (std::size_t i = 0; i < Actors.size(); ++i)
+ {
+ Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ }
+}
+
+void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+{
+ UpdateMask<4> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBits(Lines->size(), 32);
+ for (std::size_t i = 0; i < Lines->size(); ++i)
+ {
+ (*Lines)[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ Actors.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < Actors.size(); ++i)
+ {
+ if (Actors.HasChanged(i))
+ {
+ Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data << int32(LastLineEndTime);
+ }
+ }
+}
+
+void ConversationData::ClearChangesMask()
+{
+ Base::ClearChangesMask(Lines);
+ Base::ClearChangesMask(Actors);
+ Base::ClearChangesMask(LastLineEndTime);
+ _changesMask.ResetAll();
+}
+
+}
+
+#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
+#pragma GCC diagnostic pop
+#else
+#pragma warning(pop)
+#endif
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index a13c5b8533d..2a120d0a729 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,469 +15,732 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _UPDATEFIELDS_H
-#define _UPDATEFIELDS_H
+#ifndef UpdateFields_h__
+#define UpdateFields_h__
-// Auto generated for version 8, 0, 1, 27980
+#include "EnumClassFlag.h"
+#include "ObjectGuid.h"
+#include "Position.h"
+#include "QuaternionData.h"
+#include "UpdateField.h"
+#include "UpdateMask.h"
-enum ObjectFields
+class AreaTrigger;
+class Bag;
+class ByteBuffer;
+class Conversation;
+class Corpse;
+class DynamicObject;
+class GameObject;
+class Item;
+class Object;
+class Player;
+class Unit;
+
+namespace UF
+{
+struct ObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<int32, 0, 1> EntryID;
+ UpdateField<uint32, 0, 2> DynamicFlags;
+ struct DynamicFlagsTag : ViewerDependentValueTag<uint32> {};
+ UpdateField<float, 0, 3> Scale;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+{
+ UpdateField<int32, 0, 1> ID;
+ UpdateField<uint32, 0, 2> Duration;
+ UpdateField<int16, 0, 3> Charges;
+ UpdateField<uint16, 0, 4> Inactive;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ArtifactPower : public IsUpdateFieldStructureTag
+{
+ int16 ArtifactPowerID;
+ uint8 PurchasedRank;
+ uint8 CurrentRankWithBonus;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+};
+
+struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
{
- OBJECT_FIELD_GUID = 0x000, // Size: 4, Flags: PUBLIC
- OBJECT_FIELD_ENTRY = 0x004, // Size: 1, Flags: DYNAMIC
- OBJECT_DYNAMIC_FLAGS = 0x005, // Size: 1, Flags: DYNAMIC, URGENT
- OBJECT_FIELD_SCALE_X = 0x006, // Size: 1, Flags: PUBLIC
- OBJECT_END = 0x007,
+ UpdateField<int32, 0, 1> ItemID;
+ UpdateField<uint8, 0, 2> Context;
+ UpdateFieldArray<uint16, 16, 3, 4> BonusListIDs;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum ObjectDynamicFields
+struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
{
- OBJECT_DYNAMIC_END = 0x000,
+ UpdateField<std::vector<int32>, 0, 1> BonusListIDs;
+ DynamicUpdateField<int32, 0, 2> Modifiers;
+ DynamicUpdateField<ArtifactPower, 0, 3> ArtifactPowers;
+ DynamicUpdateField<SocketedGem, 0, 4> Gems;
+ UpdateField<ObjectGuid, 0, 5> Owner;
+ UpdateField<ObjectGuid, 0, 6> ContainedIn;
+ UpdateField<ObjectGuid, 0, 7> Creator;
+ UpdateField<ObjectGuid, 0, 8> GiftCreator;
+ UpdateField<uint32, 0, 9> StackCount;
+ UpdateField<uint32, 0, 10> Expiration;
+ UpdateField<uint32, 0, 11> DynamicFlags;
+ UpdateField<uint32, 0, 12> Durability;
+ UpdateField<uint32, 0, 13> MaxDurability;
+ UpdateField<uint32, 0, 14> CreatePlayedTime;
+ UpdateField<uint32, 0, 15> ModifiersMask;
+ UpdateField<int32, 0, 16> Context;
+ UpdateField<uint64, 0, 17> ArtifactXP;
+ UpdateField<uint8, 0, 18> ItemAppearanceModID;
+ UpdateField<uint32, 0, 19> Field_130;
+ UpdateFieldArray<int32, 5, 20, 21> SpellCharges;
+ UpdateFieldArray<ItemEnchantment, 13, 26, 27> Enchantment;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum ItemFields
+struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<39>
{
- ITEM_FIELD_OWNER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC
- ITEM_FIELD_CONTAINED = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC
- ITEM_FIELD_CREATOR = OBJECT_END + 0x008, // Size: 4, Flags: PUBLIC
- ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x00C, // Size: 4, Flags: PUBLIC
- ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x010, // Size: 1, Flags: OWNER
- ITEM_FIELD_DURATION = OBJECT_END + 0x011, // Size: 1, Flags: OWNER
- ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x012, // Size: 5, Flags: OWNER
- ITEM_FIELD_FLAGS = OBJECT_END + 0x017, // Size: 1, Flags: PUBLIC
- ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x018, // Size: 39, Flags: PUBLIC
- ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x03F, // Size: 1, Flags: PUBLIC
- ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x040, // Size: 1, Flags: PUBLIC
- ITEM_FIELD_DURABILITY = OBJECT_END + 0x041, // Size: 1, Flags: OWNER
- ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x042, // Size: 1, Flags: OWNER
- ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x043, // Size: 1, Flags: PUBLIC
- ITEM_FIELD_MODIFIERS_MASK = OBJECT_END + 0x044, // Size: 1, Flags: OWNER
- ITEM_FIELD_CONTEXT = OBJECT_END + 0x045, // Size: 1, Flags: PUBLIC
- ITEM_FIELD_ARTIFACT_XP = OBJECT_END + 0x046, // Size: 2, Flags: OWNER
- ITEM_FIELD_APPEARANCE_MOD_ID = OBJECT_END + 0x048, // Size: 1, Flags: OWNER
- ITEM_END = OBJECT_END + 0x049,
-};
-
-enum ItemDynamicFields
-{
- ITEM_DYNAMIC_FIELD_MODIFIERS = OBJECT_DYNAMIC_END + 0x000, // Flags: OWNER
- ITEM_DYNAMIC_FIELD_BONUSLIST_IDS = OBJECT_DYNAMIC_END + 0x001, // Flags: OWNER, 0x100
- ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS = OBJECT_DYNAMIC_END + 0x002, // Flags: OWNER
- ITEM_DYNAMIC_FIELD_GEMS = OBJECT_DYNAMIC_END + 0x003, // Flags: OWNER
- ITEM_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x004,
-};
-
-enum ContainerFields
-{
- CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x000, // Size: 144, Flags: PUBLIC
- CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x090, // Size: 1, Flags: PUBLIC
- CONTAINER_END = ITEM_END + 0x091,
-};
-
-enum ContainerDynamicFields
-{
- CONTAINER_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000,
-};
-
-enum AzeriteEmpoweredItemField
-{
- AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS = ITEM_END + 0x000, // Size: 4, Flags: PUBLIC
- AZERITE_EMPOWERED_ITEM_END = ITEM_END + 0x004,
-};
-
-enum AzeriteEmpoweredItemDynamicField
-{
- AZERITE_EMPOWERED_ITEM_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000,
-};
-
-enum AzeriteItemField
-{
- AZERITE_ITEM_FIELD_XP = ITEM_END + 0x000, // Size: 2, Flags: PUBLIC
- AZERITE_ITEM_FIELD_LEVEL = ITEM_END + 0x002, // Size: 1, Flags: PUBLIC
- AZERITE_ITEM_FIELD_AURA_LEVEL = ITEM_END + 0x003, // Size: 1, Flags: PUBLIC
- AZERITE_ITEM_FIELD_KNOWLEDGE_LEVEL = ITEM_END + 0x004, // Size: 1, Flags: OWNER
- AZERITE_ITEM_FIELD_DEBUG_KNOWLEDGE_WEEK = ITEM_END + 0x005, // Size: 1, Flags: OWNER
- AZERITE_ITEM_END = ITEM_END + 0x006,
-};
-
-enum AzeriteItemDynamicField
-{
- AZERITE_ITEM_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000,
-};
-
-enum UnitFields
-{
- UNIT_FIELD_CHARM = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_SUMMON = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_CRITTER = OBJECT_END + 0x008, // Size: 4, Flags: PRIVATE
- UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x00C, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x010, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_CREATEDBY = OBJECT_END + 0x014, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_DEMON_CREATOR = OBJECT_END + 0x018, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET = OBJECT_END + 0x01C, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_TARGET = OBJECT_END + 0x020, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_BATTLE_PET_COMPANION_GUID = OBJECT_END + 0x024, // Size: 4, Flags: PUBLIC
- UNIT_FIELD_BATTLE_PET_DB_ID = OBJECT_END + 0x028, // Size: 2, Flags: PUBLIC
- UNIT_FIELD_CHANNEL_DATA = OBJECT_END + 0x02A, // Size: 2, Flags: PUBLIC, URGENT
- UNIT_FIELD_SUMMONED_BY_HOME_REALM = OBJECT_END + 0x02C, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_BYTES_0 = OBJECT_END + 0x02D, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_DISPLAY_POWER = OBJECT_END + 0x02E, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID = OBJECT_END + 0x02F, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_HEALTH = OBJECT_END + 0x030, // Size: 2, Flags: PUBLIC
- UNIT_FIELD_POWER = OBJECT_END + 0x032, // Size: 6, Flags: PUBLIC, URGENT_SELF_ONLY
- UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x038, // Size: 2, Flags: PUBLIC
- UNIT_FIELD_MAXPOWER = OBJECT_END + 0x03A, // Size: 6, Flags: PUBLIC
- UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x040, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL
- UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x046, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL
- UNIT_FIELD_LEVEL = OBJECT_END + 0x04C, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_EFFECTIVE_LEVEL = OBJECT_END + 0x04D, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_CONTENT_TUNING_ID = OBJECT_END + 0x04E, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_LEVEL_MIN = OBJECT_END + 0x04F, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_LEVEL_MAX = OBJECT_END + 0x050, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x051, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_FACTION_GROUP = OBJECT_END + 0x052, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID = OBJECT_END + 0x053, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_SCALING_DAMAGE_ITEM_LEVEL_CURVE_ID = OBJECT_END + 0x054, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x055, // Size: 1, Flags: PUBLIC
- UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x056, // Size: 6, Flags: PUBLIC
- UNIT_FIELD_FLAGS = OBJECT_END + 0x05C, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x05D, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x05E, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_AURASTATE = OBJECT_END + 0x05F, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x060, // Size: 2, Flags: PUBLIC
- UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x062, // Size: 1, Flags: PRIVATE
- UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x063, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_COMBATREACH = OBJECT_END + 0x064, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_DISPLAYID = OBJECT_END + 0x065, // Size: 1, Flags: DYNAMIC, URGENT
- UNIT_FIELD_DISPLAY_SCALE = OBJECT_END + 0x066, // Size: 1, Flags: DYNAMIC, URGENT
- UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x067, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_NATIVE_X_DISPLAY_SCALE = OBJECT_END + 0x068, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x069, // Size: 1, Flags: PUBLIC, URGENT
- UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x06A, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
- UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x06B, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
- UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x06C, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
- UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x06D, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO
- UNIT_FIELD_BYTES_1 = OBJECT_END + 0x06E, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_PETNUMBER = OBJECT_END + 0x06F, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x070, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x071, // Size: 1, Flags: OWNER
- UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x072, // Size: 1, Flags: OWNER
- UNIT_MOD_CAST_SPEED = OBJECT_END + 0x073, // Size: 1, Flags: PUBLIC
- UNIT_MOD_CAST_HASTE = OBJECT_END + 0x074, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MOD_HASTE = OBJECT_END + 0x075, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MOD_RANGED_HASTE = OBJECT_END + 0x076, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MOD_HASTE_REGEN = OBJECT_END + 0x077, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MOD_TIME_RATE = OBJECT_END + 0x078, // Size: 1, Flags: PUBLIC
- UNIT_CREATED_BY_SPELL = OBJECT_END + 0x079, // Size: 1, Flags: PUBLIC
- UNIT_NPC_FLAGS = OBJECT_END + 0x07A, // Size: 2, Flags: PUBLIC, DYNAMIC
- UNIT_NPC_EMOTESTATE = OBJECT_END + 0x07C, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_STAT = OBJECT_END + 0x07D, // Size: 4, Flags: PRIVATE, OWNER
- UNIT_FIELD_POSSTAT = OBJECT_END + 0x081, // Size: 4, Flags: PRIVATE, OWNER
- UNIT_FIELD_NEGSTAT = OBJECT_END + 0x085, // Size: 4, Flags: PRIVATE, OWNER
- UNIT_FIELD_RESISTANCES = OBJECT_END + 0x089, // Size: 7, Flags: PRIVATE, OWNER, SPECIAL_INFO
- UNIT_FIELD_BONUS_RESISTANCE_MODS = OBJECT_END + 0x090, // Size: 7, Flags: PRIVATE, OWNER
- UNIT_FIELD_BASE_MANA = OBJECT_END + 0x097, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x098, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_BYTES_2 = OBJECT_END + 0x099, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x09A, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09B, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09C, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09D, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x09E, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09F, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x0A0, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0A1, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_MAIN_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A2, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_OFF_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A3, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_RANGED_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A4, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_ATTACK_SPEED_AURA = OBJECT_END + 0x0A5, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_LIFESTEAL = OBJECT_END + 0x0A6, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0A7, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0A8, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0A9, // Size: 7, Flags: PRIVATE, OWNER
- UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0B0, // Size: 7, Flags: PRIVATE, OWNER
- UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0B7, // Size: 1, Flags: PRIVATE, OWNER
- UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0B8, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF = OBJECT_END + 0x0B9, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MIN_ITEM_LEVEL = OBJECT_END + 0x0BA, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0BB, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_WILD_BATTLEPET_LEVEL = OBJECT_END + 0x0BC, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP = OBJECT_END + 0x0BD, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_INTERACT_SPELLID = OBJECT_END + 0x0BE, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x0BF, // Size: 1, Flags: DYNAMIC, URGENT
- UNIT_FIELD_STATE_ANIM_ID = OBJECT_END + 0x0C0, // Size: 1, Flags: DYNAMIC, URGENT
- UNIT_FIELD_STATE_ANIM_KIT_ID = OBJECT_END + 0x0C1, // Size: 1, Flags: DYNAMIC, URGENT
- UNIT_FIELD_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x0C2, // Size: 4, Flags: DYNAMIC, URGENT
- UNIT_FIELD_SCALE_DURATION = OBJECT_END + 0x0C6, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_LOOKS_LIKE_MOUNT_ID = OBJECT_END + 0x0C7, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_LOOKS_LIKE_CREATURE_ID = OBJECT_END + 0x0C8, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_LOOK_AT_CONTROLLER_ID = OBJECT_END + 0x0C9, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_GUILD_GUID = OBJECT_END + 0x0CA, // Size: 4, Flags: PUBLIC
- UNIT_END = OBJECT_END + 0x0CE,
-};
-
-enum UnitDynamicFields
-{
- UNIT_DYNAMIC_FIELD_PASSIVE_SPELLS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC, URGENT
- UNIT_DYNAMIC_FIELD_WORLD_EFFECTS = OBJECT_DYNAMIC_END + 0x001, // Flags: PUBLIC, URGENT
- UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS = OBJECT_DYNAMIC_END + 0x002, // Flags: PUBLIC, URGENT
- UNIT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x003,
-};
-
-enum PlayerFields
-{
- PLAYER_DUEL_ARBITER = UNIT_END + 0x000, // Size: 4, Flags: PUBLIC
- PLAYER_WOW_ACCOUNT = UNIT_END + 0x004, // Size: 4, Flags: PUBLIC
- PLAYER_LOOT_TARGET_GUID = UNIT_END + 0x008, // Size: 4, Flags: PUBLIC
- PLAYER_FLAGS = UNIT_END + 0x00C, // Size: 1, Flags: PUBLIC
- PLAYER_FLAGS_EX = UNIT_END + 0x00D, // Size: 1, Flags: PUBLIC
- PLAYER_GUILDRANK = UNIT_END + 0x00E, // Size: 1, Flags: PUBLIC
- PLAYER_GUILDDELETE_DATE = UNIT_END + 0x00F, // Size: 1, Flags: PUBLIC
- PLAYER_GUILDLEVEL = UNIT_END + 0x010, // Size: 1, Flags: PUBLIC
- PLAYER_BYTES = UNIT_END + 0x011, // Size: 1, Flags: PUBLIC
- PLAYER_BYTES_2 = UNIT_END + 0x012, // Size: 1, Flags: PUBLIC
- PLAYER_BYTES_3 = UNIT_END + 0x013, // Size: 1, Flags: PUBLIC
- PLAYER_BYTES_4 = UNIT_END + 0x014, // Size: 1, Flags: PUBLIC
- PLAYER_DUEL_TEAM = UNIT_END + 0x015, // Size: 1, Flags: PUBLIC
- PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x016, // Size: 1, Flags: PUBLIC
- PLAYER_QUEST_LOG = UNIT_END + 0x017, // Size: 1600, Flags: PARTY_MEMBER
- PLAYER_VISIBLE_ITEM = UNIT_END + 0x657, // Size: 38, Flags: PUBLIC
- PLAYER_CHOSEN_TITLE = UNIT_END + 0x67D, // Size: 1, Flags: PUBLIC
- PLAYER_FAKE_INEBRIATION = UNIT_END + 0x67E, // Size: 1, Flags: PUBLIC
- PLAYER_FIELD_VIRTUAL_PLAYER_REALM = UNIT_END + 0x67F, // Size: 1, Flags: PUBLIC
- PLAYER_FIELD_CURRENT_SPEC_ID = UNIT_END + 0x680, // Size: 1, Flags: PUBLIC
- PLAYER_FIELD_TAXI_MOUNT_ANIM_KIT_ID = UNIT_END + 0x681, // Size: 1, Flags: PUBLIC
- PLAYER_FIELD_AVG_ITEM_LEVEL = UNIT_END + 0x682, // Size: 4, Flags: PUBLIC
- PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY = UNIT_END + 0x686, // Size: 1, Flags: PUBLIC
- PLAYER_FIELD_HONOR_LEVEL = UNIT_END + 0x687, // Size: 1, Flags: PUBLIC
- PLAYER_END = UNIT_END + 0x688,
-};
-
-enum PlayerDynamicFields
-{
- PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS = UNIT_DYNAMIC_END + 0x000, // Flags: PUBLIC
- PLAYER_DYNAMIC_END = UNIT_DYNAMIC_END + 0x001,
-};
-
-enum ActivePlayerField
-{
- ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD = PLAYER_END + 0x000, // Size: 780, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_FARSIGHT = PLAYER_END + 0x30C, // Size: 4, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID = PLAYER_END + 0x310, // Size: 4, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_KNOWN_TITLES = PLAYER_END + 0x314, // Size: 12, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_COINAGE = PLAYER_END + 0x320, // Size: 2, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_XP = PLAYER_END + 0x322, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP = PLAYER_END + 0x323, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_TRIAL_XP = PLAYER_END + 0x324, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SKILL_LINEID = PLAYER_END + 0x325, // Size: 896, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_CHARACTER_POINTS = PLAYER_END + 0x6A5, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS = PLAYER_END + 0x6A6, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_TRACK_CREATURES = PLAYER_END + 0x6A7, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_TRACK_RESOURCES = PLAYER_END + 0x6A8, // Size: 2, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_EXPERTISE = PLAYER_END + 0x6AA, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE = PLAYER_END + 0x6AB, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_RANGED_EXPERTISE = PLAYER_END + 0x6AC, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_COMBAT_RATING_EXPERTISE = PLAYER_END + 0x6AD, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE = PLAYER_END + 0x6AE, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE = PLAYER_END + 0x6AF, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE_FROM_ATTRIBUTE = PLAYER_END + 0x6B0, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE = PLAYER_END + 0x6B1, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE_FROM_ATTRIBUTE = PLAYER_END + 0x6B2, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE = PLAYER_END + 0x6B3, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE = PLAYER_END + 0x6B4, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE = PLAYER_END + 0x6B5, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1 = PLAYER_END + 0x6B6, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SHIELD_BLOCK = PLAYER_END + 0x6B7, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SHIELD_BLOCK_CRIT_PERCENTAGE = PLAYER_END + 0x6B8, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MASTERY = PLAYER_END + 0x6B9, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SPEED = PLAYER_END + 0x6BA, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_AVOIDANCE = PLAYER_END + 0x6BB, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_STURDINESS = PLAYER_END + 0x6BC, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_VERSATILITY = PLAYER_END + 0x6BD, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS = PLAYER_END + 0x6BE, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PVP_POWER_DAMAGE = PLAYER_END + 0x6BF, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PVP_POWER_HEALING = PLAYER_END + 0x6C0, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_EXPLORED_ZONES = PLAYER_END + 0x6C1, // Size: 320, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_REST_INFO = PLAYER_END + 0x801, // Size: 4, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS = PLAYER_END + 0x805, // Size: 7, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = PLAYER_END + 0x80C, // Size: 7, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = PLAYER_END + 0x813, // Size: 7, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS = PLAYER_END + 0x81A, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT = PLAYER_END + 0x81B, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT = PLAYER_END + 0x81C, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT = PLAYER_END + 0x81D, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = PLAYER_END + 0x81E, // Size: 3, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS = PLAYER_END + 0x821, // Size: 3, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT = PLAYER_END + 0x824, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_RESILIENCE_PERCENT = PLAYER_END + 0x825, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT = PLAYER_END + 0x826, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT = PLAYER_END + 0x827, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE = PLAYER_END + 0x828, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = PLAYER_END + 0x829, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_LOCAL_FLAGS = PLAYER_END + 0x82A, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BYTES = PLAYER_END + 0x82B, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PVP_MEDALS = PLAYER_END + 0x82C, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BUYBACK_PRICE = PLAYER_END + 0x82D, // Size: 12, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP = PLAYER_END + 0x839, // Size: 12, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_KILLS = PLAYER_END + 0x845, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = PLAYER_END + 0x846, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX = PLAYER_END + 0x847, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_COMBAT_RATING = PLAYER_END + 0x848, // Size: 32, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO = PLAYER_END + 0x868, // Size: 54, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MAX_LEVEL = PLAYER_END + 0x89E, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA = PLAYER_END + 0x89F, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL = PLAYER_END + 0x8A0, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_NO_REAGENT_COST = PLAYER_END + 0x8A1, // Size: 4, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PET_SPELL_POWER = PLAYER_END + 0x8A5, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE = PLAYER_END + 0x8A6, // Size: 2, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_UI_HIT_MODIFIER = PLAYER_END + 0x8A8, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = PLAYER_END + 0x8A9, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_HOME_REALM_TIME_OFFSET = PLAYER_END + 0x8AA, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_MOD_PET_HASTE = PLAYER_END + 0x8AB, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BYTES2 = PLAYER_END + 0x8AC, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BYTES3 = PLAYER_END + 0x8AD, // Size: 1, Flags: PUBLIC, URGENT_SELF_ONLY
- ACTIVE_PLAYER_FIELD_LFG_BONUS_FACTION_ID = PLAYER_END + 0x8AE, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID = PLAYER_END + 0x8AF, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE = PLAYER_END + 0x8B0, // Size: 1, Flags: PUBLIC, URGENT_SELF_ONLY
- ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS = PLAYER_END + 0x8B1, // Size: 4, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS = PLAYER_END + 0x8B5, // Size: 7, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT = PLAYER_END + 0x8BC, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_QUEST_COMPLETED = PLAYER_END + 0x8BD, // Size: 1750, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_HONOR = PLAYER_END + 0xF93, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL = PLAYER_END + 0xF94, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PVP_TIER_MAX_FROM_WINS = PLAYER_END + 0xF95, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_FIELD_PVP_LAST_WEEKS_TIER_MAX_FROM_WINS = PLAYER_END + 0xF96, // Size: 1, Flags: PUBLIC
- ACTIVE_PLAYER_END = PLAYER_END + 0xF97,
-};
-
-enum ActivePlayerDynamicField
-{
- ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH_SITE = PLAYER_DYNAMIC_END + 0x000, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS = PLAYER_DYNAMIC_END + 0x001, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS = PLAYER_DYNAMIC_END + 0x002, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID = PLAYER_DYNAMIC_END + 0x003, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS = PLAYER_DYNAMIC_END + 0x005, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS = PLAYER_DYNAMIC_END + 0x006, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS = PLAYER_DYNAMIC_END + 0x007, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG = PLAYER_DYNAMIC_END + 0x008, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG = PLAYER_DYNAMIC_END + 0x009, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS = PLAYER_DYNAMIC_END + 0x00A, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS = PLAYER_DYNAMIC_END + 0x00B, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL = PLAYER_DYNAMIC_END + 0x00C, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL = PLAYER_DYNAMIC_END + 0x00D, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH = PLAYER_DYNAMIC_END + 0x00E, // Flags: PUBLIC
- ACTIVE_PLAYER_DYNAMIC_END = PLAYER_DYNAMIC_END + 0x00F,
-};
-
-enum GameObjectFields
-{
- GAMEOBJECT_FIELD_CREATED_BY = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC
- GAMEOBJECT_FIELD_GUILD_GUID = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC
- GAMEOBJECT_DISPLAYID = OBJECT_END + 0x008, // Size: 1, Flags: DYNAMIC, URGENT
- GAMEOBJECT_FLAGS = OBJECT_END + 0x009, // Size: 1, Flags: PUBLIC, URGENT
- GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x00A, // Size: 4, Flags: PUBLIC
- GAMEOBJECT_FACTION = OBJECT_END + 0x00E, // Size: 1, Flags: PUBLIC
- GAMEOBJECT_LEVEL = OBJECT_END + 0x00F, // Size: 1, Flags: PUBLIC
- GAMEOBJECT_BYTES_1 = OBJECT_END + 0x010, // Size: 1, Flags: PUBLIC, URGENT
- GAMEOBJECT_SPELL_VISUAL_ID = OBJECT_END + 0x011, // Size: 1, Flags: PUBLIC, DYNAMIC, URGENT
- GAMEOBJECT_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x012, // Size: 1, Flags: DYNAMIC, URGENT
- GAMEOBJECT_STATE_ANIM_ID = OBJECT_END + 0x013, // Size: 1, Flags: DYNAMIC, URGENT
- GAMEOBJECT_STATE_ANIM_KIT_ID = OBJECT_END + 0x014, // Size: 1, Flags: DYNAMIC, URGENT
- GAMEOBJECT_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x015, // Size: 4, Flags: DYNAMIC, URGENT
- GAMEOBJECT_FIELD_CUSTOM_PARAM = OBJECT_END + 0x019, // Size: 1, Flags: PUBLIC, URGENT
- GAMEOBJECT_END = OBJECT_END + 0x01A,
-};
-
-enum GameObjectDynamicFields
-{
- GAMEOBJECT_DYNAMIC_ENABLE_DOODAD_SETS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC
- GAMEOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x001,
-};
-
-enum DynamicObjectFields
-{
- DYNAMICOBJECT_CASTER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC
- DYNAMICOBJECT_TYPE = OBJECT_END + 0x004, // Size: 1, Flags: PUBLIC
- DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID = OBJECT_END + 0x005, // Size: 1, Flags: PUBLIC
- DYNAMICOBJECT_SPELLID = OBJECT_END + 0x006, // Size: 1, Flags: PUBLIC
- DYNAMICOBJECT_RADIUS = OBJECT_END + 0x007, // Size: 1, Flags: PUBLIC
- DYNAMICOBJECT_CASTTIME = OBJECT_END + 0x008, // Size: 1, Flags: PUBLIC
- DYNAMICOBJECT_END = OBJECT_END + 0x009,
-};
-
-enum DynamicObjectDynamicFields
-{
- DYNAMICOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000,
-};
-
-enum CorpseFields
-{
- CORPSE_FIELD_OWNER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC
- CORPSE_FIELD_PARTY = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC
- CORPSE_FIELD_GUILD_GUID = OBJECT_END + 0x008, // Size: 4, Flags: PUBLIC
- CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x00C, // Size: 1, Flags: PUBLIC
- CORPSE_FIELD_ITEM = OBJECT_END + 0x00D, // Size: 19, Flags: PUBLIC
- CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x020, // Size: 1, Flags: PUBLIC
- CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x021, // Size: 1, Flags: PUBLIC
- CORPSE_FIELD_FLAGS = OBJECT_END + 0x022, // Size: 1, Flags: PUBLIC
- CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x023, // Size: 1, Flags: DYNAMIC
- CORPSE_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x024, // Size: 1, Flags: PUBLIC
- CORPSE_FIELD_CUSTOM_DISPLAY_OPTION = OBJECT_END + 0x025, // Size: 1, Flags: PUBLIC
- CORPSE_END = OBJECT_END + 0x026,
+ UpdateField<uint32, 0, 1> NumSlots;
+ UpdateFieldArray<ObjectGuid, 36, 2, 3> Slots;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum CorpseDynamicFields
+struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
- CORPSE_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000,
+ UpdateFieldArray<int32, 5, 0, 1> Selections;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum AreaTriggerFields
+struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
- AREATRIGGER_OVERRIDE_SCALE_CURVE = OBJECT_END + 0x000, // Size: 7, Flags: PUBLIC, URGENT
- AREATRIGGER_EXTRA_SCALE_CURVE = OBJECT_END + 0x007, // Size: 7, Flags: PUBLIC, URGENT
- AREATRIGGER_CASTER = OBJECT_END + 0x00E, // Size: 4, Flags: PUBLIC
- AREATRIGGER_DURATION = OBJECT_END + 0x012, // Size: 1, Flags: PUBLIC
- AREATRIGGER_TIME_TO_TARGET = OBJECT_END + 0x013, // Size: 1, Flags: PUBLIC, URGENT
- AREATRIGGER_TIME_TO_TARGET_SCALE = OBJECT_END + 0x014, // Size: 1, Flags: PUBLIC, URGENT
- AREATRIGGER_TIME_TO_TARGET_EXTRA_SCALE = OBJECT_END + 0x015, // Size: 1, Flags: PUBLIC, URGENT
- AREATRIGGER_SPELLID = OBJECT_END + 0x016, // Size: 1, Flags: PUBLIC
- AREATRIGGER_SPELL_FOR_VISUALS = OBJECT_END + 0x017, // Size: 1, Flags: PUBLIC
- AREATRIGGER_SPELL_X_SPELL_VISUAL_ID = OBJECT_END + 0x018, // Size: 1, Flags: PUBLIC
- AREATRIGGER_BOUNDS_RADIUS_2D = OBJECT_END + 0x019, // Size: 1, Flags: DYNAMIC, URGENT
- AREATRIGGER_DECAL_PROPERTIES_ID = OBJECT_END + 0x01A, // Size: 1, Flags: PUBLIC
- AREATRIGGER_CREATING_EFFECT_GUID = OBJECT_END + 0x01B, // Size: 4, Flags: PUBLIC
- AREATRIGGER_END = OBJECT_END + 0x01F,
+ UpdateField<uint64, 0, 1> Xp;
+ UpdateField<uint32, 0, 2> Level;
+ UpdateField<uint32, 0, 3> AuraLevel;
+ UpdateField<uint32, 0, 4> KnowledgeLevel;
+ UpdateField<uint32, 0, 5> DEBUGknowledgeWeek;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum AreaTriggerDynamicFields
+struct UnitChannel : public IsUpdateFieldStructureTag
{
- AREATRIGGER_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000,
+ int32 SpellID;
+ int32 SpellXSpellVisualID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
};
-enum SceneObjectFields
+struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
{
- SCENEOBJECT_FIELD_SCRIPT_PACKAGE_ID = OBJECT_END + 0x000, // Size: 1, Flags: PUBLIC
- SCENEOBJECT_FIELD_RND_SEED_VAL = OBJECT_END + 0x001, // Size: 1, Flags: PUBLIC
- SCENEOBJECT_FIELD_CREATEDBY = OBJECT_END + 0x002, // Size: 4, Flags: PUBLIC
- SCENEOBJECT_FIELD_SCENE_TYPE = OBJECT_END + 0x006, // Size: 1, Flags: PUBLIC
- SCENEOBJECT_END = OBJECT_END + 0x007,
+ UpdateField<int32, 0, 1> ItemID;
+ UpdateField<uint16, 0, 2> ItemAppearanceModID;
+ UpdateField<uint16, 0, 3> ItemVisual;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum SceneObjectDynamicFields
+struct PassiveSpellHistory : public IsUpdateFieldStructureTag
{
- SCENEOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000,
+ int32 SpellID;
+ int32 AuraSpellID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
};
-enum ConversationFields
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
{
- CONVERSATION_LAST_LINE_END_TIME = OBJECT_END + 0x000, // Size: 1, Flags: DYNAMIC
- CONVERSATION_END = OBJECT_END + 0x001,
+ UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
+ DynamicUpdateField<PassiveSpellHistory, 0, 2> PassiveSpells;
+ DynamicUpdateField<int32, 0, 3> WorldEffects;
+ DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects;
+ UpdateField<int32, 0, 5> DisplayID;
+ struct DisplayIDTag : ViewerDependentValueTag<int32> {};
+ UpdateField<uint32, 0, 6> StateSpellVisualID;
+ UpdateField<uint32, 0, 7> StateAnimID;
+ UpdateField<uint32, 0, 8> StateAnimKitID;
+ UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID;
+ UpdateField<ObjectGuid, 0, 10> Charm;
+ UpdateField<ObjectGuid, 0, 11> Summon;
+ UpdateField<ObjectGuid, 0, 12> Critter;
+ UpdateField<ObjectGuid, 0, 13> CharmedBy;
+ UpdateField<ObjectGuid, 0, 14> SummonedBy;
+ UpdateField<ObjectGuid, 0, 15> CreatedBy;
+ UpdateField<ObjectGuid, 0, 16> DemonCreator;
+ UpdateField<ObjectGuid, 0, 17> LookAtControllerTarget;
+ UpdateField<ObjectGuid, 0, 18> Target;
+ UpdateField<ObjectGuid, 0, 19> BattlePetCompanionGUID;
+ UpdateField<uint64, 0, 20> BattlePetDBID;
+ UpdateField<UnitChannel, 0, 21> ChannelData;
+ UpdateField<uint32, 0, 22> SummonedByHomeRealm;
+ UpdateField<uint8, 0, 23> Race;
+ UpdateField<uint8, 0, 24> ClassId;
+ UpdateField<uint8, 0, 25> PlayerClassId;
+ UpdateField<uint8, 0, 26> Sex;
+ UpdateField<uint8, 0, 27> DisplayPower;
+ UpdateField<uint32, 0, 28> OverrideDisplayPowerID;
+ UpdateField<int64, 0, 29> Health;
+ UpdateField<int64, 0, 30> MaxHealth;
+ UpdateField<int32, 0, 31> Level;
+ UpdateField<int32, 32, 33> EffectiveLevel;
+ UpdateField<int32, 32, 34> ContentTuningID;
+ UpdateField<int32, 32, 35> ScalingLevelMin;
+ UpdateField<int32, 32, 36> ScalingLevelMax;
+ UpdateField<int32, 32, 37> ScalingLevelDelta;
+ UpdateField<int32, 32, 38> ScalingFactionGroup;
+ UpdateField<int32, 32, 39> ScalingHealthItemLevelCurveID;
+ UpdateField<int32, 32, 40> ScalingDamageItemLevelCurveID;
+ UpdateField<int32, 32, 41> FactionTemplate;
+ struct FactionTemplateTag : ViewerDependentValueTag<int32> {};
+ UpdateField<uint32, 32, 42> Flags;
+ struct FlagsTag : ViewerDependentValueTag<uint32> {};
+ UpdateField<uint32, 32, 43> Flags2;
+ UpdateField<uint32, 32, 44> Flags3;
+ UpdateField<uint32, 32, 45> AuraState;
+ struct AuraStateTag : ViewerDependentValueTag<uint32> {};
+ UpdateField<uint32, 32, 46> RangedAttackRoundBaseTime;
+ UpdateField<float, 32, 47> BoundingRadius;
+ UpdateField<float, 32, 48> CombatReach;
+ UpdateField<float, 32, 49> DisplayScale;
+ UpdateField<int32, 32, 50> NativeDisplayID;
+ UpdateField<float, 32, 51> NativeXDisplayScale;
+ UpdateField<int32, 32, 52> MountDisplayID;
+ UpdateField<int32, 32, 53> CosmeticMountDisplayID;
+ UpdateField<float, 32, 54> MinDamage;
+ UpdateField<float, 32, 55> MaxDamage;
+ UpdateField<float, 32, 56> MinOffHandDamage;
+ UpdateField<float, 32, 57> MaxOffHandDamage;
+ UpdateField<uint8, 32, 58> StandState;
+ UpdateField<uint8, 32, 59> PetTalentPoints;
+ UpdateField<uint8, 32, 60> VisFlags;
+ UpdateField<uint8, 32, 61> AnimTier;
+ UpdateField<uint32, 32, 62> PetNumber;
+ UpdateField<uint32, 32, 63> PetNameTimestamp;
+ UpdateField<uint32, 64, 65> PetExperience;
+ UpdateField<uint32, 64, 66> PetNextLevelExperience;
+ UpdateField<float, 64, 67> ModCastingSpeed;
+ UpdateField<float, 64, 68> ModSpellHaste;
+ UpdateField<float, 64, 69> ModHaste;
+ UpdateField<float, 64, 70> ModRangedHaste;
+ UpdateField<float, 64, 71> ModHasteRegen;
+ UpdateField<float, 64, 72> ModTimeRate;
+ UpdateField<int32, 64, 73> CreatedBySpell;
+ UpdateField<int32, 64, 74> EmoteState;
+ UpdateField<int32, 64, 75> BaseMana;
+ UpdateField<int32, 64, 76> BaseHealth;
+ UpdateField<uint8, 64, 77> SheatheState;
+ UpdateField<uint8, 64, 78> PvpFlags;
+ struct PvpFlagsTag : ViewerDependentValueTag<uint8> {};
+ UpdateField<uint8, 64, 79> PetFlags;
+ UpdateField<uint8, 64, 80> ShapeshiftForm;
+ UpdateField<int32, 64, 81> AttackPower;
+ UpdateField<int32, 64, 82> AttackPowerModPos;
+ UpdateField<int32, 64, 83> AttackPowerModNeg;
+ UpdateField<float, 64, 84> AttackPowerMultiplier;
+ UpdateField<int32, 64, 85> RangedAttackPower;
+ UpdateField<int32, 64, 86> RangedAttackPowerModPos;
+ UpdateField<int32, 64, 87> RangedAttackPowerModNeg;
+ UpdateField<float, 64, 88> RangedAttackPowerMultiplier;
+ UpdateField<int32, 64, 89> MainHandWeaponAttackPower;
+ UpdateField<int32, 64, 90> OffHandWeaponAttackPower;
+ UpdateField<int32, 64, 91> RangedWeaponAttackPower;
+ UpdateField<int32, 64, 92> SetAttackSpeedAura;
+ UpdateField<float, 64, 93> Lifesteal;
+ UpdateField<float, 64, 94> MinRangedDamage;
+ UpdateField<float, 64, 95> MaxRangedDamage;
+ UpdateField<float, 96, 97> ManaCostModifierModifier;
+ UpdateField<float, 96, 98> MaxHealthModifier;
+ UpdateField<float, 96, 99> HoverHeight;
+ UpdateField<int32, 96, 100> MinItemLevelCutoff;
+ UpdateField<int32, 96, 101> MinItemLevel;
+ UpdateField<int32, 96, 102> MaxItemLevel;
+ UpdateField<int32, 96, 103> AzeriteItemLevel;
+ UpdateField<int32, 96, 104> WildBattlePetLevel;
+ UpdateField<uint32, 96, 105> BattlePetCompanionNameTimestamp;
+ UpdateField<int32, 96, 106> InteractSpellID;
+ UpdateField<int32, 96, 107> ScaleDuration;
+ UpdateField<int32, 96, 108> SpellOverrideNameID;
+ UpdateField<int32, 96, 109> LooksLikeMountID;
+ UpdateField<int32, 96, 110> LooksLikeCreatureID;
+ UpdateField<int32, 96, 111> LookAtControllerID;
+ UpdateField<int32, 96, 112> TaxiNodesID;
+ UpdateField<ObjectGuid, 96, 113> GuildGUID;
+ UpdateFieldArray<uint32, 2, 114, 115> NpcFlags;
+ struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
+ UpdateFieldArray<int32, 6, 117, 118> Power;
+ UpdateFieldArray<int32, 6, 117, 124> MaxPower;
+ UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<VisibleItem, 3, 142, 143> VirtualItems;
+ UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 4, 149, 150> Stats;
+ UpdateFieldArray<int32, 4, 149, 154> StatPosBuff;
+ UpdateFieldArray<int32, 4, 149, 158> StatNegBuff;
+ UpdateFieldArray<int32, 7, 162, 163> Resistances;
+ UpdateFieldArray<int32, 7, 162, 170> BonusResistanceMods;
+ UpdateFieldArray<int32, 7, 162, 177> PowerCostModifier;
+ UpdateFieldArray<float, 7, 162, 184> PowerCostMultiplier;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-enum ConversationDynamicFields
+struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30>
{
- CONVERSATION_DYNAMIC_FIELD_ACTORS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC
- CONVERSATION_DYNAMIC_FIELD_LINES = OBJECT_DYNAMIC_END + 0x001, // Flags: 0x100
- CONVERSATION_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x002,
+ UpdateField<int32, 0, 1> QuestID;
+ UpdateField<uint32, 0, 2> StateFlags;
+ UpdateField<uint32, 0, 3> EndTime;
+ UpdateField<uint32, 0, 4> AcceptTime;
+ UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
};
-#endif // _UPDATEFIELDS_H
+struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8>
+{
+ UpdateField<int32, 0, 1> SpellID;
+ UpdateField<int32, 0, 2> Charges;
+ UpdateField<uint32, 0, 3> Flags;
+ UpdateField<uint32, 0, 4> StartTime;
+ UpdateField<uint32, 0, 5> EndTime;
+ UpdateField<uint32, 0, 6> NextChargeTime;
+ UpdateField<uint8, 0, 7> MaxCharges;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<161>
+{
+ DynamicUpdateField<ArenaCooldown, 0, 1> ArenaCooldowns;
+ UpdateField<ObjectGuid, 0, 2> DuelArbiter;
+ UpdateField<ObjectGuid, 0, 3> WowAccount;
+ UpdateField<ObjectGuid, 0, 4> LootTargetGUID;
+ UpdateField<uint32, 0, 5> PlayerFlags;
+ UpdateField<uint32, 0, 6> PlayerFlagsEx;
+ UpdateField<uint32, 0, 7> GuildRankID;
+ UpdateField<uint32, 0, 8> GuildDeleteDate;
+ UpdateField<int32, 0, 9> GuildLevel;
+ UpdateField<uint8, 0, 10> SkinID;
+ UpdateField<uint8, 0, 11> FaceID;
+ UpdateField<uint8, 0, 12> HairStyleID;
+ UpdateField<uint8, 0, 13> HairColorID;
+ UpdateField<uint8, 0, 14> FacialHairStyleID;
+ UpdateField<uint8, 0, 15> PartyType;
+ UpdateField<uint8, 0, 16> NativeSex;
+ UpdateField<uint8, 0, 17> Inebriation;
+ UpdateField<uint8, 0, 18> PvpTitle;
+ UpdateField<uint8, 0, 19> ArenaFaction;
+ UpdateField<uint32, 0, 20> DuelTeam;
+ UpdateField<int32, 0, 21> GuildTimeStamp;
+ UpdateField<int32, 0, 22> PlayerTitle;
+ UpdateField<int32, 0, 23> FakeInebriation;
+ UpdateField<uint32, 0, 24> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 25> CurrentSpecID;
+ UpdateField<int32, 0, 26> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 28> HonorLevel;
+ UpdateField<int32, 0, 29> Field_B0;
+ UpdateField<int32, 0, 30> Field_B4;
+ UpdateFieldArray<uint8, 3, 31, 32> CustomDisplayOption;
+ UpdateFieldArray<QuestLog, 100, 35, 36> QuestLog;
+ UpdateFieldArray<VisibleItem, 19, 136, 137> VisibleItems;
+ UpdateFieldArray<float, 4, 156, 157> AvgItemLevel;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
+{
+ UpdateFieldArray<uint16, 256, 0, 1> SkillLineID;
+ UpdateFieldArray<uint16, 256, 0, 257> SkillStep;
+ UpdateFieldArray<uint16, 256, 0, 513> SkillRank;
+ UpdateFieldArray<uint16, 256, 0, 769> SkillStartingRank;
+ UpdateFieldArray<uint16, 256, 0, 1025> SkillMaxRank;
+ UpdateFieldArray<int16, 256, 0, 1281> SkillTempBonus;
+ UpdateFieldArray<uint16, 256, 0, 1537> SkillPermBonus;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<uint32, 0, 1> Threshold;
+ UpdateField<uint8, 0, 2> StateID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10>
+{
+ UpdateField<uint32, 0, 1> Field_0;
+ UpdateField<uint32, 0, 2> Field_4;
+ UpdateField<uint32, 0, 3> Field_8;
+ UpdateField<uint32, 0, 4> Field_C;
+ UpdateField<uint32, 0, 5> Rating;
+ UpdateField<uint32, 0, 6> Field_14;
+ UpdateField<uint32, 0, 7> Field_18;
+ UpdateField<uint32, 0, 8> PvpTierID;
+ UpdateField<uint32, 0, 9> Field_20;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct CharacterRestriction : public IsUpdateFieldStructureTag
+{
+ int32 Field_0;
+ int32 Field_4;
+ int32 Field_8;
+ uint32 Type;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+};
+
+struct SpellPctModByLabel : public IsUpdateFieldStructureTag
+{
+ int32 ModIndex;
+ float ModifierValue;
+ int32 LabelID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+};
+
+struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
+{
+ int32 ModIndex;
+ int32 ModifierValue;
+ int32 LabelID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+};
+
+struct Research : public IsUpdateFieldStructureTag
+{
+ int16 ResearchProjectID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+};
+
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1455>
+{
+ UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
+ UpdateField<bool, 0, 2> BankAutoSortDisabled;
+ UpdateField<bool, 0, 3> SortBagsRightToLeft;
+ UpdateField<bool, 0, 4> InsertItemsLeftToRight;
+ UpdateFieldArray<DynamicUpdateField<Research, -1, -1>, 1, 20, 21> Research;
+ DynamicUpdateField<uint64, 0, 5> KnownTitles;
+ DynamicUpdateField<uint16, 0, 6> ResearchSites;
+ DynamicUpdateField<uint32, 0, 7> ResearchSiteProgress;
+ DynamicUpdateField<int32, 0, 8> DailyQuestsCompleted;
+ DynamicUpdateField<int32, 0, 9> AvailableQuestLineXQuestIDs;
+ DynamicUpdateField<int32, 0, 10> Heirlooms;
+ DynamicUpdateField<uint32, 0, 11> HeirloomFlags;
+ DynamicUpdateField<int32, 0, 12> Toys;
+ DynamicUpdateField<uint32, 0, 13> ToyFlags;
+ DynamicUpdateField<uint32, 0, 14> Transmog;
+ DynamicUpdateField<int32, 0, 15> ConditionalTransmog;
+ DynamicUpdateField<int32, 0, 16> SelfResSpells;
+ DynamicUpdateField<SpellPctModByLabel, 0, 17> SpellPctModByLabel;
+ DynamicUpdateField<SpellFlatModByLabel, 0, 18> SpellFlatModByLabel;
+ DynamicUpdateField<CharacterRestriction, 0, 19> CharacterRestrictions;
+ UpdateField<ObjectGuid, 0, 22> FarsightObject;
+ UpdateField<ObjectGuid, 0, 23> SummonedBattlePetGUID;
+ UpdateField<uint64, 0, 24> Coinage;
+ UpdateField<int32, 0, 25> XP;
+ UpdateField<int32, 0, 26> NextLevelXP;
+ UpdateField<int32, 0, 27> TrialXP;
+ UpdateField<SkillInfo, 0, 28> Skill;
+ UpdateField<int32, 0, 29> CharacterPoints;
+ UpdateField<int32, 0, 30> MaxTalentTiers;
+ UpdateField<int32, 0, 31> TrackCreatureMask;
+ UpdateField<float, 0, 32> MainhandExpertise;
+ UpdateField<float, 0, 33> OffhandExpertise;
+ UpdateField<float, 34, 35> RangedExpertise;
+ UpdateField<float, 34, 36> CombatRatingExpertise;
+ UpdateField<float, 34, 37> BlockPercentage;
+ UpdateField<float, 34, 38> DodgePercentage;
+ UpdateField<float, 34, 39> DodgePercentageFromAttribute;
+ UpdateField<float, 34, 40> ParryPercentage;
+ UpdateField<float, 34, 41> ParryPercentageFromAttribute;
+ UpdateField<float, 34, 42> CritPercentage;
+ UpdateField<float, 34, 43> RangedCritPercentage;
+ UpdateField<float, 34, 44> OffhandCritPercentage;
+ UpdateField<float, 34, 45> SpellCritPercentage;
+ UpdateField<int32, 34, 46> ShieldBlock;
+ UpdateField<float, 34, 47> ShieldBlockCritPercentage;
+ UpdateField<float, 34, 48> Mastery;
+ UpdateField<float, 34, 49> Speed;
+ UpdateField<float, 34, 50> Avoidance;
+ UpdateField<float, 34, 51> Sturdiness;
+ UpdateField<int32, 34, 52> Versatility;
+ UpdateField<float, 34, 53> VersatilityBonus;
+ UpdateField<float, 34, 54> PvpPowerDamage;
+ UpdateField<float, 34, 55> PvpPowerHealing;
+ UpdateField<int32, 34, 56> ModHealingDonePos;
+ UpdateField<float, 34, 57> ModHealingPercent;
+ UpdateField<float, 34, 58> ModHealingDonePercent;
+ UpdateField<float, 34, 59> ModPeriodicHealingDonePercent;
+ UpdateField<float, 34, 60> ModSpellPowerPercent;
+ UpdateField<float, 34, 61> ModResiliencePercent;
+ UpdateField<float, 34, 62> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 34, 63> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 34, 64> ModTargetResistance;
+ UpdateField<int32, 34, 65> ModTargetPhysicalResistance;
+ UpdateField<int32, 66, 67> LocalFlags;
+ UpdateField<uint8, 66, 68> GrantableLevels;
+ UpdateField<uint8, 66, 69> MultiActionBars;
+ UpdateField<uint8, 66, 70> LifetimeMaxRank;
+ UpdateField<uint8, 66, 71> NumRespecs;
+ UpdateField<uint32, 66, 72> PvpMedals;
+ UpdateField<uint16, 66, 73> TodayHonorableKills;
+ UpdateField<uint16, 66, 74> YesterdayHonorableKills;
+ UpdateField<uint32, 66, 75> LifetimeHonorableKills;
+ UpdateField<int32, 66, 76> WatchedFactionIndex;
+ UpdateField<int32, 66, 77> MaxLevel;
+ UpdateField<int32, 66, 78> ScalingPlayerLevelDelta;
+ UpdateField<int32, 66, 79> MaxCreatureScalingLevel;
+ UpdateField<int32, 66, 80> PetSpellPower;
+ UpdateField<float, 66, 81> UiHitModifier;
+ UpdateField<float, 66, 82> UiSpellHitModifier;
+ UpdateField<int32, 66, 83> HomeRealmTimeOffset;
+ UpdateField<float, 66, 84> ModPetHaste;
+ UpdateField<uint8, 66, 85> LocalRegenFlags;
+ UpdateField<uint8, 66, 86> AuraVision;
+ UpdateField<uint8, 66, 87> NumBackpackSlots;
+ UpdateField<int32, 66, 88> OverrideSpellsID;
+ UpdateField<int32, 66, 89> LfgBonusFactionID;
+ UpdateField<uint16, 66, 90> LootSpecID;
+ UpdateField<uint32, 66, 91> OverrideZonePVPType;
+ UpdateField<int32, 66, 92> Honor;
+ UpdateField<int32, 66, 93> HonorNextLevel;
+ UpdateField<int32, 66, 94> PvpRewardAchieved;
+ UpdateField<int32, 66, 95> PvpTierMaxFromWins;
+ UpdateField<int32, 66, 96> PvpLastWeeksRewardAchieved;
+ UpdateField<int32, 66, 97> PvpLastWeeksTierMaxFromWins;
+ UpdateField<int32, 98, 99> PvpLastWeeksRewardClaimed;
+ UpdateField<uint8, 98, 100> NumBankSlots;
+ UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots;
+ UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask;
+ UpdateFieldArray<uint64, 160, 300, 301> ExploredZones;
+ UpdateFieldArray<RestInfo, 2, 461, 462> RestInfo;
+ UpdateFieldArray<int32, 7, 464, 465> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 464, 472> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 464, 479> ModDamageDonePercent;
+ UpdateFieldArray<float, 3, 486, 487> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 486, 490> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 493, 494> BuybackPrice;
+ UpdateFieldArray<uint32, 12, 493, 506> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 518, 519> CombatRatings;
+ UpdateFieldArray<PVPInfo, 6, 551, 552> PvpInfo;
+ UpdateFieldArray<uint32, 4, 558, 559> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 563, 564> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 566, 567> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 571, 572> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 579, 580> QuestCompleted;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<20>
+{
+ UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
+ DynamicUpdateField<int32, 0, 2> EnableDoodadSets;
+ UpdateField<int32, 0, 3> DisplayID;
+ UpdateField<uint32, 0, 4> SpellVisualID;
+ UpdateField<uint32, 0, 5> StateSpellVisualID;
+ UpdateField<uint32, 0, 6> SpawnTrackingStateAnimID;
+ UpdateField<uint32, 0, 7> SpawnTrackingStateAnimKitID;
+ UpdateField<uint32, 0, 8> StateWorldEffectsQuestObjectiveID;
+ UpdateField<ObjectGuid, 0, 9> CreatedBy;
+ UpdateField<ObjectGuid, 0, 10> GuildGUID;
+ UpdateField<uint32, 0, 11> Flags;
+ struct FlagsTag : ViewerDependentValueTag<uint32> {};
+ UpdateField<QuaternionData, 0, 12> ParentRotation;
+ UpdateField<int32, 0, 13> FactionTemplate;
+ UpdateField<int32, 0, 14> Level;
+ struct LevelTag : ViewerDependentValueTag<int32> {};
+ UpdateField<int8, 0, 15> State;
+ struct StateTag : ViewerDependentValueTag<int8> {};
+ UpdateField<int8, 0, 16> TypeID;
+ UpdateField<uint8, 0, 17> ArtKit;
+ UpdateField<uint8, 0, 18> PercentHealth;
+ UpdateField<uint32, 0, 19> CustomParam;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
+{
+ UpdateField<ObjectGuid, 0, 1> Caster;
+ UpdateField<int32, 0, 2> SpellXSpellVisualID;
+ UpdateField<int32, 0, 3> SpellID;
+ UpdateField<float, 0, 4> Radius;
+ UpdateField<uint32, 0, 5> CastTime;
+ UpdateField<uint8, 0, 6> Type;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
+{
+ UpdateField<uint32, 0, 1> DynamicFlags;
+ UpdateField<ObjectGuid, 0, 2> Owner;
+ UpdateField<ObjectGuid, 0, 3> PartyGUID;
+ UpdateField<ObjectGuid, 0, 4> GuildGUID;
+ UpdateField<uint32, 0, 5> DisplayID;
+ UpdateField<uint8, 0, 6> Unused;
+ UpdateField<uint8, 0, 7> RaceID;
+ UpdateField<uint8, 0, 8> Sex;
+ UpdateField<uint8, 0, 9> SkinID;
+ UpdateField<uint8, 0, 10> FaceID;
+ UpdateField<uint8, 0, 11> HairStyleID;
+ UpdateField<uint8, 0, 12> HairColorID;
+ UpdateField<uint8, 0, 13> FacialHairStyleID;
+ UpdateField<uint32, 0, 14> Flags;
+ UpdateField<int32, 0, 15> FactionTemplate;
+ UpdateFieldArray<uint32, 19, 16, 17> Items;
+ UpdateFieldArray<uint8, 3, 36, 37> CustomDisplayOption;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ScaleCurve : public IsUpdateFieldStructureTag
+{
+ bool OverrideActive;
+ uint32 StartTimeOffset;
+ uint32 ParameterCurve;
+ TaggedPosition<Position::XY> Points[2];
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+};
+
+struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14>
+{
+ UpdateField<ScaleCurve, 0, 1> OverrideScaleCurve;
+ UpdateField<ScaleCurve, 0, 2> ExtraScaleCurve;
+ UpdateField<ObjectGuid, 0, 3> Caster;
+ UpdateField<uint32, 0, 4> Duration;
+ UpdateField<uint32, 0, 5> TimeToTarget;
+ UpdateField<uint32, 0, 6> TimeToTargetScale;
+ UpdateField<uint32, 0, 7> TimeToTargetExtraScale;
+ UpdateField<int32, 0, 8> SpellID;
+ UpdateField<int32, 0, 9> SpellForVisuals;
+ UpdateField<int32, 0, 10> SpellXSpellVisualID;
+ UpdateField<float, 0, 11> BoundsRadius2D;
+ UpdateField<uint32, 0, 12> DecalPropertiesID;
+ UpdateField<ObjectGuid, 0, 13> CreatingEffectGUID;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct SceneObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+{
+ UpdateField<int32, 0, 1> ScriptPackageID;
+ UpdateField<uint32, 0, 2> RndSeedVal;
+ UpdateField<ObjectGuid, 0, 3> CreatedBy;
+ UpdateField<uint32, 0, 4> SceneType;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ConversationLine : public IsUpdateFieldStructureTag
+{
+ int32 ConversationLineID;
+ uint32 StartTime;
+ int32 UiCameraID;
+ uint8 ActorIndex;
+ uint8 Flags;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+};
+
+struct ConversationActor : public IsUpdateFieldStructureTag
+{
+ uint32 CreatureID;
+ uint32 CreatureDisplayInfoID;
+ ObjectGuid ActorGUID;
+ int32 Field_18;
+ uint32 Type;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+};
+
+struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<std::vector<ConversationLine>, 0, 1> Lines;
+ DynamicUpdateField<ConversationActor, 0, 2> Actors;
+ UpdateField<int32, 0, 3> LastLineEndTime;
+
+ void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+}
+
+#endif // UpdateFields_h__
diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h
new file mode 100644
index 00000000000..8c903528ae8
--- /dev/null
+++ b/src/server/game/Entities/Object/Updates/UpdateMask.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef UpdateMask_h__
+#define UpdateMask_h__
+
+#include "Define.h"
+
+namespace UpdateMaskHelpers
+{
+ inline constexpr uint32 GetBlockIndex(uint32 bit) { return bit / 32; }
+ inline constexpr uint32 GetBlockFlag(uint32 bit) { return 1 << (bit % 32); }
+}
+
+template<uint32 Bits>
+class UpdateMask
+{
+public:
+ static constexpr uint32 BlockCount = (Bits + 31) / 32;
+ static constexpr uint32 BlocksMaskCount = (BlockCount + 31) / 32;
+
+ UpdateMask()
+ {
+ std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0);
+ std::fill(std::begin(_blocks), std::end(_blocks), 0);
+ }
+
+ UpdateMask(std::initializer_list<uint32> init)
+ {
+ InitFromBlocks(init.begin(), init.size());
+ }
+
+ uint32 GetBlocksMask(uint32 index) const
+ {
+ return _blocksMask[index];
+ }
+
+ uint32 GetBlock(uint32 index) const
+ {
+ return _blocks[index];
+ }
+
+ bool operator[](uint32 index) const
+ {
+ return (_blocks[index / 32] & (1 << (index % 32))) != 0;
+ }
+
+ void Reset(uint32 index)
+ {
+ std::size_t blockIndex = UpdateMaskHelpers::GetBlockIndex(index);
+ if (!(_blocks[blockIndex] &= ~UpdateMaskHelpers::GetBlockFlag(index)))
+ _blocksMask[UpdateMaskHelpers::GetBlockIndex(blockIndex)] &= ~UpdateMaskHelpers::GetBlockFlag(blockIndex);
+ }
+
+ void ResetAll()
+ {
+ std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0);
+ std::fill(std::begin(_blocks), std::end(_blocks), 0);
+ }
+
+ void Set(uint32 index)
+ {
+ std::size_t blockIndex = UpdateMaskHelpers::GetBlockIndex(index);
+ _blocks[blockIndex] |= UpdateMaskHelpers::GetBlockFlag(index);
+ _blocksMask[UpdateMaskHelpers::GetBlockIndex(blockIndex)] |= UpdateMaskHelpers::GetBlockFlag(blockIndex);
+ }
+
+ void SetAll()
+ {
+ std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0xFFFFFFFF);
+ if (BlocksMaskCount % 32)
+ {
+ constexpr uint32 unused = 32 - (BlocksMaskCount % 32);
+ _blocksMask[BlocksMaskCount - 1] &= (0xFFFFFFFF >> unused);
+ }
+ std::fill(std::begin(_blocks), std::end(_blocks), 0xFFFFFFFF);
+ if (BlockCount % 32)
+ {
+ constexpr uint32 unused = 32 - (BlockCount % 32);
+ _blocks[BlockCount - 1] &= (0xFFFFFFFF >> unused);
+ }
+ }
+
+ UpdateMask& operator&=(UpdateMask const& right)
+ {
+ for (uint32 i = 0; i < BlocksMaskCount; ++i)
+ _blocksMask[i] &= right._blocksMask[i];
+
+ for (uint32 i = 0; i < BlockCount; ++i)
+ _blocks[i] &= right._blocks[i];
+
+ return *this;
+ }
+
+ UpdateMask& operator|=(UpdateMask const& right)
+ {
+ for (std::size_t i = 0; i < BlocksMaskCount; ++i)
+ _blocksMask[i] |= right._blocksMask[i];
+
+ for (std::size_t i = 0; i < BlockCount; ++i)
+ _blocks[i] |= right._blocks[i];
+
+ return *this;
+ }
+
+private:
+ void InitFromBlocks(uint32 const* input, uint32 size)
+ {
+ std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0);
+
+ uint32 block = 0;
+ for (; block < size; ++block)
+ if ((_blocks[block] = input[block]) != 0)
+ _blocksMask[UpdateMaskHelpers::GetBlockIndex(block)] |= UpdateMaskHelpers::GetBlockFlag(block);
+
+ for (; block < BlockCount; ++block)
+ _blocks[block] = 0;
+ }
+
+ uint32 _blocksMask[BlocksMaskCount];
+ uint32 _blocks[BlockCount];
+};
+
+template<uint32 Bits>
+UpdateMask<Bits> operator&(UpdateMask<Bits> const& left, UpdateMask<Bits> const& right)
+{
+ UpdateMask<Bits> result = left;
+ result &= right;
+ return result;
+}
+
+template<uint32 Bits>
+UpdateMask<Bits> operator|(UpdateMask<Bits> const& left, UpdateMask<Bits> const& right)
+{
+ UpdateMask<Bits> result = left;
+ result |= right;
+ return result;
+}
+
+#endif // UpdateMask_h__
diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h
new file mode 100644
index 00000000000..81c1fdbabc0
--- /dev/null
+++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ViewerDependentValues_h__
+#define ViewerDependentValues_h__
+
+#include "Creature.h"
+#include "GameObject.h"
+#include "Map.h"
+#include "ObjectMgr.h"
+#include "Player.h"
+#include "SpellInfo.h"
+#include "SpellMgr.h"
+#include "World.h"
+
+namespace UF
+{
+template<typename Tag>
+class ViewerDependentValue
+{
+};
+
+template<>
+class ViewerDependentValue<UF::ObjectData::DynamicFlagsTag>
+{
+public:
+ using ValueType = UF::ObjectData::DynamicFlagsTag::ValueType;
+
+ static ValueType GetValue(ValueType dynamicFlags, Object const* object, Player const* receiver)
+ {
+ if (Unit const* unit = object->ToUnit())
+ {
+ dynamicFlags &= ~UNIT_DYNFLAG_TAPPED;
+
+ if (Creature const* creature = object->ToCreature())
+ {
+ if (creature->hasLootRecipient() && !creature->isTappedBy(receiver))
+ dynamicFlags |= UNIT_DYNFLAG_TAPPED;
+
+ if (!receiver->isAllowedToLoot(creature))
+ dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE;
+ }
+
+ // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras
+ if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT)
+ if (!unit->HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, receiver->GetGUID()))
+ dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT;
+ }
+ else if (GameObject const* gameObject = object->ToGameObject())
+ {
+ uint16 dynFlags = 0;
+ uint16 pathProgress = 0xFFFF;
+ switch (gameObject->GetGoType())
+ {
+ case GAMEOBJECT_TYPE_QUESTGIVER:
+ if (gameObject->ActivateToQuest(receiver))
+ dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
+ break;
+ case GAMEOBJECT_TYPE_CHEST:
+ case GAMEOBJECT_TYPE_GOOBER:
+ if (gameObject->ActivateToQuest(receiver))
+ dynFlags |= GO_DYNFLAG_LO_ACTIVATE | GO_DYNFLAG_LO_SPARKLE;
+ else if (receiver->IsGameMaster())
+ dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
+ break;
+ case GAMEOBJECT_TYPE_GENERIC:
+ if (gameObject->ActivateToQuest(receiver))
+ dynFlags |= GO_DYNFLAG_LO_SPARKLE;
+ break;
+ case GAMEOBJECT_TYPE_TRANSPORT:
+ case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT:
+ {
+ if (uint32 transportPeriod = gameObject->GetTransportPeriod())
+ {
+ float timer = float(gameObject->GetGOValue()->Transport.PathProgress % transportPeriod);
+ pathProgress = uint16(timer / float(transportPeriod) * 65535.0f);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+
+ dynamicFlags = (pathProgress << 16) | dynFlags;
+ }
+
+ return dynamicFlags;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::DisplayIDTag>
+{
+public:
+ using ValueType = UF::UnitData::DisplayIDTag::ValueType;
+
+ static ValueType GetValue(ValueType displayId, Unit const* unit, Player const* receiver)
+ {
+ if (unit->IsCreature())
+ {
+ CreatureTemplate const* cinfo = unit->ToCreature()->GetCreatureTemplate();
+
+ // this also applies for transform auras
+ if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(unit->getTransForm()))
+ for (SpellEffectInfo const* effect : transform->GetEffectsForDifficulty(unit->GetMap()->GetDifficultyID()))
+ if (effect && effect->IsAura(SPELL_AURA_TRANSFORM))
+ if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(effect->MiscValue))
+ {
+ cinfo = transformInfo;
+ break;
+ }
+
+ if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER)
+ if (receiver->IsGameMaster())
+ displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
+ }
+
+ return displayId;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::FactionTemplateTag>
+{
+public:
+ using ValueType = UF::UnitData::FactionTemplateTag::ValueType;
+
+ static ValueType GetValue(ValueType factionTemplate, Unit const* unit, Player const* receiver)
+ {
+ if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver))
+ {
+ FactionTemplateEntry const* ft1 = unit->GetFactionTemplateEntry();
+ FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry();
+ if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2))
+ // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work)
+ factionTemplate = receiver->getFaction();
+ }
+
+ return factionTemplate;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::FlagsTag>
+{
+public:
+ using ValueType = UF::UnitData::FlagsTag::ValueType;
+
+ static ValueType GetValue(ValueType flags, Unit const* /*unit*/, Player const* receiver)
+ {
+ // Gamemasters should be always able to select units - remove not selectable flag
+ if (receiver->IsGameMaster())
+ flags &= ~UNIT_FLAG_NOT_SELECTABLE;
+
+ return flags;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::AuraStateTag>
+{
+public:
+ using ValueType = UF::UnitData::AuraStateTag::ValueType;
+
+ static ValueType GetValue(ValueType /*auraState*/, Unit const* unit, Player const* receiver)
+ {
+ // Check per caster aura states to not enable using a spell in client if specified aura is not by target
+ return unit->BuildAuraStateUpdateForTarget(receiver);
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::PvpFlagsTag>
+{
+public:
+ using ValueType = UF::UnitData::PvpFlagsTag::ValueType;
+
+ static ValueType GetValue(ValueType pvpFlags, Unit const* unit, Player const* receiver)
+ {
+ if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver))
+ {
+ FactionTemplateEntry const* ft1 = unit->GetFactionTemplateEntry();
+ FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry();
+ if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2))
+ // Allow targeting opposite faction in party when enabled in config
+ pvpFlags &= UNIT_BYTE2_FLAG_SANCTUARY;
+ }
+
+ return pvpFlags;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::UnitData::NpcFlagsTag>
+{
+public:
+ using ValueType = UF::UnitData::NpcFlagsTag::ValueType;
+
+ static ValueType GetValue(ValueType npcFlag, uint32 i, Unit const* unit, Player const* receiver)
+ {
+ if (i == 0 && unit->IsCreature() && !receiver->CanSeeSpellClickOn(unit->ToCreature()))
+ npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK;
+
+ return npcFlag;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::GameObjectData::FlagsTag>
+{
+public:
+ using ValueType = UF::GameObjectData::FlagsTag::ValueType;
+
+ static ValueType GetValue(ValueType flags, GameObject const* gameObject, Player const* receiver)
+ {
+ if (gameObject->GetGoType() == GAMEOBJECT_TYPE_CHEST)
+ if (gameObject->GetGOInfo()->chest.usegrouplootrules && !gameObject->IsLootAllowedFor(receiver))
+ flags |= GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE;
+
+ return flags;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::GameObjectData::LevelTag>
+{
+public:
+ using ValueType = UF::GameObjectData::LevelTag::ValueType;
+
+ static ValueType GetValue(ValueType level, GameObject const* gameObject, Player const* /*receiver*/)
+ {
+ bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty();
+ return isStoppableTransport ? gameObject->GetGOValue()->Transport.PathProgress : level;
+ }
+};
+
+template<>
+class ViewerDependentValue<UF::GameObjectData::StateTag>
+{
+public:
+ using ValueType = UF::GameObjectData::StateTag::ValueType;
+
+ static ValueType GetValue(ValueType state, GameObject const* gameObject, Player const* /*receiver*/)
+ {
+ bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty();
+ if (isStoppableTransport && gameObject->GetGoState() == GO_STATE_TRANSPORT_ACTIVE)
+ if ((gameObject->GetGOValue()->Transport.StateUpdateTimer / 20000) & 1)
+ state = GO_STATE_TRANSPORT_STOPPED;
+
+ return state;
+ }
+};
+}
+
+#endif // ViewerDependentValues_h__
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 0d320da9659..b45e1e14e34 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -187,7 +187,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
setPetType(petType);
setFaction(owner->getFaction());
- SetUInt32Value(UNIT_CREATED_BY_SPELL, summonSpellId);
+ SetCreatedBySpell(summonSpellId);
if (IsCritter())
{
@@ -211,22 +211,23 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
SetDisplayId(fields[3].GetUInt32());
SetNativeDisplayId(fields[3].GetUInt32());
uint32 petlevel = fields[4].GetUInt16();
- SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
SetName(fields[8].GetString());
switch (getPetType())
{
case SUMMON_PET:
petlevel = owner->getLevel();
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE);
- SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet dismiss, cancel)
+ SetClass(CLASS_MAGE);
+ SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet dismiss, cancel)
break;
case HUNTER_PET:
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE);
+ SetClass(CLASS_WARRIOR);
+ SetGender(GENDER_NONE);
SetSheath(SHEATH_STATE_MELEE);
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED);
- SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet abandon, cancel)
+ SetPetFlags(fields[9].GetBool() ? UNIT_PET_FLAG_CAN_BE_ABANDONED : UnitPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED | UNIT_PET_FLAG_CAN_BE_ABANDONED));
+ SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet abandon, cancel)
break;
default:
if (!IsPetGhoul())
@@ -234,11 +235,11 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
break;
}
- SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped here
+ SetPetNameTimestamp(uint32(time(NULL)));
SetCreatorGUID(owner->GetGUID());
InitStatsForLevel(petlevel);
- SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, fields[5].GetUInt32());
+ SetPetExperience(fields[5].GetUInt32());
SynchronizeLevelWithOwner();
@@ -459,18 +460,18 @@ void Pet::SavePetToDB(PetSaveMode mode)
stmt->setUInt64(2, ownerLowGUID);
stmt->setUInt32(3, GetNativeDisplayId());
stmt->setUInt8(4, getLevel());
- stmt->setUInt32(5, GetUInt32Value(UNIT_FIELD_PETEXPERIENCE));
+ stmt->setUInt32(5, m_unitData->PetExperience);
stmt->setUInt8(6, GetReactState());
stmt->setInt16(7, mode);
stmt->setString(8, m_name);
- stmt->setUInt8(9, HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED) ? 0 : 1);
+ stmt->setUInt8(9, HasPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED) ? 0 : 1);
stmt->setUInt32(10, curhealth);
stmt->setUInt32(11, curmana);
stmt->setString(12, GenerateActionBarData());
stmt->setUInt32(13, time(NULL));
- stmt->setUInt32(14, GetUInt32Value(UNIT_CREATED_BY_SPELL));
+ stmt->setUInt32(14, m_unitData->CreatedBySpell);
stmt->setUInt8(15, getPetType());
stmt->setUInt16(16, m_petSpecialization);
trans->Append(stmt);
@@ -528,8 +529,8 @@ void Pet::setDeathState(DeathState s) // overwrite virtual
if (getPetType() == HUNTER_PET)
{
// pet corpse non lootable and non skinnable
- SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ SetDynamicFlags(UNIT_DYNFLAG_NONE);
+ RemoveUnitFlag(UNIT_FLAG_SKINNABLE);
//SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
@@ -691,8 +692,8 @@ void Pet::GivePetXP(uint32 xp)
if (petlevel >= maxlevel)
return;
- uint32 nextLvlXP = GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP);
- uint32 curXP = GetUInt32Value(UNIT_FIELD_PETEXPERIENCE);
+ uint32 nextLvlXP = m_unitData->PetNextLevelExperience;
+ uint32 curXP = m_unitData->PetExperience;
uint32 newXP = curXP + xp;
// Check how much XP the pet should receive, and hand off have any left from previous levelups
@@ -704,10 +705,10 @@ void Pet::GivePetXP(uint32 xp)
GivePetLevel(petlevel);
- nextLvlXP = GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP);
+ nextLvlXP = m_unitData->PetNextLevelExperience;
}
// Not affected by special conditions - give it new XP
- SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, petlevel < maxlevel ? newXP : 0);
+ SetPetExperience(petlevel < maxlevel ? newXP : 0);
}
void Pet::GivePetLevel(uint8 level)
@@ -717,8 +718,8 @@ void Pet::GivePetLevel(uint8 level)
if (getPetType() == HUNTER_PET)
{
- SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
- SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(level)*PET_XP_FACTOR));
+ SetPetExperience(0);
+ SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(level)*PET_XP_FACTOR));
}
InitStatsForLevel(level);
@@ -777,18 +778,19 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map)
if (!Create(map->GenerateLowGuid<HighGuid::Pet>(), map, cinfo->Entry))
return false;
- SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0);
- SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
- SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(getLevel()+1)*PET_XP_FACTOR));
- SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ SetPetNameTimestamp(0);
+ SetPetExperience(0);
+ SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(getLevel() + 1) * PET_XP_FACTOR));
+ SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
if (cinfo->type == CREATURE_TYPE_BEAST)
{
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE);
- SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, POWER_FOCUS);
+ SetClass(CLASS_WARRIOR);
+ SetGender(GENDER_NONE);
+ SetPowerType(POWER_FOCUS);
SetSheath(SHEATH_STATE_MELEE);
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED);
+ SetPetFlags(UnitPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED | UNIT_PET_FLAG_CAN_BE_ABANDONED));
}
return true;
@@ -834,9 +836,6 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
SetBaseAttackTime(OFF_ATTACK, BASE_ATTACK_TIME);
SetBaseAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME);
- SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
- SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f);
-
//scale
CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(cinfo->family);
if (cFamily && cFamily->MinScale > 0.0f && petType == HUNTER_PET)
@@ -901,8 +900,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
case SUMMON_PET:
{
// the damage bonus used for pets is either fire or shadow damage, whatever is higher
- int32 fire = GetOwner()->GetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE);
- int32 shadow = GetOwner()->GetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW);
+ int32 fire = GetOwner()->ToPlayer()->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE];
+ int32 shadow = GetOwner()->ToPlayer()->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW];
int32 val = (fire > shadow) ? fire : shadow;
if (val < 0)
val = 0;
@@ -917,7 +916,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
}
case HUNTER_PET:
{
- SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR));
+ ToPet()->SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR));
//these formula may not be correct; however, it is designed to be close to what it should be
//this makes dps 0.5 of pets level
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
@@ -1670,7 +1669,7 @@ bool Pet::Create(ObjectGuid::LowType guidlow, Map* map, uint32 Entry)
return false;
// Force regen flag for player pets, just like we do for players themselves
- SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
+ AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER);
SetSheath(SHEATH_STATE_MELEE);
return true;
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index 9aa18c2cf0e..a618a26362c 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -85,6 +85,8 @@ class TC_GAME_API Pet : public Guardian
void GivePetXP(uint32 xp);
void GivePetLevel(uint8 level);
+ void SetPetExperience(uint32 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetExperience), xp); }
+ void SetPetNextLevelExperience(uint32 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNextLevelExperience), xp); }
void SynchronizeLevelWithOwner();
bool HaveInDiet(ItemTemplate const* item) const;
uint32 GetCurrentFoodBenefitLevel(uint32 itemlevel) const;
diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp
index 8ec7d65551b..f043797c09a 100644
--- a/src/server/game/Entities/Player/CollectionMgr.cpp
+++ b/src/server/game/Entities/Player/CollectionMgr.cpp
@@ -96,14 +96,14 @@ CollectionMgr::~CollectionMgr()
void CollectionMgr::LoadToys()
{
for (auto const& t : _toys)
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, t.first);
+ _owner->GetPlayer()->AddToy(t.first, t.second.AsUnderlyingType());
}
bool CollectionMgr::AddToy(uint32 itemId, bool isFavourite, bool hasFanfare)
{
if (UpdateAccountToys(itemId, isFavourite, hasFanfare))
{
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, itemId);
+ _owner->GetPlayer()->AddToy(itemId, GetToyFlags(isFavourite, hasFanfare).AsUnderlyingType());
return true;
}
@@ -119,7 +119,7 @@ void CollectionMgr::LoadAccountToys(PreparedQueryResult result)
{
Field* fields = result->Fetch();
uint32 itemId = fields[0].GetUInt32();
- _toys[itemId] = GetToyFlags(fields[1].GetBool(), fields[2].GetBool());
+ _toys.emplace(itemId, GetToyFlags(fields[1].GetBool(), fields[2].GetBool()));
} while (result->NextRow());
}
@@ -229,19 +229,13 @@ uint32 CollectionMgr::GetHeirloomBonus(uint32 itemId) const
void CollectionMgr::LoadHeirlooms()
{
for (auto const& item : _heirlooms)
- {
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, item.first);
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, item.second.flags);
- }
+ _owner->GetPlayer()->AddHeirloom(item.first, item.second.flags);
}
void CollectionMgr::AddHeirloom(uint32 itemId, uint32 flags)
{
if (UpdateAccountHeirlooms(itemId, flags))
- {
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, itemId);
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, flags);
- }
+ _owner->GetPlayer()->AddHeirloom(itemId, flags);
}
void CollectionMgr::UpgradeHeirloom(uint32 itemId, int32 castItem)
@@ -281,10 +275,10 @@ void CollectionMgr::UpgradeHeirloom(uint32 itemId, int32 castItem)
item->AddBonuses(bonusId);
// Get heirloom offset to update only one part of dynamic field
- std::vector<uint32> const& fields = player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS);
- uint16 offset = uint16(std::find(fields.begin(), fields.end(), itemId) - fields.begin());
+ auto const& heirlooms = player->m_activePlayerData->Heirlooms;
+ uint32 offset = uint32(std::distance(heirlooms.begin(), std::find(heirlooms.begin(), heirlooms.end(), itemId)));
- player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, flags);
+ player->SetHeirloomFlags(offset, flags);
itr->second.flags = flags;
itr->second.bonusId = bonusId;
}
@@ -321,11 +315,11 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item)
if (newItemId)
{
- std::vector<uint32> const& fields = player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS);
- uint16 offset = uint16(std::find(fields.begin(), fields.end(), itr->first) - fields.begin());
+ auto const& heirlooms = player->m_activePlayerData->Heirlooms;
+ uint32 offset = uint32(std::distance(heirlooms.begin(), std::find(heirlooms.begin(), heirlooms.end(), itr->first)));
- player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, offset, newItemId);
- player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, 0);
+ player->SetHeirloom(offset, newItemId);
+ player->SetHeirloomFlags(offset, 0);
_heirlooms.erase(itr);
_heirlooms[newItemId] = 0;
@@ -333,13 +327,18 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item)
return;
}
- std::vector<uint32> const& fields = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
+ auto const& bonusListIDs = item->m_itemData->BonusListIDs;
- for (uint32 bonusId : fields)
+ for (uint32 bonusId : *bonusListIDs)
+ {
if (bonusId != itr->second.bonusId)
- item->ClearDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
+ {
+ item->ClearBonuses();
+ break;
+ }
+ }
- if (std::find(fields.begin(), fields.end(), itr->second.bonusId) == fields.end())
+ if (std::find(bonusListIDs->begin(), bonusListIDs->end(), itr->second.bonusId) == bonusListIDs->end())
item->AddBonuses(itr->second.bonusId);
}
}
@@ -484,13 +483,14 @@ private:
void CollectionMgr::LoadItemAppearances()
{
- boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([this](uint32 blockValue)
+ Player* owner = _owner->GetPlayer();
+ boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
{
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockValue);
+ owner->AddTransmogBlock(blockValue);
}));
for (auto itr = _temporaryAppearances.begin(); itr != _temporaryAppearances.end(); ++itr)
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itr->first);
+ owner->AddConditionalTransmog(itr->first);
}
void CollectionMgr::LoadAccountItemAppearances(PreparedQueryResult knownAppearances, PreparedQueryResult favoriteAppearances)
@@ -611,7 +611,7 @@ void CollectionMgr::AddItemAppearance(Item* item)
if (!CanAddAppearance(itemModifiedAppearance))
return;
- if (item->GetUInt32Value(ITEM_FIELD_FLAGS) & (ITEM_FIELD_FLAG_BOP_TRADEABLE | ITEM_FIELD_FLAG_REFUNDABLE))
+ if (item->HasItemFlag(ItemFieldFlags(ITEM_FIELD_FLAG_BOP_TRADEABLE | ITEM_FIELD_FLAG_REFUNDABLE)))
{
AddTemporaryAppearance(item->GetGUID(), itemModifiedAppearance);
return;
@@ -758,24 +758,24 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi
void CollectionMgr::AddItemAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance)
{
+ Player* owner = _owner->GetPlayer();
if (_appearances->size() <= itemModifiedAppearance->ID)
{
std::size_t numBlocks = _appearances->num_blocks();
_appearances->resize(itemModifiedAppearance->ID + 1);
numBlocks = _appearances->num_blocks() - numBlocks;
while (numBlocks--)
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, 0);
+ owner->AddTransmogBlock(0);
}
_appearances->set(itemModifiedAppearance->ID);
uint32 blockIndex = itemModifiedAppearance->ID / 32;
uint32 bitIndex = itemModifiedAppearance->ID % 32;
- uint32 currentMask = _owner->GetPlayer()->GetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex);
- _owner->GetPlayer()->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex, currentMask | (1 << bitIndex));
+ owner->AddTransmogFlag(blockIndex, 1 << bitIndex);
auto temporaryAppearance = _temporaryAppearances.find(itemModifiedAppearance->ID);
if (temporaryAppearance != _temporaryAppearances.end())
{
- _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID);
+ owner->RemoveConditionalTransmog(itemModifiedAppearance->ID);
_temporaryAppearances.erase(temporaryAppearance);
}
@@ -796,7 +796,7 @@ void CollectionMgr::AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModif
{
std::unordered_set<ObjectGuid>& itemsWithAppearance = _temporaryAppearances[itemModifiedAppearance->ID];
if (itemsWithAppearance.empty())
- _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID);
+ _owner->GetPlayer()->AddConditionalTransmog(itemModifiedAppearance->ID);
itemsWithAppearance.insert(itemGuid);
}
@@ -814,7 +814,7 @@ void CollectionMgr::RemoveTemporaryAppearance(Item* item)
itr->second.erase(item->GetGUID());
if (itr->second.empty())
{
- _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID);
+ _owner->GetPlayer()->RemoveConditionalTransmog(itemModifiedAppearance->ID);
_temporaryAppearances.erase(itr);
}
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3e92e1f2a5c..f8ae831faa9 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -110,7 +110,6 @@
#include "TransmogrificationPackets.h"
#include "Transport.h"
#include "UpdateData.h"
-#include "UpdateFieldFlags.h"
#include "Util.h"
#include "Vehicle.h"
#include "VehiclePackets.h"
@@ -140,9 +139,6 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_objectType |= TYPEMASK_PLAYER;
m_objectTypeId = TYPEID_PLAYER;
- m_valuesCount = ACTIVE_PLAYER_END;
- _dynamicValuesCount = ACTIVE_PLAYER_DYNAMIC_END;
-
m_session = session;
m_ingametime = 0;
@@ -236,7 +232,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_titanGripPenaltySpellId = 0;
m_temporaryUnsummonedPetNumber = 0;
- //cache for UNIT_CREATED_BY_SPELL to allow
+ //cache for CreatedBySpell to allow
//returning reagents for temporarily removed pets
//when dying/logging out
m_oldpetspell = 0;
@@ -455,47 +451,34 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
return false;
}
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, createInfo->Race);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, createInfo->Class);
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, createInfo->Sex);
- SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powertype);
+ SetRace(createInfo->Race);
+ SetClass(createInfo->Class);
+ SetGender(createInfo->Sex);
+ SetPowerType(Powers(powertype));
InitDisplayIds();
if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP)
{
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP);
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ AddPvpFlag(UNIT_BYTE2_FLAG_PVP);
+ AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
}
- SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
- SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); // default for players in 3.0.3
+ AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER);
+ SetHoverHeight(1.0f); // default for players in 3.0.3
- SetInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); // -1 is default value
+ SetWatchedFactionIndex(-1);
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, createInfo->Skin);
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, createInfo->Face);
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, createInfo->HairStyle);
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, createInfo->HairColor);
- SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, createInfo->FacialHairStyle);
+ SetSkinId(createInfo->Skin);
+ SetFaceId(createInfo->Face);
+ SetHairStyleId(createInfo->HairStyle);
+ SetHairColorId(createInfo->HairColor);
+ SetFacialHairStyleId(createInfo->FacialHairStyle);
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
- SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, createInfo->CustomDisplay[i]);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED);
- SetUInt32Value(ACTIVE_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);
+ SetCustomDisplayOption(i, createInfo->CustomDisplay[i]);
+ SetRestState(REST_TYPE_XP, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED);
+ SetRestState(REST_TYPE_HONOR, REST_STATE_NOT_RAF_LINKED);
+ SetNativeSex(createInfo->Sex);
SetInventorySlotCount(INVENTORY_DEFAULT_SIZE);
- SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Empty);
- SetUInt32Value(PLAYER_GUILDRANK, 0);
- SetGuildLevel(0);
- SetUInt32Value(PLAYER_GUILD_TIMESTAMP, 0);
-
- for (int i = 0; i < KNOWN_TITLES_SIZE; ++i)
- SetUInt64Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i, 0); // 0=disabled
- SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);
-
- SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0);
-
// set starting level
uint32 start_level = sWorld->getIntConfig(CONFIG_START_PLAYER_LEVEL);
if (getClass() == CLASS_DEATH_KNIGHT)
@@ -524,19 +507,19 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
start_level = gm_level;
}
- SetUInt32Value(UNIT_FIELD_LEVEL, start_level);
+ SetLevel(start_level);
InitRunes();
- SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY));
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Coinage), sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY));
SetCurrency(CURRENCY_TYPE_APEXIS_CRYSTALS, sWorld->getIntConfig(CONFIG_CURRENCY_START_APEXIS_CRYSTALS));
SetCurrency(CURRENCY_TYPE_JUSTICE_POINTS, sWorld->getIntConfig(CONFIG_CURRENCY_START_JUSTICE_POINTS));
// start with every map explored
if (sWorld->getBoolConfig(CONFIG_START_ALL_EXPLORED))
{
- for (uint16 i=0; i<PLAYER_EXPLORED_ZONES_SIZE; i++)
- SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+i, 0xFFFFFFFF);
+ for (uint16 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i), UI64LIT(0xFFFFFFFFFFFFFFFF));
}
//Reputations if "StartAllReputation" is enabled, -- @todo Fix this in a better way
@@ -919,7 +902,7 @@ void Player::HandleDrowning(uint32 time_diff)
uint32 damage = GetMaxHealth() / 5 + urand(0, getLevel()-1);
EnvironmentalDamage(DAMAGE_EXHAUSTED, damage);
}
- else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) // Teleport ghost to graveyard
+ else if (HasPlayerFlag(PLAYER_FLAGS_GHOST)) // Teleport ghost to graveyard
RepopAtGraveyard();
}
else if (!(m_MirrorTimerFlagsLast & UNDERWARER_INDARKWATER))
@@ -1012,7 +995,7 @@ void Player::SetDrunkValue(uint8 newDrunkValue, uint32 itemId /*= 0*/)
m_invisibilityDetect.DelFlag(INVISIBILITY_DRUNK);
uint32 newDrunkenState = Player::GetDrunkenstateByValue(newDrunkValue);
- SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, newDrunkValue);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), newDrunkValue);
UpdateObjectVisibility();
if (!isSobering)
@@ -1211,7 +1194,7 @@ void Player::Update(uint32 p_time)
}
}
- if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING))
+ if (HasPlayerFlag(PLAYER_FLAGS_RESTING))
_restMgr->Update(now);
if (m_weaponChangeTimer > 0)
@@ -1404,12 +1387,15 @@ void Player::setDeathState(DeathState s)
if (IsAlive() && !oldIsAlive)
//clear aura case after resurrection by another way (spells will be applied before next death)
- ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
+ ClearSelfResSpell();
}
void Player::ToggleAFK()
{
- ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK);
+ if (isAFK())
+ RemovePlayerFlag(PLAYER_FLAGS_AFK);
+ else
+ AddPlayerFlag(PLAYER_FLAGS_AFK);
// afk player not allowed in battleground
if (!IsGameMaster() && isAFK() && InBattleground() && !InArena())
@@ -1418,7 +1404,10 @@ void Player::ToggleAFK()
void Player::ToggleDND()
{
- ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND);
+ if (isDND())
+ RemovePlayerFlag(PLAYER_FLAGS_DND);
+ else
+ AddPlayerFlag(PLAYER_FLAGS_DND);
}
uint8 Player::GetChatFlags() const
@@ -1431,7 +1420,7 @@ uint8 Player::GetChatFlags() const
tag |= CHAT_FLAG_DND;
if (isAFK())
tag |= CHAT_FLAG_AFK;
- if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER))
+ if (HasPlayerFlag(PLAYER_FLAGS_DEVELOPER))
tag |= CHAT_FLAG_DEV;
return tag;
@@ -1499,7 +1488,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
// The player was ported to another map and loses the duel immediately.
// We have to perform this check before the teleport, otherwise the
// ObjectAccessor won't find the flag.
- if (duel && GetMapId() != mapid && GetMap()->GetGameObject(GetGuidValue(PLAYER_DUEL_ARBITER)))
+ if (duel && GetMapId() != mapid && GetMap()->GetGameObject(m_playerData->DuelArbiter))
DuelComplete(DUEL_FLED);
if (GetMapId() == mapid)
@@ -1769,22 +1758,19 @@ void Player::RemoveFromWorld()
for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter)
iter->second->RemoveFromWorld();
- if (m_uint32Values)
+ if (WorldObject* viewpoint = GetViewpoint())
{
- if (WorldObject* viewpoint = GetViewpoint())
- {
- TC_LOG_ERROR("entities.player", "Player::RemoveFromWorld: Player '%s' (%s) has viewpoint (Entry:%u, Type: %u) when removed from world",
- GetName().c_str(), GetGUID().ToString().c_str(), viewpoint->GetEntry(), viewpoint->GetTypeId());
- SetViewpoint(viewpoint, false);
- }
+ TC_LOG_ERROR("entities.player", "Player::RemoveFromWorld: Player '%s' (%s) has viewpoint (Entry:%u, Type: %u) when removed from world",
+ GetName().c_str(), GetGUID().ToString().c_str(), viewpoint->GetEntry(), viewpoint->GetTypeId());
+ SetViewpoint(viewpoint, false);
}
}
void Player::SetObjectScale(float scale)
{
Unit::SetObjectScale(scale);
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, scale * DEFAULT_WORLD_OBJECT_SIZE);
- SetFloatValue(UNIT_FIELD_COMBATREACH, scale * DEFAULT_COMBAT_REACH);
+ SetBoundingRadius(scale * DEFAULT_WORLD_OBJECT_SIZE);
+ SetCombatReach(scale * DEFAULT_COMBAT_REACH);
if (IsInWorld())
SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted()));
}
@@ -1858,7 +1844,7 @@ void Player::Regenerate(Powers power)
int32 curValue = GetPower(power);
- // TODO: updating haste should update UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER for certain power types
+ // TODO: updating haste should update UnitData::PowerRegenFlatModifier for certain power types
PowerTypeEntry const* powerType = sDB2Manager.GetPowerTypeEntry(power);
if (!powerType)
return;
@@ -1869,10 +1855,10 @@ void Player::Regenerate(Powers power)
if (powerType->RegenInterruptTimeMS && GetMSTimeDiffToNow(m_combatExitTime) < uint32(powerType->RegenInterruptTimeMS))
return;
- addvalue = (powerType->RegenPeace + GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer;
+ addvalue = (powerType->RegenPeace + m_unitData->PowerRegenFlatModifier[powerIndex]) * 0.001f * m_regenTimer;
}
else
- addvalue = (powerType->RegenCombat + GetFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer;
+ addvalue = (powerType->RegenCombat + m_unitData->PowerRegenInterruptedFlatModifier[powerIndex]) * 0.001f * m_regenTimer;
static Rates const RatesForPower[MAX_POWERS] =
{
@@ -1973,7 +1959,11 @@ void Player::Regenerate(Powers power)
if (m_regenTimerCount >= 2000)
SetPower(power, curValue);
else
- UpdateUInt32Value(UNIT_FIELD_POWER + powerIndex, curValue);
+ {
+ // throttle packet sending
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, powerIndex), curValue);
+ const_cast<UF::UnitData&>(*m_unitData).ClearChanged(&UF::UnitData::Power, powerIndex);
+ }
}
void Player::RegenerateHealth()
@@ -2054,7 +2044,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver) const
switch (questGiver->GetTypeId())
{
case TYPEID_UNIT:
- return GetNPCIfCanInteractWith(questGiver->GetGUID(), UNIT_NPC_FLAG_QUESTGIVER) != nullptr;
+ return GetNPCIfCanInteractWith(questGiver->GetGUID(), UNIT_NPC_FLAG_QUESTGIVER, UNIT_NPC_FLAG_2_NONE) != nullptr;
case TYPEID_GAMEOBJECT:
return GetGameObjectIfCanInteractWith(questGiver->GetGUID(), GAMEOBJECT_TYPE_QUESTGIVER) != nullptr;
case TYPEID_PLAYER:
@@ -2067,7 +2057,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver) const
return false;
}
-Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflagmask) const
+Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const
{
// unit checks
if (!guid)
@@ -2093,7 +2083,17 @@ Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflag
return nullptr;
// appropriate npc type
- if (npcflagmask && !creature->HasFlag64(UNIT_NPC_FLAGS, npcflagmask))
+ auto hasNpcFlags = [&]()
+ {
+ if (!npcFlags && !npcFlags2)
+ return true;
+ if (creature->HasNpcFlag(npcFlags))
+ return true;
+ if (creature->HasNpcFlag2(npcFlags2))
+ return true;
+ return false;
+ };
+ if (!hasNpcFlags())
return nullptr;
// not allow interaction under control, but allow with own pets
@@ -2201,8 +2201,8 @@ void Player::SetGameMaster(bool on)
{
m_ExtraFlags |= PLAYER_EXTRA_GM_ON;
setFaction(35);
- SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM);
- SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
+ AddPlayerFlag(PLAYER_FLAGS_GM);
+ AddUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
if (Pet* pet = GetPet())
{
@@ -2210,7 +2210,7 @@ void Player::SetGameMaster(bool on)
pet->getHostileRefManager().setOnlineOfflineState(false);
}
- RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
ResetContestedPvP();
getHostileRefManager().setOnlineOfflineState(false);
@@ -2225,8 +2225,8 @@ void Player::SetGameMaster(bool on)
m_ExtraFlags &= ~ PLAYER_EXTRA_GM_ON;
setFactionForRace(getRace());
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM);
- RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
+ RemovePlayerFlag(PLAYER_FLAGS_GM);
+ RemoveUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
if (Pet* pet = GetPet())
{
@@ -2236,7 +2236,7 @@ void Player::SetGameMaster(bool on)
// restore FFA PvP Server state
if (sWorld->IsFFAPvPRealm())
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
// restore FFA PvP area state, remove not allowed for GM mounts
UpdateArea(m_areaUpdateId);
@@ -2331,15 +2331,15 @@ void Player::RemoveFromGroup(Group* group, ObjectGuid guid, RemoveMethod method
void Player::SetXP(uint32 xp)
{
- SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, xp);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::XP), xp);
int32 playerLevelDelta = 0;
// If XP < 50%, player should see scaling creature with -1 level except for level max
- if (getLevel() < MAX_LEVEL && xp < (GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP) / 2))
+ if (getLevel() < MAX_LEVEL && xp < uint32(*m_activePlayerData->NextLevelXP / 2))
playerLevelDelta = -1;
- SetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA, playerLevelDelta);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ScalingPlayerLevelDelta), playerLevelDelta);
}
void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
@@ -2350,7 +2350,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
if (!IsAlive() && !GetBattlegroundId())
return;
- if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN))
+ if (HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN))
return;
if (victim && victim->GetTypeId() == TYPEID_UNIT && !victim->ToCreature()->hasLootRecipient())
@@ -2382,8 +2382,8 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
packet.ReferAFriendBonusType = recruitAFriend ? 1 : 0;
GetSession()->SendPacket(packet.Write());
- uint32 curXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_XP);
- uint32 nextLvlXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP);
+ uint32 curXP = m_activePlayerData->XP;
+ uint32 nextLvlXP = m_activePlayerData->NextLevelXP;
uint32 newXP = curXP + xp + bonus_xp;
while (newXP >= nextLvlXP && level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
@@ -2394,7 +2394,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
GiveLevel(level + 1);
level = getLevel();
- nextLvlXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP);
+ nextLvlXP = m_activePlayerData->NextLevelXP;
}
SetXP(newXP);
@@ -2438,7 +2438,7 @@ void Player::GiveLevel(uint8 level)
GetSession()->SendPacket(packet.Write());
- SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level));
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NextLevelXP), sObjectMgr->GetXPForLevel(level));
//update level, max level of skills
m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset
@@ -2502,8 +2502,7 @@ void Player::GiveLevel(uint8 level)
{
++m_grantableLevels;
- if (!HasByteFlag(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01))
- SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::GrantableLevels), 1);
}
}
}
@@ -2518,7 +2517,7 @@ void Player::InitTalentForLevel()
if (level < MIN_SPECIALIZATION_LEVEL)
ResetTalentSpecialization();
- uint32 talentTiers = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass()));
+ int32 talentTiers = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass()));
if (level < 15)
{
// Remove all talent points
@@ -2527,13 +2526,13 @@ void Player::InitTalentForLevel()
else
{
if (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED))
- for (uint32 t = talentTiers; t < MAX_TALENT_TIERS; ++t)
+ for (int32 t = talentTiers; t < MAX_TALENT_TIERS; ++t)
for (uint32 c = 0; c < MAX_TALENT_COLUMNS; ++c)
for (TalentEntry const* talent : sDB2Manager.GetTalentsByPosition(getClass(), t, c))
RemoveTalent(talent);
}
- SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS, talentTiers);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxTalentTiers), talentTiers);
if (!GetSession()->PlayerLoading())
SendTalentsInfoData(); // update at client
@@ -2550,21 +2549,21 @@ void Player::InitStatsForLevel(bool reapplyMods)
PlayerLevelInfo info;
sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), getLevel(), &info);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_LEVEL, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
- SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(getLevel()));
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxLevel), sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NextLevelXP), sObjectMgr->GetXPForLevel(getLevel()));
// reset before any aura state sources (health set/aura apply)
- SetUInt32Value(UNIT_FIELD_AURASTATE, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), 0);
UpdateSkillsForLevel();
// set default cast time multiplier
- SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
- SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, 1.0f);
- SetFloatValue(UNIT_FIELD_MOD_TIME_RATE, 1.0f);
+ SetModCastingSpeed(1.0f);
+ SetModSpellHaste(1.0f);
+ SetModHaste(1.0f);
+ SetModRangedHaste(1.0f);
+ SetModHasteRegen(1.0f);
+ SetModTimeRate(1.0f);
// reset size before reapply auras
SetObjectScale(1.0f);
@@ -2587,61 +2586,61 @@ void Player::InitStatsForLevel(bool reapplyMods)
//reset rating fields values
for (uint16 index = 0; index < MAX_COMBAT_RATING; ++index)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + index, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, index), 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, 0);
- SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT, 1.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT, 1.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT, 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingPercent), 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent), 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModPeriodicHealingDonePercent), 1.0f);
for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
{
- SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, 0);
- SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, 0);
- SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, 1.00f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, i), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, i), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, i), 1.0f);
}
- SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT, 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModSpellPowerPercent), 1.0f);
//reset attack power, damage and attack speed fields
for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
- SetFloatValue(UNIT_FIELD_BASEATTACKTIME + i, float(BASE_ATTACK_TIME));
-
- SetFloatValue(UNIT_FIELD_MINDAMAGE, 0.0f);
- SetFloatValue(UNIT_FIELD_MAXDAMAGE, 0.0f);
- SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, 0.0f);
- SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, 0.0f);
- SetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE, 0.0f);
- SetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, 0.0f);
+ SetBaseAttackTime(WeaponAttackType(i), BASE_ATTACK_TIME);
+
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinOffHandDamage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxOffHandDamage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinRangedDamage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxRangedDamage), 0.0f);
for (uint16 i = 0; i < 3; ++i)
{
- SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + i, 1.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS + i, 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WeaponDmgMultipliers, i), 1.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WeaponAtkSpeedMultipliers, i), 1.0f);
}
- SetInt32Value(UNIT_FIELD_ATTACK_POWER, 0);
- SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, 0.0f);
- SetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER, 0);
- SetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, 0.0f);
+ SetAttackPower(0);
+ SetAttackPowerMultiplier(0.0f);
+ SetRangedAttackPower(0);
+ SetRangedAttackPowerMultiplier(0.0f);
// Base crit values (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset
- SetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE, 0.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE, 0.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CritPercentage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandCritPercentage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RangedCritPercentage), 0.0f);
// Init spell schools (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset
- SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), 0.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, 0.0f);
- SetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BlockPercentage), 0.0f);
// Static 30% damage blocked
- SetUInt32Value(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK, 30);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ShieldBlock), 30);
// Dodge percentage
- SetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DodgePercentage), 0.0f);
// set armor (resistance 0) to original value (create_agility*2)
- SetArmor(int32(m_createStats[STAT_AGILITY]*2), 0);
+ SetArmor(int32(m_createStats[STAT_AGILITY] * 2), 0);
SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, 0);
// set other resistance to original value (0)
for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
@@ -2650,16 +2649,17 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetBonusResistanceMod(SpellSchools(i), 0);
}
- SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), 0);
for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
{
- SetUInt32Value(UNIT_FIELD_POWER_COST_MODIFIER + i, 0);
- SetFloatValue(UNIT_FIELD_POWER_COST_MULTIPLIER + i, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostModifier, i), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostMultiplier, i), 0.0f);
}
+
// Reset no reagent cost field
- for (uint8 i = 0; i < 4; ++i)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + i, 0);
+ SetNoRegentCostMask(flag128());
+
// Init data for form but skip reapply item mods for form
InitDataForForm(reapplyMods);
@@ -2670,30 +2670,29 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetMaxHealth(0); // stamina bonus will applied later
// cleanup mounted state (it will set correctly at aura loading if player saved at mount.
- SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
+ SetMountDisplayId(0);
// cleanup unit flags (will be re-applied if need at aura load).
- RemoveFlag(UNIT_FIELD_FLAGS,
+ RemoveUnitFlag(UnitFlags(
UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_NOT_ATTACKABLE_1 |
UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_LOOTING |
UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_SILENCED | UNIT_FLAG_PACIFIED |
UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT | UNIT_FLAG_DISARMED |
UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_NOT_SELECTABLE |
- UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT );
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // must be set
+ UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT ));
+ AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); // must be set
- SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);// must be set
+ AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER);// must be set
// cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example.
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_ALLOW_ONLY_ABILITY);
+ RemovePlayerFlag(PlayerFlags(PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_ALLOW_ONLY_ABILITY));
- RemoveStandFlags(UNIT_STAND_FLAGS_ALL); // one form stealth modified bytes
- RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY);
+ RemoveVisFlags(UNIT_VIS_FLAGS_ALL); // one form stealth modified bytes
+ RemovePvpFlag(UnitPVPStateFlags(UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY));
// restore if need some important flags
- SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK, 0);
- SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, 0);
- SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, 3, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalRegenFlags), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), 0);
if (reapplyMods) // reapply stats values only on .reset stats (level) command
_ApplyAllStatBonuses();
@@ -3237,7 +3236,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const
bool Player::IsCurrentSpecMasterySpell(SpellInfo const* spellInfo) const
{
- if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)))
+ if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization()))
return spellInfo->Id == uint32(chrSpec->MasterySpellID[0]) || spellInfo->Id == uint32(chrSpec->MasterySpellID[1]);
return false;
@@ -3634,6 +3633,73 @@ void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
Unit::BuildCreateUpdateBlockForPlayer(data, target);
}
+UF::UpdateFieldFlag Player::GetUpdateFieldFlagsFor(Player const* target) const
+{
+ EnumClassFlag<UF::UpdateFieldFlag> flags = Unit::GetUpdateFieldFlagsFor(target);
+ if (IsInSameRaidWith(target))
+ flags |= UF::UpdateFieldFlag::PartyMember;
+
+ return flags;
+}
+
+void Player::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_unitData->WriteCreate(*data, flags, this, target);
+ m_playerData->WriteCreate(*data, flags, this, target);
+ if (target == this)
+ m_activePlayerData->WriteCreate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Player::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask() & ~(uint32(target != this) << TYPEID_ACTIVE_PLAYER));
+
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_UNIT))
+ m_unitData->WriteUpdate(*data, flags, this, target);
+
+ if (m_values.HasChanged(TYPEID_PLAYER))
+ m_playerData->WriteUpdate(*data, flags, this, target);
+
+ if (target == this && m_values.HasChanged(TYPEID_ACTIVE_PLAYER))
+ m_activePlayerData->WriteUpdate(*data, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
+void Player::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
+{
+ UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
+ valuesMask.Set(TYPEID_UNIT);
+ valuesMask.Set(TYPEID_PLAYER);
+
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(valuesMask.GetBlock(0));
+
+ UF::UnitData::Mask mask;
+ m_unitData->AppendAllowedFieldsMaskForFlag(mask, flags);
+ m_unitData->WriteUpdate(*data, mask, flags, this, target);
+
+ UF::PlayerData::Mask mask2;
+ m_playerData->AppendAllowedFieldsMaskForFlag(mask2, flags);
+ m_playerData->WriteUpdate(*data, mask2, flags, this, target);
+
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
+
void Player::DestroyForPlayer(Player* target) const
{
Unit::DestroyForPlayer(target);
@@ -3674,6 +3740,13 @@ void Player::DestroyForPlayer(Player* target) const
}
}
+void Player::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Player::m_playerData);
+ m_values.ClearChangesMask(&Player::m_activePlayerData);
+ Unit::ClearUpdateMask(remove);
+}
+
bool Player::HasSpell(uint32 spell) const
{
PlayerSpellMap::const_iterator itr = m_spells.find(spell);
@@ -4196,7 +4269,7 @@ void Player::BuildPlayerRepop()
SetRooted(false);
// BG - remove insignia related
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ RemoveUnitFlag(UNIT_FLAG_SKINNABLE);
int32 corpseReclaimDelay = CalculateCorpseReclaimDelay();
@@ -4209,7 +4282,7 @@ void Player::BuildPlayerRepop()
StopMirrorTimers(); //disable timers(bars)
// set and clear other
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, false);
}
void Player::ResurrectPlayer(float restore_percent, bool applySickness)
@@ -4221,15 +4294,15 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
// speed change, land walk
// remove death flag + set aura
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, 0);
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
+ SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
+ RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
// This must be called always even on Players with race != RACE_NIGHTELF in case of faction change
RemoveAurasDueToSpell(20584); // RACE_NIGHTELF speed bonuses
RemoveAurasDueToSpell(8326); // SPELL_AURA_GHOST
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
- SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND);
+ AddDynamicFlag(UNIT_DYNFLAG_REFER_A_FRIEND);
setDeathState(ALIVE);
@@ -4309,8 +4382,11 @@ void Player::KillPlayer()
setDeathState(CORPSE);
//SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_IN_PVP);
- SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
- ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION));
+ SetDynamicFlags(UNIT_DYNFLAG_NONE);
+ if (!sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
+ AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
+ else
+ RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
// 6 minutes until repop at graveyard
m_deathTimer = 6 * MINUTE * IN_MILLISECONDS;
@@ -4342,8 +4418,6 @@ Corpse* Player::CreateCorpse()
// prevent the existence of 2 corpses for one player
SpawnCorpseBones();
- uint32 _cfb1, _cfb2;
-
Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE);
SetPvPDeath(false);
@@ -4355,29 +4429,24 @@ Corpse* Player::CreateCorpse()
_corpseLocation.WorldRelocate(*this);
- uint8 skin = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
- uint8 face = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID);
- uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID);
- uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
- uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE);
-
- _cfb1 = ((0x00) | (getRace() << 8) | (GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) << 16) | (skin << 24));
- _cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24));
-
- corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1);
- corpse->SetUInt32Value(CORPSE_FIELD_BYTES_2, _cfb2);
-
uint32 flags = 0;
- if (HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP))
+ if (*m_unitData->PvpFlags & UNIT_BYTE2_FLAG_PVP)
flags |= CORPSE_FLAG_PVP;
if (InBattleground() && !InArena())
flags |= CORPSE_FLAG_SKINNABLE; // to be able to remove insignia
- if (HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP))
+ if (*m_unitData->PvpFlags & UNIT_BYTE2_FLAG_FFA_PVP)
flags |= CORPSE_FLAG_FFA_PVP;
- corpse->SetUInt32Value(CORPSE_FIELD_FLAGS, flags);
- corpse->SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, GetNativeDisplayId());
- corpse->SetUInt32Value(CORPSE_FIELD_FACTIONTEMPLATE, sChrRacesStore.AssertEntry(getRace())->FactionID);
+ corpse->SetRace(getRace());
+ corpse->SetSex(m_playerData->NativeSex);
+ corpse->SetSkin(m_playerData->SkinID);
+ corpse->SetFace(m_playerData->FaceID);
+ corpse->SetHairStyle(m_playerData->HairStyleID);
+ corpse->SetHairColor(m_playerData->HairColorID);
+ corpse->SetFacialHairStyle(m_playerData->FacialHairStyleID);
+ corpse->SetFlags(flags);
+ corpse->SetDisplayId(GetNativeDisplayId());
+ corpse->SetFactionTemplate(sChrRacesStore.AssertEntry(getRace())->FactionID);
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; i++)
{
@@ -4390,7 +4459,7 @@ Corpse* Player::CreateCorpse()
else
itemInventoryType = m_items[i]->GetTemplate()->GetInventoryType();
- corpse->SetUInt32Value(CORPSE_FIELD_ITEM + i, itemDisplayId | (itemInventoryType << 24));
+ corpse->SetItem(i, itemDisplayId | (itemInventoryType << 24));
}
}
@@ -4446,7 +4515,7 @@ void Player::DurabilityLoss(Item* item, double percent)
if (!item)
return;
- uint32 pMaxDurability = item ->GetUInt32Value(ITEM_FIELD_MAXDURABILITY);
+ uint32 pMaxDurability = item->m_itemData->MaxDurability;
if (!pMaxDurability)
return;
@@ -4490,8 +4559,8 @@ void Player::DurabilityPointsLoss(Item* item, int32 points)
if (HasAuraType(SPELL_AURA_PREVENT_DURABILITY_LOSS))
return;
- int32 pMaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY);
- int32 pOldDurability = item->GetUInt32Value(ITEM_FIELD_DURABILITY);
+ int32 pMaxDurability = item->m_itemData->MaxDurability;
+ int32 pOldDurability = item->m_itemData->Durability;
int32 pNewDurability = pOldDurability - points;
if (pNewDurability < 0)
@@ -4505,7 +4574,7 @@ void Player::DurabilityPointsLoss(Item* item, int32 points)
if (pNewDurability == 0 && pOldDurability > 0 && item->IsEquipped())
_ApplyItemMods(item, item->GetSlot(), false);
- item->SetUInt32Value(ITEM_FIELD_DURABILITY, pNewDurability);
+ item->SetDurability(pNewDurability);
// modify item stats _after_ restore durability to pass _ApplyItemMods internal check
if (pNewDurability > 0 && pOldDurability == 0 && item->IsEquipped())
@@ -4549,11 +4618,11 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g
if (!item)
return TotalCost;
- uint32 maxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY);
+ uint32 maxDurability = item->m_itemData->MaxDurability;
if (!maxDurability)
return TotalCost;
- uint32 curDurability = item->GetUInt32Value(ITEM_FIELD_DURABILITY);
+ uint32 curDurability = item->m_itemData->Durability;
if (cost)
{
@@ -4621,7 +4690,7 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g
}
}
- item->SetUInt32Value(ITEM_FIELD_DURABILITY, maxDurability);
+ item->SetDurability(maxDurability);
item->SetState(ITEM_CHANGED, this);
// reapply mods for total broken and repaired item if equipped
@@ -4676,7 +4745,7 @@ void Player::RepopAtGraveyard()
else if (GetPositionZ() < GetMap()->GetMinHeight(GetPositionX(), GetPositionY()))
TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation());
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
+ RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
}
bool Player::CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone) const
@@ -5005,7 +5074,7 @@ float Player::GetRatingMultiplier(CombatRating cr) const
float Player::GetRatingBonusValue(CombatRating cr) const
{
- float baseResult = float(GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr)) * GetRatingMultiplier(cr);
+ float baseResult = float(m_activePlayerData->CombatRatings[cr]) * GetRatingMultiplier(cr);
if (cr != CR_RESILIENCE_PLAYER_DAMAGE)
return baseResult;
return float(1.0f - pow(0.99f, baseResult)) * 100.0f;
@@ -5017,9 +5086,9 @@ float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const
switch (attType)
{
case BASE_ATTACK:
- return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE) / 4.0f;
+ return baseExpertise + m_activePlayerData->MainhandExpertise / 4.0f;
case OFF_ATTACK:
- return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE) / 4.0f;
+ return baseExpertise + m_activePlayerData->OffhandExpertise / 4.0f;
default:
break;
}
@@ -5050,8 +5119,8 @@ void Player::UpdateRating(CombatRating cr)
if (amount < 0)
amount = 0;
- uint32 oldRating = GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr, uint32(amount));
+ uint32 oldRating = m_activePlayerData->CombatRatings[cr];
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, cr), amount);
bool affectStats = CanModifyStats();
@@ -5340,11 +5409,8 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
return false;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1; // itr->second.pos % 2
-
- uint16 value = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset);
- uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset);
+ uint16 value = m_activePlayerData->Skill->SkillRank[itr->second.pos];
+ uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos];
if (!max || !value || value >= max)
return false;
@@ -5360,7 +5426,7 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
if (new_value > max)
new_value = max;
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, new_value);
+ SetSkillRank(itr->second.pos, new_value);
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
@@ -5383,15 +5449,13 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
void Player::ModifySkillBonus(uint32 skillid, int32 val, bool talent)
{
SkillStatusMap::const_iterator itr = mSkillStatus.find(skillid);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return;
- uint16 field = itr->second.pos / 2 + (talent ? ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET : ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET);
- uint8 offset = itr->second.pos & 1; // itr->second.pos % 2
-
- uint16 bonus = GetUInt16Value(field, offset);
-
- SetUInt16Value(field, offset, bonus + val);
+ if (talent)
+ SetSkillPermBonus(itr->second.pos, m_activePlayerData->Skill->SkillPermBonus[itr->second.pos] + val);
+ else
+ SetSkillTempBonus(itr->second.pos, m_activePlayerData->Skill->SkillTempBonus[itr->second.pos] + val);
}
void Player::UpdateSkillsForLevel()
@@ -5400,7 +5464,7 @@ void Player::UpdateSkillsForLevel()
for (SkillStatusMap::iterator itr = mSkillStatus.begin(); itr != mSkillStatus.end(); ++itr)
{
- if (itr->second.uState == SKILL_DELETED)
+ if (itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
continue;
uint32 pskill = itr->first;
@@ -5408,20 +5472,17 @@ void Player::UpdateSkillsForLevel()
if (!rcEntry)
continue;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1; // itr->second.pos % 2
-
if (GetSkillRangeType(rcEntry) == SKILL_RANGE_LEVEL)
{
if (!IsWeaponSkill(rcEntry->SkillID))
{
- uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset);
+ uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos];
/// update only level dependent max skill values
if (max != 1)
{
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, maxSkill);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxSkill);
+ SetSkillRank(itr->second.pos, maxSkill);
+ SetSkillMaxRank(itr->second.pos, maxSkill);
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
}
@@ -5429,7 +5490,7 @@ void Player::UpdateSkillsForLevel()
}
// Update level dependent skillline spells
- LearnSkillRewardedSpells(rcEntry->SkillID, GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset));
+ LearnSkillRewardedSpells(rcEntry->SkillID, m_activePlayerData->Skill->SkillRank[itr->second.pos]);
}
}
@@ -5437,7 +5498,7 @@ void Player::UpdateSkillsToMaxSkillsForLevel()
{
for (SkillStatusMap::iterator itr = mSkillStatus.begin(); itr != mSkillStatus.end(); ++itr)
{
- if (itr->second.uState == SKILL_DELETED)
+ if (itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
continue;
uint32 pskill = itr->first;
@@ -5451,14 +5512,11 @@ void Player::UpdateSkillsToMaxSkillsForLevel()
if (IsWeaponSkill(rcEntry->SkillID))
continue;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1; // itr->second.pos % 2
-
- uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset);
+ uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos];
if (max > 1)
{
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, max);
+ SetSkillRank(itr->second.pos, max);
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
@@ -5466,6 +5524,22 @@ void Player::UpdateSkillsToMaxSkillsForLevel()
}
}
+void Player::InitializeSkillFields()
+{
+ uint32 i = 0;
+ for (SkillLineEntry const* skillLine : sSkillLineStore)
+ {
+ if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillLine->ID, getRace(), getClass()))
+ {
+ SetSkillLineId(i, skillLine->ID);
+ SetSkillStartingRank(i, 1);
+ mSkillStatus.insert(SkillStatusMap::value_type(skillLine->ID, SkillStatusData(i, SKILL_UNCHANGED)));
+ if (++i >= PLAYER_MAX_SKILLS)
+ break;
+ }
+ }
+}
+
// This functions sets a skill line value (and adds if doesn't exist yet)
// To "remove" a skill line, set it's values to zero
void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
@@ -5479,9 +5553,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
//has skill
if (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED)
{
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1; // itr->second.pos % 2
- currVal = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset);
+ currVal = m_activePlayerData->Skill->SkillRank[itr->second.pos];
if (newVal)
{
// if skill value is going down, update enchantments before setting the new value
@@ -5489,10 +5561,10 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
UpdateSkillEnchantments(id, currVal, newVal);
// update step
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step);
+ SetSkillStep(itr->second.pos, step);
// update value
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal);
+ SetSkillRank(itr->second.pos, newVal);
+ SetSkillMaxRank(itr->second.pos, maxVal);
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
@@ -5510,44 +5582,39 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
//remove enchantments needing this skill
UpdateSkillEnchantments(id, currVal, 0);
// clear skill fields
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0);
+ SetSkillStep(itr->second.pos, 0);
+ SetSkillRank(itr->second.pos, 0);
+ SetSkillStartingRank(itr->second.pos, 1);
+ SetSkillMaxRank(itr->second.pos, 0);
+ SetSkillTempBonus(itr->second.pos, 0);
+ SetSkillPermBonus(itr->second.pos, 0);
// mark as deleted or simply remove from map if not saved yet
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_DELETED;
- else
- mSkillStatus.erase(itr);
// remove all spells that related to this skill
if (std::vector<SkillLineAbilityEntry const*> const* skillLineAbilities = sDB2Manager.GetSkillLineAbilitiesBySkill(id))
for (SkillLineAbilityEntry const* skillLineAbility : *skillLineAbilities)
RemoveSpell(sSpellMgr->GetFirstSpellInChain(skillLineAbility->Spell));
- for (SkillLineEntry const* childSkillLine : sSkillLineStore)
- if (childSkillLine->ParentSkillLineID == id)
+ if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(id))
+ for (SkillLineEntry const* childSkillLine : *childSkillLines)
SetSkill(childSkillLine->ID, 0, 0, 0);
// Clear profession lines
- if (GetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE) == id)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE, 0);
- else if (GetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + 1) == id)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + 1, 0);
+ if (m_activePlayerData->ProfessionSkillLine[0] == id)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 0), 0);
+ else if (m_activePlayerData->ProfessionSkillLine[1] == id)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 1), 0);
}
}
- else if (newVal) //add
+ else //add
{
currVal = 0;
for (uint32 i = 0; i < PLAYER_MAX_SKILLS; ++i)
{
- uint16 field = i / 2;
- uint8 offset = i & 1; // i % 2
-
- if (!GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset))
+ if (!m_activePlayerData->Skill->SkillLineID[i])
{
SkillLineEntry const* skillEntry = sSkillLineStore.LookupEntry(id);
if (!skillEntry)
@@ -5557,35 +5624,48 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
return;
}
- if (skillEntry->ParentSkillLineID && skillEntry->ParentTierIndex > 0)
+ if (skillEntry->ParentSkillLineID)
{
- if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillEntry->ParentSkillLineID, getRace(), getClass()))
+ if (skillEntry->ParentTierIndex > 0)
{
- if (SkillTiersEntry const* tier = sObjectMgr->GetSkillTier(rcEntry->SkillTierID))
+ if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillEntry->ParentSkillLineID, getRace(), getClass()))
{
- uint16 skillval = GetPureSkillValue(skillEntry->ParentSkillLineID);
- SetSkill(skillEntry->ParentSkillLineID, skillEntry->ParentTierIndex, std::max<uint16>(skillval, 1), tier->Value[skillEntry->ParentTierIndex - 1]);
+ if (SkillTiersEntry const* tier = sObjectMgr->GetSkillTier(rcEntry->SkillTierID))
+ {
+ uint16 skillval = GetPureSkillValue(skillEntry->ParentSkillLineID);
+ SetSkill(skillEntry->ParentSkillLineID, skillEntry->ParentTierIndex, std::max<uint16>(skillval, 1), tier->Value[skillEntry->ParentTierIndex - 1]);
+ }
}
}
+ }
+ else
+ {
+ // also learn missing child skills at 0 value
+ if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(id))
+ for (SkillLineEntry const* childSkillLine : *childSkillLines)
+ if (!HasSkill(childSkillLine->ID))
+ SetSkill(childSkillLine->ID, 0, 0, 0);
if (skillEntry->CategoryID == SKILL_CATEGORY_PROFESSION)
{
int32 freeProfessionSlot = FindProfessionSlotFor(id);
if (freeProfessionSlot != -1)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + freeProfessionSlot, id);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, freeProfessionSlot), id);
}
}
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, id);
+ SetSkillLineId(i, id);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal);
+ SetSkillStep(i, step);
+ SetSkillRank(i, newVal);
+ SetSkillStartingRank(i, 1);
+ SetSkillMaxRank(i, maxVal);
- UpdateSkillEnchantments(id, currVal, newVal);
- UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
- UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
+ // apply skill bonuses
+ SetSkillTempBonus(i, 0);
+ SetSkillPermBonus(i, 0);
+ UpdateSkillEnchantments(id, currVal, newVal);
// insert new entry or update if not deleted old entry yet
if (itr != mSkillStatus.end())
{
@@ -5595,27 +5675,30 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
else
mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW)));
- // apply skill bonuses
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0);
- // temporary bonuses
- AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL);
- for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
- if ((*j)->GetMiscValue() == int32(id))
- (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
- AuraEffectList const& mModSkill2 = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_2);
- for (AuraEffectList::const_iterator j = mModSkill2.begin(); j != mModSkill2.end(); ++j)
- if ((*j)->GetMiscValue() == int32(id))
- (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
-
- // permanent bonuses
- AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT);
- for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
- if ((*j)->GetMiscValue() == int32(id))
- (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
-
- // Learn all spells for skill
- LearnSkillRewardedSpells(id, newVal);
+ if (newVal)
+ {
+ UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
+ UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
+
+ // temporary bonuses
+ AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL);
+ for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
+ if ((*j)->GetMiscValue() == int32(id))
+ (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
+ AuraEffectList const& mModSkill2 = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_2);
+ for (AuraEffectList::const_iterator j = mModSkill2.begin(); j != mModSkill2.end(); ++j)
+ if ((*j)->GetMiscValue() == int32(id))
+ (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
+
+ // permanent bonuses
+ AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT);
+ for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
+ if ((*j)->GetMiscValue() == int32(id))
+ (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
+
+ // Learn all spells for skill
+ LearnSkillRewardedSpells(id, newVal);
+ }
return;
}
}
@@ -5628,7 +5711,7 @@ bool Player::HasSkill(uint32 skill) const
return false;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- return (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED);
+ return (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED && m_activePlayerData->Skill->SkillRank[itr->second.pos]);
}
uint16 Player::GetSkillStep(uint16 skill) const
@@ -5637,10 +5720,10 @@ uint16 Player::GetSkillStep(uint16 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + itr->second.pos / 2, itr->second.pos & 1);
+ return m_activePlayerData->Skill->SkillStep[itr->second.pos];
}
uint16 Player::GetSkillValue(uint32 skill) const
@@ -5649,15 +5732,12 @@ uint16 Player::GetSkillValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset));
- result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset));
- result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset));
+ int32 result = int32(m_activePlayerData->Skill->SkillRank[itr->second.pos]);
+ result += int32(m_activePlayerData->Skill->SkillTempBonus[itr->second.pos]);
+ result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]);
return result < 0 ? 0 : result;
}
@@ -5667,15 +5747,12 @@ uint16 Player::GetMaxSkillValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset));
- result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset));
- result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset));
+ int32 result = int32(m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]);
+ result += int32(m_activePlayerData->Skill->SkillTempBonus[itr->second.pos]);
+ result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]);
return result < 0 ? 0 : result;
}
@@ -5685,13 +5762,10 @@ uint16 Player::GetPureMaxSkillValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset);
+ return m_activePlayerData->Skill->SkillMaxRank[itr->second.pos];
}
uint16 Player::GetBaseSkillValue(uint32 skill) const
@@ -5700,14 +5774,11 @@ uint16 Player::GetBaseSkillValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset));
- result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset));
+ int32 result = int32(m_activePlayerData->Skill->SkillRank[itr->second.pos]);
+ result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]);
return result < 0 ? 0 : result;
}
@@ -5717,13 +5788,10 @@ uint16 Player::GetPureSkillValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset);
+ return m_activePlayerData->Skill->SkillRank[itr->second.pos];
}
int16 Player::GetSkillPermBonusValue(uint32 skill) const
@@ -5732,13 +5800,10 @@ int16 Player::GetSkillPermBonusValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset);
+ return m_activePlayerData->Skill->SkillPermBonus[itr->second.pos];
}
int16 Player::GetSkillTempBonusValue(uint32 skill) const
@@ -5747,13 +5812,10 @@ int16 Player::GetSkillTempBonusValue(uint32 skill) const
return 0;
SkillStatusMap::const_iterator itr = mSkillStatus.find(skill);
- if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
+ if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos])
return 0;
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset);
+ return m_activePlayerData->Skill->SkillTempBonus[itr->second.pos];
}
void Player::SendActionButtons(uint32 state) const
@@ -5977,7 +6039,7 @@ void Player::CheckAreaExploreAndOutdoor()
return;
}
- uint32 offset = areaEntry->AreaBit / 32;
+ uint32 offset = areaEntry->AreaBit / 64;
if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
{
@@ -5986,12 +6048,12 @@ void Player::CheckAreaExploreAndOutdoor()
return;
}
- uint32 val = (uint32)(1 << (areaEntry->AreaBit % 32));
- uint32 currFields = GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset);
+ uint64 val = UI64LIT(1) << (areaEntry->AreaBit % 64);
+ uint64 currFields = m_activePlayerData->ExploredZones[offset];
if (!(currFields & val))
{
- SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, (uint32)(currFields | val));
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, offset), val);
UpdateCriteria(CRITERIA_TYPE_EXPLORE_AREA);
@@ -6266,15 +6328,15 @@ void Player::UpdateHonorFields()
if (m_lastHonorUpdateTime >= yesterday)
{
// this is the first update today, reset today's contribution
- uint16 killsToday = GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, killsToday);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), m_activePlayerData->TodayHonorableKills);
}
else
{
// no honor/kills yesterday or today, reset
- SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), 0);
}
+
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 0);
}
m_lastHonorUpdateTime = now;
@@ -6339,7 +6401,8 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
// [15..28] Horde honor titles and player name
// [29..38] Other title and player name
// [39+] Nothing
- uint32 victim_title = victim->GetUInt32Value(PLAYER_CHOSEN_TITLE);
+ // this is all wrong, should be going off PvpTitle, not PlayerTitle
+ uint32 victim_title = plrVictim->m_playerData->PlayerTitle;
// Get Killer titles, CharTitlesEntry::bit_index
// Ranks:
// title[1..14] -> rank[5..18]
@@ -6357,9 +6420,9 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
honor_f = std::ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey));
// count the number of playerkills in one day
- ApplyModUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 1, true);
+ ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 1, true);
// and those in a lifetime
- ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true);
+ ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), 1, true);
UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL);
UpdateCriteria(CRITERIA_TYPE_HK_CLASS, victim->getClass());
UpdateCriteria(CRITERIA_TYPE_HK_RACE, victim->getRace());
@@ -6437,9 +6500,16 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
return true;
}
+void Player::ResetHonorStats()
+{
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), 0);
+}
+
void Player::_InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel)
{
- SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, honorLevel);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HonorLevel), honorLevel);
UpdateHonorNextLevel();
AddHonorXP(honor);
@@ -6471,8 +6541,8 @@ void Player::RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry)
void Player::AddHonorXP(uint32 xp)
{
- uint32 currentHonorXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR);
- uint32 nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL);
+ uint32 currentHonorXP = m_activePlayerData->Honor;
+ uint32 nextHonorLevelXP = m_activePlayerData->HonorNextLevel;
uint32 newHonorXP = currentHonorXP + xp;
uint32 honorLevel = GetHonorLevel();
@@ -6487,10 +6557,10 @@ void Player::AddHonorXP(uint32 xp)
SetHonorLevel(honorLevel + 1);
honorLevel = GetHonorLevel();
- nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL);
+ nextHonorLevelXP = m_activePlayerData->HonorNextLevel;
}
- SetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR, IsMaxHonorLevel() ? 0 : newHonorXP);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Honor), IsMaxHonorLevel() ? 0 : newHonorXP);
}
void Player::SetHonorLevel(uint8 level)
@@ -6499,7 +6569,7 @@ void Player::SetHonorLevel(uint8 level)
if (level == oldHonorLevel)
return;
- SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, level);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HonorLevel), level);
UpdateHonorNextLevel();
UpdateCriteria(CRITERIA_TYPE_HONOR_LEVEL_REACHED);
@@ -6510,7 +6580,7 @@ void Player::UpdateHonorNextLevel()
// 5500 at honor level 1
// no idea what between here
// 8800 at honor level ~14 (never goes above 8800)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL, 8800);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HonorNextLevel), 8800);
}
void Player::_LoadCurrency(PreparedQueryResult result)
@@ -6852,11 +6922,15 @@ uint32 Player::GetCurrencyTotalCap(CurrencyTypesEntry const* currency) const
void Player::SetInGuild(ObjectGuid::LowType guildId)
{
if (guildId)
- SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Create<HighGuid::Guild>(guildId));
+ {
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::GuildGUID), ObjectGuid::Create<HighGuid::Guild>(guildId));
+ AddPlayerFlag(PLAYER_FLAGS_GUILD_LEVEL_ENABLED);
+ }
else
- SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Empty);
-
- ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_GUILD_LEVEL_ENABLED, guildId != 0);
+ {
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::GuildGUID), ObjectGuid::Empty);
+ RemovePlayerFlag(PLAYER_FLAGS_GUILD_LEVEL_ENABLED);
+ }
}
ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid)
@@ -6879,9 +6953,8 @@ uint8 Player::GetRankFromDB(ObjectGuid guid)
return 0;
}
-void Player::SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value)
+void Player::SetArenaTeamInfoField(uint8 /*slot*/, ArenaTeamInfoType /*type*/, uint32 /*value*/)
{
- SetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + type, value);
}
void Player::SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type)
@@ -6987,13 +7060,13 @@ void Player::UpdateArea(uint32 newArea)
pvpInfo.IsInNoPvPArea = false;
if (area && area->IsSanctuary()) // in sanctuary
{
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_SANCTUARY);
+ AddPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY);
pvpInfo.IsInNoPvPArea = true;
if (!duel)
CombatStopWithPets();
}
else
- RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_SANCTUARY);
+ RemovePvpFlag(UNIT_BYTE2_FLAG_SANCTUARY);
uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE;
if (area && area->Flags[0] & areaRestFlag)
@@ -7093,7 +7166,7 @@ void Player::CheckDuelDistance(time_t currTime)
if (!duel)
return;
- ObjectGuid duelFlagGUID = GetGuidValue(PLAYER_DUEL_ARBITER);
+ ObjectGuid duelFlagGUID = m_playerData->DuelArbiter;
GameObject* obj = GetMap()->GetGameObject(duelFlagGUID);
if (!obj)
return;
@@ -7206,7 +7279,7 @@ void Player::DuelComplete(DuelCompleteType type)
duel->opponent->CastSpell(duel->opponent, 52852, true);
//Remove Duel Flag object
- GameObject* obj = GetMap()->GetGameObject(GetGuidValue(PLAYER_DUEL_ARBITER));
+ GameObject* obj = GetMap()->GetGameObject(m_playerData->DuelArbiter);
if (obj)
duel->initiator->RemoveGameObject(obj, true);
@@ -7236,10 +7309,10 @@ void Player::DuelComplete(DuelCompleteType type)
duel->opponent->ClearComboPoints();
//cleanups
- SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty);
- SetUInt32Value(PLAYER_DUEL_TEAM, 0);
- duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty);
- duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0);
+ SetDuelArbiter(ObjectGuid::Empty);
+ SetDuelTeam(0);
+ duel->opponent->SetDuelArbiter(ObjectGuid::Empty);
+ duel->opponent->SetDuelTeam(0);
delete duel->opponent->duel;
duel->opponent->duel = nullptr;
@@ -7695,7 +7768,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool formChange /*= fal
&& sDB2Manager.GetHeirloomByItemId(item->GetEntry()))
continue;
- if (effectData->ChrSpecializationID && effectData->ChrSpecializationID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (effectData->ChrSpecializationID && effectData->ChrSpecializationID != GetPrimarySpecialization())
continue;
ApplyEquipSpell(spellproto, item, apply, formChange);
@@ -7766,7 +7839,7 @@ void Player::UpdateItemSetAuras(bool formChange /*= false*/)
{
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itemSetSpell->SpellID);
- if (itemSetSpell->ChrSpecID && itemSetSpell->ChrSpecID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (itemSetSpell->ChrSpecID && itemSetSpell->ChrSpecID != GetPrimarySpecialization())
ApplyEquipSpell(spellInfo, nullptr, false, false); // item set aura is not for current spec
else
{
@@ -7779,16 +7852,16 @@ void Player::UpdateItemSetAuras(bool formChange /*= false*/)
void Player::ApplyArtifactPowers(Item* item, bool apply)
{
- for (ItemDynamicFieldArtifactPowers const& artifactPower : item->GetArtifactPowers())
+ for (UF::ArtifactPower const& artifactPower : item->m_itemData->ArtifactPowers)
{
uint8 rank = artifactPower.CurrentRankWithBonus;
if (!rank)
continue;
- if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)
+ if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)
rank = 1;
- ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, rank - 1);
+ ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, rank - 1);
if (!artifactPowerRank)
continue;
@@ -8255,7 +8328,7 @@ void Player::RemovedInsignia(Player* looterPlr)
return;
// Now we must make bones lootable, and send player loot
- bones->SetFlag(CORPSE_FIELD_DYNAMIC_FLAGS, CORPSE_DYNFLAG_LOOTABLE);
+ bones->AddCorpseDynamicFlag(CORPSE_DYNFLAG_LOOTABLE);
// We store the level of our player in the gold field
// We retrieve this information at Player::SendLoot()
@@ -8615,7 +8688,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa
SendLootError(loot->GetGUID(), guid, LOOT_ERROR_DIDNT_KILL);
if (loot_type == LOOT_CORPSE && !guid.IsItem())
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOOTING);
+ AddUnitFlag(UNIT_FLAG_LOOTING);
}
void Player::SendLootError(ObjectGuid const& lootObj, ObjectGuid const& owner, LootError error) const
@@ -9924,7 +9997,7 @@ void Player::SetInventorySlotCount(uint8 slots)
}
}
- SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBackpackSlots), slots);
}
bool Player::HasItemCount(uint32 item, uint32 count, bool inBankAlso) const
@@ -10239,10 +10312,10 @@ InventoryResult Player::CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemP
if (pSrcItem->IsNotEmptyBag() && !IsBagPos(uint16(bag) << 8 | slot))
return EQUIP_ERR_DESTROY_NONEMPTY_BAG;
- if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD) && !IsEquipmentPos(bag, slot) && !IsChildEquipmentPos(bag, slot))
+ if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD) && !IsEquipmentPos(bag, slot) && !IsChildEquipmentPos(bag, slot))
return EQUIP_ERR_WRONG_BAG_TYPE_3;
- if (!pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD) && IsChildEquipmentPos(bag, slot))
+ if (!pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD) && IsChildEquipmentPos(bag, slot))
return EQUIP_ERR_WRONG_BAG_TYPE_3;
}
@@ -10315,7 +10388,7 @@ InventoryResult Player::CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, Ite
if (pSrcItem->IsNotEmptyBag())
return EQUIP_ERR_DESTROY_NONEMPTY_BAG;
- if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
return EQUIP_ERR_WRONG_BAG_TYPE_3;
}
@@ -10584,7 +10657,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
// search free slot in bag for place to
if (bag == INVENTORY_SLOT_BAG_0) // inventory
{
- if (pItem && pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (pItem && pItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
res = CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
@@ -10604,7 +10677,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
return EQUIP_ERR_ITEM_MAX_COUNT;
}
}
- else if (pProto->IsCraftingReagent() && HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED))
+ else if (pProto->IsCraftingReagent() && HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED))
{
res = CanStoreItem_InInventorySlots(REAGENT_SLOT_START, REAGENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
@@ -10789,7 +10862,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
if (pItem && pItem->IsNotEmptyBag())
return EQUIP_ERR_BAG_IN_BAG;
- if (pItem && pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (pItem && pItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
res = CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
@@ -10809,7 +10882,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
return EQUIP_ERR_ITEM_MAX_COUNT;
}
}
- else if (pProto->IsCraftingReagent() && HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED))
+ else if (pProto->IsCraftingReagent() && HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED))
{
res = CanStoreItem_InInventorySlots(REAGENT_SLOT_START, REAGENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
@@ -11614,7 +11687,7 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
return EQUIP_ERR_INTERNAL_BAG_ERROR;
if (ArtifactEntry const* artifact = sArtifactStore.LookupEntry(proto->GetArtifactID()))
- if (artifact->ChrSpecializationID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (artifact->ChrSpecializationID != GetPrimarySpecialization())
return EQUIP_ERR_CANT_USE_ITEM;
return EQUIP_ERR_OK;
@@ -11703,14 +11776,13 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat
UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, itemId, count);
UpdateCriteria(CRITERIA_TYPE_OWN_ITEM, itemId, 1);
- item->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM);
+ item->AddItemFlag(ITEM_FIELD_FLAG_NEW_ITEM);
if (uint32 upgradeID = sDB2Manager.GetRulesetItemUpgrade(itemId))
item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, upgradeID);
- item->SetUInt32Value(ITEM_FIELD_CONTEXT, context);
- for (int32 bonusListID : bonusListIDs)
- item->AddBonuses(bonusListID);
+ item->SetContext(context);
+ item->SetBonuses(bonusListIDs);
item = StoreItem(pos, item, update);
@@ -11720,7 +11792,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat
if (allowedLooters.size() > 1 && item->GetTemplate()->GetMaxStackSize() == 1 && item->IsSoulBound())
{
item->SetSoulboundTradeable(allowedLooters);
- item->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, GetTotalPlayedTime());
+ item->SetCreatePlayedTime(GetTotalPlayedTime());
AddTradeableItem(item);
// save data
@@ -11747,8 +11819,8 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat
CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, childDest, childTemplate, count, false, nullptr, NULL_BAG, NULL_SLOT);
if (Item* childItem = StoreNewItem(childDest, childTemplate->GetId(), update, {}, {}, context, {}, addToCollection))
{
- childItem->SetGuidValue(ITEM_FIELD_CREATOR, item->GetGUID());
- childItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD);
+ childItem->SetCreator(item->GetGUID());
+ childItem->AddItemFlag(ITEM_FIELD_FLAG_CHILD);
item->SetChildItem(childItem->GetGUID());
}
}
@@ -11818,8 +11890,8 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool
if (!pBag)
{
m_items[slot] = pItem;
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID());
- pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID());
+ SetInvSlot(slot, pItem->GetGUID());
+ pItem->SetContainedIn(GetGUID());
pItem->SetOwnerGUID(GetGUID());
pItem->SetSlot(slot);
@@ -12135,16 +12207,18 @@ void Player::QuickEquipItem(uint16 pos, Item* pItem)
void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
{
+ auto itemField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VisibleItems, slot);
if (pItem)
{
- SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), pItem->GetVisibleEntry(this));
- SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0, pItem->GetVisibleAppearanceModId(this));
- SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 1, pItem->GetVisibleItemVisual(this));
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), pItem->GetVisibleEntry(this));
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), pItem->GetVisibleAppearanceModId(this));
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), pItem->GetVisibleItemVisual(this));
}
else
{
- SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), 0);
- SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0);
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), 0);
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), 0);
+ SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), 0);
}
}
@@ -12165,8 +12239,8 @@ void Player::VisualizeItem(uint8 slot, Item* pItem)
GetName().c_str(), GetGUID().ToString().c_str(), slot, pItem->GetEntry());
m_items[slot] = pItem;
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID());
- pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID());
+ SetInvSlot(slot, pItem->GetGUID());
+ pItem->SetContainedIn(GetGUID());
pItem->SetOwnerGUID(GetGUID());
pItem->SetSlot(slot);
pItem->SetContainer(nullptr);
@@ -12216,20 +12290,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update)
{
// remove held enchantments, update expertise
if (slot == EQUIPMENT_SLOT_MAINHAND)
- {
- if (pItem->GetItemSuffixFactor())
- {
- pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_3);
- pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_4);
- }
- else
- {
- pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_0);
- pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_1);
- }
-
UpdateExpertise(BASE_ATTACK);
- }
else if (slot == EQUIPMENT_SLOT_OFFHAND)
UpdateExpertise(OFF_ATTACK);
// update armor penetration - passive auras may need it
@@ -12245,7 +12306,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update)
}
m_items[slot] = nullptr;
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty);
+ SetInvSlot(slot, ObjectGuid::Empty);
if (slot < EQUIPMENT_SLOT_END)
{
@@ -12257,7 +12318,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update)
else if (Bag* pBag = GetBagByPos(bag))
pBag->RemoveItem(slot, update);
- pItem->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty);
+ pItem->SetContainedIn(ObjectGuid::Empty);
// pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0); not clear owner at remove (it will be set at store). This used in mail and auction code
pItem->SetSlot(NULL_SLOT);
if (IsInWorld() && update)
@@ -12306,7 +12367,7 @@ void Player::MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool
// in case trade we already have item in other player inventory
pLastItem->SetState(in_characterInventoryDB ? ITEM_CHANGED : ITEM_NEW, this);
- if (pLastItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
+ if (pLastItem->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE))
AddTradeableItem(pLastItem);
}
}
@@ -12324,7 +12385,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
for (uint8 i = 0; i < MAX_BAG_SIZE; ++i)
DestroyItem(slot, i, update);
- if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ if (pItem->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
@@ -12347,7 +12408,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
if (bag == INVENTORY_SLOT_BAG_0)
{
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty);
+ SetInvSlot(slot, ObjectGuid::Empty);
// equipment and equipped bags can have applied bonuses
if (slot < INVENTORY_SLOT_BAG_END)
@@ -12400,7 +12461,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
}
//pItem->SetOwnerGUID(0);
- pItem->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty);
+ pItem->SetContainedIn(ObjectGuid::Empty);
pItem->SetSlot(NULL_SLOT);
pItem->SetState(ITEM_REMOVED, this);
}
@@ -12936,9 +12997,9 @@ void Player::SwapItem(uint16 src, uint16 dst)
if (!pSrcItem)
return;
- if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
- if (Item* parentItem = GetItemByGuid(pSrcItem->GetGuidValue(ITEM_FIELD_CREATOR)))
+ if (Item* parentItem = GetItemByGuid(pSrcItem->m_itemData->Creator))
{
if (IsEquipmentPos(src))
{
@@ -12949,9 +13010,9 @@ void Player::SwapItem(uint16 src, uint16 dst)
}
}
}
- else if (pDstItem && pDstItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ else if (pDstItem && pDstItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
- if (Item* parentItem = GetItemByGuid(pDstItem->GetGuidValue(ITEM_FIELD_CREATOR)))
+ if (Item* parentItem = GetItemByGuid(pDstItem->m_itemData->Creator))
{
if (IsEquipmentPos(dst))
{
@@ -13316,10 +13377,10 @@ void Player::AddItemToBuyBackSlot(Item* pItem)
// if current back slot non-empty search oldest or free
if (m_items[slot])
{
- uint32 oldest_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP);
+ uint32 oldest_time = m_activePlayerData->BuybackTimestamp[0];
uint32 oldest_slot = BUYBACK_SLOT_START;
- for (uint32 i = BUYBACK_SLOT_START+1; i < BUYBACK_SLOT_END; ++i)
+ for (uint32 i = BUYBACK_SLOT_START + 1; i < BUYBACK_SLOT_END; ++i)
{
// found empty
if (!m_items[i])
@@ -13328,7 +13389,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem)
break;
}
- uint32 i_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + i - BUYBACK_SLOT_START);
+ uint32 i_time = m_activePlayerData->BuybackTimestamp[i - BUYBACK_SLOT_START];
if (oldest_time > i_time)
{
@@ -13350,13 +13411,13 @@ void Player::AddItemToBuyBackSlot(Item* pItem)
uint32 etime = uint32(base - m_logintime + (30 * 3600));
uint32 eslot = slot - BUYBACK_SLOT_START;
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID());
+ SetInvSlot(slot, pItem->GetGUID());
if (ItemTemplate const* proto = pItem->GetTemplate())
- SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, proto->GetSellPrice() * pItem->GetCount());
+ SetBuybackPrice(eslot, proto->GetSellPrice() * pItem->GetCount());
else
- SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0);
+ SetBuybackPrice(eslot, 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, (uint32)etime);
+ SetBuybackTimestamp(eslot, (uint32)etime);
// move to next (for non filled list is move most optimized choice)
if (m_currentBuybackSlot < BUYBACK_SLOT_END - 1)
@@ -13390,9 +13451,9 @@ void Player::RemoveItemFromBuyBackSlot(uint32 slot, bool del)
m_items[slot] = nullptr;
uint32 eslot = slot - BUYBACK_SLOT_START;
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, 0);
+ SetInvSlot(slot, ObjectGuid::Empty);
+ SetBuybackPrice(eslot, 0);
+ SetBuybackTimestamp(eslot, 0);
// if current backslot is filled set to now free slot
if (m_items[m_currentBuybackSlot])
@@ -13467,7 +13528,7 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid)
bool Player::IsUseEquipedWeapon(bool mainhand) const
{
// disarm applied only to mainhand weapon
- return !IsInFeralForm() && (!mainhand || !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED));
+ return !IsInFeralForm() && (!mainhand || !HasUnitFlag(UNIT_FLAG_DISARMED));
}
void Player::SetCanTitanGrip(bool value, uint32 penaltySpellId /*= 0*/)
@@ -13751,8 +13812,8 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
}
// Cogwheel gems dont have requirement data set in SpellItemEnchantment.dbc, but they do have it in Item-sparse.db2
- if (ItemDynamicFieldGems const* gem = item->GetGem(uint16(slot - SOCK_ENCHANTMENT_SLOT)))
- if (ItemTemplate const* gemTemplate = sObjectMgr->GetItemTemplate(gem->ItemId))
+ if (UF::SocketedGem const* gem = item->GetGem(uint16(slot - SOCK_ENCHANTMENT_SLOT)))
+ if (ItemTemplate const* gemTemplate = sObjectMgr->GetItemTemplate(gem->ItemID))
if (gemTemplate->GetRequiredSkill() && GetSkillValue(gemTemplate->GetRequiredSkill()) < gemTemplate->GetRequiredSkillRank())
return;
}
@@ -13787,31 +13848,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
if (enchant_spell_id)
{
if (apply)
- {
- int32 basepoints = 0;
- // Random Property Exist - try found basepoints for spell (basepoints depends from item suffix factor)
- if (item->GetItemRandomPropertyId() < 0)
- {
- ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId()));
- if (item_rand)
- {
- // Search enchant_amount
- for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k)
- {
- if (item_rand->Enchantment[k] == enchant_id)
- {
- basepoints = int32((item_rand->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000);
- break;
- }
- }
- }
- }
- // Cast custom spell vs all equal basepoints got from enchant_amount
- if (basepoints)
- CastCustomSpell(this, enchant_spell_id, &basepoints, &basepoints, &basepoints, true, item);
- else
- CastSpell(this, enchant_spell_id, true, item);
- }
+ CastSpell(this, enchant_spell_id, true, item);
else
RemoveAurasDueToItemSpell(enchant_spell_id, item->GetGUID());
}
@@ -13820,7 +13857,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
if (pEnchant->ScalingClass)
{
int32 scalingClass = pEnchant->ScalingClass;
- if ((GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL) || GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL)) && pEnchant->ScalingClassRestricted)
+ if ((*m_unitData->MinItemLevel || *m_unitData->MaxItemLevel) && pEnchant->ScalingClassRestricted)
scalingClass = pEnchant->ScalingClassRestricted;
uint8 minLevel = pEnchant->Flags & 0x20 ? 1 : 60;
@@ -13835,23 +13872,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
if (GtSpellScalingEntry const* spellScaling = sSpellScalingGameTable.GetRow(scalingLevel))
enchant_amount = uint32(pEnchant->EffectScalingPoints[s] * GetSpellScalingColumnForClass(spellScaling, scalingClass));
}
-
- if (!enchant_amount)
- {
- ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId()));
- if (item_rand)
- {
- for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k)
- {
- if (item_rand->Enchantment[k] == enchant_id)
- {
- enchant_amount = uint32((item_rand->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000);
- break;
- }
- }
- }
- }
-
+ enchant_amount = std::max(enchant_amount, 1u);
HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + enchant_spell_id), TOTAL_VALUE, float(enchant_amount), apply);
break;
case ITEM_ENCHANTMENT_TYPE_STAT:
@@ -13859,7 +13880,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
if (pEnchant->ScalingClass)
{
int32 scalingClass = pEnchant->ScalingClass;
- if ((GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL) || GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL)) && pEnchant->ScalingClassRestricted)
+ if ((*m_unitData->MinItemLevel || *m_unitData->MaxItemLevel) && pEnchant->ScalingClassRestricted)
scalingClass = pEnchant->ScalingClassRestricted;
uint8 minLevel = pEnchant->Flags & 0x20 ? 1 : 60;
@@ -13875,21 +13896,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
enchant_amount = uint32(pEnchant->EffectScalingPoints[s] * GetSpellScalingColumnForClass(spellScaling, scalingClass));
}
- if (!enchant_amount)
- {
- ItemRandomSuffixEntry const* item_rand_suffix = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId()));
- if (item_rand_suffix)
- {
- for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k)
- {
- if (item_rand_suffix->Enchantment[k] == enchant_id)
- {
- enchant_amount = uint32((item_rand_suffix->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000);
- break;
- }
- }
- }
- }
+ enchant_amount = std::max(enchant_amount, 1u);
TC_LOG_DEBUG("entities.player.items", "Adding %u to stat nb %u", enchant_amount, enchant_spell_id);
switch (enchant_spell_id)
@@ -14119,7 +14126,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
// visualize enchantment at player and equipped items
if (slot == PERM_ENCHANTMENT_SLOT)
- SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 2), 1, item->GetVisibleItemVisual(this));
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VisibleItems, item->GetSlot()).ModifyValue(&UF::VisibleItem::ItemVisual), item->GetVisibleItemVisual(this));
if (apply_dur)
{
@@ -14253,7 +14260,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
if (source->GetTypeId() == TYPEID_UNIT)
{
- npcflags = source->GetUInt64Value(UNIT_NPC_FLAGS);
+ npcflags = (uint64(source->ToUnit()->m_unitData->NpcFlags[1]) << 32) | source->ToUnit()->m_unitData->NpcFlags[0];
if (showQuests && npcflags & UNIT_NPC_FLAG_QUESTGIVER)
PrepareQuestMenu(source->GetGUID());
}
@@ -14705,7 +14712,7 @@ void Player::SendPreparedQuest(WorldObject* source)
return;
}
- if (source->GetTypeId() != TYPEID_UNIT || source->GetUInt64Value(UNIT_NPC_FLAGS) & UNIT_NPC_FLAG_GOSSIP)
+ if (source->GetTypeId() != TYPEID_UNIT || source->ToUnit()->HasNpcFlag(UNIT_NPC_FLAG_GOSSIP))
{
if (quest->IsAutoAccept() && CanAddQuest(quest, true) && CanTakeQuest(quest, true))
AddQuestAndCheckCompletion(quest, source);
@@ -16006,12 +16013,7 @@ bool Player::SatisfyQuestDay(Quest const* qInfo, bool /*msg*/) const
return true;
}
- std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS);
- for (uint32 dailyQuestId : dailies)
- if (dailyQuestId == qInfo->GetQuestId())
- return false;
-
- return true;
+ return m_activePlayerData->DailyQuestsCompleted.FindIndex(qInfo->GetQuestId()) == -1;
}
bool Player::SatisfyQuestWeek(Quest const* qInfo, bool /*msg*/)
@@ -16379,33 +16381,34 @@ uint16 Player::FindQuestSlot(uint32 quest_id) const
uint32 Player::GetQuestSlotQuestId(uint16 slot) const
{
- return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET);
+ return m_playerData->QuestLog[slot].QuestID;
}
uint32 Player::GetQuestSlotState(uint16 slot) const
{
- return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET);
+ return m_playerData->QuestLog[slot].StateFlags;
}
uint16 Player::GetQuestSlotCounter(uint16 slot, uint8 counter) const
{
if (counter < MAX_QUEST_COUNTS)
- return GetUInt16Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + counter / 2, counter % 2);
+ return m_playerData->QuestLog[slot].ObjectiveProgress[counter];
return 0;
}
uint32 Player::GetQuestSlotTime(uint16 slot) const
{
- return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET);
+ return m_playerData->QuestLog[slot].EndTime;
}
void Player::SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer /*= 0*/)
{
- SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET, quest_id);
- SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, 0);
- for (uint32 i = 0; i < MAX_QUEST_COUNTS / 2; ++i)
- SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + i, 0);
- SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET, timer);
+ auto questLogField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::QuestLog, slot);
+ SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::QuestID), quest_id);
+ SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0);
+ for (uint32 i = 0; i < MAX_QUEST_COUNTS; ++i)
+ SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveProgress, i), 0);
+ SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), timer);
}
void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
@@ -16413,22 +16416,30 @@ void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
if (counter >= MAX_QUEST_COUNTS)
return;
- SetUInt16Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + counter / 2, counter % 2, count);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData)
+ .ModifyValue(&UF::PlayerData::QuestLog, slot)
+ .ModifyValue(&UF::QuestLog::ObjectiveProgress, counter), count);
}
void Player::SetQuestSlotState(uint16 slot, uint32 state)
{
- SetFlag(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, state);
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData)
+ .ModifyValue(&UF::PlayerData::QuestLog, slot)
+ .ModifyValue(&UF::QuestLog::StateFlags), state);
}
void Player::RemoveQuestSlotState(uint16 slot, uint32 state)
{
- RemoveFlag(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, state);
+ RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData)
+ .ModifyValue(&UF::PlayerData::QuestLog, slot)
+ .ModifyValue(&UF::QuestLog::StateFlags), state);
}
void Player::SetQuestSlotTimer(uint16 slot, uint32 timer)
{
- SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET, timer);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData)
+ .ModifyValue(&UF::PlayerData::QuestLog, slot)
+ .ModifyValue(&UF::QuestLog::EndTime), timer);
}
void Player::SetQuestCompletedBit(uint32 questBit, bool completed)
@@ -16436,11 +16447,15 @@ void Player::SetQuestCompletedBit(uint32 questBit, bool completed)
if (!questBit)
return;
- uint32 fieldOffset = (questBit - 1) >> 5;
+ uint32 fieldOffset = (questBit - 1) >> 6;
if (fieldOffset >= QUESTS_COMPLETED_BITS_SIZE)
return;
- ApplyModFlag(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5), 1 << ((questBit - 1) & 31), completed);
+ uint64 flag = UI64LIT(1) << ((questBit - 1) & 63);
+ if (completed)
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag);
+ else
+ RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag);
}
void Player::AreaExploredOrEventHappens(uint32 questId)
@@ -17289,7 +17304,7 @@ void Player::SendQuestGiverStatusMultiple()
Creature* questgiver = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, *itr);
if (!questgiver || questgiver->IsHostileTo(this))
continue;
- if (!questgiver->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER))
+ if (!questgiver->HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER))
continue;
response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver));
@@ -17344,8 +17359,6 @@ void Player::_LoadDeclinedNames(PreparedQueryResult result)
void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
{
// arenateamid, played_week, played_season, personal_rating
- memset((void*)&m_uint32Values[ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO], 0, sizeof(uint32) * MAX_ARENA_SLOT * ARENA_TEAM_END);
-
uint16 personalRatingCache[] = {0, 0, 0};
if (result)
@@ -17606,8 +17619,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
}
// overwrite possible wrong/corrupted guid
- SetGuidValue(OBJECT_FIELD_GUID, guid);
- SetGuidValue(PLAYER_WOW_ACCOUNT, GetSession()->GetAccountGUID());
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::WowAccount), GetSession()->GetAccountGUID());
uint8 gender = fields[5].GetUInt8();
if (!IsValidGender(gender))
@@ -17616,9 +17628,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
return false;
}
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, fields[3].GetUInt8());
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, fields[4].GetUInt8());
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender);
+ SetRace(fields[3].GetUInt8());
+ SetClass(fields[4].GetUInt8());
+ SetGender(gender);
// check if race/class combination is valid
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
@@ -17628,14 +17640,25 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
return false;
}
- SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8());
+ SetLevel(fields[6].GetUInt8());
SetXP(fields[7].GetUInt32());
- _LoadIntoDataField(fields[66].GetString(), ACTIVE_PLAYER_FIELD_EXPLORED_ZONES, PLAYER_EXPLORED_ZONES_SIZE);
- _LoadIntoDataField(fields[67].GetString(), ACTIVE_PLAYER_FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2);
+ Tokenizer exploredZones(fields[66].GetString(), ' ');
+ if (exploredZones.size() == PLAYER_EXPLORED_ZONES_SIZE * 2)
+ for (std::size_t i = 0; i < exploredZones.size(); ++i)
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i / 2),
+ (uint64(atoul(exploredZones[i])) << (32 * (i % 2))));
+
+ Tokenizer knownTitles(fields[67].GetString(), ' ');
+ if (!(knownTitles.size() % 2))
+ {
+ for (std::size_t i = 0; i < knownTitles.size(); ++i)
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, i / 2),
+ (uint64(atoul(knownTitles[i])) << (32 * (i % 2))));
+ }
SetObjectScale(1.0f);
- SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f);
+ SetHoverHeight(1.0f);
// load achievements before anything else to prevent multiple gains for the same achievement/criteria on every loading (as loading does call UpdateCriteria)
m_achievementMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ACHIEVEMENTS), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CRITERIA_PROGRESS));
@@ -17651,30 +17674,30 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
customDisplay[1] = fields[15].GetUInt8();
customDisplay[2] = fields[16].GetUInt8();
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, fields[9].GetUInt8());
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, fields[10].GetUInt8());
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, fields[11].GetUInt8());
- SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, fields[12].GetUInt8());
- SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, fields[13].GetUInt8());
+ SetSkinId(fields[9].GetUInt8());
+ SetFaceId(fields[10].GetUInt8());
+ SetHairStyleId(fields[11].GetUInt8());
+ SetHairColorId(fields[12].GetUInt8());
+ SetFacialHairStyleId(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]);
+ SetCustomDisplayOption(i, customDisplay[i]);
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[55].GetUInt8());
- SetUInt32Value(PLAYER_FLAGS, fields[20].GetUInt32());
- SetUInt32Value(PLAYER_FLAGS_EX, fields[21].GetUInt32());
- SetInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[54].GetUInt32());
+ SetNativeSex(gender);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), fields[55].GetUInt8());
+ SetPlayerFlags(PlayerFlags(fields[20].GetUInt32()));
+ SetPlayerFlagsEx(PlayerFlagsEx(fields[21].GetUInt32()));
+ SetWatchedFactionIndex(fields[54].GetUInt32());
if (!ValidateAppearance(
fields[3].GetUInt8(), // race
fields[4].GetUInt8(), // class
gender,
- GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID),
- GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID),
- GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID),
- GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE),
- GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID),
+ m_playerData->HairStyleID,
+ m_playerData->HairColorID,
+ m_playerData->FaceID,
+ m_playerData->FacialHairStyleID,
+ m_playerData->SkinID,
customDisplay))
{
TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) has wrong Appearance values (Hair/Skin/Color), can't load.", guid.ToString().c_str());
@@ -17682,7 +17705,7 @@ 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(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[68].GetUInt8());
+ SetMultiActionBars(fields[68].GetUInt8());
m_fishingSteps = fields[72].GetUInt8();
@@ -17691,7 +17714,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
// cleanup inventory related item value fields (it will be filled correctly in _LoadInventory)
for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
{
- SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty);
+ SetInvSlot(slot, ObjectGuid::Empty);
SetVisibleItemSlot(slot, nullptr);
delete m_items[slot];
@@ -17709,6 +17732,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (!_LoadHomeBind(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_HOME_BIND)))
return false;
+ InitializeSkillFields();
InitPrimaryProfessions(); // to max set before any spell loaded
// init saved position, and fix it later if problematic
@@ -17729,28 +17753,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
_LoadGroup(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GROUP));
- _LoadArenaTeamInfo(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ARENA_INFO));
-
- // check arena teams integrity
- for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot)
- {
- uint32 arena_team_id = GetArenaTeamId(arena_slot);
- if (!arena_team_id)
- continue;
-
- if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(arena_team_id))
- if (at->IsMember(GetGUID()))
- continue;
-
- // arena team not exist or not member, cleanup fields
- for (int j = 0; j < 6; ++j)
- SetArenaTeamInfoField(arena_slot, ArenaTeamInfoType(j), 0);
- }
-
_LoadCurrency(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CURRENCY));
- SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[50].GetUInt32());
- SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, fields[51].GetUInt16());
- SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, fields[52].GetUInt16());
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), fields[50].GetUInt32());
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), fields[51].GetUInt16());
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), fields[52].GetUInt16());
_LoadBoundInstances(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_BOUND_INSTANCES));
_LoadInstanceTimeRestrictions(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES));
@@ -18075,27 +18081,11 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (m_deathExpireTime > now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP)
m_deathExpireTime = now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP - 1;
- // clear charm/summon related fields
- SetOwnerGUID(ObjectGuid::Empty);
- SetGuidValue(UNIT_FIELD_CHARMEDBY, ObjectGuid::Empty);
- SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty);
- SetGuidValue(UNIT_FIELD_SUMMON, ObjectGuid::Empty);
- SetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, ObjectGuid::Empty);
- SetCreatorGUID(ObjectGuid::Empty);
-
- RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT);
-
- // reset some aura modifiers before aura apply
- SetUInt32Value(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, 0);
- SetUInt32Value(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, 0);
+ RemoveUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT);
// make sure the unit is considered out of combat for proper loading
ClearInCombat();
- // make sure the unit is considered not in duel for proper loading
- SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty);
- SetUInt32Value(PLAYER_DUEL_TEAM, 0);
-
// reset stats before loading any modifiers
InitStatsForLevel();
InitTaxiNodesForLevel();
@@ -18119,9 +18109,6 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (chrSpec->ClassID == getClass())
SetLootSpecId(lootSpecId);
- if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(getClass(), GetActiveTalentGroup()))
- SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, spec->ID);
-
UpdateDisplayPower();
_LoadTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_TALENTS));
_LoadPvpTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_PVP_TALENTS));
@@ -18137,7 +18124,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
_LoadAuras(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURAS), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURA_EFFECTS), time_diff);
_LoadGlyphAuras();
// add ghost flag (must be after aura load: PLAYER_FLAGS_GHOST set in aura)
- if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (HasPlayerFlag(PLAYER_FLAGS_GHOST))
m_deathState = DEAD;
// after spell load, learn rewarded spell if need also
@@ -18181,7 +18168,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (curTitle && !HasTitle(curTitle))
curTitle = 0;
- SetUInt32Value(PLAYER_CHOSEN_TITLE, curTitle);
+ SetChosenTitle(curTitle);
// has to be called after last Relocate() in Player::LoadFromDB
SetFallInformation(0, GetPositionZ());
@@ -18208,7 +18195,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (GetPowerIndex(Powers(i)) != MAX_POWERS)
{
uint32 savedPower = fields[56 + loadedPowers].GetUInt32();
- uint32 maxPower = GetUInt32Value(UNIT_FIELD_MAXPOWER + loadedPowers);
+ uint32 maxPower = m_unitData->MaxPower[loadedPowers];
SetPower(Powers(i), (savedPower > maxPower) ? maxPower : savedPower);
if (++loadedPowers >= MAX_POWERS_PER_CLASS)
break;
@@ -18216,7 +18203,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
}
for (; loadedPowers < MAX_POWERS_PER_CLASS; ++loadedPowers)
- SetUInt32Value(UNIT_FIELD_POWER + loadedPowers, 0);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, loadedPowers), 0);
SetPower(POWER_LUNAR_POWER, 0);
// Init rune recharge
@@ -18286,10 +18273,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
// RaF stuff.
m_grantableLevels = fields[69].GetUInt8();
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
- SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND);
+ AddDynamicFlag(UNIT_DYNFLAG_REFER_A_FRIEND);
if (m_grantableLevels > 0)
- SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::GrantableLevels), 1);
_LoadDeclinedNames(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_DECLINED_NAMES));
@@ -18362,7 +18349,7 @@ void Player::_LoadCUFProfiles(PreparedQueryResult result)
while (result->NextRow());
}
-bool Player::isAllowedToLoot(const Creature* creature)
+bool Player::isAllowedToLoot(const Creature* creature) const
{
if (!creature->isDead() || !creature->IsDamageEnoughForLootingAndReward())
return false;
@@ -18379,7 +18366,7 @@ bool Player::isAllowedToLoot(const Creature* creature)
if (loot->loot_type == LOOT_SKINNING)
return creature->GetSkinner() == GetGUID();
- Group* thisGroup = GetGroup();
+ Group const* thisGroup = GetGroup();
if (!thisGroup)
return this == creature->GetLootRecipient();
else if (thisGroup != creature->GetLootRecipientGroup())
@@ -18549,7 +18536,10 @@ void Player::LoadCorpse(PreparedQueryResult result)
{
Field* fields = result->Fetch();
_corpseLocation.WorldRelocate(fields[0].GetUInt16(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat());
- ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable());
+ if (!sMapStore.AssertEntry(_corpseLocation.GetMapId())->Instanceable())
+ AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
+ else
+ RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
}
else
ResurrectPlayer(0.5f);
@@ -18590,7 +18580,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
// 0 1 2 3 4 5
// SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN character_inventory ci ON ci.item = ap.guid WHERE ci.guid = ?
- std::unordered_map<ObjectGuid, std::tuple<uint64, uint32, uint32, std::vector<ItemDynamicFieldArtifactPowers>>> artifactData;
+ std::unordered_map<ObjectGuid, std::tuple<uint64, uint32, uint32, std::vector<ArtifactPowerLoadInfo>>> artifactData;
if (artifactsResult)
{
do
@@ -18600,7 +18590,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
std::get<0>(artifactDataEntry) = fields[1].GetUInt64();
std::get<1>(artifactDataEntry) = fields[2].GetUInt32();
std::get<2>(artifactDataEntry) = fields[3].GetUInt32();
- ItemDynamicFieldArtifactPowers artifactPowerData;
+ ArtifactPowerLoadInfo artifactPowerData;
artifactPowerData.ArtifactPowerId = fields[4].GetUInt32();
artifactPowerData.PurchasedRank = fields[5].GetUInt8();
if (ArtifactPowerEntry const* artifactPower = sArtifactPowerStore.LookupEntry(artifactPowerData.ArtifactPowerId))
@@ -18648,9 +18638,9 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
GetSession()->GetCollectionMgr()->AddItemAppearance(item);
InventoryResult err = EQUIP_ERR_OK;
- if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (item->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
- if (Item* parent = GetItemByGuid(item->GetGuidValue(ITEM_FIELD_CREATOR)))
+ if (Item* parent = GetItemByGuid(item->GetCreator()))
{
parent->SetChildItem(item->GetGUID());
item->CopyArtifactDataFromParent(parent);
@@ -18769,7 +18759,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
do
{
- // SELECT itemId, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?
+ // SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?
Field* fields = result->Fetch();
uint64 itemId = fields[0].GetUInt64();
@@ -18777,13 +18767,12 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
uint8 slot = fields[2].GetUInt8();
ObjectGuid creatorGuid = fields[3].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()) : ObjectGuid::Empty;
ItemRandomEnchantmentId randomProperty(ItemRandomEnchantmentType(fields[4].GetUInt8()), fields[5].GetUInt32());
- uint32 suffixFactor = fields[6].GetUInt32();
- uint32 upgradeId = fields[7].GetUInt32();
- uint32 fixedScalingLevel = fields[8].GetUInt32();
- uint32 artifactKnowledgeLevel = fields[9].GetUInt32();
- uint8 context = fields[10].GetUInt8();
- std::vector<uint32> bonusListIDs;
- Tokenizer bonusListIdTokens(fields[11].GetString(), ' ');
+ uint32 upgradeId = fields[6].GetUInt32();
+ uint32 fixedScalingLevel = fields[7].GetUInt32();
+ uint32 artifactKnowledgeLevel = fields[8].GetUInt32();
+ uint8 context = fields[9].GetUInt8();
+ std::vector<int32> bonusListIDs;
+ Tokenizer bonusListIdTokens(fields[10].GetString(), ' ');
for (char const* token : bonusListIdTokens)
bonusListIDs.push_back(atoul(token));
@@ -18808,7 +18797,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
continue;
}
- _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel,
+ _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel,
context, bonusListIDs);
WorldPackets::Item::ItemInstance voidInstance;
@@ -18848,7 +18837,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
GetGUID().ToString().c_str(), GetName().c_str(), timeDiff, item->GetGUID().ToString().c_str(), item->GetEntry());
remove = true;
}
- else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
+ else if (item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE))
{
if (item->GetPlayedTime() > (2 * HOUR))
{
@@ -18859,7 +18848,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
stmt->setUInt64(0, item->GetGUID().GetCounter());
trans->Append(stmt);
- item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
+ item->RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE);
}
else
{
@@ -18877,11 +18866,11 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (%s, name: '%s') has item (%s, entry: %u) with refundable flags, but without data in item_refund_instance. Removing flag.",
GetGUID().ToString().c_str(), GetName().c_str(), item->GetGUID().ToString().c_str(), item->GetEntry());
- item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
+ item->RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE);
}
}
}
- else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
+ else if (item->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE);
stmt->setUInt64(0, item->GetGUID().GetCounter());
@@ -18905,7 +18894,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (%s, name: '%s') has item (%s, entry: %u) with ITEM_FIELD_FLAG_BOP_TRADEABLE flag, but without data in item_soulbound_trade_data. Removing flag.",
GetGUID().ToString().c_str(), GetName().c_str(), item->GetGUID().ToString().c_str(), item->GetEntry());
- item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE);
+ item->RemoveItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE);
}
}
else if (proto->GetHolidayID())
@@ -19274,7 +19263,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
if (!quest)
continue;
- AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id);
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)) = quest_id;
if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(quest_id))
SetQuestCompletedBit(questBit, true);
@@ -19389,7 +19378,7 @@ void Player::_LoadGroup(PreparedQueryResult result)
if (Group* group = sGroupMgr->GetGroupByDbStoreId((*result)[0].GetUInt32()))
{
if (group->IsLeader(GetGUID()))
- SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
+ AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER);
uint8 subgroup = group->GetMemberGroup(GetGUID());
SetGroup(group, subgroup);
@@ -19403,7 +19392,7 @@ void Player::_LoadGroup(PreparedQueryResult result)
}
if (!GetGroup() || !GetGroup()->IsLeader(GetGUID()))
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
+ RemovePlayerFlag(PLAYER_FLAGS_GROUP_LEADER);
}
void Player::_LoadBoundInstances(PreparedQueryResult result)
@@ -19950,22 +19939,22 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setString(index++, GetName());
stmt->setUInt8(index++, getRace());
stmt->setUInt8(index++, getClass());
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
+ stmt->setUInt8(index++, m_playerData->NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
stmt->setUInt8(index++, getLevel());
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP));
+ stmt->setUInt32(index++, m_activePlayerData->XP);
stmt->setUInt64(index++, GetMoney());
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE));
+ stmt->setUInt8(index++, m_playerData->SkinID);
+ stmt->setUInt8(index++, m_playerData->FaceID);
+ stmt->setUInt8(index++, m_playerData->HairStyleID);
+ stmt->setUInt8(index++, m_playerData->HairColorID);
+ stmt->setUInt8(index++, m_playerData->FacialHairStyleID);
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++, m_playerData->CustomDisplayOption[i]);
stmt->setUInt8(index++, GetInventorySlotCount());
stmt->setUInt8(index++, GetBankBagSlotCount());
- stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP)));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS_EX));
+ stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
+ stmt->setUInt32(index++, m_playerData->PlayerFlags);
+ stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
stmt->setUInt16(index++, (uint16)GetMapId());
stmt->setUInt32(index++, (uint32)GetInstanceId());
stmt->setUInt8(index++, uint8(GetDungeonDifficultyID()));
@@ -19992,7 +19981,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP)));
stmt->setUInt32(index++, uint32(time(nullptr)));
- stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0));
+ stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0));
//save, far from tavern/city
//save, but in tavern/city
stmt->setUInt32(index++, GetTalentResetCost());
@@ -20008,11 +19997,11 @@ void Player::SaveToDB(bool create /*=false*/)
ss << m_taxi.SaveTaxiDestinationsToString();
stmt->setString(index++, ss.str());
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
- stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS));
- stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE));
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX));
+ stmt->setUInt32(index++, m_activePlayerData->LifetimeHonorableKills);
+ stmt->setUInt16(index++, m_activePlayerData->TodayHonorableKills);
+ stmt->setUInt16(index++, m_activePlayerData->YesterdayHonorableKills);
+ stmt->setUInt32(index++, m_playerData->PlayerTitle);
+ stmt->setUInt32(index++, m_activePlayerData->WatchedFactionIndex);
stmt->setUInt8(index++, GetDrunkValue());
stmt->setUInt32(index++, GetHealth());
@@ -20021,7 +20010,7 @@ void Player::SaveToDB(bool create /*=false*/)
{
if (GetPowerIndex(Powers(i)) != MAX_POWERS)
{
- stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER + storedPowers));
+ stmt->setUInt32(index++, m_unitData->Power[storedPowers]);
if (++storedPowers >= MAX_POWERS_PER_CLASS)
break;
}
@@ -20038,7 +20027,10 @@ void Player::SaveToDB(bool create /*=false*/)
ss.str("");
for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
- ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' ';
+ {
+ ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' ';
+ }
stmt->setString(index++, ss.str());
ss.str("");
@@ -20062,11 +20054,14 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setString(index++, ss.str());
ss.str("");
- for (uint32 i = 0; i < KNOWN_TITLES_SIZE * 2; ++i)
- ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' ';
+ for (uint32 i = 0; i < m_activePlayerData->KnownTitles.size(); ++i)
+ {
+ ss << uint32(m_activePlayerData->KnownTitles[i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->KnownTitles[i] >> 32) & 0xFFFFFFFF) << ' ';
+ }
stmt->setString(index++, ss.str());
- stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES));
+ stmt->setUInt8(index++, m_activePlayerData->MultiActionBars);
stmt->setUInt32(index++, m_grantableLevels);
stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build));
}
@@ -20077,22 +20072,22 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setString(index++, GetName());
stmt->setUInt8(index++, getRace());
stmt->setUInt8(index++, getClass());
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
+ stmt->setUInt8(index++, m_playerData->NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
stmt->setUInt8(index++, getLevel());
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP));
+ stmt->setUInt32(index++, m_activePlayerData->XP);
stmt->setUInt64(index++, GetMoney());
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID));
- stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE));
+ stmt->setUInt8(index++, m_playerData->SkinID);
+ stmt->setUInt8(index++, m_playerData->FaceID);
+ stmt->setUInt8(index++, m_playerData->HairStyleID);
+ stmt->setUInt8(index++, m_playerData->HairColorID);
+ stmt->setUInt8(index++, m_playerData->FacialHairStyleID);
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++, m_playerData->CustomDisplayOption[i]);
stmt->setUInt8(index++, GetInventorySlotCount());
stmt->setUInt8(index++, GetBankBagSlotCount());
- stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP)));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS_EX));
+ stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
+ stmt->setUInt32(index++, m_playerData->PlayerFlags);
+ stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
if (!IsBeingTeleported())
{
@@ -20136,7 +20131,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP)));
stmt->setUInt32(index++, uint32(time(nullptr)));
- stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0));
+ stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0));
//save, far from tavern/city
//save, but in tavern/city
stmt->setUInt32(index++, GetTalentResetCost());
@@ -20152,11 +20147,11 @@ void Player::SaveToDB(bool create /*=false*/)
ss << m_taxi.SaveTaxiDestinationsToString();
stmt->setString(index++, ss.str());
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
- stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS));
- stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS));
- stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE));
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX));
+ stmt->setUInt32(index++, m_activePlayerData->LifetimeHonorableKills);
+ stmt->setUInt16(index++, m_activePlayerData->TodayHonorableKills);
+ stmt->setUInt16(index++, m_activePlayerData->YesterdayHonorableKills);
+ stmt->setUInt32(index++, m_playerData->PlayerTitle);
+ stmt->setUInt32(index++, m_activePlayerData->WatchedFactionIndex);
stmt->setUInt8(index++, GetDrunkValue());
stmt->setUInt32(index++, GetHealth());
@@ -20165,7 +20160,7 @@ void Player::SaveToDB(bool create /*=false*/)
{
if (GetPowerIndex(Powers(i)) != MAX_POWERS)
{
- stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER + storedPowers));
+ stmt->setUInt32(index++, m_unitData->Power[storedPowers]);
if (++storedPowers >= MAX_POWERS_PER_CLASS)
break;
}
@@ -20182,7 +20177,10 @@ void Player::SaveToDB(bool create /*=false*/)
ss.str("");
for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
- ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' ';
+ {
+ ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' ';
+ }
stmt->setString(index++, ss.str());
ss.str("");
@@ -20206,17 +20204,20 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setString(index++, ss.str());
ss.str("");
- for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i)
- ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' ';
+ for (uint32 i = 0; i < m_activePlayerData->KnownTitles.size(); ++i)
+ {
+ ss << uint32(m_activePlayerData->KnownTitles[i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->KnownTitles[i] >> 32) & 0xFFFFFFFF) << ' ';
+ }
stmt->setString(index++, ss.str());
- stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES));
+ stmt->setUInt8(index++, m_activePlayerData->MultiActionBars);
stmt->setUInt32(index++, m_grantableLevels);
stmt->setUInt8(index++, IsInWorld() && !GetSession()->PlayerLogout() ? 1 : 0);
- stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR));
+ stmt->setUInt32(index++, m_activePlayerData->Honor);
stmt->setUInt32(index++, GetHonorLevel());
- stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_HONOR)));
+ stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_HONOR].StateID);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_HONOR)));
stmt->setUInt32(index++, realm.Build);
@@ -20557,7 +20558,7 @@ void Player::_SaveVoidStorage(SQLTransaction& trans)
}
else
{
- // REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ // REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM);
stmt->setUInt64(0, _voidStorageItems[i]->ItemId);
stmt->setUInt64(1, GetGUID().GetCounter());
@@ -20566,15 +20567,14 @@ void Player::_SaveVoidStorage(SQLTransaction& trans)
stmt->setUInt64(4, _voidStorageItems[i]->CreatorGuid.GetCounter());
stmt->setUInt8(5, uint8(_voidStorageItems[i]->ItemRandomPropertyId.Type));
stmt->setUInt32(6, _voidStorageItems[i]->ItemRandomPropertyId.Id);
- stmt->setUInt32(7, _voidStorageItems[i]->ItemSuffixFactor);
- stmt->setUInt32(8, _voidStorageItems[i]->ItemUpgradeId);
- stmt->setUInt32(9, _voidStorageItems[i]->FixedScalingLevel);
- stmt->setUInt32(10, _voidStorageItems[i]->ArtifactKnowledgeLevel);
- stmt->setUInt8(11, _voidStorageItems[i]->Context);
+ stmt->setUInt32(7, _voidStorageItems[i]->ItemUpgradeId);
+ stmt->setUInt32(8, _voidStorageItems[i]->FixedScalingLevel);
+ stmt->setUInt32(9, _voidStorageItems[i]->ArtifactKnowledgeLevel);
+ stmt->setUInt8(10, _voidStorageItems[i]->Context);
std::ostringstream bonusListIDs;
for (int32 bonusListID : _voidStorageItems[i]->BonusListIDs)
bonusListIDs << bonusListID << ' ';
- stmt->setString(12, bonusListIDs.str());
+ stmt->setString(11, bonusListIDs.str());
}
trans->Append(stmt);
@@ -20787,8 +20787,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans)
stmt->setUInt64(0, GetGUID().GetCounter());
trans->Append(stmt);
- std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS);
- for (uint32 questId : dailies)
+ for (int32 questId : m_activePlayerData->DailyQuestsCompleted)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY);
stmt->setUInt64(0, GetGUID().GetCounter());
@@ -20897,22 +20896,8 @@ void Player::_SaveSkills(SQLTransaction& trans)
continue;
}
- if (itr->second.uState == SKILL_DELETED)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL);
- stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, itr->first);
- trans->Append(stmt);
-
- mSkillStatus.erase(itr++);
- continue;
- }
-
- uint16 field = itr->second.pos / 2;
- uint8 offset = itr->second.pos & 1;
-
- uint16 value = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset);
- uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset);
+ uint16 value = m_activePlayerData->Skill->SkillRank[itr->second.pos];
+ uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos];
switch (itr->second.uState)
{
@@ -20932,6 +20917,12 @@ void Player::_SaveSkills(SQLTransaction& trans)
stmt->setUInt16(3, uint16(itr->first));
trans->Append(stmt);
break;
+ case SKILL_DELETED:
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL);
+ stmt->setUInt64(0, GetGUID().GetCounter());
+ stmt->setUInt16(1, uint16(itr->first));
+ trans->Append(stmt);
+ break;
default:
break;
}
@@ -21008,16 +20999,16 @@ void Player::_SaveStats(SQLTransaction& trans) const
for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
stmt->setUInt32(index++, GetResistance(SpellSchools(i)) + GetBonusResistanceMod(SpellSchools(i)));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE));
- stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1));
- stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_ATTACK_POWER));
- stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER));
+ stmt->setFloat(index++, m_activePlayerData->BlockPercentage);
+ stmt->setFloat(index++, m_activePlayerData->DodgePercentage);
+ stmt->setFloat(index++, m_activePlayerData->ParryPercentage);
+ stmt->setFloat(index++, m_activePlayerData->CritPercentage);
+ stmt->setFloat(index++, m_activePlayerData->RangedCritPercentage);
+ stmt->setFloat(index++, m_activePlayerData->SpellCritPercentage);
+ stmt->setUInt32(index++, m_unitData->AttackPower);
+ stmt->setUInt32(index++, m_unitData->RangedAttackPower);
stmt->setUInt32(index++, GetBaseSpellPowerBonus());
- stmt->setUInt32(index, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_RESILIENCE_PLAYER_DAMAGE));
+ stmt->setUInt32(index, m_activePlayerData->CombatRatings[CR_RESILIENCE_PLAYER_DAMAGE]);
trans->Append(stmt);
}
@@ -21031,13 +21022,13 @@ void Player::outDebugValues() const
TC_LOG_DEBUG("entities.unit", "AGILITY is: \t\t%f\t\tSTRENGTH is: \t\t%f", GetStat(STAT_AGILITY), GetStat(STAT_STRENGTH));
TC_LOG_DEBUG("entities.unit", "INTELLECT is: \t\t%f", GetStat(STAT_INTELLECT));
TC_LOG_DEBUG("entities.unit", "STAMINA is: \t\t%f", GetStat(STAT_STAMINA));
- TC_LOG_DEBUG("entities.unit", "Armor is: \t\t%u\t\tBlock is: \t\t%f", GetArmor(), GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE));
+ TC_LOG_DEBUG("entities.unit", "Armor is: \t\t%u\t\tBlock is: \t\t%f", GetArmor(), *m_activePlayerData->BlockPercentage);
TC_LOG_DEBUG("entities.unit", "HolyRes is: \t\t%u\t\tFireRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_HOLY), GetResistance(SPELL_SCHOOL_MASK_FIRE));
TC_LOG_DEBUG("entities.unit", "NatureRes is: \t\t%u\t\tFrostRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_NATURE), GetResistance(SPELL_SCHOOL_MASK_FROST));
TC_LOG_DEBUG("entities.unit", "ShadowRes is: \t\t%u\t\tArcaneRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_SHADOW), GetResistance(SPELL_SCHOOL_MASK_ARCANE));
- TC_LOG_DEBUG("entities.unit", "MIN_DAMAGE is: \t\t%f\tMAX_DAMAGE is: \t\t%f", GetFloatValue(UNIT_FIELD_MINDAMAGE), GetFloatValue(UNIT_FIELD_MAXDAMAGE));
- TC_LOG_DEBUG("entities.unit", "MIN_OFFHAND_DAMAGE is: \t%f\tMAX_OFFHAND_DAMAGE is: \t%f", GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE), GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE));
- TC_LOG_DEBUG("entities.unit", "MIN_RANGED_DAMAGE is: \t%f\tMAX_RANGED_DAMAGE is: \t%f", GetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE), GetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE));
+ TC_LOG_DEBUG("entities.unit", "MIN_DAMAGE is: \t\t%f\tMAX_DAMAGE is: \t\t%f", *m_unitData->MinDamage, *m_unitData->MaxDamage);
+ TC_LOG_DEBUG("entities.unit", "MIN_OFFHAND_DAMAGE is: \t%f\tMAX_OFFHAND_DAMAGE is: \t%f", *m_unitData->MinOffHandDamage, *m_unitData->MaxOffHandDamage);
+ TC_LOG_DEBUG("entities.unit", "MIN_RANGED_DAMAGE is: \t%f\tMAX_RANGED_DAMAGE is: \t%f", *m_unitData->MinRangedDamage, *m_unitData->MaxRangedDamage);
TC_LOG_DEBUG("entities.unit", "ATTACK_TIME is: \t%u\t\tRANGE_ATTACK_TIME is: \t%u", GetBaseAttackTime(BASE_ATTACK), GetBaseAttackTime(RANGED_ATTACK));
}
@@ -21279,7 +21270,7 @@ void Player::UpdateContestedPvP(uint32 diff)
void Player::ResetContestedPvP()
{
ClearUnitState(UNIT_STATE_ATTACK_PLAYER);
- RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP);
+ RemovePlayerFlag(PLAYER_FLAGS_CONTESTED_PVP);
m_contestedPvPTimer = 0;
}
@@ -21301,8 +21292,8 @@ void Player::UpdateDuelFlag(time_t currTime)
sScriptMgr->OnPlayerDuelStart(this, duel->opponent);
- SetUInt32Value(PLAYER_DUEL_TEAM, 1);
- duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 2);
+ SetDuelTeam(1);
+ duel->opponent->SetDuelTeam(2);
duel->startTimer = 0;
duel->startTime = currTime;
@@ -21351,7 +21342,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
if (returnreagent && (pet || m_temporaryUnsummonedPetNumber) && !InBattleground())
{
//returning of reagents only for players, so best done here
- uint32 spellId = pet ? pet->GetUInt32Value(UNIT_CREATED_BY_SPELL) : m_oldpetspell;
+ uint32 spellId = pet ? *pet->m_unitData->CreatedBySpell : m_oldpetspell;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (spellInfo)
@@ -22068,7 +22059,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
return false;
}
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL))
+ if (HasUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL))
return false;
// taximaster case
@@ -22257,7 +22248,7 @@ void Player::CleanupAfterTaxiFlight()
{
m_taxi.ClearTaxiDestinations(); // not destinations, clear source node
Dismount();
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT);
+ RemoveUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT));
getHostileRefManager().setOnlineOfflineState(true);
}
@@ -22344,7 +22335,7 @@ void Player::InitDisplayIds()
return;
}
- uint8 gender = GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
+ uint8 gender = m_playerData->NativeSex;
switch (gender)
{
case GENDER_FEMALE:
@@ -22359,7 +22350,7 @@ void Player::InitDisplayIds()
TC_LOG_ERROR("entities.player", "Player::InitDisplayIds: Player '%s' (%s) has invalid gender %u", GetName().c_str(), GetGUID().ToString().c_str(), gender);
}
- SetUInt32Value(UNIT_FIELD_STATE_ANIM_ID, sAnimationDataStore.GetNumRows());
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StateAnimID), sAnimationDataStore.GetNumRows());
}
inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int64 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore)
@@ -22419,7 +22410,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
if (pProto->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
{
- it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
+ it->AddItemFlag(ITEM_FIELD_FLAG_REFUNDABLE);
it->SetRefundRecipient(GetGUID());
it->SetPaidMoney(price);
it->SetPaidExtendedCost(crItem->ExtendedCost);
@@ -22447,7 +22438,7 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot,
return false;
}
- Creature* creature = GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR);
+ Creature* creature = GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "Player::BuyCurrencyFromVendorSlot: Vendor (%s) not found or player '%s' (%s) can't interact with him.",
@@ -22615,7 +22606,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
if (!IsGameMaster() && ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() == ALLIANCE) || (pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && GetTeam() == HORDE)))
return false;
- Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR);
+ Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "Player::BuyItemFromVendorSlot: Vendor (%s) not found or player '%s' (%s) can't interact with him.",
@@ -22874,16 +22865,16 @@ void Player::UpdatePvPState(bool onlyFFA)
{
if (!IsFFAPvP())
{
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
- (*itr)->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ (*itr)->AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
}
}
else if (IsFFAPvP())
{
- RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
- (*itr)->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ (*itr)->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
}
if (onlyFFA)
@@ -22896,7 +22887,7 @@ void Player::UpdatePvPState(bool onlyFFA)
}
else // in friendly area
{
- if (IsPvP() && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer)
+ if (IsPvP() && !HasPlayerFlag(PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer)
pvpInfo.EndTimer = time(nullptr); // start toggle-off
}
}
@@ -22977,9 +22968,9 @@ bool Player::EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot)
Item* pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
if (pItem2 && !pItem2->IsBroken())
{
- for (ItemDynamicFieldGems const& gemData : pItem2->GetGems())
+ for (UF::SocketedGem const& gemData : pItem2->m_itemData->Gems)
{
- ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId);
+ ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID);
if (!gemProto)
continue;
@@ -23149,7 +23140,7 @@ void Player::SetBattlegroundEntryPoint()
void Player::SetBGTeam(uint32 team)
{
m_bgData.bgTeam = team;
- SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, uint8(team == ALLIANCE ? 1 : 0));
+ SetArenaFaction(uint8(team == ALLIANCE ? 1 : 0));
}
uint32 Player::GetBGTeam() const
@@ -23271,7 +23262,7 @@ bool Player::CanAlwaysSee(WorldObject const* obj) const
if (m_unitMovedByMe == obj)
return true;
- ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT);
+ ObjectGuid guid = m_activePlayerData->FarsightObject;
if (!guid.IsEmpty())
if (obj->GetGUID() == guid)
return true;
@@ -23405,12 +23396,12 @@ void Player::UpdateTriggerVisibility()
{
Creature* creature = GetMap()->GetCreature(*itr);
// Update fields of triggers, transformed units or unselectable units (values dependent on GM state)
- if (!creature || (!creature->IsTrigger() && !creature->HasAuraType(SPELL_AURA_TRANSFORM) && !creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)))
+ if (!creature || (!creature->IsTrigger() && !creature->HasAuraType(SPELL_AURA_TRANSFORM) && !creature->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)))
continue;
- creature->SetFieldNotifyFlag(UF_FLAG_PUBLIC);
+ creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayID));
+ creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags));
creature->BuildValuesUpdateBlockForPlayer(&udata, this);
- creature->RemoveFieldNotifyFlag(UF_FLAG_PUBLIC);
}
else if (itr->IsAnyTypeGameObject())
{
@@ -23418,9 +23409,8 @@ void Player::UpdateTriggerVisibility()
if (!go)
continue;
- go->SetFieldNotifyFlag(UF_FLAG_PUBLIC);
+ go->ForceUpdateFieldChange(go->m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags));
go->BuildValuesUpdateBlockForPlayer(&udata, this);
- go->RemoveFieldNotifyFlag(UF_FLAG_PUBLIC);
}
}
@@ -23543,7 +23533,7 @@ bool Player::HasEnoughMoney(int64 amount) const
void Player::SetMoney(uint64 value)
{
- SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, value);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Coinage), value);
MoneyChanged(value);
UpdateCriteria(CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED);
}
@@ -24164,33 +24154,11 @@ int32 Player::FindProfessionSlotFor(uint32 skillId) const
if (!skillEntry)
return -1;
- uint32 constexpr professionSlots = 2;
- uint32 const* professionsBegin = &m_uint32Values[ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE];
- uint32 const* professionsEnd = professionsBegin + professionSlots;
-
- // both free, return first slot
- if (std::none_of(professionsBegin, professionsEnd, [](uint32 slot) { return slot != 0; }))
- return 0;
-
- // when any slot is filled we need to check both - one of them might be earlier step of the same profession
- auto sameProfessionSlot = std::find_if(professionsBegin, professionsEnd, [&](uint32 slot)
- {
- if (SkillLineEntry const* slotProfession = sSkillLineStore.LookupEntry(slot))
- if (slotProfession->ParentSkillLineID == skillEntry->ParentSkillLineID)
- return true;
- return false;
- });
-
- if (sameProfessionSlot != professionsEnd)
- {
- if (sSkillLineStore.AssertEntry(*sameProfessionSlot)->ParentTierIndex < skillEntry->ParentTierIndex)
- return std::distance(professionsBegin, sameProfessionSlot);
-
- return -1;
- }
+ int32 const* professionsBegin = m_activePlayerData->ProfessionSkillLine.begin();
+ int32 const* professionsEnd = m_activePlayerData->ProfessionSkillLine.end();
// if there is no same profession, find any free slot
- auto freeSlot = std::find(professionsBegin, professionsEnd, 0u);
+ auto freeSlot = std::find(professionsBegin, professionsEnd, 0);
return freeSlot != professionsEnd ? std::distance(professionsBegin, freeSlot) : -1;
}
@@ -24222,7 +24190,7 @@ void Player::SetDailyQuestStatus(uint32 quest_id)
{
if (!qQuest->IsDFQuest())
{
- AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id);
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)) = quest_id;
m_lastDailyQuestTime = time(nullptr); // last daily quest time
m_DailyQuestChanged = true;
}
@@ -24237,21 +24205,7 @@ void Player::SetDailyQuestStatus(uint32 quest_id)
bool Player::IsDailyQuestDone(uint32 quest_id)
{
- bool found = false;
- if (sObjectMgr->GetQuestTemplate(quest_id))
- {
- std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS);
- for (uint32 dailyQuestId : dailies)
- {
- if (dailyQuestId == quest_id)
- {
- found = true;
- break;
- }
- }
- }
-
- return found;
+ return m_activePlayerData->DailyQuestsCompleted.FindIndex(quest_id) >= 0;
}
void Player::SetWeeklyQuestStatus(uint32 quest_id)
@@ -24278,15 +24232,15 @@ void Player::SetMonthlyQuestStatus(uint32 quest_id)
void Player::DailyReset()
{
- for (uint32 questId : GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS))
+ for (int32 questId : m_activePlayerData->DailyQuestsCompleted)
if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(questId))
SetQuestCompletedBit(questBit, false);
WorldPackets::Quest::DailyQuestsReset dailyQuestsReset;
- dailyQuestsReset.Count = int32(GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS).size());
+ dailyQuestsReset.Count = int32(m_activePlayerData->DailyQuestsCompleted.size());
SendDirectMessage(dailyQuestsReset.Write());
- ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS);
+ ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted));
m_DFQuests.clear(); // Dungeon Finder Quests.
@@ -24586,7 +24540,7 @@ void Player::UpdateForQuestWorldObjects()
continue;
// check if this unit requires quest specific flags
- if (!obj->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK))
+ if (!obj->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK))
continue;
SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(obj->GetEntry());
@@ -24687,7 +24641,7 @@ void Player::RemoveItemDurations(Item* item)
void Player::AddItemDurations(Item* item)
{
- if (item->GetUInt32Value(ITEM_FIELD_DURATION))
+ if (*item->m_itemData->Expiration)
{
m_itemDuration.push_back(item);
item->SendTimeUpdate(this);
@@ -24796,16 +24750,16 @@ bool Player::CanNoReagentCast(SpellInfo const* spellInfo) const
{
// don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP
if (spellInfo->HasAttribute(SPELL_ATTR5_NO_REAGENT_WHILE_PREP) &&
- HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION))
+ HasUnitFlag(UNIT_FLAG_PREPARATION))
return true;
// Check no reagent use mask
flag128 noReagentMask;
- noReagentMask[0] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST);
- noReagentMask[1] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 1);
- noReagentMask[2] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 2);
- noReagentMask[3] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 3);
- if (spellInfo->SpellFamilyFlags & noReagentMask)
+ noReagentMask[0] = m_activePlayerData->NoReagentCostMask[0];
+ noReagentMask[1] = m_activePlayerData->NoReagentCostMask[1];
+ noReagentMask[2] = m_activePlayerData->NoReagentCostMask[2];
+ noReagentMask[3] = m_activePlayerData->NoReagentCostMask[3];
+ if (spellInfo->SpellFamilyFlags & noReagentMask)
return true;
return false;
@@ -24845,7 +24799,7 @@ void Player::RemoveItemDependentAurasAndCasts(Item* pItem)
void Player::InitializeSelfResurrectionSpells()
{
- ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
+ ClearSelfResSpell();
uint32 spells[3] = { };
@@ -24866,7 +24820,7 @@ void Player::InitializeSelfResurrectionSpells()
for (uint32 selfResSpell : spells)
if (selfResSpell)
- AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfResSpell);
+ AddSelfResSpell(selfResSpell);
}
// Used in triggers for check "Only to targets that grant experience or honor" req
@@ -25298,10 +25252,10 @@ void Player::SetOriginalGroup(Group* group, int8 subgroup)
void Player::SetPartyType(GroupCategory category, uint8 type)
{
ASSERT(category < MAX_GROUP_CATEGORY);
- uint8 value = GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE);
+ uint8 value = m_playerData->PartyType;
value &= ~uint8(uint8(0xFF) << (category * 4));
value |= uint8(uint8(type) << (category * 4));
- SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE, value);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PartyType), value);
}
void Player::ResetGroupUpdateSequenceIfNeeded(Group const* group)
@@ -25439,12 +25393,14 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
TC_LOG_DEBUG("maps", "Player::CreateViewpoint: Player '%s' (%s) creates seer (Entry: %u, TypeId: %u).",
GetName().c_str(), GetGUID().ToString().c_str(), target->GetEntry(), target->GetTypeId());
- if (!AddGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID()))
+ if (ObjectGuid::Empty != m_activePlayerData->FarsightObject)
{
TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot add new viewpoint!", GetName().c_str(), GetGUID().ToString().c_str());
return;
}
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::FarsightObject), target->GetGUID());
+
// farsight dynobj or puppet may be very far away
UpdateVisibilityOf(target);
@@ -25456,12 +25412,14 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
{
TC_LOG_DEBUG("maps", "Player::CreateViewpoint: Player %s removed seer", GetName().c_str());
- if (!RemoveGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID()))
+ if (target->GetGUID() != m_activePlayerData->FarsightObject)
{
TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot remove current viewpoint!", GetName().c_str(), GetGUID().ToString().c_str());
return;
}
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::FarsightObject), ObjectGuid::Empty);
+
if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase())
static_cast<Unit*>(target)->RemovePlayerFromVision(this);
@@ -25475,7 +25433,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
WorldObject* Player::GetViewpoint() const
{
- ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT);
+ ObjectGuid guid = m_activePlayerData->FarsightObject;
if (!guid.IsEmpty())
return static_cast<WorldObject*>(ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_SEER));
return nullptr;
@@ -25487,7 +25445,7 @@ bool Player::CanUseBattlegroundObject(GameObject* gameobject) const
if (gameobject)
{
FactionTemplateEntry const* playerFaction = GetFactionTemplateEntry();
- FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(gameobject->GetUInt32Value(GAMEOBJECT_FACTION));
+ FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(gameobject->GetFaction());
if (playerFaction && faction && !playerFaction->IsFriendlyTo(faction))
return false;
@@ -25509,14 +25467,14 @@ bool Player::CanCaptureTowerPoint() const
uint32 Player::GetBarberShopCost(BarberShopStyleEntry const* newHairStyle, uint8 newHairColor, BarberShopStyleEntry const* newFacialHair, BarberShopStyleEntry const* newSkin, BarberShopStyleEntry const* newFace, std::array<BarberShopStyleEntry const*, PLAYER_CUSTOM_DISPLAY_SIZE> const& newCustomDisplay) const
{
- uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID);
- uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
- uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE);
- uint8 skincolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
- uint8 face = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID);
+ uint8 hairstyle = m_playerData->HairStyleID;
+ uint8 haircolor = m_playerData->HairColorID;
+ uint8 facialhair = m_playerData->FacialHairStyleID;
+ uint8 skincolor = m_playerData->SkinID;
+ uint8 face = m_playerData->FaceID;
std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> customDisplay;
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
- customDisplay[i] = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i);
+ customDisplay[i] = m_playerData->CustomDisplayOption[i];
if ((hairstyle == newHairStyle->Data) &&
(haircolor == newHairColor) &&
@@ -25572,12 +25530,12 @@ bool Player::isTotalImmune() const
bool Player::HasTitle(uint32 bitIndex) const
{
- if (bitIndex > MAX_TITLE_INDEX)
+ uint32 fieldIndexOffset = bitIndex / 64;
+ if (fieldIndexOffset >= m_activePlayerData->KnownTitles.size())
return false;
- uint32 fieldIndexOffset = bitIndex / 32;
- uint32 flag = 1 << (bitIndex % 32);
- return HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag);
+ uint64 flag = UI64LIT(1) << (bitIndex % 64);
+ return (m_activePlayerData->KnownTitles[fieldIndexOffset] & flag) != 0;
}
bool Player::HasTitle(CharTitlesEntry const* title) const
@@ -25587,22 +25545,22 @@ bool Player::HasTitle(CharTitlesEntry const* title) const
void Player::SetTitle(CharTitlesEntry const* title, bool lost)
{
- uint32 fieldIndexOffset = title->MaskID / 32;
- uint32 flag = 1 << (title->MaskID % 32);
+ uint32 fieldIndexOffset = title->MaskID / 64;
+ uint64 flag = UI64LIT(1) << (title->MaskID % 64);
if (lost)
{
- if (!HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag))
+ if (!HasTitle(title))
return;
- RemoveFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag);
+ RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, fieldIndexOffset), flag);
}
else
{
- if (HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag))
+ if (HasTitle(title))
return;
- SetFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag);
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, fieldIndexOffset), flag);
}
WorldPackets::Character::TitleEarned packet(lost ? SMSG_TITLE_LOST : SMSG_TITLE_EARNED);
@@ -25693,8 +25651,8 @@ void Player::InitRunes()
for (uint8 i = 0; i < MAX_RUNES; ++i)
SetRuneCooldown(i, 0); // reset cooldowns
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, 0.0f);
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, runeIndex), 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, runeIndex), 0.0f);
}
void Player::AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store, bool broadcast)
@@ -25839,6 +25797,13 @@ void Player::_LoadSkills(PreparedQueryResult result)
{
do
{
+ if (mSkillStatus.size() >= PLAYER_MAX_SKILLS) // client limit
+ {
+ TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has more than %u skills.",
+ GetName().c_str(), GetGUID().ToString().c_str(), PLAYER_MAX_SKILLS);
+ break;
+ }
+
Field* fields = result->Fetch();
uint16 skill = fields[0].GetUInt16();
uint16 value = fields[1].GetUInt16();
@@ -25869,29 +25834,13 @@ void Player::_LoadSkills(PreparedQueryResult result)
break;
}
- if (value == 0)
- {
- TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has skill %u with value 0, deleted.",
- GetName().c_str(), GetGUID().ToString().c_str(), skill);
-
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SKILL);
+ auto skillItr = mSkillStatus.find(skill);
+ if (skillItr == mSkillStatus.end())
+ skillItr = mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(mSkillStatus.size(), SKILL_UNCHANGED))).first;
- stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt16(1, skill);
-
- CharacterDatabase.Execute(stmt);
-
- continue;
- }
-
- uint16 field = count / 2;
- uint8 offset = count & 1;
-
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, skill);
uint16 step = 0;
- SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(rcEntry->SkillID);
- if (skillLine)
+ if (SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(rcEntry->SkillID))
{
if (skillLine->CategoryID == SKILL_CATEGORY_SECONDARY)
step = max / 75;
@@ -25900,55 +25849,48 @@ void Player::_LoadSkills(PreparedQueryResult result)
{
step = max / 75;
- if (skillLine->ParentSkillLineID && skillLine->ParentTierIndex)
+ if (!skillLine->ParentSkillLineID)
{
int32 professionSlot = FindProfessionSlotFor(skill);
if (professionSlot != -1)
- SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + professionSlot, skill);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, professionSlot), skill);
}
}
}
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, value);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, max);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0);
+ SetSkillLineId(skillItr->second.pos, skill);
+ SetSkillStep(skillItr->second.pos, step);
+ SetSkillRank(skillItr->second.pos, value);
+ SetSkillStartingRank(skillItr->second.pos, 1);
+ SetSkillMaxRank(skillItr->second.pos, max);
+ SetSkillTempBonus(skillItr->second.pos, 0);
+ SetSkillPermBonus(skillItr->second.pos, 0);
- mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED)));
loadedSkillValues[skill] = value;
-
- ++count;
-
- if (count >= PLAYER_MAX_SKILLS) // client limit
- {
- TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has more than %u skills.",
- GetName().c_str(), GetGUID().ToString().c_str(), PLAYER_MAX_SKILLS);
- break;
- }
}
while (result->NextRow());
}
// Learn skill rewarded spells after all skills have been loaded to prevent learning a skill from them before its loaded with proper value from DB
for (auto& skill : loadedSkillValues)
+ {
LearnSkillRewardedSpells(skill.first, skill.second);
+ if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(skill.first))
+ {
+ for (auto childItr = childSkillLines->begin(); childItr != childSkillLines->end() && mSkillStatus.size() < PLAYER_MAX_SKILLS; ++childItr)
+ {
+ if (mSkillStatus.find((*childItr)->ID) == mSkillStatus.end())
+ {
+ SetSkillLineId(count, (*childItr)->ID);
+ SetSkillStartingRank(count, 1);
+ mSkillStatus.insert(SkillStatusMap::value_type((*childItr)->ID, SkillStatusData(count, SKILL_UNCHANGED)));
+ }
+ }
+ }
+ }
if (HasSkill(SKILL_FIST_WEAPONS))
SetSkill(SKILL_FIST_WEAPONS, 0, GetSkillValue(SKILL_UNARMED), GetMaxSkillValueForLevel());
-
- for (; count < PLAYER_MAX_SKILLS; ++count)
- {
- uint16 field = count / 2;
- uint8 offset = count & 1;
-
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0);
- SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0);
- }
}
InventoryResult Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limit_count) const
@@ -25960,9 +25902,9 @@ InventoryResult Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limi
return res;
// check unique-equipped on gems
- for (ItemDynamicFieldGems const& gemData : pItem->GetGems())
+ for (UF::SocketedGem const& gemData : pItem->m_itemData->Gems)
{
- ItemTemplate const* pGem = sObjectMgr->GetItemTemplate(gemData.ItemId);
+ ItemTemplate const* pGem = sObjectMgr->GetItemTemplate(gemData.ItemID);
if (!pGem)
continue;
@@ -26139,14 +26081,14 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown)
if (isDead())
return TALENT_FAILED_CANT_DO_THAT_RIGHT_NOW;
- if (!GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (!GetPrimarySpecialization())
return TALENT_FAILED_NO_PRIMARY_TREE_SELECTED;
TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentId);
if (!talentInfo)
return TALENT_FAILED_UNKNOWN;
- if (talentInfo->SpecID && talentInfo->SpecID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (talentInfo->SpecID && talentInfo->SpecID != GetPrimarySpecialization())
return TALENT_FAILED_UNKNOWN;
// prevent learn talent for different class (cheating)
@@ -26154,7 +26096,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown)
return TALENT_FAILED_UNKNOWN;
// check if we have enough talent points
- if (talentInfo->TierID >= GetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS))
+ if (talentInfo->TierID >= m_activePlayerData->MaxTalentTiers)
return TALENT_FAILED_UNKNOWN;
// TODO: prevent changing talents that are on cooldown
@@ -26170,7 +26112,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown)
{
if (!talent->SpecID)
bestSlotMatch = talent;
- else if (talent->SpecID == GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ else if (talent->SpecID == GetPrimarySpecialization())
{
bestSlotMatch = talent;
break;
@@ -26188,7 +26130,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown)
if (!HasTalent(talent->ID, GetActiveTalentGroup()))
continue;
- if (!HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
+ if (!HasPlayerFlag(PLAYER_FLAGS_RESTING) && !HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
return TALENT_FAILED_REST_AREA;
if (GetSpellHistory()->HasCooldown(talent->SpellID))
@@ -26238,7 +26180,6 @@ void Player::ResetTalentSpecialization()
ChrSpecializationEntry const* defaultSpec = ASSERT_NOTNULL(sDB2Manager.GetDefaultChrSpecializationForClass(getClass()));
SetPrimarySpecialization(defaultSpec->ID);
SetActiveTalentGroup(defaultSpec->OrderIndex);
- SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, defaultSpec->ID);
LearnSpecializationSpells();
@@ -26261,7 +26202,7 @@ TalentLearnResult Player::LearnPvpTalent(uint32 talentID, uint8 slot, int32* spe
if (!talentInfo)
return TALENT_FAILED_UNKNOWN;
- if (talentInfo->SpecID != GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (talentInfo->SpecID != int32(GetPrimarySpecialization()))
return TALENT_FAILED_UNKNOWN;
if (talentInfo->LevelRequired > getLevel())
@@ -26280,7 +26221,7 @@ TalentLearnResult Player::LearnPvpTalent(uint32 talentID, uint8 slot, int32* spe
if (PvpTalentEntry const* talent = sPvpTalentStore.LookupEntry(GetPvpTalentMap(GetActiveTalentGroup())[slot]))
{
- if (!HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
+ if (!HasPlayerFlag(PLAYER_FLAGS_RESTING) && !HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
return TALENT_FAILED_REST_AREA;
if (GetSpellHistory()->HasCooldown(talent->SpellID))
@@ -26455,7 +26396,7 @@ void Player::UnsummonPetTemporaryIfAny()
if (!m_temporaryUnsummonedPetNumber && pet->isControlled() && !pet->isTemporarySummoned())
{
m_temporaryUnsummonedPetNumber = pet->GetCharmInfo()->GetPetNumber();
- m_oldpetspell = pet->GetUInt32Value(UNIT_CREATED_BY_SPELL);
+ m_oldpetspell = pet->m_unitData->CreatedBySpell;
}
RemovePet(pet, PET_SAVE_AS_CURRENT);
@@ -26487,7 +26428,7 @@ bool Player::IsPetNeedBeTemporaryUnsummoned() const
bool Player::CanSeeSpellClickOn(Creature const* c) const
{
- if (!c->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK))
+ if (!c->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK))
return false;
SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(c->GetEntry());
@@ -27009,9 +26950,7 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec)
RemoveAurasDueToSpell(sGlyphPropertiesStore.AssertEntry(glyphId)->SpellID);
SetActiveTalentGroup(spec->OrderIndex);
- SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, spec->ID);
- if (!GetPrimarySpecialization())
- SetPrimarySpecialization(spec->ID);
+ SetPrimarySpecialization(spec->ID);
for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId)
{
@@ -27155,7 +27094,7 @@ void Player::SendRefundInfo(Item* item)
// This function call unsets ITEM_FIELD_FLAG_REFUNDABLE if played time is over 2 hours.
item->UpdatePlayedTime(this);
- if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
+ if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE))
{
TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!");
return;
@@ -27251,7 +27190,7 @@ void Player::SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece,
void Player::RefundItem(Item* item)
{
- if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
+ if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE))
{
TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!");
return;
@@ -27558,8 +27497,8 @@ void Player::SendMovementSetCollisionHeight(float height)
setCollisionHeight.SequenceIndex = m_movementCounter++;
setCollisionHeight.Height = height;
setCollisionHeight.Scale = GetObjectScale();
- setCollisionHeight.MountDisplayID = GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID);
- setCollisionHeight.ScaleDuration = GetUInt32Value(UNIT_FIELD_SCALE_DURATION);
+ setCollisionHeight.MountDisplayID = GetMountDisplayId();
+ setCollisionHeight.ScaleDuration = m_unitData->ScaleDuration;
setCollisionHeight.Reason = WorldPackets::Movement::UPDATE_COLLISION_HEIGHT_MOUNT;
SendDirectMessage(setCollisionHeight.Write());
@@ -27685,7 +27624,7 @@ float Player::GetCollisionHeight(bool mounted) const
{
if (mounted)
{
- CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID));
+ CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetMountDisplayId());
if (!mountDisplayInfo)
return GetCollisionHeight(false);
@@ -27789,10 +27728,10 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
PhasingHandler::InheritPhaseShift(pet, this);
pet->SetCreatorGUID(GetGUID());
- pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, getFaction());
+ pet->setFaction(getFaction());
- pet->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- pet->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ pet->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ pet->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
pet->InitStatsForLevel(getLevel());
SetMinion(pet, true);
@@ -27802,12 +27741,12 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
case SUMMON_PET:
// this enables pet details window (Shift+P)
pet->GetCharmInfo()->SetPetNumber(pet_number, true);
- pet->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE);
- pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
- pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 1000);
+ pet->SetClass(CLASS_MAGE);
+ pet->SetPetExperience(0);
+ pet->SetPetNextLevelExperience(1000);
pet->SetFullHealth();
pet->SetFullPower(POWER_MANA);
- pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(nullptr))); // cast can't be helped in this case
+ pet->SetPetNameTimestamp(uint32(time(nullptr)));
break;
default:
break;
@@ -27836,7 +27775,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
bool Player::CanUseMastery() const
{
- if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)))
+ if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization()))
return HasSpell(chrSpec->MasterySpellID[0]) || HasSpell(chrSpec->MasterySpellID[1]);
return false;
@@ -28028,7 +27967,7 @@ void Player::RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId)
void Player::LearnSpecializationSpells()
{
- if (std::vector<SpecializationSpellsEntry const*> const* specSpells = sDB2Manager.GetSpecializationSpells(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)))
+ if (std::vector<SpecializationSpellsEntry const*> const* specSpells = sDB2Manager.GetSpecializationSpells(GetPrimarySpecialization()))
{
for (size_t j = 0; j < specSpells->size(); ++j)
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index c9bc2b7d020..922ecf09ee3 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -90,6 +90,8 @@ enum InventoryType : uint8;
enum ItemClass : uint8;
enum LootError : uint8;
enum LootType : uint8;
+enum PlayerRestState : uint8;
+enum RestTypes : uint8;
namespace WorldPackets
{
@@ -120,7 +122,7 @@ enum SkillFieldOffset : uint16
SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + CalculateSkillFieldArraySize<uint16>()
};
-#define PLAYER_EXPLORED_ZONES_SIZE 320
+#define PLAYER_EXPLORED_ZONES_SIZE 160
// Note: SPELLMOD_* values is aura types in fact
enum SpellModType : uint8
@@ -449,61 +451,6 @@ enum PlayerLocalFlags
PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured
};
-enum PlayerBytesOffsets
-{
- PLAYER_BYTES_OFFSET_SKIN_ID = 0,
- PLAYER_BYTES_OFFSET_FACE_ID = 1,
- PLAYER_BYTES_OFFSET_HAIR_STYLE_ID = 2,
- PLAYER_BYTES_OFFSET_HAIR_COLOR_ID = 3
-};
-
-enum PlayerBytes2Offsets
-{
- PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION = 0, // 3 bytes
- PLAYER_BYTES_2_OFFSET_FACIAL_STYLE = 3
-};
-
-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
-};
-
-enum PlayerBytes4Offsets
-{
- PLAYER_BYTES_4_OFFSET_PVP_TITLE = 0,
- PLAYER_BYTES_4_OFFSET_ARENA_FACTION = 1
-};
-
-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
-};
-
-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
-{
- PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID = 0 // uint16!
-};
-
-static_assert((PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID & 1) == 0, "PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID must be aligned to 2 byte boundary");
-
-#define PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET (PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID / 2)
-
-#define KNOWN_TITLES_SIZE 6
-#define MAX_TITLE_INDEX (KNOWN_TITLES_SIZE * 64) // 4 uint64 fields
-
// used in PLAYER_FIELD_BYTES2 values
enum PlayerFieldByte2Flags
{
@@ -512,12 +459,6 @@ enum PlayerFieldByte2Flags
PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW = 0x40
};
-enum PlayerFieldKillsOffsets
-{
- PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS = 0,
- PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS = 1
-};
-
enum MirrorTimerType
{
FATIGUE_TIMER = 0,
@@ -958,23 +899,22 @@ struct BGData
struct VoidStorageItem
{
- VoidStorageItem() : ItemId(0), ItemEntry(0), ItemRandomPropertyId(), ItemSuffixFactor(0), ItemUpgradeId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0) { }
- VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomEnchantmentId randomPropertyId, uint32 suffixFactor,
- uint32 upgradeId, uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<uint32> const& bonuses)
+ VoidStorageItem() : ItemId(0), ItemEntry(0), ItemRandomPropertyId(), ItemUpgradeId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0), Context(0) { }
+ VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomEnchantmentId randomPropertyId,
+ uint32 upgradeId, uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<int32> const& bonuses)
: ItemId(id), ItemEntry(entry), CreatorGuid(creator), ItemRandomPropertyId(randomPropertyId),
- ItemSuffixFactor(suffixFactor), ItemUpgradeId(upgradeId), FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context)
+ ItemUpgradeId(upgradeId), FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context)
{
BonusListIDs.insert(BonusListIDs.end(), bonuses.begin(), bonuses.end());
}
- VoidStorageItem(VoidStorageItem&& vsi) : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), ItemRandomPropertyId(vsi.ItemRandomPropertyId),
- ItemSuffixFactor(vsi.ItemSuffixFactor), ItemUpgradeId(vsi.ItemUpgradeId), FixedScalingLevel(vsi.FixedScalingLevel),
+ VoidStorageItem(VoidStorageItem&& vsi) noexcept : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), ItemRandomPropertyId(vsi.ItemRandomPropertyId),
+ ItemUpgradeId(vsi.ItemUpgradeId), FixedScalingLevel(vsi.FixedScalingLevel),
ArtifactKnowledgeLevel(vsi.ArtifactKnowledgeLevel), Context(vsi.Context), BonusListIDs(std::move(vsi.BonusListIDs)) { }
uint64 ItemId;
uint32 ItemEntry;
ObjectGuid CreatorGuid;
ItemRandomEnchantmentId ItemRandomPropertyId;
- uint32 ItemSuffixFactor;
uint32 ItemUpgradeId;
uint32 FixedScalingLevel;
uint32 ArtifactKnowledgeLevel;
@@ -1012,8 +952,10 @@ enum TalentLearnResult
struct TC_GAME_API SpecializationInfo
{
- SpecializationInfo() : ResetTalentsCost(0), ResetTalentsTime(0), PrimarySpecialization(0), ActiveGroup(0)
+ SpecializationInfo() : PvpTalents(), ResetTalentsCost(0), ResetTalentsTime(0), ActiveGroup(0)
{
+ for (PlayerPvpTalentMap& pvpTalents : PvpTalents)
+ pvpTalents.fill(0);
}
PlayerTalentMap Talents[MAX_SPECIALIZATIONS];
@@ -1021,7 +963,6 @@ struct TC_GAME_API SpecializationInfo
std::vector<uint32> Glyphs[MAX_SPECIALIZATIONS];
uint32 ResetTalentsCost;
time_t ResetTalentsTime;
- uint32 PrimarySpecialization;
uint8 ActiveGroup;
private:
@@ -1080,14 +1021,14 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool welcome) const;
bool CanInteractWithQuestGiver(Object* questGiver) const;
- Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflagmask) const;
+ Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const;
GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid) const;
GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const;
void ToggleAFK();
void ToggleDND();
- bool isAFK() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); }
- bool isDND() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); }
+ bool isAFK() const { return HasPlayerFlag(PLAYER_FLAGS_AFK); }
+ bool isDND() const { return HasPlayerFlag(PLAYER_FLAGS_DND); }
uint8 GetChatFlags() const;
std::string autoReplyMsg;
@@ -1184,13 +1125,18 @@ 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(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS); }
+ uint8 GetInventorySlotCount() const { return m_activePlayerData->NumBackpackSlots; }
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); }
+ uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; }
+ void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); }
bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const;
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
+ void SetNoRegentCostMask(flag128 mask)
+ {
+ for (uint8 i = 0; i < 4; ++i)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NoReagentCostMask, i), mask[i]);
+ }
bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const;
bool HasItemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
bool HasGemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
@@ -1261,6 +1207,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
*/
void ModifyCurrency(uint32 id, int32 count, bool printLog = true, bool ignoreMultipliers = false);
+ void SetInvSlot(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::InvSlots, slot), guid); }
+
void ApplyEquipCooldown(Item* pItem);
void QuickEquipItem(uint16 pos, Item* pItem);
void VisualizeItem(uint8 slot, Item* pItem);
@@ -1280,6 +1228,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SplitItem(uint16 src, uint16 dst, uint32 count);
void SwapItem(uint16 src, uint16 dst);
void AddItemToBuyBackSlot(Item* pItem);
+ void SetBuybackPrice(uint32 slot, uint32 price) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackPrice, slot), price); }
+ void SetBuybackTimestamp(uint32 slot, uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackTimestamp, slot), timestamp); }
Item* GetItemFromBuyBackSlot(uint32 slot);
void RemoveItemFromBuyBackSlot(uint32 slot, bool del);
void SendEquipError(InventoryResult msg, Item* item1 = nullptr, Item* item2 = nullptr, uint32 itemId = 0) const;
@@ -1521,7 +1471,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void setRegenTimerCount(uint32 time) {m_regenTimerCount = time;}
void setWeaponChangeTimer(uint32 time) {m_weaponChangeTimer = time;}
- uint64 GetMoney() const { return GetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE); }
+ uint64 GetMoney() const { return m_activePlayerData->Coinage; }
bool ModifyMoney(int64 amount, bool sendError = true);
bool HasEnoughMoney(uint64 amount) const { return (GetMoney() >= amount); }
bool HasEnoughMoney(int64 amount) const;
@@ -1537,7 +1487,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
Player* GetSelectedPlayer() const;
void SetTarget(ObjectGuid const& /*guid*/) override { } /// Used for serverside target changes, does not apply to players
- void SetSelection(ObjectGuid const& guid) { SetGuidValue(UNIT_FIELD_TARGET, guid); }
+ void SetSelection(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid); }
uint32 GetComboPoints() const { return uint32(GetPower(POWER_COMBO_POINTS)); }
void AddComboPoints(int8 count, Spell* spell = nullptr);
@@ -1602,6 +1552,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void LearnSpellHighestRank(uint32 spellid);
void AddTemporarySpell(uint32 spellId);
void RemoveTemporarySpell(uint32 spellId);
+ void SetOverrideSpellsId(int32 overrideSpellsId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellsID), overrideSpellsId); }
void AddOverrideSpell(uint32 overridenSpellId, uint32 newSpellId);
void RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId);
void LearnSpecializationSpells();
@@ -1613,16 +1564,16 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
std::string GetGuildName() const;
// Loot Spec
- void SetLootSpecId(uint32 id) { SetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID, id); }
- uint32 GetLootSpecId() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID); }
+ void SetLootSpecId(uint32 id) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LootSpecID), id); }
+ uint32 GetLootSpecId() const { return m_activePlayerData->LootSpecID; }
// Talents
uint32 GetTalentResetCost() const { return _specializationInfo.ResetTalentsCost; }
void SetTalentResetCost(uint32 cost) { _specializationInfo.ResetTalentsCost = cost; }
time_t GetTalentResetTime() const { return _specializationInfo.ResetTalentsTime; }
void SetTalentResetTime(time_t time_) { _specializationInfo.ResetTalentsTime = time_; }
- uint32 GetPrimarySpecialization() const { return _specializationInfo.PrimarySpecialization; }
- void SetPrimarySpecialization(uint32 spec) { _specializationInfo.PrimarySpecialization = spec; }
+ uint32 GetPrimarySpecialization() const { return m_playerData->CurrentSpecID; }
+ void SetPrimarySpecialization(uint32 spec) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentSpecID), spec); }
uint8 GetActiveTalentGroup() const { return _specializationInfo.ActiveGroup; }
void SetActiveTalentGroup(uint8 group){ _specializationInfo.ActiveGroup = group; }
uint32 GetDefaultSpecId() const;
@@ -1660,8 +1611,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
std::vector<uint32>& GetGlyphs(uint8 spec) { return _specializationInfo.Glyphs[spec]; }
ActionButtonList const& GetActionButtons() const { return m_actionButtons; }
- uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS); }
- void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS, profs); }
+ uint32 GetFreePrimaryProfessionPoints() const { return m_activePlayerData->CharacterPoints; }
+ void SetFreePrimaryProfessions(uint16 profs) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterPoints), profs); }
void InitPrimaryProfessions();
PlayerSpellMap const& GetSpellMap() const { return m_spells; }
@@ -1710,6 +1661,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendInitialActionButtons() const { SendActionButtons(0); }
void SendActionButtons(uint32 state) const;
bool IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) const;
+ void SetMultiActionBars(uint8 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MultiActionBars), mask); }
PvPInfo pvpInfo;
void UpdatePvPState(bool onlyFFA = false);
@@ -1731,6 +1683,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void UpdateDuelFlag(time_t currTime);
void CheckDuelDistance(time_t currTime);
void DuelComplete(DuelCompleteType type);
+ void SetDuelArbiter(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelArbiter), guid); }
+ void SetDuelTeam(uint32 duelTeam) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelTeam), duelTeam); }
bool IsGroupVisibleFor(Player const* p) const;
bool IsInSameGroupWith(Player const* p) const;
@@ -1741,12 +1695,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendUpdateToOutOfRangeGroupMembers();
void SetInGuild(ObjectGuid::LowType guildId);
- void SetGuildRank(uint8 rankId) { SetUInt32Value(PLAYER_GUILDRANK, rankId); }
- uint8 GetGuildRank() const { return uint8(GetUInt32Value(PLAYER_GUILDRANK)); }
- void SetGuildLevel(uint32 level) { SetUInt32Value(PLAYER_GUILDLEVEL, level); }
- uint32 GetGuildLevel() const { return GetUInt32Value(PLAYER_GUILDLEVEL); }
+ void SetGuildRank(uint8 rankId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildRankID), rankId); }
+ uint8 GetGuildRank() const { return uint8(m_playerData->GuildRankID); }
+ void SetGuildLevel(uint32 level) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildLevel), level); }
+ uint32 GetGuildLevel() const { return m_playerData->GuildLevel; }
void SetGuildIdInvited(ObjectGuid::LowType GuildId) { m_GuildIdInvited = GuildId; }
- ObjectGuid::LowType GetGuildId() const { return GetUInt64Value(UNIT_FIELD_GUILD_GUID); /* return only lower part */ }
+ ObjectGuid::LowType GetGuildId() const { return m_unitData->GuildGUID->GetCounter(); /* return only lower part */ }
Guild* GetGuild();
Guild const* GetGuild() const;
static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid);
@@ -1759,11 +1713,11 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value);
static uint32 GetArenaTeamIdFromDB(ObjectGuid guid, uint8 slot);
static void LeaveAllArenaTeams(ObjectGuid guid);
- uint32 GetArenaTeamId(uint8 slot) const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + ARENA_TEAM_ID); }
- uint32 GetArenaPersonalRating(uint8 slot) const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + ARENA_TEAM_PERSONAL_RATING); }
+ uint32 GetArenaTeamId(uint8 /*slot*/) const { return 0; }
+ uint32 GetArenaPersonalRating(uint8 slot) const { return m_activePlayerData->PvpInfo[slot].Rating; }
void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
uint32 GetArenaTeamIdInvited() const { return m_ArenaTeamIdInvited; }
- uint32 GetRBGPersonalRating() const { return 0; }
+ uint32 GetRBGPersonalRating() const { return m_activePlayerData->PvpInfo[3].Rating; }
Difficulty GetDifficultyID(MapEntry const* mapEntry) const;
Difficulty GetDungeonDifficultyID() const { return m_dungeonDifficulty; }
@@ -1787,6 +1741,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool UpdateStats(Stats stat) override;
bool UpdateAllStats() override;
void ApplySpellPenetrationBonus(int32 amount, bool apply);
+ void ApplyModTargetResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), mod, apply); }
+ void ApplyModTargetPhysicalResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), mod, apply); }
void UpdateResistances(uint32 school) override;
void UpdateArmor() override;
void UpdateMaxHealth() override;
@@ -1795,6 +1751,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void UpdateAttackPowerAndDamage(bool ranged = false) override;
void ApplySpellPowerBonus(int32 amount, bool apply);
void UpdateSpellDamageAndHealingBonus();
+ void ApplyModDamageDonePos(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, school), mod, apply); }
+ void ApplyModDamageDoneNeg(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, school), mod, apply); }
+ void ApplyModDamageDonePercent(SpellSchools school, float pct, bool apply) { ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, school), pct, apply); }
void ApplyRatingMod(CombatRating cr, int32 value, bool apply);
void UpdateRating(CombatRating cr);
void UpdateAllRatings();
@@ -1832,8 +1791,10 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void UpdateManaRegen();
void UpdateAllRunesRegen();
- ObjectGuid const& GetLootGUID() const { return GetGuidValue(PLAYER_LOOT_TARGET_GUID); }
- void SetLootGUID(ObjectGuid const& guid) { SetGuidValue(PLAYER_LOOT_TARGET_GUID, guid); }
+ void SetPetSpellPower(uint32 spellPower) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::PetSpellPower), spellPower); }
+
+ ObjectGuid const& GetLootGUID() const { return m_playerData->LootTargetGUID; }
+ void SetLootGUID(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::LootTargetGUID), guid); }
ObjectGuid GetLootWorldObjectGUID(ObjectGuid const& lootObjectGuid) const;
void RemoveAELootedObject(ObjectGuid const& lootObjectGuid);
bool HasLootWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const;
@@ -1844,7 +1805,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
WorldSession* GetSession() const { return m_session; }
void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
+ UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override;
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void DestroyForPlayer(Player* target) const override;
+ void ClearUpdateMask(bool remove) override;
// notifiers
void SendAttackSwingCantAttack() const;
@@ -1906,6 +1872,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
typedef std::list<Channel*> JoinedChannelsList;
JoinedChannelsList const& GetJoinedChannels() const { return m_channels; }
+ void InitializeSkillFields();
void SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal);
uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus + temp bonus
uint16 GetPureMaxSkillValue(uint32 skill) const; // max
@@ -1918,6 +1885,13 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool HasSkill(uint32 skill) const;
void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue);
int32 FindProfessionSlotFor(uint32 skillId) const;
+ void SetSkillLineId(uint32 pos, uint16 skillLineId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillLineID, pos), skillLineId); }
+ void SetSkillStep(uint32 pos, uint16 step) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStep, pos), step); };
+ void SetSkillRank(uint32 pos, uint16 rank) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillRank, pos), rank); }
+ void SetSkillStartingRank(uint32 pos, uint16 starting) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStartingRank, pos), starting); }
+ void SetSkillMaxRank(uint32 pos, uint16 max) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillMaxRank, pos), max); }
+ void SetSkillTempBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillTempBonus, pos), bonus); }
+ void SetSkillPermBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillPermBonus, pos), bonus); }
WorldLocation& GetTeleportDest() { return m_teleport_dest; }
bool IsBeingTeleported() const { return mSemaphoreTeleport_Near || mSemaphoreTeleport_Far; }
@@ -1929,6 +1903,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void ProcessDelayedOperations();
void CheckAreaExploreAndOutdoor(void);
+ void AddExploredZones(uint32 pos, uint64 mask) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); }
+ void RemoveExploredZones(uint32 pos, uint64 mask) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); }
static uint32 TeamForRace(uint8 race);
static TeamId TeamIdForRace(uint8 race);
@@ -1966,6 +1942,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
// TODO: Properly implement correncies as of Cataclysm
void UpdateHonorFields();
bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false);
+ void ResetHonorStats();
uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
// duel health and mana reset methods
@@ -1974,7 +1951,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); }
void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); }
- uint32 GetHonorLevel() const { return GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL); }
+ uint32 GetHonorLevel() const { return m_playerData->HonorLevel; }
void AddHonorXP(uint32 xp);
void SetHonorLevel(uint8 honorLevel);
bool IsMaxHonorLevel() const { return GetHonorLevel() == PLAYER_MAX_HONOR_LEVEL; }
@@ -1986,7 +1963,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry);
void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0);
- uint8 GetDrunkValue() const { return GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION); }
+ uint8 GetDrunkValue() const { return m_playerData->Inebriation; }
static DrunkenState GetDrunkenstateByValue(uint8 value);
uint32 GetDeathTimer() const { return m_deathTimer; }
@@ -1995,7 +1972,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
int32 CalculateCorpseReclaimDelay(bool load = false) const;
void SendCorpseReclaimDelay(uint32 delay) const;
- uint32 GetBlockPercent() const override { return GetUInt32Value(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK); }
+ uint32 GetBlockPercent() const override { return m_activePlayerData->ShieldBlock; }
bool CanParry() const { return m_canParry; }
void SetCanParry(bool value);
bool CanBlock() const { return m_canBlock; }
@@ -2284,7 +2261,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SetMap(Map* map) override;
void ResetMap() override;
- bool isAllowedToLoot(const Creature* creature);
+ bool isAllowedToLoot(const Creature* creature) const;
DeclinedName const* GetDeclinedNames() const { return m_declinedname; }
uint8 GetRunesState() const;
@@ -2308,6 +2285,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool HasTitle(uint32 bitIndex) const;
bool HasTitle(CharTitlesEntry const* title) const;
void SetTitle(CharTitlesEntry const* title, bool lost = false);
+ void SetChosenTitle(int32 title) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerTitle), title); }
+ void SetKnownTitles(uint32 index, uint64 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, index), mask); }
//bool isActiveObject() const { return true; }
bool CanSeeSpellClickOn(Creature const* creature) const;
@@ -2337,9 +2316,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
std::string GetCoordsMapAreaAndZoneString() const;
// Void Storage
- bool IsVoidStorageUnlocked() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); }
- void UnlockVoidStorage() { SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); }
- void LockVoidStorage() { RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); }
+ bool IsVoidStorageUnlocked() const { return HasPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
+ void UnlockVoidStorage() { AddPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
+ void LockVoidStorage() { RemovePlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
uint8 GetNextVoidStorageFreeSlot() const;
uint8 GetNumOfVoidStorageFreeSlots() const;
uint8 AddVoidStorageItem(VoidStorageItem&& item);
@@ -2359,11 +2338,107 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
SceneMgr& GetSceneMgr() { return m_sceneMgr; }
RestMgr& GetRestMgr() const { return *_restMgr; }
+ void SetRestState(RestTypes type, PlayerRestState state)
+ {
+ SetUpdateFieldValue(m_values
+ .ModifyValue(&Player::m_activePlayerData)
+ .ModifyValue(&UF::ActivePlayerData::RestInfo, type)
+ .ModifyValue(&UF::RestInfo::StateID), state);
+ }
+ void SetRestThreshold(RestTypes type, uint32 threshold)
+ {
+ SetUpdateFieldValue(m_values
+ .ModifyValue(&Player::m_activePlayerData)
+ .ModifyValue(&UF::ActivePlayerData::RestInfo, type)
+ .ModifyValue(&UF::RestInfo::Threshold), threshold);
+ }
void SendPlayerChoice(ObjectGuid sender, int32 choiceId);
bool MeetPlayerCondition(uint32 conditionId) const;
+ bool HasPlayerFlag(PlayerFlags flags) const { return (*m_playerData->PlayerFlags & flags) != 0; }
+ void AddPlayerFlag(PlayerFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
+ void RemovePlayerFlag(PlayerFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
+ void SetPlayerFlags(PlayerFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
+
+ bool HasPlayerFlagEx(PlayerFlagsEx flags) const { return (*m_playerData->PlayerFlagsEx & flags) != 0; }
+ void AddPlayerFlagEx(PlayerFlagsEx flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
+ void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
+ void SetPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
+
+ void SetSkinId(uint8 skinId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::SkinID), skinId); }
+ void SetFaceId(uint8 faceId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FaceID), faceId); }
+ void SetHairStyleId(uint8 hairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HairStyleID), hairStyleId); }
+ void SetHairColorId(uint8 hairColorId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HairColorID), hairColorId); }
+ void SetFacialHairStyleId(uint8 facialHairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FacialHairStyleID), facialHairStyleId); }
+ void SetNativeSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::NativeSex), sex); }
+ void SetPvpTitle(uint8 pvpTitle) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PvpTitle), pvpTitle); }
+ void SetArenaFaction(uint8 arenaFaction) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::ArenaFaction), arenaFaction); }
+ void ApplyModFakeInebriation(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FakeInebriation), mod, apply); }
+ void SetVirtualPlayerRealm(uint32 virtualRealmAddress) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VirtualPlayerRealm), virtualRealmAddress); }
+ void SetCustomDisplayOption(uint32 slot, uint8 customDisplayOption) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CustomDisplayOption, slot), customDisplayOption); }
+
+ void AddHeirloom(int32 itemId, uint32 flags)
+ {
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms)) = itemId;
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags)) = flags;
+ }
+ void SetHeirloom(uint32 slot, int32 itemId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms, slot), itemId); }
+ void SetHeirloomFlags(uint32 slot, uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags, slot), flags); }
+
+ void AddToy(int32 itemId, uint32 flags)
+ {
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Toys)) = itemId;
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ToyFlags)) = flags;
+ }
+
+ void AddTransmogBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog)) = blockValue; }
+ void AddTransmogFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog, slot), flag); }
+
+ void AddConditionalTransmog(uint32 itemModifiedAppearanceId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog)) = itemModifiedAppearanceId; }
+ void RemoveConditionalTransmog(uint32 itemModifiedAppearanceId)
+ {
+ int32 index = m_activePlayerData->ConditionalTransmog.FindIndex(itemModifiedAppearanceId);
+ if (index >= 0)
+ RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog), uint32(index));
+ }
+ void AddSelfResSpell(int32 spellId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)) = spellId; }
+ void RemoveSelfResSpell(int32 spellId)
+ {
+ int32 index = m_activePlayerData->SelfResSpells.FindIndex(spellId);
+ if (index >= 0)
+ RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells), uint32(index));
+ }
+ void ClearSelfResSpell() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)); }
+
+ void SetSummonedBattlePetGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SummonedBattlePetGUID), guid); }
+
+ void AddTrackCreatureFlag(uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); }
+ void RemoveTrackCreatureFlag(uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); }
+
+ void AddTrackResourceFlag(uint32 index, uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); }
+ void RemoveTrackResourceFlag(uint32 index, uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); }
+
+ void SetVersatilityBonus(float value) { SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::VersatilityBonus), value); }
+
+ void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellPowerByAPPercent), mod, apply); }
+
+ void ApplyModOverrideAPBySpellPowerPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideAPBySpellPowerPercent), mod, apply); }
+
+ bool HasPlayerLocalFlag(PlayerLocalFlags flags) const { return (*m_activePlayerData->LocalFlags & flags) != 0; }
+ void AddPlayerLocalFlag(PlayerLocalFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); }
+ void RemovePlayerLocalFlag(PlayerLocalFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); }
+ void SetPlayerLocalFlags(PlayerLocalFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); }
+
+ void SetWatchedFactionIndex(int32 index) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WatchedFactionIndex), index); }
+
+ void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
+ void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
+
+ UF::UpdateField<UF::PlayerData, 0, TYPEID_PLAYER> m_playerData;
+ UF::UpdateField<UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER> m_activePlayerData;
+
protected:
// Gamemaster whisper whitelist
GuidList WhisperList;
diff --git a/src/server/game/Entities/Player/RestMgr.cpp b/src/server/game/Entities/Player/RestMgr.cpp
index 32e5496c285..32ef7f7dfdf 100644
--- a/src/server/game/Entities/Player/RestMgr.cpp
+++ b/src/server/game/Entities/Player/RestMgr.cpp
@@ -32,7 +32,7 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus)
{
uint8 rest_rested_offset;
uint8 rest_state_offset;
- uint16 next_level_xp_field;
+ int32 next_level_xp;
bool affectedByRaF = false;
switch (restType)
@@ -44,7 +44,7 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus)
rest_rested_offset = REST_RESTED_XP;
rest_state_offset = REST_STATE_XP;
- next_level_xp_field = ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP;
+ next_level_xp = _player->m_activePlayerData->NextLevelXP;
affectedByRaF = true;
break;
case REST_TYPE_HONOR:
@@ -54,35 +54,39 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus)
rest_rested_offset = REST_RESTED_HONOR;
rest_state_offset = REST_STATE_HONOR;
- next_level_xp_field = ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL;
+ next_level_xp = _player->m_activePlayerData->HonorNextLevel;
break;
default:
return;
}
+ float rest_bonus_max = float(next_level_xp) * 1.5f / 2;
+
if (restBonus < 0)
restBonus = 0;
- float rest_bonus_max = float(_player->GetUInt32Value(next_level_xp_field)) * 1.5f / 2;
-
if (restBonus > rest_bonus_max)
- _restBonus[restType] = rest_bonus_max;
- else
- _restBonus[restType] = restBonus;
+ restBonus = rest_bonus_max;
+
+ _restBonus[restType] = restBonus;
+
+ uint32 oldBonus = uint32(_restBonus[restType]);
+ if (oldBonus == uint32(restBonus))
+ return;
// update data for client
if (affectedByRaF && _player->GetsRecruitAFriendBonus(true) && (_player->GetSession()->IsARecruiter() || _player->GetSession()->GetRecruiterId() != 0))
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RAF_LINKED);
+ _player->SetRestState(restType, REST_STATE_RAF_LINKED);
else
{
if (_restBonus[restType] > 10)
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RESTED);
+ _player->SetRestState(restType, REST_STATE_RESTED);
else if (_restBonus[restType] <= 1)
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_NOT_RAF_LINKED);
+ _player->SetRestState(restType, REST_STATE_NOT_RAF_LINKED);
}
// RestTickUpdate
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_rested_offset, uint32(_restBonus[restType]));
+ _player->SetRestThreshold(restType, uint32(_restBonus[restType]));
}
void RestMgr::AddRestBonus(RestTypes restType, float restBonus)
@@ -103,7 +107,7 @@ void RestMgr::SetRestFlag(RestFlag restFlag, uint32 triggerID)
if (!oldRestMask && _restFlagMask) // only set flag/time on the first rest state
{
_restTime = time(nullptr);
- _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ _player->AddPlayerFlag(PLAYER_FLAGS_RESTING);
}
if (triggerID)
@@ -118,7 +122,7 @@ void RestMgr::RemoveRestFlag(RestFlag restFlag)
if (oldRestMask && !_restFlagMask) // only remove flag/time on the last rest state remove
{
_restTime = 0;
- _player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ _player->RemovePlayerFlag(PLAYER_FLAGS_RESTING);
}
}
@@ -153,8 +157,8 @@ void RestMgr::Update(time_t now)
void RestMgr::LoadRestBonus(RestTypes restType, PlayerRestState state, float restBonus)
{
_restBonus[restType] = restBonus;
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2, state);
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2 + 1, uint32(restBonus));
+ _player->SetRestState(restType, state);
+ _player->SetRestThreshold(restType, uint32(restBonus));
}
float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const
@@ -162,9 +166,9 @@ float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const
switch (restType)
{
case REST_TYPE_HONOR:
- return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL)) / 72000.0f * bubble;
+ return float(_player->m_activePlayerData->HonorNextLevel) / 72000.0f * bubble;
case REST_TYPE_XP:
- return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP)) / 72000.0f * bubble;
+ return float(_player->m_activePlayerData->NextLevelXP) / 72000.0f * bubble;
default:
return 0.0f;
}
diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp
index 34dfabb65e9..2c17b7fbfb3 100644
--- a/src/server/game/Entities/Totem/Totem.cpp
+++ b/src/server/game/Entities/Totem/Totem.cpp
@@ -62,12 +62,12 @@ void Totem::InitStats(uint32 duration)
data.Totem = GetGUID();
data.Slot = m_Properties->Slot - SUMMON_SLOT_TOTEM;
data.Duration = duration;
- data.SpellID = GetUInt32Value(UNIT_CREATED_BY_SPELL);
+ data.SpellID = m_unitData->CreatedBySpell;
owner->SendDirectMessage(data.Write());
}
// set display id depending on caster's race
- if (uint32 totemDisplayId = sSpellMgr->GetModelForTotem(GetUInt32Value(UNIT_CREATED_BY_SPELL), owner->getRace()))
+ if (uint32 totemDisplayId = sSpellMgr->GetModelForTotem(m_unitData->CreatedBySpell, owner->getRace()))
SetDisplayId(totemDisplayId);
}
@@ -121,7 +121,7 @@ void Totem::UnSummon(uint32 msTime)
{
owner->SendAutoRepeatCancel(this);
- if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(GetUInt32Value(UNIT_CREATED_BY_SPELL)))
+ if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_unitData->CreatedBySpell))
GetSpellHistory()->SendCooldownEvent(spell, 0, nullptr, false);
if (Group* group = owner->GetGroup())
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 13b02608c10..973082b2252 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -90,7 +90,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid,
if (m_goTemplateAddon)
{
SetFaction(m_goTemplateAddon->faction);
- SetUInt32Value(GAMEOBJECT_FLAGS, m_goTemplateAddon->flags);
+ SetFlags(GameObjectFlags(m_goTemplateAddon->flags));
}
m_goValue.Transport.PathProgress = 0;
@@ -472,7 +472,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
PhasingHandler::InheritPhaseShift(summon, summoner ? static_cast<WorldObject*>(summoner) : static_cast<WorldObject*>(this));
- summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId);
+ summon->SetCreatedBySpell(spellId);
summon->SetTransport(this);
summon->m_movementInfo.transport.guid = GetGUID();
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 07ce2ad940c..92861655ebb 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -80,8 +80,8 @@ class TC_GAME_API Transport : public GameObject, public TransportBase
TransportBase::CalculatePassengerOffset(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
}
- uint32 GetTransportPeriod() const override { return GetUInt32Value(GAMEOBJECT_LEVEL); }
- void SetPeriod(uint32 period) { SetUInt32Value(GAMEOBJECT_LEVEL, period); }
+ uint32 GetTransportPeriod() const override { return m_gameObjectData->Level; }
+ void SetPeriod(uint32 period) { SetLevel(period); }
uint32 GetTimer() const { return GetGOValue()->Transport.PathProgress; }
KeyFrameVec const& GetKeyFrames() const { return _transportInfo->keyFrames; }
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 998edbdbbee..c228b2a5a3c 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -74,16 +74,16 @@ void Unit::UpdateDamagePhysical(WeaponAttackType attType)
{
case BASE_ATTACK:
default:
- SetStatFloatValue(UNIT_FIELD_MINDAMAGE, minDamage);
- SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), minDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), maxDamage);
break;
case OFF_ATTACK:
- SetStatFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, minDamage);
- SetStatFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, maxDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinOffHandDamage), minDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxOffHandDamage), maxDamage);
break;
case RANGED_ATTACK:
- SetStatFloatValue(UNIT_FIELD_MINRANGEDDAMAGE, minDamage);
- SetStatFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, maxDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinRangedDamage), minDamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxRangedDamage), maxDamage);
break;
}
}
@@ -160,9 +160,9 @@ void Player::ApplySpellPowerBonus(int32 amount, bool apply)
apply = _ModifyUInt32(apply, m_baseSpellPower, amount);
// For speed just update for client
- ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, amount, apply);
+ ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), amount, apply);
for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, amount, apply);
+ ApplyModDamageDonePos(SpellSchools(i), amount, apply);
if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT))
{
@@ -176,18 +176,20 @@ void Player::UpdateSpellDamageAndHealingBonus()
// Magic damage modifiers implemented in Unit::SpellDamageBonusDone
// This information for client side use only
// Get healing bonus for all schools
- SetStatInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, SpellBaseHealingBonusDone(SPELL_SCHOOL_MASK_ALL));
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), SpellBaseHealingBonusDone(SPELL_SCHOOL_MASK_ALL));
// Get damage bonus for all schools
Unit::AuraEffectList const& modDamageAuras = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE);
for (uint16 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
{
- SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, std::accumulate(modDamageAuras.begin(), modDamageAuras.end(), 0, [i](int32 negativeMod, AuraEffect const* aurEff)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, i),
+ std::accumulate(modDamageAuras.begin(), modDamageAuras.end(), 0, [i](int32 negativeMod, AuraEffect const* aurEff)
{
if (aurEff->GetAmount() < 0 && aurEff->GetMiscValue() & (1 << i))
negativeMod += aurEff->GetAmount();
return negativeMod;
}));
- SetStatInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i));
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, i),
+ SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - m_activePlayerData->ModDamageDoneNeg[i]);
}
if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT))
@@ -231,7 +233,7 @@ bool Player::UpdateAllStats()
void Player::ApplySpellPenetrationBonus(int32 amount, bool apply)
{
- ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, -amount, apply);
+ ApplyModTargetResistance(-amount, apply);
m_spellPenetrationItemMod += apply ? amount : -amount;
}
@@ -330,17 +332,6 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
ChrClassesEntry const* entry = sChrClassesStore.AssertEntry(getClass());
UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER;
- uint16 index = UNIT_FIELD_ATTACK_POWER;
- uint16 index_mod = UNIT_FIELD_ATTACK_POWER_MOD_POS;
- uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;
-
- if (ranged)
- {
- index = UNIT_FIELD_RANGED_ATTACK_POWER;
- index_mod = UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS;
- index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;
- }
-
if (!HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT))
{
if (!ranged)
@@ -360,11 +351,11 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
}
else
{
- int32 minSpellPower = GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS);
+ int32 minSpellPower = m_activePlayerData->ModHealingDonePos;
for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- minSpellPower = std::min(minSpellPower, GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i));
+ minSpellPower = std::min(minSpellPower, m_activePlayerData->ModDamageDonePos[i]);
- val2 = CalculatePct(float(minSpellPower), GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT));
+ val2 = CalculatePct(float(minSpellPower), *m_activePlayerData->OverrideAPBySpellPowerPercent);
}
SetModifierValue(unitMod, BASE_VALUE, val2);
@@ -382,9 +373,18 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
attPowerMod += int32(GetArmor() / (*iter)->GetAmount());
}
- SetInt32Value(index, (uint32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER field
- SetInt32Value(index_mod, (uint32)attPowerMod); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MOD_POS field
- SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field
+ if (ranged)
+ {
+ SetRangedAttackPower(int32(base_attPower));
+ SetRangedAttackPowerModPos(int32(attPowerMod));
+ SetRangedAttackPowerMultiplier(attPowerMultiplier);
+ }
+ else
+ {
+ SetAttackPower(int32(base_attPower));
+ SetAttackPowerModPos(int32(attPowerMod));
+ SetAttackPowerMultiplier(attPowerMultiplier);
+ }
Pet* pet = GetPet(); //update pet's AP
Guardian* guardian = GetGuardianPet();
@@ -485,47 +485,35 @@ void Player::UpdateBlockPercentage()
if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) : value;
-
- value = value < 0.0f ? 0.0f : value;
}
- SetStatFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, value);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BlockPercentage), value);
}
void Player::UpdateCritPercentage(WeaponAttackType attType)
{
- BaseModGroup modGroup;
- uint16 index;
- CombatRating cr;
+ auto applyCritLimit = [](float value)
+ {
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value;
+ return value;
+ };
switch (attType)
{
case OFF_ATTACK:
- modGroup = OFFHAND_CRIT_PERCENTAGE;
- index = ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE;
- cr = CR_CRIT_MELEE;
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandCritPercentage),
+ applyCritLimit(GetTotalPercentageModValue(OFFHAND_CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_MELEE)));
break;
case RANGED_ATTACK:
- modGroup = RANGED_CRIT_PERCENTAGE;
- index = ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE;
- cr = CR_CRIT_RANGED;
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RangedCritPercentage),
+ applyCritLimit(GetTotalPercentageModValue(RANGED_CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_RANGED)));
break;
case BASE_ATTACK:
default:
- modGroup = CRIT_PERCENTAGE;
- index = ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE;
- cr = CR_CRIT_MELEE;
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CritPercentage),
+ applyCritLimit(GetTotalPercentageModValue(CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_MELEE)));
break;
}
-
- float value = GetTotalPercentageModValue(modGroup) + GetRatingBonusValue(cr);
- // Modify crit from weapon skill and maximized defense skill of same level victim difference
- value += (int32(GetMaxSkillValueForLevel()) - int32(GetMaxSkillValueForLevel())) * 0.04f;
-
- if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
- value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value;
-
- value = value < 0.0f ? 0.0f : value;
- SetStatFloatValue(index, value);
}
void Player::UpdateAllCritPercentages()
@@ -545,15 +533,15 @@ void Player::UpdateMastery()
{
if (!CanUseMastery())
{
- SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, 0.0f);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Mastery), 0.0f);
return;
}
float value = GetTotalAuraModifier(SPELL_AURA_MASTERY);
value += GetRatingBonusValue(CR_MASTERY);
- SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, value);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Mastery), value);
- ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID));
+ ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization());
if (!chrSpec)
return;
@@ -578,8 +566,8 @@ void Player::UpdateMastery()
void Player::UpdateVersatilityDamageDone()
{
- // No proof that CR_VERSATILITY_DAMAGE_DONE is allways = PLAYER_VERSATILITY
- SetUInt32Value(ACTIVE_PLAYER_FIELD_VERSATILITY, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_VERSATILITY_DAMAGE_DONE));
+ // No proof that CR_VERSATILITY_DAMAGE_DONE is allways = ActivePlayerData::Versatility
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Versatility), m_activePlayerData->CombatRatings[CR_VERSATILITY_DAMAGE_DONE]);
if (getClass() == CLASS_HUNTER)
UpdateDamagePhysical(RANGED_ATTACK);
@@ -596,7 +584,7 @@ void Player::UpdateHealingDonePercentMod()
for (AuraEffect const* auraEffect : GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT))
AddPct(value, auraEffect->GetAmount());
- SetStatFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT, value);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent), value);
}
const float m_diminishing_k[MAX_CLASSES] =
@@ -649,9 +637,8 @@ void Player::UpdateParryPercentage()
if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) : value;
- value = value < 0.0f ? 0.0f : value;
}
- SetStatFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, value);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), value);
}
void Player::UpdateDodgePercentage()
@@ -685,8 +672,7 @@ void Player::UpdateDodgePercentage()
if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) : value;
- value = value < 0.0f ? 0.0f : value;
- SetStatFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, value);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DodgePercentage), value);
}
void Player::UpdateSpellCritChance()
@@ -700,13 +686,13 @@ void Player::UpdateSpellCritChance()
crit += GetRatingBonusValue(CR_CRIT_SPELL);
// Store crit value
- SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, crit);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), crit);
}
void Player::UpdateArmorPenetration(int32 amount)
{
// Store Rating Value
- SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_ARMOR_PENETRATION, amount);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, CR_ARMOR_PENETRATION), amount);
}
void Player::UpdateMeleeHitChances()
@@ -746,10 +732,10 @@ void Player::UpdateExpertise(WeaponAttackType attack)
switch (attack)
{
case BASE_ATTACK:
- SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE, expertise);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MainhandExpertise), expertise);
break;
case OFF_ATTACK:
- SetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE, expertise);
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandExpertise), expertise);
break;
default:
break;
@@ -786,8 +772,8 @@ void Player::UpdateManaRegen()
// Apply PCT bonus from SPELL_AURA_MOD_MANA_REGEN_PCT
base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_MANA_REGEN_PCT, POWER_MANA);
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + manaIndex, base_regen);
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + manaIndex, base_regen);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, manaIndex), base_regen);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, manaIndex), base_regen);
}
void Player::UpdateAllRunesRegen()
@@ -802,8 +788,8 @@ void Player::UpdateAllRunesRegen()
PowerTypeEntry const* runeEntry = sDB2Manager.GetPowerTypeEntry(POWER_RUNES);
uint32 cooldown = GetRuneBaseCooldown();
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenPeace);
- SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenCombat);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, runeIndex), float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenPeace);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, runeIndex), float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenCombat);
}
void Player::_ApplyAllStatBonuses()
@@ -898,20 +884,19 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
{
UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER;
- uint16 index = UNIT_FIELD_ATTACK_POWER;
- uint16 indexMulti = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;
+ float baseAttackPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);
+ float attackPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
if (ranged)
{
- index = UNIT_FIELD_RANGED_ATTACK_POWER;
- indexMulti = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;
+ SetRangedAttackPower(int32(baseAttackPower));
+ SetRangedAttackPowerMultiplier(attackPowerMultiplier);
+ }
+ else
+ {
+ SetAttackPower(int32(baseAttackPower));
+ SetAttackPowerMultiplier(attackPowerMultiplier);
}
-
- float baseAttackPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);
- float attackPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
-
- SetInt32Value(index, uint32(baseAttackPower)); // UNIT_FIELD_(RANGED)_ATTACK_POWER
- SetFloatValue(indexMulti, attackPowerMultiplier); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER
// automatically update weapon damage after attack power modification
if (ranged)
@@ -1160,8 +1145,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
else
val = 2 * GetStat(STAT_STRENGTH) - 20.0f;
- Unit* owner = GetOwner();
- if (owner && owner->GetTypeId() == TYPEID_PLAYER)
+ Player* owner = GetOwner() ? GetOwner()->ToPlayer() : nullptr;
+ if (owner)
{
if (IsHunterPet()) //hunter pets benefit from owner's attack power
{
@@ -1183,8 +1168,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
//demons benefit from warlocks shadow or fire damage
else if (IsPet())
{
- int32 fire = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- int32 shadow = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
+ int32 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE];
+ int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW];
int32 maximum = (fire > shadow) ? fire : shadow;
if (maximum < 0)
maximum = 0;
@@ -1194,7 +1179,7 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
//water elementals benefit from mage's frost damage
else if (GetEntry() == ENTRY_WATER_ELEMENTAL)
{
- int32 frost = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST);
+ int32 frost = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FROST] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FROST];
if (frost < 0)
frost = 0;
SetBonusDamage(int32(frost * 0.4f));
@@ -1207,10 +1192,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
float base_attPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);
float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
- //UNIT_FIELD_(RANGED)_ATTACK_POWER field
- SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower);
- //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field
- SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier);
+ SetAttackPower(int32(base_attPower));
+ SetAttackPowerMultiplier(attPowerMultiplier);
//automatically update weapon damage after attack power modification
UpdateDamagePhysical(BASE_ATTACK);
@@ -1222,19 +1205,19 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
return;
float bonusDamage = 0.0f;
- if (m_owner->GetTypeId() == TYPEID_PLAYER)
+ if (Player* playerOwner = m_owner->ToPlayer())
{
//force of nature
if (GetEntry() == ENTRY_TREANT)
{
- int32 spellDmg = m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE) - m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE);
+ int32 spellDmg = playerOwner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_NATURE] - playerOwner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_NATURE];
if (spellDmg > 0)
bonusDamage = spellDmg * 0.09f;
}
//greater fire elemental
else if (GetEntry() == ENTRY_FIRE_ELEMENTAL)
{
- int32 spellDmg = m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
+ int32 spellDmg = playerOwner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - playerOwner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE];
if (spellDmg > 0)
bonusDamage = spellDmg * 0.4f;
}
@@ -1255,13 +1238,13 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct;
float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
- SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage);
- SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), mindamage);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), maxdamage);
}
void Guardian::SetBonusDamage(int32 damage)
{
m_bonusSpellDamage = damage;
- if (GetOwner()->GetTypeId() == TYPEID_PLAYER)
- GetOwner()->SetUInt32Value(ACTIVE_PLAYER_FIELD_PET_SPELL_POWER, damage);
+ if (Player* playerOwner = GetOwner()->ToPlayer())
+ playerOwner->SetPetSpellPower(damage);
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 7835d0e002a..f821acb2621 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -70,7 +70,6 @@
#include "TemporarySummon.h"
#include "Totem.h"
#include "Transport.h"
-#include "UpdateFieldFlags.h"
#include "Util.h"
#include "Vehicle.h"
#include "VehiclePackets.h"
@@ -347,7 +346,11 @@ Unit::Unit(bool isWorldObject) :
}
for (uint8 i = 0; i < MAX_STATS; ++i)
+ {
m_createStats[i] = 0.0f;
+ m_floatStatPosBuff[i] = 0.0f;
+ m_floatStatNegBuff[i] = 0.0f;
+ }
m_attacking = nullptr;
if (GetTypeId() == TYPEID_PLAYER)
@@ -614,7 +617,7 @@ bool Unit::IsWithinBoundaryRadius(const Unit* obj) const
if (!obj || !IsInMap(obj) || !IsInPhase(obj))
return false;
- float objBoundaryRadius = std::max(obj->GetBoundaryRadius(), MIN_MELEE_REACH);
+ float objBoundaryRadius = std::max(obj->GetBoundingRadius(), MIN_MELEE_REACH);
return IsInDist(obj, objBoundaryRadius);
}
@@ -1962,7 +1965,7 @@ void Unit::CalcHealAbsorb(HealInfo& healInfo) const
void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extra)
{
- if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
+ if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasUnitFlag(UNIT_FLAG_PACIFIED))
return;
if (!victim->IsAlive())
@@ -1977,7 +1980,7 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
if (attType != BASE_ATTACK && attType != OFF_ATTACK)
return; // ignore ranged case
- if (GetTypeId() == TYPEID_UNIT && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ if (GetTypeId() == TYPEID_UNIT && !HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
SetFacingToObject(victim); // update client side facing to face the target (prevents visual glitches when casting untargeted spells)
// melee attack spell cast at main hand attack only - no normal melee dmg dealt
@@ -2006,7 +2009,7 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
void Unit::FakeAttackerStateUpdate(Unit* victim, WeaponAttackType attType /*= BASE_ATTACK*/)
{
- if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
+ if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasUnitFlag(UNIT_FLAG_PACIFIED))
return;
if (!victim->IsAlive())
@@ -2021,7 +2024,7 @@ void Unit::FakeAttackerStateUpdate(Unit* victim, WeaponAttackType attType /*= BA
if (attType != BASE_ATTACK && attType != OFF_ATTACK)
return; // ignore ranged case
- if (GetTypeId() == TYPEID_UNIT && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ if (GetTypeId() == TYPEID_UNIT && !HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
SetFacingToObject(victim); // update client side facing to face the target (prevents visual glitches when casting untargeted spells)
CalcDamageInfo damageInfo;
@@ -2191,21 +2194,21 @@ uint32 Unit::CalculateDamage(WeaponAttackType attType, bool normalized, bool add
switch (attType)
{
case RANGED_ATTACK:
- minDamage = GetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE);
- maxDamage = GetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE);
+ minDamage = m_unitData->MinRangedDamage;
+ maxDamage = m_unitData->MaxRangedDamage;
break;
case BASE_ATTACK:
- minDamage = GetFloatValue(UNIT_FIELD_MINDAMAGE);
- maxDamage = GetFloatValue(UNIT_FIELD_MAXDAMAGE);
+ minDamage = m_unitData->MinDamage;
+ maxDamage = m_unitData->MaxRangedDamage;
if (IsInFeralForm())
{
- minDamage += GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE);
- maxDamage += GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE);
+ minDamage += m_unitData->MinOffHandDamage;
+ maxDamage += m_unitData->MaxOffHandDamage;
}
break;
case OFF_ATTACK:
- minDamage = GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE);
- maxDamage = GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE);
+ minDamage = m_unitData->MinOffHandDamage;
+ maxDamage = m_unitData->MaxOffHandDamage;
break;
default:
break;
@@ -2297,11 +2300,11 @@ bool Unit::CanUseAttackType(uint8 attacktype) const
switch (attacktype)
{
case BASE_ATTACK:
- return !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED);
+ return !HasUnitFlag(UNIT_FLAG_DISARMED);
case OFF_ATTACK:
- return !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_DISARM_OFFHAND);
+ return !HasUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND);
case RANGED_ATTACK:
- return !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_DISARM_RANGED);
+ return !HasUnitFlag2(UNIT_FLAG2_DISARM_RANGED);
default:
return true;
}
@@ -2587,8 +2590,8 @@ float Unit::GetUnitDodgeChance(WeaponAttackType attType, Unit const* victim) con
float chance = 0.0f;
float levelBonus = 0.0f;
- if (victim->GetTypeId() == TYPEID_PLAYER)
- chance = victim->GetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE);
+ if (Player const* playerVictim = victim->ToPlayer())
+ chance = playerVictim->m_activePlayerData->DodgePercentage;
else
{
if (!victim->IsTotem())
@@ -2632,7 +2635,7 @@ float Unit::GetUnitParryChance(WeaponAttackType attType, Unit const* victim) con
tmpitem = playerVictim->GetWeaponForAttack(OFF_ATTACK, true);
if (tmpitem)
- chance = playerVictim->GetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE);
+ chance = playerVictim->m_activePlayerData->ParryPercentage;
}
}
else
@@ -2681,7 +2684,7 @@ float Unit::GetUnitBlockChance(WeaponAttackType /*attType*/, Unit const* victim)
{
Item* tmpitem = playerVictim->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
if (tmpitem && !tmpitem->IsBroken() && tmpitem->GetTemplate()->GetInventoryType() == INVTYPE_SHIELD)
- chance = playerVictim->GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE);
+ chance = playerVictim->m_activePlayerData->BlockPercentage;
}
}
else
@@ -2703,18 +2706,18 @@ float Unit::GetUnitBlockChance(WeaponAttackType /*attType*/, Unit const* victim)
float Unit::GetUnitCriticalChance(WeaponAttackType attackType, Unit const* victim) const
{
float chance = 0.0f;
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
switch (attackType)
{
case BASE_ATTACK:
- chance = GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE);
+ chance = thisPlayer->m_activePlayerData->CritPercentage;
break;
case OFF_ATTACK:
- chance = GetFloatValue(ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE);
+ chance = thisPlayer->m_activePlayerData->OffhandCritPercentage;
break;
case RANGED_ATTACK:
- chance = GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE);
+ chance = thisPlayer->m_activePlayerData->RangedCritPercentage;
break;
// Just for good manner
default:
@@ -4742,20 +4745,29 @@ int32 Unit::GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo
void Unit::InitStatBuffMods()
{
for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i)
- SetFloatValue(UNIT_FIELD_POSSTAT+i, 0);
- for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i)
- SetFloatValue(UNIT_FIELD_NEGSTAT+i, 0);
+ {
+ m_floatStatPosBuff[i] = 0.0f;
+ m_floatStatNegBuff[i] = 0.0f;
+ UpdateStatBuffModForClient(Stats(i));
+ }
}
void Unit::ApplyStatBuffMod(Stats stat, float val, bool apply)
{
- ApplyModSignedFloatValue((val > 0 ? UNIT_FIELD_POSSTAT+stat : UNIT_FIELD_NEGSTAT+stat), val, apply);
+ ApplyPercentModFloatVar((val > 0 ? m_floatStatPosBuff[stat] : m_floatStatNegBuff[stat]), val, apply);
+ UpdateStatBuffModForClient(stat);
}
void Unit::ApplyStatPercentBuffMod(Stats stat, float val, bool apply)
{
- ApplyPercentModFloatValue(UNIT_FIELD_POSSTAT+stat, val, apply);
- ApplyPercentModFloatValue(UNIT_FIELD_NEGSTAT+stat, val, apply);
+ ApplyPercentModFloatVar(m_floatStatPosBuff[stat], val, apply);
+ ApplyPercentModFloatVar(m_floatStatNegBuff[stat], val, apply);
+}
+
+void Unit::UpdateStatBuffModForClient(Stats stat)
+{
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StatPosBuff, stat), int32(m_floatStatPosBuff[stat]));
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StatNegBuff, stat), int32(m_floatStatNegBuff[stat]));
}
void Unit::_RegisterDynObject(DynamicObject* dynObj)
@@ -5141,12 +5153,12 @@ void Unit::SetPowerType(Powers new_powertype)
if (GetPowerType() == new_powertype)
return;
- SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, new_powertype);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayPower), new_powertype);
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player* thisPlayer = ToPlayer())
{
- if (ToPlayer()->GetGroup())
- ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POWER_TYPE);
+ if (thisPlayer->GetGroup())
+ thisPlayer->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POWER_TYPE);
}
/*else if (Pet* pet = ToCreature()->ToPet()) TODO 6.x
{
@@ -5273,9 +5285,9 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
return *repRank;
}
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
{
- if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
{
if (selfPlayerOwner && targetPlayerOwner)
{
@@ -5302,7 +5314,7 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
{
if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry())
{
- if (!selfPlayerOwner->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_IGNORE_REPUTATION))
+ if (!selfPlayerOwner->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION))
{
if (FactionEntry const* targetFactionEntry = sFactionStore.LookupEntry(targetFactionTemplateEntry->Faction))
{
@@ -5310,7 +5322,7 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
{
// check contested flags
if (targetFactionTemplateEntry->Flags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD
- && selfPlayerOwner->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP))
+ && selfPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP))
return REP_HOSTILE;
// if faction has reputation, hostile state depends only from AtWar state
@@ -5340,11 +5352,11 @@ ReputationRank Unit::GetFactionReactionTo(FactionTemplateEntry const* factionTem
{
// check contested flags
if (factionTemplateEntry->Flags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD
- && targetPlayerOwner->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP))
+ && targetPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP))
return REP_HOSTILE;
if (ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(factionTemplateEntry))
return *repRank;
- if (!target->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_IGNORE_REPUTATION))
+ if (!target->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION))
{
if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->Faction))
{
@@ -5443,7 +5455,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
if (GetTypeId() == TYPEID_PLAYER && IsMounted())
return false;
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
+ if (HasUnitFlag(UNIT_FLAG_PACIFIED))
return false;
// nobody can attack GM in GM-mode
@@ -5519,7 +5531,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
ToCreature()->CallAssistance();
// Remove emote state - will be restored on creature reset
- SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ SetEmoteState(EMOTE_ONESHOT_NONE);
}
// delay offhand weapon attack to next attack time
@@ -5629,11 +5641,12 @@ void Unit::RemoveAllAttackers()
void Unit::ModifyAuraState(AuraStateType flag, bool apply)
{
+ uint32 mask = 1 << (flag - 1);
if (apply)
{
- if (!HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)))
+ if (!(*m_unitData->AuraState & mask))
{
- SetFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1));
+ SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), mask);
if (GetTypeId() == TYPEID_PLAYER)
{
PlayerSpellMap const& sp_list = ToPlayer()->GetSpellMap();
@@ -5665,9 +5678,9 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply)
}
else
{
- if (HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)))
+ if (*m_unitData->AuraState & mask)
{
- RemoveFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1));
+ RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), mask);
Unit::AuraApplicationMap& tAuras = GetAppliedAuras();
for (Unit::AuraApplicationMap::iterator itr = tAuras.begin(); itr != tAuras.end();)
@@ -5682,9 +5695,9 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply)
}
}
-uint32 Unit::BuildAuraStateUpdateForTarget(Unit* target) const
+uint32 Unit::BuildAuraStateUpdateForTarget(Unit const* target) const
{
- uint32 auraStates = GetUInt32Value(UNIT_FIELD_AURASTATE) &~(PER_CASTER_AURA_STATE_MASK);
+ uint32 auraStates = *m_unitData->AuraState & ~(PER_CASTER_AURA_STATE_MASK);
for (AuraStateAurasMap::const_iterator itr = m_auraStateAuras.begin(); itr != m_auraStateAuras.end(); ++itr)
if ((1 << (itr->first - 1)) & PER_CASTER_AURA_STATE_MASK)
if (itr->second->GetBase()->GetCasterGUID() == target->GetGUID())
@@ -5715,7 +5728,7 @@ bool Unit::HasAuraState(AuraStateType flag, SpellInfo const* spellProto, Unit co
}
}
- return HasFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1));
+ return (*m_unitData->AuraState & (1 << (flag - 1))) != 0;
}
void Unit::SetOwnerGUID(ObjectGuid owner)
@@ -5723,7 +5736,7 @@ void Unit::SetOwnerGUID(ObjectGuid owner)
if (GetOwnerGUID() == owner)
return;
- SetGuidValue(UNIT_FIELD_SUMMONEDBY, owner);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SummonedBy), owner);
if (!owner)
return;
@@ -5732,15 +5745,11 @@ void Unit::SetOwnerGUID(ObjectGuid owner)
if (!player || !player->HaveAtClient(this)) // if player cannot see this unit yet, he will receive needed data with create object
return;
- SetFieldNotifyFlag(UF_FLAG_OWNER);
-
UpdateData udata(GetMapId());
WorldPacket packet;
- BuildValuesUpdateBlockForPlayer(&udata, player);
+ BuildValuesUpdateBlockForPlayerWithFlag(&udata, UF::UpdateFieldFlag::Owner, player);
udata.BuildPacket(&packet);
player->SendDirectMessage(&packet);
-
- RemoveFieldNotifyFlag(UF_FLAG_OWNER);
}
Unit* Unit::GetOwner() const
@@ -5822,7 +5831,7 @@ Unit* Unit::GetCharm() const
return pet;
TC_LOG_ERROR("entities.unit", "Unit::GetCharm: Charmed creature %s not exist.", charm_guid.ToString().c_str());
- const_cast<Unit*>(this)->SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty);
+ const_cast<Unit*>(this)->SetCharmGUID(ObjectGuid::Empty);
}
return NULL;
@@ -5860,7 +5869,7 @@ void Unit::SetMinion(Minion *minion, bool apply)
if (GetTypeId() == TYPEID_PLAYER)
{
minion->m_ControlledByPlayer = true;
- minion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ minion->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
}
// Can only have one pet. If a new one is summoned, dismiss the old one.
@@ -5888,20 +5897,19 @@ void Unit::SetMinion(Minion *minion, bool apply)
if (minion->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
{
- if (AddGuidValue(UNIT_FIELD_SUMMON, minion->GetGUID()))
- {
- }
+ if (GetMinionGUID().IsEmpty())
+ SetMinionGUID(minion->GetGUID());
}
if (minion->m_Properties && minion->m_Properties->Title == SUMMON_TYPE_MINIPET)
{
SetCritterGUID(minion->GetGUID());
- if (GetTypeId() == TYPEID_PLAYER)
- minion->SetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID, GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID));
+ if (Player const* thisPlayer = ToPlayer())
+ minion->SetBattlePetCompanionGUID(thisPlayer->m_activePlayerData->SummonedBattlePetGUID);
}
// PvP, FFAPvP
- minion->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
+ minion->SetPvpFlags(GetPvpFlags());
// FIXME: hack, speed must be set only at follow
if (GetTypeId() == TYPEID_PLAYER && minion->IsPet())
@@ -5909,7 +5917,7 @@ void Unit::SetMinion(Minion *minion, bool apply)
minion->SetSpeedRate(UnitMoveType(i), m_speed_rate[i]);
// Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL));
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->m_unitData->CreatedBySpell);
if (spellInfo && (spellInfo->IsCooldownStartedOnEvent()))
GetSpellHistory()->StartCooldown(spellInfo, 0, nullptr, true);
@@ -5946,15 +5954,16 @@ void Unit::SetMinion(Minion *minion, bool apply)
}
}
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL));
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->m_unitData->CreatedBySpell);
// Remove infinity cooldown
if (spellInfo && (spellInfo->IsCooldownStartedOnEvent()))
GetSpellHistory()->SendCooldownEvent(spellInfo);
//if (minion->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
{
- if (RemoveGuidValue(UNIT_FIELD_SUMMON, minion->GetGUID()))
+ if (GetMinionGUID() == minion->GetGUID())
{
+ SetMinionGUID(ObjectGuid::Empty);
// Check if there is another minion
for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
{
@@ -5975,16 +5984,14 @@ void Unit::SetMinion(Minion *minion, bool apply)
if (!(*itr)->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
continue;
- if (AddGuidValue(UNIT_FIELD_SUMMON, (*itr)->GetGUID()))
+ SetMinionGUID((*itr)->GetGUID());
+ // show another pet bar if there is no charm bar
+ if (GetTypeId() == TYPEID_PLAYER && !GetCharmGUID())
{
- // show another pet bar if there is no charm bar
- if (GetTypeId() == TYPEID_PLAYER && !GetCharmGUID())
- {
- if ((*itr)->IsPet())
- ToPlayer()->PetSpellInitialize();
- else
- ToPlayer()->CharmSpellInitialize();
- }
+ if ((*itr)->IsPet())
+ ToPlayer()->PetSpellInitialize();
+ else
+ ToPlayer()->CharmSpellInitialize();
}
break;
}
@@ -6022,20 +6029,24 @@ void Unit::SetCharm(Unit* charm, bool apply)
{
if (GetTypeId() == TYPEID_PLAYER)
{
- if (!AddGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
+ if (GetCharmGUID().IsEmpty())
+ SetCharmGUID(charm->GetGUID());
+ else
TC_LOG_FATAL("entities.unit", "Player %s is trying to charm unit %u, but it already has a charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str());
charm->m_ControlledByPlayer = true;
/// @todo maybe we can use this flag to check if controlled by player
- charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
}
else
charm->m_ControlledByPlayer = false;
// PvP, FFAPvP
- charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
+ charm->SetPvpFlags(GetPvpFlags());
- if (!charm->AddGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
+ if (charm->GetCharmGUID().IsEmpty())
+ charm->SetCharmerGUID(GetGUID());
+ else
TC_LOG_FATAL("entities.unit", "Unit %u is being charmed, but it already has a charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str());
_isWalkingBeforeCharm = charm->IsWalking();
@@ -6048,30 +6059,34 @@ void Unit::SetCharm(Unit* charm, bool apply)
{
if (GetTypeId() == TYPEID_PLAYER)
{
- if (!RemoveGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
+ if (GetCharmGUID() == charm->GetGUID())
+ SetCharmGUID(ObjectGuid::Empty);
+ else
TC_LOG_FATAL("entities.unit", "Player %s is trying to uncharm unit %u, but it has another charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str());
}
- if (!charm->RemoveGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
+ if (charm->GetCharmerGUID() == GetGUID())
+ charm->SetCharmerGUID(ObjectGuid::Empty);
+ else
TC_LOG_FATAL("entities.unit", "Unit %u is being uncharmed, but it has another charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str());
if (charm->GetTypeId() == TYPEID_PLAYER)
{
charm->m_ControlledByPlayer = true;
- charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
charm->ToPlayer()->UpdatePvPState();
}
else if (Player* player = charm->GetCharmerOrOwnerPlayerOrPlayerItself())
{
charm->m_ControlledByPlayer = true;
- charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
- charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, player->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
+ charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
+ charm->SetPvpFlags(player->GetPvpFlags());
}
else
{
charm->m_ControlledByPlayer = false;
- charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
- charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, 0);
+ charm->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
+ charm->SetPvpFlags(UNIT_BYTE2_FLAG_NONE);
}
if (charm->IsWalking() != _isWalkingBeforeCharm)
@@ -6134,7 +6149,7 @@ void Unit::DealHeal(HealInfo& healInfo)
bool Unit::IsMagnet() const
{
// Grounding Totem
- if (GetUInt32Value(UNIT_CREATED_BY_SPELL) == 8177) /// @todo: find a more generic solution
+ if (*m_unitData->CreatedBySpell == 8177) /// @todo: find a more generic solution
return true;
return false;
@@ -6488,11 +6503,11 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage
AddPct(DoneTotalMod, modOwner->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + modOwner->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
float maxModDamagePercentSchool = 0.0f;
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i)
if (spellProto->GetSchoolMask() & (1 << i))
- maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i));
+ maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModDamageDonePercent[i]);
}
else
maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask());
@@ -6630,9 +6645,9 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
int32 Unit::SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
{
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
- float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT);
+ float overrideSP = thisPlayer->m_activePlayerData->OverrideSpellPowerByAPPercent;
if (overrideSP > 0.0f)
return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f);
}
@@ -6711,8 +6726,8 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto
if (schoolMask & SPELL_SCHOOL_MASK_NORMAL)
crit_chance = 0.0f;
// For other schools
- else if (GetTypeId() == TYPEID_PLAYER)
- crit_chance = GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1);
+ else if (Player const* thisPlayer = ToPlayer())
+ crit_chance = thisPlayer->m_activePlayerData->SpellCritPercentage;
else
crit_chance = (float)m_baseSpellCritChance;
// taken
@@ -6952,8 +6967,8 @@ float Unit::SpellHealingPctDone(Unit* /*victim*/, SpellInfo const* spellProto) c
if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
return 1.0f;
- if (IsPlayer())
- return GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT);
+ if (Player const* thisPlayer = ToPlayer())
+ return thisPlayer->m_activePlayerData->ModHealingDonePercent;
float DoneTotalMod = 1.0f;
@@ -7050,9 +7065,9 @@ uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, u
int32 Unit::SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const
{
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
- float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT);
+ float overrideSP = thisPlayer->m_activePlayerData->OverrideSpellPowerByAPPercent;
if (overrideSP > 0.0f)
return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f);
}
@@ -7320,11 +7335,11 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType
if (!(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL))
{
float maxModDamagePercentSchool = 0.0f;
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
for (uint32 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
if (spellProto->GetSchoolMask() & (1 << i))
- maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i));
+ maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModDamageDonePercent[i]);
}
else
maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask());
@@ -7495,9 +7510,9 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, SpellInfo const* spe
void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
{
if (mount)
- SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, mount);
+ SetMountDisplayId(mount);
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
+ AddUnitFlag(UNIT_FLAG_MOUNT);
if (Player* player = ToPlayer())
{
@@ -7520,7 +7535,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
Battleground* bg = ToPlayer()->GetBattleground();
// don't unsummon pet in arena but SetFlag UNIT_FLAG_STUNNED to disable pet's interface
if (bg && bg->isArena())
- pet->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ pet->AddUnitFlag(UNIT_FLAG_STUNNED);
else
player->UnsummonPetTemporaryIfAny();
}
@@ -7528,7 +7543,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
// if we have charmed npc, stun him also (everywhere)
if (Unit* charm = player->GetCharm())
if (charm->GetTypeId() == TYPEID_UNIT)
- charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ charm->AddUnitFlag(UNIT_FLAG_STUNNED);
player->SendMovementSetCollisionHeight(player->GetCollisionHeight(true));
}
@@ -7541,8 +7556,8 @@ void Unit::Dismount()
if (!IsMounted())
return;
- SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
+ SetMountDisplayId(0);
+ RemoveUnitFlag(UNIT_FLAG_MOUNT);
if (Player* thisPlayer = ToPlayer())
thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight(false));
@@ -7567,16 +7582,16 @@ void Unit::Dismount()
{
if (Pet* pPet = player->GetPet())
{
- if (pPet->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STATE_STUNNED))
- pPet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ if (pPet->HasUnitFlag(UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STATE_STUNNED))
+ pPet->RemoveUnitFlag(UNIT_FLAG_STUNNED);
}
else
player->ResummonPetTemporaryUnSummonedIfAny();
// if we have charmed npc, remove stun also
if (Unit* charm = player->GetCharm())
- if (charm->GetTypeId() == TYPEID_UNIT && charm->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !charm->HasUnitState(UNIT_STATE_STUNNED))
- charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ if (charm->GetTypeId() == TYPEID_UNIT && charm->HasUnitFlag(UNIT_FLAG_STUNNED) && !charm->HasUnitState(UNIT_STATE_STUNNED))
+ charm->RemoveUnitFlag(UNIT_FLAG_STUNNED);
}
}
@@ -7674,11 +7689,11 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const
bool Unit::IsServiceProvider() const
{
- return HasFlag64(UNIT_NPC_FLAGS,
+ return HasNpcFlag(NPCFlags(
UNIT_NPC_FLAG_VENDOR | UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_FLIGHTMASTER |
UNIT_NPC_FLAG_PETITIONER | UNIT_NPC_FLAG_BATTLEMASTER | UNIT_NPC_FLAG_BANKER |
UNIT_NPC_FLAG_INNKEEPER | UNIT_NPC_FLAG_SPIRITHEALER |
- UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER);
+ UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER));
}
void Unit::SetInCombatWith(Unit* enemy)
@@ -7752,7 +7767,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy)
if (IsInCombat() || HasUnitState(UNIT_STATE_EVADE))
return;
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ AddUnitFlag(UNIT_FLAG_IN_COMBAT);
if (Creature* creature = ToCreature())
{
@@ -7785,7 +7800,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy)
for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
{
(*itr)->SetInCombatState(PvP, enemy);
- (*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT);
+ (*itr)->AddUnitFlag(UNIT_FLAG_PET_IN_COMBAT);
}
ProcSkillsAndAuras(enemy, PROC_FLAG_ENTER_COMBAT, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
@@ -7794,14 +7809,14 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy)
void Unit::ClearInCombat()
{
m_CombatTimer = 0;
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
// Player's state will be cleared in Player::UpdateContestedPvP
if (Creature* creature = ToCreature())
{
ClearUnitState(UNIT_STATE_ATTACK_PLAYER);
- if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED))
- SetUInt32Value(OBJECT_DYNAMIC_FLAGS, creature->GetCreatureTemplate()->dynamicflags);
+ if (HasDynamicFlag(UNIT_DYNFLAG_TAPPED))
+ SetDynamicFlags(creature->GetCreatureTemplate()->dynamicflags);
if (creature->IsPet() || creature->IsGuardian())
{
@@ -7816,7 +7831,7 @@ void Unit::ClearInCombat()
else
ToPlayer()->OnCombatExit();
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT);
+ RemoveUnitFlag(UNIT_FLAG_PET_IN_COMBAT);
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_LEAVE_COMBAT);
}
@@ -7825,8 +7840,7 @@ bool Unit::isTargetableForAttack(bool checkFakeDeath) const
if (!IsAlive())
return false;
- if (HasFlag(UNIT_FIELD_FLAGS,
- UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))
+ if (HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)))
return false;
if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->IsGameMaster())
@@ -7881,29 +7895,29 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
// can't attack untargetable
if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
- && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
return false;
if (Player const* playerAttacker = ToPlayer())
{
- if (playerAttacker->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_UBER))
+ if (playerAttacker->HasPlayerFlag(PLAYER_FLAGS_UBER))
return false;
}
// check flags
- if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_UNK_16)
- || (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
- || (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)))
+ if (target->HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_UNK_16))
+ || (!HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
+ || (!target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC)))
return false;
if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG))
- && (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
+ && (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
&& GetEntry() != WORLD_TRIGGER)
return false;
// CvC case - can attack each other only when one of them is hostile
- if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ if (!HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && !target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
return GetReactionTo(target) <= REP_HOSTILE || target->GetReactionTo(this) <= REP_HOSTILE;
// PvP, PvC, CvP case
@@ -7912,8 +7926,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|| target->GetReactionTo(this) > REP_NEUTRAL)
return false;
- Player const* playerAffectingAttacker = HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : nullptr;
- Player const* playerAffectingTarget = target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? target->GetAffectingPlayer() : nullptr;
+ Player const* playerAffectingAttacker = HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : nullptr;
+ Player const* playerAffectingTarget = target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) ? target->GetAffectingPlayer() : nullptr;
// Not all neutral creatures can be attacked (even some unfriendly faction does not react aggresive to you, like Sporaggar)
if ((playerAffectingAttacker && !playerAffectingTarget) ||
@@ -7944,8 +7958,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
// PvP case - can't attack when attacker or target are in sanctuary
// however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp
- if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)
- && ((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY) || (GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY)))
+ if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)
+ && ((target->HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY)) || (HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY))))
return false;
// additional checks - only PvP case
@@ -7957,8 +7971,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
if (IsFFAPvP() && target->IsFFAPvP())
return true;
- return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_UNK1)
- || target->HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_UNK1);
+ return HasPvpFlag(UNIT_BYTE2_FLAG_UNK1)
+ || target->HasPvpFlag(UNIT_BYTE2_FLAG_UNK1);
}
return true;
}
@@ -7997,19 +8011,19 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
// can't assist untargetable
if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
- && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
return false;
if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
{
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
{
- if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
+ if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
return false;
}
else
{
- if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
+ if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
return false;
}
}
@@ -8024,10 +8038,10 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
if (GetTypeId() == TYPEID_PLAYER && IsCharmed() && GetCharmerGUID().IsCreature())
return true;
// PvP case
- else if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ else if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
{
Player const* targetPlayerOwner = target->GetAffectingPlayer();
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
+ if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE))
{
Player const* selfPlayerOwner = GetAffectingPlayer();
if (selfPlayerOwner && targetPlayerOwner)
@@ -8038,20 +8052,20 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
return false;
}
// can't assist player in ffa_pvp zone from outside
- if ((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_FFA_PVP)
- && !(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_FFA_PVP))
+ if (target->HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP)
+ && !HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP))
return false;
// can't assist player out of sanctuary from sanctuary if has pvp enabled
- if (target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_PVP)
- if ((GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY) && !(target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY))
+ if (target->HasPvpFlag(UNIT_BYTE2_FLAG_PVP))
+ if (HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY) && !target->HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY))
return false;
}
}
// PvC case - player can assist creature only if has specific type flags
// !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) &&
- else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)
+ else if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)
&& (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
- && !((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_PVP)))
+ && !target->HasPvpFlag(UNIT_BYTE2_FLAG_PVP))
{
if (Creature const* creatureTarget = target->ToCreature())
return creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT || creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_ASSIST;
@@ -8480,14 +8494,14 @@ void Unit::setDeathState(DeathState s)
// do not why since in IncreaseMaxHealth currenthealth is checked
SetHealth(0);
SetPower(GetPowerType(), 0);
- SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ SetEmoteState(EMOTE_ONESHOT_NONE);
// players in instance don't have ZoneScript, but they have InstanceScript
if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript())
zoneScript->OnUnitDeath(this);
}
else if (s == JUST_RESPAWNED)
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
+ RemoveUnitFlag(UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
}
/*########################################
@@ -8888,7 +8902,7 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell*
if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
- castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
+ castTime = int32(float(castTime) * m_unitData->ModCastingSpeed);
else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]);
else if (IsPartOfSkillLine(SKILL_COOKING, spellInfo->Id) && HasAura(67556)) // cooking with Chef Hat.
@@ -8909,7 +8923,7 @@ void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Sp
if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
- duration = int32(float(duration) * GetFloatValue(UNIT_MOD_CAST_SPEED));
+ duration = int32(float(duration) * m_unitData->ModCastingSpeed);
else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]);
}
@@ -9093,7 +9107,7 @@ uint32 Unit::GetCreatureTypeMask() const
void Unit::SetShapeshiftForm(ShapeshiftForm form)
{
- SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, form);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ShapeshiftForm), form);
}
bool Unit::IsInFeralForm() const
@@ -9332,17 +9346,17 @@ float Unit::GetTotalAttackPowerValue(WeaponAttackType attType) const
{
if (attType == RANGED_ATTACK)
{
- int32 ap = GetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER);
+ int32 ap = m_unitData->RangedAttackPower;
if (ap < 0)
return 0.0f;
- return ap * (1.0f + GetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER));
+ return ap * (1.0f + m_unitData->RangedAttackPowerMultiplier);
}
else
{
- int32 ap = GetInt32Value(UNIT_FIELD_ATTACK_POWER);
+ int32 ap = m_unitData->AttackPower;
if (ap < 0)
return 0.0f;
- return ap * (1.0f + GetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER));
+ return ap * (1.0f + m_unitData->AttackPowerMultiplier);
}
}
@@ -9362,7 +9376,7 @@ bool Unit::CanFreeMove() const
void Unit::SetLevel(uint8 lvl)
{
- SetUInt32Value(UNIT_FIELD_LEVEL, lvl);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Level), lvl);
if (Player* player = ToPlayer())
{
@@ -9387,7 +9401,7 @@ void Unit::SetHealth(uint64 val)
val = maxHealth;
}
- SetUInt64Value(UNIT_FIELD_HEALTH, val);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Health), val);
// group update
if (Player* player = ToPlayer())
@@ -9408,7 +9422,7 @@ void Unit::SetMaxHealth(uint64 val)
val = 1;
uint64 health = GetHealth();
- SetUInt64Value(UNIT_FIELD_MAXHEALTH, val);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxHealth), val);
// group update
if (GetTypeId() == TYPEID_PLAYER)
@@ -9432,7 +9446,7 @@ int32 Unit::GetPower(Powers power) const
if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS)
return 0;
- return GetUInt32Value(UNIT_FIELD_POWER + powerIndex);
+ return m_unitData->Power[powerIndex];
}
int32 Unit::GetMaxPower(Powers power) const
@@ -9441,7 +9455,7 @@ int32 Unit::GetMaxPower(Powers power) const
if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS)
return 0;
- return GetInt32Value(UNIT_FIELD_MAXPOWER + powerIndex);
+ return m_unitData->MaxPower[powerIndex];
}
void Unit::SetPower(Powers power, int32 val)
@@ -9454,7 +9468,7 @@ void Unit::SetPower(Powers power, int32 val)
if (maxPower < val)
val = maxPower;
- SetInt32Value(UNIT_FIELD_POWER + powerIndex, val);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, powerIndex), val);
if (IsInWorld())
{
@@ -9485,7 +9499,7 @@ void Unit::SetMaxPower(Powers power, int32 val)
return;
int32 cur_power = GetPower(power);
- SetInt32Value(UNIT_FIELD_MAXPOWER + powerIndex, val);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxPower, powerIndex), val);
// group update
if (GetTypeId() == TYPEID_PLAYER)
@@ -9887,9 +9901,9 @@ void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow)
{
_petnumber = petnumber;
if (statwindow)
- _unit->SetUInt32Value(UNIT_FIELD_PETNUMBER, _petnumber);
+ _unit->SetPetNumberForClient(_petnumber);
else
- _unit->SetUInt32Value(UNIT_FIELD_PETNUMBER, 0);
+ _unit->SetPetNumberForClient(0);
}
void CharmInfo::LoadPetActionBar(const std::string& data)
@@ -10306,7 +10320,7 @@ bool Unit::IsStandState() const
void Unit::SetStandState(UnitStandStateType state, uint32 animKitID /* = 0*/)
{
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, uint8(state));
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StandState), state);
if (IsStandState())
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_SEATED);
@@ -10318,6 +10332,19 @@ void Unit::SetStandState(UnitStandStateType state, uint32 animKitID /* = 0*/)
}
}
+void Unit::SetAnimTier(UnitBytes1_Flags animTier, bool notifyClient)
+{
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AnimTier), animTier);
+
+ if (notifyClient)
+ {
+ WorldPackets::Misc::SetAnimTier setAnimTier;
+ setAnimTier.Unit = GetGUID();
+ setAnimTier.Tier = animTier;
+ SendMessageToSet(setAnimTier.Write(), true);
+ }
+}
+
bool Unit::IsPolymorphed() const
{
uint32 transformId = getTransForm();
@@ -10333,12 +10360,12 @@ bool Unit::IsPolymorphed() const
void Unit::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/)
{
- SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId);
- SetFloatValue(UNIT_FIELD_DISPLAY_SCALE, displayScale);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayID), modelId);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayScale), displayScale);
// Set Gender by modelId
if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender);
+ SetGender(minfo->gender);
}
void Unit::RestoreDisplayId(bool ignorePositiveAurasPreventingMounting /*= false*/)
@@ -10479,7 +10506,18 @@ void Unit::SetBaseAttackTime(WeaponAttackType att, uint32 val)
void Unit::UpdateAttackTimeField(WeaponAttackType att)
{
- SetUInt32Value(UNIT_FIELD_BASEATTACKTIME + att, uint32(m_baseAttackSpeed[att] * m_modAttackSpeedPct[att]));
+ switch (att)
+ {
+ case BASE_ATTACK:
+ case OFF_ATTACK:
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackRoundBaseTime, att), uint32(m_baseAttackSpeed[att] * m_modAttackSpeedPct[att]));
+ break;
+ case RANGED_ATTACK:
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackRoundBaseTime), uint32(m_baseAttackSpeed[RANGED_ATTACK] * m_modAttackSpeedPct[RANGED_ATTACK]));
+ break;
+ default:
+ break;;
+ }
}
void Unit::ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply)
@@ -10490,18 +10528,18 @@ void Unit::ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply
ApplyPercentModFloatVar(m_modAttackSpeedPct[att], val, !apply);
if (att == BASE_ATTACK)
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE, val, !apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), val, !apply);
else if (att == RANGED_ATTACK)
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, val, !apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), val, !apply);
}
else
{
ApplyPercentModFloatVar(m_modAttackSpeedPct[att], -val, apply);
if (att == BASE_ATTACK)
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE, -val, apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), -val, apply);
else if (att == RANGED_ATTACK)
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, -val, apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), -val, apply);
}
UpdateAttackTimeField(att);
@@ -10512,15 +10550,15 @@ void Unit::ApplyCastTimePercentMod(float val, bool apply)
{
if (val > 0)
{
- ApplyPercentModFloatValue(UNIT_MOD_CAST_SPEED, val, !apply);
- ApplyPercentModFloatValue(UNIT_MOD_CAST_HASTE, val, !apply);
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, val, !apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), val, !apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), val, !apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), val, !apply);
}
else
{
- ApplyPercentModFloatValue(UNIT_MOD_CAST_SPEED, -val, apply);
- ApplyPercentModFloatValue(UNIT_MOD_CAST_HASTE, -val, apply);
- ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, -val, apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), -val, apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), -val, apply);
+ ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), -val, apply);
}
}
@@ -10717,7 +10755,7 @@ void Unit::SetContestedPvP(Player* attackedPlayer)
if (!player->HasUnitState(UNIT_STATE_ATTACK_PLAYER))
{
player->AddUnitState(UNIT_STATE_ATTACK_PLAYER);
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP);
+ player->AddPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP);
// call MoveInLineOfSight for nearby contested guards
UpdateObjectVisibility();
}
@@ -10793,10 +10831,10 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id)
{
pet->SetCreatorGUID(GetGUID());
pet->setFaction(getFaction());
- pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id);
+ pet->SetCreatedBySpell(spell_id);
if (GetTypeId() == TYPEID_PLAYER)
- pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ pet->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
if (!pet->InitStatsForLevel(level))
{
@@ -11052,7 +11090,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
// must be after setDeathState which resets dynamic flags
if (!creature->loot.isLooted())
- creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ creature->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
else
creature->AllLootRemovedFromCorpse();
}
@@ -11152,7 +11190,7 @@ float Unit::GetPositionZMinusOffset() const
{
float offset = 0.0f;
if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- offset = GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ offset = m_unitData->HoverHeight;
return GetPositionZ() - offset;
}
@@ -11255,7 +11293,7 @@ void Unit::SetStunned(bool apply)
if (apply)
{
SetTarget(ObjectGuid::Empty);
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ AddUnitFlag(UNIT_FLAG_STUNNED);
StopMoving();
@@ -11274,7 +11312,7 @@ void Unit::SetStunned(bool apply)
// don't remove UNIT_FLAG_STUNNED for pet when owner is mounted (disabled pet's interface)
Unit* owner = GetCharmerOrOwner();
if (!owner || owner->GetTypeId() != TYPEID_PLAYER || !owner->ToPlayer()->IsMounted())
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ RemoveUnitFlag(UNIT_FLAG_STUNNED);
if (!HasUnitState(UNIT_STATE_ROOT)) // prevent moving if it also has root effect
SetRooted(false);
@@ -11497,14 +11535,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
switch (type)
{
case CHARM_TYPE_VEHICLE:
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
+ AddUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
playerCharmer->SetClientControl(this, true);
playerCharmer->VehicleSpellInitialize();
break;
case CHARM_TYPE_POSSESS:
AddUnitState(UNIT_STATE_POSSESSED);
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
- charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL);
+ AddUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
+ charmer->AddUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL);
playerCharmer->SetClientControl(this, true);
playerCharmer->PossessSpellInitialize();
break;
@@ -11515,14 +11553,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
if (cinfo && cinfo->type == CREATURE_TYPE_DEMON)
{
// to prevent client crash
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, (uint8)CLASS_MAGE);
+ SetClass(CLASS_MAGE);
// just to enable stat window
if (GetCharmInfo())
GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// if charmed two demons the same session, the 2nd gets the 1st one's name
- SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped
+ SetPetNameTimestamp(uint32(time(NULL)));
}
}
playerCharmer->CharmSpellInitialize();
@@ -11602,13 +11640,13 @@ void Unit::RemoveCharmedBy(Unit* charmer)
case CHARM_TYPE_VEHICLE:
playerCharmer->SetClientControl(this, false);
playerCharmer->SetClientControl(charmer, true);
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
+ RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
break;
case CHARM_TYPE_POSSESS:
playerCharmer->SetClientControl(this, false);
playerCharmer->SetClientControl(charmer, true);
- charmer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL);
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
+ charmer->RemoveUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL);
+ RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
ClearUnitState(UNIT_STATE_POSSESSED);
break;
case CHARM_TYPE_CHARM:
@@ -11617,7 +11655,7 @@ void Unit::RemoveCharmedBy(Unit* charmer)
CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate();
if (cinfo && cinfo->type == CREATURE_TYPE_DEMON)
{
- SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class));
+ SetClass(uint8(cinfo->unit_class));
if (GetCharmInfo())
GetCharmInfo()->SetPetNumber(0, true);
else
@@ -11703,7 +11741,7 @@ void Unit::RemoveVehicleKit(bool onRemoveFromWorld /*= false*/)
m_updateFlag.Vehicle = false;
m_unitTypeMask &= ~UNIT_MASK_VEHICLE;
- RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK | UNIT_NPC_FLAG_PLAYER_VEHICLE);
+ RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_SPELLCLICK | UNIT_NPC_FLAG_PLAYER_VEHICLE));
}
bool Unit::IsOnVehicle(const Unit* vehicle) const
@@ -11830,9 +11868,9 @@ bool Unit::IsContestedGuard() const
void Unit::SetPvP(bool state)
{
if (state)
- SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP);
+ AddPvpFlag(UNIT_BYTE2_FLAG_PVP);
else
- RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP);
+ RemovePvpFlag(UNIT_BYTE2_FLAG_PVP);
}
Aura* Unit::AddAura(uint32 spellId, Unit* target)
@@ -12133,7 +12171,7 @@ uint32 Unit::GetCombatRatingDamageReduction(CombatRating cr, float rate, float c
uint32 Unit::GetModelForForm(ShapeshiftForm form) const
{
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player const* thisPlayer = ToPlayer())
{
if (Aura* artifactAura = GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE))
if (Item* artifact = ToPlayer()->GetItemByGuid(artifactAura->GetCastItemGUID()))
@@ -12147,7 +12185,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
// Based on Hair color
if (getRace() == RACE_NIGHTELF)
{
- uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
+ uint8 hairColor = thisPlayer->m_playerData->HairColorID;
if (HasAura(210333)) // Glyph of the Feral Chameleon
hairColor = urand(0, 10);
@@ -12170,7 +12208,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
}
else if (getRace() == RACE_TROLL)
{
- uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
+ uint8 hairColor = thisPlayer->m_playerData->HairColorID;
if (HasAura(210333)) // Glyph of the Feral Chameleon
hairColor = urand(0, 12);
@@ -12196,7 +12234,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
else if (getRace() == RACE_WORGEN)
{
// Based on Skin color
- uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
+ uint8 skinColor = thisPlayer->m_playerData->SkinID;
if (HasAura(210333)) // Glyph of the Feral Chameleon
skinColor = urand(0, 9);
@@ -12243,7 +12281,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
// Based on Skin color
else if (getRace() == RACE_TAUREN)
{
- uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
+ uint8 skinColor = thisPlayer->m_playerData->SkinID;
if (HasAura(210333)) // Glyph of the Feral Chameleon
skinColor = urand(0, 20);
@@ -12307,7 +12345,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
// Based on Hair color
if (getRace() == RACE_NIGHTELF)
{
- uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
+ uint8 hairColor = thisPlayer->m_playerData->HairColorID;
if (HasAura(107059)) // Glyph of the Ursol Chameleon
hairColor = urand(0, 8);
@@ -12329,7 +12367,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
}
else if (getRace() == RACE_TROLL)
{
- uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
+ uint8 hairColor = thisPlayer->m_playerData->HairColorID;
if (HasAura(107059)) // Glyph of the Ursol Chameleon
hairColor = urand(0, 14);
@@ -12356,7 +12394,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
else if (getRace() == RACE_WORGEN)
{
// Based on Skin color
- uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
+ uint8 skinColor = thisPlayer->m_playerData->SkinID;
if (HasAura(107059)) // Glyph of the Ursol Chameleon
skinColor = urand(0, 8);
@@ -12403,7 +12441,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const
// Based on Skin color
else if (getRace() == RACE_TAUREN)
{
- uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
+ uint8 skinColor = thisPlayer->m_playerData->SkinID;
if (HasAura(107059)) // Glyph of the Ursol Chameleon
skinColor = urand(0, 20);
@@ -12822,13 +12860,13 @@ bool Unit::IsFalling() const
bool Unit::CanSwim() const
{
// Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CANNOT_SWIM))
+ if (HasUnitFlag(UNIT_FLAG_CANNOT_SWIM))
return false;
- if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) // is player
+ if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) // is player
return true;
- if (HasFlag(UNIT_FIELD_FLAGS_2, 0x1000000))
+ if (HasUnitFlag2(UnitFlags2(0x1000000)))
return false;
- return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_RENAME | UNIT_FLAG_UNK_15);
+ return HasUnitFlag(UnitFlags(UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_RENAME | UNIT_FLAG_UNK_15));
}
void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/)
@@ -13445,7 +13483,7 @@ bool Unit::SetHover(bool enable)
if (enable == HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
return false;
- float hoverHeight = GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ float hoverHeight = m_unitData->HoverHeight;
if (enable)
{
@@ -13656,154 +13694,60 @@ bool Unit::IsSplineEnabled() const
return movespline->Initialized() && !movespline->Finalized();
}
-void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
+UF::UpdateFieldFlag Unit::GetUpdateFieldFlagsFor(Player const* target) const
{
- if (!target)
- return;
+ EnumClassFlag<UF::UpdateFieldFlag> flags = UF::UpdateFieldFlag::None;
+ if (target == this || GetOwnerGUID() == target->GetGUID())
+ flags |= UF::UpdateFieldFlag::Owner;
- uint32 valCount = m_valuesCount;
- uint32* flags = UnitUpdateFieldFlags;
- uint32 visibleFlag = UF_FLAG_PUBLIC;
-
- if (target == this)
- visibleFlag |= UF_FLAG_PRIVATE;
- else if (GetTypeId() == TYPEID_PLAYER)
- valCount = PLAYER_END;
-
- std::size_t blockCount = UpdateMask::GetBlockCount(valCount);
-
- Player* plr = GetCharmerOrOwnerPlayerOrPlayerItself();
- if (GetOwnerGUID() == target->GetGUID())
- visibleFlag |= UF_FLAG_OWNER;
-
- if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO))
+ if (HasDynamicFlag(UNIT_DYNFLAG_SPECIALINFO))
if (HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID()))
- visibleFlag |= UF_FLAG_SPECIAL_INFO;
-
- if (plr && plr->IsInSameRaidWith(target))
- visibleFlag |= UF_FLAG_PARTY_MEMBER;
-
- Creature const* creature = ToCreature();
+ flags |= UF::UpdateFieldFlag::Empath;
- *data << uint8(blockCount);
- std::size_t maskPos = data->wpos();
- data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType));
-
- for (uint16 index = 0; index < valCount; ++index)
- {
- if (_fieldNotifyFlags & flags[index] ||
- ((flags[index] & visibleFlag) & UF_FLAG_SPECIAL_INFO) ||
- ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
- (index == UNIT_FIELD_AURASTATE && HasFlag(UNIT_FIELD_AURASTATE, PER_CASTER_AURA_STATE_MASK)))
- {
- UpdateMask::SetUpdateBit(data->contents() + maskPos, index);
+ return flags;
+}
- if (index == UNIT_NPC_FLAGS)
- {
- uint32 appendValue = m_uint32Values[UNIT_NPC_FLAGS];
+void Unit::BuildValuesCreate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint8(flags);
+ m_objectData->WriteCreate(*data, flags, this, target);
+ m_unitData->WriteCreate(*data, flags, this, target);
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- if (creature)
- if (!target->CanSeeSpellClickOn(creature))
- appendValue &= ~UNIT_NPC_FLAG_SPELLCLICK;
+void Unit::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
+{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(m_values.GetChangedObjectTypeMask());
- *data << uint32(appendValue);
- }
- else if (index == UNIT_FIELD_AURASTATE)
- {
- // Check per caster aura states to not enable using a spell in client if specified aura is not by target
- *data << BuildAuraStateUpdateForTarget(target);
- }
- // FIXME: Some values at server stored in float format but must be sent to client in uint32 format
- // there are some float values which may be negative or can't get negative due to other checks
- else if ((index >= UNIT_FIELD_NEGSTAT && index < UNIT_FIELD_NEGSTAT + MAX_STATS) ||
- (index >= UNIT_FIELD_POSSTAT && index < UNIT_FIELD_POSSTAT + MAX_STATS))
- {
- *data << uint32(m_floatValues[index]);
- }
- // Gamemasters should be always able to select units - remove not selectable flag
- else if (index == UNIT_FIELD_FLAGS)
- {
- uint32 appendValue = m_uint32Values[UNIT_FIELD_FLAGS];
- if (target->IsGameMaster())
- appendValue &= ~UNIT_FLAG_NOT_SELECTABLE;
+ if (m_values.HasChanged(TYPEID_OBJECT))
+ m_objectData->WriteUpdate(*data, flags, this, target);
- *data << uint32(appendValue);
- }
- // use modelid_a if not gm, _h if gm for CREATURE_FLAG_EXTRA_TRIGGER creatures
- else if (index == UNIT_FIELD_DISPLAYID)
- {
- uint32 displayId = m_uint32Values[UNIT_FIELD_DISPLAYID];
- if (creature)
- {
- CreatureTemplate const* cinfo = creature->GetCreatureTemplate();
-
- // this also applies for transform auras
- if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(getTransForm()))
- for (SpellEffectInfo const* effect : transform->GetEffectsForDifficulty(GetMap()->GetDifficultyID()))
- if (effect && effect->IsAura(SPELL_AURA_TRANSFORM))
- if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(effect->MiscValue))
- {
- cinfo = transformInfo;
- break;
- }
-
- if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER)
- if (target->IsGameMaster())
- displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
- }
+ if (m_values.HasChanged(TYPEID_UNIT))
+ m_unitData->WriteUpdate(*data, flags, this, target);
- *data << uint32(displayId);
- }
- // hide lootable animation for unallowed players
- else if (index == OBJECT_DYNAMIC_FLAGS)
- {
- uint32 dynamicFlags = m_uint32Values[OBJECT_DYNAMIC_FLAGS] & ~UNIT_DYNFLAG_TAPPED;
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
+}
- if (creature)
- {
- if (creature->hasLootRecipient() && !creature->isTappedBy(target))
- dynamicFlags |= UNIT_DYNFLAG_TAPPED;
+void Unit::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
+{
+ UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
+ valuesMask.Set(TYPEID_UNIT);
- if (!target->isAllowedToLoot(creature))
- dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE;
- }
+ std::size_t sizePos = data->wpos();
+ *data << uint32(0);
+ *data << uint32(valuesMask.GetBlock(0));
- // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras
- if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT)
- if (!HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, target->GetGUID()))
- dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT;
+ UF::UnitData::Mask mask;
+ m_unitData->AppendAllowedFieldsMaskForFlag(mask, flags);
+ m_unitData->WriteUpdate(*data, mask, flags, this, target);
- *data << dynamicFlags;
- }
- // FG: pretend that OTHER players in own group are friendly ("blue")
- else if (index == UNIT_FIELD_BYTES_2 || index == UNIT_FIELD_FACTIONTEMPLATE)
- {
- if (IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && IsInRaidWith(target))
- {
- FactionTemplateEntry const* ft1 = GetFactionTemplateEntry();
- FactionTemplateEntry const* ft2 = target->GetFactionTemplateEntry();
- if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2))
- {
- if (index == UNIT_FIELD_BYTES_2)
- // Allow targetting opposite faction in party when enabled in config
- *data << (m_uint32Values[UNIT_FIELD_BYTES_2] & ((UNIT_BYTE2_FLAG_SANCTUARY /*| UNIT_BYTE2_FLAG_AURAS | UNIT_BYTE2_FLAG_UNK5*/) << 8)); // this flag is at uint8 offset 1 !!
- else
- // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work)
- *data << uint32(target->getFaction());
- }
- else
- *data << m_uint32Values[index];
- }
- else
- *data << m_uint32Values[index];
- }
- else
- {
- // send in current format (float as float, uint32 as uint32)
- *data << m_uint32Values[index];
- }
- }
- }
+ data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
}
void Unit::DestroyForPlayer(Player* target) const
@@ -13821,6 +13765,12 @@ void Unit::DestroyForPlayer(Player* target) const
WorldObject::DestroyForPlayer(target);
}
+void Unit::ClearUpdateMask(bool remove)
+{
+ m_values.ClearChangesMask(&Unit::m_unitData);
+ Object::ClearUpdateMask(remove);
+}
+
int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const
{
int32 val = 0;
@@ -13940,7 +13890,7 @@ uint32 Unit::GetVirtualItemId(uint32 slot) const
if (slot >= MAX_EQUIPMENT_ITEMS)
return 0;
- return GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2);
+ return m_unitData->VirtualItems[slot].ItemID;
}
uint16 Unit::GetVirtualItemAppearanceMod(uint32 slot) const
@@ -13948,7 +13898,7 @@ uint16 Unit::GetVirtualItemAppearanceMod(uint32 slot) const
if (slot >= MAX_EQUIPMENT_ITEMS)
return 0;
- return GetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 0);
+ return m_unitData->VirtualItems[slot].ItemAppearanceModID;
}
void Unit::SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId /*= 0*/, uint16 itemVisual /*= 0*/)
@@ -13956,9 +13906,10 @@ void Unit::SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId /*=
if (slot >= MAX_EQUIPMENT_ITEMS)
return;
- SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2, itemId);
- SetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 0, appearanceModId);
- SetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 1, itemVisual);
+ auto virtualItemField = m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VirtualItems, slot);
+ SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemID), itemId);
+ SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), appearanceModId);
+ SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemVisual), itemVisual);
}
void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index cd32f1814f4..9f0e19ea0d8 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -981,8 +981,10 @@ class TC_GAME_API Unit : public WorldObject
bool haveOffhandWeapon() const;
bool CanDualWield() const { return m_canDualWield; }
virtual void SetCanDualWield(bool value) { m_canDualWield = value; }
- float GetCombatReach() const { return m_floatValues[UNIT_FIELD_COMBATREACH]; }
- float GetBoundaryRadius() const { return m_floatValues[UNIT_FIELD_BOUNDINGRADIUS]; }
+ float GetCombatReach() const { return m_unitData->CombatReach; }
+ void SetCombatReach(float combatReach) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CombatReach), combatReach); }
+ float GetBoundingRadius() const { return m_unitData->BoundingRadius; }
+ void SetBoundingRadius(float boundingRadius) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BoundingRadius), boundingRadius); }
bool IsWithinCombatRange(const Unit* obj, float dist2compare) const;
bool IsWithinMeleeRange(Unit const* obj) const;
float GetMeleeRange(Unit const* target) const;
@@ -1029,17 +1031,20 @@ class TC_GAME_API Unit : public WorldObject
bool IsTotem() const { return (m_unitTypeMask & UNIT_MASK_TOTEM) != 0; }
bool IsVehicle() const { return (m_unitTypeMask & UNIT_MASK_VEHICLE) != 0; }
- uint8 getLevel() const { return uint8(GetUInt32Value(UNIT_FIELD_LEVEL)); }
+ uint8 getLevel() const { return uint8(m_unitData->Level); }
uint8 GetLevelForTarget(WorldObject const* /*target*/) const override { return getLevel(); }
void SetLevel(uint8 lvl);
- uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); }
+ uint8 getRace() const { return m_unitData->Race; }
+ void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Race), race); }
uint64 getRaceMask() const { return UI64LIT(1) << (getRace() - 1); }
- uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); }
+ uint8 getClass() const { return m_unitData->ClassId; }
+ void SetClass(uint8 classId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ClassId), classId); }
uint32 getClassMask() const { return 1 << (getClass()-1); }
- uint8 getGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER); }
+ uint8 getGender() const { return m_unitData->Sex; }
+ void SetGender(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Sex), sex); }
- float GetStat(Stats stat) const { return float(GetUInt32Value(UNIT_FIELD_STAT+stat)); }
- void SetStat(Stats stat, int32 val) { SetStatInt32Value(UNIT_FIELD_STAT+stat, val); }
+ float GetStat(Stats stat) const { return float(m_unitData->Stats[stat]); }
+ void SetStat(Stats stat, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Stats, stat), val); }
uint32 GetArmor() const { return GetResistance(SPELL_SCHOOL_NORMAL) + GetBonusResistanceMod(SPELL_SCHOOL_NORMAL); }
void SetArmor(int32 val, int32 bonusVal)
{
@@ -1047,14 +1052,14 @@ class TC_GAME_API Unit : public WorldObject
SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, bonusVal);
}
- int32 GetResistance(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_RESISTANCES + school); }
- int32 GetBonusResistanceMod(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_BONUS_RESISTANCE_MODS + school); }
+ int32 GetResistance(SpellSchools school) const { return m_unitData->Resistances[school]; }
+ int32 GetBonusResistanceMod(SpellSchools school) const { return m_unitData->BonusResistanceMods[school]; }
int32 GetResistance(SpellSchoolMask mask) const;
- void SetResistance(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_RESISTANCES + school, val); }
- void SetBonusResistanceMod(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_BONUS_RESISTANCE_MODS + school, val); }
+ void SetResistance(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Resistances, school), val); }
+ void SetBonusResistanceMod(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BonusResistanceMods, school), val); }
- uint64 GetHealth() const { return GetUInt64Value(UNIT_FIELD_HEALTH); }
- uint64 GetMaxHealth() const { return GetUInt64Value(UNIT_FIELD_MAXHEALTH); }
+ uint64 GetHealth() const { return m_unitData->Health; }
+ uint64 GetMaxHealth() const { return m_unitData->MaxHealth; }
bool IsFullHealth() const { return GetHealth() == GetMaxHealth(); }
bool HealthBelowPct(int32 pct) const { return GetHealth() < CountPctFromMaxHealth(pct); }
@@ -1075,8 +1080,9 @@ class TC_GAME_API Unit : public WorldObject
virtual float GetDamageMultiplierForTarget(WorldObject const* /*target*/) const { return 1.0f; }
virtual float GetArmorMultiplierForTarget(WorldObject const* /*target*/) const { return 1.0f; }
- Powers GetPowerType() const { return Powers(GetUInt32Value(UNIT_FIELD_DISPLAY_POWER)); }
+ Powers GetPowerType() const { return Powers(*m_unitData->DisplayPower); }
void SetPowerType(Powers power);
+ void SetOverrideDisplayPowerId(uint32 powerDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::OverrideDisplayPowerID), powerDisplayId); }
void UpdateDisplayPower();
int32 GetPower(Powers power) const;
int32 GetMinPower(Powers power) const { return power == POWER_LUNAR_POWER ? -100 : 0; }
@@ -1089,18 +1095,46 @@ class TC_GAME_API Unit : public WorldObject
// returns the change in power
int32 ModifyPower(Powers power, int32 val);
+ void ApplyModPowerCostModifier(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostModifier, school), mod, apply); }
+ void ApplyModPowerCostMultiplier(SpellSchools school, float pct, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostMultiplier, school), pct, apply); }
+
uint32 GetBaseAttackTime(WeaponAttackType att) const;
void SetBaseAttackTime(WeaponAttackType att, uint32 val);
void UpdateAttackTimeField(WeaponAttackType att);
void ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply);
void ApplyCastTimePercentMod(float val, bool apply);
- SheathState GetSheath() const { return SheathState(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE)); }
- void SetSheath(SheathState sheathed) { SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE, sheathed); }
+ void SetModCastingSpeed(float castingSpeed) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), castingSpeed); }
+ void SetModSpellHaste(float spellHaste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), spellHaste); }
+ void SetModHaste(float haste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), haste); }
+ void SetModRangedHaste(float rangedHaste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), rangedHaste); }
+ void SetModHasteRegen(float hasteRegen) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), hasteRegen); }
+ void SetModTimeRate(float timeRate) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModTimeRate), timeRate); }
+
+ bool HasUnitFlag(UnitFlags flags) const { return (*m_unitData->Flags & flags) != 0; }
+ void AddUnitFlag(UnitFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); }
+ void RemoveUnitFlag(UnitFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); }
+ void SetUnitFlags(UnitFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); }
+ bool HasUnitFlag2(UnitFlags2 flags) const { return (*m_unitData->Flags2 & flags) != 0; }
+ void AddUnitFlag2(UnitFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); }
+ void RemoveUnitFlag2(UnitFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); }
+ void SetUnitFlags2(UnitFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); }
+ bool HasUnitFlag3(UnitFlags3 flags) const { return (*m_unitData->Flags3 & flags) != 0; }
+ void AddUnitFlag3(UnitFlags3 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); }
+ void RemoveUnitFlag3(UnitFlags3 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); }
+ void SetUnitFlags3(UnitFlags3 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); }
+
+ void SetCreatedBySpell(int32 spellId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatedBySpell), spellId); }
+
+ Emote GetEmoteState() const { return Emote(*m_unitData->EmoteState); }
+ void SetEmoteState(Emote emote) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::EmoteState), emote); }
+
+ SheathState GetSheath() const { return SheathState(*m_unitData->SheatheState); }
+ void SetSheath(SheathState sheathed) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SheatheState), sheathed); }
// faction template id
- uint32 getFaction() const { return GetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE); }
- void setFaction(uint32 faction) { SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, faction); }
+ uint32 getFaction() const { return m_unitData->FactionTemplate; }
+ void setFaction(uint32 faction) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FactionTemplate), faction); }
FactionTemplateEntry const* GetFactionTemplateEntry() const;
ReputationRank GetReactionTo(Unit const* target) const;
@@ -1114,23 +1148,38 @@ class TC_GAME_API Unit : public WorldObject
bool IsInRaidWith(Unit const* unit) const;
void GetPartyMembers(std::list<Unit*> &units);
bool IsContestedGuard() const;
- bool IsPvP() const { return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); }
- bool IsFFAPvP() const { return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); }
+ UnitPVPStateFlags GetPvpFlags() const { return UnitPVPStateFlags(*m_unitData->PvpFlags); }
+ bool HasPvpFlag(UnitPVPStateFlags flags) const { return (*m_unitData->PvpFlags & flags) != 0; }
+ void AddPvpFlag(UnitPVPStateFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); }
+ void RemovePvpFlag(UnitPVPStateFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); }
+ void SetPvpFlags(UnitPVPStateFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); }
+ bool IsPvP() const { return HasPvpFlag(UNIT_BYTE2_FLAG_PVP); }
+ bool IsFFAPvP() const { return HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); }
virtual void SetPvP(bool state);
+ UnitPetFlag GetPetFlags() const { return UnitPetFlag(*m_unitData->PetFlags); }
+ bool HasPetFlag(UnitPetFlag flags) const { return (*m_unitData->PetFlags & flags) != 0; }
+ void AddPetFlag(UnitPetFlag flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); }
+ void RemovePetFlag(UnitPetFlag flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); }
+ void SetPetFlags(UnitPetFlag flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); }
+
uint32 GetCreatureType() const;
uint32 GetCreatureTypeMask() const;
- UnitStandStateType GetStandState() const { return UnitStandStateType(GetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE)); }
+ UnitStandStateType GetStandState() const { return UnitStandStateType(*m_unitData->StandState); }
bool IsSitState() const;
bool IsStandState() const;
void SetStandState(UnitStandStateType state, uint32 animKitID = 0);
- void SetStandFlags(uint8 flags) { SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); }
- void RemoveStandFlags(uint8 flags) { RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); }
+ void AddVisFlags(UnitVisFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); }
+ void RemoveVisFlags(UnitVisFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); }
+ void SetVisFlags(UnitVisFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); }
- bool IsMounted() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); }
- uint32 GetMountID() const { return GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID); }
+ void SetAnimTier(UnitBytes1_Flags animTier, bool notifyClient);
+
+ bool IsMounted() const { return HasUnitFlag(UNIT_FLAG_MOUNT); }
+ uint32 GetMountDisplayId() const { return m_unitData->MountDisplayID; }
+ void SetMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MountDisplayID), mountDisplayId); }
void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0);
void Dismount();
MountCapabilityEntry const* GetMountCapability(uint32 mountType) const;
@@ -1199,27 +1248,35 @@ class TC_GAME_API Unit : public WorldObject
MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const;
- bool IsVendor() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR); }
- bool IsTrainer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TRAINER); }
- bool IsQuestGiver() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); }
- bool IsGossip() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); }
- bool IsTaxi() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_FLIGHTMASTER); }
- bool IsGuildMaster() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PETITIONER); }
- bool IsBattleMaster() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BATTLEMASTER); }
- bool IsBanker() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER); }
- bool IsInnkeeper() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_INNKEEPER); }
- bool IsSpiritHealer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITHEALER); }
- bool IsSpiritGuide() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITGUIDE); }
- bool IsTabardDesigner()const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TABARDDESIGNER); }
- bool IsAuctioner() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_AUCTIONEER); }
- bool IsArmorer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_REPAIR); }
+ bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags[0] & flags) != 0; }
+ void AddNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
+ void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
+ void SetNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
+ bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags[1] & flags) != 0; }
+ void AddNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
+ void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
+ void SetNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
+ bool IsVendor() const { return HasNpcFlag(UNIT_NPC_FLAG_VENDOR); }
+ bool IsTrainer() const { return HasNpcFlag(UNIT_NPC_FLAG_TRAINER); }
+ bool IsQuestGiver() const { return HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); }
+ bool IsGossip() const { return HasNpcFlag(UNIT_NPC_FLAG_GOSSIP); }
+ bool IsTaxi() const { return HasNpcFlag(UNIT_NPC_FLAG_FLIGHTMASTER); }
+ bool IsGuildMaster() const { return HasNpcFlag(UNIT_NPC_FLAG_PETITIONER); }
+ bool IsBattleMaster() const { return HasNpcFlag(UNIT_NPC_FLAG_BATTLEMASTER); }
+ bool IsBanker() const { return HasNpcFlag(UNIT_NPC_FLAG_BANKER); }
+ bool IsInnkeeper() const { return HasNpcFlag(UNIT_NPC_FLAG_INNKEEPER); }
+ bool IsSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITHEALER); }
+ bool IsSpiritGuide() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITGUIDE); }
+ bool IsTabardDesigner()const{ return HasNpcFlag(UNIT_NPC_FLAG_TABARDDESIGNER); }
+ bool IsAuctioner() const { return HasNpcFlag(UNIT_NPC_FLAG_AUCTIONEER); }
+ bool IsArmorer() const { return HasNpcFlag(UNIT_NPC_FLAG_REPAIR); }
bool IsServiceProvider() const;
- bool IsSpiritService() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE); }
+ bool IsSpiritService() const { return HasNpcFlag(NPCFlags(UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE)); }
bool IsCritter() const { return GetCreatureType() == CREATURE_TYPE_CRITTER; }
bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); }
- bool IsInCombat() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); }
+ bool IsInCombat() const { return HasUnitFlag(UNIT_FLAG_IN_COMBAT); }
bool IsInCombatWith(Unit const* who) const;
void CombatStart(Unit* target, bool initialAggro = true);
void SetInCombatState(bool PvP, Unit* enemy = NULL);
@@ -1310,8 +1367,8 @@ class TC_GAME_API Unit : public WorldObject
void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false);
-
void SendSetPlayHoverAnim(bool enable);
+ void SetHoverHeight(float hoverHeight) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::HoverHeight), hoverHeight); }
bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); }
bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); }
@@ -1347,19 +1404,22 @@ class TC_GAME_API Unit : public WorldObject
DeathState getDeathState() const { return m_deathState; }
virtual void setDeathState(DeathState s); // overwrited in Creature/Player/Pet
- ObjectGuid GetOwnerGUID() const { return GetGuidValue(UNIT_FIELD_SUMMONEDBY); }
+ ObjectGuid GetOwnerGUID() const { return m_unitData->SummonedBy; }
void SetOwnerGUID(ObjectGuid owner);
- ObjectGuid GetCreatorGUID() const { return GetGuidValue(UNIT_FIELD_CREATEDBY); }
- void SetCreatorGUID(ObjectGuid creator) { SetGuidValue(UNIT_FIELD_CREATEDBY, creator); }
- ObjectGuid GetMinionGUID() const { return GetGuidValue(UNIT_FIELD_SUMMON); }
- void SetMinionGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_SUMMON, guid); }
- ObjectGuid GetCharmerGUID() const { return GetGuidValue(UNIT_FIELD_CHARMEDBY); }
- void SetCharmerGUID(ObjectGuid owner) { SetGuidValue(UNIT_FIELD_CHARMEDBY, owner); }
- ObjectGuid GetCharmGUID() const { return GetGuidValue(UNIT_FIELD_CHARM); }
- void SetPetGUID(ObjectGuid guid) { m_SummonSlot[SUMMON_SLOT_PET] = guid; }
+ ObjectGuid GetCreatorGUID() const { return m_unitData->CreatedBy; }
+ void SetCreatorGUID(ObjectGuid creator) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatedBy), creator); }
+ ObjectGuid GetMinionGUID() const { return m_unitData->Summon; }
+ void SetMinionGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Summon), guid); }
+ ObjectGuid GetCharmerGUID() const { return m_unitData->CharmedBy; }
+ void SetCharmerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CharmedBy), owner); }
+ ObjectGuid GetCharmGUID() const { return m_unitData->Charm; }
+ void SetCharmGUID(ObjectGuid charm) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Charm), charm); }
ObjectGuid GetPetGUID() const { return m_SummonSlot[SUMMON_SLOT_PET]; }
- void SetCritterGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_CRITTER, guid); }
- ObjectGuid GetCritterGUID() const { return GetGuidValue(UNIT_FIELD_CRITTER); }
+ void SetPetGUID(ObjectGuid guid) { m_SummonSlot[SUMMON_SLOT_PET] = guid; }
+ ObjectGuid GetCritterGUID() const { return m_unitData->Critter; }
+ void SetCritterGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Critter), guid); }
+ ObjectGuid GetBattlePetCompanionGUID() const { return m_unitData->BattlePetCompanionGUID; }
+ void SetBattlePetCompanionGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionGUID), guid); }
bool IsControlledByPlayer() const { return m_ControlledByPlayer; }
ObjectGuid GetCharmerOrOwnerGUID() const;
@@ -1400,6 +1460,8 @@ class TC_GAME_API Unit : public WorldObject
CharmInfo* GetCharmInfo() { return m_charmInfo; }
CharmInfo* InitCharmInfo();
void DeleteCharmInfo();
+ void SetPetNumberForClient(uint32 petNumber) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNumber), petNumber); }
+ void SetPetNameTimestamp(uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNameTimestamp), timestamp); }
void UpdateCharmAI();
// returns the unit that this player IS CONTROLLING
Unit* GetUnitBeingMoved() const;
@@ -1549,22 +1611,36 @@ class TC_GAME_API Unit : public WorldObject
void InitStatBuffMods();
void ApplyStatBuffMod(Stats stat, float val, bool apply);
void ApplyStatPercentBuffMod(Stats stat, float val, bool apply);
+ void UpdateStatBuffModForClient(Stats stat);
void SetCreateStat(Stats stat, float val) { m_createStats[stat] = val; }
- void SetCreateHealth(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_HEALTH, val); }
- uint32 GetCreateHealth() const { return GetUInt32Value(UNIT_FIELD_BASE_HEALTH); }
- void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); }
- uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); }
+ void SetCreateHealth(uint32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BaseHealth), val); }
+ uint32 GetCreateHealth() const { return m_unitData->BaseHealth; }
+ void SetCreateMana(uint32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BaseMana), val); }
+ uint32 GetCreateMana() const { return m_unitData->BaseMana; }
int32 GetCreatePowers(Powers power) const;
- float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT+stat); }
- float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT+stat); }
+ float GetPosStat(Stats stat) const { return m_unitData->StatPosBuff[stat]; }
+ float GetNegStat(Stats stat) const { return m_unitData->StatNegBuff[stat]; }
float GetCreateStat(Stats stat) const { return m_createStats[stat]; }
- uint32 GetChannelSpellId() const { return GetUInt32Value(UNIT_FIELD_CHANNEL_DATA); }
- void SetChannelSpellId(uint32 channelSpellId) { SetUInt32Value(UNIT_FIELD_CHANNEL_DATA, channelSpellId); }
- uint32 GetChannelSpellXSpellVisualId() const { return GetUInt32Value(UNIT_FIELD_CHANNEL_DATA + 1); }
- void SetChannelSpellXSpellVisualId(uint32 channelSpellXSpellVisualId) { SetUInt32Value(UNIT_FIELD_CHANNEL_DATA + 1, channelSpellXSpellVisualId); }
- DynamicFieldStructuredView<ObjectGuid> GetChannelObjects() const { return GetDynamicStructuredValues<ObjectGuid>(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS); }
- void AddChannelObject(ObjectGuid guid) { AddDynamicStructuredValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS, &guid); }
+ uint32 GetChannelSpellId() const { return m_unitData->ChannelData->SpellID; }
+ void SetChannelSpellId(uint32 channelSpellId)
+ {
+ SetUpdateFieldValue(m_values
+ .ModifyValue(&Unit::m_unitData)
+ .ModifyValue(&UF::UnitData::ChannelData)
+ .ModifyValue(&UF::UnitChannel::SpellID), channelSpellId);
+ }
+ uint32 GetChannelSpellXSpellVisualId() const { return m_unitData->ChannelData->SpellXSpellVisualID; }
+ void SetChannelSpellXSpellVisualId(uint32 channelSpellXSpellVisualId)
+ {
+ SetUpdateFieldValue(m_values
+ .ModifyValue(&Unit::m_unitData)
+ .ModifyValue(&UF::UnitData::ChannelData)
+ .ModifyValue(&UF::UnitChannel::SpellXSpellVisualID), channelSpellXSpellVisualId);
+ }
+ void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)) = guid; }
+ void SetChannelObject(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects, slot), guid); }
+ void ClearChannelObjects() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)); }
void SetCurrentCastSpell(Spell* pSpell);
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true);
@@ -1595,7 +1671,7 @@ class TC_GAME_API Unit : public WorldObject
ObjectGuid m_SummonSlot[MAX_SUMMON_SLOT];
ObjectGuid m_ObjectSlot[MAX_GAMEOBJECT_SLOT];
- ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM)); }
+ ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(*m_unitData->ShapeshiftForm); }
void SetShapeshiftForm(ShapeshiftForm form);
bool IsInFeralForm() const;
@@ -1636,6 +1712,14 @@ class TC_GAME_API Unit : public WorldObject
virtual void UpdateMaxPower(Powers power) = 0;
virtual uint32 GetPowerIndex(Powers power) const = 0;
virtual void UpdateAttackPowerAndDamage(bool ranged = false) = 0;
+ void SetAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPower), attackPower); }
+ void SetAttackPowerModPos(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerModPos), attackPowerMod); }
+ void SetAttackPowerModNeg(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerModNeg), attackPowerMod); }
+ void SetAttackPowerMultiplier(float attackPowerMult) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerMultiplier), attackPowerMult); }
+ void SetRangedAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPower), attackPower); }
+ void SetRangedAttackPowerModPos(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModPos), attackPowerMod); }
+ void SetRangedAttackPowerModNeg(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModNeg), attackPowerMod); }
+ void SetRangedAttackPowerMultiplier(float attackPowerMult) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerMultiplier), attackPowerMult); }
virtual void UpdateDamagePhysical(WeaponAttackType attType);
float GetTotalAttackPowerValue(WeaponAttackType attType) const;
float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type) const;
@@ -1683,12 +1767,16 @@ class TC_GAME_API Unit : public WorldObject
}
void UpdateInterruptMask();
- uint32 GetDisplayId() const { return GetUInt32Value(UNIT_FIELD_DISPLAYID); }
+ uint32 GetDisplayId() const { return m_unitData->DisplayID; }
virtual void SetDisplayId(uint32 modelId, float displayScale = 1.f);
- uint32 GetNativeDisplayId() const { return GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID); }
- float GetNativeDisplayScale() const { return GetFloatValue(UNIT_FIELD_NATIVE_X_DISPLAY_SCALE); }
+ uint32 GetNativeDisplayId() const { return m_unitData->NativeDisplayID; }
+ float GetNativeDisplayScale() const { return m_unitData->NativeXDisplayScale; }
void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false);
- void SetNativeDisplayId(uint32 displayId, float displayScale = 1.f) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, displayId); SetFloatValue(UNIT_FIELD_NATIVE_X_DISPLAY_SCALE, displayScale); }
+ void SetNativeDisplayId(uint32 displayId, float displayScale = 1.f)
+ {
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NativeDisplayID), displayId);
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NativeXDisplayScale), displayScale);
+ }
void setTransForm(uint32 spellid) { m_transform = spellid;}
uint32 getTransForm() const { return m_transform;}
@@ -1717,7 +1805,7 @@ class TC_GAME_API Unit : public WorldObject
void RemoveAllAreaTriggers();
void ModifyAuraState(AuraStateType flag, bool apply);
- uint32 BuildAuraStateUpdateForTarget(Unit* target) const;
+ uint32 BuildAuraStateUpdateForTarget(Unit const* target) const;
bool HasAuraState(AuraStateType flag, SpellInfo const* spellProto = NULL, Unit const* Caster = NULL) const;
void UnsummonAllTotems();
bool IsMagnet() const;
@@ -1891,7 +1979,7 @@ class TC_GAME_API Unit : public WorldObject
TempSummon* ToTempSummon() { if (IsSummon()) return reinterpret_cast<TempSummon*>(this); else return NULL; }
TempSummon const* ToTempSummon() const { if (IsSummon()) return reinterpret_cast<TempSummon const*>(this); else return NULL; }
- ObjectGuid GetTarget() const { return GetGuidValue(UNIT_FIELD_TARGET); }
+ ObjectGuid GetTarget() const { return m_unitData->Target; }
virtual void SetTarget(ObjectGuid const& /*guid*/) = 0;
// Movement info
@@ -1920,11 +2008,17 @@ class TC_GAME_API Unit : public WorldObject
uint16 GetVirtualItemAppearanceMod(uint32 slot) const;
void SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId = 0, uint16 itemVisual = 0);
+ UF::UpdateField<UF::UnitData, 0, TYPEID_UNIT> m_unitData;
+
protected:
explicit Unit (bool isWorldObject);
- void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override;
+ UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override;
+ void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
+ void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void DestroyForPlayer(Player* target) const override;
+ void ClearUpdateMask(bool remove) override;
UnitAI* i_AI, *i_disabledAI;
@@ -1936,6 +2030,8 @@ class TC_GAME_API Unit : public WorldObject
bool m_AutoRepeatFirstCast;
float m_createStats[MAX_STATS];
+ float m_floatStatPosBuff[MAX_STATS];
+ float m_floatStatNegBuff[MAX_STATS];
AttackerSet m_attackers;
Unit* m_attacking;
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 320697e68af..363ffd7dc16 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -47,43 +47,20 @@ enum UnitStandStateType : uint8
};
// byte flag value (UNIT_FIELD_BYTES_1, 2)
-enum UnitStandFlags : uint8
+enum UnitVisFlags : uint8
{
- UNIT_STAND_FLAGS_UNK1 = 0x01,
- UNIT_STAND_FLAGS_CREEP = 0x02,
- UNIT_STAND_FLAGS_UNTRACKABLE = 0x04,
- UNIT_STAND_FLAGS_UNK4 = 0x08,
- UNIT_STAND_FLAGS_UNK5 = 0x10,
- UNIT_STAND_FLAGS_ALL = 0xFF
-};
-
-enum UnitBytes0Offsets : uint8
-{
- UNIT_BYTES_0_OFFSET_RACE = 0,
- UNIT_BYTES_0_OFFSET_CLASS = 1,
- UNIT_BYTES_0_OFFSET_PLAYER_CLASS = 2,
- UNIT_BYTES_0_OFFSET_GENDER = 3
-};
-
-enum UnitBytes1Offsets : uint8
-{
- UNIT_BYTES_1_OFFSET_STAND_STATE = 0,
- UNIT_BYTES_1_OFFSET_PET_TALENTS = 1, // unused
- UNIT_BYTES_1_OFFSET_VIS_FLAG = 2,
- UNIT_BYTES_1_OFFSET_ANIM_TIER = 3
-};
-
-enum UnitBytes2Offsets : uint8
-{
- UNIT_BYTES_2_OFFSET_SHEATH_STATE = 0,
- UNIT_BYTES_2_OFFSET_PVP_FLAG = 1,
- UNIT_BYTES_2_OFFSET_PET_FLAGS = 2,
- UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM = 3
+ UNIT_VIS_FLAGS_UNK1 = 0x01,
+ UNIT_VIS_FLAGS_CREEP = 0x02,
+ UNIT_VIS_FLAGS_UNTRACKABLE = 0x04,
+ UNIT_VIS_FLAGS_UNK4 = 0x08,
+ UNIT_VIS_FLAGS_UNK5 = 0x10,
+ UNIT_VIS_FLAGS_ALL = 0xFF
};
// byte flags value (UNIT_FIELD_BYTES_1, 3)
enum UnitBytes1_Flags : uint8
{
+ UNIT_BYTE1_FLAG_NONE = 0x00,
UNIT_BYTE1_FLAG_ALWAYS_STAND = 0x01,
UNIT_BYTE1_FLAG_HOVER = 0x02,
UNIT_BYTE1_FLAG_UNK_3 = 0x04,
@@ -103,6 +80,7 @@ enum SheathState : uint8
// byte (1 from 0..3) of UNIT_FIELD_BYTES_2
enum UnitPVPStateFlags : uint8
{
+ UNIT_BYTE2_FLAG_NONE = 0x00,
UNIT_BYTE2_FLAG_PVP = 0x01,
UNIT_BYTE2_FLAG_UNK1 = 0x02,
UNIT_BYTE2_FLAG_FFA_PVP = 0x04,
@@ -114,10 +92,11 @@ enum UnitPVPStateFlags : uint8
};
// byte (2 from 0..3) of UNIT_FIELD_BYTES_2
-enum UnitRename : uint8
+enum UnitPetFlag : uint8
{
- UNIT_CAN_BE_RENAMED = 0x01,
- UNIT_CAN_BE_ABANDONED = 0x02
+ UNIT_PET_FLAG_NONE = 0x0,
+ UNIT_PET_FLAG_CAN_BE_RENAMED = 0x01,
+ UNIT_PET_FLAG_CAN_BE_ABANDONED = 0x02
};
// high byte (3 from 0..3) of UNIT_FIELD_BYTES_2
@@ -238,49 +217,54 @@ enum UnitFlags3 : uint32
};
/// Non Player Character flags
-enum NPCFlags : uint64
+enum NPCFlags : uint32
+{
+ UNIT_NPC_FLAG_NONE = 0x00000000,
+ UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100%
+ UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // 100%
+ UNIT_NPC_FLAG_UNK1 = 0x00000004,
+ UNIT_NPC_FLAG_UNK2 = 0x00000008,
+ UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100%
+ UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100%
+ UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100%
+ UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100%
+ UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor
+ UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100%
+ UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed
+ UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100%
+ UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100%
+ UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100%
+ UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // guessed
+ UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // guessed
+ UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // 100%
+ UNIT_NPC_FLAG_BANKER = 0x00020000, // 100%
+ UNIT_NPC_FLAG_PETITIONER = 0x00040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
+ UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // 100%
+ UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // 100%
+ UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // 100%
+ UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
+ UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, //
+ UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, //
+ UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set
+ UNIT_NPC_FLAG_MAILBOX = 0x04000000, // mailbox
+ UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC = 0x08000000, // artifact powers reset
+ UNIT_NPC_FLAG_TRANSMOGRIFIER = 0x10000000, // transmogrification
+ UNIT_NPC_FLAG_VAULTKEEPER = 0x20000000, // void storage
+ UNIT_NPC_FLAG_WILD_BATTLE_PET = 0x40000000, // Pet that player can fight (Battle Pet)
+ UNIT_NPC_FLAG_BLACK_MARKET = 0x80000000 // black market
+};
+
+enum NPCFlags2 : uint32
{
- UNIT_NPC_FLAG_NONE = 0x00000000000,
- UNIT_NPC_FLAG_GOSSIP = 0x00000000001, // 100%
- UNIT_NPC_FLAG_QUESTGIVER = 0x00000000002, // 100%
- UNIT_NPC_FLAG_UNK1 = 0x00000000004,
- UNIT_NPC_FLAG_UNK2 = 0x00000000008,
- UNIT_NPC_FLAG_TRAINER = 0x00000000010, // 100%
- UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000000020, // 100%
- UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000000040, // 100%
- UNIT_NPC_FLAG_VENDOR = 0x00000000080, // 100%
- UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000000100, // 100%, general goods vendor
- UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000000200, // 100%
- UNIT_NPC_FLAG_VENDOR_POISON = 0x00000000400, // guessed
- UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000000800, // 100%
- UNIT_NPC_FLAG_REPAIR = 0x00000001000, // 100%
- UNIT_NPC_FLAG_FLIGHTMASTER = 0x00000002000, // 100%
- UNIT_NPC_FLAG_SPIRITHEALER = 0x00000004000, // guessed
- UNIT_NPC_FLAG_SPIRITGUIDE = 0x00000008000, // guessed
- UNIT_NPC_FLAG_INNKEEPER = 0x00000010000, // 100%
- UNIT_NPC_FLAG_BANKER = 0x00000020000, // 100%
- UNIT_NPC_FLAG_PETITIONER = 0x00000040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
- UNIT_NPC_FLAG_TABARDDESIGNER = 0x00000080000, // 100%
- UNIT_NPC_FLAG_BATTLEMASTER = 0x00000100000, // 100%
- UNIT_NPC_FLAG_AUCTIONEER = 0x00000200000, // 100%
- UNIT_NPC_FLAG_STABLEMASTER = 0x00000400000, // 100%
- UNIT_NPC_FLAG_GUILD_BANKER = 0x00000800000, //
- UNIT_NPC_FLAG_SPELLCLICK = 0x00001000000, //
- UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x00002000000, // players with mounts that have vehicle data should have it set
- UNIT_NPC_FLAG_MAILBOX = 0x00004000000, // mailbox
- UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC = 0x00008000000, // artifact powers reset
- UNIT_NPC_FLAG_TRANSMOGRIFIER = 0x00010000000, // transmogrification
- UNIT_NPC_FLAG_VAULTKEEPER = 0x00020000000, // void storage
- UNIT_NPC_FLAG_WILD_BATTLE_PET = 0x00040000000, // Pet that player can fight (Battle Pet)
- UNIT_NPC_FLAG_BLACK_MARKET = 0x00080000000, // black market
- UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER = 0x00100000000,
- UNIT_NPC_FLAG_GARRISON_ARCHITECT = 0x00200000000,
- UNIT_NPC_FLAG_STEERING = 0x00400000000,
- UNIT_NPC_FLAG_SHIPMENT_CRAFTER = 0x01000000000,
- UNIT_NPC_FLAG_GARRISON_MISSION_NPC = 0x02000000000,
- UNIT_NPC_FLAG_TRADESKILL_NPC = 0x04000000000,
- UNIT_NPC_FLAG_BLACK_MARKET_VIEW = 0x08000000000,
- UNIT_NPC_FLAG_CONTRIBUTION_COLLECTOR = 0x40000000000,
+ UNIT_NPC_FLAG_2_NONE = 0x000,
+ UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x001,
+ UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x002,
+ UNIT_NPC_FLAG_2_STEERING = 0x004,
+ UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x010,
+ UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x020,
+ UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x040,
+ UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x080,
+ UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x400
};
enum MovementFlags : uint32
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 397a80b3eee..88c57e65e9a 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -48,9 +48,9 @@ UsableSeatNum(0), _me(unit), _vehicleInfo(vehInfo), _creatureEntry(creatureEntry
// Set or remove correct flags based on available seats. Will overwrite db data (if wrong).
if (UsableSeatNum)
- _me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
+ _me->AddNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
else
- _me->RemoveFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
+ _me->RemoveNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
InitMovementInfoForBase();
}
@@ -483,7 +483,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit)
unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->ID, _me->GetGUID().ToString().c_str(), (int32)seat->first);
if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum)
- _me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
+ _me->AddNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
// Enable gravity for passenger when he did not have it active before entering the vehicle
if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_DISABLE_GRAVITY && !seat->second.Passenger.IsGravityDisabled)
@@ -491,7 +491,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit)
// Remove UNIT_FLAG_NOT_SELECTABLE if passenger did not have it before entering vehicle
if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable)
- unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ unit->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
seat->second.Passenger.Reset();
@@ -768,7 +768,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
Passenger->SetVehicle(Target);
Seat->second.Passenger.Guid = Passenger->GetGUID();
- Seat->second.Passenger.IsUnselectable = Passenger->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Seat->second.Passenger.IsUnselectable = Passenger->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Seat->second.Passenger.IsGravityDisabled = Passenger->HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
if (Seat->second.SeatInfo->CanEnterOrExit())
{
@@ -777,9 +777,9 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
if (!Target->UsableSeatNum)
{
if (Target->GetBase()->GetTypeId() == TYPEID_PLAYER)
- Target->GetBase()->RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PLAYER_VEHICLE);
+ Target->GetBase()->RemoveNpcFlag(UNIT_NPC_FLAG_PLAYER_VEHICLE);
else
- Target->GetBase()->RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ Target->GetBase()->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
}
}
@@ -806,7 +806,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
Passenger->SetDisableGravity(true);
if (Seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE)
- Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Passenger->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Passenger->m_movementInfo.transport.pos.Relocate(veSeat->AttachmentOffset.X, veSeat->AttachmentOffset.Y, veSeat->AttachmentOffset.Z);
Passenger->m_movementInfo.transport.time = 0;
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 512b8045e55..2f3102f5e65 100644
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -1160,11 +1160,12 @@ void GameEventMgr::UpdateEventNPCFlags(uint16 event_id)
for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr)
{
Creature* creature = itr->second;
- uint32 npcflag = GetNPCFlag(creature);
+ uint64 npcflag = GetNPCFlag(creature);
if (CreatureTemplate const* creatureTemplate = creature->GetCreatureTemplate())
npcflag |= creatureTemplate->npcflag;
- creature->SetUInt64Value(UNIT_NPC_FLAGS, npcflag);
+ creature->SetNpcFlags(NPCFlags(npcflag & 0xFFFFFFFF));
+ creature->SetNpcFlags2(NPCFlags2(npcflag >> 32));
// reset gossip options, since the flag change might have added / removed some
//cr->ResetGossipOptions();
}
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 624b42737e1..dc9dd093b36 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -93,10 +93,10 @@ std::string GetScriptCommandName(ScriptCommands command)
{
case SCRIPT_COMMAND_TALK: res = "SCRIPT_COMMAND_TALK"; break;
case SCRIPT_COMMAND_EMOTE: res = "SCRIPT_COMMAND_EMOTE"; break;
- case SCRIPT_COMMAND_FIELD_SET: res = "SCRIPT_COMMAND_FIELD_SET"; break;
+ case SCRIPT_COMMAND_FIELD_SET_DEPRECATED: res = "SCRIPT_COMMAND_FIELD_SET_DEPRECATED"; break;
case SCRIPT_COMMAND_MOVE_TO: res = "SCRIPT_COMMAND_MOVE_TO"; break;
- case SCRIPT_COMMAND_FLAG_SET: res = "SCRIPT_COMMAND_FLAG_SET"; break;
- case SCRIPT_COMMAND_FLAG_REMOVE: res = "SCRIPT_COMMAND_FLAG_REMOVE"; break;
+ case SCRIPT_COMMAND_FLAG_SET_DEPRECATED: res = "SCRIPT_COMMAND_FLAG_SET_DEPRECATED"; break;
+ case SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED: res = "SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED"; break;
case SCRIPT_COMMAND_TELEPORT_TO: res = "SCRIPT_COMMAND_TELEPORT_TO"; break;
case SCRIPT_COMMAND_QUEST_EXPLORED: res = "SCRIPT_COMMAND_QUEST_EXPLORED"; break;
case SCRIPT_COMMAND_KILL_CREDIT: res = "SCRIPT_COMMAND_KILL_CREDIT"; break;
@@ -5287,6 +5287,13 @@ void ObjectMgr::LoadScripts(ScriptsType type)
}
break;
}
+ case SCRIPT_COMMAND_FIELD_SET_DEPRECATED:
+ case SCRIPT_COMMAND_FLAG_SET_DEPRECATED:
+ case SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED:
+ {
+ TC_LOG_ERROR("sql.sql", "Table `%s` uses deprecated direct updatefield modify command %s for script id %u", tableName.c_str(), GetScriptCommandName(tmp.command).c_str(), tmp.id);
+ continue;
+ }
default:
break;
}
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 0aa19c37287..667b8ea1da4 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -101,10 +101,10 @@ enum ScriptCommands
{
SCRIPT_COMMAND_TALK = 0, // source/target = Creature, target = any, datalong = talk type (0=say, 1=whisper, 2=yell, 3=emote text, 4=boss emote text), datalong2 & 1 = player talk (instead of creature), dataint = string_id
SCRIPT_COMMAND_EMOTE = 1, // source/target = Creature, datalong = emote id, datalong2 = 0: set emote state; > 0: play emote state
- SCRIPT_COMMAND_FIELD_SET = 2, // source/target = Creature, datalong = field id, datalog2 = value
+ SCRIPT_COMMAND_FIELD_SET_DEPRECATED = 2,
SCRIPT_COMMAND_MOVE_TO = 3, // source/target = Creature, datalong2 = time to reach, x/y/z = destination
- SCRIPT_COMMAND_FLAG_SET = 4, // source/target = Creature, datalong = field id, datalog2 = bitmask
- SCRIPT_COMMAND_FLAG_REMOVE = 5, // source/target = Creature, datalong = field id, datalog2 = bitmask
+ SCRIPT_COMMAND_FLAG_SET_DEPRECATED = 4,
+ SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED= 5,
SCRIPT_COMMAND_TELEPORT_TO = 6, // source/target = Creature/Player (see datalong2), datalong = map_id, datalong2 = 0: Player; 1: Creature, x/y/z = destination, o = orientation
SCRIPT_COMMAND_QUEST_EXPLORED = 7, // target/source = Player, target/source = GO/Creature, datalong = quest id, datalong2 = distance or 0
SCRIPT_COMMAND_KILL_CREDIT = 8, // target/source = Player, datalong = creature entry, datalong2 = 0: personal credit, 1: group credit
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index c0b5d775642..ae0d99ecc85 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -40,13 +40,12 @@
#include "Random.h"
#include "SpellAuras.h"
#include "UpdateData.h"
-#include "UpdateFieldFlags.h"
#include "Util.h"
#include "World.h"
#include "WorldSession.h"
Roll::Roll(LootItem const& li) : itemid(li.itemid),
-itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count),
+itemRandomPropId(li.randomPropertyId), itemCount(li.count),
totalPlayersRolling(0), totalNeed(0), totalGreed(0), totalPass(0), itemSlot(0),
rollVoteMask(ROLL_ALL_TYPE_NO_DISENCHANT) { }
@@ -112,7 +111,7 @@ bool Group::Create(Player* leader)
m_guid = ObjectGuid::Create<HighGuid::Party>(sGroupMgr->GenerateGroupId());
m_leaderGuid = leaderGuid;
m_leaderName = leader->GetName();
- leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
+ leader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER);
if (isBGGroup() || isBFGroup())
{
@@ -488,8 +487,6 @@ bool Group::AddMember(Player* player)
{
// Broadcast new player group member fields to rest of the group
- player->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER);
-
UpdateData groupData(player->GetMapId());
WorldPacket groupDataPacket;
@@ -502,17 +499,13 @@ bool Group::AddMember(Player* player)
if (Player* existingMember = itr->GetSource())
{
if (player->HaveAtClient(existingMember))
- {
- existingMember->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER);
- existingMember->BuildValuesUpdateBlockForPlayer(&groupData, player);
- existingMember->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER);
- }
+ existingMember->BuildValuesUpdateBlockForPlayerWithFlag(&groupData, UF::UpdateFieldFlag::PartyMember, player);
if (existingMember->HaveAtClient(player))
{
UpdateData newData(player->GetMapId());
WorldPacket newDataPacket;
- player->BuildValuesUpdateBlockForPlayer(&newData, existingMember);
+ player->BuildValuesUpdateBlockForPlayerWithFlag(&newData, UF::UpdateFieldFlag::PartyMember, existingMember);
if (newData.HasData())
{
newData.BuildPacket(&newDataPacket);
@@ -527,8 +520,6 @@ bool Group::AddMember(Player* player)
groupData.BuildPacket(&groupDataPacket);
player->SendDirectMessage(&groupDataPacket);
}
-
- player->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER);
}
if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING))
@@ -739,9 +730,9 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex)
}
if (Player* oldLeader = ObjectAccessor::FindConnectedPlayer(m_leaderGuid))
- oldLeader->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
+ oldLeader->RemovePlayerFlag(PLAYER_FLAGS_GROUP_LEADER);
- newLeader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
+ newLeader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER);
m_leaderGuid = newLeader->GetGUID();
m_leaderName = newLeader->GetName();
ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false);
@@ -2197,11 +2188,10 @@ void Group::BroadcastGroupUpdate(void)
// -- not very efficient but safe
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
{
- Player* pp = ObjectAccessor::FindPlayer(citr->guid);
- if (pp)
+ if (Player * pp = ObjectAccessor::FindPlayer(citr->guid))
{
- pp->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2);
- pp->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE);
+ pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags));
+ pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FactionTemplate));
TC_LOG_DEBUG("misc", "-- Forced group value update for '%s'", pp->GetName().c_str());
}
}
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 0290fb8bea5..4b57b55c2ae 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -183,7 +183,6 @@ class Roll : public LootValidatorRef
uint32 itemid;
ItemRandomEnchantmentId itemRandomPropId;
- uint32 itemRandomSuffix;
uint8 itemCount;
typedef std::map<ObjectGuid, RollVote> PlayerVote;
PlayerVote playerVote; //vote position correspond with player position (in group)
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 6de90abd781..426164a0718 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -480,7 +480,7 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item)
stmt->setUInt64(3, item->GetGUID().GetCounter());
trans->Append(stmt);
- item->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty);
+ item->SetContainedIn(ObjectGuid::Empty);
item->SetOwnerGUID(ObjectGuid::Empty);
item->FSetState(ITEM_NEW);
item->SaveToDB(trans); // Not in inventory and can be saved standalone
@@ -535,7 +535,7 @@ void Guild::Member::SetStats(Player* player)
m_name = player->GetName();
m_level = player->getLevel();
m_class = player->getClass();
- _gender = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
+ _gender = player->m_playerData->NativeSex;
m_zoneId = player->GetZoneId();
m_accountId = player->GetSession()->GetAccountId();
m_achievementPoints = player->GetAchievementPoints();
@@ -3312,9 +3312,9 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const
if (tabItem)
{
uint8 i = 0;
- for (ItemDynamicFieldGems const& gemData : tabItem->GetGems())
+ for (UF::SocketedGem const& gemData : tabItem->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
WorldPackets::Item::ItemGemData gem;
gem.Slot = i;
@@ -3389,14 +3389,14 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) co
itemInfo.Item.ItemID = tabItem->GetEntry();
itemInfo.Count = int32(tabItem->GetCount());
itemInfo.Charges = int32(abs(tabItem->GetSpellCharges()));
- itemInfo.EnchantmentID = int32(tabItem->GetItemRandomPropertyId()); // verify that...
- itemInfo.OnUseEnchantmentID = 0/*int32(tabItem->GetItemSuffixFactor())*/;
+ itemInfo.EnchantmentID = int32(tabItem->GetEnchantmentId(PERM_ENCHANTMENT_SLOT));
+ itemInfo.OnUseEnchantmentID = int32(tabItem->GetEnchantmentId(USE_ENCHANTMENT_SLOT));
itemInfo.Flags = 0;
uint8 i = 0;
- for (ItemDynamicFieldGems const& gemData : tabItem->GetGems())
+ for (UF::SocketedGem const& gemData : tabItem->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
WorldPackets::Item::ItemGemData gem;
gem.Slot = i;
diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp
index d977c46dcd2..fd3571b1d58 100644
--- a/src/server/game/Handlers/ArtifactHandler.cpp
+++ b/src/server/game/Handlers/ArtifactHandler.cpp
@@ -41,17 +41,17 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
xpCost = uint64(currentArtifactTier == MAX_ARTIFACT_TIER ? cost->XP2 : cost->XP);
- if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->m_itemData->ArtifactXP)
return;
if (artifactAddPower.PowerChoices.empty())
return;
- ItemDynamicFieldArtifactPowers const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID);
+ UF::ArtifactPower const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID);
if (!artifactPower)
return;
- ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerId);
+ ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerID);
if (!artifactPowerEntry)
return;
@@ -73,7 +73,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!(artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_NO_LINK_REQUIRED))
{
- if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerId))
+ if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID))
{
bool hasAnyLink = false;
for (uint32 artifactPowerLinkId : *artifactPowerLinks)
@@ -82,7 +82,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!artifactPowerLink)
continue;
- ItemDynamicFieldArtifactPowers const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId);
+ UF::ArtifactPower const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId);
if (!artifactPowerLinkLearned)
continue;
@@ -98,22 +98,19 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
}
}
- ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerId, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured
+ ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerID, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured
if (!artifactPowerRank)
return;
- ItemDynamicFieldArtifactPowers newPower = *artifactPower;
- ++newPower.PurchasedRank;
- ++newPower.CurrentRankWithBonus;
- artifact->SetArtifactPower(&newPower);
+ artifact->SetArtifactPower(artifactPower->ArtifactPowerID, artifactPower->PurchasedRank + 1, artifactPower->CurrentRankWithBonus + 1);
if (artifact->IsEquipped())
{
_player->ApplyArtifactPowerRank(artifact, artifactPowerRank, true);
- for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers)
{
- ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId);
+ ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID);
if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS))
continue;
@@ -121,16 +118,14 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!scaledArtifactPowerRank)
continue;
- ItemDynamicFieldArtifactPowers newScaledPower = power;
- ++newScaledPower.CurrentRankWithBonus;
- artifact->SetArtifactPower(&newScaledPower);
+ artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, power.CurrentRankWithBonus + 1);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, true);
}
}
- artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost);
+ artifact->SetArtifactXP(artifact->m_itemData->ArtifactXP - xpCost);
artifact->SetState(ITEM_CHANGED, _player);
uint32 totalPurchasedArtifactPower = artifact->GetTotalPurchasedArtifactPowers();
@@ -205,7 +200,7 @@ void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactS
void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec)
{
- if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC))
+ if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC, UNIT_NPC_FLAG_2_NONE))
return;
Item* artifact = _player->GetItemByGuid(confirmArtifactRespec.ArtifactGUID);
@@ -216,33 +211,30 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
- if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->m_itemData->ArtifactXP)
return;
- uint64 newAmount = artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost;
+ uint64 newAmount = artifact->m_itemData->ArtifactXP - xpCost;
for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i)
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i))
newAmount += uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
- for (ItemDynamicFieldArtifactPowers const& artifactPower : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& artifactPower : artifact->m_itemData->ArtifactPowers)
{
uint8 oldPurchasedRank = artifactPower.PurchasedRank;
if (!oldPurchasedRank)
continue;
- ItemDynamicFieldArtifactPowers newPower = artifactPower;
- newPower.PurchasedRank -= oldPurchasedRank;
- newPower.CurrentRankWithBonus -= oldPurchasedRank;
- artifact->SetArtifactPower(&newPower);
+ artifact->SetArtifactPower(artifactPower.ArtifactPowerID, artifactPower.PurchasedRank - oldPurchasedRank, artifactPower.CurrentRankWithBonus - oldPurchasedRank);
if (artifact->IsEquipped())
- if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, 0))
+ if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, 0))
_player->ApplyArtifactPowerRank(artifact, artifactPowerRank, false);
}
- for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers)
{
- ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId);
+ ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID);
if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS))
continue;
@@ -250,13 +242,11 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (!scaledArtifactPowerRank)
continue;
- ItemDynamicFieldArtifactPowers newScaledPower = power;
- newScaledPower.CurrentRankWithBonus = 0;
- artifact->SetArtifactPower(&newScaledPower);
+ artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, 0);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false);
}
- artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, newAmount);
+ artifact->SetArtifactXP(newAmount);
artifact->SetState(ITEM_CHANGED, _player);
}
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 782d01d5af0..4a9ae8f74bc 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -36,7 +36,7 @@
//void called when player click on auctioneer npc
void WorldSession::HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Guid, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Guid, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionHelloOpcode - Unit (%s) not found or you can't interact with him.", packet.Guid.ToString().c_str());
@@ -130,7 +130,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell
}
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Unit (%s) not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -174,7 +174,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell
}
if (sAuctionMgr->GetAItem(items[i]->GetGUID().GetCounter()) || !items[i]->CanBeTraded() || items[i]->IsNotEmptyBag() ||
- items[i]->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || items[i]->GetUInt32Value(ITEM_FIELD_DURATION) ||
+ items[i]->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *items[i]->m_itemData->Expiration ||
items[i]->GetCount() < packet.Items[i].UseCount)
{
SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
@@ -368,7 +368,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac
if (!packet.AuctionItemID || !packet.BidAmount)
return; // check for cheaters
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionPlaceBid - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -492,7 +492,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac
//this void is called when auction_owner cancels his auction
void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRemoveItem& packet)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionRemoveItem - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -559,7 +559,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRe
//called when player lists his bids
void WorldSession::HandleAuctionListBidderItems(WorldPackets::AuctionHouse::AuctionListBidderItems& packet)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionListBidderItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -583,7 +583,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPackets::AuctionHouse::Auct
//this void sends player info about his auctions
void WorldSession::HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::AuctionListOwnerItems& packet)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionListOwnerItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -606,7 +606,7 @@ void WorldSession::HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::Aucti
//this void is called when player clicks on search button
void WorldSession::HandleAuctionListItems(WorldPackets::AuctionHouse::AuctionListItems& packet)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleAuctionListItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
@@ -671,7 +671,7 @@ void WorldSession::HandleAuctionListPendingSales(WorldPackets::AuctionHouse::Auc
void WorldSession::HandleReplicateItems(WorldPackets::AuctionHouse::AuctionReplicateItems& packet)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleReplicateItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str());
diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp
index 0750149e266..df7ca850e22 100644
--- a/src/server/game/Handlers/BankHandler.cpp
+++ b/src/server/game/Handlers/BankHandler.cpp
@@ -60,7 +60,7 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa
void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 5388940936e..b02e7c052c6 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -42,7 +42,7 @@
void WorldSession::HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(hello.Unit, UNIT_NPC_FLAG_BATTLEMASTER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(hello.Unit, UNIT_NPC_FLAG_BATTLEMASTER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
return;
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp
index a2d867e80df..95bdffceaa0 100644
--- a/src/server/game/Handlers/BattlePetHandler.cpp
+++ b/src/server/game/Handlers/BattlePetHandler.cpp
@@ -68,7 +68,7 @@ void WorldSession::HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& c
void WorldSession::HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon)
{
- if (_player->GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid)
+ if (*_player->m_activePlayerData->SummonedBattlePetGUID != battlePetSummon.PetGuid)
GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid);
else
GetBattlePetMgr()->DismissPet();
diff --git a/src/server/game/Handlers/BlackMarketHandler.cpp b/src/server/game/Handlers/BlackMarketHandler.cpp
index a750125927f..608299a1c0e 100644
--- a/src/server/game/Handlers/BlackMarketHandler.cpp
+++ b/src/server/game/Handlers/BlackMarketHandler.cpp
@@ -27,7 +27,7 @@
void WorldSession::HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketOpen.Guid, UNIT_NPC_FLAG_BLACK_MARKET | UNIT_NPC_FLAG_BLACK_MARKET_VIEW);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketOpen.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketHello - Unit (GUID: %s) not found or you can't interact with him.", blackMarketOpen.Guid.ToString().c_str());
@@ -54,7 +54,7 @@ void WorldSession::HandleBlackMarketRequestItems(WorldPackets::BlackMarket::Blac
if (!sBlackMarketMgr->IsEnabled())
return;
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketRequestItems.Guid, UNIT_NPC_FLAG_BLACK_MARKET | UNIT_NPC_FLAG_BLACK_MARKET_VIEW);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketRequestItems.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketRequestItems - Unit (GUID: %s) not found or you can't interact with him.", blackMarketRequestItems.Guid.ToString().c_str());
@@ -72,7 +72,7 @@ void WorldSession::HandleBlackMarketBidOnItem(WorldPackets::BlackMarket::BlackMa
return;
Player* player = GetPlayer();
- Creature* unit = player->GetNPCIfCanInteractWith(blackMarketBidOnItem.Guid, UNIT_NPC_FLAG_BLACK_MARKET);
+ Creature* unit = player->GetNPCIfCanInteractWith(blackMarketBidOnItem.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketBidOnItem - Unit (GUID: %s) not found or you can't interact with him.", blackMarketBidOnItem.Guid.ToString().c_str());
@@ -142,7 +142,6 @@ void WorldSession::SendBlackMarketWonNotification(BlackMarketEntry const* entry,
packet.MarketID = entry->GetMarketId();
packet.Item.Initialize(item);
- packet.RandomPropertiesID = item->GetItemRandomPropertyId();
SendPacket(packet.Write());
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 9ecb11140ce..6e9136a952f 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -738,7 +738,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Create Character: %s %s", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().ToString().c_str());
sScriptMgr->OnPlayerCreate(&newChar);
- sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER), newChar.getRace(), newChar.getClass(), newChar.getLevel(), false);
+ sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.m_playerData->NativeSex, newChar.getRace(), newChar.getClass(), newChar.getLevel(), false);
newChar.CleanupsBeforeDelete();
};
@@ -902,7 +902,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
return;
}
- pCurrChar->SetUInt32Value(PLAYER_FIELD_VIRTUAL_PLAYER_REALM, GetVirtualRealmAddress());
+ pCurrChar->SetVirtualPlayerRealm(GetVirtualRealmAddress());
SendTutorialsData();
@@ -1078,10 +1078,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
pCurrChar->LoadPet();
// Set FFA PvP for non GM in non-rest mode
- if (sWorld->IsFFAPvPRealm() && !pCurrChar->IsGameMaster() && !pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING))
- pCurrChar->SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ if (sWorld->IsFFAPvPRealm() && !pCurrChar->IsGameMaster() && !pCurrChar->HasPlayerFlag(PLAYER_FLAGS_RESTING))
+ pCurrChar->AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
- if (pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP))
+ if (pCurrChar->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP))
pCurrChar->SetContestedPvP();
// Apply at_login requests
@@ -1225,7 +1225,7 @@ void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packe
void WorldSession::HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet)
{
- GetPlayer()->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex);
+ GetPlayer()->SetWatchedFactionIndex(packet.FactionIndex);
}
void WorldSession::HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet)
@@ -1389,19 +1389,19 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPackets::Character::SetPlay
void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance& packet)
{
BarberShopStyleEntry const* bs_hair = sBarberShopStyleStore.LookupEntry(packet.NewHairStyle);
- if (!bs_hair || bs_hair->Type != 0 || bs_hair->Race != _player->getRace() || bs_hair->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER))
+ if (!bs_hair || bs_hair->Type != 0 || bs_hair->Race != _player->getRace() || bs_hair->Sex != _player->m_playerData->NativeSex)
return;
BarberShopStyleEntry const* bs_facialHair = sBarberShopStyleStore.LookupEntry(packet.NewFacialHair);
- if (!bs_facialHair || bs_facialHair->Type != 2 || bs_facialHair->Race != _player->getRace() || bs_facialHair->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER))
+ if (!bs_facialHair || bs_facialHair->Type != 2 || bs_facialHair->Race != _player->getRace() || bs_facialHair->Sex != _player->m_playerData->NativeSex)
return;
BarberShopStyleEntry const* bs_skinColor = sBarberShopStyleStore.LookupEntry(packet.NewSkinColor);
- if (bs_skinColor && (bs_skinColor->Type != 3 || bs_skinColor->Race != _player->getRace() || bs_skinColor->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)))
+ if (bs_skinColor && (bs_skinColor->Type != 3 || bs_skinColor->Race != _player->getRace() || bs_skinColor->Sex != _player->m_playerData->NativeSex))
return;
BarberShopStyleEntry const* bs_face = sBarberShopStyleStore.LookupEntry(packet.NewFace);
- if (bs_face && (bs_face->Type != 4 || bs_face->Race != _player->getRace() || bs_face->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)))
+ if (bs_face && (bs_face->Type != 4 || bs_face->Race != _player->getRace() || bs_face->Sex != _player->m_playerData->NativeSex))
return;
std::array<BarberShopStyleEntry const*, PLAYER_CUSTOM_DISPLAY_SIZE> customDisplayEntries;
@@ -1409,19 +1409,19 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance
for (std::size_t i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
{
BarberShopStyleEntry const* bs_customDisplay = sBarberShopStyleStore.LookupEntry(packet.NewCustomDisplay[i]);
- if (bs_customDisplay && (bs_customDisplay->Type != 5 + i || bs_customDisplay->Race != _player->getRace() || bs_customDisplay->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)))
+ if (bs_customDisplay && (bs_customDisplay->Type != 5 + i || bs_customDisplay->Race != _player->getRace() || bs_customDisplay->Sex != _player->m_playerData->NativeSex))
return;
customDisplayEntries[i] = bs_customDisplay;
customDisplay[i] = bs_customDisplay ? bs_customDisplay->Data : 0;
}
- if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER),
+ if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->m_playerData->NativeSex,
bs_hair->Data,
packet.NewHairColor,
- bs_face ? bs_face->Data : _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID),
+ bs_face ? bs_face->Data : _player->m_playerData->FaceID,
bs_facialHair->Data,
- bs_skinColor ? bs_skinColor->Data : _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID),
+ bs_skinColor ? bs_skinColor->Data : _player->m_playerData->SkinID,
customDisplay))
return;
@@ -1454,16 +1454,16 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance
_player->ModifyMoney(-int64(cost)); // it isn't free
_player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_AT_BARBER, cost);
- _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, uint8(bs_hair->Data));
- _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, uint8(packet.NewHairColor));
- _player->SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, uint8(bs_facialHair->Data));
+ _player->SetHairStyleId(bs_hair->Data);
+ _player->SetHairColorId(packet.NewHairColor);
+ _player->SetFacialHairStyleId(bs_facialHair->Data);
if (bs_skinColor)
- _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, uint8(bs_skinColor->Data));
+ _player->SetSkinId(bs_skinColor->Data);
if (bs_face)
- _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, uint8(bs_face->Data));
+ _player->SetFaceId(bs_face->Data);
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
- _player->SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, customDisplay[i]);
+ _player->SetCustomDisplayOption(i, customDisplay[i]);
_player->UpdateCriteria(CRITERIA_TYPE_VISIT_BARBER_SHOP, 1);
@@ -2230,18 +2230,11 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
// Title conversion
if (!knownTitlesStr.empty())
{
- uint32 const ktcount = KNOWN_TITLES_SIZE * 2;
- uint32 knownTitles[ktcount];
- Tokenizer tokens(knownTitlesStr, ' ', ktcount);
+ std::vector<uint32> knownTitles;
+ Tokenizer tokens(knownTitlesStr, ' ');
- if (tokens.size() != ktcount)
- {
- SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get());
- return;
- }
-
- for (uint32 index = 0; index < ktcount; ++index)
- knownTitles[index] = atoul(tokens[index]);
+ for (uint32 index = 0; index < tokens.size(); ++index)
+ knownTitles.push_back(atoul(tokens[index]));
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChangeTitles.begin(); it != sObjectMgr->FactionChangeTitles.end(); ++it)
{
@@ -2255,6 +2248,9 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
{
uint32 maskID = htitleInfo->MaskID;
uint32 index = maskID / 32;
+ if (index >= knownTitles.size())
+ continue;
+
uint32 old_flag = 1 << (maskID % 32);
uint32 new_flag = 1 << (atitleInfo->MaskID % 32);
if (knownTitles[index] & old_flag)
@@ -2268,6 +2264,9 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
{
uint32 maskID = atitleInfo->MaskID;
uint32 index = maskID / 32;
+ if (index >= knownTitles.size())
+ continue;
+
uint32 old_flag = 1 << (maskID % 32);
uint32 new_flag = 1 << (htitleInfo->MaskID % 32);
if (knownTitles[index] & old_flag)
@@ -2279,7 +2278,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
}
std::ostringstream ss;
- for (uint32 index = 0; index < ktcount; ++index)
+ for (uint32 index = 0; index < knownTitles.size(); ++index)
ss << knownTitles[index] << ' ';
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE);
@@ -2343,7 +2342,7 @@ void WorldSession::HandleReorderCharacters(WorldPackets::Character::ReorderChara
void WorldSession::HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& /*packet*/)
{
// Only players that has not yet gained any experience can use this
- if (_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_XP))
+ if (*_player->m_activePlayerData->XP)
return;
if (ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(_player->getClass()))
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index bf71dc44379..34185d478d5 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -570,8 +570,7 @@ void WorldSession::HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& /* packet
sScriptMgr->OnPlayerClearEmote(GetPlayer());
- if (_player->GetUInt32Value(UNIT_NPC_EMOTESTATE))
- _player->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ _player->SetEmoteState(EMOTE_ONESHOT_NONE);
}
void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet)
@@ -603,7 +602,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet)
break;
case EMOTE_STATE_DANCE:
case EMOTE_STATE_READ:
- _player->SetUInt32Value(UNIT_NPC_EMOTESTATE, emoteAnim);
+ _player->SetEmoteState(Emote(emoteAnim));
break;
default:
// Only allow text-emotes for "dead" entities (feign death included)
diff --git a/src/server/game/Handlers/GarrisonHandler.cpp b/src/server/game/Handlers/GarrisonHandler.cpp
index fe1d740fb4d..565a99a3b1e 100644
--- a/src/server/game/Handlers/GarrisonHandler.cpp
+++ b/src/server/game/Handlers/GarrisonHandler.cpp
@@ -28,7 +28,7 @@ void WorldSession::HandleGetGarrisonInfo(WorldPackets::Garrison::GetGarrisonInfo
void WorldSession::HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::GarrisonPurchaseBuilding& garrisonPurchaseBuilding)
{
- if (!_player->GetNPCIfCanInteractWith(garrisonPurchaseBuilding.NpcGUID, UNIT_NPC_FLAG_GARRISON_ARCHITECT))
+ if (!_player->GetNPCIfCanInteractWith(garrisonPurchaseBuilding.NpcGUID, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_GARRISON_ARCHITECT))
return;
if (Garrison* garrison = _player->GetGarrison())
@@ -37,7 +37,7 @@ void WorldSession::HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::Garris
void WorldSession::HandleGarrisonCancelConstruction(WorldPackets::Garrison::GarrisonCancelConstruction& garrisonCancelConstruction)
{
- if (!_player->GetNPCIfCanInteractWith(garrisonCancelConstruction.NpcGUID, UNIT_NPC_FLAG_GARRISON_ARCHITECT))
+ if (!_player->GetNPCIfCanInteractWith(garrisonCancelConstruction.NpcGUID, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_GARRISON_ARCHITECT))
return;
if (Garrison* garrison = _player->GetGarrison())
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 31221a9207d..929d98da7e6 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -186,7 +186,7 @@ void WorldSession::HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& p
, emblemInfo.GetColor(), emblemInfo.GetBorderStyle()
, emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor());
- if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER))
+ if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE))
{
// Remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
@@ -376,7 +376,10 @@ void WorldSession::HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildC
void WorldSession::HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet)
{
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, packet.Allow);
+ if (packet.Allow)
+ GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_AUTO_DECLINE_GUILD);
+ else
+ GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_AUTO_DECLINE_GUILD);
}
void WorldSession::HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& /*packet*/)
diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp
index b58b7bedbe1..eee0380e4d6 100644
--- a/src/server/game/Handlers/HotfixHandler.cpp
+++ b/src/server/game/Handlers/HotfixHandler.cpp
@@ -70,17 +70,19 @@ void WorldSession::HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotf
{
for (auto const& tableRecord : *hotfixedRecords)
{
- DB2StorageBase const* storage = sDB2Manager.GetStorage(hotfixRecord.TableHash);
+ uint32 hotfixTableHash = tableRecord.first;
+ int32 hotfixRecordId = tableRecord.second;;
+ DB2StorageBase const* storage = sDB2Manager.GetStorage(hotfixTableHash);
WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData;
hotfixData.Record = hotfixRecord;
- if (storage && storage->HasRecord(hotfixData.Record.RecordID))
+ if (storage && storage->HasRecord(hotfixRecordId))
{
std::size_t pos = hotfixQueryResponse.HotfixContent.size();
- storage->WriteRecord(hotfixData.Record.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent);
+ storage->WriteRecord(hotfixRecordId, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent);
hotfixData.Size = hotfixQueryResponse.HotfixContent.size() - pos;
}
- else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(hotfixData.Record.TableHash, hotfixData.Record.RecordID))
+ else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(hotfixTableHash, hotfixRecordId))
{
hotfixData.Size = blobData->size();
hotfixQueryResponse.HotfixContent.append(blobData->data(), blobData->size());
diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp
index 5641db4e5c2..99eef1b6e49 100644
--- a/src/server/game/Handlers/InspectHandler.cpp
+++ b/src/server/game/Handlers/InspectHandler.cpp
@@ -52,7 +52,7 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
}
inspectResult.ClassID = player->getClass();
- inspectResult.GenderID = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
+ inspectResult.GenderID = player->m_playerData->NativeSex;
if (GetPlayer()->CanBeGameMaster() || sWorld->getIntConfig(CONFIG_TALENTS_INSPECTING) + (GetPlayer()->GetTeamId() == player->GetTeamId()) > 1)
{
@@ -77,12 +77,12 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
}
inspectResult.InspecteeGUID = inspect.Target;
- inspectResult.SpecializationID = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
- inspectResult.LifetimeMaxRank = player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK);
- inspectResult.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
- inspectResult.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS);
- inspectResult.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
- inspectResult.HonorLevel = player->GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL);
+ inspectResult.SpecializationID = player->GetPrimarySpecialization();
+ inspectResult.LifetimeMaxRank = player->m_activePlayerData->LifetimeMaxRank;
+ inspectResult.TodayHK = player->m_activePlayerData->TodayHonorableKills;
+ inspectResult.YesterdayHK = player->m_activePlayerData->YesterdayHonorableKills;
+ inspectResult.LifetimeHK = player->m_activePlayerData->LifetimeHonorableKills;
+ inspectResult.HonorLevel = player->m_playerData->HonorLevel;
SendPacket(inspectResult.Write());
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 8ba5dc93333..5eed12a2172 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -232,7 +232,7 @@ void WorldSession::HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem&
return;
}
- if (!dstItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD))
+ if (!dstItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD))
{
// check dest->src move possibility
ItemPosCountVec sSrc;
@@ -289,7 +289,7 @@ void WorldSession::HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem&
}
else
{
- if (Item* parentItem = _player->GetItemByGuid(dstItem->GetGuidValue(ITEM_FIELD_CREATOR)))
+ if (Item* parentItem = _player->GetItemByGuid(dstItem->GetCreator()))
{
if (Player::IsEquipmentPos(dest))
{
@@ -390,7 +390,7 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet)
if (packet.ItemGUID.IsEmpty())
return;
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleSellItemOpcode - %s not found or you can not interact with him.", packet.VendorGUID.ToString().c_str());
@@ -429,7 +429,7 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet)
// prevent selling item for sellprice when the item is still refundable
// this probably happens when right clicking a refundable item, the client sends both
// CMSG_SELL_ITEM and CMSG_REFUND_ITEM (unverified)
- if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
+ if (pItem->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE))
return; // Therefore, no feedback to client
// special case at auto sell (sell all)
@@ -501,7 +501,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_BUYBACK_ITEM: Vendor %s, Slot: %u", packet.VendorGUID.ToString().c_str(), packet.Slot);
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleBuybackItem - Unit (%s) not found or you can not interact with him.", packet.VendorGUID.ToString().c_str());
@@ -516,7 +516,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet)
Item* pItem = _player->GetItemFromBuyBackSlot(packet.Slot);
if (pItem)
{
- uint32 price = _player->GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + packet.Slot - BUYBACK_SLOT_START);
+ uint32 price = _player->m_activePlayerData->BuybackPrice[packet.Slot - BUYBACK_SLOT_START];
if (!_player->HasEnoughMoney(uint64(price)))
{
_player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, pItem->GetEntry(), 0);
@@ -586,7 +586,7 @@ void WorldSession::HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet)
void WorldSession::SendListInventory(ObjectGuid vendorGuid)
{
- Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR);
+ Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE);
if (!vendor)
{
TC_LOG_DEBUG("network", "WORLD: SendListInventory - %s not found or you can not interact with him.", vendorGuid.ToString().c_str());
@@ -828,7 +828,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet)
return;
}
- if (!item->GetGuidValue(ITEM_FIELD_GIFTCREATOR).IsEmpty()) // HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED);
+ if (!item->GetGiftCreator().IsEmpty()) // HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED);
{
_player->SendEquipError(EQUIP_ERR_CANT_WRAP_WRAPPED, item, NULL);
return;
@@ -865,7 +865,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet)
stmt->setUInt64(0, item->GetOwnerGUID().GetCounter());
stmt->setUInt64(1, item->GetGUID().GetCounter());
stmt->setUInt32(2, item->GetEntry());
- stmt->setUInt32(3, item->GetUInt32Value(ITEM_FIELD_FLAGS));
+ stmt->setUInt32(3, item->m_itemData->DynamicFlags);
trans->Append(stmt);
item->SetEntry(gift->GetEntry());
@@ -892,8 +892,8 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet)
break;
}
- item->SetGuidValue(ITEM_FIELD_GIFTCREATOR, _player->GetGUID());
- item->SetUInt32Value(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED);
+ item->SetGiftCreator(_player->GetGUID());
+ item->SetItemFlags(ITEM_FIELD_FLAG_WRAPPED);
item->SetState(ITEM_CHANGED, _player);
if (item->GetState() == ITEM_NEW) // save new item, to have alway for `character_gifts` record in `item_instance`
@@ -935,7 +935,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
memset(gemData, 0, sizeof(gemData));
GemPropertiesEntry const* gemProperties[MAX_GEM_SOCKETS];
memset(gemProperties, 0, sizeof(gemProperties));
- ItemDynamicFieldGems const* oldGemData[MAX_GEM_SOCKETS];
+ UF::SocketedGem const* oldGemData[MAX_GEM_SOCKETS];
memset(oldGemData, 0, sizeof(oldGemData));
for (uint32 i = 0; i < MAX_GEM_SOCKETS; ++i)
{
@@ -943,9 +943,9 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
{
gems[i] = gem;
gemData[i].ItemId = gem->GetEntry();
- gemData[i].Context = gem->GetUInt32Value(ITEM_FIELD_CONTEXT);
- for (std::size_t b = 0; b < gem->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS).size() && b < 16; ++b)
- gemData[i].BonusListIDs[b] = gem->GetDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, b);
+ gemData[i].Context = gem->m_itemData->Context;
+ for (std::size_t b = 0; b < gem->m_itemData->BonusListIDs->size() && b < 16; ++b)
+ gemData[i].BonusListIDs[b] = (*gem->m_itemData->BonusListIDs)[b];
gemProperties[i] = sGemPropertiesStore.LookupEntry(gem->GetTemplate()->GetGemProperties());
}
@@ -1010,7 +1010,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
}
else if (oldGemData[j])
{
- if (iGemProto->GetId() == oldGemData[j]->ItemId)
+ if (int32(iGemProto->GetId()) == oldGemData[j]->ItemID)
{
_player->SendEquipError(EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED, itemTarget, NULL);
return;
@@ -1037,7 +1037,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
else if (oldGemData[j])
{
// existing gem
- if (ItemTemplate const* jProto = sObjectMgr->GetItemTemplate(oldGemData[j]->ItemId))
+ if (ItemTemplate const* jProto = sObjectMgr->GetItemTemplate(oldGemData[j]->ItemID))
if (iGemProto->GetItemLimitCategory() == jProto->GetItemLimitCategory())
++limit_newcount;
}
@@ -1176,7 +1176,7 @@ bool WorldSession::CanUseBank(ObjectGuid bankerGUID) const
if (!isUsingBankCommand)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
return false;
}
@@ -1210,7 +1210,7 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeItem)
{
WorldPackets::Item::ItemUpgradeResult itemUpgradeResult;
- if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER))
+ if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER))
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - %s not found or player can't interact with it.", upgradeItem.ItemMaster.ToString().c_str());
itemUpgradeResult.Success = false;
@@ -1299,9 +1299,9 @@ void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& remove
return;
}
- if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM))
+ if (item->HasItemFlag(ITEM_FIELD_FLAG_NEW_ITEM))
{
- item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM);
+ item->RemoveItemFlag(ITEM_FIELD_FLAG_NEW_ITEM);
item->SetState(ITEM_CHANGED, _player);
}
}
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index c9ac113c623..3bd6173ae53 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -314,7 +314,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
player->SetLootGUID(ObjectGuid::Empty);
player->SendLootRelease(lguid);
- player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOOTING);
+ player->RemoveUnitFlag(UNIT_FLAG_LOOTING);
if (!player->IsInWorld())
return;
@@ -370,7 +370,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
if (loot->isLooted())
{
loot->clear();
- corpse->RemoveFlag(CORPSE_FIELD_DYNAMIC_FLAGS, CORPSE_DYNFLAG_LOOTABLE);
+ corpse->RemoveCorpseDynamicFlag(CORPSE_DYNFLAG_LOOTABLE);
}
}
else if (lguid.IsItem())
@@ -414,7 +414,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
loot = &creature->loot;
if (loot->isLooted())
{
- creature->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ creature->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
// skip pickpocketing loot for speed, skinning timer reduction is no-op in fact
if (!creature->IsAlive())
@@ -433,7 +433,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
group->SendLooter(creature, NULL);
}
// force dynflag update to update looter and lootable info
- creature->ForceValuesUpdateAtIndex(OBJECT_DYNAMIC_FLAGS);
+ creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags));
}
}
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index d65235b4d3e..d15ea033240 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -52,7 +52,7 @@ bool WorldSession::CanOpenMailBox(ObjectGuid guid)
}
else if (guid.IsAnyTypeCreature())
{
- if (!_player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_MAILBOX))
+ if (!_player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_MAILBOX, UNIT_NPC_FLAG_2_NONE))
return false;
}
else
@@ -253,13 +253,13 @@ void WorldSession::HandleSendMail(WorldPackets::Mail::SendMail& packet)
}
}
- if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION))
+ if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *item->m_itemData->Expiration)
{
player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);
return;
}
- if (packet.Info.Cod && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ if (packet.Info.Cod && item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);
return;
@@ -639,9 +639,9 @@ void WorldSession::HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextIt
bodyItem->SetText(m->body);
if (m->messageType == MAIL_NORMAL)
- bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(m->sender));
+ bodyItem->SetCreator(ObjectGuid::Create<HighGuid::Player>(m->sender));
- bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_READABLE);
+ bodyItem->AddItemFlag(ITEM_FIELD_FLAG_READABLE);
ItemPosCountVec dest;
uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, bodyItem, false);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 3f0cffb4785..bdd7482c03b 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -58,7 +58,7 @@
void WorldSession::HandleRepopRequest(WorldPackets::Misc::RepopRequest& /*packet*/)
{
- if (GetPlayer()->IsAlive() || GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (GetPlayer()->IsAlive() || GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_GHOST))
return;
if (GetPlayer()->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
@@ -257,11 +257,11 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ
if (!GetPlayer()->GetLootGUID().IsEmpty())
GetPlayer()->SendLootReleaseAll();
- bool instantLogout = (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) ||
+ bool instantLogout = (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) ||
GetPlayer()->IsInFlight() || HasPermission(rbac::RBAC_PERM_INSTANT_LOGOUT);
/// TODO: Possibly add RBAC permission to log out in combat
- bool canLogoutInCombat = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ bool canLogoutInCombat = GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING);
uint32 reason = 0;
if (GetPlayer()->IsInCombat() && !canLogoutInCombat)
@@ -295,7 +295,7 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ
if (GetPlayer()->GetStandState() == UNIT_STAND_STATE_STAND)
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
GetPlayer()->SetRooted(true);
- GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ GetPlayer()->AddUnitFlag(UNIT_FLAG_STUNNED);
}
SetLogoutStartTime(time(NULL));
@@ -321,49 +321,49 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCance
GetPlayer()->SetStandState(UNIT_STAND_STATE_STAND);
//! DISABLE_ROTATE
- GetPlayer()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ GetPlayer()->RemoveUnitFlag(UNIT_FLAG_STUNNED);
}
}
void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& /*packet*/)
{
- bool inPvP = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
-
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, !inPvP);
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, inPvP);
-
- if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+ if (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP))
{
- if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer)
- GetPlayer()->UpdatePvP(true, true);
+ GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP);
+ GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER);
+ if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP())
+ GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off
}
else
{
- if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP())
- GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off
+ GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
+ GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER);
+ if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer)
+ GetPlayer()->UpdatePvP(true, true);
}
}
void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet)
{
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, packet.EnablePVP);
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !packet.EnablePVP);
-
- if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+ if (!packet.EnablePVP)
{
- if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer)
- GetPlayer()->UpdatePvP(true, true);
+ GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP);
+ GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER);
+ if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP())
+ GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off
}
else
{
- if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP())
- GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start set-off
+ GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
+ GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER);
+ if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer)
+ GetPlayer()->UpdatePvP(true, true);
}
}
void WorldSession::HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& /*packet*/)
{
- if (GetPlayer()->IsAlive() || !GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (GetPlayer()->IsAlive() || !GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_GHOST))
return;
GetPlayer()->RepopAtGraveyard();
}
@@ -419,7 +419,7 @@ void WorldSession::HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& /*pack
return;
// body not released yet
- if (!_player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (!_player->HasPlayerFlag(PLAYER_FLAGS_GHOST))
return;
Corpse* corpse = _player->GetCorpse();
@@ -534,7 +534,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
player->GetRestMgr().SetRestFlag(REST_FLAG_IN_TAVERN, atEntry->ID);
if (sWorld->IsFFAPvPRealm())
- player->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP);
+ player->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP);
return;
}
@@ -756,7 +756,7 @@ void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionB
return;
}
- GetPlayer()->SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask);
+ GetPlayer()->SetMultiActionBars(packet.Mask);
}
void WorldSession::HandlePlayedTime(WorldPackets::Character::RequestPlayedTime& packet)
@@ -824,11 +824,11 @@ void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet)
{
if (packet.Enable)
{
- TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->m_activePlayerData->FarsightObject->ToString().c_str(), _player->GetGUID().ToString().c_str());
if (WorldObject* target = _player->GetViewpoint())
_player->SetSeer(target);
else
- TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str());
+ TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->m_activePlayerData->FarsightObject->ToString().c_str());
}
else
{
@@ -842,7 +842,7 @@ void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet)
void WorldSession::HandleSetTitleOpcode(WorldPackets::Character::SetTitle& packet)
{
// -1 at none
- if (packet.TitleID > 0 && packet.TitleID < MAX_TITLE_INDEX)
+ if (packet.TitleID > 0)
{
if (!GetPlayer()->HasTitle(packet.TitleID))
return;
@@ -850,7 +850,7 @@ void WorldSession::HandleSetTitleOpcode(WorldPackets::Character::SetTitle& packe
else
packet.TitleID = 0;
- GetPlayer()->SetUInt32Value(PLAYER_CHOSEN_TITLE, packet.TitleID);
+ GetPlayer()->SetChosenTitle(packet.TitleID);
}
void WorldSession::HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& packet)
@@ -1046,7 +1046,10 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDiff
void WorldSession::HandleSetTaxiBenchmark(WorldPackets::Misc::SetTaxiBenchmarkMode& packet)
{
- _player->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK, packet.Enable);
+ if (packet.Enable)
+ _player->AddPlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK);
+ else
+ _player->RemovePlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK);
}
void WorldSession::HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement)
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 4ae255270ad..5850d71bae3 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -90,7 +90,7 @@ void WorldSession::HandleMoveWorldportAck()
float z = loc.GetPositionZ();
if (GetPlayer()->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- z += GetPlayer()->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ z += GetPlayer()->m_unitData->HoverHeight;
GetPlayer()->Relocate(loc.GetPositionX(), loc.GetPositionY(), z, loc.GetOrientation());
@@ -211,7 +211,7 @@ void WorldSession::HandleMoveWorldportAck()
GetPlayer()->CastSpell(GetPlayer(), 2479, true);
// in friendly area
- else if (GetPlayer()->IsPvP() && !GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+ else if (GetPlayer()->IsPvP() && !GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP))
GetPlayer()->UpdatePvP(false, false);
// resummon pet
@@ -277,7 +277,7 @@ void WorldSession::HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck
plMover->CastSpell(plMover, 2479, true);
// in friendly area
- else if (plMover->IsPvP() && !plMover->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+ else if (plMover->IsPvP() && !plMover->HasPlayerFlag(PLAYER_FLAGS_IN_PVP))
plMover->UpdatePvP(false, false);
}
@@ -321,8 +321,8 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem
}
// stop some emotes at player move
- if (plrMover && (plrMover->GetUInt32Value(UNIT_NPC_EMOTESTATE) != 0))
- plrMover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ if (plrMover && (plrMover->GetEmoteState() != 0))
+ plrMover->SetEmoteState(EMOTE_ONESHOT_NONE);
/* handle special cases */
if (!movementInfo.transport.guid.IsEmpty())
@@ -428,7 +428,7 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem
/// @todo discard movement packets after the player is rooted
if (plrMover->IsAlive())
{
- plrMover->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
+ plrMover->AddPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
// player can be alive if GM/etc
// change the death state to CORPSE to prevent the death timer from
@@ -439,7 +439,7 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem
}
}
else
- plrMover->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
+ plrMover->RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
if (opcode == CMSG_MOVE_JUMP)
{
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 977136f0615..ba17b382bb0 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -60,7 +60,7 @@ enum StableResultCode
void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
@@ -90,7 +90,7 @@ void WorldSession::SendShowMailBox(ObjectGuid guid)
void WorldSession::HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet)
{
- Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TRAINER);
+ Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE);
if (!npc)
{
TC_LOG_DEBUG("network", "WorldSession::SendTrainerList - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
@@ -126,7 +126,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpel
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_TRAINER_BUY_SPELL %s, learn spell id is: %i", packet.TrainerGUID.ToString().c_str(), packet.SpellID);
- Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.TrainerGUID, UNIT_NPC_FLAG_TRAINER);
+ Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.TrainerGUID, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE);
if (!npc)
{
TC_LOG_DEBUG("network", "WORLD: HandleTrainerBuySpellOpcode - %s not found or you can not interact with him.", packet.TrainerGUID.ToString().c_str());
@@ -152,7 +152,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpel
void WorldSession::HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_GOSSIP);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleGossipHelloOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
@@ -205,7 +205,7 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec
GameObject* go = nullptr;
if (packet.GossipUnit.IsCreatureOrVehicle())
{
- unit = GetPlayer()->GetNPCIfCanInteractWith(packet.GossipUnit, UNIT_NPC_FLAG_GOSSIP);
+ unit = GetPlayer()->GetNPCIfCanInteractWith(packet.GossipUnit, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found or you can't interact with him.", packet.GossipUnit.ToString().c_str());
@@ -278,7 +278,7 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec
void WorldSession::HandleSpiritHealerActivate(WorldPackets::NPC::SpiritHealerActivate& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRITHEALER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRITHEALER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleSpiritHealerActivateOpcode - %s not found or you can not interact with him.", packet.Healer.ToString().c_str());
@@ -329,7 +329,7 @@ void WorldSession::HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet)
if (!GetPlayer()->IsInWorld() || !GetPlayer()->IsAlive())
return;
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_INNKEEPER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_INNKEEPER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleBinderActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
@@ -729,7 +729,7 @@ void WorldSession::HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet
TC_LOG_DEBUG("network", "WORLD: CMSG_REPAIR_ITEM: Npc %s, Item %s, UseGuildBank: %u",
packet.NpcGUID.ToString().c_str(), packet.ItemGUID.ToString().c_str(), packet.UseGuildBank);
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.NpcGUID, UNIT_NPC_FLAG_REPAIR);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.NpcGUID, UNIT_NPC_FLAG_REPAIR, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleRepairItemOpcode - %s not found or you can not interact with him.", packet.NpcGUID.ToString().c_str());
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index d03c811c241..18b69ac2d0b 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -416,7 +416,7 @@ void WorldSession::SendQueryPetNameResponse(ObjectGuid guid)
if (Creature* unit = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, guid))
{
response.Allow = true;
- response.Timestamp = unit->GetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP);
+ response.Timestamp = unit->m_unitData->PetNameTimestamp;
response.Name = unit->GetName();
if (Pet* pet = unit->ToPet())
@@ -446,7 +446,7 @@ bool WorldSession::CheckStableMaster(ObjectGuid guid)
// stable master case
else
{
- if (!GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_STABLEMASTER))
+ if (!GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_STABLEMASTER, UNIT_NPC_FLAG_2_NONE))
{
TC_LOG_DEBUG("entities.player", "Stablemaster %s not found or you can't interact with him.", guid.ToString().c_str());
return false;
@@ -523,7 +523,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet)
Pet* pet = ObjectAccessor::GetPet(*_player, petguid);
// check it!
if (!pet || !pet->IsPet() || ((Pet*)pet)->getPetType() != HUNTER_PET ||
- !pet->HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED) ||
+ !pet->HasPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED) ||
pet->GetOwnerGUID() != _player->GetGUID() || !pet->GetCharmInfo())
return;
@@ -544,7 +544,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet)
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
- pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED);
+ pet->RemovePetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED);
if (declinedname)
{
@@ -584,7 +584,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet)
CharacterDatabase.CommitTransaction(trans);
- pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped
+ pet->SetPetNameTimestamp(uint32(time(NULL)));
}
void WorldSession::HandlePetAbandon(WorldPackets::Pet::PetAbandon& packet)
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 95e6ef8e083..a4a4d2e7aae 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -40,7 +40,7 @@ void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet
TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: title %s", packet.Unit.ToString().c_str(), packet.Title.c_str());
// prevent cheating
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", packet.Unit.ToString().c_str());
@@ -96,9 +96,7 @@ void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet
if (!charter)
return;
- charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT, charter->GetGUID().GetCounter());
- // ITEM_FIELD_ENCHANTMENT_1_1 is guild/arenateam id
- // ITEM_FIELD_ENCHANTMENT_1_1+1 is current signatures count (showed on item)
+ charter->SetPetitionId(charter->GetGUID().GetCounter());
charter->SetState(ITEM_CHANGED, _player);
_player->SendNewItem(charter, 1, true, false);
@@ -284,7 +282,7 @@ void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& pack
Field* fields = result->Fetch();
ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
- //uint64 signs = fields[1].GetUInt64();
+ uint64 signs = fields[1].GetUInt64();
if (ownerGuid == _player->GetGUID())
return;
@@ -349,10 +347,11 @@ void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& pack
// close at signer side
SendPacket(signResult.Write());
- // update signs count on charter, required testing...
- //Item* item = _player->GetItemByGuid(petitionguid));
- //if (item)
- // item->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1+1, signs);
+ if (Item* item = _player->GetItemByGuid(packet.PetitionGUID))
+ {
+ item->SetPetitionNumSignatures(signs);
+ item->SetState(ITEM_CHANGED, _player);
+ }
// update for owner if online
if (Player* owner = ObjectAccessor::FindConnectedPlayer(ownerGuid))
@@ -580,7 +579,7 @@ void WorldSession::HandlePetitionShowList(WorldPackets::Petition::PetitionShowLi
void WorldSession::SendPetitionShowList(ObjectGuid guid)
{
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_PETITIONER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_PETITIONER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandlePetitionShowListOpcode - %s not found or you can't interact with him.", guid.ToString().c_str());
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index bf5d411d36e..873b34df76a 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -77,7 +77,7 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHe
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_HELLO %s", packet.QuestGiverGUID.ToString().c_str());
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.QuestGiverGUID, UNIT_NPC_FLAG_QUESTGIVER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.QuestGiverGUID, UNIT_NPC_FLAG_QUESTGIVER, UNIT_NPC_FLAG_2_NONE);
if (!creature)
{
TC_LOG_DEBUG("network", "WORLD: HandleQuestgiverHelloOpcode - %s not found or you can't interact with him.",
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp
index 8ae4c2228e8..796f2ef0779 100644
--- a/src/server/game/Handlers/SkillHandler.cpp
+++ b/src/server/game/Handlers/SkillHandler.cpp
@@ -77,7 +77,7 @@ void WorldSession::HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTal
void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleConfirmRespecWipeOpcode - %s not found or you can't interact with him.", confirmRespecWipe.RespecMaster.ToString().c_str());
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 75ef6181a4d..4ce38852b0e 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -154,7 +154,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet)
}
// Verify that the bag is an actual bag or wrapped item that can be used "normally"
- if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
player->SendEquipError(EQUIP_ERR_CLIENT_LOCKED_OUT, item, NULL);
TC_LOG_ERROR("entities.player.cheat", "Possible hacking attempt: Player %s [%s] tried to open item [%s, entry: %u] which is not openable!",
@@ -183,7 +183,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet)
}
}
- if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))// wrapped?
+ if (item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))// wrapped?
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM);
@@ -197,9 +197,9 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet)
uint32 entry = fields[0].GetUInt32();
uint32 flags = fields[1].GetUInt32();
- item->SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid::Empty);
+ item->SetGiftCreator(ObjectGuid::Empty);
item->SetEntry(entry);
- item->SetUInt32Value(ITEM_FIELD_FLAGS, flags);
+ item->SetItemFlags(ItemFieldFlags(flags));
item->SetState(ITEM_CHANGED, player);
}
else
@@ -466,7 +466,7 @@ 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
- std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
+ auto const& selfResSpells = _player->m_activePlayerData->SelfResSpells;
if (std::find(selfResSpells.begin(), selfResSpells.end(), selfRes.SpellID) == selfResSpells.end())
return;
@@ -474,7 +474,7 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
if (spellInfo)
_player->CastSpell(_player, spellInfo, false, nullptr);
- _player->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID);
+ _player->RemoveSelfResSpell(selfRes.SpellID);
}
void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick)
@@ -520,13 +520,13 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI
Guild* guild = player->GetGuild();
- mirrorImageComponentedData.SkinColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
- mirrorImageComponentedData.FaceVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID);
- mirrorImageComponentedData.HairVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID);
- mirrorImageComponentedData.HairColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
- mirrorImageComponentedData.BeardVariation = player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE);
+ mirrorImageComponentedData.SkinColor = player->m_playerData->SkinID;
+ mirrorImageComponentedData.FaceVariation = player->m_playerData->FaceID;
+ mirrorImageComponentedData.HairVariation = player->m_playerData->HairStyleID;
+ mirrorImageComponentedData.HairColor = player->m_playerData->HairColorID;
+ mirrorImageComponentedData.BeardVariation = player->m_playerData->FacialHairStyleID;
for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
- mirrorImageComponentedData.CustomDisplay[i] = player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i);
+ mirrorImageComponentedData.CustomDisplay[i] = player->m_playerData->CustomDisplayOption[i];
mirrorImageComponentedData.GuildGUID = (guild ? guild->GetGUID() : ObjectGuid::Empty);
mirrorImageComponentedData.ItemDisplayID.reserve(11);
@@ -550,10 +550,7 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI
for (EquipmentSlots slot : itemSlots)
{
uint32 itemDisplayId;
- if ((slot == EQUIPMENT_SLOT_HEAD && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM)) ||
- (slot == EQUIPMENT_SLOT_BACK && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK)))
- itemDisplayId = 0;
- else if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
+ if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
itemDisplayId = item->GetDisplayId(player);
else
itemDisplayId = 0;
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp
index 09c24ff7f49..2eb723f7e2b 100644
--- a/src/server/game/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Handlers/TaxiHandler.cpp
@@ -32,7 +32,7 @@
void WorldSession::HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode)
{
- if (Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(enableTaxiNode.Unit, UNIT_NPC_FLAG_FLIGHTMASTER))
+ if (Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(enableTaxiNode.Unit, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE))
SendLearnNewTaxiNode(unit);
}
@@ -69,7 +69,7 @@ void WorldSession::SendTaxiStatus(ObjectGuid guid)
void WorldSession::HandleTaxiQueryAvailableNodesOpcode(WorldPackets::Taxi::TaxiQueryAvailableNodes& taxiQueryAvailableNodes)
{
// cheating checks
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(taxiQueryAvailableNodes.Unit, UNIT_NPC_FLAG_FLIGHTMASTER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(taxiQueryAvailableNodes.Unit, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleTaxiQueryAvailableNodes - %s not found or you can't interact with him.", taxiQueryAvailableNodes.Unit.ToString().c_str());
@@ -168,7 +168,7 @@ void WorldSession::SendDiscoverNewTaxiNode(uint32 nodeid)
void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& activateTaxi)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(activateTaxi.Vendor, UNIT_NPC_FLAG_FLIGHTMASTER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(activateTaxi.Vendor, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleActivateTaxiOpcode - %s not found or you can't interact with it.", activateTaxi.Vendor.ToString().c_str());
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index 9756ee2bc01..0b17b08f48e 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -67,23 +67,23 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
tradeItem.Slot = i;
tradeItem.Item.Initialize(item);
tradeItem.StackCount = item->GetCount();
- tradeItem.GiftCreator = item->GetGuidValue(ITEM_FIELD_GIFTCREATOR);
- if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
+ tradeItem.GiftCreator = item->GetGiftCreator();
+ if (!item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))
{
tradeItem.Unwrapped = boost::in_place();
tradeItem.Unwrapped->EnchantID = item->GetEnchantmentId(PERM_ENCHANTMENT_SLOT);
tradeItem.Unwrapped->OnUseEnchantmentID = item->GetEnchantmentId(USE_ENCHANTMENT_SLOT);
- tradeItem.Unwrapped->Creator = item->GetGuidValue(ITEM_FIELD_CREATOR);
+ tradeItem.Unwrapped->Creator = item->GetCreator();
tradeItem.Unwrapped->Charges = item->GetSpellCharges();
- tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED);
- tradeItem.Unwrapped->MaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY);
- tradeItem.Unwrapped->Durability = item->GetUInt32Value(ITEM_FIELD_DURABILITY);
+ tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && !item->HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED);
+ tradeItem.Unwrapped->MaxDurability = item->m_itemData->MaxDurability;
+ tradeItem.Unwrapped->Durability = item->m_itemData->Durability;
uint8 g = 0;
- for (ItemDynamicFieldGems const& gemData : item->GetGems())
+ for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
WorldPackets::Item::ItemGemData gem;
gem.Slot = g;
@@ -134,8 +134,8 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
}
// adjust time (depends on /played)
- if (myItems[i]->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
- myItems[i]->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, trader->GetTotalPlayedTime()-(_player->GetTotalPlayedTime()-myItems[i]->GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME)));
+ if (myItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE))
+ myItems[i]->SetCreatePlayedTime(trader->GetTotalPlayedTime() - (_player->GetTotalPlayedTime() - myItems[i]->m_itemData->CreatePlayedTime));
// store
trader->MoveItemToInventory(traderDst, myItems[i], true, true);
}
@@ -152,8 +152,8 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
}
// adjust time (depends on /played)
- if (hisItems[i]->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
- hisItems[i]->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, _player->GetTotalPlayedTime()-(trader->GetTotalPlayedTime()-hisItems[i]->GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME)));
+ if (hisItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE))
+ hisItems[i]->SetCreatePlayedTime(_player->GetTotalPlayedTime() - (trader->GetTotalPlayedTime() - hisItems[i]->m_itemData->CreatePlayedTime));
// store
_player->MoveItemToInventory(playerDst, hisItems[i], true, true);
}
@@ -469,12 +469,12 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
{
if (myItems[i])
{
- myItems[i]->SetGuidValue(ITEM_FIELD_GIFTCREATOR, _player->GetGUID());
+ myItems[i]->SetGiftCreator(_player->GetGUID());
_player->MoveItemFromInventory(myItems[i]->GetBagSlot(), myItems[i]->GetSlot(), true);
}
if (hisItems[i])
{
- hisItems[i]->SetGuidValue(ITEM_FIELD_GIFTCREATOR, trader->GetGUID());
+ hisItems[i]->SetGiftCreator(trader->GetGUID());
trader->MoveItemFromInventory(hisItems[i]->GetBagSlot(), hisItems[i]->GetSlot(), true);
}
}
@@ -667,8 +667,8 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade&
}
if ((pOther->GetTeam() != _player->GetTeam() ||
- pOther->HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_MERCENARY_MODE) ||
- _player->HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_MERCENARY_MODE)) &&
+ pOther->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) ||
+ _player->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE)) &&
(!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) &&
!HasPermission(rbac::RBAC_PERM_ALLOW_TWO_SIDE_TRADE)))
{
diff --git a/src/server/game/Handlers/TransmogrificationHandler.cpp b/src/server/game/Handlers/TransmogrificationHandler.cpp
index 11e15f6cd83..82c3fc708ef 100644
--- a/src/server/game/Handlers/TransmogrificationHandler.cpp
+++ b/src/server/game/Handlers/TransmogrificationHandler.cpp
@@ -28,7 +28,7 @@ void WorldSession::HandleTransmogrifyItems(WorldPackets::Transmogrification::Tra
{
Player* player = GetPlayer();
// Validate
- if (!player->GetNPCIfCanInteractWith(transmogrifyItems.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER))
+ if (!player->GetNPCIfCanInteractWith(transmogrifyItems.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER, UNIT_NPC_FLAG_2_NONE))
{
TC_LOG_DEBUG("network", "WORLD: HandleTransmogrifyItems - %s not found or player can't interact with it.", transmogrifyItems.Npc.ToString().c_str());
return;
diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp
index 8f8f94a27bb..bf4b222510c 100644
--- a/src/server/game/Handlers/VoidStorageHandler.cpp
+++ b/src/server/game/Handlers/VoidStorageHandler.cpp
@@ -33,7 +33,7 @@ void WorldSession::SendVoidStorageTransferResult(VoidTransferError result)
void WorldSession::HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoidStorage& unlockVoidStorage)
{
- Creature* unit = _player->GetNPCIfCanInteractWith(unlockVoidStorage.Npc, UNIT_NPC_FLAG_VAULTKEEPER);
+ Creature* unit = _player->GetNPCIfCanInteractWith(unlockVoidStorage.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageUnlock - %s not found or player can't interact with it.", unlockVoidStorage.Npc.ToString().c_str());
@@ -52,7 +52,7 @@ void WorldSession::HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoid
void WorldSession::HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidStorage& queryVoidStorage)
{
- Creature* unit = _player->GetNPCIfCanInteractWith(queryVoidStorage.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER | UNIT_NPC_FLAG_VAULTKEEPER);
+ Creature* unit = _player->GetNPCIfCanInteractWith(queryVoidStorage.Npc, NPCFlags(UNIT_NPC_FLAG_TRANSMOGRIFIER | UNIT_NPC_FLAG_VAULTKEEPER), UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - %s not found or player can't interact with it.", queryVoidStorage.Npc.ToString().c_str());
@@ -95,7 +95,7 @@ void WorldSession::HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidSt
void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStorageTransfer& voidStorageTransfer)
{
- Creature* unit = _player->GetNPCIfCanInteractWith(voidStorageTransfer.Npc, UNIT_NPC_FLAG_VAULTKEEPER);
+ Creature* unit = _player->GetNPCIfCanInteractWith(voidStorageTransfer.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - %s not found or player can't interact with it.", voidStorageTransfer.Npc.ToString().c_str());
@@ -154,14 +154,14 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
continue;
}
- VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetGuidValue(ITEM_FIELD_CREATOR),
- item->GetItemRandomEnchantmentId(), item->GetItemSuffixFactor(), item->GetModifier(ITEM_MODIFIER_UPGRADE_ID),
+ VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetCreator(),
+ item->GetItemRandomEnchantmentId(), item->GetModifier(ITEM_MODIFIER_UPGRADE_ID),
item->GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL),
- uint8(item->GetUInt32Value(ITEM_FIELD_CONTEXT)), item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS));
+ uint8(item->m_itemData->Context), item->m_itemData->BonusListIDs);
WorldPackets::VoidStorage::VoidItem voidItem;
voidItem.Guid = ObjectGuid::Create<HighGuid::Item>(itemVS.ItemId);
- voidItem.Creator = item->GetGuidValue(ITEM_FIELD_CREATOR);
+ voidItem.Creator = item->GetCreator();
voidItem.Item.Initialize(&itemVS);
voidItem.Slot = _player->AddVoidStorageItem(std::move(itemVS));
@@ -195,8 +195,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
}
Item* item = _player->StoreNewItem(dest, itemVS->ItemEntry, true, itemVS->ItemRandomPropertyId, GuidSet(), itemVS->Context, itemVS->BonusListIDs);
- item->SetUInt32Value(ITEM_FIELD_PROPERTY_SEED, itemVS->ItemSuffixFactor);
- item->SetGuidValue(ITEM_FIELD_CREATOR, itemVS->CreatorGuid);
+ item->SetCreator(itemVS->CreatorGuid);
item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, itemVS->ItemUpgradeId);
item->SetBinding(true);
GetCollectionMgr()->AddItemAppearance(item);
@@ -213,7 +212,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
void WorldSession::HandleVoidSwapItem(WorldPackets::VoidStorage::SwapVoidItem& swapVoidItem)
{
- Creature* unit = _player->GetNPCIfCanInteractWith(swapVoidItem.Npc, UNIT_NPC_FLAG_VAULTKEEPER);
+ Creature* unit = _player->GetNPCIfCanInteractWith(swapVoidItem.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidSwapItem - %s not found or player can't interact with it.", swapVoidItem.Npc.ToString().c_str());
diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp
index f856d8557f2..37d0c498b82 100644
--- a/src/server/game/Loot/Loot.cpp
+++ b/src/server/game/Loot/Loot.cpp
@@ -46,7 +46,6 @@ LootItem::LootItem(LootStoreItem const& li)
needs_quest = li.needs_quest;
- randomSuffix = GenerateEnchSuffixFactor(itemid);
randomPropertyId = GenerateItemRandomPropertyId(itemid);
upgradeId = sDB2Manager.GetRulesetItemUpgrade(itemid);
context = 0;
@@ -413,7 +412,7 @@ bool Loot::hasItemForAll() const
}
// return true if there is any FFA, quest or conditional item for the player.
-bool Loot::hasItemFor(Player* player) const
+bool Loot::hasItemFor(Player const* player) const
{
NotNormalLootItemMap const& lootPlayerQuestItems = GetPlayerQuestItems();
NotNormalLootItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUID());
diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h
index 4e1cf545462..dcd9978088f 100644
--- a/src/server/game/Loot/Loot.h
+++ b/src/server/game/Loot/Loot.h
@@ -133,7 +133,6 @@ enum LootSlotType
struct TC_GAME_API LootItem
{
uint32 itemid;
- uint32 randomSuffix;
ItemRandomEnchantmentId randomPropertyId;
int32 upgradeId;
std::vector<int32> BonusListIDs;
@@ -156,7 +155,7 @@ struct TC_GAME_API LootItem
explicit LootItem(LootStoreItem const& li);
// Empty constructor for creating an empty LootItem to be filled in with DB data
- LootItem() : itemid(0), randomSuffix(0), randomPropertyId(), upgradeId(0), context(0), count(0), is_looted(false), is_blocked(false),
+ LootItem() : itemid(0), randomPropertyId(), upgradeId(0), context(0), count(0), is_looted(false), is_blocked(false),
freeforall(false), is_underthreshold(false), is_counted(false), needs_quest(false), follow_loot_rules(false),
canSave(true){ };
@@ -262,7 +261,7 @@ struct TC_GAME_API Loot
LootItem* LootItemInSlot(uint32 lootslot, Player* player, NotNormalLootItem** qitem = NULL, NotNormalLootItem** ffaitem = NULL, NotNormalLootItem** conditem = NULL);
uint32 GetMaxSlotInLootFor(Player* player) const;
bool hasItemForAll() const;
- bool hasItemFor(Player* player) const;
+ bool hasItemFor(Player const* player) const;
bool hasOverThresholdItem() const;
// Builds data for SMSG_LOOT_RESPONSE
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index 81c94e4b7a2..00687a0a4d5 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -205,7 +205,7 @@ bool LootStore::HaveQuestLootFor(uint32 loot_id) const
return itr->second->HasQuestDrop(m_LootTemplates);
}
-bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player* player) const
+bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player const* player) const
{
LootTemplateMap::const_iterator tab = m_LootTemplates.find(loot_id);
if (tab != m_LootTemplates.end())
diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h
index 7f5904cdb7a..570e40c78ad 100644
--- a/src/server/game/Loot/LootMgr.h
+++ b/src/server/game/Loot/LootMgr.h
@@ -80,7 +80,7 @@ class TC_GAME_API LootStore
bool HaveLootFor(uint32 loot_id) const { return m_LootTemplates.find(loot_id) != m_LootTemplates.end(); }
bool HaveQuestLootFor(uint32 loot_id) const;
- bool HaveQuestLootForPlayer(uint32 loot_id, Player* player) const;
+ bool HaveQuestLootForPlayer(uint32 loot_id, Player const* player) const;
LootTemplate const* GetLootFor(uint32 loot_id) const;
void ResetConditions();
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index be561822f5f..8d3e87e3c48 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1052,9 +1052,9 @@ void Map::PlayerRelocation(Player* player, float x, float y, float z, float orie
//! If hovering, always increase our server-side Z position
//! Client automatically projects correct position based on Z coord sent in monster move
- //! and UNIT_FIELD_HOVERHEIGHT sent in object updates
+ //! and HoverHeight sent in object updates
if (player->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- z += player->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ z += player->m_unitData->HoverHeight;
player->Relocate(x, y, z, orientation);
if (player->IsVehicle())
@@ -1087,9 +1087,9 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa
//! If hovering, always increase our server-side Z position
//! Client automatically projects correct position based on Z coord sent in monster move
- //! and UNIT_FIELD_HOVERHEIGHT sent in object updates
+ //! and HoverHeight sent in object updates
if (creature->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- z += creature->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ z += creature->m_unitData->HoverHeight;
// delay creature move for grid/cell to grid/cell moves
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
@@ -4217,14 +4217,29 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*=
bones = new Corpse();
bones->Create(corpse->GetGUID().GetCounter(), this);
- for (uint8 i = OBJECT_FIELD_GUID + 4; i < CORPSE_END; ++i) // don't overwrite guid
- bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
+ bones->SetCorpseDynamicFlags(CorpseDynFlags(*corpse->m_corpseData->DynamicFlags));
+ bones->SetOwnerGUID(corpse->m_corpseData->Owner);
+ bones->SetPartyGUID(corpse->m_corpseData->PartyGUID);
+ bones->SetGuildGUID(corpse->m_corpseData->GuildGUID);
+ bones->SetDisplayId(corpse->m_corpseData->DisplayID);
+ bones->SetRace(corpse->m_corpseData->RaceID);
+ bones->SetSex(corpse->m_corpseData->Sex);
+ bones->SetSkin(corpse->m_corpseData->SkinID);
+ bones->SetFace(corpse->m_corpseData->FaceID);
+ bones->SetHairStyle(corpse->m_corpseData->HairStyleID);
+ bones->SetHairColor(corpse->m_corpseData->HairColorID);
+ bones->SetFacialHairStyle(corpse->m_corpseData->FacialHairStyleID);
+ bones->SetFlags(corpse->m_corpseData->Flags | CORPSE_FLAG_BONES);
+ bones->SetFactionTemplate(corpse->m_corpseData->FactionTemplate);
+ for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
+ bones->SetItem(i, corpse->m_corpseData->Items[i]);
+
+ for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i)
+ bones->SetCustomDisplayOption(i, corpse->m_corpseData->CustomDisplayOption[i]);
bones->SetCellCoord(corpse->GetCellCoord());
bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
- bones->SetUInt32Value(CORPSE_FIELD_FLAGS, corpse->GetUInt32Value(CORPSE_FIELD_FLAGS) | CORPSE_FLAG_BONES);
-
PhasingHandler::InheritPhaseShift(bones, corpse);
AddCorpse(bones);
diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp
index 155910870b4..6729b02dd4f 100644
--- a/src/server/game/Maps/MapScripts.cpp
+++ b/src/server/game/Maps/MapScripts.cpp
@@ -424,26 +424,12 @@ void Map::ScriptsProcess()
if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
{
if (step.script->Emote.Flags & SF_EMOTE_USE_STATE)
- cSource->SetUInt32Value(UNIT_NPC_EMOTESTATE, step.script->Emote.EmoteID);
+ cSource->SetEmoteState(Emote(step.script->Emote.EmoteID));
else
cSource->HandleEmoteCommand(step.script->Emote.EmoteID);
}
break;
- case SCRIPT_COMMAND_FIELD_SET:
- // Source or target must be Creature.
- if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
- {
- // Validate field number.
- if (step.script->FieldSet.FieldID <= OBJECT_FIELD_ENTRY || step.script->FieldSet.FieldID >= cSource->GetValuesCount())
- TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, %s) specified, skipping.",
- step.script->GetDebugInfo().c_str(), step.script->FieldSet.FieldID,
- cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetGUID().ToString().c_str());
- else
- cSource->SetUInt32Value(step.script->FieldSet.FieldID, step.script->FieldSet.FieldValue);
- }
- break;
-
case SCRIPT_COMMAND_MOVE_TO:
// Source or target must be Creature.
if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
@@ -459,38 +445,6 @@ void Map::ScriptsProcess()
}
break;
- case SCRIPT_COMMAND_FLAG_SET:
- // Source or target must be Creature.
- if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
- {
- // Validate field number.
- if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
- {
- TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, %s) specified, skipping.",
- step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID,
- cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().ToString().c_str());
- }
- else
- cSource->SetFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
- }
- break;
-
- case SCRIPT_COMMAND_FLAG_REMOVE:
- // Source or target must be Creature.
- if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
- {
- // Validate field number.
- if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
- {
- TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, %s) specified, skipping.",
- step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID,
- cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().ToString().c_str());
- }
- else
- cSource->RemoveFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
- }
- break;
-
case SCRIPT_COMMAND_TELEPORT_TO:
if (step.script->TeleportTo.Flags & SF_TELEPORT_USE_CREATURE)
{
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index 0fc00a29208..7d7e9a2076a 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -28,7 +28,7 @@ template<class T>
void ConfusedMovementGenerator<T>::DoInitialize(T* unit)
{
unit->AddUnitState(UNIT_STATE_CONFUSED);
- unit->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
+ unit->AddUnitFlag(UNIT_FLAG_CONFUSED);
unit->GetPosition(i_x, i_y, i_z);
if (!unit->IsAlive() || unit->IsStopped())
@@ -101,7 +101,7 @@ bool ConfusedMovementGenerator<T>::DoUpdate(T* unit, uint32 diff)
template<>
void ConfusedMovementGenerator<Player>::DoFinalize(Player* unit)
{
- unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
+ unit->RemoveUnitFlag(UNIT_FLAG_CONFUSED);
unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE);
unit->StopMoving();
}
@@ -109,7 +109,7 @@ void ConfusedMovementGenerator<Player>::DoFinalize(Player* unit)
template<>
void ConfusedMovementGenerator<Creature>::DoFinalize(Creature* unit)
{
- unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
+ unit->RemoveUnitFlag(UNIT_FLAG_CONFUSED);
unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE);
if (unit->GetVictim())
unit->SetTarget(unit->EnsureVictim()->GetGUID());
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 61eedf3347b..5f88727a5ef 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -124,7 +124,7 @@ void FleeingMovementGenerator<T>::DoInitialize(T* owner)
if (!owner)
return;
- owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
+ owner->AddUnitFlag(UNIT_FLAG_FLEEING);
owner->AddUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE);
_setTargetLocation(owner);
}
@@ -132,7 +132,7 @@ void FleeingMovementGenerator<T>::DoInitialize(T* owner)
template<>
void FleeingMovementGenerator<Player>::DoFinalize(Player* owner)
{
- owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
+ owner->RemoveUnitFlag(UNIT_FLAG_FLEEING);
owner->ClearUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE);
owner->StopMoving();
}
@@ -140,7 +140,7 @@ void FleeingMovementGenerator<Player>::DoFinalize(Player* owner)
template<>
void FleeingMovementGenerator<Creature>::DoFinalize(Creature* owner)
{
- owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
+ owner->RemoveUnitFlag(UNIT_FLAG_FLEEING);
owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE);
if (owner->GetVictim())
owner->SetTarget(owner->EnsureVictim()->GetGUID());
@@ -184,7 +184,7 @@ template bool FleeingMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
void TimedFleeingMovementGenerator::Finalize(Unit* owner)
{
- owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
+ owner->RemoveUnitFlag(UNIT_FLAG_FLEEING);
owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE);
if (Unit* victim = owner->GetVictim())
{
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index f30e090fa30..fdbeeed3494 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -395,7 +395,7 @@ void FlightPathMovementGenerator::DoFinalize(Player* player)
player->ClearUnitState(UNIT_STATE_IN_FLIGHT);
player->Dismount();
- player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT);
+ player->RemoveUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT));
if (player->m_taxi.empty())
{
@@ -406,7 +406,7 @@ void FlightPathMovementGenerator::DoFinalize(Player* player)
player->StopMoving();
}
- player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK);
+ player->RemovePlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK);
player->RestoreDisplayId();
}
@@ -416,7 +416,7 @@ void FlightPathMovementGenerator::DoReset(Player* player)
{
player->getHostileRefManager().setOnlineOfflineState(false);
player->AddUnitState(UNIT_STATE_IN_FLIGHT);
- player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT);
+ player->AddUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT));
Movement::MoveSplineInit init(player);
uint32 end = GetPathAtMapEnd();
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index 8b10bbae202..0451b59c246 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -83,7 +83,7 @@ namespace Movement
bool isSmooth() const { return (raw() & Catmullrom) != 0; }
bool isLinear() const { return !isSmooth(); }
- uint8 getAnimationId() const { return animId; }
+ uint8 getAnimTier() const { return animTier; }
bool hasAllFlags(uint32 f) const { return (raw() & f) == f; }
bool hasFlag(uint32 f) const { return (raw() & f) != 0; }
uint32 operator & (uint32 f) const { return (raw() & f); }
@@ -103,7 +103,7 @@ namespace Movement
void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; }
void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; }
- uint8 animId : 3;
+ uint8 animTier : 3;
bool unknown0 : 1;
bool fallingSlow : 1;
bool done : 1;
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index 1745ef24a39..33c6d199441 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -187,7 +187,7 @@ namespace Movement
args.walk = unit->HasUnitMovementFlag(MOVEMENTFLAG_WALKING);
args.flags.flying = unit->HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY));
args.flags.smoothGroundPath = true; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this
- args.flags.steering = unit->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_STEERING);
+ args.flags.steering = unit->HasNpcFlag2(UNIT_NPC_FLAG_2_STEERING);
}
MoveSplineInit::~MoveSplineInit() = default;
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index fbc37cf5bf1..d81c340f8c0 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -66,15 +66,15 @@ namespace WorldPackets
CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate();
Type = TYPE_CREATURE_TO_PLAYER_DAMAGE;
- PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
+ PlayerLevelDelta = target->m_activePlayerData->ScalingPlayerLevelDelta;
PlayerItemLevel = target->GetAverageItemLevel();
TargetItemLevel = 0;
- ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
+ ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
+ TargetScalingLevelDelta = int8(attacker->m_unitData->ScalingLevelDelta);
return true;
}
@@ -84,15 +84,15 @@ namespace WorldPackets
CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate();
Type = TYPE_PLAYER_TO_CREATURE_DAMAGE;
- PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
+ PlayerLevelDelta = attacker->m_activePlayerData->ScalingPlayerLevelDelta;
PlayerItemLevel = attacker->GetAverageItemLevel();
TargetItemLevel = 0;
- ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
+ ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
+ TargetScalingLevelDelta = int8(target->m_unitData->ScalingLevelDelta);
return true;
}
@@ -109,7 +109,7 @@ namespace WorldPackets
Expansion = creatureTemplate->RequiredExpansion;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
+ TargetScalingLevelDelta = int8(accessor->m_unitData->ScalingLevelDelta);
return true;
}
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index 8a36270bec2..b4be28ae025 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -83,7 +83,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c
WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint8 index)
{
- CreatorGUID = item->GetGuidValue(ITEM_FIELD_CREATOR);
+ CreatorGUID = item->GetCreator();
Item.Initialize(item);
Index = index;
@@ -94,9 +94,9 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint
Enchants.emplace_back(enchId, i);
uint8 i = 0;
- for (ItemDynamicFieldGems const& gemData : item->GetGems())
+ for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
Gems.emplace_back();
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index 0803b3f044b..fbc907d7b81 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -33,15 +33,15 @@ bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData
void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
{
ItemID = item->GetEntry();
- std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
+ std::vector<int32> const& bonusListIds = item->m_itemData->BonusListIDs;
if (!bonusListIds.empty())
{
ItemBonus = boost::in_place();
ItemBonus->BonusListIDs.insert(ItemBonus->BonusListIDs.end(), bonusListIds.begin(), bonusListIds.end());
- ItemBonus->Context = item->GetUInt32Value(ITEM_FIELD_CONTEXT);
+ ItemBonus->Context = item->m_itemData->Context;
}
- if (uint32 mask = item->GetUInt32Value(ITEM_FIELD_MODIFIERS_MASK))
+ if (uint32 mask = item->m_itemData->ModifiersMask)
{
Modifications = boost::in_place();
@@ -51,9 +51,9 @@ void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
}
}
-void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const* gem)
+void WorldPackets::Item::ItemInstance::Initialize(UF::SocketedGem const* gem)
{
- ItemID = gem->ItemId;
+ ItemID = gem->ItemID;
ItemBonusInstanceData bonus;
bonus.Context = gem->Context;
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h
index 1c01447630e..3f0d500c069 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.h
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.h
@@ -25,10 +25,14 @@
class ByteBuffer;
class Item;
-struct ItemDynamicFieldGems;
struct LootItem;
struct VoidStorageItem;
+namespace UF
+{
+ struct SocketedGem;
+}
+
namespace WorldPackets
{
namespace Item
@@ -45,7 +49,7 @@ namespace WorldPackets
struct ItemInstance
{
void Initialize(::Item const* item);
- void Initialize(::ItemDynamicFieldGems const* gem);
+ void Initialize(UF::SocketedGem const* gem);
void Initialize(::LootItem const& lootItem);
void Initialize(::VoidStorageItem const* voidItem);
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp
index 294698728ff..0f5731ccc00 100644
--- a/src/server/game/Server/Packets/MailPackets.cpp
+++ b/src/server/game/Server/Packets/MailPackets.cpp
@@ -28,8 +28,8 @@ WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8
Item.Initialize(item);
Count = item->GetCount();
Charges = item->GetSpellCharges();
- MaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY);
- Durability = item->GetUInt32Value(ITEM_FIELD_DURABILITY);
+ MaxDurability = item->m_itemData->MaxDurability;
+ Durability = item->m_itemData->Durability;
Unlocked = !item->IsLocked();
for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; j++)
@@ -42,9 +42,9 @@ WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8
}
uint8 i = 0;
- for (ItemDynamicFieldGems const& gemData : item->GetGems())
+ for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
{
- if (gemData.ItemId)
+ if (gemData.ItemID)
{
WorldPackets::Item::ItemGemData gem;
gem.Slot = i;
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 4039bd9e7b6..b4a2552d49a 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -295,6 +295,15 @@ WorldPacket const* WorldPackets::Misc::StandStateUpdate::Write()
return &_worldPacket;
}
+WorldPacket const* WorldPackets::Misc::SetAnimTier::Write()
+{
+ _worldPacket << Unit;
+ _worldPacket.WriteBits(Tier, 3);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
WorldPacket const* WorldPackets::Misc::PlayerBound::Write()
{
_worldPacket << BinderID;
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 1c88f229a8c..3c56360e4eb 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -420,6 +420,17 @@ namespace WorldPackets
UnitStandStateType State = UnitStandStateType(0);
};
+ class SetAnimTier final : public ServerPacket
+ {
+ public:
+ SetAnimTier(): ServerPacket(SMSG_SET_ANIM_TIER, 16 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Unit;
+ int32 Tier = 0;
+ };
+
class StartMirrorTimer final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 8276fb8d819..c14d96e0964 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -398,7 +398,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
if (splineFlags.animation)
{
- movementSpline.AnimTier = splineFlags.getAnimationId();
+ movementSpline.AnimTier = splineFlags.getAnimTier();
movementSpline.TierTransStartTime = moveSpline.effect_start_time;
}
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 1cd4ab95dad..7704f36d07d 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -556,7 +556,7 @@ void WorldPackets::Party::PartyMemberState::Initialize(Player const* player)
if (!player->IsAlive())
{
- if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (player->HasPlayerFlag(PLAYER_FLAGS_GHOST))
MemberStats.Status |= MEMBER_STATUS_GHOST;
else
MemberStats.Status |= MEMBER_STATUS_DEAD;
@@ -593,9 +593,9 @@ void WorldPackets::Party::PartyMemberState::Initialize(Player const* player)
MemberStats.PositionY = int16(player->GetPositionY());
MemberStats.PositionZ = int16(player->GetPositionZ());
- MemberStats.SpecID = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
- MemberStats.PartyType[0] = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE) & 0xF;
- MemberStats.PartyType[1] = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE) >> 4;
+ MemberStats.SpecID = player->GetPrimarySpecialization();
+ MemberStats.PartyType[0] = player->m_playerData->PartyType & 0xF;
+ MemberStats.PartyType[1] = player->m_playerData->PartyType >> 4;
MemberStats.WmoGroupID = 0;
MemberStats.WmoDoodadPlacementID = 0;
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 8f651aeea7e..8c4ba6f1746 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -133,7 +133,7 @@ bool WorldPackets::Query::PlayerGuidLookupData::Initialize(ObjectGuid const& gui
BnetAccountID = player->GetSession()->GetBattlenetAccountGUID();
Name = player->GetName();
Race = player->getRace();
- Sex = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
+ Sex = player->m_playerData->NativeSex;
ClassID = player->getClass();
Level = player->getLevel();
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 32cc88a0aee..6287fc3c67a 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1715,7 +1715,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_RESEARCH_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ALL_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DUNGEON_DIFFICULTY, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1830,7 +1830,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_GAME_TIME_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_INSTANCE_OWNERSHIP, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_LAST_INSTANCE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, XXXXXXXXXXXX, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TALENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 3525b9a427f..143c53f8a65 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -572,9 +572,9 @@ void WorldSession::LogoutPlayer(bool save)
for (int j = BUYBACK_SLOT_START; j < BUYBACK_SLOT_END; ++j)
{
eslot = j - BUYBACK_SLOT_START;
- _player->SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (j * 4), ObjectGuid::Empty);
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0);
- _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, 0);
+ _player->SetInvSlot(j, ObjectGuid::Empty);
+ _player->SetBuybackPrice(eslot, 0);
+ _player->SetBuybackTimestamp(eslot, 0);
}
_player->SaveToDB();
}
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 36608a4a075..3fa7c3e2cf1 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -71,7 +71,7 @@ uint8 const WorldSocket::AuthCheckSeed[16] = { 0xC5, 0xC6, 0x98, 0x95, 0x76, 0x3
uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B };
uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F };
-uint8 const ClientTypeSeed_Wn64[16] = { 0xDD, 0x62, 0x65, 0x17, 0xCC, 0x6D, 0x31, 0x93, 0x2B, 0x47, 0x99, 0x34, 0xCC, 0xDC, 0x0A, 0xBF };
+uint8 const ClientTypeSeed_Wn64[16] = { 0xBB, 0x6D, 0x98, 0x66, 0xFE, 0x4A, 0x19, 0xA5, 0x68, 0x01, 0x51, 0x98, 0x78, 0x30, 0x03, 0xFC };
uint8 const ClientTypeSeed_Mc64[16] = { 0x34, 0x1C, 0xFE, 0xFE, 0x3D, 0x72, 0xAC, 0xA9, 0xA4, 0x40, 0x7D, 0xC5, 0x35, 0xDE, 0xD6, 0x6A };
WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)),
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 9e21f697bf4..837e0aa61a7 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -611,47 +611,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
if (!m_spellInfo->HasAttribute(SPELL_ATTR8_MASTERY_SPECIALIZATION) || G3D::fuzzyEq(GetSpellEffectInfo()->BonusCoefficient, 0.0f))
amount = GetSpellEffectInfo()->CalcValue(caster, &m_baseAmount, GetBase()->GetOwner()->ToUnit(), nullptr, GetBase()->GetCastItemLevel());
else if (caster && caster->GetTypeId() == TYPEID_PLAYER)
- amount = int32(caster->GetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY) * GetSpellEffectInfo()->BonusCoefficient);
-
- // check item enchant aura cast
- if (!amount && caster)
- {
- ObjectGuid itemGUID = GetBase()->GetCastItemGUID();
- if (!itemGUID.IsEmpty())
- {
- if (Player* playerCaster = caster->ToPlayer())
- {
- if (Item* castItem = playerCaster->GetItemByGuid(itemGUID))
- {
- if (castItem->GetItemSuffixFactor())
- {
- ItemRandomSuffixEntry const* item_rand_suffix = sItemRandomSuffixStore.LookupEntry(abs(castItem->GetItemRandomPropertyId()));
- if (item_rand_suffix)
- {
- for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; k++)
- {
- SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(item_rand_suffix->Enchantment[k]);
- if (pEnchant)
- {
- for (int t = 0; t < MAX_ITEM_ENCHANTMENT_EFFECTS; t++)
- {
- if (pEnchant->EffectArg[t] == m_spellInfo->Id)
- {
- amount = uint32((item_rand_suffix->AllocationPct[k] * castItem->GetItemSuffixFactor()) / 10000);
- break;
- }
- }
- }
-
- if (amount)
- break;
- }
- }
- }
- }
- }
- }
- }
+ amount = int32(caster->ToPlayer()->m_activePlayerData->Mastery * GetSpellEffectInfo()->BonusCoefficient);
// custom amount calculations go here
switch (GetAuraType())
@@ -747,7 +707,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool resetPeriodicTimer /*= tru
if (m_spellInfo->IsChanneled())
caster->ModSpellDurationTime(m_spellInfo, m_period);
else if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
- m_period = int32(m_period * caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
+ m_period = int32(m_period * caster->m_unitData->ModCastingSpeed);
}
}
@@ -1485,8 +1445,8 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode
if (apply)
{
// apply glow vision
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW);
+ if (Player* playerTarget = target->ToPlayer())
+ playerTarget->AddAuraVision(PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW);
target->m_invisibility.AddFlag(type);
target->m_invisibility.AddValue(type, GetAmount());
@@ -1497,8 +1457,8 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode
{
// if not have different invisibility auras.
// remove glow vision
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW);
+ if (Player * playerTarget = target->ToPlayer())
+ playerTarget->RemoveAuraVision(PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW);
target->m_invisibility.DelFlag(type);
}
@@ -1568,9 +1528,9 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo
target->m_stealth.AddFlag(type);
target->m_stealth.AddValue(type, GetAmount());
- target->SetStandFlags(UNIT_STAND_FLAGS_CREEP);
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH);
+ target->AddVisFlags(UNIT_VIS_FLAGS_CREEP);
+ if (Player * playerTarget = target->ToPlayer())
+ playerTarget->AddAuraVision(PLAYER_FIELD_BYTE2_STEALTH);
}
else
{
@@ -1580,9 +1540,9 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo
{
target->m_stealth.DelFlag(type);
- target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP);
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH);
+ target->RemoveVisFlags(UNIT_VIS_FLAGS_CREEP);
+ if (Player * playerTarget = target->ToPlayer())
+ playerTarget->RemoveAuraVision(PLAYER_FIELD_BYTE2_STEALTH);
}
}
@@ -1646,14 +1606,14 @@ void AuraEffect::HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
return;
- Unit* target = aurApp->GetTarget();
+ Player* target = aurApp->GetTarget()->ToPlayer();
- if (target->GetTypeId() != TYPEID_PLAYER)
+ if (!target)
return;
if (apply)
{
- target->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST);
+ target->AddPlayerFlag(PLAYER_FLAGS_GHOST);
target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
}
@@ -1662,7 +1622,7 @@ void AuraEffect::HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool
if (target->HasAuraType(SPELL_AURA_GHOST))
return;
- target->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST);
+ target->RemovePlayerFlag(PLAYER_FLAGS_GHOST);
target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
}
@@ -2020,8 +1980,8 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
target->SetDisplayId(model_id);
// Dragonmaw Illusion (set mount model also)
- if (GetId() == 42016 && target->GetMountID() && !target->GetAuraEffectsByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED).empty())
- target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 16314);
+ if (GetId() == 42016 && target->GetMountDisplayId() && !target->GetAuraEffectsByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED).empty())
+ target->SetMountDisplayId(16314);
}
}
}
@@ -2048,7 +2008,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
target->RestoreDisplayId(target->IsMounted());
// Dragonmaw Illusion (restore mount model)
- if (GetId() == 42016 && target->GetMountID() == 16314)
+ if (GetId() == 42016 && target->GetMountDisplayId() == 16314)
{
if (!target->GetAuraEffectsByType(SPELL_AURA_MOUNTED).empty())
{
@@ -2058,7 +2018,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
CreatureModel model = *ObjectMgr::ChooseDisplayId(ci);
sObjectMgr->GetCreatureModelRandomGender(&model, ci);
- target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, model.CreatureDisplayID);
+ target->SetMountDisplayId(model.CreatureDisplayID);
}
}
}
@@ -2093,12 +2053,12 @@ void AuraEffect::HandleAuraCloneCaster(AuraApplication const* aurApp, uint8 mode
// What must be cloned? at least display and scale
target->SetDisplayId(caster->GetDisplayId());
//target->SetObjectScale(caster->GetObjectScale()); // we need retail info about how scaling is handled (aura maybe?)
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_MIRROR_IMAGE);
+ target->AddUnitFlag2(UNIT_FLAG2_MIRROR_IMAGE);
}
else
{
target->SetDisplayId(target->GetNativeDisplayId());
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_MIRROR_IMAGE);
+ target->RemoveUnitFlag2(UNIT_FLAG2_MIRROR_IMAGE);
}
}
@@ -2151,9 +2111,9 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
if (aurApp->GetRemoveMode())
return;
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x
- target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x
+ target->AddUnitFlag(UNIT_FLAG_UNK_29);
+ target->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
+ target->AddDynamicFlag(UNIT_DYNFLAG_DEAD);
target->AddUnitState(UNIT_STATE_DIED);
if (Creature* creature = target->ToCreature())
@@ -2166,9 +2126,9 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
target->SendMessageToSet(&data, true);
*/
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x
- target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x
+ target->RemoveUnitFlag(UNIT_FLAG_UNK_29);
+ target->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
+ target->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
target->ClearUnitState(UNIT_STATE_DIED);
if (Creature* creature = target->ToCreature())
@@ -2187,7 +2147,10 @@ void AuraEffect::HandleModUnattackable(AuraApplication const* aurApp, uint8 mode
if (!apply && target->HasAuraType(SPELL_AURA_MOD_UNATTACKABLE))
return;
- target->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, apply);
+ if (apply)
+ target->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ else
+ target->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
// call functions which may have additional effects after chainging state of unit
if (apply && (mode & AURA_EFFECT_HANDLE_REAL))
@@ -2210,25 +2173,34 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode,
if (apply ? target->GetAuraEffectsByType(type).size() > 1 : target->HasAuraType(type))
return;
- uint32 field, flag, slot;
+ void(*flagAddFn)(Unit* u) = nullptr;
+ void(*flagRemoveFn)(Unit* u) = nullptr;
+
+ uint32 slot;
WeaponAttackType attType;
switch (type)
{
case SPELL_AURA_MOD_DISARM:
- field = UNIT_FIELD_FLAGS;
- flag = UNIT_FLAG_DISARMED;
+ if (apply)
+ flagAddFn = [](Unit* u) { u->AddUnitFlag(UNIT_FLAG_DISARMED); };
+ else
+ flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag(UNIT_FLAG_DISARMED); };
slot = EQUIPMENT_SLOT_MAINHAND;
attType = BASE_ATTACK;
break;
case SPELL_AURA_MOD_DISARM_OFFHAND:
- field = UNIT_FIELD_FLAGS_2;
- flag = UNIT_FLAG2_DISARM_OFFHAND;
+ if (apply)
+ flagAddFn = [](Unit* u) { u->AddUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND); };
+ else
+ flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND); };
slot = EQUIPMENT_SLOT_OFFHAND;
attType = OFF_ATTACK;
break;
case SPELL_AURA_MOD_DISARM_RANGED:
- field = UNIT_FIELD_FLAGS_2;
- flag = UNIT_FLAG2_DISARM_RANGED;
+ if (apply)
+ flagAddFn = [](Unit* u) { u->AddUnitFlag2(UNIT_FLAG2_DISARM_RANGED); };
+ else
+ flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag2(UNIT_FLAG2_DISARM_RANGED); };
slot = EQUIPMENT_SLOT_MAINHAND;
attType = RANGED_ATTACK;
break;
@@ -2237,8 +2209,8 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode,
}
// if disarm aura is to be removed, remove the flag first to reapply damage/aura mods
- if (!apply)
- target->RemoveFlag(field, flag);
+ if (flagRemoveFn)
+ flagRemoveFn(target);
// Handle damage modification, shapeshifted druids are not affected
if (target->GetTypeId() == TYPEID_PLAYER && !target->IsInFeralForm())
@@ -2255,8 +2227,8 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode,
}
// if disarm effects should be applied, wait to set flag until damage mods are unapplied
- if (apply)
- target->SetFlag(field, flag);
+ if (flagAddFn)
+ flagAddFn(target);
if (target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->GetCurrentEquipmentId())
target->UpdateDamagePhysical(attType);
@@ -2271,7 +2243,7 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode,
if (apply)
{
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED);
+ target->AddUnitFlag(UNIT_FLAG_SILENCED);
// call functions which may have additional effects after chainging state of unit
// Stop cast only spells vs PreventionType & SPELL_PREVENTION_TYPE_SILENCE
@@ -2287,7 +2259,7 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode,
if (target->HasAuraType(SPELL_AURA_MOD_SILENCE) || target->HasAuraType(SPELL_AURA_MOD_PACIFY_SILENCE))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED);
+ target->RemoveUnitFlag(UNIT_FLAG_SILENCED);
}
}
@@ -2300,7 +2272,7 @@ void AuraEffect::HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode,
if (apply)
{
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ target->AddUnitFlag(UNIT_FLAG_PACIFIED);
target->AttackStop();
}
else
@@ -2308,7 +2280,7 @@ void AuraEffect::HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode,
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(SPELL_AURA_MOD_PACIFY) || target->HasAuraType(SPELL_AURA_MOD_PACIFY_SILENCE))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ target->RemoveUnitFlag(UNIT_FLAG_PACIFIED);
}
}
@@ -2324,9 +2296,9 @@ void AuraEffect::HandleAuraModPacifyAndSilence(AuraApplication const* aurApp, ui
if (m_spellInfo->Id == 45839)
{
if (apply)
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ target->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
else
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ target->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
if (!(apply))
{
@@ -2343,18 +2315,18 @@ void AuraEffect::HandleAuraAllowOnlyAbility(AuraApplication const* aurApp, uint8
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
return;
- Unit* target = aurApp->GetTarget();
+ Player* target = aurApp->GetTarget()->ToPlayer();
- if (target->GetTypeId() == TYPEID_PLAYER)
+ if (target)
{
if (apply)
- target->SetFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY);
+ target->AddPlayerFlag(PLAYER_ALLOW_ONLY_ABILITY);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(SPELL_AURA_ALLOW_ONLY_ABILITY))
return;
- target->RemoveFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY);
+ target->RemovePlayerFlag(PLAYER_ALLOW_ONLY_ABILITY);
}
}
}
@@ -2368,7 +2340,7 @@ void AuraEffect::HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mod
if (apply)
{
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS);
+ target->AddUnitFlag2(UNIT_FLAG2_NO_ACTIONS);
// call functions which may have additional effects after chainging state of unit
// Stop cast only spells vs PreventionType & SPELL_PREVENTION_TYPE_SILENCE
@@ -2384,7 +2356,7 @@ void AuraEffect::HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mod
if (target->HasAuraType(SPELL_AURA_MOD_NO_ACTIONS))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS);
+ target->RemoveUnitFlag2(UNIT_FLAG2_NO_ACTIONS);
}
}
@@ -2397,15 +2369,14 @@ void AuraEffect::HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 m
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
return;
- Unit* target = aurApp->GetTarget();
-
- if (target->GetTypeId() != TYPEID_PLAYER)
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
return;
if (apply)
- target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1));
+ target->AddTrackCreatureFlag(uint32(1) << (GetMiscValue() - 1));
else
- target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1));
+ target->RemoveTrackCreatureFlag(uint32(1) << (GetMiscValue() - 1));
}
void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -2413,15 +2384,17 @@ void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 m
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
return;
- Unit* target = aurApp->GetTarget();
-
- if (target->GetTypeId() != TYPEID_PLAYER)
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
return;
+ uint32 bitIndex = GetMiscValue() - 1;
+ uint32 index = bitIndex / 32;
+ uint32 flag = 1 << (bitIndex % 32);
if (apply)
- target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1));
+ target->AddTrackResourceFlag(index, flag);
else
- target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1));
+ target->RemoveTrackResourceFlag(index, flag);
}
void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -2429,9 +2402,8 @@ void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 m
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
return;
- Unit* target = aurApp->GetTarget();
-
- if (target->GetTypeId() != TYPEID_PLAYER)
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
return;
if (!(apply))
@@ -2440,7 +2412,10 @@ void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 m
if (target->HasAuraType(GetAuraType()))
return;
}
- target->ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_TRACK_STEALTHED, apply);
+ if (apply)
+ target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_TRACK_STEALTHED);
+ else
+ target->RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_TRACK_STEALTHED);
}
void AuraEffect::HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -2452,12 +2427,12 @@ void AuraEffect::HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode,
// used by spells: Hunter's Mark, Mind Vision, Syndicate Tracker (MURP) DND
if (apply)
- target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TRACK_UNIT);
+ target->AddDynamicFlag(UNIT_DYNFLAG_TRACK_UNIT);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (!target->HasAuraType(GetAuraType()))
- target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TRACK_UNIT);
+ target->RemoveDynamicFlag(UNIT_DYNFLAG_TRACK_UNIT);
}
// call functions which may have additional effects after chainging state of unit
@@ -2472,13 +2447,13 @@ void AuraEffect::HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode
Unit* target = aurApp->GetTarget();
if (apply)
- target->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, UNIT_STAND_FLAGS_UNTRACKABLE);
+ target->AddVisFlags(UNIT_VIS_FLAGS_UNTRACKABLE);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(GetAuraType()))
return;
- target->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, UNIT_STAND_FLAGS_UNTRACKABLE);
+ target->RemoveVisFlags(UNIT_VIS_FLAGS_UNTRACKABLE);
}
}
@@ -2685,13 +2660,13 @@ void AuraEffect::HandleForceMoveForward(AuraApplication const* aurApp, uint8 mod
Unit* target = aurApp->GetTarget();
if (apply)
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT);
+ target->AddUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(GetAuraType()))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT);
+ target->RemoveUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT);
}
}
@@ -3027,8 +3002,8 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp,
target->ApplySpellImmune(GetId(), IMMUNITY_MECHANIC, MECHANIC_POLYMORPH, apply);
// Dragonmaw Illusion (overwrite mount model, mounted aura already applied)
- if (apply && target->HasAuraEffect(42016, 0) && target->GetMountID())
- target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 16314);
+ if (apply && target->HasAuraEffect(42016, 0) && target->GetMountDisplayId())
+ target->SetMountDisplayId(16314);
}
}
}
@@ -3283,17 +3258,19 @@ void AuraEffect::HandleModTargetResistance(AuraApplication const* aurApp, uint8
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
return;
- Unit* target = aurApp->GetTarget();
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
+ return;
// applied to damage as HandleNoImmediateEffect in Unit::CalcAbsorbResist and Unit::CalcArmorReducedDamage
// show armor penetration
if (target->GetTypeId() == TYPEID_PLAYER && (GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
- target->ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, GetAmount(), apply);
+ target->ApplyModTargetPhysicalResistance(GetAmount(), apply);
// show as spell penetration only full spell penetration bonuses (all resistances except armor and holy
if (target->GetTypeId() == TYPEID_PLAYER && (GetMiscValue() & SPELL_SCHOOL_MASK_SPELL) == SPELL_SCHOOL_MASK_SPELL)
- target->ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, GetAmount(), apply);
+ target->ApplyModTargetResistance(GetAmount(), apply);
}
/********************************/
@@ -3569,7 +3546,7 @@ void AuraEffect::HandleOverrideSpellPowerByAttackPower(AuraApplication const* au
if (!target)
return;
- target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT, float(m_amount), apply);
+ target->ApplyModOverrideSpellPowerByAPPercent(float(m_amount), apply);
target->UpdateSpellDamageAndHealingBonus();
}
@@ -3582,7 +3559,7 @@ void AuraEffect::HandleOverrideAttackPowerBySpellPower(AuraApplication const* au
if (!target)
return;
- target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT, float(m_amount), apply);
+ target->ApplyModOverrideAPBySpellPowerPercent(float(m_amount), apply);
target->UpdateAttackPowerAndDamage();
target->UpdateAttackPowerAndDamage(true);
}
@@ -3594,7 +3571,7 @@ void AuraEffect::HandleModVersatilityByPct(AuraApplication const* aurApp, uint8
if (Player* target = aurApp->GetTarget()->ToPlayer())
{
- target->SetStatFloatValue(ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS, target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
+ target->SetVersatilityBonus(target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
target->UpdateHealingDonePercentMod();
target->UpdateVersatilityDamageDone();
}
@@ -3809,10 +3786,10 @@ void AuraEffect::HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp
if (apply)
{
target->RemoveAurasByType(GetAuraType(), ObjectGuid::Empty, GetBase());
- target->SetUInt32Value(UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID, powerDisplay->ID);
+ target->SetOverrideDisplayPowerId(powerDisplay->ID);
}
else
- target->SetUInt32Value(UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID, 0);
+ target->SetOverrideDisplayPowerId(0);
}
void AuraEffect::HandleAuraModMaxPowerPct(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4195,14 +4172,18 @@ void AuraEffect::HandleModDamageDone(AuraApplication const* aurApp, uint8 mode,
// Magic damage modifiers implemented in Unit::SpellBaseDamageBonusDone
// This information for client side use only
- if (target->GetTypeId() == TYPEID_PLAYER)
+ if (Player* playerTarget = target->ToPlayer())
{
- uint16 baseField = GetAmount() >= 0 ? ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS : ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG;
for (uint16 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
if (GetMiscValue() & (1 << i))
- target->ApplyModInt32Value(baseField + i, GetAmount(), apply);
+ {
+ if (GetAmount() >= 0)
+ playerTarget->ApplyModDamageDonePos(SpellSchools(i), GetAmount(), apply);
+ else
+ playerTarget->ApplyModDamageDoneNeg(SpellSchools(i), GetAmount(), apply);
+ }
- if (Guardian* pet = target->ToPlayer()->GetGuardianPet())
+ if (Guardian* pet = playerTarget->GetGuardianPet())
pet->UpdateAttackPowerAndDamage();
}
}
@@ -4231,16 +4212,16 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8
target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply);
}
- if (target->GetTypeId() == TYPEID_PLAYER)
+ if (Player* thisPlayer = target->ToPlayer())
{
for (uint16 i = 0; i < MAX_SPELL_SCHOOL; ++i)
{
if (GetMiscValue() & (1 << i))
{
if (spellGroupVal)
- target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(spellGroupVal), !apply);
+ thisPlayer->ApplyModDamageDonePercent(SpellSchools(i), float(spellGroupVal), !apply);
- target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(GetAmount()), apply);
+ thisPlayer->ApplyModDamageDonePercent(SpellSchools(i), float(GetAmount()), apply);
}
}
}
@@ -4279,7 +4260,7 @@ void AuraEffect::HandleModPowerCostPCT(AuraApplication const* aurApp, uint8 mode
float amount = CalculatePct(1.0f, GetAmount());
for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
if (GetMiscValue() & (1 << i))
- target->ApplyModSignedFloatValue(UNIT_FIELD_POWER_COST_MULTIPLIER + i, amount, apply);
+ target->ApplyModPowerCostMultiplier(SpellSchools(i), amount, apply);
}
void AuraEffect::HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4290,8 +4271,8 @@ void AuraEffect::HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, b
Unit* target = aurApp->GetTarget();
for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
- if (GetMiscValue() & (1<<i))
- target->ApplyModInt32Value(UNIT_FIELD_POWER_COST_MODIFIER+i, GetAmount(), apply);
+ if (GetMiscValue() & (1 << i))
+ target->ApplyModPowerCostModifier(SpellSchools(i), GetAmount(), apply);
}
void AuraEffect::HandleArenaPreparation(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4302,13 +4283,13 @@ void AuraEffect::HandleArenaPreparation(AuraApplication const* aurApp, uint8 mod
Unit* target = aurApp->GetTarget();
if (apply)
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION);
+ target->AddUnitFlag(UNIT_FLAG_PREPARATION);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(GetAuraType()))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION);
+ target->RemoveUnitFlag(UNIT_FLAG_PREPARATION);
}
}
@@ -4328,10 +4309,7 @@ void AuraEffect::HandleNoReagentUseAura(AuraApplication const* aurApp, uint8 mod
if (SpellEffectInfo const* effect = (*i)->GetSpellEffectInfo())
mask |= effect->SpellClassMask;
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST , mask[0]);
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+1, mask[1]);
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+2, mask[2]);
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+3, mask[3]);
+ target->ToPlayer()->SetNoRegentCostMask(mask);
}
void AuraEffect::HandleAuraRetainComboPoints(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4789,7 +4767,12 @@ void AuraEffect::HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bo
}
if (target->GetCreatureType() == CREATURE_TYPE_BEAST)
- target->ApplyModUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
+ {
+ if (apply)
+ target->AddDynamicFlag(UNIT_DYNFLAG_SPECIALINFO);
+ else
+ target->RemoveDynamicFlag(UNIT_DYNFLAG_SPECIALINFO);
+ }
}
void AuraEffect::HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4803,13 +4786,13 @@ void AuraEffect::HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode,
{
target->setFaction(GetMiscValue());
if (target->GetTypeId() == TYPEID_PLAYER)
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ target->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
}
else
{
target->RestoreFaction();
if (target->GetTypeId() == TYPEID_PLAYER)
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ target->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
}
}
@@ -4821,13 +4804,13 @@ void AuraEffect::HandleComprehendLanguage(AuraApplication const* aurApp, uint8 m
Unit* target = aurApp->GetTarget();
if (apply)
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_COMPREHEND_LANG);
+ target->AddUnitFlag2(UNIT_FLAG2_COMPREHEND_LANG);
else
{
if (target->HasAuraType(GetAuraType()))
return;
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_COMPREHEND_LANG);
+ target->RemoveUnitFlag2(UNIT_FLAG2_COMPREHEND_LANG);
}
}
@@ -4897,11 +4880,8 @@ void AuraEffect::HandleAuraModFakeInebriation(AuraApplication const* aurApp, uin
target->m_invisibilityDetect.AddFlag(INVISIBILITY_DRUNK);
target->m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, GetAmount());
- if (target->GetTypeId() == TYPEID_PLAYER)
- {
- int32 oldval = target->ToPlayer()->GetInt32Value(PLAYER_FAKE_INEBRIATION);
- target->ToPlayer()->SetInt32Value(PLAYER_FAKE_INEBRIATION, oldval + GetAmount());
- }
+ if (Player* playerTarget = target->ToPlayer())
+ playerTarget->ApplyModFakeInebriation(GetAmount(), true);
}
else
{
@@ -4909,13 +4889,12 @@ void AuraEffect::HandleAuraModFakeInebriation(AuraApplication const* aurApp, uin
target->m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, -GetAmount());
- if (target->GetTypeId() == TYPEID_PLAYER)
+ if (Player* playerTarget = target->ToPlayer())
{
- int32 oldval = target->ToPlayer()->GetInt32Value(PLAYER_FAKE_INEBRIATION);
- target->ToPlayer()->SetInt32Value(PLAYER_FAKE_INEBRIATION, oldval - GetAmount());
+ playerTarget->ApplyModFakeInebriation(GetAmount(), false);
if (removeDetect)
- removeDetect = !target->ToPlayer()->GetDrunkValue();
+ removeDetect = !playerTarget->GetDrunkValue();
}
if (removeDetect)
@@ -4940,7 +4919,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m
if (apply)
{
- target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, overrideId);
+ target->SetOverrideSpellsId(overrideId);
if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId))
for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i)
if (uint32 spellId = overrideSpells->Spells[i])
@@ -4948,7 +4927,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m
}
else
{
- target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, 0);
+ target->SetOverrideSpellsId(0);
if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId))
for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i)
if (uint32 spellId = overrideSpells->Spells[i])
@@ -4988,13 +4967,14 @@ void AuraEffect::HandlePreventResurrection(AuraApplication const* aurApp, uint8
if (!(mode & AURA_EFFECT_HANDLE_REAL))
return;
- if (aurApp->GetTarget()->GetTypeId() != TYPEID_PLAYER)
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
return;
if (apply)
- aurApp->GetTarget()->RemoveFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER);
- else if (!aurApp->GetTarget()->GetMap()->Instanceable())
- aurApp->GetTarget()->SetFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER);
+ target->RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
+ else if (!target->GetMap()->Instanceable())
+ target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER);
}
void AuraEffect::HandleMastery(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const
@@ -5110,7 +5090,7 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
if (GetId() == 52179) // Astral Shift
{
// Periodic need for remove visual on stun/fear/silence lost
- if (!(target->GetUInt32Value(UNIT_FIELD_FLAGS)&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED)))
+ if (!target->HasUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_FLEEING | UNIT_FLAG_SILENCED)))
target->RemoveAurasDueToSpell(52179);
break;
}
@@ -6140,13 +6120,14 @@ void AuraEffect::HandleAllowUsingGameobjectsWhileMounted(AuraApplication const*
if (!(mode & AURA_EFFECT_HANDLE_REAL))
return;
- if (aurApp->GetTarget()->GetTypeId() != TYPEID_PLAYER)
+ Player* target = aurApp->GetTarget()->ToPlayer();
+ if (!target)
return;
if (apply)
- aurApp->GetTarget()->SetFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED);
- else if (!aurApp->GetTarget()->HasAuraType(SPELL_AURA_ALLOW_USING_GAMEOBJECTS_WHILE_MOUNTED))
- aurApp->GetTarget()->RemoveFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED);
+ target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED);
+ else if (!target->HasAuraType(SPELL_AURA_ALLOW_USING_GAMEOBJECTS_WHILE_MOUNTED))
+ target->RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED);
}
void AuraEffect::HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool apply) const
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 003bf57239b..f2ec658f89f 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -801,7 +801,7 @@ void Aura::RefreshDuration(bool withMods)
int32 duration = m_spellInfo->GetMaxDuration();
// Calculate duration of periodics affected by haste.
if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
- duration = int32(duration * caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
+ duration = int32(duration * caster->m_unitData->ModCastingSpeed);
SetMaxDuration(duration);
SetDuration(duration);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index a72de085989..778d4d1be6b 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -941,7 +941,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa
{
case TARGET_UNIT_CHANNEL_TARGET:
{
- for (ObjectGuid const& channelTarget : m_originalCaster->GetChannelObjects())
+ for (ObjectGuid const& channelTarget : m_originalCaster->m_unitData->ChannelObjects)
{
WorldObject* target = ObjectAccessor::GetUnit(*m_caster, channelTarget);
CallScriptObjectTargetSelectHandlers(target, effIndex, targetType);
@@ -959,7 +959,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa
m_targets.SetDst(channeledSpell->m_targets);
else
{
- DynamicFieldStructuredView<ObjectGuid> channelObjects = m_originalCaster->GetChannelObjects();
+ auto const& channelObjects = m_originalCaster->m_unitData->ChannelObjects;
WorldObject* target = channelObjects.size() > 0 ? ObjectAccessor::GetWorldObject(*m_caster, *channelObjects.begin()) : nullptr;
if (target)
{
@@ -2590,7 +2590,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask)
if (m_caster != unit)
{
// Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells
- if (m_spellInfo->Speed > 0.0f && unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID())
+ if (m_spellInfo->Speed > 0.0f && unit->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID())
return SPELL_MISS_EVADE;
if (m_caster->_IsValidAttackTarget(unit, m_spellInfo))
@@ -2707,7 +2707,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask)
// if there is no periodic effect
if (!duration)
- duration = int32(origDuration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED));
+ duration = int32(origDuration * m_originalCaster->m_unitData->ModCastingSpeed);
}
}
@@ -2992,7 +2992,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
else
m_casttime = m_spellInfo->CalcCastTime(m_caster->getLevel(), this);
- if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) // _UNIT actually means creature. for some reason.
+ if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) // _UNIT actually means creature. for some reason.
if (!(m_spellInfo->IsNextMeleeSwingSpell() || IsAutoRepeat() || (_triggeredCastFlags & TRIGGERED_IGNORE_SET_FACING)))
{
if (m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget())
@@ -3206,7 +3206,7 @@ void Spell::cast(bool skipCheck)
// if the spell allows the creature to turn while casting, then adjust server-side orientation to face the target now
// client-side orientation is handled by the client itself, as the cast target is targeted due to Creature::FocusTarget
- if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
if (!m_spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST))
if (WorldObject* objTarget = m_targets.GetObjectTarget())
m_caster->SetInFront(objTarget);
@@ -3661,7 +3661,7 @@ void Spell::finish(bool ok)
if (Unit* charm = m_caster->GetCharm())
if (charm->GetTypeId() == TYPEID_UNIT
&& charm->ToCreature()->HasUnitTypeMask(UNIT_MASK_PUPPET)
- && charm->GetUInt32Value(UNIT_CREATED_BY_SPELL) == m_spellInfo->Id)
+ && charm->m_unitData->CreatedBySpell == int32(m_spellInfo->Id))
((Puppet*)charm)->UnSummon();
}
@@ -3674,7 +3674,7 @@ void Spell::finish(bool ok)
if (m_caster->GetTypeId() == TYPEID_UNIT && m_caster->IsSummon())
{
// Unsummon statue
- uint32 spell = m_caster->GetUInt32Value(UNIT_CREATED_BY_SPELL);
+ uint32 spell = m_caster->m_unitData->CreatedBySpell;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell);
if (spellInfo && spellInfo->IconFileDataId == 134230)
{
@@ -4408,7 +4408,7 @@ void Spell::SendChannelUpdate(uint32 time)
{
if (time == 0)
{
- m_caster->ClearDynamicValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS);
+ m_caster->ClearChannelObjects();
m_caster->SetChannelSpellId(0);
m_caster->SetChannelSpellXSpellVisualId(0);
}
@@ -4803,7 +4803,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
//can cast triggered (by aura only?) spells while have this flag
- if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
+ if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasPlayerFlag(PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
// check if we are using a potion in combat for the 2nd+ time. Cooldown is added only after caster gets out of combat
@@ -4820,7 +4820,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
}
}
- if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS))
{
m_customError = SPELL_CUSTOM_ERROR_GM_ONLY;
return SPELL_FAILED_CUSTOM_ERROR;
@@ -5217,10 +5217,10 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
if (std::vector<uint32> const* glyphRequiredSpecs = sDB2Manager.GetGlyphRequiredSpecs(glyphId))
{
- if (!caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))
+ if (!caster->GetPrimarySpecialization())
return SPELL_FAILED_GLYPH_NO_SPEC;
- if (std::find(glyphRequiredSpecs->begin(), glyphRequiredSpecs->end(), caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) == glyphRequiredSpecs->end())
+ if (std::find(glyphRequiredSpecs->begin(), glyphRequiredSpecs->end(), caster->GetPrimarySpecialization()) == glyphRequiredSpecs->end())
return SPELL_FAILED_GLYPH_INVALID_SPEC;
}
@@ -5333,7 +5333,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_targets.GetUnitTarget() || m_targets.GetUnitTarget()->GetTypeId() != TYPEID_UNIT)
return SPELL_FAILED_BAD_TARGETS;
- if (!(m_targets.GetUnitTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & UNIT_FLAG_SKINNABLE))
+ if (!m_targets.GetUnitTarget()->HasUnitFlag(UNIT_FLAG_SKINNABLE))
return SPELL_FAILED_TARGET_UNSKINNABLE;
Creature* creature = m_targets.GetUnitTarget()->ToCreature();
@@ -5808,7 +5808,7 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const
SpellCastResult result = SPELL_CAST_OK;
// Get unit state
- uint32 const unitflag = m_caster->GetUInt32Value(UNIT_FIELD_FLAGS);
+ uint32 const unitflag = m_caster->m_unitData->Flags;
// this check should only be done when player does cast directly
// (ie not when it's called from a script) Breaks for example PlayerAI when charmed
@@ -5865,7 +5865,7 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const
result = SPELL_FAILED_FLEEING;
else if (unitflag & UNIT_FLAG_CONFUSED && !usableWhileConfused && !CheckSpellCancelsConfuse(param1))
result = SPELL_FAILED_CONFUSED;
- else if (m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_NO_ACTIONS)
+ else if (m_caster->HasUnitFlag2(UNIT_FLAG2_NO_ACTIONS) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_NO_ACTIONS)
result = SPELL_FAILED_NO_ACTIONS;
// Attr must make flag drop spell totally immune from all effects
@@ -7608,13 +7608,13 @@ void Spell::TriggerGlobalCooldown()
// Apply haste rating
if (gcd > MIN_GCD && ((m_spellInfo->StartRecoveryCategory == 133 && !isMeleeOrRangedSpell) || m_caster->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE, m_spellInfo)))
{
- gcd = int32(float(gcd) * m_caster->GetFloatValue(UNIT_MOD_CAST_HASTE));
+ gcd = int32(float(gcd) * m_caster->m_unitData->ModSpellHaste);
RoundToInterval<int32>(gcd, MIN_GCD, MAX_GCD);
}
if (gcd > MIN_GCD && m_caster->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE_REGEN, m_spellInfo))
{
- gcd = int32(float(gcd) * m_caster->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN));
+ gcd = int32(float(gcd) * m_caster->m_unitData->ModHasteRegen);
RoundToInterval<int32>(gcd, MIN_GCD, MAX_GCD);
}
}
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 068e0ab18e1..df7f743a17f 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1419,7 +1419,7 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype, uint8 context /*= 0*/, s
// set the "Crafted by ..." property of the item
if (pItem->GetTemplate()->GetClass() != ITEM_CLASS_CONSUMABLE && pItem->GetTemplate()->GetClass() != ITEM_CLASS_QUEST && newitemid != 6265 && newitemid != 6948)
- pItem->SetGuidValue(ITEM_FIELD_CREATOR, player->GetGUID());
+ pItem->SetCreator(player->GetGUID());
// send info to the client
player->SendNewItem(pItem, num_to_add, true, bgType == 0);
@@ -1799,7 +1799,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
SendLoot(guid, LOOT_SKINNING);
else if (itemTarget)
{
- itemTarget->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED);
+ itemTarget->AddItemFlag(ITEM_FIELD_FLAG_UNLOCKED);
itemTarget->SetState(ITEM_CHANGED, itemTarget->GetOwner());
}
@@ -1858,9 +1858,9 @@ void Spell::EffectSummonChangeItem(SpellEffIndex /*effIndex*/)
if (m_CastItem->GetEnchantmentId(EnchantmentSlot(j)))
pNewItem->SetEnchantment(EnchantmentSlot(j), m_CastItem->GetEnchantmentId(EnchantmentSlot(j)), m_CastItem->GetEnchantmentDuration(EnchantmentSlot(j)), m_CastItem->GetEnchantmentCharges(EnchantmentSlot(j)));
- if (m_CastItem->GetUInt32Value(ITEM_FIELD_DURABILITY) < m_CastItem->GetUInt32Value(ITEM_FIELD_MAXDURABILITY))
+ if (*m_CastItem->m_itemData->Durability < *m_CastItem->m_itemData->MaxDurability)
{
- double lossPercent = 1 - m_CastItem->GetUInt32Value(ITEM_FIELD_DURABILITY) / double(m_CastItem->GetUInt32Value(ITEM_FIELD_MAXDURABILITY));
+ double lossPercent = 1 - *m_CastItem->m_itemData->Durability / double(m_CastItem->m_itemData->MaxDurability);
player->DurabilityLoss(pNewItem, lossPercent);
}
@@ -2062,9 +2062,10 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
return;
summon->SelectLevel(); // some summoned creaters have different from 1 DB data for level/hp
- summon->SetUInt64Value(UNIT_NPC_FLAGS, summon->GetCreatureTemplate()->npcflag);
+ summon->SetNpcFlags(NPCFlags(summon->GetCreatureTemplate()->npcflag & 0xFFFFFFFF));
+ summon->SetNpcFlags2(NPCFlags2(summon->GetCreatureTemplate()->npcflag >> 32));
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ summon->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
summon->AI()->EnterEvadeMode();
break;
@@ -2092,7 +2093,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
{
summon->SetOwnerGUID(m_originalCaster->GetGUID());
summon->setFaction(m_originalCaster->getFaction());
- summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
+ summon->SetCreatedBySpell(m_spellInfo->Id);
}
ExecuteLogEffectSummonObject(effIndex, summon);
@@ -2654,13 +2655,13 @@ void Spell::EffectTameCreature(SpellEffIndex /*effIndex*/)
uint8 level = (creatureTarget->GetLevelForTarget(m_caster) < (m_caster->GetLevelForTarget(creatureTarget) - 5)) ? (m_caster->GetLevelForTarget(creatureTarget) - 5) : creatureTarget->GetLevelForTarget(m_caster);
// prepare visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1);
+ pet->SetLevel(level - 1);
// add to world
pet->GetMap()->AddToMap(pet->ToCreature());
// visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, level);
+ pet->SetLevel(level);
// caster have pet now
m_caster->SetMinion(pet, true);
@@ -2744,7 +2745,7 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex)
pet->SetReactState(REACT_DEFENSIVE);
}
- pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
+ pet->SetCreatedBySpell(m_spellInfo->Id);
// generate new name for summon pet
std::string new_name=sObjectMgr->GeneratePetName(petentry);
@@ -3654,8 +3655,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
PhasingHandler::InheritPhaseShift(go, m_caster);
- go->SetUInt32Value(GAMEOBJECT_FACTION, m_caster->getFaction());
- go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()+1);
+ go->SetFaction(m_caster->getFaction());
+ go->SetLevel(m_caster->getLevel()+1);
int32 duration = m_spellInfo->CalcDuration(m_caster);
go->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0);
go->SetSpellId(m_spellInfo->Id);
@@ -3693,8 +3694,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
duel2->isMounted = (GetSpellInfo()->Id == 62875); // Mounted Duel
target->duel = duel2;
- caster->SetGuidValue(PLAYER_DUEL_ARBITER, go->GetGUID());
- target->SetGuidValue(PLAYER_DUEL_ARBITER, go->GetGUID());
+ caster->SetDuelArbiter(go->GetGUID());
+ target->SetDuelArbiter(go->GetGUID());
sScriptMgr->OnPlayerDuelRequest(target, caster);
}
@@ -3984,7 +3985,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex)
PhasingHandler::InheritPhaseShift(go, m_caster);
- //go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel());
+ //go->SetLevel(m_caster->getLevel());
int32 duration = m_spellInfo->CalcDuration(m_caster);
go->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0);
go->SetSpellId(m_spellInfo->Id);
@@ -4186,8 +4187,8 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/)
uint32 skill = creature->GetCreatureTemplate()->GetRequiredLootSkill();
m_caster->ToPlayer()->SendLoot(creature->GetGUID(), LOOT_SKINNING);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
- creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_SKINNABLE);
+ creature->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
if (skill == SKILL_SKINNING)
{
@@ -4509,8 +4510,8 @@ void Spell::EffectResurrectPet(SpellEffIndex /*effIndex*/)
pet->Relocate(x, y, z, player->GetOrientation()); // This is needed so SaveStayPosition() will get the proper coords.
}
- pet->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
- pet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ pet->SetDynamicFlags(UNIT_DYNFLAG_NONE);
+ pet->RemoveUnitFlag(UNIT_FLAG_SKINNABLE);
pet->setDeathState(ALIVE);
pet->ClearUnitState(uint32(UNIT_STATE_ALL_STATE));
pet->SetHealth(pet->CountPctFromMaxHealth(damage));
@@ -4546,7 +4547,7 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/)
Creature* totem = m_caster->GetMap()->GetCreature(m_caster->m_SummonSlot[slot]);
if (totem && totem->IsTotem())
{
- uint32 spell_id = totem->GetUInt32Value(UNIT_CREATED_BY_SPELL);
+ uint32 spell_id = totem->m_unitData->CreatedBySpell;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
if (spellInfo)
{
@@ -4702,7 +4703,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
go->SetFaction(m_caster->getFaction());
ObjectGuid bobberGuid = go->GetGUID();
// client requires fishing bobber guid in channel object slot 0 to be usable
- m_caster->SetDynamicStructuredValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS, 0, &bobberGuid);
+ m_caster->SetChannelObject(0, bobberGuid);
m_caster->AddGameObject(go); // will removed at spell cancel
// end time of range when possible catch fish (FISHING_BOBBER_READY_TIME..GetDuration(m_spellInfo))
@@ -4741,7 +4742,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
go->SetOwnerGUID(m_caster->GetGUID());
- //go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel());
+ //go->SetLevel(m_caster->getLevel());
go->SetSpellId(m_spellInfo->Id);
ExecuteLogEffectSummonObject(effIndex, go);
@@ -4757,7 +4758,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
PhasingHandler::InheritPhaseShift(linkedTrap, m_caster);
linkedTrap->SetRespawnTime(duration > 0 ? duration / IN_MILLISECONDS : 0);
- //linkedTrap->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel());
+ //linkedTrap->SetLevel(m_caster->getLevel());
linkedTrap->SetSpellId(m_spellInfo->Id);
linkedTrap->SetOwnerGUID(m_caster->GetGUID());
@@ -5146,7 +5147,7 @@ void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/)
return;
FactionTemplateEntry const* casterFaction = caster->GetFactionTemplateEntry();
- FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetUInt32Value(GAMEOBJECT_FACTION));
+ FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetFaction());
// Do not allow to damage GO's of friendly factions (ie: Wintergrasp Walls/Ulduar Storm Beacons)
if (!targetFaction || (casterFaction && targetFaction && !casterFaction->IsFriendlyTo(targetFaction)))
gameObjTarget->ModifyHealth(-damage, caster, GetSpellInfo()->Id);
@@ -5224,10 +5225,11 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
if (summon->GetEntry() == 27893)
{
- if (uint32 weapon = m_caster->GetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (EQUIPMENT_SLOT_MAINHAND * 2)))
+ UF::VisibleItem const& weapon = m_caster->ToPlayer()->m_playerData->VisibleItems[EQUIPMENT_SLOT_MAINHAND];
+ if (weapon.ItemID)
{
summon->SetDisplayId(11686); // modelid2
- summon->SetVirtualItem(0, weapon);
+ summon->SetVirtualItem(0, weapon.ItemID, weapon.ItemAppearanceModID, weapon.ItemVisual);
}
else
summon->SetDisplayId(1126); // modelid1
@@ -5248,7 +5250,7 @@ void Spell::EffectRenamePet(SpellEffIndex /*effIndex*/)
!unitTarget->IsPet() || ((Pet*)unitTarget)->getPetType() != HUNTER_PET)
return;
- unitTarget->SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED);
+ unitTarget->AddPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED);
}
void Spell::EffectPlayMusic(SpellEffIndex /*effIndex*/)
@@ -5645,7 +5647,7 @@ void Spell::EffectEnableBattlePets(SpellEffIndex /*effIndex*/)
return;
Player* plr = unitTarget->ToPlayer();
- plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_PET_BATTLES_UNLOCKED);
+ plr->AddPlayerFlag(PLAYER_FLAGS_PET_BATTLES_UNLOCKED);
plr->GetSession()->GetBattlePetMgr()->UnlockSlot(0);
}
@@ -5671,7 +5673,7 @@ void Spell::EffectUncageBattlePet(SpellEffIndex /*effIndex*/)
Player* plr = m_caster->ToPlayer();
// are we allowed to learn battle pets without it?
- /*if (plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_PET_BATTLES_UNLOCKED))
+ /*if (plr->HasPlayerFlag(PLAYER_FLAGS_PET_BATTLES_UNLOCKED))
return; // send some error*/
uint32 speciesId = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID);
@@ -5738,7 +5740,7 @@ void Spell::EffectApplyEnchantIllusion(SpellEffIndex /*effIndex*/)
itemTarget->SetState(ITEM_CHANGED, player);
itemTarget->SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, effectInfo->MiscValue);
if (itemTarget->IsEquipped())
- player->SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (itemTarget->GetSlot() * 2), 1, itemTarget->GetVisibleItemVisual(player));
+ player->SetVisibleItemSlot(itemTarget->GetSlot(), itemTarget);
player->RemoveTradeableItem(itemTarget);
itemTarget->ClearSoulboundTradeable(player);
diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp
index 968cc447413..989223c8b22 100644
--- a/src/server/game/Spells/SpellHistory.cpp
+++ b/src/server/game/Spells/SpellHistory.cpp
@@ -415,7 +415,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel
// shoot spells used equipped item cooldown values already assigned in SetBaseAttackTime(RANGED_ATTACK)
// prevent 0 cooldowns set by another way
if (cooldown <= 0 && categoryCooldown <= 0 && (categoryId == 76 || (spellInfo->IsAutoRepeatRangedSpell() && spellInfo->Id != 75)))
- cooldown = _owner->GetUInt32Value(UNIT_FIELD_RANGEDATTACKTIME);
+ cooldown = _owner->m_unitData->RangedAttackRoundBaseTime;
// Now we have cooldown data (if found any), time to apply mods
if (Player* modOwner = _owner->GetSpellModOwner())
@@ -429,14 +429,14 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel
if (_owner->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE, spellInfo))
{
- cooldown = int32(cooldown * _owner->GetFloatValue(UNIT_MOD_CAST_HASTE));
- categoryCooldown = int32(categoryCooldown * _owner->GetFloatValue(UNIT_MOD_CAST_HASTE));
+ cooldown = int32(cooldown * _owner->m_unitData->ModSpellHaste);
+ categoryCooldown = int32(categoryCooldown * _owner->m_unitData->ModSpellHaste);
}
if (_owner->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_COOLDOWN_BY_HASTE_REGEN, spellInfo))
{
- cooldown = int32(cooldown * _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN));
- categoryCooldown = int32(categoryCooldown * _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN));
+ cooldown = int32(cooldown * _owner->m_unitData->ModHasteRegen);
+ categoryCooldown = int32(categoryCooldown * _owner->m_unitData->ModHasteRegen);
}
if (int32 cooldownMod = _owner->GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN))
@@ -830,10 +830,10 @@ int32 SpellHistory::GetChargeRecoveryTime(uint32 chargeCategoryId) const
recoveryTimeF *= _owner->GetTotalAuraMultiplierByMiscValue(SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER, chargeCategoryId);
if (_owner->HasAuraType(SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE))
- recoveryTimeF *= _owner->GetFloatValue(UNIT_MOD_CAST_HASTE);
+ recoveryTimeF *= _owner->m_unitData->ModSpellHaste;
if (_owner->HasAuraType(SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE_REGEN))
- recoveryTimeF *= _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN);
+ recoveryTimeF *= _owner->m_unitData->ModHasteRegen;
return int32(std::floor(recoveryTimeF));
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 8cab2192fff..369fc1731df 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -3892,10 +3892,10 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc
inline float CalcPPMHasteMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster)
{
- float haste = caster->GetFloatValue(UNIT_FIELD_MOD_HASTE);
- float rangedHaste = caster->GetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE);
- float spellHaste = caster->GetFloatValue(UNIT_MOD_CAST_HASTE);
- float regenHaste = caster->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN);
+ float haste = caster->m_unitData->ModHaste;
+ float rangedHaste = caster->m_unitData->ModRangedHaste;
+ float spellHaste = caster->m_unitData->ModSpellHaste;
+ float regenHaste = caster->m_unitData->ModHasteRegen;
switch (mod->Param)
{
@@ -3918,12 +3918,13 @@ inline float CalcPPMHasteMod(SpellProcsPerMinuteModEntry const* mod, Unit* caste
inline float CalcPPMCritMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster)
{
- if (caster->GetTypeId() != TYPEID_PLAYER)
+ Player const* player = caster->ToPlayer();
+ if (!player)
return 0.0f;
- float crit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE);
- float rangedCrit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE);
- float spellCrit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1);
+ float crit = player->m_activePlayerData->CritPercentage;
+ float rangedCrit = player->m_activePlayerData->RangedCritPercentage;
+ float spellCrit = player->m_activePlayerData->SpellCritPercentage;
switch (mod->Param)
{
@@ -3984,7 +3985,7 @@ float SpellInfo::CalcProcPPM(Unit* caster, int32 itemLevel) const
case SPELL_PPM_MOD_SPEC:
{
if (Player* plrCaster = caster->ToPlayer())
- if (plrCaster->GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == mod->Param)
+ if (plrCaster->GetPrimarySpecialization() == uint32(mod->Param))
ppm *= 1.0f + mod->Coeff;
break;
}
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index 2c9bde87d2c..9e3c199a638 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -235,7 +235,7 @@ public:
{
player->GiveLevel(newLevel);
player->InitTalentForLevel();
- player->SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, 0);
+ player->SetXP(0);
if (handler->needReportToTarget(player))
{
@@ -281,7 +281,7 @@ public:
if (name.empty())
continue;
- char const* activeStr = target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID
+ char const* activeStr = *target->m_playerData->PlayerTitle == titleInfo->MaskID
? handler->GetTrinityString(LANG_ACTIVE)
: "";
diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp
index 2c67db493c6..ae41ca54537 100644
--- a/src/server/scripts/Commands/cs_cheat.cpp
+++ b/src/server/scripts/Commands/cs_cheat.cpp
@@ -276,9 +276,9 @@ public:
for (uint16 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
{
if (flag != 0)
- handler->GetSession()->GetPlayer()->SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i, 0xFFFFFFFF);
+ handler->GetSession()->GetPlayer()->AddExploredZones(i, 0xFFFFFFFFFFFFFFFF);
else
- handler->GetSession()->GetPlayer()->SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i, 0);
+ handler->GetSession()->GetPlayer()->RemoveExploredZones(i, 0xFFFFFFFFFFFFFFFF);
}
return true;
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 60cf7bda4e7..edd69688e0e 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -77,7 +77,6 @@ public:
};
static std::vector<ChatCommand> debugCommandTable =
{
- { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "" },
{ "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "" },
{ "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "" },
{ "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "" },
@@ -85,19 +84,13 @@ public:
{ "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, true, &HandleDebugBattlegroundCommand, "" },
{ "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "" },
{ "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "" },
- { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "" },
- { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "" },
- { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "" },
{ "play", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY, false, nullptr, "", debugPlayCommandTable },
{ "send", rbac::RBAC_PERM_COMMAND_DEBUG_SEND, false, nullptr, "", debugSendCommandTable },
{ "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "" },
- { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "" },
- { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "" },
{ "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "" },
{ "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "" },
{ "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "" },
{ "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "" },
- { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "" },
{ "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "" },
{ "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "" },
{ "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "" },
@@ -991,64 +984,6 @@ public:
return true;
}
- static bool HandleDebugGetItemValueCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* e = strtok((char*)args, " ");
- char* f = strtok(NULL, " ");
-
- if (!e || !f)
- return false;
-
- ObjectGuid::LowType guid = strtoull(e, nullptr, 10);
- uint32 index = atoul(f);
-
- Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid));
-
- if (!i)
- return false;
-
- if (index >= i->GetValuesCount())
- return false;
-
- uint32 value = i->GetUInt32Value(index);
-
- handler->PSendSysMessage("Item " UI64FMTD ": value at %u is %u", guid, index, value);
-
- return true;
- }
-
- static bool HandleDebugSetItemValueCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* e = strtok((char*)args, " ");
- char* f = strtok(NULL, " ");
- char* g = strtok(NULL, " ");
-
- if (!e || !f || !g)
- return false;
-
- ObjectGuid::LowType guid = strtoull(e, nullptr, 10);
- uint32 index = atoul(f);
- uint32 value = atoul(g);
-
- Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid));
-
- if (!i)
- return false;
-
- if (index >= i->GetValuesCount())
- return false;
-
- i->SetUInt32Value(index, value);
-
- return true;
- }
-
static bool HandleDebugItemExpireCommand(ChatHandler* handler, char const* args)
{
if (!*args)
@@ -1120,211 +1055,6 @@ public:
return true;
}
- static bool HandleDebugSetValueCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* x = strtok((char*)args, " ");
- char* y = strtok(NULL, " ");
- char* z = strtok(NULL, " ");
-
- if (!x || !y)
- return false;
-
- WorldObject* target = handler->getSelectedObject();
- if (!target)
- {
- handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- ObjectGuid guid = target->GetGUID();
-
- uint32 field = atoul(x);
- if (field >= target->GetValuesCount())
- {
- handler->PSendSysMessage(LANG_TOO_BIG_INDEX, field, guid.ToString().c_str(), target->GetValuesCount());
- return false;
- }
-
- bool isInt32 = true;
- if (z)
- isInt32 = atoi(z) != 0;
-
- if (isInt32)
- {
- uint32 value = atoul(y);
- target->SetUInt32Value(field, value);
- handler->PSendSysMessage(LANG_SET_UINT_FIELD, guid.ToString().c_str(), field, value);
- }
- else
- {
- float value = (float)atof(y);
- target->SetFloatValue(field, value);
- handler->PSendSysMessage(LANG_SET_FLOAT_FIELD, guid.ToString().c_str(), field, value);
- }
-
- return true;
- }
-
- static bool HandleDebugGetValueCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* x = strtok((char*)args, " ");
- char* z = strtok(NULL, " ");
-
- if (!x)
- return false;
-
- Unit* target = handler->getSelectedUnit();
- if (!target)
- {
- handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- ObjectGuid guid = target->GetGUID();
-
- uint32 opcode = atoul(x);
- if (opcode >= target->GetValuesCount())
- {
- handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, guid.ToString().c_str(), target->GetValuesCount());
- return false;
- }
-
- bool isInt32 = true;
- if (z)
- isInt32 = atoi(z) != 0;
-
- if (isInt32)
- {
- uint32 value = target->GetUInt32Value(opcode);
- handler->PSendSysMessage(LANG_GET_UINT_FIELD, guid.ToString().c_str(), opcode, value);
- }
- else
- {
- float value = target->GetFloatValue(opcode);
- handler->PSendSysMessage(LANG_GET_FLOAT_FIELD, guid.ToString().c_str(), opcode, value);
- }
-
- return true;
- }
-
- static bool HandleDebugMod32ValueCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* x = strtok((char*)args, " ");
- char* y = strtok(NULL, " ");
-
- if (!x || !y)
- return false;
-
- uint32 opcode = atoul(x);
- int value = atoi(y);
-
- if (opcode >= handler->GetSession()->GetPlayer()->GetValuesCount())
- {
- handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), handler->GetSession()->GetPlayer()->GetValuesCount());
- return false;
- }
-
- uint32 currentValue = handler->GetSession()->GetPlayer()->GetUInt32Value(opcode);
-
- currentValue += value;
- handler->GetSession()->GetPlayer()->SetUInt32Value(opcode, currentValue);
-
- handler->PSendSysMessage(LANG_CHANGE_32BIT_FIELD, opcode, currentValue);
-
- return true;
- }
-
- static bool HandleDebugUpdateCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- uint32 updateIndex;
- uint32 value;
-
- char* index = strtok((char*)args, " ");
-
- Unit* unit = handler->getSelectedUnit();
- if (!unit)
- {
- handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (!index)
- return true;
-
- updateIndex = atoi(index);
- //check updateIndex
- if (unit->GetTypeId() == TYPEID_PLAYER)
- {
- if (updateIndex >= PLAYER_END)
- return true;
- }
- else if (updateIndex >= UNIT_END)
- return true;
-
- char* val = strtok(NULL, " ");
- if (!val)
- {
- value = unit->GetUInt32Value(updateIndex);
-
- handler->PSendSysMessage(LANG_UPDATE, unit->GetGUID().ToString().c_str(), updateIndex, value);
- return true;
- }
-
- value = atoi(val);
-
- handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUID().ToString().c_str(), updateIndex, value);
-
- unit->SetUInt32Value(updateIndex, value);
-
- return true;
- }
-
- static bool HandleDebugSet32BitCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- WorldObject* target = handler->getSelectedObject();
- if (!target)
- {
- handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- char* x = strtok((char*)args, " ");
- char* y = strtok(NULL, " ");
-
- if (!x || !y)
- return false;
-
- uint32 opcode = atoul(x);
- uint32 val = atoul(y);
- if (val > 32) //uint32 = 32 bits
- return false;
-
- uint32 value = val ? 1 << (val - 1) : 0;
- target->SetUInt32Value(opcode, value);
-
- handler->PSendSysMessage(LANG_SET_32BIT_FIELD, opcode, value);
- return true;
- }
-
static bool HandleDebugMoveflagsCommand(ChatHandler* handler, char const* args)
{
Unit* target = handler->getSelectedUnit();
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index b60b957cc17..3293c6cb9d7 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -674,16 +674,31 @@ public:
int32 objectState = atoi(state);
- if (objectType < 4)
- object->SetByteValue(GAMEOBJECT_BYTES_1, uint8(objectType), uint8(objectState));
- else if (objectType == 4)
- object->SendCustomAnim(objectState);
- else if (objectType == 5)
- {
- if (objectState < 0 || objectState > GO_DESTRUCTIBLE_REBUILDING)
- return false;
-
- object->SetDestructibleState(GameObjectDestructibleState(objectState));
+ switch (objectType)
+ {
+ case 0:
+ object->SetGoState(GOState(objectState));
+ break;
+ case 1:
+ object->SetGoType(GameobjectTypes(objectState));
+ break;
+ case 2:
+ object->SetGoArtKit(objectState);
+ break;
+ case 3:
+ object->SetGoAnimProgress(objectState);
+ break;
+ case 4:
+ object->SendCustomAnim(objectState);
+ break;
+ case 5:
+ if (objectState < 0 || objectState > GO_DESTRUCTIBLE_REBUILDING)
+ return false;
+
+ object->SetDestructibleState(GameObjectDestructibleState(objectState));
+ break;
+ default:
+ break;
}
handler->PSendSysMessage("Set gobject type %d state %d", objectType, objectState);
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 0f89fa23ded..c9a8a70127b 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -1174,7 +1174,7 @@ public:
char const* knownStr = target && target->HasTitle(titleInfo) ? handler->GetTrinityString(LANG_KNOWN) : "";
- char const* activeStr = target && target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID
+ char const* activeStr = target && *target->m_playerData->PlayerTitle == titleInfo->MaskID
? handler->GetTrinityString(LANG_ACTIVE)
: "";
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 56b7071a8a8..3a87ac318a0 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -156,7 +156,7 @@ public:
{
if (!*args)
{
- if (handler->GetSession()->GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER))
+ if (handler->GetSession()->GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_DEVELOPER))
handler->GetSession()->SendNotification(LANG_DEV_ON);
else
handler->GetSession()->SendNotification(LANG_DEV_OFF);
@@ -167,14 +167,14 @@ public:
if (argstr == "on")
{
- handler->GetSession()->GetPlayer()->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER);
+ handler->GetSession()->GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_DEVELOPER);
handler->GetSession()->SendNotification(LANG_DEV_ON);
return true;
}
if (argstr == "off")
{
- handler->GetSession()->GetPlayer()->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER);
+ handler->GetSession()->GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_DEVELOPER);
handler->GetSession()->SendNotification(LANG_DEV_OFF);
return true;
}
@@ -1195,7 +1195,7 @@ public:
return false;
}
- int32 offset = area->AreaBit / 32;
+ uint32 offset = area->AreaBit / 64;
if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
{
handler->SendSysMessage(LANG_BAD_VALUE);
@@ -1203,9 +1203,8 @@ public:
return false;
}
- uint32 val = uint32((1 << (area->AreaBit % 32)));
- uint32 currFields = playerTarget->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset);
- playerTarget->SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, uint32((currFields | val)));
+ uint64 val = UI64LIT(1) << (area->AreaBit % 64);
+ playerTarget->AddExploredZones(offset, val);
handler->SendSysMessage(LANG_EXPLORE_AREA);
return true;
@@ -1239,7 +1238,7 @@ public:
return false;
}
- int32 offset = area->AreaBit / 32;
+ uint32 offset = area->AreaBit / 64;
if (offset >= PLAYER_EXPLORED_ZONES_SIZE)
{
handler->SendSysMessage(LANG_BAD_VALUE);
@@ -1247,9 +1246,8 @@ public:
return false;
}
- uint32 val = uint32((1 << (area->AreaBit % 32)));
- uint32 currFields = playerTarget->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset);
- playerTarget->SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, uint32((currFields ^ val)));
+ uint64 val = UI64LIT(1) << (area->AreaBit % 64);
+ playerTarget->RemoveExploredZones(offset, val);
handler->SendSysMessage(LANG_UNEXPLORE_AREA);
return true;
@@ -1712,7 +1710,7 @@ public:
mapId = target->GetMapId();
areaId = target->GetAreaId();
alive = target->IsAlive() ? handler->GetTrinityString(LANG_YES) : handler->GetTrinityString(LANG_NO);
- gender = target->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
+ gender = target->m_playerData->NativeSex;
}
// get additional information from DB
else
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index b444c806f2f..0b113206f48 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -54,7 +54,6 @@ public:
};
static std::vector<ChatCommand> modifyCommandTable =
{
- { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "" },
{ "currency", rbac::RBAC_PERM_COMMAND_MODIFY_CURRENCY, false, &HandleModifyCurrencyCommand, "" },
{ "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "" },
{ "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "" },
@@ -220,9 +219,10 @@ public:
if (!pfactionid)
{
uint32 factionid = target->getFaction();
- uint32 flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
- uint64 npcflag = target->GetUInt64Value(UNIT_NPC_FLAGS);
- uint32 dyflag = target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS);
+ uint32 flag = target->m_unitData->Flags;
+ uint64 npcflag;
+ memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64));
+ uint32 dyflag = target->m_objectData->DynamicFlags;
handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag);
return true;
}
@@ -232,7 +232,7 @@ public:
char *pflag = strtok(NULL, " ");
if (!pflag)
- flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+ flag = target->m_unitData->Flags;
else
flag = atoul(pflag);
@@ -240,7 +240,7 @@ public:
uint64 npcflag;
if (!pnpcflag)
- npcflag = target->GetUInt64Value(UNIT_NPC_FLAGS);
+ memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64));
else
npcflag = atoull(pnpcflag);
@@ -248,7 +248,7 @@ public:
uint32 dyflag;
if (!pdyflag)
- dyflag = target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS);
+ dyflag = target->m_objectData->DynamicFlags;
else
dyflag = atoul(pdyflag);
@@ -262,9 +262,10 @@ public:
handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag);
target->setFaction(factionid);
- target->SetUInt32Value(UNIT_FIELD_FLAGS, flag);
- target->SetUInt64Value(UNIT_NPC_FLAGS, npcflag);
- target->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dyflag);
+ target->SetUnitFlags(UnitFlags(flag));
+ target->SetNpcFlags(NPCFlags(npcflag & 0xFFFFFFFF));
+ target->SetNpcFlags2(NPCFlags2(npcflag >> 32));
+ target->SetDynamicFlags(dyflag);
return true;
}
@@ -494,7 +495,7 @@ public:
{
NotifyModification(handler, target, LANG_YOU_CHANGE_SIZE, LANG_YOURS_SIZE_CHANGED, Scale);
if (Creature* creatureTarget = target->ToCreature())
- creatureTarget->SetFloatValue(UNIT_FIELD_DISPLAY_SCALE, Scale);
+ creatureTarget->SetDisplayId(creatureTarget->GetDisplayId(), Scale);
else
target->SetObjectScale(Scale);
return true;
@@ -612,61 +613,6 @@ public:
return true;
}
- //Edit Unit field
- static bool HandleModifyBitCommand(ChatHandler* handler, const char* args)
- {
- if (!*args)
- return false;
-
- Unit* target = handler->getSelectedUnit();
- if (!target)
- {
- handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- // check online security
- if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), ObjectGuid::Empty))
- return false;
-
- char* pField = strtok((char*)args, " ");
- if (!pField)
- return false;
-
- char* pBit = strtok(NULL, " ");
- if (!pBit)
- return false;
-
- uint16 field = atoi(pField);
- uint32 bit = atoi(pBit);
-
- if (field < OBJECT_END || field >= target->GetValuesCount())
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
- if (bit < 1 || bit > 32)
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (target->HasFlag(field, (1<<(bit-1))))
- {
- target->RemoveFlag(field, (1<<(bit-1)));
- handler->PSendSysMessage(LANG_REMOVE_BIT, bit, field);
- }
- else
- {
- target->SetFlag(field, (1<<(bit-1)));
- handler->PSendSysMessage(LANG_SET_BIT, bit, field);
- }
- return true;
- }
-
static bool HandleModifyHonorCommand(ChatHandler* handler, const char* args)
{
if (!*args)
@@ -889,7 +835,7 @@ public:
return false;
uint32 anim_id = atoi((char*)args);
- handler->GetSession()->GetPlayer()->SetUInt32Value(UNIT_NPC_EMOTESTATE, anim_id);
+ handler->GetSession()->GetPlayer()->SetEmoteState(Emote(anim_id));
return true;
}
@@ -939,8 +885,8 @@ public:
}
// Set gender
- target->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender);
- target->SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, gender);
+ target->SetGender(gender);
+ target->SetNativeSex(gender);
// Change display ID
target->InitDisplayIds();
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 49d7b18b393..129053e2f88 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -642,7 +642,10 @@ public:
return false;
}
- creature->SetUInt64Value(UNIT_NPC_FLAGS, npcFlags);
+ uint32 raw[2];
+ memcpy(raw, &npcFlags, sizeof(raw));
+ creature->SetNpcFlags(NPCFlags(raw[0]));
+ creature->SetNpcFlags2(NPCFlags2(raw[1]));
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_NPCFLAG);
@@ -723,7 +726,8 @@ public:
CreatureTemplate const* cInfo = target->GetCreatureTemplate();
uint32 faction = target->getFaction();
- uint64 npcflags = target->GetUInt64Value(UNIT_NPC_FLAGS);
+ uint64 npcflags;
+ memcpy(&npcflags, target->m_unitData->NpcFlags.begin(), sizeof(npcflags));
uint32 mechanicImmuneMask = cInfo->MechanicImmuneMask;
uint32 displayid = target->GetDisplayId();
uint32 nativeid = target->GetNativeDisplayId();
@@ -741,22 +745,22 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), std::to_string(target->GetMaxHealth()).c_str(), std::to_string(target->GetHealth()).c_str());
handler->PSendSysMessage(LANG_NPCINFO_INHABIT_TYPE, cInfo->InhabitType);
- handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS));
+ handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, *target->m_unitData->Flags);
for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i)
- if (target->GetUInt32Value(UNIT_FIELD_FLAGS) & unitFlags[i].Value)
+ if (target->HasUnitFlag(unitFlags[i].Value))
handler->PSendSysMessage("%s (0x%X)", unitFlags[i].Name, unitFlags[i].Value);
- handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_2, target->GetUInt32Value(UNIT_FIELD_FLAGS_2));
+ handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_2, *target->m_unitData->Flags2);
for (uint8 i = 0; i < MAX_UNIT_FLAGS_2; ++i)
- if (target->GetUInt32Value(UNIT_FIELD_FLAGS_2) & unitFlags2[i].Value)
+ if (target->HasUnitFlag2(unitFlags2[i].Value))
handler->PSendSysMessage("%s (0x%X)", unitFlags2[i].Name, unitFlags2[i].Value);
- handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_3, target->GetUInt32Value(UNIT_FIELD_FLAGS_3));
+ handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_3, *target->m_unitData->Flags3);
for (uint8 i = 0; i < MAX_UNIT_FLAGS_3; ++i)
- if (target->GetUInt32Value(UNIT_FIELD_FLAGS_3) & unitFlags3[i].Value)
+ if (target->HasUnitFlag3(unitFlags3[i].Value))
handler->PSendSysMessage("%s (0x%X)", unitFlags3[i].Name, unitFlags3[i].Value);
- handler->PSendSysMessage(LANG_NPCINFO_DYNAMIC_FLAGS, target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS));
+ handler->PSendSysMessage(LANG_NPCINFO_DYNAMIC_FLAGS, target->GetDynamicFlags());
handler->PSendSysMessage(LANG_COMMAND_RAWPAWNTIMES, defRespawnDelayStr.c_str(), curRespawnDelayStr.c_str());
handler->PSendSysMessage(LANG_NPCINFO_LOOT, cInfo->lootid, cInfo->pickpocketLootId, cInfo->SkinLootId);
handler->PSendSysMessage(LANG_NPCINFO_DUNGEON_ID, target->GetInstanceId());
@@ -923,7 +927,7 @@ public:
return false;
}
- target->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote);
+ target->SetEmoteState(Emote(emote));
return true;
}
@@ -1463,13 +1467,13 @@ public:
uint8 level = (creatureTarget->getLevel() < (player->getLevel() - 5)) ? (player->getLevel() - 5) : creatureTarget->getLevel();
// prepare visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1);
+ pet->SetLevel(level - 1);
// add to world
pet->GetMap()->AddToMap(pet->ToCreature());
// visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, level);
+ pet->SetLevel(level);
// caster have pet now
player->SetMinion(pet, true);
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp
index 565998c4fac..37484bba405 100644
--- a/src/server/scripts/Commands/cs_pet.cpp
+++ b/src/server/scripts/Commands/cs_pet.cpp
@@ -102,8 +102,8 @@ public:
creatureTarget->RemoveCorpse();
creatureTarget->SetHealth(0); // just for nice GM-mode view
- pet->SetGuidValue(UNIT_FIELD_CREATEDBY, player->GetGUID());
- pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
+ pet->SetCreatorGUID(player->GetGUID());
+ pet->setFaction(player->getFaction());
if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
{
@@ -114,7 +114,7 @@ public:
}
// prepare visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
+ pet->SetLevel(creatureTarget->getLevel() - 1);
pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// this enables pet details window (Shift+P)
@@ -124,7 +124,7 @@ public:
pet->GetMap()->AddToMap(pet->ToCreature());
// visual effect for levelup
- pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
+ pet->SetLevel(creatureTarget->getLevel());
player->SetMinion(pet, true);
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp
index 5162a186add..f8ae4589612 100644
--- a/src/server/scripts/Commands/cs_reset.cpp
+++ b/src/server/scripts/Commands/cs_reset.cpp
@@ -83,8 +83,7 @@ public:
if (!handler->extractPlayerTarget((char*)args, &target))
return false;
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0);
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0);
+ target->ResetHonorStats();
target->UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL);
return true;
@@ -106,18 +105,18 @@ public:
player->SetShapeshiftForm(FORM_NONE);
player->setFactionForRace(player->getRace());
- player->SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powerType);
+ player->SetPowerType(Powers(powerType));
// reset only if player not in some form;
if (player->GetShapeshiftForm() == FORM_NONE)
player->InitDisplayIds();
- player->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP);
+ player->SetPvpFlags(UNIT_BYTE2_FLAG_PVP);
- player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ player->SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE);
//-1 is default value
- player->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1));
+ player->SetWatchedFactionIndex(-1);
return true;
}
@@ -143,7 +142,7 @@ public:
target->InitStatsForLevel(true);
target->InitTaxiNodesForLevel();
target->InitTalentForLevel();
- target->SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, 0);
+ target->SetXP(0);
target->_ApplyAllLevelScaleItemMods(true);
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 1b315cc4bf1..197c31bd51c 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -93,7 +93,7 @@ public:
std::string tNameLink = handler->GetNameLink(target);
target->SetTitle(titleInfo); // to be sure that title now known
- target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->MaskID);
+ target->SetChosenTitle(titleInfo->MaskID);
handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id,
(target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()],
@@ -195,9 +195,9 @@ public:
handler->PSendSysMessage(LANG_TITLE_REMOVE_RES, id, titleNameStr.c_str(), tNameLink.c_str());
- if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE)))
+ if (!target->HasTitle(target->m_playerData->PlayerTitle))
{
- target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);
+ target->SetChosenTitle(0);
handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, tNameLink.c_str());
}
@@ -234,12 +234,12 @@ public:
titles &= ~titles2; // remove non-existing titles
- target->SetUInt64Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES, titles);
+ target->SetKnownTitles(0, titles);
handler->SendSysMessage(LANG_DONE);
- if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE)))
+ if (!target->HasTitle(target->m_playerData->PlayerTitle))
{
- target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);
+ target->SetChosenTitle(0);
handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, handler->GetNameLink(target).c_str());
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index c932ad0d666..7f284220ecf 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -168,7 +168,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
/// @todo move them to center
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
index 6bbbc6583e8..38699c2865a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
@@ -142,7 +142,7 @@ public:
void Reset() override
{
_Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->setFaction(COREN_DIREBREW_FACTION_FRIEND);
events.SetPhase(PHASE_ALL);
@@ -165,7 +165,7 @@ public:
if (action == ACTION_START_FIGHT)
{
events.SetPhase(PHASE_ONE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->setFaction(COREN_DIREBREW_FACTION_HOSTILE);
me->SetInCombatWithZone();
@@ -398,7 +398,7 @@ public:
Talk(SAY_ANTAGONIST_2);
break;
case ACTION_ANTAGONIST_HOSTILE:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->setFaction(COREN_DIREBREW_FACTION_HOSTILE);
me->SetInCombatWithZone();
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
index 7e4e4d63893..eab17b1ea88 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
@@ -136,7 +136,7 @@ class boss_doomrel : public CreatureScript
CloseGossipMenuFor(player);
//start event here
creature->setFaction(FACTION_HOSTILE);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
creature->AI()->AttackStart(player);
InstanceScript* instance = creature->GetInstanceScript();
if (instance)
@@ -174,12 +174,12 @@ class boss_doomrel : public CreatureScript
me->setFaction(FACTION_FRIEND);
// was set before event start, so set again
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (_instance->GetData(DATA_GHOSTKILL) >= 7)
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
else
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->SetNpcFlags(UNIT_NPC_FLAG_GOSSIP);
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
index f7544d47daa..cefcd51f333 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
@@ -356,7 +356,7 @@ public:
if (Creature* boss = instance->GetCreature(TombBossGUIDs[TombEventCounter]))
{
boss->setFaction(FACTION_HOSTILE);
- boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ boss->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (Unit* target = boss->SelectNearestTarget(500))
boss->AI()->AttackStart(target);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 3ad71bb5b6a..663f3ff84fb 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -82,7 +82,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
events.Reset();
// Apply auras on spawn and reset
// DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible
@@ -160,7 +160,7 @@ public:
me->CastSpell(me, SPELL_EMBERSEER_FULL_STRENGTH);
Talk(EMOTE_FREE_OF_BONDS);
Talk(YELL_FREE_OF_BONDS);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
events.ScheduleEvent(EVENT_ENTER_COMBAT, 2000);
}
}
@@ -343,7 +343,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
Emberseer->AI()->SetData(1, 3);
}
@@ -357,7 +357,7 @@ public:
{
if (data == 1 && value == 1)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
_events.CancelEvent(EVENT_ENCAGED_EMBERSEER);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
index c6929446e1b..42fb5170252 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -192,7 +192,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
DoZoneInCombat();
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index f00edd0a9a7..b6541ec6328 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -190,7 +190,7 @@ public:
_Reset();
me->SetVisible(true);
- me->SetUInt32Value(UNIT_NPC_FLAGS, 1);
+ me->SetNpcFlags(UNIT_NPC_FLAG_GOSSIP);
me->setFaction(35);
me->SetStandState(UNIT_STAND_STATE_SIT_HIGH_CHAIR);
me->RemoveAura(SPELL_NEFARIANS_BARRIER);
@@ -209,10 +209,10 @@ public:
Talk(SAY_GAMESBEGIN_2);
me->setFaction(103);
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
DoCast(me, SPELL_NEFARIANS_BARRIER);
me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
AttackStart(target);
events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(3000, 10000));
events.ScheduleEvent(EVENT_FEAR, urand(10000, 20000));
@@ -225,7 +225,7 @@ public:
if (summon->GetEntry() != NPC_NEFARIAN)
{
summon->UpdateEntry(NPC_BONE_CONSTRUCT);
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ summon->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
summon->SetReactState(REACT_PASSIVE);
summon->SetStandState(UNIT_STAND_STATE_DEAD);
}
@@ -575,7 +575,7 @@ public:
{
(*itr)->Respawn();
(*itr)->SetInCombatWithZone();
- (*itr)->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ (*itr)->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
(*itr)->SetReactState(REACT_AGGRESSIVE);
(*itr)->SetStandState(UNIT_STAND_STATE_STAND);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
index 89f3f7673bc..57dae09267c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
@@ -75,9 +75,9 @@ public:
boss_vaelAI(Creature* creature) : BossAI(creature, DATA_VAELASTRAZ_THE_CORRUPT)
{
Initialize();
- creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->setFaction(35);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void Initialize()
@@ -114,7 +114,7 @@ public:
void BeginSpeech(Unit* target)
{
PlayerGUID = target->GetGUID();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
events.ScheduleEvent(EVENT_SPEECH_1, 1000);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
index 4a534dbe662..1607588cff2 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
@@ -166,7 +166,7 @@ class boss_majordomo : public CreatureScript
{
case EVENT_OUTRO_1:
me->NearTeleportTo(RagnarosTelePos.GetPositionX(), RagnarosTelePos.GetPositionY(), RagnarosTelePos.GetPositionZ(), RagnarosTelePos.GetOrientation());
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
break;
case EVENT_OUTRO_2:
instance->instance->SummonCreature(NPC_RAGNAROS, RagnarosSummonPos);
@@ -185,7 +185,7 @@ class boss_majordomo : public CreatureScript
{
if (action == ACTION_START_RAGNAROS)
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_SUMMON_MAJ);
events.ScheduleEvent(EVENT_OUTRO_2, 8000);
events.ScheduleEvent(EVENT_OUTRO_3, 24000);
@@ -193,7 +193,7 @@ class boss_majordomo : public CreatureScript
else if (action == ACTION_START_RAGNAROS_ALT)
{
me->setFaction(FACTION_FRIENDLY);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index 9522c40338c..515e1d26315 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -88,7 +88,7 @@ class boss_ragnaros : public CreatureScript
Initialize();
_introState = 0;
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
SetCombatMovement(false);
}
@@ -104,7 +104,7 @@ class boss_ragnaros : public CreatureScript
{
BossAI::Reset();
Initialize();
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
}
void EnterCombat(Unit* victim) override
@@ -162,7 +162,7 @@ class boss_ragnaros : public CreatureScript
break;
case EVENT_INTRO_5:
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
_introState = 2;
break;
default:
@@ -177,8 +177,8 @@ class boss_ragnaros : public CreatureScript
//Become unbanished again
me->SetReactState(REACT_AGGRESSIVE);
me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
AttackStart(target);
@@ -255,8 +255,8 @@ class boss_ragnaros : public CreatureScript
//Root self
//DoCast(me, 23973);
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SUBMERGED);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetEmoteState(EMOTE_STATE_SUBMERGED);
me->HandleEmoteCommand(EMOTE_ONESHOT_SUBMERGE);
instance->SetData(DATA_RAGNAROS_ADDS, 0);
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index 67b8a6852ca..f249aa097f3 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -178,7 +178,7 @@ class instance_deadmines : public InstanceMapScript
void LeverStucked()
{
if (GameObject* pDoorLever = instance->GetGameObject(DoorLeverGUID))
- pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
+ pDoorLever->AddFlag(GO_FLAG_INTERACT_COND);
}
void OnGameObjectCreate(GameObject* go) override
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index 31f3aeebcbf..13133405643 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -312,7 +312,7 @@ public:
if (GameObject* go = me->SummonGameObject(183410, -533.140f, -105.322f, -156.016f, 0.f, QuaternionData(), 1))
{
GoSummonList.push_back(go->GetGUID());
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it!
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it!
}
Summon(3);
break;
@@ -327,7 +327,7 @@ public:
if (GameObject* go = me->SummonGameObject(183410, -542.199f, -96.854f, -155.790f, 0.f, QuaternionData(), 1))
{
GoSummonList.push_back(go->GetGUID());
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case 5:
@@ -341,7 +341,7 @@ public:
if (GameObject* go = me->SummonGameObject(183410, -507.820f, -103.333f, -151.353f, 0.f, QuaternionData(), 1))
{
GoSummonList.push_back(go->GetGUID());
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it!
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it!
Summon(5);
}
break;
@@ -349,7 +349,7 @@ public:
if (GameObject* go = me->SummonGameObject(183410, -511.829f, -86.249f, -151.431f, 0.f, QuaternionData(), 1))
{
GoSummonList.push_back(go->GetGUID());
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it!
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it!
}
break;
case 8:
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index 57e0d36b40d..1f6d1dc5336 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -159,8 +159,8 @@ public:
{
if (spell->Id == SPELL_INFERNAL_RELAY)
{
- me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetDisplayId(me->GetNativeDisplayId());
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
HellfireTimer = 4000;
CleanupTimer = 170000;
}
@@ -449,7 +449,7 @@ public:
Creature* axe = me->SummonCreature(MALCHEZARS_AXE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000);
if (axe)
{
- axe->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ axe->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
axe->setFaction(me->getFaction());
axes[i] = axe->GetGUID();
if (target)
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index 3bd9c7c9097..c469d8130da 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -344,7 +344,7 @@ public:
PortalGUID[PortalsCount] = summoned->GetGUID();
++PortalsCount;
- if (summoned->GetUInt32Value(UNIT_CREATED_BY_SPELL) == SPELL_FIENDISH_PORTAL_1)
+ if (summoned->m_unitData->CreatedBySpell == SPELL_FIENDISH_PORTAL_1)
{
Talk(SAY_SUMMON);
SummonedPortals = true;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index e093d1007b2..8f933ec4859 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -183,7 +183,7 @@ public:
void AttackStart(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -192,7 +192,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -204,7 +204,7 @@ public:
{
if (AggroTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
AggroTimer = 0;
} else AggroTimer -= diff;
}
@@ -348,7 +348,7 @@ public:
void AttackStart(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -357,7 +357,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -404,7 +404,7 @@ public:
{
if (AggroTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
AggroTimer = 0;
} else AggroTimer -= diff;
}
@@ -482,7 +482,7 @@ public:
void AttackStart(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -491,7 +491,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -515,7 +515,7 @@ public:
{
if (AggroTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
AggroTimer = 0;
} else AggroTimer -= diff;
}
@@ -586,7 +586,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -594,7 +594,7 @@ public:
void AttackStart(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -628,7 +628,7 @@ public:
{
if (AggroTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
AggroTimer = 0;
} else AggroTimer -= diff;
}
@@ -684,7 +684,7 @@ public:
// Anyway, I digress.
// @todo This line below is obviously a hack. Duh. I'm just coming in here to hackfix the encounter to actually be completable.
// It needs a rewrite. Badly. Please, take good care of it.
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE));
CycloneTimer = 30000;
ChainLightningTimer = 10000;
}
@@ -1020,7 +1020,7 @@ void PretendToDie(Creature* creature)
creature->InterruptNonMeleeSpells(true);
creature->RemoveAllAuras();
creature->SetHealth(0);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
creature->GetMotionMaster()->MovementExpired(false);
creature->GetMotionMaster()->MoveIdle();
creature->SetStandState(UNIT_STAND_STATE_DEAD);
@@ -1028,7 +1028,7 @@ void PretendToDie(Creature* creature)
void Resurrect(Creature* target)
{
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
target->SetFullHealth();
target->SetStandState(UNIT_STAND_STATE_STAND);
target->CastSpell(target, SPELL_RES_VISUAL, true);
@@ -1116,7 +1116,7 @@ public:
void AttackStart(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -1125,7 +1125,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -1253,12 +1253,12 @@ public:
{
if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
- Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Julianne->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Julianne->GetMotionMaster()->Clear();
Julianne->setDeathState(JUST_DIED);
Julianne->CombatStop(true);
Julianne->DeleteThreatList();
- Julianne->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ Julianne->SetDynamicFlags(UNIT_DYNFLAG_LOOTABLE);
}
return;
}
@@ -1294,7 +1294,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -1382,7 +1382,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
if (AggroYellTimer <= diff)
{
Talk(SAY_JULIANNE_AGGRO);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->setFaction(16);
AggroYellTimer = 0;
} else AggroYellTimer -= diff;
@@ -1523,12 +1523,12 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
{
if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)))
{
- Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Romulo->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Romulo->GetMotionMaster()->Clear();
Romulo->setDeathState(JUST_DIED);
Romulo->CombatStop(true);
Romulo->DeleteThreatList();
- Romulo->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ Romulo->SetDynamicFlags(UNIT_DYNFLAG_LOOTABLE);
}
return;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
index 9e0fcc8f4c3..5c4ac116ba1 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
@@ -158,7 +158,7 @@ public:
HandleGameObject(StageDoorLeftGUID, true);
HandleGameObject(StageDoorRightGUID, true);
if (GameObject* sideEntrance = instance->GetGameObject(SideEntranceDoor))
- sideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ sideEntrance->RemoveFlag(GO_FLAG_LOCKED);
UpdateEncounterStateForKilledCreature(16812, NULL);
}
break;
@@ -220,9 +220,9 @@ public:
case GO_SIDE_ENTRANCE_DOOR:
SideEntranceDoor = go->GetGUID();
if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE)
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ go->AddFlag(GO_FLAG_LOCKED);
else
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ go->RemoveFlag(GO_FLAG_LOCKED);
break;
case GO_DUST_COVERED_CHEST:
DustCoveredChest = go->GetGUID();
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index b2bb79ddcf4..6a431713222 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -200,7 +200,7 @@ public:
me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f,
TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000))
{
- spotlight->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ spotlight->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
spotlight->CastSpell(spotlight, SPELL_SPOTLIGHT, false);
m_uiSpotlightGUID = spotlight->GetGUID();
}
@@ -276,11 +276,7 @@ public:
float PosX = Spawns[index][1];
if (Creature* creature = me->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILLISECONDS))
- {
- // In case database has bad flags
- creature->SetUInt32Value(UNIT_FIELD_FLAGS, 0);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
RaidWiped = false;
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index 22e372aa158..dbae2e7a5b5 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -170,7 +170,7 @@ public:
// Enable the Translocation Orb Exit
if (GameObject* escapeOrb = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_ESCAPE_ORB)))
- escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ escapeOrb->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
@@ -315,7 +315,7 @@ public:
Creature* Phoenix = me->SummonCreature(CREATURE_PHOENIX, x, y, LOCATION_Z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
if (Phoenix)
{
- Phoenix->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ Phoenix->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
SetThreatList(Phoenix);
Phoenix->AI()->AttackStart(target);
}
@@ -454,7 +454,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
DoCast(me, SPELL_FLAMESTRIKE2, true);
@@ -508,7 +508,7 @@ public:
void Reset() override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetDisableGravity(true);
DoCast(me, SPELL_PHOENIX_BURN, true);
Initialize();
@@ -540,7 +540,7 @@ public:
me->RemoveAllAurasOnDeath();
me->ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
me->ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->ClearAllReactives();
me->SetTarget(ObjectGuid::Empty);
me->GetMotionMaster()->Clear();
@@ -658,7 +658,7 @@ public:
DespawnTimer = 30000;
ChangeTargetTimer = urand(6000, 12000);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisableGravity(true);
me->setFaction(14);
DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index b2e22c91a66..f1eb2dbe0d6 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -250,10 +250,7 @@ public:
if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY)
instance->SetBossState(DATA_DELRISSA, DONE);
else
- {
- if (me->HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- }
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
void UpdateAI(uint32 diff) override
@@ -444,8 +441,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
//time to make her lootable and complete event if she died before lackeys
if (!pDelrissa->IsAlive())
{
- if (!pDelrissa->HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
- pDelrissa->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ pDelrissa->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
instance->SetBossState(DATA_DELRISSA, DONE);
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 85d5ac638e0..b121b58793e 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -87,7 +87,7 @@ class boss_selin_fireheart : public CreatureScript
if (!creature->IsAlive())
creature->Respawn();
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
_Reset();
@@ -168,7 +168,7 @@ class boss_selin_fireheart : public CreatureScript
Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
if (CrystalChosen && CrystalChosen->IsAlive())
{
- CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ CrystalChosen->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true);
events.ScheduleEvent(EVENT_EMPOWER, 10000, PHASE_DRAIN);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 06a3a6d2877..a2229b234ad 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -129,7 +129,7 @@ public:
Initialize();
events.Reset();
me->setFaction(7);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
me->LoadEquipment(0, true);
}
@@ -235,7 +235,7 @@ public:
else
{
me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
phase = PHASE_ATTACKING;
if (Player* target = ObjectAccessor::GetPlayer(*me, playerGUID))
@@ -499,8 +499,8 @@ public:
return true;
}
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15);
+ creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ creature->RemoveUnitFlag(UNIT_FLAG_UNK_15);
player->CastSpell(creature, SPELL_DUEL, false);
player->CastSpell(player, SPELL_DUEL_FLAG, true);
@@ -550,7 +550,7 @@ public:
me->RestoreFaction();
CombatAI::Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15);
+ me->AddUnitFlag(UNIT_FLAG_UNK_15);
}
void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override
@@ -779,7 +779,7 @@ public:
if (charmer->HasAura(SPELL_EFFECT_STOLEN_HORSE))
{
charmer->RemoveAurasDueToSpell(SPELL_EFFECT_STOLEN_HORSE);
- caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ caster->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
caster->setFaction(35);
DoCast(caster, SPELL_CALL_DARK_RIDER, true);
if (Creature* Dark_Rider = me->FindNearestCreature(NPC_DARK_RIDER_OF_ACHERUS, 15))
@@ -856,8 +856,8 @@ public:
return;
deathcharger->RestoreFaction();
- deathcharger->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- deathcharger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ deathcharger->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
+ deathcharger->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (!me->GetVehicle() && deathcharger->IsVehicle() && deathcharger->GetVehicleKit()->HasEmptySeat(0))
me->EnterVehicle(deathcharger);
}
@@ -870,8 +870,8 @@ public:
if (killer->GetTypeId() == TYPEID_PLAYER && deathcharger->GetTypeId() == TYPEID_UNIT && deathcharger->IsVehicle())
{
- deathcharger->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- deathcharger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ deathcharger->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
+ deathcharger->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
deathcharger->setFaction(2096);
}
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 6b5192556f0..b5bec78509a 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -236,7 +236,7 @@ public:
me->LoadEquipment(0, true);
me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE);
me->RemoveAurasDueToSpell(SPELL_KOLTIRA_TRANSFORM);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
@@ -257,7 +257,7 @@ public:
break;
case 3:
SetEscortPaused(true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
Talk(SAY_BREAKOUT2);
DoCast(me, SPELL_ANTI_MAGIC_ZONE);
@@ -282,7 +282,7 @@ public:
if (summoned->GetEntry() == NPC_HIGH_INQUISITOR_VALROTH)
valrothGUID = summoned->GetGUID();
- summoned->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ summoned->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
void SummonAcolyte(uint32 uiAmount)
@@ -340,7 +340,7 @@ public:
case 5:
Talk(SAY_BREAKOUT9);
me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
waveTimer = 2500;
break;
case 6:
@@ -655,7 +655,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
bool MeetQuestCondition(Player* player)
@@ -753,7 +753,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_6, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -783,7 +783,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_8, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -813,7 +813,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_3, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -843,7 +843,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_7, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -873,7 +873,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_4, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -903,7 +903,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_9, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -933,7 +933,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_5, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -963,7 +963,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_10, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -993,7 +993,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_1, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
@@ -1023,7 +1023,7 @@ public:
case 9:
Talk(SAY_EXEC_TIME_2, player);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case 10:
Talk(SAY_EXEC_WAITING, player);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 0d4574cc2cb..adaad6b0f9f 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -551,7 +551,7 @@ public:
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetWalk(true);
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
+ temp->SetEmoteState(EMOTE_STATE_READY2H);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10]);
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
@@ -625,7 +625,7 @@ public:
//UpdateWorldState(me->GetMap(), WORLD_STATE_REMAINS, 1);
UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0);
UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 1);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
JumpToNextStep(3000);
break;
@@ -783,7 +783,7 @@ public:
case 15: // summon gate
if (Creature* temp = me->SummonCreature(NPC_HIGHLORD_ALEXANDROS_MOGRAINE, LightofDawnLoc[22], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000))
{
- temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ temp->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
temp->CastSpell(temp, SPELL_ALEXANDROS_MOGRAINE_SPAWN, true);
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN06);
uiAlexandrosGUID = temp->GetGUID();
@@ -794,7 +794,7 @@ public:
case 16: // Alexandros out
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
{
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ temp->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23]);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN32);
}
@@ -999,7 +999,7 @@ public:
if (fLichPositionX && fLichPositionY)
{
Unit* temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].GetPositionWithOffset({ float(rand32() % 10), float(rand32() % 10), 0.0f, 0.0f }), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
+ temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeedRate(MOVE_RUN, 2.0f);
temp->setFaction(me->getFaction());
@@ -1007,7 +1007,7 @@ public:
uiDefenderGUID[0] = temp->GetGUID();
temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].GetPositionWithOffset({ float(rand32() % 10), float(rand32() % 10), 0.0f, 0.0f }), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
+ temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeedRate(MOVE_RUN, 2.0f);
temp->setFaction(me->getFaction());
@@ -1016,7 +1016,7 @@ public:
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
+ temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeedRate(MOVE_RUN, 2.0f);
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
@@ -1024,7 +1024,7 @@ public:
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
+ temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeedRate(MOVE_RUN, 2.0f);
temp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED);
@@ -1032,7 +1032,7 @@ public:
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
+ temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeedRate(MOVE_RUN, 2.0f);
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
@@ -1047,21 +1047,21 @@ public:
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ temp->SetEmoteState(EMOTE_ONESHOT_NONE);
temp->SetSpeedRate(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14]);
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ temp->SetEmoteState(EMOTE_ONESHOT_NONE);
temp->SetSpeedRate(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11]);
}
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ temp->SetEmoteState(EMOTE_ONESHOT_NONE);
temp->SetSpeedRate(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17]);
@@ -1156,7 +1156,7 @@ public:
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN16);
temp->CastSpell(temp, SPELL_TIRION_CHARGE, false); // jumping charge
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
+ temp->SetEmoteState(EMOTE_STATE_READY2H);
temp->SetSpeedRate(MOVE_RUN, 3.0f); // workarounds, make Tirion still running
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2]);
@@ -1211,7 +1211,7 @@ public:
temp->CastSpell(temp, SPELL_TELEPORT_VISUAL, false);
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion
{
- temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ temp->SetEmoteState(EMOTE_ONESHOT_NONE);
temp->SetSpeedRate(MOVE_RUN, 1.0f);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[6]);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index c10cea4183e..d1226d58811 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -70,7 +70,7 @@ public:
{
me->setActive(true);
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetCanFly(true);
me->GetPosition(x, y, z);
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index ec5195ee49e..797003b13c7 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -293,7 +293,7 @@ public:
withbody = true;
wait = 300;
damage = me->GetHealth() - me->CountPctFromMaxHealth(1);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->StopMoving();
//me->GetMotionMaster()->MoveIdle();
DoCast(me, SPELL_HEAD_IS_DEAD);
@@ -318,7 +318,7 @@ public:
if (!bodyGUID)
bodyGUID = caster->GetGUID();
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HEAD_LANDS, true);
DoCast(me, SPELL_HEAD, false);
SaySound(SAY_LOST_HEAD);
@@ -446,14 +446,14 @@ public:
headGUID.Clear();
}
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
//instance->SetBossState(DATA_HORSEMAN_EVENT, NOT_STARTED);
}
void FlyMode()
{
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetDisableGravity(true);
me->SetSpeedRate(MOVE_WALK, 5.0f);
wp_reached = false;
@@ -493,7 +493,7 @@ public:
Phase = 1;
IsFlying = false;
wp_reached = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
SaySound(SAY_ENTRANCE);
if (Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID))
DoStartMovement(player);
@@ -631,7 +631,7 @@ public:
Unit* Head = ObjectAccessor::GetUnit(*me, headGUID);
if (Head && Head->IsAlive())
{
- Head->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ Head->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
//Head->CastSpell(Head, SPELL_HEAD_INVIS, false);
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_IMMUNE, true);
@@ -819,7 +819,7 @@ public:
sprouted = false;
DoCast(me, SPELL_PUMPKIN_AURA, true);
DoCast(me, SPELL_SPROUTING);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ me->AddUnitFlag(UNIT_FLAG_STUNNED);
}
void EnterCombat(Unit* /*who*/) override { }
@@ -830,7 +830,7 @@ public:
{
sprouted = true;
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ me->RemoveUnitFlag(UNIT_FLAG_STUNNED);
DoCast(me, SPELL_SPROUT_BODY, true);
me->UpdateEntry(PUMPKIN_FIEND);
DoStartMovement(me->GetVictim());
@@ -924,8 +924,8 @@ void npc_head::npc_headAI::Disappear()
body->RemoveAurasDueToSpell(SPELL_IMMUNE);//hack, SpellHit doesn't calls if body has immune aura
DoCast(body, SPELL_FLYING_HEAD);
me->SetFullHealth();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->GetMotionMaster()->MoveIdle();
ENSURE_AI(boss_headless_horseman::boss_headless_horsemanAI, body->AI())->returned = true;
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
index 47152b972be..865037d098b 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
@@ -102,8 +102,8 @@ public:
Initialize();
//Incase wipe during phase that mograine fake death
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
if (me->IsAlive())
@@ -152,7 +152,7 @@ public:
me->RemoveAllAuras();
me->ClearAllReactives();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_DEAD);
_bHasDied = true;
@@ -184,7 +184,7 @@ public:
//On resurrection, stop fake death and heal whitemane and resume fight
if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_WHITEMANE)))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(Whitemane, SPELL_LAYONHANDS);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index ecbfe0748e0..85d4aac547f 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -89,14 +89,14 @@ public:
break;
case EVENT_ILLUSION:
DoCast(SPELL_ILLUSION);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(11686); // Invisible Model
DoModifyThreatPercent(me->GetVictim(), -99);
events.ScheduleEvent(EVENT_SET_VISIBILITY, 3000);
events.ScheduleEvent(EVENT_ILLUSION, 25000);
break;
case EVENT_SET_VISIBILITY:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(11073); //Jandice Model
break;
default:
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 0bb98a2dda5..9bc6cfde5b1 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -128,7 +128,7 @@ class boss_kirtonos_the_herald : public CreatureScript
events.ScheduleEvent(INTRO_1, 500);
me->SetDisableGravity(true);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
Talk(EMOTE_SUMMONED);
}
@@ -180,7 +180,7 @@ class boss_kirtonos_the_herald : public CreatureScript
case INTRO_5:
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
events.ScheduleEvent(INTRO_6, 5000);
break;
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
index 2a4b86baae6..55e47a19bc6 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
@@ -259,7 +259,7 @@ public:
case 1:
{
Creature* summon = pArchmage->SummonCreature(pArchmage->GetEntry(), SpawnLocation[4], TEMPSUMMON_TIMED_DESPAWN, 10000);
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ summon->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
summon->SetReactState(REACT_DEFENSIVE);
summon->CastSpell(summon, SPELL_ASHCROMBE_TELEPORT, true);
summon->AI()->Talk(SAY_ARCHMAGE);
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index f2159aac93a..5881f9ccd7f 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -154,7 +154,7 @@ class instance_stratholme : public InstanceMapScript
break;
case GO_GAUNTLET_GATE1:
//weird, but unless flag is set, client will not respond as expected. DB bug?
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ go->AddFlag(GO_FLAG_LOCKED);
gauntletGate1GUID = go->GetGUID();
break;
case GO_ZIGGURAT1:
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
index 6f6284a6c22..69906ba6ed9 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
@@ -168,7 +168,7 @@ public:
void UseStatue(GameObject* go)
{
go->SummonGameObject(GO_ATALAI_LIGHT1, *go, QuaternionData::fromEulerAnglesZYX(go->GetOrientation(), 0.0f, 0.0f), 0);
- go->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
+ go->AddFlag(GO_FLAG_INTERACT_COND);
}
/*
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index 47d92199e95..5b1961191fb 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -157,7 +157,7 @@ public:
IsIntro = true;
Madrigosa->SetMaxHealth(me->GetMaxHealth());
Madrigosa->SetHealth(me->GetMaxHealth());
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->Attack(Madrigosa, true);
Madrigosa->Attack(me, true);
}
@@ -171,7 +171,7 @@ public:
void EndIntro()
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
Intro = false;
IsIntro = false;
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index b1e2822c5d3..647c5a1417a 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -159,7 +159,7 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, DONE);
}
else
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
void SpellHitTarget(Unit* target, const SpellInfo* spell) override
@@ -435,7 +435,7 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, DONE);
}
else
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
void SpellHitTarget(Unit* target, const SpellInfo* spell) override
@@ -669,7 +669,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Initialize();
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 3d30972e39e..0edada91c6b 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -147,8 +147,8 @@ public:
events.Reset();
me->SetDisableGravity(true);
- me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
- me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
+ me->SetBoundingRadius(10);
+ me->SetCombatReach(10);
DespawnSummons(NPC_VAPOR_TRAIL);
me->setActive(false);
@@ -526,7 +526,7 @@ public:
{
npc_felmyst_vaporAI(Creature* creature) : ScriptedAI(creature)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetSpeedRate(MOVE_RUN, 0.8f);
}
@@ -560,10 +560,10 @@ public:
{
npc_felmyst_trailAI(Creature* creature) : ScriptedAI(creature)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_TRAIL_TRIGGER, true);
me->SetTarget(me->GetGUID());
- me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 0.01f); // core bug
+ me->SetBoundingRadius(0.01f); // core bug
}
void Reset() override { }
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index 2bc8748de93..8f9ac1aa871 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -163,7 +163,7 @@ public:
me->setFaction(14);
if (!bJustReset) //first reset at create
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetDisableGravity(false);
me->SetVisible(true);
me->SetStandState(UNIT_STAND_STATE_SLEEP);
@@ -178,7 +178,7 @@ public:
bJustReset = true;
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
ScriptedAI::EnterEvadeMode(why);
}
@@ -203,7 +203,7 @@ public:
{
if (!TalkSequence)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->InterruptNonMeleeSpells(true);
me->RemoveAllAuras();
me->DeleteThreatList();
@@ -225,7 +225,7 @@ public:
{
if (ResetTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetDisableGravity(false);
me->SetVisible(true);
me->SetStandState(UNIT_STAND_STATE_SLEEP);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 7efc6f31600..b8e8bb91aae 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -263,7 +263,7 @@ public:
{
Initialize();
me->SetDisableGravity(true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setActive(true);
for (uint8 i = 0; i < 4; ++i)
@@ -293,7 +293,7 @@ public:
me->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
for (uint8 i = 0; i < 4; ++i)
if (GameObject* pOrb = GetOrb(i))
- pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 0);
+ pOrb->SetFaction(0);
}
void EmpowerOrb(bool all)
@@ -310,7 +310,7 @@ public:
if (GameObject* pOrb = GetOrb(i))
{
pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES);
- pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35);
+ pOrb->SetFaction(35);
pOrb->setActive(true);
pOrb->Refresh();
}
@@ -322,7 +322,7 @@ public:
if (GameObject* pOrb = GetOrb(urand(0, 3)))
{
pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES);
- pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35);
+ pOrb->SetFaction(35);
pOrb->setActive(true);
pOrb->Refresh();
@@ -351,7 +351,7 @@ public:
{
if (GameObject* pOrb = GetOrb(i))
{
- if (pOrb->GetUInt32Value(GAMEOBJECT_FACTION) == 35)
+ if (pOrb->GetFaction() == 35)
{
pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES);
pOrb->setActive(true);
@@ -370,12 +370,12 @@ public:
bool OnGossipHello(Player* player, GameObject* go) override
{
- if (go->GetUInt32Value(GAMEOBJECT_FACTION) == 35)
+ if (go->GetFaction() == 35)
{
InstanceScript* instance = go->GetInstanceScript();
player->SummonCreature(NPC_POWER_OF_THE_BLUE_DRAGONFLIGHT, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 121000);
player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, false);
- go->SetUInt32Value(GAMEOBJECT_FACTION, 0);
+ go->SetFaction(0);
if (Creature* pKalec = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_KALECGOS_KJ)))
ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->SetRingOfBlueFlames();
@@ -428,8 +428,8 @@ public:
void InitializeAI() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->AddUnitState(UNIT_STATE_STUNNED);
ScriptedAI::InitializeAI();
@@ -454,7 +454,7 @@ public:
case NPC_ANVEENA:
summoned->SetDisableGravity(true);
summoned->CastSpell(summoned, SPELL_ANVEENA_PRISON, true);
- summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
break;
case NPC_KILJAEDEN:
summoned->CastSpell(summoned, SPELL_REBIRTH, false);
@@ -576,7 +576,7 @@ public:
if (Creature* pKalec = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KALECGOS_KJ)))
pKalec->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
- me->SetFloatValue(UNIT_FIELD_COMBATREACH, 12);
+ me->SetCombatReach(12.0f);
summons.DespawnAll();
}
@@ -603,8 +603,8 @@ public:
{
if (summoned->GetEntry() == NPC_ARMAGEDDON_TARGET)
{
- summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ summoned->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
// summoned->SetVisibility(VISIBILITY_OFF); //with this we cant see the armageddon visuals
}
else
@@ -1031,7 +1031,7 @@ public:
void Reset() override
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
}
void JustSummoned(Creature* summoned) override
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index e9613d70aac..4ba225aa9fd 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -248,7 +248,7 @@ public:
{
_Reset();
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
}
@@ -295,7 +295,7 @@ public:
_phase = PHASE_TWO;
me->RemoveAllAuras();
DoCast(me, SPELL_OPEN_ALL_PORTALS, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/)
{
@@ -409,7 +409,7 @@ public:
_scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/)
{
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Creature* _summoner = ObjectAccessor::GetCreature(*me, _summonerGUID))
if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0))
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index 473135f8cbf..5fe9366f036 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -100,7 +100,7 @@ class boss_archaedas : public CreatureScript
instance->SetData(0, 5); // respawn any dead minions
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
me->AddAura(SPELL_FREEZE_ANIM, me);
}
@@ -113,7 +113,7 @@ class boss_archaedas : public CreatureScript
{
DoCast(minion, SPELL_AWAKEN_VAULT_WALKER, flag);
minion->CastSpell(minion, SPELL_ARCHAEDAS_AWAKEN, true);
- minion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ minion->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
minion->SetControlled(false, UNIT_STATE_ROOT);
minion->setFaction(14);
minion->RemoveAura(SPELL_MINION_FREEZE_ANIM);
@@ -123,7 +123,7 @@ class boss_archaedas : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_ROOT);
}
@@ -263,7 +263,7 @@ class npc_archaedas_minions : public CreatureScript
Initialize();
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
me->RemoveAllAuras();
me->AddAura(SPELL_MINION_FREEZE_ANIM, me);
@@ -273,7 +273,7 @@ class npc_archaedas_minions : public CreatureScript
{
me->setFaction (14);
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_ROOT);
bAmIAwake = true;
}
@@ -352,7 +352,7 @@ class npc_stonekeepers : public CreatureScript
void Reset() override
{
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
me->RemoveAllAuras();
me->AddAura(SPELL_MINION_FREEZE_ANIM, me);
@@ -361,7 +361,7 @@ class npc_stonekeepers : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_ROOT);
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
index f6e00183f7c..0dfb5cfe69d 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
@@ -122,7 +122,7 @@ class instance_uldaman : public InstanceMapScript
case GO_ANCIENT_VAULT_DOOR:
go->SetGoState(GO_STATE_READY);
- go->SetUInt32Value(GAMEOBJECT_FLAGS, 33);
+ go->SetFlags(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NODESPAWN));
ancientVaultDoor = go->GetGUID();
if (m_auiEncounter[1] == DONE)
@@ -142,7 +142,7 @@ class instance_uldaman : public InstanceMapScript
if (m_auiEncounter[2] == DONE)
{
HandleGameObject(ObjectGuid::Empty, true, go);
- go->SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ go->AddFlag(GO_FLAG_INTERACT_COND);
}
break;
}
@@ -152,7 +152,7 @@ class instance_uldaman : public InstanceMapScript
{
creature->setFaction(35);
creature->RemoveAllAuras();
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
creature->SetControlled(true, UNIT_STATE_ROOT);
creature->AddAura(SPELL_MINION_FREEZE_ANIM, creature);
}
@@ -172,7 +172,7 @@ class instance_uldaman : public InstanceMapScript
if (!go)
return;
- go->SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ go->AddFlag(GO_FLAG_INTERACT_COND);
}
void ActivateStoneKeepers()
@@ -186,7 +186,7 @@ class instance_uldaman : public InstanceMapScript
continue;
target->SetControlled(false, UNIT_STATE_ROOT);
target->setFaction(14);
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
target->RemoveAura(SPELL_MINION_FREEZE_ANIM);
return; // only want the first one we find
@@ -209,7 +209,7 @@ class instance_uldaman : public InstanceMapScript
if (!target || !target->IsAlive() || target->getFaction() == 14)
continue;
target->SetControlled(false, UNIT_STATE_ROOT);
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
target->setFaction(14);
target->RemoveAura(SPELL_MINION_FREEZE_ANIM);
archaedas->CastSpell(target, SPELL_AWAKEN_VAULT_WALKER, true);
@@ -275,7 +275,7 @@ class instance_uldaman : public InstanceMapScript
ironaya->setFaction(415);
ironaya->SetControlled(false, UNIT_STATE_ROOT);
- ironaya->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ ironaya->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
ironaya->GetMotionMaster()->Clear();
ironaya->GetMotionMaster()->MovePoint(0, IronayaPoint);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 3a46af6845d..8f585e0a8aa 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -93,7 +93,7 @@ class npc_voljin_zulaman : public CreatureScript
{
me->SetDisplayFromModel(0);
if (_instance->GetData(DATA_ZULAMAN_STATE) == NOT_STARTED)
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
void Reset() override
@@ -109,9 +109,9 @@ class npc_voljin_zulaman : public CreatureScript
if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
{
_events.Reset();
- me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
+ me->SetMountDisplayId(0);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ me->SetDynamicFlags(UNIT_DYNFLAG_NONE);
_events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_1, 1000);
Talk(SAY_INTRO_1, player);
me->SetWalk(true);
@@ -149,7 +149,7 @@ class npc_voljin_zulaman : public CreatureScript
case EVENT_BANGING_THE_GONG:
DoCast(me, SPELL_BANGING_THE_GONG);
if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG)))
- strangeGong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ strangeGong->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
me->SetVirtualItem(0, uint32(ITEM_VIRTUAL_ITEM));
break;
case EVENT_START_DOOR_OPENING_1:
@@ -159,7 +159,7 @@ class npc_voljin_zulaman : public CreatureScript
case EVENT_START_DOOR_OPENING_2:
me->SetVirtualItem(0, uint32(0));
if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG)))
- strangeGong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ strangeGong->AddFlag(GO_FLAG_NOT_SELECTABLE);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_3, 500);
break;
case EVENT_START_DOOR_OPENING_3:
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index d28425b2e86..f5177c98a97 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -246,7 +246,7 @@ class boss_mandokir : public CreatureScript
switch (eventId)
{
case EVENT_SUMMON_OHGAN:
- me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
+ me->SetMountDisplayId(0);
DoCast(me, SPELL_SUMMON_OHGAN, true);
break;
case EVENT_DECAPITATE:
diff --git a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
index a09363aae8c..79ad74fb8bd 100644
--- a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
@@ -68,8 +68,8 @@ public:
{
_tapped = true;
_playerGUID = caster->GetGUID();
- me->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
_events.ScheduleEvent(EVENT_TURN_TO_PLAYER, Seconds(2));
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
index 95012fd1878..83b8b834df9 100644
--- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
@@ -75,7 +75,7 @@ public:
switch (waypointId)
{
case 0:
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20))
Cage->SetGoState(GO_STATE_ACTIVE);
Talk(SAY_START, player);
diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
index 982c9a412b6..4709617f801 100644
--- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
@@ -73,7 +73,7 @@ public:
void Reset() override
{
Initialize();
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
}
void SpellHit(Unit* caster, const SpellInfo* spell) override
@@ -85,7 +85,7 @@ public:
{
if (player->GetQuestStatus(QUEST_SAVING_YENNIKU) == QUEST_STATUS_INCOMPLETE) // Yenniku's Release
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
+ me->SetEmoteState(EMOTE_STATE_STUN);
me->CombatStop(); // stop combat
me->DeleteThreatList(); // unsure of this
me->setFaction(FACTION_HORDE_GENERIC); // horde generic
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index c5efcf8d9fa..cb8eda7fd7c 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -60,7 +60,7 @@ public:
if (instance)
{
go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1);
return true;
}
@@ -189,7 +189,7 @@ public:
npc_morriduneAI(Creature* creature) : npc_escortAI(creature)
{
Talk(SAY_MORRIDUNE_1);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Start(false);
}
@@ -200,7 +200,7 @@ public:
case 4:
SetEscortPaused(true);
me->SetFacingTo(1.775791f, true);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_MORRIDUNE_2);
break;
}
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
index 8f627581763..0e8bfa1cd10 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
@@ -100,12 +100,12 @@ public:
case GO_SHRINE_OF_GELIHAST:
shrineOfGelihastGUID = go->GetGUID();
if (GetBossState(DATA_GELIHAST) != DONE)
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_ALTAR_OF_THE_DEEPS:
altarOfTheDeepsGUID = go->GetGUID();
if (GetBossState(DATA_AKU_MAI) != DONE)
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_AKU_MAI_DOOR:
if (GetBossState(DATA_AKU_MAI) == DONE)
@@ -176,13 +176,13 @@ public:
case DATA_GELIHAST:
if (state == DONE)
if (GameObject* go = instance->GetGameObject(shrineOfGelihastGUID))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case DATA_AKU_MAI:
if (state == DONE)
if (GameObject* go = instance->GetGameObject(altarOfTheDeepsGUID))
{
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
go->SummonCreature(NPC_MORRIDUNE, SpawnsLocation[4], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
}
break;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index fbe35df5c96..a7b4305ede4 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -128,7 +128,7 @@ public:
ArchimondeGUID = instance->GetGuidData(DATA_ARCHIMONDE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index 7f27c2e5166..28bc1a2f90f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -405,7 +405,7 @@ void hyjalAI::Reset()
}
//Flags
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
//Reset Instance Data for trash count
if ((!instance->GetData(DATA_ALLIANCE_RETREAT) && me->GetEntry() == JAINA) || (instance->GetData(DATA_ALLIANCE_RETREAT) && me->GetEntry() == THRALL))
@@ -598,7 +598,7 @@ void hyjalAI::StartEvent(Player* player)
CheckTimer = 5000;
PlayerGUID = player->GetGUID();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
instance->DoUpdateWorldState(WORLD_STATE_WAVES, 0);
instance->DoUpdateWorldState(WORLD_STATE_ENEMY, 0);
@@ -630,7 +630,7 @@ void hyjalAI::Retreat()
Creature* JainaDummy = me->SummonCreature(JAINA, JainaDummySpawn[0][0], JainaDummySpawn[0][1], JainaDummySpawn[0][2], JainaDummySpawn[0][3], TEMPSUMMON_TIMED_DESPAWN, 60000);
if (JainaDummy)
{
- JainaDummy->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ JainaDummy->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
ENSURE_AI(hyjalAI, JainaDummy->AI())->IsDummy = true;
DummyGuid = JainaDummy->GetGUID();
}
@@ -640,7 +640,7 @@ void hyjalAI::Retreat()
}
SpawnVeins();
Overrun = true;
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);//cant talk after overrun event started
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);//cant talk after overrun event started
}
void hyjalAI::SpawnVeins()
@@ -834,7 +834,7 @@ void hyjalAI::UpdateAI(uint32 diff)
}
EventBegun = false;
CheckTimer = 0;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
BossGUID[i].Clear();
instance->DoUpdateWorldState(WORLD_STATE_ENEMY, 0); // Reset world state for enemies to disable it
}
@@ -997,7 +997,7 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
{
(*itr)->CastSpell(*itr, SPELL_TELEPORT_VISUAL, true);
(*itr)->setFaction(35);//make them friendly so mobs won't attack them
- (*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ (*itr)->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
DoCast(me, SPELL_TELEPORT_VISUAL);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index b69fd874832..2f1fad60e10 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -404,7 +404,7 @@ void hyjal_trashAI::JustDied(Unit* /*killer*/)
instance->SetData(DATA_TRASH, 0);//signal trash is dead
if ((instance->GetData(DATA_RAIDDAMAGE) < MINRAIDDAMAGE && !me->isWorldBoss()) || (damageTaken < me->GetMaxHealth()/4 && me->isWorldBoss()))
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);//no loot
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);//no loot
}
class npc_giant_infernal : public CreatureScript
@@ -420,8 +420,8 @@ public:
meteor = false;//call once!
CanMove = false;
Delay = rand32() % 30000;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(MODEL_INVIS);
go = false;
Reset();
@@ -479,9 +479,9 @@ public:
} else if (!CanMove){
if (spawnTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetDisplayId(me->GetNativeDisplayId());
CanMove = true;
if (instance->GetData(DATA_ALLIANCE_RETREAT) && !instance->GetData(DATA_HORDE_RETREAT))
{
@@ -674,7 +674,7 @@ public:
}
if (waypointId == LastOverronPos && IsOverrun)
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK_UNARMED);
+ me->SetEmoteState(EMOTE_ONESHOT_ATTACK_UNARMED);
if ((faction == 0 && LastOverronPos == 17) || (faction == 1 && LastOverronPos == 21))
{
me->setDeathState(DEAD);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
index a64a6cab3b8..94bd1acab74 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -148,7 +148,7 @@ public:
if (HealthBelowPct(1))
{
//Handle Escape Event: Don't forget to add Player::RewardPlayerAndGroupAtEvent
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
uiOutroStep = 1;
Phase = OUTRO;
return;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index 2390193473e..9caca258c5e 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -297,7 +297,7 @@ public:
}
CloseGossipMenuFor(player);
ai->SetDespawnAtFar(false);
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
return true;
}
@@ -420,14 +420,14 @@ public:
bStepping = true;
step = 0;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
bossEvent = DATA_MEATHOOK;
gossipStep = 0;
}
void AttackStart(Unit* who) override
{
- if (who && !who->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
+ if (who && !who->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
npc_escortAI::AttackStart(who);
}
@@ -451,7 +451,7 @@ public:
if (Creature* temp = me->SummonCreature((uint32)RiftAndSpawnsLocations[i][0], RiftAndSpawnsLocations[timeRiftID][1], RiftAndSpawnsLocations[timeRiftID][2], RiftAndSpawnsLocations[timeRiftID][3], RiftAndSpawnsLocations[timeRiftID][4], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900000))
{
guidVector[i-timeRiftID-1] = temp->GetGUID();
- temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ temp->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
temp->SetReactState(REACT_PASSIVE);
temp->GetMotionMaster()->MovePoint(0, RiftAndSpawnsLocations[i][1], RiftAndSpawnsLocations[i][2], RiftAndSpawnsLocations[i][3]);
if ((uint32)RiftAndSpawnsLocations[i][0] == NPC_EPOCH)
@@ -508,7 +508,7 @@ public:
break;
case 8:
gossipStep = 1;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetHoldState(true);
break;
case 12:
@@ -533,7 +533,7 @@ public:
break;
case 20:
gossipStep = 2;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetRun(false);
SetHoldState(true);
break;
@@ -579,7 +579,7 @@ public:
case 45:
SetRun(true);
gossipStep = 4;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetHoldState(true);
break;
case 48:
@@ -595,7 +595,7 @@ public:
break;
case 51:
gossipStep = 5;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetHoldState(true);
break;
}
@@ -1043,7 +1043,7 @@ public:
{
disguised2->UpdateEntry(NPC_INFINITE_HUNTER);
//Make them unattackable
- disguised2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ disguised2->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
disguised2->SetReactState(REACT_PASSIVE);
}
JumpToNextStep(2000);
@@ -1053,7 +1053,7 @@ public:
{
disguised1->UpdateEntry(NPC_INFINITE_AGENT);
//Make them unattackable
- disguised1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ disguised1->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
disguised1->SetReactState(REACT_PASSIVE);
}
JumpToNextStep(2000);
@@ -1063,7 +1063,7 @@ public:
{
disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY);
//Make them unattackable
- disguised0->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ disguised0->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
disguised0->SetReactState(REACT_PASSIVE);
}
JumpToNextStep(2000);
@@ -1077,7 +1077,7 @@ public:
for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i)
if (Creature* temp = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[i]))
{
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
temp->SetReactState(REACT_AGGRESSIVE);
}
JumpToNextStep(5000);
@@ -1135,8 +1135,7 @@ public:
if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID))
{
//Make Epoch attackable
- epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
- epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ epoch->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
epoch->SetReactState(REACT_AGGRESSIVE);
}
@@ -1147,7 +1146,7 @@ public:
if (instance->GetBossState(DATA_EPOCH) == DONE)
{
gossipStep = 3;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
bStepping = false;
bossEvent = DATA_MAL_GANIS;
JumpToNextStep(15000);
@@ -1186,7 +1185,7 @@ public:
case 87:
if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
{
- malganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15);
+ malganis->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15));
malganis->SetReactState(REACT_AGGRESSIVE);
}
JumpToNextStep(1000);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
index 88aabb8a1c6..a6c7f10b6ac 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
@@ -208,7 +208,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
if (state == DONE)
{
if (GameObject* go = instance->GetGameObject(_malGanisChestGUID))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
instance->SummonCreature(NPC_CHROMIE_3, ChromieSummonPos[1]);
}
break;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index cb040c983be..ae3a81cb489 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -342,7 +342,7 @@ public:
break;
case 30:
SetEscortPaused(true);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetRun(false);
break;
case 31:
@@ -366,7 +366,7 @@ public:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
//make horsie run off
SetEscortPaused(true);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
instance->SetData(TYPE_THRALL_PART2, DONE);
SetRun();
break;
@@ -475,7 +475,7 @@ public:
}
void StartWP()
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetEscortPaused(false);
}
void DoMount()
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
index c26c1ad1772..05c2f45d736 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
@@ -299,8 +299,8 @@ public:
TEMPSUMMON_CORPSE_DESPAWN, 0);
if (temp)
{
- temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ temp->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ temp->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Creature* boss = SummonedPortalBoss(temp))
{
diff --git a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
index 016768cc777..01142499089 100644
--- a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
@@ -181,7 +181,7 @@ class npc_harbinger_of_flame : public CreatureScript
void EnterCombat(Unit* /*target*/) override
{
- for (ObjectGuid const& birdGuid : me->GetChannelObjects())
+ for (ObjectGuid const& birdGuid : me->m_unitData->ChannelObjects)
if (Creature* bird = ObjectAccessor::GetCreature(*me, birdGuid))
DoZoneInCombat(bird, 200.0f);
@@ -298,7 +298,7 @@ class npc_blazing_monstrosity : public CreatureScript
// Our passenger is another vehicle (boardable by players)
DoCast(passenger, SPELL_SHARE_HEALTH, true);
passenger->setFaction(35);
- passenger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ passenger->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
// Hack to relocate vehicle on vehicle so exiting players are not moved under map
Movement::MoveSplineInit init(passenger);
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
index 6d97bc54bdc..3041202201e 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
@@ -151,7 +151,7 @@ public:
if (instance->GetData(DATA_DEAD_ELEMENTALS) == 4)
{
// Set to combat automatically, Brann's event won't repeat
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
events.SetPhase(PHASE_COMBAT);
ScheduleCombatEvents();
me->SetHomePosition(AnraphetActivatePos);
@@ -235,7 +235,7 @@ public:
events.ScheduleEvent(EVENT_ANRAPHET_READY, 6000, 0, PHASE_INTRO);
break;
case EVENT_ANRAPHET_READY:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
events.SetPhase(PHASE_COMBAT);
ScheduleCombatEvents();
break;
@@ -341,7 +341,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript
_instance->SetBossState(DATA_VAULT_OF_LIGHTS, IN_PROGRESS);
_currentPoint = 0;
events.Reset();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetWalk(true);
Talk(BRANN_SAY_DOOR_INTRO);
events.ScheduleEvent(EVENT_BRANN_UNLOCK_DOOR, 7500);
@@ -365,7 +365,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript
break;
}
case ACTION_ANRAPHET_DIED:
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1000);
break;
}
@@ -412,7 +412,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript
break;
case EVENT_BRANN_SAY_GET_IT:
Talk(BRANN_SAY_GET_IT);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
break;
case EVENT_BRANN_SET_ORIENTATION_4:
me->SetFacingTo(3.141593f);
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp
index c18c53c04af..0a2c688adbe 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp
@@ -233,7 +233,7 @@ public:
// Spell not in DBC, it is not cast either, according to sniffs
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
if (Creature* quicksand = me->SummonCreature(NPC_QUICKSAND, *target))
- quicksand->SetUInt32Value(UNIT_CREATED_BY_SPELL, SPELL_SUMMON_QUICKSAND);
+ quicksand->SetCreatedBySpell(SPELL_SUMMON_QUICKSAND);
events.ScheduleEvent(EVENT_QUICKSAND, 10000, 0, PHASE_DISPERSE);
break;
}
@@ -293,8 +293,8 @@ public:
{
if (Unit* ptah = GetCaster())
{
- ptah->SetFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31));
- ptah->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ ptah->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31));
+ ptah->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
}
}
@@ -302,8 +302,8 @@ public:
{
if (Unit* ptah = GetCaster())
{
- ptah->RemoveFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31));
- ptah->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ ptah->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31));
+ ptah->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
}
}
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
index b16a15b0507..bfd043ea9ef 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
@@ -131,7 +131,7 @@ public:
DoCast(me, SPELL_TELEPORT);
DoCast(me, SPELL_SHIELD_OF_LIGHT);
- me->SetFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_UNK_31));
+ me->AddUnitFlag(UNIT_FLAG_UNK_31);
DoCastAOE(SPELL_ACTIVATE_BEACONS);
@@ -357,7 +357,7 @@ class spell_anhuur_activate_beacons : public SpellScriptLoader
void Activate(SpellEffIndex index)
{
PreventHitDefaultEffect(index);
- GetHitGObj()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ GetHitGObj()->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
index 737f4153fc1..f538da49848 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
@@ -84,7 +84,7 @@ public:
{
//Become visible again
me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//Noxxion model
me->SetDisplayId(11172);
Invisible = false;
@@ -124,7 +124,7 @@ public:
//me->m_canMove = true;
me->InterruptNonMeleeSpells(false);
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
// Invisible Model
me->SetDisplayId(11686);
SummonAdds(me->GetVictim());
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
index 48dbac93455..8c63c588727 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
@@ -230,7 +230,7 @@ public:
case 9:
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
if (Creature* trigger = ObjectAccessor::GetCreature(*me, triggerGUID))
me->Kill(trigger);
me->SetReactState(REACT_AGGRESSIVE);
@@ -248,7 +248,7 @@ public:
case 10:
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetFacingTo(me->GetOrientation() + float(M_PI), true);
if (Creature * trigger = me->SummonCreature(NPC_TRIGGER, MiddleRoomLocation, TEMPSUMMON_CORPSE_DESPAWN))
triggerGUID = trigger->GetGUID();
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
index f56a67c2046..17000ec1477 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
@@ -71,7 +71,7 @@ public:
case GO_GONG:
goGongGUID = gameObject->GetGUID();
if (GetBossState(DATA_TUTEN_KASH) == DONE)
- gameObject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ gameObject->AddFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_IDOL_OVEN_FIRE:
case GO_IDOL_CUP_FIRE:
@@ -114,7 +114,7 @@ public:
case IN_PROGRESS:
{
if (GameObject* go = instance->GetGameObject(goGongGUID))
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
switch (gongWave)
{
@@ -148,7 +148,7 @@ public:
{
fiendsKilled = 0;
if (GameObject* go = instance->GetGameObject(goGongGUID))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case NPC_TOMB_REAVER:
@@ -156,7 +156,7 @@ public:
{
reaversKilled = 0;
if (GameObject* go = instance->GetGameObject(goGongGUID))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index 2ca11c6508b..080373b1197 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -107,7 +107,7 @@ public:
channeling = false;
eventProgress = 0;
spawnerCount = 0;
- me->SetFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
}
}
@@ -136,7 +136,7 @@ public:
{
eventInProgress = true;
Talk(SAY_QUEST_ACCEPTED);
- me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_ESCORT);
me->GetMotionMaster()->MovePath(PATH_ESCORT, false);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
index 8cd91b4e8f5..ab0a57bfbff 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
@@ -58,7 +58,7 @@ public:
switch (go->GetEntry())
{
case 21099: DoorWardGUID = go->GetGUID(); break;
- case 20920: go->SetUInt32Value(GAMEOBJECT_FACTION, 0); break; // big fat fugly hack
+ case 20920: go->SetFaction(0); break; // big fat fugly hack
}
}
@@ -67,7 +67,7 @@ public:
if (WardKeeperDeath == WARD_KEEPERS_NR)
if (GameObject* go = instance->GetGameObject(DoorWardGUID))
{
- go->SetUInt32Value(GAMEOBJECT_FLAGS, 33);
+ go->AddFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NODESPAWN));
go->SetGoState(GO_STATE_ACTIVE);
}
}
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index 4b345425881..16bccda22a1 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -104,7 +104,7 @@ public:
break;
case 45:
Talk(SAY_WIN, player);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
player->GroupEventHappens(QUEST_WILLIX_THE_IMPORTER, me);
break;
case 46:
@@ -177,7 +177,7 @@ public:
{
go->SetRespawnTime(5 * MINUTE);
go->Refresh();
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ go->RemoveFlag(GO_FLAG_INTERACT_COND);
}
IsMovementActive = false;
@@ -196,7 +196,7 @@ public:
tubbersInRange.remove_if([](GameObject* go)
{
- return go->isSpawned() || !go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ return go->isSpawned() || !go->HasFlag(GO_FLAG_INTERACT_COND);
});
tubbersInRange.sort(Trinity::ObjectDistanceOrderPred(me));
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index 4f609ce0991..2c1d743ff75 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -93,7 +93,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
instance->SetData(DATA_BUG_TRIO_DEATH, 1);
}
@@ -187,7 +187,7 @@ public:
{
instance->SetData(DATA_VEM_DEATH, 0);
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
instance->SetData(DATA_BUG_TRIO_DEATH, 1);
}
@@ -281,7 +281,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
instance->SetData(DATA_BUG_TRIO_DEATH, 1);
for (uint8 i = 0; i < 10; ++i)
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 892d2b8dc64..fe80c09eb10 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -210,7 +210,7 @@ public:
//Reset flags
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetVisible(true);
//Reset Phase
@@ -421,7 +421,7 @@ public:
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
//Reset to normal emote state and prevent select and attack
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
//Remove Target field
me->SetTarget(ObjectGuid::Empty);
@@ -527,7 +527,7 @@ public:
//Reset flags
me->RemoveAurasDueToSpell(SPELL_TRANSFORM);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetVisible(false);
instance->SetData(DATA_CTHUN_PHASE, PHASE_NOT_STARTED);
@@ -641,7 +641,7 @@ public:
me->SetFullHealth();
me->SetVisible(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
//Emerging phase
//AttackStart(ObjectAccessor::GetUnit(*me, HoldpPlayer));
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
index 0215634ee99..7b1f448b6fd 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
@@ -111,7 +111,7 @@ public:
{
//Cast
me->HandleEmoteCommand(EMOTE_ONESHOT_SUBMERGE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(35);
DoCast(me, SPELL_DIRTMOUND_PASSIVE);
@@ -134,7 +134,7 @@ public:
//Back_Timer
if (Submerged && Back_Timer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
DoCastVictim(SPELL_GROUND_RUPTURE);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index f296d78878a..31c00a7aaa0 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -126,7 +126,7 @@ struct boss_twinemperorsAI : public ScriptedAI
if (ohealth <= 0)
{
pOtherBoss->setDeathState(JUST_DIED);
- pOtherBoss->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ pOtherBoss->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
}
}
@@ -138,7 +138,7 @@ struct boss_twinemperorsAI : public ScriptedAI
{
pOtherBoss->SetHealth(0);
pOtherBoss->setDeathState(JUST_DIED);
- pOtherBoss->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ pOtherBoss->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
ENSURE_AI(boss_twinemperorsAI, pOtherBoss->AI())->DontYellWhenDead = true;
}
if (!DontYellWhenDead) // I hope AI is not threaded
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
index a8eb3f0b3b2..c4b7538d988 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
@@ -99,7 +99,7 @@ public:
creature->AI()->Talk(SAY_MAKE_PREPARATIONS);
creature->setFaction(250);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
@@ -144,7 +144,7 @@ public:
currentEvent = 0;
eventProgress = 0;
me->setActive(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
uint32 eventTimer;
diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
index 070f68f1897..d92f0ab0574 100644
--- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
@@ -98,7 +98,7 @@ public:
switch (waypointId)
{
case 0:
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20))
Cage->SetGoState(GO_STATE_ACTIVE);
break;
@@ -246,7 +246,7 @@ public:
if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_NAGA_BRAZIER, INTERACTION_DISTANCE*2))
{
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
SetEscortPaused(true);
}
break;
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index f1ddefb28f7..31c97ea5305 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -86,8 +86,8 @@ public:
DoCastSelf(SPELL_IRRIDATION, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
me->SetHealth(me->CountPctFromMaxHealth(10));
me->SetStandState(UNIT_STAND_STATE_SLEEP);
}
@@ -116,7 +116,7 @@ public:
_canAskForHelp = false;
_canUpdateEvents = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
_playerGUID = caster->GetGUID();
@@ -203,7 +203,7 @@ public:
{
Initialize();
NormFaction = creature->getFaction();
- NpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS);
+ NpcFlags = NPCFlags(creature->m_unitData->NpcFlags[0]);
}
void Initialize()
@@ -222,7 +222,7 @@ public:
Initialize();
me->setFaction(NormFaction);
- me->SetUInt32Value(UNIT_NPC_FLAGS, NpcFlags);
+ me->SetNpcFlags(NpcFlags);
}
void EnterCombat(Unit* who) override
@@ -265,7 +265,7 @@ public:
private:
uint32 NormFaction;
- uint32 NpcFlags;
+ NPCFlags NpcFlags;
uint32 DynamiteTimer;
uint32 EmoteTimer;
bool IsTreeEvent;
@@ -292,7 +292,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
me->SetHealth(me->CountPctFromMaxHealth(15));
switch (urand(0, 1))
{
@@ -413,7 +413,7 @@ public:
_events.ScheduleEvent(EVENT_STAND, Seconds(2));
break;
case EVENT_STAND: // Remove kneel standstate. Using a separate delayed event because it causes unwanted delay before starting waypoint movement.
- me->SetByteValue(UNIT_FIELD_BYTES_1, 0, 0);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
break;
case EVENT_TALK_END:
if (Player* player = ObjectAccessor::GetPlayer(*me, _player))
@@ -510,7 +510,7 @@ public:
{
SparkGUID = Spark->GetGUID();
Spark->setActive(true);
- Spark->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ Spark->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
SayTimer = 8000;
}
@@ -640,7 +640,7 @@ public:
{
if (Creature* ravager = go->FindNearestCreature(NPC_DEATH_RAVAGER, 5.0f, true))
{
- ravager->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ ravager->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
ravager->SetReactState(REACT_AGGRESSIVE);
ravager->AI()->AttackStart(player);
}
@@ -674,7 +674,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
}
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 303d2192fb8..13fe48efc7f 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -631,7 +631,7 @@ public:
_explosivesGuids.clear();
if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS))
{
- sironas->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ sironas->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetFacingToObject(sironas);
}
_moveTimer = 1 * IN_MILLISECONDS;
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index d972cd9d0fe..eb2aab5c353 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -94,7 +94,7 @@ public:
}
else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP)
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveIdle();
diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
index 6f211b6865c..7932f19317a 100644
--- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
+++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
@@ -203,7 +203,7 @@ public:
return;
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
SetCombatMovement(true);
if (me->IsInCombat())
diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp
index 7482c2f92b8..ddc37d07c60 100644
--- a/src/server/scripts/Kalimdor/zone_felwood.cpp
+++ b/src/server/scripts/Kalimdor/zone_felwood.cpp
@@ -63,10 +63,10 @@ public:
}
else
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
me->CastSpell(me, SPELL_STAND);
me->GetMotionMaster()->MoveRandom(8.0f);
events.ScheduleEvent(EVENT_CHECK_OOC, 20000);
@@ -234,7 +234,7 @@ public: spell_ruumbos_silly_dance() : SpellScriptLoader("spell_ruumbos_silly_dan
{
if (Player* player = GetHitPlayer())
{
- player->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DANCE);
+ player->SetEmoteState(EMOTE_STATE_DANCE);
if (player->GetMapId() == MAP_KALIMDOR)
{
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index 7a22f94cac6..70b5574f95f 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -52,7 +52,7 @@ public:
{
npc_omenAI(Creature* creature) : ScriptedAI(creature)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->GetMotionMaster()->MovePoint(1, 7549.977f, -2855.137f, 456.9678f);
}
@@ -66,7 +66,7 @@ public:
if (pointId == 1)
{
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (Player* player = me->SelectNearestPlayer(40.0f))
AttackStart(player);
}
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index 70b99347cf8..7b7f94a63f3 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -360,7 +360,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void HandleAnimation()
@@ -844,7 +844,7 @@ public:
if (Creature* spawn = me->SummonCreature(WavesInfo[WaveCount].CreatureId, SpawnLocation[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, desptimer))
{
if (spawn->GetEntry() == NPC_KALDOREI_INFANTRY)
- spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427 + rand32() % 4);
+ spawn->SetDisplayId(15427 + rand32() % 4);
if (i >= 30) WaveCount = 1;
if (i >= 33) WaveCount = 2;
if (i >= 45) WaveCount = 3;
@@ -978,25 +978,25 @@ public:
if (Merithra)
{
- Merithra->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Merithra->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Merithra->SetUInt32Value(UNIT_FIELD_DISPLAYID, MERITHRA_NIGHT_ELF_FORM);
+ Merithra->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ Merithra->SetStandState(UNIT_STAND_STATE_STAND);
+ Merithra->SetDisplayId(MERITHRA_NIGHT_ELF_FORM);
Merithra->setFaction(35);
}
if (Caelestrasz)
{
- Caelestrasz->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Caelestrasz->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Caelestrasz->SetUInt32Value(UNIT_FIELD_DISPLAYID, CAELESTRASZ_NIGHT_ELF_FORM);
+ Caelestrasz->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ Caelestrasz->SetStandState(UNIT_STAND_STATE_STAND);
+ Caelestrasz->SetDisplayId(CAELESTRASZ_NIGHT_ELF_FORM);
Caelestrasz->setFaction(35);
}
if (Arygos)
{
- Arygos->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Arygos->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Arygos->SetUInt32Value(UNIT_FIELD_DISPLAYID, ARYGOS_GNOME_FORM);
+ Arygos->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ Arygos->SetStandState(UNIT_STAND_STATE_STAND);
+ Arygos->SetDisplayId(ARYGOS_GNOME_FORM);
Arygos->setFaction(35);
}
@@ -1224,7 +1224,7 @@ class go_wind_stone : public GameObjectScript
summons->AI()->Talk(YELL_ROYAL_AGGRO);
break;
}
- summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summons->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
summons->SendMeleeAttackStart(player);
summons->CombatStart(player);
}
diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp
index 16ea0c3d5b4..c071bfd0088 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -321,8 +321,8 @@ public:
{
creature->setFaction(113);
creature->SetFullHealth();
- creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ creature->SetStandState(UNIT_STAND_STATE_STAND);
+ creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
creature->AI()->Talk(SAY_OOX_START);
if (npc_escortAI* pEscortAI = CAST_AI(npc_OOX17::npc_OOX17AI, creature->AI()))
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index 5a6380e8289..1090d3e7c21 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -421,8 +421,8 @@ public:
if (!creature)
continue;
creature->setFaction(35);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
AffrayChallenger[i] = creature->GetGUID();
}
@@ -458,8 +458,8 @@ public:
Creature* creature = ObjectAccessor::GetCreature(*me, AffrayChallenger[Wave]);
if (creature && (creature->IsAlive()))
{
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
creature->setFaction(14);
creature->AI()->AttackStart(warrior);
@@ -490,8 +490,8 @@ public:
}
else if (creature) // Makes BIG WILL attackable.
{
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
creature->setFaction(14);
creature->AI()->AttackStart(warrior);
diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp
index 6c2548e3889..224321fc03b 100644
--- a/src/server/scripts/Kalimdor/zone_winterspring.cpp
+++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp
@@ -362,13 +362,13 @@ public:
{
if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_ELUNE_ALTAR, 10.0f))
{
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
me->SetFacingToObject(go);
_altarGUID = go->GetGUID();
}
}
else if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_ELUNE_FIRE, 10.0f))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
// Yell and set escort to pause
Talk(SAY_REACH_TORCH);
@@ -617,7 +617,7 @@ public:
if (npc_ranshalla::npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshalla::npc_ranshallaAI*>(ranshalla->AI()))
escortAI->DoContinueEscort(isAltar);
}
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
return false;
}
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
index 000b66db881..66ecf0a0fc9 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
@@ -170,7 +170,7 @@ class boss_corborus : public CreatureScript
// Face Corborus to players and set new home position
me->SetFacingTo(3.176499f);
me->SetHomePosition(1154.55f, 878.843f, 284.963f, 3.176499f);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
// Despawn Millhouse and all trash
instance->SetData(DATA_MILLHOUSE_EVENT_DESPAWN, 0);
@@ -192,7 +192,7 @@ class boss_corborus : public CreatureScript
events.RescheduleEvent(EVENT_SUBMERGE, 100000);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_CLEAR_ALL_DEBUFFS);
me->AttackStop();
@@ -217,7 +217,7 @@ class boss_corborus : public CreatureScript
break;
case EVENT_EMERGE:
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_EMERGE);
events.ScheduleEvent(EVENT_ATTACK, 2500);
break;
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp
index fa9d74539aa..d97a7126c26 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp
@@ -118,7 +118,7 @@ class boss_slabhide : public CreatureScript
me->setActive(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetReactState(REACT_PASSIVE);
instance->SetData(DATA_SLABHIDE_INTRO, NOT_STARTED);
_isFlying = false;
@@ -134,7 +134,7 @@ class boss_slabhide : public CreatureScript
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetReactState(REACT_AGGRESSIVE);
_isFlying = false;
}
@@ -197,11 +197,11 @@ class boss_slabhide : public CreatureScript
case POINT_SLABHIDE_INTRO_LAND:
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetHover(false);
me->SetHomePosition(SlabhideIntroLandPos);
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_AGGRESSIVE);
instance->SetData(DATA_SLABHIDE_INTRO, DONE);
break;
@@ -261,7 +261,7 @@ class boss_slabhide : public CreatureScript
case EVENT_STALACTITE:
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetHover(true);
DoCast(me, SPELL_STALACTITE_SUMMON);
@@ -278,7 +278,7 @@ class boss_slabhide : public CreatureScript
case EVENT_ATTACK:
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetHover(false);
events.ScheduleEvent(EVENT_LAVA_FISSURE, urand(6000, 8000));
diff --git a/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp b/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp
index 9853fd5f72e..f89c50f834d 100644
--- a/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp
@@ -213,7 +213,7 @@ class instance_stonecore : public InstanceMapScript
return;
teleporter->CastSpell(teleporter, SPELL_TELEPORTER_ACTIVE_VISUAL, true);
- teleporter->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ teleporter->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
}
GuidVector millhouseTrashGUIDs;
diff --git a/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp b/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp
index 94c04ecd768..32b2d4b1645 100644
--- a/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp
@@ -160,7 +160,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript
break;
}
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
}
void MovementInform(uint32 type, uint32 pointId) override
@@ -178,7 +178,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript
switch (pointId)
{
case POINT_MILLHOUSE_GROUP_2:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
me->SetReactState(REACT_AGGRESSIVE);
if (Creature* worldtrigger = me->FindNearestCreature(NPC_WORLDTRIGGER, 200.0f))
me->SetFacingToObject(worldtrigger);
@@ -187,7 +187,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript
events.ScheduleEvent(EVENT_READY_FOR_COMBAT, 10000);
break;
case POINT_MILLHOUSE_GROUP_3:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
me->SetReactState(REACT_AGGRESSIVE);
me->SetFacingTo(5.931499f);
DoCast(me, SPELL_ANCHOR_HERE);
@@ -236,7 +236,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript
events.ScheduleEvent(EVENT_FEAR, 18000);
break;
case EVENT_READY_FOR_COMBAT:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
me->SetReactState(REACT_AGGRESSIVE);
ScheduleEvents();
break;
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index 20dfacc4f49..0946b9fda7b 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -100,7 +100,7 @@ public:
void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
damage = 0;
if ((GetHealthPct(0) >= 66 && GetHealthPct(damage) < 66)||
@@ -124,7 +124,7 @@ public:
// Channel visual
DoCast(me, INSANITY_VISUAL, true);
// Unattackable
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(true, UNIT_STATE_STUNNED);
}
@@ -182,7 +182,7 @@ public:
// Cleanup
Summons.DespawnAll();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
}
@@ -245,7 +245,7 @@ public:
return;
insanityHandled = 0;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
me->RemoveAurasDueToSpell(INSANITY_VISUAL);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index f015da7d501..f04dc4f3eef 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -206,7 +206,7 @@ public:
me->GetMotionMaster()->MovePoint(1, JedogaPosition[1]);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
@@ -235,7 +235,7 @@ public:
{
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->AttackStop();
me->RemoveAllAuras();
@@ -367,14 +367,14 @@ public:
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
}
else
{
DoCast(me, SPELL_SPHERE_VISUAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
}
}
@@ -453,7 +453,7 @@ public:
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
float distance = me->GetDistance(JedogaPosition[1]);
@@ -475,14 +475,14 @@ public:
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
}
if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS && !me->HasAura(SPELL_SPHERE_VISUAL))
{
DoCast(me, SPELL_SPHERE_VISUAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
}
}
bCheckTimer = 2*IN_MILLISECONDS;
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index c89ae0d255a..cae57b8f64e 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -264,7 +264,7 @@ class boss_prince_taldaram : public CreatureScript
void RemovePrison()
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation());
DoCast(SPELL_HOVER_FALL);
@@ -395,7 +395,7 @@ class go_prince_taldaram_sphere : public GameObjectScript
Creature* PrinceTaldaram = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_PRINCE_TALDARAM));
if (PrinceTaldaram && PrinceTaldaram->IsAlive())
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
switch (go->GetEntry())
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
index 892907610ff..9ff22bfc309 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
@@ -88,19 +88,19 @@ class instance_ahnkahet : public InstanceMapScript
if (SpheresState[0])
{
go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
else
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_SPHERE_2:
if (SpheresState[1])
{
go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
else
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_PRINCE_TALDARAM_GATE:
AddDoor(go, true);
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 5025edd5eeb..a24b226cd86 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -122,7 +122,7 @@ public:
void Reset() override
{
BossAI::Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOTTA_GO_START_EVENT);
_nextSubmerge = 75;
_petCount = 0;
@@ -334,7 +334,7 @@ public:
{
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
me->RemoveAurasDueToSpell(SPELL_IMPALE_AURA);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
DoCastSelf(SPELL_EMERGE);
events.SetPhase(PHASE_EMERGE);
events.ScheduleEvent(EVENT_POUND, randtime(Seconds(13), Seconds(18)), 0, PHASE_EMERGE);
@@ -365,7 +365,7 @@ public:
{
if (spell->Id == SPELL_SUBMERGE)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM);
DoCastSelf(SPELL_IMPALE_AURA, true);
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index 7b87a424d76..ee98c275463 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -280,8 +280,8 @@ public:
void Initialize()
{
- me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 9.0f);
- me->SetFloatValue(UNIT_FIELD_COMBATREACH, 9.0f);
+ me->SetBoundingRadius(9.0f);
+ me->SetCombatReach(9.0f);
_enteredCombat = false;
_doorsWebbed = false;
_lastPlayerCombatState = false;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index b50f44ba5d9..85f0aa6a2e1 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -224,8 +224,7 @@ public:
tenebron->SetHomePosition(3239.07f, 657.235f, 86.8775f, 4.74729f);
if (tenebron->IsAlive())
{
- if (tenebron->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- tenebron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ tenebron->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
tenebron->GetMotionMaster()->MoveTargetedHome();
}
else
@@ -244,8 +243,7 @@ public:
shadron->SetHomePosition(3363.06f, 525.28f, 98.362f, 4.76475f);
if (shadron->IsAlive())
{
- if (shadron->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- shadron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ shadron->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
shadron->GetMotionMaster()->MoveTargetedHome();
}
else
@@ -264,8 +262,7 @@ public:
vesperon->SetHomePosition(3145.68f, 520.71f, 89.7f, 4.64258f);
if (vesperon->IsAlive())
{
- if (vesperon->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- vesperon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ vesperon->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
vesperon->GetMotionMaster()->MoveTargetedHome();
}
else
@@ -301,8 +298,7 @@ public:
}
fetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, TenebronPositions[0]);
- if (!fetchTene->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- fetchTene->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ fetchTene->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
@@ -319,8 +315,7 @@ public:
}
fetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, ShadronPositions[0]);
- if (!fetchShad->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- fetchShad->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ fetchShad->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
@@ -337,8 +332,7 @@ public:
}
fetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, VesperonPositions[0]);
- if (!fetchVesp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- fetchVesp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ fetchVesp->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
@@ -354,8 +348,7 @@ public:
{
temp->SetWalk(false);
- if (temp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ temp->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
uint8 textId = 0;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index 3ca574d03c5..c90c5f6be55 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -177,8 +177,7 @@ struct dummy_dragonAI : public ScriptedAI
void Reset() override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
events.Reset();
Initialize();
@@ -876,7 +875,7 @@ public:
me->SetReactState(REACT_PASSIVE);
events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100);
events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1000);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
}
void UpdateAI(uint32 diff) override
@@ -933,7 +932,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->AddAura(46265, me); // Wrong, can't find proper visual
me->AddAura(69422, me);
events.ScheduleEvent(EVENT_VOID_BLAST, 5000);
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index de81e1dfd15..498c82e0c7f 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -99,7 +99,7 @@ class boss_general_zarithrian : public CreatureScript
{
_Reset();
if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 0e9baeec5bb..d9bb5f4f359 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -287,7 +287,7 @@ class boss_halion : public CreatureScript
Talk(SAY_PHASE_TWO);
me->CastStop();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_TWILIGHT_PHASING);
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
@@ -411,7 +411,7 @@ class boss_twilight_halion : public CreatureScript
me->SetHealth(halion->GetHealth());
PhasingHandler::AddPhase(me, 174, false);
me->SetReactState(REACT_DEFENSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
events.ScheduleEvent(EVENT_TAIL_LASH, Seconds(12));
events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, Seconds(15));
}
@@ -669,7 +669,7 @@ class npc_halion_controller : public CreatureScript
continue;
halion->RemoveAurasDueToSpell(SPELL_TWILIGHT_PHASING);
- halion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ halion->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
// Summon Twilight portals
@@ -1755,7 +1755,7 @@ class spell_halion_twilight_cutter : public SpellScriptLoader
return;
Unit* caster = GetCaster();
- DynamicFieldStructuredView<ObjectGuid> channelObjects = caster->GetChannelObjects();
+ auto const& channelObjects = caster->m_unitData->ChannelObjects;
if (Unit* channelTarget = (channelObjects.size() == 1 ? ObjectAccessor::GetUnit(*caster, *channelObjects.begin()) : nullptr))
{
unitList.remove_if(TwilightCutterSelector(caster, channelTarget));
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
index 4d8449b62df..824e2754307 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
@@ -120,7 +120,7 @@ class boss_saviana_ragefire : public CreatureScript
case POINT_LAND_GROUND:
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetReactState(REACT_AGGRESSIVE);
events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE);
events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE);
@@ -163,7 +163,7 @@ class boss_saviana_ragefire : public CreatureScript
{
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
Position pos;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index 5cee0b32d5d..f3fda6385f8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -241,7 +241,7 @@ class instance_ruby_sanctum : public InstanceMapScript
{
HandleGameObject(FlameWallsGUID, true);
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
}
break;
}
@@ -251,7 +251,7 @@ class instance_ruby_sanctum : public InstanceMapScript
{
HandleGameObject(FlameWallsGUID, true);
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
}
break;
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index 9d94cec4f4c..532845155bf 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -72,7 +72,7 @@ class npc_xerestrasza : public CreatureScript
void Reset() override
{
_events.Reset();
- me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
}
void DoAction(int32 action) override
@@ -131,7 +131,7 @@ class npc_xerestrasza : public CreatureScript
Talk(SAY_XERESTRASZA_EVENT_6);
break;
case EVENT_XERESTRASZA_EVENT_7:
- me->SetFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
Talk(SAY_XERESTRASZA_EVENT_7);
me->setActive(false);
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
index 960c27a23d8..d88dc77556b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -162,7 +162,7 @@ public:
Initialize();
instance = creature->GetInstanceScript();
creature->SetReactState(REACT_PASSIVE);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void Initialize()
@@ -273,7 +273,7 @@ public:
instance = creature->GetInstanceScript();
creature->SetReactState(REACT_PASSIVE);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->RestoreFaction();
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index f151cfe067b..ac7aef3eb5e 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -111,7 +111,7 @@ void AggroAllPlayers(Creature* temp)
if (player->IsAlive())
{
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
temp->SetReactState(REACT_AGGRESSIVE);
temp->SetInCombatWith(player);
player->SetInCombatWith(temp);
@@ -330,7 +330,7 @@ public:
me->SetReactState(REACT_PASSIVE);
// THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void Initialize()
@@ -467,7 +467,7 @@ public:
me->SetReactState(REACT_PASSIVE);
// THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void Initialize()
@@ -610,7 +610,7 @@ public:
me->SetReactState(REACT_PASSIVE);
// THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void Initialize()
@@ -761,7 +761,7 @@ public:
me->SetReactState(REACT_PASSIVE);
// THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void Initialize()
@@ -921,7 +921,7 @@ public:
me->SetReactState(REACT_PASSIVE);
// THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void Initialize()
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
index 3acc5d8a649..7e184dfd4b1 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
@@ -184,7 +184,7 @@ public:
if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
{
pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
- pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000);
}
}
@@ -197,7 +197,7 @@ public:
if (Creature* pBoss = instance->GetCreature(uiArgentChampionGUID))
{
pBoss->GetMotionMaster()->MovePoint(0, 746.88f, 618.74f, 411.06f);
- pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pBoss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
pBoss->SetReactState(REACT_AGGRESSIVE);
}
}
@@ -207,7 +207,7 @@ public:
if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
{
pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
- pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000);
}
break;
@@ -216,7 +216,7 @@ public:
if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
{
pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
- pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000);
}
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index 7101642a340..e5cc3182d5d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -87,8 +87,8 @@ public:
uiTimer = 0;
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetGrandChampionsForEncounter();
SetArgentChampion();
@@ -346,7 +346,7 @@ public:
void StartEncounter()
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
if (instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED)
{
@@ -383,7 +383,7 @@ public:
if (player->IsAlive())
{
temp->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ temp->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
temp->SetReactState(REACT_AGGRESSIVE);
temp->SetInCombatWith(player);
player->SetInCombatWith(temp);
@@ -429,7 +429,7 @@ public:
{
if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED)
{
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
summon->SetReactState(REACT_PASSIVE);
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 35f965905eb..b3b5279c835 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -194,7 +194,7 @@ class boss_anubarak_trial : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_FROST_SPHERE, 20*IN_MILLISECONDS);
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
// clean up spawned Frost Spheres
std::list<Creature*> FrostSphereList;
me->GetCreatureListWithEntryInGrid(FrostSphereList, NPC_FROST_SPHERE, 150.0f);
@@ -274,7 +274,7 @@ class boss_anubarak_trial : public CreatureScript
{
_EnterCombat();
Talk(SAY_AGGRO);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
// Despawn Scarab Swarms neutral
EntryCheckPredicate pred(NPC_SCARAB);
@@ -329,7 +329,7 @@ class boss_anubarak_trial : public CreatureScript
{
DoCast(me, SPELL_SUBMERGE_ANUBARAK);
DoCast(me, SPELL_CLEAR_ALL_DEBUFFS);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
Talk(EMOTE_BURROWER);
events.SetPhase(PHASE_SUBMERGED);
events.ScheduleEvent(EVENT_PURSUING_SPIKE, 2*IN_MILLISECONDS, 0, PHASE_SUBMERGED);
@@ -366,7 +366,7 @@ class boss_anubarak_trial : public CreatureScript
DoCast(SPELL_SPIKE_TELE);
summons.DespawnEntry(NPC_SPIKE);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
DoCast(me, SPELL_EMERGE_ANUBARAK);
Talk(EMOTE_EMERGE);
events.SetPhase(PHASE_MELEE);
@@ -576,14 +576,14 @@ class npc_nerubian_burrower : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_EFFECT);
DoCast(me, SPELL_EMERGE_EFFECT);
DoCast(me, SPELL_AWAKENED);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
else
{
if (!me->HasAura(SPELL_PERMAFROST_HELPER))
{
DoCast(me, SPELL_SUBMERGE_EFFECT);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_PERSISTENT_DIRT, true);
}
}
@@ -635,7 +635,7 @@ class npc_frost_sphere : public CreatureScript
{
// we are close to the ground
me->GetMotionMaster()->MoveIdle();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
DoCast(SPELL_PERMAFROST_MODEL);
DoCast(SPELL_PERMAFROST);
@@ -645,7 +645,7 @@ class npc_frost_sphere : public CreatureScript
{
// we are in air
me->GetMotionMaster()->MoveIdle();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//At hit the ground
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index a417c11468c..ccaca4608e0 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -488,7 +488,7 @@ class boss_toc_champion_controller : public CreatureScript
{
_summons.Summon(champion);
champion->SetReactState(REACT_PASSIVE);
- champion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ champion->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
if (playerTeam == ALLIANCE)
{
champion->SetHomePosition(vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ(), 0);
@@ -519,7 +519,7 @@ class boss_toc_champion_controller : public CreatureScript
if (Creature* summon = ObjectAccessor::GetCreature(*me, *i))
{
summon->SetReactState(REACT_AGGRESSIVE);
- summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ summon->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
}
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index eac01bd4098..cad0ca4639f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -119,7 +119,7 @@ class boss_jaraxxus : public CreatureScript
_JustReachedHome();
instance->SetBossState(BOSS_JARAXXUS, FAIL);
DoCast(me, SPELL_JARAXXUS_CHAINS);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
void KilledUnit(Unit* who) override
@@ -227,7 +227,7 @@ class npc_legion_flame : public CreatureScript
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetInCombatWithZone();
DoCast(SPELL_LEGION_FLAME_EFFECT);
}
@@ -265,9 +265,9 @@ class npc_infernal_volcano : public CreatureScript
me->SetReactState(REACT_PASSIVE);
if (!IsHeroic())
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
else
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
_summons.DespawnAll();
}
@@ -369,9 +369,9 @@ class npc_nether_portal : public CreatureScript
me->SetReactState(REACT_PASSIVE);
if (!IsHeroic())
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
else
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
_summons.DespawnAll();
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index cd7da39a2c0..d582fcd3f6f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -205,7 +205,7 @@ class boss_gormok : public CreatureScript
{
case 0:
instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone();
break;
@@ -276,7 +276,7 @@ class boss_gormok : public CreatureScript
if (Unit* snobold = me->GetVehicleKit()->GetPassenger(i))
{
snobold->ExitVehicle();
- snobold->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ snobold->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
snobold->GetAI()->DoAction(ACTION_DISABLE_FIRE_BOMB);
snobold->CastSpell(me, SPELL_JUMP_TO_HAND, true);
break;
@@ -331,7 +331,7 @@ class npc_snobold_vassal : public CreatureScript
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetInCombatWithZone();
_events.ScheduleEvent(EVENT_CHECK_MOUNT, Seconds(1));
_events.ScheduleEvent(EVENT_FIRE_BOMB, Seconds(5), Seconds(30));
@@ -578,7 +578,7 @@ struct boss_jormungarAI : public BossAI
if (!Enraged && instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL)
{
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
DoCast(SPELL_ENRAGE);
Enraged = true;
Talk(EMOTE_ENRAGE);
@@ -614,7 +614,7 @@ struct boss_jormungarAI : public BossAI
case EVENT_SUMMON_ACIDMAW:
if (Creature* acidmaw = me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN))
{
- acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ acidmaw->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
acidmaw->SetReactState(REACT_AGGRESSIVE);
acidmaw->SetInCombatWithZone();
acidmaw->CastSpell(acidmaw, SPELL_EMERGE);
@@ -648,7 +648,7 @@ struct boss_jormungarAI : public BossAI
me->SetInCombatWithZone();
events.SetPhase(PHASE_SUBMERGED);
events.ScheduleEvent(EVENT_EMERGE, 5*IN_MILLISECONDS, 0, PHASE_SUBMERGED);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+ frand(-40.0f, 40.0f), ToCCommonLoc[1].GetPositionY() + frand(-40.0f, 40.0f), ToCCommonLoc[1].GetPositionZ());
WasMobile = !WasMobile;
}
@@ -660,7 +660,7 @@ struct boss_jormungarAI : public BossAI
me->SetDisplayId(ModelMobile);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_0);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
// if the worm was mobile before submerging, make him stationary now
if (WasMobile)
@@ -771,7 +771,7 @@ class boss_dreadscale : public CreatureScript
{
case 0:
instance->DoCloseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone();
break;
@@ -944,7 +944,7 @@ class boss_icehowl : public CreatureScript
break;
case 2:
instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone();
break;
@@ -1045,7 +1045,7 @@ class boss_icehowl : public CreatureScript
me->SetTarget(_trampleTargetGUID);
_trampleCast = false;
SetCombatMovement(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveIdle();
@@ -1134,7 +1134,7 @@ class boss_icehowl : public CreatureScript
Talk(EMOTE_TRAMPLE_FAIL);
}
_movementStarted = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
SetCombatMovement(true);
me->GetMotionMaster()->MovementExpired();
me->GetMotionMaster()->Clear();
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 6768037109b..886cc72fb20 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -169,7 +169,7 @@ struct boss_twin_baseAI : public BossAI
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_PASSIVE);
me->ModifyAuraState(AuraState, true);
/* Uncomment this once that they are floating above the ground
@@ -195,7 +195,7 @@ struct boss_twin_baseAI : public BossAI
switch (uiId)
{
case 1:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
break;
default:
@@ -237,13 +237,13 @@ struct boss_twin_baseAI : public BossAI
{
if (!pSister->IsAlive())
{
- me->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- pSister->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
+ pSister->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
_JustDied();
}
else
{
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
instance->SetBossState(BOSS_VALKIRIES, SPECIAL);
}
}
@@ -552,7 +552,7 @@ struct npc_unleashed_ballAI : public ScriptedAI
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_PASSIVE);
me->SetDisableGravity(true);
me->SetCanFly(true);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 589f8b0ec1b..888dd891d94 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -248,7 +248,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_CHAMPIONS_KILLED_IN_MINUTE);
DoRespawnGameObject(CrusadersCacheGUID, 7*DAY);
if (GameObject* cache = instance->GetGameObject(CrusadersCacheGUID))
- cache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
EventStage = 3100;
break;
default:
@@ -374,7 +374,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
if (state == DONE || NeedSave)
{
if (Unit* announcer = instance->GetCreature(GetGuidData(NPC_BARRENT)))
- announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ announcer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Save();
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index 6981ac5037c..89339aea9e1 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -188,11 +188,11 @@ class npc_announcer_toc10 : public CreatureScript
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_THRALL, 300.0f))
- pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pAlly->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_PROUDMOORE, 300.0f))
- pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pAlly->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void AttackStart(Unit* /*who*/) override { }
@@ -247,7 +247,7 @@ class npc_announcer_toc10 : public CreatureScript
if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_JARAXXUS)))
{
jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
- jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ jaraxxus->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
jaraxxus->SetReactState(REACT_DEFENSIVE);
jaraxxus->SetInCombatWithZone();
}
@@ -278,7 +278,7 @@ class npc_announcer_toc10 : public CreatureScript
instance->SetData(TYPE_EVENT, 4030);
instance->SetBossState(BOSS_LICH_KING, NOT_STARTED);
}
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
return true;
}
@@ -352,12 +352,12 @@ class boss_lich_king_toc : public CreatureScript
break;
case 5030:
Talk(SAY_STAGE_4_04);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
+ me->SetEmoteState(EMOTE_STATE_TALK);
_updateTimer = 10*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 5040);
break;
case 5040:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
me->GetMotionMaster()->MovePoint(1, LichKingLoc[1]);
_updateTimer = 1*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 0);
@@ -435,7 +435,7 @@ class npc_fizzlebang_toc : public CreatureScript
_instance->SetData(TYPE_EVENT, 1180);
if (Creature* jaraxxus = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(NPC_JARAXXUS)))
{
- jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ jaraxxus->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
jaraxxus->SetReactState(REACT_AGGRESSIVE);
jaraxxus->SetInCombatWithZone();
}
@@ -532,7 +532,7 @@ class npc_fizzlebang_toc : public CreatureScript
Talk(SAY_STAGE_1_04);
if (Creature* jaraxxus = me->SummonCreature(NPC_JARAXXUS, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY(), ToCCommonLoc[1].GetPositionZ(), 5.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME))
{
- jaraxxus->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ jaraxxus->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
jaraxxus->SetReactState(REACT_PASSIVE);
jaraxxus->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY()-10, ToCCommonLoc[1].GetPositionZ());
}
@@ -617,19 +617,19 @@ class npc_tirion_toc : public CreatureScript
switch (_instance->GetData(TYPE_EVENT))
{
case 110:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
+ me->SetEmoteState(EMOTE_ONESHOT_TALK);
Talk(SAY_STAGE_0_01);
_updateTimer = 22*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 120);
break;
case 140:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
+ me->SetEmoteState(EMOTE_ONESHOT_TALK);
Talk(SAY_STAGE_0_02);
_updateTimer = 5*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 150);
break;
case 150:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
if (_instance->GetBossState(BOSS_BEASTS) != DONE)
{
_instance->DoUseDoorOrButton(_instance->GetGuidData(GO_MAIN_GATE_DOOR));
@@ -637,7 +637,7 @@ class npc_tirion_toc : public CreatureScript
if (Creature* gormok = me->SummonCreature(NPC_GORMOK, ToCSpawnLoc[0].GetPositionX(), ToCSpawnLoc[0].GetPositionY(), ToCSpawnLoc[0].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS))
{
gormok->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ());
- gormok->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ gormok->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
gormok->SetReactState(REACT_PASSIVE);
}
}
@@ -658,7 +658,7 @@ class npc_tirion_toc : public CreatureScript
if (Creature* dreadscale = me->SummonCreature(NPC_DREADSCALE, ToCSpawnLoc[1].GetPositionX(), ToCSpawnLoc[1].GetPositionY(), ToCSpawnLoc[1].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN))
{
dreadscale->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ());
- dreadscale->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ dreadscale->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
dreadscale->SetReactState(REACT_PASSIVE);
}
}
@@ -676,7 +676,7 @@ class npc_tirion_toc : public CreatureScript
if (Creature* icehowl = me->SummonCreature(NPC_ICEHOWL, ToCSpawnLoc[0].GetPositionX(), ToCSpawnLoc[0].GetPositionY(), ToCSpawnLoc[0].GetPositionZ(), 5, TEMPSUMMON_DEAD_DESPAWN))
{
icehowl->GetMotionMaster()->MovePoint(2, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ());
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_PASSIVE);
}
}
@@ -904,13 +904,13 @@ class npc_garrosh_toc : public CreatureScript
switch (_instance->GetData(TYPE_EVENT))
{
case 130:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
+ me->SetEmoteState(EMOTE_ONESHOT_TALK);
Talk(SAY_STAGE_0_03h);
_updateTimer = 3*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 132);
break;
case 132:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
_updateTimer = 5*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 140);
break;
@@ -987,13 +987,13 @@ class npc_varian_toc : public CreatureScript
switch (_instance->GetData(TYPE_EVENT))
{
case 120:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
+ me->SetEmoteState(EMOTE_ONESHOT_TALK);
Talk(SAY_STAGE_0_03a);
_updateTimer = 2*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 122);
break;
case 122:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
_updateTimer = 3*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 130);
break;
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 29fc33949bc..270f28fbaf0 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -203,15 +203,13 @@ public:
_bubbled = state;
if (!state)
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (me->HasUnitState(UNIT_STATE_CASTING))
me->CastStop();
}
else
{
- if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCast(SPELL_ARCANE_FIELD);
}
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index c5f3f80c6e9..fa0dc783b99 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -213,7 +213,7 @@ class npc_drakkari_invader : public CreatureScript
if (type == POINT_MOTION_TYPE && pointId == POINT_LANDING)
{
me->Dismount();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
DoCastAOE(SPELL_INVADER_TAUNT);
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
index d435b63a0fc..733cac95fa2 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
@@ -78,7 +78,7 @@ public:
npc_sylvanas_fosAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
void Initialize()
@@ -101,7 +101,7 @@ public:
{
CloseGossipMenuFor(player);
phase = PHASE_INTRO;
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
events.Reset();
events.ScheduleEvent(EVENT_INTRO_1, 1000);
}
@@ -172,7 +172,7 @@ public:
npc_jaina_fosAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
void Initialize()
@@ -195,7 +195,7 @@ public:
{
CloseGossipMenuFor(player);
phase = PHASE_INTRO;
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
events.Reset();
events.ScheduleEvent(EVENT_INTRO_1, 1000);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp
index aff1ab1d1f7..8e415d1c190 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp
@@ -27,7 +27,7 @@ void boss_horAI::Reset()
{
_Reset();
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetReactState(REACT_PASSIVE);
if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
instance->ProcessEvent(NULL, EVENT_DO_WIPE);
@@ -38,7 +38,7 @@ void boss_horAI::DoAction(int32 actionId)
switch (actionId)
{
case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat(me, 150.0f);
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index 7b0effcbb73..ea15628a362 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -385,12 +385,12 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
case 0:
CloseGossipMenuFor(player);
_events.ScheduleEvent(EVENT_START_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
break;
case 1:
CloseGossipMenuFor(player);
_events.ScheduleEvent(EVENT_SKIP_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
break;
default:
break;
@@ -404,7 +404,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
_utherGUID.Clear();
_lichkingGUID.Clear();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
me->SetStandState(UNIT_STAND_STATE_STAND);
_events.ScheduleEvent(EVENT_WALK_INTRO1, 3000);
}
@@ -437,7 +437,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
Talk(SAY_JAINA_INTRO_2);
else
Talk(SAY_SYLVANAS_INTRO_2);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
break;
case EVENT_START_INTRO:
if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_KORELN_LORALEN)))
@@ -633,7 +633,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
}
if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
+ uther->SetEmoteState(EMOTE_STATE_COWER);
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
uther->AI()->Talk(SAY_UTHER_INTRO_A2_9);
else
@@ -878,7 +878,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
{
case 0:
CloseGossipMenuFor(player);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
_events.ScheduleEvent(EVENT_ESCAPE_6, 0);
break;
default:
@@ -941,7 +941,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER);
else
me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation());
break;
@@ -993,7 +993,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
lichking->AI()->AttackStart(me);
}
me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
break;
case EVENT_ESCAPE_1:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE)))
@@ -1018,7 +1018,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE)))
{
lichking->SetReactState(REACT_PASSIVE);
- lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ lichking->AddUnitFlag(UNIT_FLAG_PACIFIED);
}
_events.ScheduleEvent(EVENT_ESCAPE_3, 1500);
@@ -1037,7 +1037,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE)))
{
- lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ lichking->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
lichking->RemoveAllAttackers();
DeleteAllFromThreatList(lichking, me->GetGUID());
@@ -1051,7 +1051,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
case EVENT_ESCAPE_6:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE)))
{
- lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED);
+ lichking->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED));
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
{
@@ -1135,7 +1135,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
else
Talk(SAY_SYLVANAS_ESCAPE_9);
DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
break;
default:
break;
@@ -1933,7 +1933,7 @@ class npc_frostsworn_general : public CreatureScript
{
if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000))
{
- reflection->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ reflection->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
target->CastSpell(reflection, SPELL_CLONE, true);
target->CastSpell(reflection, SPELL_GHOST_VISUAL, true);
reflection->AI()->AttackStart(target);
@@ -2168,7 +2168,7 @@ struct npc_escape_event_trash : public ScriptedAI
DoZoneInCombat(me, 0.0f);
if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ESCAPE_LEADER)))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetInCombatWith(leader);
leader->SetInCombatWith(me);
me->AddThreat(leader, 0.0f);
@@ -2599,7 +2599,7 @@ class npc_quel_delar_sword : public CreatureScript
if (_intro)
_events.ScheduleEvent(EVENT_QUEL_DELAR_INIT, 0);
else
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
}
void EnterCombat(Unit* /*victim*/) override
@@ -2667,7 +2667,7 @@ class npc_quel_delar_sword : public CreatureScript
case EVENT_QUEL_DELAR_FIGHT:
Talk(SAY_QUEL_DELAR_SWORD);
me->GetMotionMaster()->MovePoint(0, QuelDelarMovement[2]);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
break;
default:
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index e2fbef0622b..a9f9c41f830 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -127,7 +127,7 @@ class instance_halls_of_reflection : public InstanceMapScript
case NPC_KORELN:
case NPC_LORALEN:
if (GetBossState(DATA_MARWYN) != DONE)
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ creature->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
KorelnOrLoralenGUID = creature->GetGUID();
break;
case NPC_THE_LICH_KING_INTRO:
@@ -323,7 +323,7 @@ class instance_halls_of_reflection : public InstanceMapScript
bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true);
if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID))
- korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ korelnOrLoralen->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
HandleGameObject(EntranceDoorGUID, true);
HandleGameObject(ImpenetrableDoorGUID, true);
@@ -346,7 +346,7 @@ class instance_halls_of_reflection : public InstanceMapScript
break;
case DONE:
if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID))
- chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+ chest->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN));
DoUseDoorOrButton(CaveInGUID, 15);
@@ -596,7 +596,7 @@ class instance_halls_of_reflection : public InstanceMapScript
if (Creature* temp = instance->GetCreature(guid))
{
temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false);
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
+ temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE));
temp->AI()->DoZoneInCombat(temp, 100.00f);
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 73e9ba9fea5..c788d3a46d3 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -310,7 +310,7 @@ class boss_krick : public CreatureScript
Initialize();
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
Creature* GetIck()
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index 24f378c601d..443578f011c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -152,7 +152,7 @@ class boss_tyrannus : public CreatureScript
events.Reset();
events.SetPhase(PHASE_NONE);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
instance->SetBossState(DATA_TYRANNUS, NOT_STARTED);
}
@@ -168,7 +168,7 @@ class boss_tyrannus : public CreatureScript
void AttackStart(Unit* victim) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (victim && me->Attack(victim, true) && !events.IsInPhase(PHASE_INTRO))
@@ -243,7 +243,7 @@ class boss_tyrannus : public CreatureScript
if (Creature* rimefang = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RIMEFANG)))
rimefang->AI()->DoAction(ACTION_START_RIMEFANG); //set rimefang also infight
events.SetPhase(PHASE_COMBAT);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
DoCast(me, SPELL_FULL_HEAL);
DoZoneInCombat();
@@ -316,7 +316,7 @@ class boss_rimefang : public CreatureScript
Initialize();
me->SetCanFly(true);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void JustReachedHome() override
diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
index aaea98fe0a0..258be1c25ed 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
@@ -108,7 +108,7 @@ class boss_drakkari_colossus : public CreatureScript
if (GetData(DATA_INTRO_DONE))
{
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->RemoveAura(SPELL_FREEZE_ANIM);
}
@@ -140,7 +140,7 @@ class boss_drakkari_colossus : public CreatureScript
me->GetMotionMaster()->MoveIdle();
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
DoCast(me, SPELL_FREEZE_ANIM);
break;
case ACTION_UNFREEZE_COLOSSUS:
@@ -149,7 +149,7 @@ class boss_drakkari_colossus : public CreatureScript
return;
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->RemoveAura(SPELL_FREEZE_ANIM);
me->SetInCombatWithZone();
@@ -163,7 +163,7 @@ class boss_drakkari_colossus : public CreatureScript
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
+ if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
damage = 0;
if (phase == COLOSSUS_PHASE_NORMAL ||
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index 0f6c92a742a..8cceedd3606 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -97,7 +97,7 @@ class instance_gundrak : public InstanceMapScript
if (GetBossState(DATA_SLAD_RAN) == DONE)
{
if (SladRanStatueState == GO_STATE_ACTIVE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
else
go->SetGoState(GO_STATE_ACTIVE);
}
@@ -106,7 +106,7 @@ class instance_gundrak : public InstanceMapScript
if (GetBossState(DATA_MOORABI) == DONE)
{
if (MoorabiStatueState == GO_STATE_ACTIVE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
else
go->SetGoState(GO_STATE_ACTIVE);
}
@@ -115,7 +115,7 @@ class instance_gundrak : public InstanceMapScript
if (GetBossState(DATA_DRAKKARI_COLOSSUS) == DONE)
{
if (DrakkariColossusStatueState == GO_STATE_ACTIVE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
else
go->SetGoState(GO_STATE_ACTIVE);
}
@@ -171,17 +171,17 @@ class instance_gundrak : public InstanceMapScript
case DATA_SLAD_RAN:
if (state == DONE)
if (GameObject* go = GetGameObject(DATA_SLAD_RAN_ALTAR))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case DATA_DRAKKARI_COLOSSUS:
if (state == DONE)
if (GameObject* go = GetGameObject(DATA_DRAKKARI_COLOSSUS_ALTAR))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case DATA_MOORABI:
if (state == DONE)
if (GameObject* go = GetGameObject(DATA_MOORABI_ALTAR))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
@@ -354,7 +354,7 @@ class go_gundrak_altar : public GameObjectScript
bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
if (InstanceScript* instance = go->GetInstanceScript())
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index 4f54a8c7970..1e0f3819115 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -244,7 +244,7 @@ class boss_blood_council_controller : public CreatureScript
for (uint32 bossData : PrincesData)
if (Creature* prince = ObjectAccessor::GetCreature(*me, instance->GetGuidData(bossData)))
{
- prince->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ prince->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
if (bossData == DATA_PRINCE_VALANAR)
prince->SetHealth(prince->GetMaxHealth());
}
@@ -453,7 +453,7 @@ struct BloodPrincesBossAI : public BossAI
summons.DespawnAll();
me->SetCombatPulseDelay(0);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
_isEmpowered = false;
me->SetHealth(_spawnHealth);
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
@@ -536,7 +536,7 @@ struct BloodPrincesBossAI : public BossAI
_isEmpowered = false;
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_PRINCES_CONTROL)))
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
controller->AI()->SetData(DATA_PRINCE_EVADE, 1);
}
}
@@ -562,10 +562,9 @@ struct BloodPrincesBossAI : public BossAI
{
case ACTION_STAND_UP:
me->RemoveAurasDueToSpell(SPELL_FEIGN_DEATH);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
- me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
- me->ForceValuesUpdateAtIndex(UNIT_NPC_FLAGS); // was in sniff. don't ask why
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
+ me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
me->m_Events.AddEvent(new StandUpEvent(me), me->m_Events.CalculateTime(1000));
break;
case ACTION_CAST_INVOCATION:
@@ -814,7 +813,7 @@ class boss_prince_valanar_icc : public CreatureScript
summon->GetPosition(x, y, z);
float ground_Z = summon->GetMap()->GetHeight(summon->GetPhaseShift(), x, y, z, true, 500.0f);
summon->GetMotionMaster()->MovePoint(POINT_KINETIC_BOMB_IMPACT, x, y, ground_Z);
- summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ summon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
break;
}
case NPC_SHOCK_VORTEX:
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index 3f6f1f1e03f..e948356041c 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -212,8 +212,8 @@ class boss_blood_queen_lana_thel : public CreatureScript
player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player);
if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
{
- minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
- minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ minchar->SetEmoteState(EMOTE_ONESHOT_NONE);
+ minchar->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true);
minchar->SetCanFly(false);
minchar->RemoveAllAuras();
minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f);
@@ -245,7 +245,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
else
{
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true);
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
}
}
@@ -260,7 +260,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
{
_killMinchar = false;
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true);
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
}
else
@@ -274,7 +274,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
void JustReachedHome() override
{
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true);
me->SetReactState(REACT_AGGRESSIVE);
_JustReachedHome();
Talk(SAY_WIPE);
@@ -324,7 +324,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
break;
case POINT_GROUND:
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true);
me->SetReactState(REACT_AGGRESSIVE);
if (Unit* victim = me->SelectVictim())
AttackStart(victim);
@@ -406,7 +406,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
break;
}
case EVENT_DELIRIOUS_SLASH:
- if (!_offtankGUID.IsEmpty() && !me->HasByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER))
+ if (!_offtankGUID.IsEmpty() && !(*me->m_unitData->AnimTier & (UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER)))
if (Player* _offtank = ObjectAccessor::GetPlayer(*me, _offtankGUID))
DoCast(_offtank, SPELL_DELIRIOUS_SLASH);
events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000), EVENT_GROUP_NORMAL);
@@ -454,7 +454,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
break;
case EVENT_AIR_START_FLYING:
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true);
me->GetMotionMaster()->MovePoint(POINT_AIR, airPos);
break;
case EVENT_AIR_FLY_DOWN:
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index ff6226372b7..00710f19342 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -295,7 +295,7 @@ class boss_deathbringer_saurfang : public CreatureScript
events.Reset();
events.SetPhase(PHASE_COMBAT);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (!_introDone)
{
DoCast(me, SPELL_GRIP_OF_AGONY);
@@ -323,7 +323,7 @@ class boss_deathbringer_saurfang : public CreatureScript
void AttackStart(Unit* victim) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
+ if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
return;
ScriptedAI::AttackStart(victim);
@@ -333,7 +333,7 @@ class boss_deathbringer_saurfang : public CreatureScript
{
ScriptedAI::EnterEvadeMode(why);
if (_introDone)
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
void JustReachedHome() override
@@ -369,7 +369,7 @@ class boss_deathbringer_saurfang : public CreatureScript
_dead = true;
_JustDied();
_EnterEvadeMode();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
DoCastAOE(SPELL_REMOVE_MARKS_OF_THE_FALLEN_CHAMPION);
DoCast(me, SPELL_ACHIEVEMENT, true);
@@ -462,7 +462,7 @@ class boss_deathbringer_saurfang : public CreatureScript
switch (eventId)
{
case EVENT_INTRO_ALLIANCE_2:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(FACTION_SCOURGE);
Talk(SAY_INTRO_ALLIANCE_2);
break;
@@ -475,7 +475,7 @@ class boss_deathbringer_saurfang : public CreatureScript
DoCast(me, SPELL_GRIP_OF_AGONY);
break;
case EVENT_INTRO_HORDE_2:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(FACTION_SCOURGE);
Talk(SAY_INTRO_HORDE_2);
break;
@@ -489,7 +489,7 @@ class boss_deathbringer_saurfang : public CreatureScript
case EVENT_INTRO_FINISH:
events.SetPhase(PHASE_COMBAT);
_introDone = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case EVENT_SUMMON_BLOOD_BEAST:
for (uint32 i10 = 0; i10 < 2; ++i10)
@@ -663,7 +663,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr)
(*itr)->AI()->SetData(0, x);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_INTRO_HORDE_1);
_events.SetPhase(PHASE_INTRO_H);
_events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18500, 0, PHASE_INTRO_H);
@@ -727,8 +727,8 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG)))
{
deathbringer->CastSpell(me, SPELL_RIDE_VEHICLE, true); // for the packet logs.
- deathbringer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- deathbringer->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED);
+ deathbringer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ deathbringer->SetEmoteState(EMOTE_STATE_DROWNED);
}
_events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 1000); // move
_events.ScheduleEvent(EVENT_OUTRO_HORDE_6, 4000); // say
@@ -860,7 +860,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr)
(*itr)->AI()->SetData(0, x);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_INTRO_ALLIANCE_1);
_events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 2500+17500+9500, 0, PHASE_INTRO_A);
_instance->HandleGameObject(_instance->GetGuidData(GO_SAURFANG_S_DOOR), true);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index e352e109ae9..3814db33f8d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -964,7 +964,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
_events.SetPhase(PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_H_1, 5000, 0, PHASE_INTRO);
@@ -1232,7 +1232,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
_events.SetPhase(PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_A_1, 5000);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index f0e9023ddad..f44a12e81cd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -271,7 +271,7 @@ class boss_lady_deathwhisper : public CreatureScript
void AttackStart(Unit* victim) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (victim && me->Attack(victim, true) && _phase != PHASE_ONE)
@@ -645,12 +645,12 @@ class npc_cult_fanatic : public CreatureScript
DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH);
DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS);
DoCastSelf(SPELL_FULL_HEAL, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE));
})
.Schedule(Seconds(6), [this](TaskContext /*context*/)
{
me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat(me);
@@ -744,12 +744,12 @@ class npc_cult_adherent : public CreatureScript
DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH);
DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS);
DoCastSelf(SPELL_FULL_HEAL, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE));
})
.Schedule(Seconds(6), [this](TaskContext /*context*/)
{
me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
DoCastSelf(SPELL_SHROUD_OF_THE_OCCULT);
DoZoneInCombat(me);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index 805478e66b9..03b3bd43330 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -251,7 +251,7 @@ class boss_professor_putricide : public CreatureScript
me->GetMotionMaster()->MovementExpired();
if (instance->GetBossState(DATA_ROTFACE) == DONE && instance->GetBossState(DATA_FESTERGUT) == DONE)
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
}
void EnterCombat(Unit* who) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 6164f438198..c4c3cc08479 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -324,9 +324,9 @@ class boss_sindragosa : public CreatureScript
me->setActive(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetSpeedRate(MOVE_FLIGHT, 4.0f);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
float moveTime = me->GetExactDist(&SindragosaFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f);
me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SindragosaLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SindragosaFlyPos);
@@ -358,9 +358,9 @@ class boss_sindragosa : public CreatureScript
me->setActive(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetHomePosition(SindragosaLandPos);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetSpeedRate(MOVE_FLIGHT, 2.5f);
// Sindragosa enters combat as soon as she lands
@@ -386,7 +386,7 @@ class boss_sindragosa : public CreatureScript
{
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetReactState(REACT_DEFENSIVE);
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
@@ -490,7 +490,7 @@ class boss_sindragosa : public CreatureScript
Talk(SAY_AIR_PHASE);
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
Position pos;
@@ -711,7 +711,7 @@ class npc_spinestalker : public CreatureScript
me->setActive(true);
me->SetSpeedRate(MOVE_FLIGHT, 2.0f);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
float moveTime = me->GetExactDist(&SpinestalkerFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f);
me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
@@ -730,10 +730,10 @@ class npc_spinestalker : public CreatureScript
me->setActive(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetHomePosition(SpinestalkerLandPos);
me->SetFacingTo(SpinestalkerLandPos.GetOrientation(), true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
}
@@ -848,7 +848,7 @@ class npc_rimefang : public CreatureScript
me->setActive(true);
me->SetSpeedRate(MOVE_FLIGHT, 2.0f);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
float moveTime = me->GetExactDist(&RimefangFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f);
me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, RimefangLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
@@ -867,10 +867,10 @@ class npc_rimefang : public CreatureScript
me->setActive(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->SetHomePosition(RimefangLandPos);
me->SetFacingTo(RimefangLandPos.GetOrientation(), true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetReactState(REACT_AGGRESSIVE);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 6b581c4f633..dd25e6ae308 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -512,7 +512,7 @@ class boss_the_lich_king : public CreatureScript
void SetupEncounter()
{
_Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetReactState(REACT_PASSIVE);
events.SetPhase(PHASE_INTRO);
Initialize();
@@ -534,7 +534,7 @@ class boss_the_lich_king : public CreatureScript
_JustDied();
DoCastAOE(SPELL_PLAY_MOVIE, false);
me->SetDisableGravity(false);
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
me->GetMotionMaster()->MoveFall();
if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f))
frostmourne->DespawnOrUnsummon();
@@ -915,7 +915,7 @@ class boss_the_lich_king : public CreatureScript
break;
case EVENT_FINISH_INTRO:
me->SetWalk(false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetReactState(REACT_AGGRESSIVE);
events.SetPhase(PHASE_ONE);
break;
@@ -1093,7 +1093,7 @@ class boss_the_lich_king : public CreatureScript
CreatureTextMgr::SendSound(me, SOUND_PAIN, CHAT_MSG_MONSTER_YELL);
// set flight
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->GetMotionMaster()->MovePoint(POINT_LK_OUTRO_2, OutroFlying);
break;
case EVENT_OUTRO_TALK_7:
@@ -1144,7 +1144,7 @@ class npc_tirion_fordring_tft : public CreatureScript
{
_events.Reset();
if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE)
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->LoadEquipment(1);
}
@@ -1156,7 +1156,7 @@ class npc_tirion_fordring_tft : public CreatureScript
switch (id)
{
case POINT_TIRION_INTRO:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
+ me->SetEmoteState(EMOTE_STATE_READY2H);
if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
theLichKing->AI()->DoAction(ACTION_START_ENCOUNTER);
break;
@@ -1197,7 +1197,7 @@ class npc_tirion_fordring_tft : public CreatureScript
if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
{
_events.SetPhase(PHASE_INTRO);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(POINT_TIRION_INTRO, TirionIntro);
}
@@ -1205,7 +1205,7 @@ class npc_tirion_fordring_tft : public CreatureScript
void JustReachedHome() override
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
}
void UpdateAI(uint32 diff) override
@@ -1488,7 +1488,7 @@ class npc_valkyr_shadowguard : public CreatureScript
case POINT_CHARGE:
if (Player* target = ObjectAccessor::GetPlayer(*me, _grabbedPlayer))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (GameObject* platform = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_ARTHAS_PLATFORM)))
{
std::list<Creature*> triggers;
@@ -1734,7 +1734,7 @@ class npc_terenas_menethil : public CreatureScript
damage = me->GetHealth() - 1;
if (!me->HasAura(SPELL_TERENAS_LOSES_INSIDE) && !IsHeroic())
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(SPELL_TERENAS_LOSES_INSIDE);
_events.ScheduleEvent(EVENT_TELEPORT_BACK, 1000);
if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f))
@@ -1789,13 +1789,13 @@ class npc_terenas_menethil : public CreatureScript
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
{
lichKing->AI()->DoAction(ACTION_FINISH_OUTRO);
- lichKing->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
+ lichKing->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
if (Creature* tirion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING)))
tirion->AI()->AttackStart(lichKing);
}
break;
case EVENT_DESTROY_SOUL:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f))
warden->CastSpell((Unit*)NULL, SPELL_DESTROY_SOUL, TRIGGERED_NONE);
DoCast(SPELL_TERENAS_LOSES_INSIDE);
@@ -2774,7 +2774,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL
summoner->GetAI()->SetData(DATA_VILE, 1);
GetCaster()->CastSpell((Unit*)NULL, SPELL_SPIRIT_BURST, true);
GetCaster()->ToCreature()->DespawnOrUnsummon(3000);
- GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ GetCaster()->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 63e6fb7c8d2..e4b0bcf0ccb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -402,7 +402,7 @@ class boss_valithria_dreamwalker : public CreatureScript
DoCast(me, SPELL_AWARD_REPUTATION_BOSS_KILL);
// this display id was found in sniff instead of the one on aura
me->SetDisplayId(11686);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->DespawnOrUnsummon(4000);
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_LICH_KING)))
lichKing->CastSpell(lichKing, SPELL_SPAWN_CHEST, false);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 66dd765a485..b86138d2e62 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -829,7 +829,7 @@ class boss_sister_svalna : public CreatureScript
case ACTION_START_GAUNTLET:
me->setActive(true);
_isEventInProgress = true;
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
events.ScheduleEvent(EVENT_SVALNA_START, 25000);
break;
case ACTION_RESURRECT_CAPTAINS:
@@ -863,7 +863,7 @@ class boss_sister_svalna : public CreatureScript
_isEventInProgress = false;
me->setActive(false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetDisableGravity(false);
me->SetHover(false);
}
@@ -880,7 +880,7 @@ class boss_sister_svalna : public CreatureScript
{
Talk(EMOTE_SVALNA_IMPALE, target);
summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
- summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT);
+ summon->AddUnitFlag2(UnitFlags2(UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT));
}
break;
default:
@@ -1779,8 +1779,8 @@ class spell_icc_stoneform : public SpellScriptLoader
if (Creature* target = GetTarget()->ToCreature())
{
target->SetReactState(REACT_PASSIVE);
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
- target->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_02);
+ target->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
+ target->SetEmoteState(EMOTE_STATE_CUSTOM_SPELL_02);
}
}
@@ -1789,8 +1789,8 @@ class spell_icc_stoneform : public SpellScriptLoader
if (Creature* target = GetTarget()->ToCreature())
{
target->SetReactState(REACT_AGGRESSIVE);
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
- target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ target->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
+ target->SetEmoteState(EMOTE_ONESHOT_NONE);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 248bbed2791..8ae9bf6c228 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -156,12 +156,12 @@ class instance_icecrown_citadel : public InstanceMapScript
{
if (usable)
{
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
}
else
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_READY);
}
}
@@ -639,7 +639,7 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_CACHE_OF_THE_DREAMWALKER_25H:
if (Creature* valithria = instance->GetCreature(ValithriaDreamwalkerGUID))
go->SetLootRecipient(valithria->GetLootRecipient(), valithria->GetLootRecipientGroup());
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+ go->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN));
break;
case GO_ARTHAS_PLATFORM:
ArthasPlatformGUID = go->GetGUID();
@@ -854,7 +854,7 @@ class instance_icecrown_citadel : public InstanceMapScript
SetTeleporterState(teleporter, true);
if (GameObject* loot = instance->GetGameObject(GunshipArmoryGUID))
- loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+ loot->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN));
}
else if (state == FAIL)
Events.ScheduleEvent(EVENT_RESPAWN_GUNSHIP, 30000);
@@ -868,7 +868,7 @@ class instance_icecrown_citadel : public InstanceMapScript
{
if (Creature* deathbringer = instance->GetCreature(DeathbringerSaurfangGUID))
loot->SetLootRecipient(deathbringer->GetLootRecipient(), deathbringer->GetLootRecipientGroup());
- loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+ loot->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN));
}
if (GameObject* teleporter = instance->GetGameObject(TeleporterUpperSpireGUID))
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 0ecd4960508..7b7bd614692 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -224,7 +224,7 @@ public:
return;
_Reset();
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
_skeletonCount = 0;
_bansheeCount = 0;
_abominationCount = 0;
@@ -425,7 +425,7 @@ public:
case EVENT_PHASE_TWO:
me->CastStop();
events.SetPhase(PHASE_TWO);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->getThreatManager().resetAllAggro();
me->SetReactState(REACT_AGGRESSIVE);
Talk(EMOTE_PHASE_TWO);
@@ -522,7 +522,7 @@ public:
case ACTION_BEGIN_ENCOUNTER:
if (instance->GetBossState(BOSS_KELTHUZAD) != NOT_STARTED)
return;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
instance->SetBossState(BOSS_KELTHUZAD, IN_PROGRESS);
events.SetPhase(PHASE_ONE);
DoZoneInCombat();
@@ -806,7 +806,7 @@ public:
me->RemoveAllAuras();
me->CombatStop();
me->StopMoving();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->DespawnOrUnsummon(30 * IN_MILLISECONDS); // just in case anything interrupts the movement
me->GetMotionMaster()->MoveTargetedHome();
default:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 20f81cb69d5..1702ba7038c 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -105,7 +105,7 @@ public:
{
DoCastAOE(SPELL_TELEPORT_BACK);
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
}
balconyCount = 0;
@@ -243,7 +243,7 @@ public:
case EVENT_BALCONY:
events.SetPhase(PHASE_BALCONY);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
me->AttackStop();
me->StopMoving();
me->RemoveAllAuras();
@@ -299,7 +299,7 @@ public:
EnterPhaseGround();
break;
case EVENT_GROUND_ATTACKABLE:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
break;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 8c5c6697cd6..a378ad1ddbf 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -187,7 +187,7 @@ class npc_dk_understudy : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS)))
razuvious->AI()->DoZoneInCombat(nullptr, 250.0f);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index fba8b107d21..ea35f4c2283 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -125,7 +125,7 @@ class boss_sapphiron : public CreatureScript
if (!instance->GetData(DATA_HAD_SAPPHIRON_BIRTH))
{
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
}
@@ -362,7 +362,7 @@ class boss_sapphiron : public CreatureScript
return;
case EVENT_BIRTH:
me->SetVisible(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
return;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index cbd4ca56603..7c807570cd5 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -299,7 +299,7 @@ struct boss_thaddius : public BossAI
{
events.SetPhase(PHASE_TRANSITION);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_TRANSITION_1, Seconds(10), 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_TRANSITION_2, Seconds(12), 0, PHASE_TRANSITION);
@@ -320,7 +320,7 @@ struct boss_thaddius : public BossAI
me->DespawnOrUnsummon();
me->SetRespawnTime(initial ? 5 : 30);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
events.SetPhase(PHASE_RESETTING);
if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER);
@@ -384,8 +384,8 @@ struct boss_thaddius : public BossAI
me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true);
ballLightningUnlocked = false;
me->RemoveAura(SPELL_THADDIUS_INACTIVE_VISUAL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_STUNNED);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat();
@@ -492,7 +492,7 @@ public:
// if the encounter reset while feigning death
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
isOverloading = false;
isFeignDeath = false;
@@ -543,7 +543,7 @@ public:
me->SetFullHealth();
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Talk(EMOTE_FEIGN_REVIVE);
isFeignDeath = false;
@@ -619,7 +619,7 @@ public:
if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
thaddius->AI()->DoAction(ACTION_STALAGG_DIED);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAllAuras();
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
@@ -643,7 +643,7 @@ public:
if (!isOverloading)
{
isOverloading = true;
- caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ caster->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (Creature* creatureCaster = caster->ToCreature())
creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS);
me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL);
@@ -660,7 +660,7 @@ public:
refreshBeam = false;
caster->CastStop();
caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true);
- caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ caster->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
}
@@ -760,7 +760,7 @@ public:
// if the encounter reset while feigning death
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
isOverloading = false;
isFeignDeath = false;
@@ -812,7 +812,7 @@ public:
me->SetFullHealth();
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Talk(EMOTE_FEIGN_REVIVE);
isFeignDeath = false;
@@ -894,7 +894,7 @@ public:
me->AttackStop();
me->StopMoving();
me->SetStandState(UNIT_STAND_STATE_DEAD);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
damage = 0;
@@ -913,7 +913,7 @@ public:
if (!isOverloading)
{
isOverloading = true;
- caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ caster->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
if (Creature* creatureCaster = caster->ToCreature())
creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS);
me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL);
@@ -930,7 +930,7 @@ public:
refreshBeam = false;
caster->CastStop();
caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true);
- caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ caster->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 72212009dea..04cf9e29ae4 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -223,23 +223,23 @@ class instance_naxxramas : public InstanceMapScript
break;
case GO_NAXX_PORTAL_ARACHNID:
if (GetBossState(BOSS_MAEXXNA) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_NAXX_PORTAL_CONSTRUCT:
if (GetBossState(BOSS_THADDIUS) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_NAXX_PORTAL_PLAGUE:
if (GetBossState(BOSS_LOATHEB) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_NAXX_PORTAL_MILITARY:
if (GetBossState(BOSS_HORSEMEN) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_KELTHUZAD_THRONE:
if (GetBossState(BOSS_KELTHUZAD) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_BIRTH:
if (hadSapphironBirth || GetBossState(BOSS_SAPPHIRON) == DONE)
@@ -379,7 +379,7 @@ class instance_naxxramas : public InstanceMapScript
if (state == DONE)
{
if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_ARACHNID))
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6));
}
@@ -388,7 +388,7 @@ class instance_naxxramas : public InstanceMapScript
if (state == DONE)
{
if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_PLAGUE))
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6));
}
@@ -397,7 +397,7 @@ class instance_naxxramas : public InstanceMapScript
if (state == DONE)
{
if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_CONSTRUCT))
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6));
}
@@ -412,11 +412,11 @@ class instance_naxxramas : public InstanceMapScript
if (GameObject* horsemenChest = instance->GetGameObject(HorsemenChestGUID))
{
horsemenChest->SetRespawnTime(horsemenChest->GetRespawnDelay());
- horsemenChest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ horsemenChest->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_MILITARY))
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6));
}
@@ -429,7 +429,7 @@ class instance_naxxramas : public InstanceMapScript
case BOSS_KELTHUZAD:
if (state == DONE)
if (GameObject* throne = GetGameObject(DATA_KELTHUZAD_THRONE))
- throne->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ throne->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index f9501833f44..4fc9b664132 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -380,9 +380,9 @@ public:
Initialize();
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
// TO DO: find what in core is making boss slower than in retail (when correct speed data) or find missing movement flag update or forced spline change
me->SetSpeedRate(MOVE_FLIGHT, _flySpeed * 0.25f);
if (_despawned)
@@ -471,7 +471,7 @@ public:
pos.m_positionZ = alexstraszaBunny->GetPositionZ();
alexstraszaBunny->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 30.0f, alexstraszaBunny->GetAngle(me));
me->GetMotionMaster()->MoveLand(POINT_LAND_P_ONE, pos);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone();
events.ScheduleEvent(EVENT_LAND_START_ENCOUNTER, 7*IN_MILLISECONDS, 1, PHASE_NOT_STARTED);
@@ -722,7 +722,7 @@ public:
if (!_firstCyclicMovementStarted)
{
_firstCyclicMovementStarted = true;
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Creature* alexstraszaBunny = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ALEXSTRASZA_BUNNY_GUID)))
me->SetFacingToObject(alexstraszaBunny);
events.ScheduleEvent(EVENT_SUMMON_ARCANE_BOMB, 1*IN_MILLISECONDS, 0, PHASE_TWO);
@@ -954,7 +954,7 @@ public:
DoCast(me, SPELL_IMMUNE_CURSES);
_canAttack = true;
UpdateVictim();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
SetPhase(PHASE_THREE, true);
break;
case EVENT_SURGE_OF_POWER_P_THREE:
@@ -1204,7 +1204,7 @@ public:
{
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisableGravity(false);
me->SetCanFly(false);
}
@@ -1234,7 +1234,7 @@ public:
if (vehicleTemp->GetPassenger(0) && vehicleTemp->GetPassenger(0)->GetTypeId() == TYPEID_PLAYER)
{
vehicleTemp->RemoveAllPassengers();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
}
@@ -2149,7 +2149,7 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader
Creature* caster = GetCaster()->ToCreature();
if (InstanceScript* instance = caster->GetInstanceScript())
if (GameObject* platform = caster->GetMap()->GetGameObject(instance->GetGuidData(DATA_PLATFORM)))
- platform->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
+ platform->AddFlag(GO_FLAG_DESTROYED);
}
void HandleScript(SpellEffIndex /*effIndex*/)
@@ -2431,13 +2431,13 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader
if (Creature* target = GetTarget()->ToCreature())
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
{
- _alexstraszaGift->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ _alexstraszaGift->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (GameObject* heartMagic = target->GetMap()->GetGameObject(instance->GetGuidData(DATA_HEART_OF_MAGIC_GUID)))
{
- heartMagic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ heartMagic->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
// TO DO: This is hack, core doesn't have support for these flags,
// remove line below if it ever gets supported otherwise object won't be accessible.
- heartMagic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ heartMagic->RemoveFlag(GO_FLAG_INTERACT_COND);
}
}
}
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index 09e1fef50e5..5026d793dd2 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -77,7 +77,7 @@ public:
SpawnGameObject(GO_EXIT_PORTAL, exitPortalPosition);
if (GameObject* platform = instance->GetGameObject(platformGUID))
- platform->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
+ platform->RemoveFlag(GO_FLAG_DESTROYED);
}
else if (state == DONE)
SpawnGameObject(GO_EXIT_PORTAL, exitPortalPosition);
@@ -161,7 +161,7 @@ public:
alexstraszaBunny->CastSpell(alexstraszaBunny, SPELL_IRIS_OPENED);
if (GameObject* iris = instance->GetGameObject(irisGUID))
- iris->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ iris->AddFlag(GO_FLAG_IN_USE);
if (Creature* malygos = instance->GetCreature(malygosGUID))
malygos->AI()->DoAction(0); // ACTION_LAND_ENCOUNTER_START
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index b2241f59a63..a6b04ca0228 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -84,7 +84,7 @@ class boss_keristrasza : public CreatureScript
Initialize();
_intenseColdList.clear();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ me->RemoveUnitFlag(UNIT_FLAG_STUNNED);
RemovePrison(CheckContainmentSpheres());
_Reset();
@@ -130,15 +130,15 @@ class boss_keristrasza : public CreatureScript
{
if (remove)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (me->HasAura(SPELL_FROZEN_PRISON))
me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON);
}
else
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_FROZEN_PRISON, false);
}
}
@@ -228,7 +228,7 @@ public:
if (pKeristrasza && pKeristrasza->IsAlive())
{
// maybe these are hacks :(
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
ENSURE_AI(boss_keristrasza::boss_keristraszaAI, pKeristrasza->AI())->CheckContainmentSpheres(true);
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
index 689fb526a45..27fb04e55eb 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
@@ -134,7 +134,7 @@ public:
{
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
instance->SetBossState(DATA_MAGUS_TELESTRA, NOT_STARTED);
@@ -248,7 +248,7 @@ public:
me->AttackStop();
if (uiIsWaitingToAppearTimer <= diff)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
bIsWaitingToAppear = false;
} else uiIsWaitingToAppearTimer -= diff;
return;
@@ -285,7 +285,7 @@ public:
me->CastStop();
me->RemoveAllAuras();
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
uiFireMagusGUID = SplitPersonality(NPC_FIRE_MAGUS);
uiFrostMagusGUID = SplitPersonality(NPC_FROST_MAGUS);
uiArcaneMagusGUID = SplitPersonality(NPC_ARCANE_MAGUS);
@@ -302,7 +302,7 @@ public:
me->CastStop();
me->RemoveAllAuras();
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
uiFireMagusGUID = SplitPersonality(NPC_FIRE_MAGUS);
uiFrostMagusGUID = SplitPersonality(NPC_FROST_MAGUS);
uiArcaneMagusGUID = SplitPersonality(NPC_ARCANE_MAGUS);
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
index e8c82093f0b..4b7027fb992 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
@@ -102,17 +102,17 @@ class instance_nexus : public InstanceMapScript
case GO_ANOMALUS_CONTAINMET_SPHERE:
AnomalusContainmentSphere = go->GetGUID();
if (GetBossState(DATA_ANOMALUS) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_ORMOROKS_CONTAINMET_SPHERE:
OrmoroksContainmentSphere = go->GetGUID();
if (GetBossState(DATA_ORMOROK) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_TELESTRAS_CONTAINMET_SPHERE:
TelestrasContainmentSphere = go->GetGUID();
if (GetBossState(DATA_MAGUS_TELESTRA) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
@@ -130,21 +130,21 @@ class instance_nexus : public InstanceMapScript
if (state == DONE)
{
if (GameObject* sphere = instance->GetGameObject(TelestrasContainmentSphere))
- sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case DATA_ANOMALUS:
if (state == DONE)
{
if (GameObject* sphere = instance->GetGameObject(AnomalusContainmentSphere))
- sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case DATA_ORMOROK:
if (state == DONE)
{
if (GameObject* sphere = instance->GetGameObject(OrmoroksContainmentSphere))
- sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
default:
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index d208dd34624..63aa56865e0 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -282,10 +282,10 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
// flags taken from sniffs
- if (caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6))
+ if (caster->HasUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6)))
{
caster->ToCreature()->SetReactState(REACT_PASSIVE);
- caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6);
+ caster->AddUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6));
}
}
}
@@ -295,7 +295,7 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
caster->ToCreature()->SetReactState(REACT_AGGRESSIVE);
- caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6);
+ caster->RemoveUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6));
}
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
index 822887b907e..36cdda60de0 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
@@ -90,7 +90,7 @@ class instance_oculus : public InstanceMapScript
BelgaristraszGUID = creature->GetGUID();
if (GetBossState(DATA_DRAKOS) == DONE)
{
- creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->Relocate(BelgaristraszMove);
}
break;
@@ -98,7 +98,7 @@ class instance_oculus : public InstanceMapScript
EternosGUID = creature->GetGUID();
if (GetBossState(DATA_DRAKOS) == DONE)
{
- creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->Relocate(EternosMove);
}
break;
@@ -106,7 +106,7 @@ class instance_oculus : public InstanceMapScript
VerdisaGUID = creature->GetGUID();
if (GetBossState(DATA_DRAKOS) == DONE)
{
- creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->Relocate(VerdisaMove);
}
break;
@@ -232,7 +232,7 @@ class instance_oculus : public InstanceMapScript
if (GameObject* cache = instance->GetGameObject(EregosCacheGUID))
{
cache->SetRespawnTime(cache->GetRespawnDelay());
- cache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
}
break;
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index 4222967055d..522fd6065fe 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -201,7 +201,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
Talk(SAY_BELGARISTRASZ);
// The gossip flag should activate when Drakos die and not from DB
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index b892556b637..3e9ea51bb9d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -116,7 +116,7 @@ public:
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetControlled(false, UNIT_STATE_ROOT);
if (!me->IsVisible())
@@ -156,7 +156,7 @@ public:
me->AttackStop();
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetControlled(true, UNIT_STATE_ROOT);
me->GetMotionMaster()->Clear();
@@ -241,7 +241,7 @@ public:
else if (lSparkList.empty())
{
me->SetVisible(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetControlled(false, UNIT_STATE_ROOT);
DoCast(me, SPELL_SPARK_DESPAWN, false);
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index d8a308eedf6..5e8fb169224 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -234,7 +234,7 @@ public:
if (Creature* summon = me->SummonCreature(NPC_DARK_MATTER_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
{
summon->SetDisplayId(11686);
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
summon->CastSpell(target, SPELL_DARK_MATTER, true);
}
}
@@ -250,7 +250,7 @@ public:
if (Creature* summon = me->SummonCreature(NPC_SEARING_GAZE_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
{
summon->SetDisplayId(11686);
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
summon->CastSpell(target, SPELL_SEARING_GAZE, true);
}
}
@@ -419,7 +419,7 @@ public:
void StartWP()
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetEscortPaused(false);
uiStep = 1;
Start();
@@ -684,7 +684,7 @@ public:
Player* player = GetPlayerForEscort();
if (player)
player->GroupEventHappens(QUEST_HALLS_OF_STONE, me);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
JumpToNextStep(180000);
break;
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
index 84ede5bfffd..ce3cffaae7a 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -92,7 +92,7 @@ class instance_halls_of_stone : public InstanceMapScript
case GO_TRIBUNAL_CHEST_HERO:
TribunalChestGUID = go->GetGUID();
if (GetBossState(DATA_TRIBUNAL_OF_AGES) == DONE)
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_TRIBUNAL_SKY_FLOOR:
TribunalSkyFloorGUID = go->GetGUID();
@@ -161,7 +161,7 @@ class instance_halls_of_stone : public InstanceMapScript
if (state == DONE)
{
if (GameObject* go = instance->GetGameObject(TribunalChestGUID))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
default:
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 8f6005bc1fe..f4c3bfeea0a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -348,7 +348,7 @@ class boss_algalon_the_observer : public CreatureScript
{
case ACTION_START_INTRO:
{
- me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_INSTANTLY_APPEAR_MODEL);
+ me->AddUnitFlag2(UNIT_FLAG2_INSTANTLY_APPEAR_MODEL);
me->SetDisableGravity(true);
DoCast(me, SPELL_ARRIVAL, true);
DoCast(me, SPELL_RIDE_THE_LIGHTNING, true);
@@ -380,11 +380,11 @@ class boss_algalon_the_observer : public CreatureScript
events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17000);
events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26000);
me->DespawnOrUnsummon(34000);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC));
break;
case ACTION_INIT_ALGALON:
_firstPull = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
}
}
@@ -397,7 +397,7 @@ class boss_algalon_the_observer : public CreatureScript
void EnterCombat(Unit* /*target*/) override
{
uint32 introDelay = 0;
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC));
events.Reset();
events.SetPhase(PHASE_ROLE_PLAY);
@@ -504,7 +504,7 @@ class boss_algalon_the_observer : public CreatureScript
{
instance->SetBossState(BOSS_ALGALON, FAIL);
BossAI::EnterEvadeMode(why);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetSheath(SHEATH_STATE_UNARMED);
}
@@ -540,7 +540,7 @@ class boss_algalon_the_observer : public CreatureScript
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_SELF_STUN);
events.Reset();
summons.DespawnAll();
@@ -579,7 +579,7 @@ class boss_algalon_the_observer : public CreatureScript
break;
case EVENT_INTRO_FINISH:
events.Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
break;
case EVENT_START_COMBAT:
instance->SetBossState(BOSS_ALGALON, IN_PROGRESS);
@@ -588,7 +588,7 @@ class boss_algalon_the_observer : public CreatureScript
{
events.SetPhase(PHASE_NORMAL);
me->SetSheath(SHEATH_STATE_MELEE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC));
me->SetReactState(REACT_DEFENSIVE);
DoCastAOE(SPELL_SUPERMASSIVE_FAIL, true);
//! Workaround for Creature::_IsTargetAcceptable returning false
@@ -662,7 +662,7 @@ class boss_algalon_the_observer : public CreatureScript
break;
case EVENT_OUTRO_1:
me->RemoveAllAuras();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_RENAME);
+ me->AddUnitFlag(UNIT_FLAG_RENAME);
break;
case EVENT_OUTRO_2:
_EnterEvadeMode();
@@ -673,7 +673,7 @@ class boss_algalon_the_observer : public CreatureScript
break;
case EVENT_OUTRO_4:
DoCastAOE(SPELL_SUPERMASSIVE_FAIL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
break;
case EVENT_OUTRO_5:
if (Creature* brann = DoSummon(NPC_BRANN_BRONZBEARD_ALG, BrannOutroPos[0], 131500, TEMPSUMMON_TIMED_DESPAWN))
@@ -762,7 +762,7 @@ class npc_living_constellation : public CreatureScript
if (Unit* target = algalon->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(algalon)))
{
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
AttackStart(target);
DoZoneInCombat();
_isActive = true;
@@ -982,7 +982,7 @@ class go_celestial_planetarium_access : public GameObjectScript
if (!isUse)
return true;
- if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE))
+ if (go->HasFlag(GO_FLAG_IN_USE))
return true;
bool hasKey = true;
@@ -1006,7 +1006,7 @@ class go_celestial_planetarium_access : public GameObjectScript
return false;
// Start Algalon event
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ go->AddFlag(GO_FLAG_IN_USE);
_events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000);
if (Creature* brann = go->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos))
brann->AI()->DoAction(ACTION_START_INTRO);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 572dca1a7e0..ea7fc49a856 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -248,7 +248,7 @@ class boss_flame_leviathan : public CreatureScript
DoCast(SPELL_INVIS_AND_STEALTH_DETECT);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
me->SetReactState(REACT_PASSIVE);
}
@@ -537,7 +537,7 @@ class boss_flame_leviathan : public CreatureScript
me->SetHomePosition(Center);
me->GetMotionMaster()->MoveCharge(Center.GetPositionX(), Center.GetPositionY(), Center.GetPositionZ()); // position center
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
return;
}
break;
@@ -608,17 +608,17 @@ class boss_flame_leviathan_seat : public CreatureScript
if (Creature* turret = turretPassenger->ToCreature())
{
turret->setFaction(me->GetVehicleBase()->getFaction());
- turret->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable
+ turret->SetUnitFlags(UnitFlags(0)); // unselectable
turret->AI()->AttackStart(who);
}
if (Unit* devicePassenger = me->GetVehicleKit()->GetPassenger(SEAT_DEVICE))
if (Creature* device = devicePassenger->ToCreature())
{
- device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- device->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ device->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
+ device->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
else if (seatId == SEAT_TURRET)
{
@@ -627,8 +627,8 @@ class boss_flame_leviathan_seat : public CreatureScript
if (Unit* device = ASSERT_NOTNULL(me->GetVehicleKit())->GetPassenger(SEAT_DEVICE))
{
- device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- device->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable
+ device->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
+ device->SetUnitFlags(UnitFlags(0)); // unselectable
}
}
}
@@ -743,8 +743,8 @@ class boss_flame_leviathan_overload_device : public CreatureScript
if (me->GetVehicle())
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Unit* player = me->GetVehicle()->GetPassenger(SEAT_PLAYER))
{
@@ -871,7 +871,7 @@ class npc_pool_of_tar : public CreatureScript
{
npc_pool_of_tarAI(Creature* creature) : ScriptedAI(creature)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
me->CastSpell(me, SPELL_TAR_PASSIVE, true);
}
@@ -940,7 +940,7 @@ class npc_thorims_hammer : public CreatureScript
{
npc_thorims_hammerAI(Creature* creature) : ScriptedAI(creature)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->CastSpell(me, AURA_DUMMY_BLUE, true);
}
@@ -984,7 +984,7 @@ public:
npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->CastSpell(me, AURA_DUMMY_YELLOW, true);
me->SetReactState(REACT_PASSIVE);
}
@@ -1042,7 +1042,7 @@ class npc_hodirs_fury : public CreatureScript
{
npc_hodirs_furyAI(Creature* creature) : ScriptedAI(creature)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->CastSpell(me, AURA_DUMMY_GREEN, true);
}
@@ -1190,10 +1190,10 @@ class npc_brann_bronzebeard_ulduar_intro : public CreatureScript
{
if (menuId == GOSSIP_MENU_BRANN_BRONZEBEARD && gossipListId == GOSSIP_OPTION_BRANN_BRONZEBEARD)
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
CloseGossipMenuFor(player);
if (Creature* loreKeeper = _instance->GetCreature(DATA_LORE_KEEPER_OF_NORGANNON))
- loreKeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ loreKeeper->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
}
@@ -1243,7 +1243,7 @@ class npc_lorekeeper : public CreatureScript
{
if (menuId == GOSSIP_MENU_LORE_KEEPER && gossipListId == GOSSIP_OPTION_LORE_KEEPER)
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
CloseGossipMenuFor(player);
me->GetMap()->LoadGrid(364, -16); // make sure leviathan is loaded
@@ -1256,7 +1256,7 @@ class npc_lorekeeper : public CreatureScript
{
if (Creature* brann = _instance->GetCreature(DATA_BRANN_BRONZEBEARD_INTRO))
{
- brann->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ brann->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
delorah->GetMotionMaster()->MovePoint(0, brann->GetPositionX() - 4, brann->GetPositionY(), brann->GetPositionZ());
/// @todo delorah->AI()->Talk(xxxx, brann->GetGUID()); when reached at branz
}
@@ -1592,7 +1592,7 @@ class spell_systems_shutdown : public SpellScriptLoader
//! This could probably in the SPELL_EFFECT_SEND_EVENT handler too:
owner->AddUnitState(UNIT_STATE_STUNNED | UNIT_STATE_ROOT);
- owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ owner->AddUnitFlag(UNIT_FLAG_STUNNED);
owner->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED);
}
@@ -1602,7 +1602,7 @@ class spell_systems_shutdown : public SpellScriptLoader
if (!owner)
return;
- owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ owner->RemoveUnitFlag(UNIT_FLAG_STUNNED);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index d2131a24339..0d3ccc74685 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -1349,7 +1349,7 @@ class npc_healthy_spore : public CreatureScript
npc_healthy_sporeAI(Creature* creature) : ScriptedAI(creature)
{
SetCombatMovement(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_PASSIVE);
DoCast(me, SPELL_HEALTHY_SPORE_VISUAL);
DoCast(me, SPELL_POTENT_PHEROMONES);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index ec829d860db..5a464a21ee7 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -426,7 +426,7 @@ class npc_saronite_vapors : public CreatureScript
if (damage >= me->GetHealth())
{
damage = 0;
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetControlled(true, UNIT_STATE_ROOT);
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->SetHealth(me->GetMaxHealth());
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 464249835eb..61a110b366a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -189,7 +189,7 @@ class npc_flash_freeze : public CreatureScript
Initialize();
instance = me->GetInstanceScript();
me->SetDisplayFromModel(1);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
me->SetControlled(true, UNIT_STATE_ROOT);
}
@@ -265,7 +265,7 @@ class npc_ice_block : public CreatureScript
{
instance = me->GetInstanceScript();
me->SetDisplayFromModel(1);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
me->SetControlled(true, UNIT_STATE_ROOT);
}
@@ -276,7 +276,7 @@ class npc_ice_block : public CreatureScript
void IsSummonedBy(Unit* summoner) override
{
targetGUID = summoner->GetGUID();
- summoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ summoner->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
summoner->SetControlled(true, UNIT_STATE_ROOT);
me->SetInCombatWith(summoner);
me->AddThreat(summoner, 250.0f);
@@ -293,7 +293,7 @@ class npc_ice_block : public CreatureScript
{
if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID))
{
- Helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ Helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
Helper->SetControlled(false, UNIT_STATE_ROOT);
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
@@ -397,7 +397,7 @@ class boss_hodir : public CreatureScript
me->RemoveAllAttackers();
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
me->InterruptNonMeleeSpells(true);
me->StopMoving();
@@ -558,7 +558,7 @@ class npc_icicle : public CreatureScript
{
Initialize();
me->SetDisplayFromModel(0);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE));
me->SetControlled(true, UNIT_STATE_ROOT);
me->SetReactState(REACT_PASSIVE);
}
@@ -613,7 +613,7 @@ class npc_snowpacked_icicle : public CreatureScript
{
Initialize();
me->SetDisplayFromModel(1);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
me->SetControlled(true, UNIT_STATE_ROOT);
me->SetReactState(REACT_PASSIVE);
}
@@ -670,7 +670,7 @@ class npc_hodir_priest : public CreatureScript
void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
+ if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED))
return;
events.Update(diff);
@@ -752,7 +752,7 @@ class npc_hodir_shaman : public CreatureScript
void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
+ if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED))
return;
events.Update(diff);
@@ -817,7 +817,7 @@ class npc_hodir_druid : public CreatureScript
void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
+ if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED))
return;
events.Update(diff);
@@ -895,7 +895,7 @@ class npc_hodir_mage : public CreatureScript
void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
+ if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED))
return;
events.Update(diff);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index 5cd66d7da86..40a49f5dfef 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -181,7 +181,7 @@ class boss_ignis : public CreatureScript
{
summon->setFaction(16);
summon->SetReactState(REACT_AGGRESSIVE);
- summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_PC);
+ summon->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_PC));
summon->SetControlled(false, UNIT_STATE_ROOT);
}
@@ -382,7 +382,7 @@ class npc_scorch_ground : public CreatureScript
npc_scorch_groundAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
me->SetControlled(true, UNIT_STATE_ROOT);
creature->SetDisplayId(16925); //model 2 in db cannot overwrite wdb fields
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 25d40ca4fe1..d8f55a428d9 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -108,7 +108,7 @@ class boss_kologarn : public CreatureScript
boss_kologarnAI(Creature* creature) : BossAI(creature, BOSS_KOLOGARN),
left(false), right(false)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(true, UNIT_STATE_ROOT);
DoCast(SPELL_KOLOGARN_REDUCE_PARRY);
@@ -141,7 +141,7 @@ class boss_kologarn : public CreatureScript
void Reset() override
{
_Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
eyebeamTarget.Clear();
}
@@ -150,7 +150,7 @@ class boss_kologarn : public CreatureScript
Talk(SAY_DEATH);
DoCast(SPELL_KOLOGARN_PACIFY);
me->GetMotionMaster()->MoveTargetedHome();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetCorpseDelay(604800); // Prevent corpse from despawning.
_JustDied();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 407268bcd80..d7c23502200 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -424,12 +424,12 @@ class boss_mimiron : public CreatureScript
return;
_EnterCombat();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->RemoveAurasDueToSpell(SPELL_WELD);
DoCast(me->GetVehicleBase(), SPELL_SEAT_6);
if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
- button->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ button->AddFlag(GO_FLAG_NOT_SELECTABLE);
if (_fireFighter)
events.ScheduleEvent(EVENT_SUMMON_FLAMES, 3000);
@@ -456,7 +456,7 @@ class boss_mimiron : public CreatureScript
return;
_Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
elevator->SetGoState(GO_STATE_ACTIVE);
@@ -468,7 +468,7 @@ class boss_mimiron : public CreatureScript
if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
{
button->SetGoState(GO_STATE_READY);
- button->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ button->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
_fireFighter = false;
@@ -506,7 +506,7 @@ class boss_mimiron : public CreatureScript
{
DoCast(mkii, SPELL_SEAT_7);
mkii->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
- mkii->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ mkii->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
}
events.ScheduleEvent(EVENT_INTRO_3, 2000);
break;
@@ -613,7 +613,7 @@ class boss_mimiron : public CreatureScript
if (Creature* aerial = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT)))
{
aerial->GetMotionMaster()->MoveLand(0, (aerial->GetPositionX(), aerial->GetPositionY(), aerial->GetPositionZMinusOffset()));
- aerial->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, 0);
+ aerial->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
aerial->CastSpell(vx001, SPELL_MOUNT_VX_001);
aerial->CastSpell(aerial, SPELL_HALF_HEAL);
}
@@ -654,7 +654,7 @@ class boss_mimiron : public CreatureScript
break;
case EVENT_OUTTRO_3:
DoCast(me, SPELL_TELEPORT_VISUAL);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->DespawnOrUnsummon(1000); // sniffs say 6 sec after, but it doesnt matter.
break;
default:
@@ -696,7 +696,7 @@ class boss_leviathan_mk_ii : public CreatureScript
if (damage >= me->GetHealth())
{
damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_VEHICLE_DAMAGED, true);
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
@@ -746,7 +746,7 @@ class boss_leviathan_mk_ii : public CreatureScript
break;
case DO_ASSEMBLED_COMBAT:
me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
events.SetPhase(PHASE_VOL7RON);
@@ -795,7 +795,7 @@ class boss_leviathan_mk_ii : public CreatureScript
switch (point)
{
case WP_MKII_P1_IDLE:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
@@ -822,7 +822,7 @@ class boss_leviathan_mk_ii : public CreatureScript
void Reset() override
{
_Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_PASSIVE);
_fireFighter = false;
_setupMine = true;
@@ -931,7 +931,7 @@ class boss_vx_001 : public CreatureScript
boss_vx_001AI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
{
me->SetDisableGravity(true); // This is the unfold visual state of VX-001, it has to be set on create as it requires an objectupdate if set later.
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state.
+ me->SetEmoteState(EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state.
me->SetReactState(REACT_PASSIVE);
_fireFighter = false;
}
@@ -948,7 +948,7 @@ class boss_vx_001 : public CreatureScript
if (events.IsInPhase(PHASE_VX_001))
{
me->CastStop();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL); // has no effect, wat
DoCast(me, SPELL_TORSO_DISABLED);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
@@ -957,7 +957,7 @@ class boss_vx_001 : public CreatureScript
else if (events.IsInPhase(PHASE_VOL7RON))
{
me->SetStandState(UNIT_STAND_STATE_DEAD);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (IsEncounterFinished(who))
return;
@@ -980,9 +980,9 @@ class boss_vx_001 : public CreatureScript
events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, 6000);
// Missing break intended.
case DO_START_VX001:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); // Remove emotestate.
+ me->SetEmoteState(EMOTE_ONESHOT_NONE); // Remove emotestate.
//me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); Blizzard handles hover animation like this it seems.
DoCast(me, SPELL_HEAT_WAVE_AURA);
@@ -993,7 +993,7 @@ class boss_vx_001 : public CreatureScript
break;
case DO_ASSEMBLED_COMBAT:
me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
events.SetPhase(PHASE_VOL7RON);
events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000);
@@ -1042,7 +1042,7 @@ class boss_vx_001 : public CreatureScript
// Handle rotation during SPELL_SPINNING_UP, SPELL_P3WX2_LASER_BARRAGE, SPELL_RAPID_BURST, and SPELL_HAND_PULSE_LEFT/RIGHT
if (me->HasUnitState(UNIT_STATE_CASTING))
{
- DynamicFieldStructuredView<ObjectGuid> channelObjects = me->GetChannelObjects();
+ auto const& channelObjects = me->m_unitData->ChannelObjects;
if (Unit* channelTarget = (channelObjects.size() == 1 ? ObjectAccessor::GetUnit(*me, *channelObjects.begin()) : nullptr))
me->SetFacingToObject(channelTarget);
return;
@@ -1122,7 +1122,7 @@ class boss_aerial_command_unit : public CreatureScript
if (damage >= me->GetHealth())
{
damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
DoCast(me, SPELL_VEHICLE_DAMAGED, true);
@@ -1157,7 +1157,7 @@ class boss_aerial_command_unit : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1000, 0, PHASE_AERIAL_COMMAND_UNIT);
// Missing break intended.
case DO_START_AERIAL:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
events.SetPhase(PHASE_AERIAL_COMMAND_UNIT);
@@ -1176,7 +1176,7 @@ class boss_aerial_command_unit : public CreatureScript
me->SetReactState(REACT_AGGRESSIVE);
break;
case DO_ASSEMBLED_COMBAT:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
me->SetStandState(UNIT_STAND_STATE_STAND);
events.SetPhase(PHASE_VOL7RON);
@@ -1209,7 +1209,7 @@ class boss_aerial_command_unit : public CreatureScript
{
if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
@@ -1651,7 +1651,7 @@ class go_mimiron_hardmode_button : public GameObjectScript
bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
- if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE))
+ if (go->HasFlag(GO_FLAG_NOT_SELECTABLE))
return true;
InstanceScript* instance = go->GetInstanceScript();
@@ -1661,7 +1661,7 @@ class go_mimiron_hardmode_button : public GameObjectScript
if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_COMPUTER)))
computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
return true;
}
};
@@ -1688,7 +1688,7 @@ class spell_mimiron_bomb_bot : public SpellScriptLoader
{
if (Creature* target = GetHitCreature())
{
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ target->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
target->DespawnOrUnsummon(1000);
}
}
@@ -1850,7 +1850,7 @@ class spell_mimiron_magnetic_core : public SpellScriptLoader
void FilterTargets(std::list<WorldObject*>& targets)
{
- targets.remove_if([](WorldObject* obj) { return obj->ToUnit() && (obj->ToUnit()->GetVehicleBase() || obj->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)); });
+ targets.remove_if([](WorldObject* obj) { return obj->IsUnit() && (obj->ToUnit()->GetVehicleBase() || obj->ToUnit()->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)); });
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 35a67d0fa1f..a263badd7c1 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -317,7 +317,7 @@ class go_razorscale_harpoon : public GameObjectScript
{
InstanceScript* instance = go->GetInstanceScript();
if (ObjectAccessor::GetCreature(*go, instance->GetGuidData(BOSS_RAZORSCALE)))
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
return false;
}
};
@@ -358,7 +358,7 @@ class boss_razorscale : public CreatureScript
{
_Reset();
me->SetCanFly(true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
Initialize();
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
@@ -446,7 +446,7 @@ class boss_razorscale : public CreatureScript
phase = PHASE_FLIGHT;
events.SetPhase(PHASE_FLIGHT);
me->SetCanFly(true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
me->GetMotionMaster()->MoveTakeoff(0, RazorFlight);
@@ -457,8 +457,8 @@ class boss_razorscale : public CreatureScript
return;
case EVENT_LAND:
me->SetCanFly(false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
commander->AI()->DoAction(ACTION_GROUND_PHASE);
events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);
@@ -466,7 +466,7 @@ class boss_razorscale : public CreatureScript
events.ScheduleEvent(EVENT_FLIGHT, 35000, 0, PHASE_GROUND);
return;
case EVENT_BREATH:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
me->RemoveAllAuras();
me->SetReactState(REACT_AGGRESSIVE);
Talk(EMOTE_BREATH);
@@ -551,7 +551,7 @@ class boss_razorscale : public CreatureScript
phase = PHASE_PERMAGROUND;
events.SetPhase(PHASE_PERMAGROUND);
me->SetCanFly(false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveAurasDueToSpell(SPELL_HARPOON_TRIGGER);
me->SetSpeedRate(MOVE_FLIGHT, 1.0f);
@@ -585,7 +585,7 @@ class boss_razorscale : public CreatureScript
switch (action)
{
case ACTION_EVENT_START:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat(me, 150.0f);
break;
@@ -658,7 +658,7 @@ class npc_expedition_commander : public CreatureScript
break;
case ACTION_COMMANDER_RESET:
summons.DespawnAll();
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
break;
}
}
@@ -708,10 +708,10 @@ class npc_expedition_commander : public CreatureScript
case 4:
for (uint8 n = 0; n < RAID_MODE(2, 4); n++)
if (Creature* summonedEngineer = ObjectAccessor::GetCreature(*me, Engineer[n]))
- summonedEngineer->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
+ summonedEngineer->SetEmoteState(EMOTE_STATE_USE_STANDING);
for (uint8 n = 0; n < 4; ++n)
if (Creature* summonedDefender = ObjectAccessor::GetCreature(*me, Defender[n]))
- summonedDefender->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
+ summonedDefender->SetEmoteState(EMOTE_STATE_READY2H);
Talk(SAY_AGGRO_2);
AttackStartTimer = 16000;
Phase = 5;
@@ -777,7 +777,7 @@ class npc_mole_machine_trigger : public CreatureScript
{
Initialize();
SetCombatMovement(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED));
}
void Initialize()
@@ -862,7 +862,7 @@ class npc_devouring_flame : public CreatureScript
npc_devouring_flameAI(Creature* creature) : ScriptedAI(creature)
{
SetCombatMovement(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED));
}
void Reset() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 0ad29909298..16cf11b2341 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -203,7 +203,7 @@ class boss_xt002 : public CreatureScript
{
_Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_AGGRESSIVE);
DoCastSelf(SPELL_STAND);
@@ -252,7 +252,7 @@ class boss_xt002 : public CreatureScript
{
Talk(SAY_DEATH);
_JustDied();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
@@ -378,8 +378,8 @@ class boss_xt002 : public CreatureScript
heart->CastSpell(me, SPELL_HEART_LIGHTNING_TETHER);
heart->CastSpell(heart, SPELL_HEART_HEAL_TO_FULL, true);
heart->CastSpell(me, SPELL_RIDE_VEHICLE_EXPOSED, true);
- heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
+ heart->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ heart->AddUnitFlag(UNIT_FLAG_UNK_29);
}
events.CancelEvent(EVENT_SEARING_LIGHT);
@@ -399,7 +399,7 @@ class boss_xt002 : public CreatureScript
Talk(SAY_HEART_CLOSED);
Talk(EMOTE_HEART_CLOSED);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_AGGRESSIVE);
DoCastSelf(SPELL_STAND);
@@ -414,8 +414,8 @@ class boss_xt002 : public CreatureScript
return;
heart->CastSpell(me, SPELL_HEART_RIDE_VEHICLE, true);
- heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
+ heart->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ heart->RemoveUnitFlag(UNIT_FLAG_UNK_29);
heart->RemoveAurasDueToSpell(SPELL_EXPOSED_HEART);
if (!_hardMode)
@@ -681,12 +681,6 @@ class npc_boombot : public CreatureScript
DoCast(SPELL_AURA_BOOMBOT); // For achievement
- // HACK/workaround:
- // these values aren't confirmed - lack of data - and the values in DB are incorrect
- // these values are needed for correct damage of Boom spell
- me->SetFloatValue(UNIT_FIELD_MINDAMAGE, 15000.0f);
- me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f);
-
/// @todo proper waypoints?
if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
@@ -1043,7 +1037,7 @@ class spell_xt002_submerged : public SpellScriptLoader
if (!target)
return;
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ target->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
target->SetStandState(UNIT_STAND_STATE_SUBMERGED);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 2148ec7706d..82f8d66e84e 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -1049,7 +1049,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
void Reset() override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
DoCast(me, SPELL_MATCH_HEALTH);
_summons.DespawnAll();
}
@@ -1063,7 +1063,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
DoCastAOE(SPELL_SHATTERED_ILLUSION_REMOVE, true);
DoCast(me, SPELL_MATCH_HEALTH_2, true); // it doesn't seem to hit Yogg-Saron here
DoCast(me, SPELL_BRAIN_HURT_VISUAL, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
voice->AI()->DoAction(ACTION_PHASE_THREE);
@@ -1537,7 +1537,7 @@ class npc_observation_ring_keeper : public CreatureScript
if (menuId != 10333)
return;
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->DespawnOrUnsummon(2000);
DoCast(SPELL_TELEPORT);
Talk(SAY_KEEPER_CHOSEN_1, player);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 12629ba4b27..573a1e566b6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -201,7 +201,7 @@ class instance_ulduar : public InstanceMapScript
if (_algalonTimer && _algalonTimer <= 60)
algalon->AI()->DoAction(ACTION_INIT_ALGALON);
else
- algalon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ algalon->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
// Keepers at Observation Ring
@@ -566,7 +566,7 @@ class instance_ulduar : public InstanceMapScript
case GO_CELESTIAL_PLANETARIUM_ACCESS_10:
case GO_CELESTIAL_PLANETARIUM_ACCESS_25:
if (_algalonSummoned)
- gameObject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ gameObject->AddFlag(GO_FLAG_IN_USE);
break;
case GO_DOODAD_UL_SIGILDOOR_01:
AlgalonSigilDoorGUID[0] = gameObject->GetGUID();
@@ -758,7 +758,7 @@ class instance_ulduar : public InstanceMapScript
if (GameObject* gameObject = instance->GetGameObject(KologarnChestGUID))
{
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
- gameObject->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ gameObject->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
HandleGameObject(KologarnBridgeGUID, false);
}
@@ -768,7 +768,7 @@ class instance_ulduar : public InstanceMapScript
{
if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID))
if (GetData(DATA_HODIR_RARE_CACHE))
- HodirRareCache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ HodirRareCache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (GameObject* HodirChest = instance->GetGameObject(HodirChestGUID))
HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
@@ -1193,7 +1193,7 @@ class instance_ulduar : public InstanceMapScript
if (Vehicle* vehicle = vehicleCreature->GetVehicleKit())
{
vehicle->RemoveAllPassengers();
- vehicleCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ vehicleCreature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
vehicleCreature->DespawnOrUnsummon(5 * MINUTE * IN_MILLISECONDS);
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 1cf74259c15..6f37c0f6b32 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -115,7 +115,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
{
if (me->GetEntry() != NPC_INGVAR)
me->UpdateEntry(NPC_INGVAR);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
_Reset();
}
@@ -131,7 +131,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
me->StopMoving();
DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
Talk(SAY_DEATH);
}
@@ -229,7 +229,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
break;
case EVENT_JUST_TRANSFORMED:
ScheduleSecondPhase();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
if (Unit* target = me->getThreatManager().getHostilTarget())
AttackStart(target);
else
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index 1f3c675f9d3..c13f8de96d7 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -264,10 +264,10 @@ class npc_vrykul_skeleton : public CreatureScript
// There are some issues with pets
// they will still attack. I would say it is a PetAI bug
- if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
{
// from sniffs
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_DEAD);
events.Reset();
@@ -308,7 +308,7 @@ class npc_vrykul_skeleton : public CreatureScript
case EVENT_SHADOW_FISSURE:
DoCast(me, SPELL_SHADOW_FISSURE, true);
DoCastAOE(SPELL_BONE_ARMOR, true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
me->GetMotionMaster()->MoveChase(me->GetVictim());
events.ScheduleEvent(EVENT_DECREPIFY, urand(4, 6) * IN_MILLISECONDS);
@@ -321,7 +321,7 @@ class npc_vrykul_skeleton : public CreatureScript
return;
}
- if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
index 00f911eac85..478d0588b75 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
@@ -123,7 +123,7 @@ struct generic_boss_controllerAI : public BossAI
if (otherBoss->IsAlive())
{
Talk(SAY_DIED_FIRST);
- me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
otherBoss->AI()->DoAction(ACTION_OTHER_JUST_DIED);
DoCast(me, OtherBossData == DATA_DALRONN ? SPELL_SUMMON_SKARVALD_GHOST : SPELL_SUMMON_DALRONN_GHOST, true);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index dfc6d18767c..2503df7e213 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -73,7 +73,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
if (_forgeId)
_instance->SetData(DATA_FORGE_1 + _forgeId - 1, IN_PROGRESS);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
}
void UpdateAI(uint32 /*diff*/) override
@@ -283,7 +283,7 @@ class npc_enslaved_proto_drake : public CreatureScript
{
if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST)
{
- me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false);
}
}
@@ -292,7 +292,7 @@ class npc_enslaved_proto_drake : public CreatureScript
if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f)
{
_setData = true;
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false);
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index 0a401e0d756..0199fe80aa2 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -140,7 +140,7 @@ public:
if (GameObject* go = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_GORTOK_PALEHOOF_SPHERE)))
{
go->SetGoState(GO_STATE_READY);
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
}
@@ -154,7 +154,7 @@ public:
if (!who)
return;
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -237,7 +237,7 @@ public:
void JustReachedHome() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NOT_ATTACKABLE_1|UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(me, SPELL_FREEZE);
}
@@ -335,7 +335,7 @@ public:
if (!who)
return;
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -355,7 +355,7 @@ public:
void JustReachedHome() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(me, SPELL_FREEZE);
}
@@ -449,7 +449,7 @@ public:
if (!who)
return;
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -470,7 +470,7 @@ public:
void JustReachedHome() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(me, SPELL_FREEZE);
}
@@ -566,7 +566,7 @@ public:
if (!who)
return;
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -586,7 +586,7 @@ public:
void JustReachedHome() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(me, SPELL_FREEZE);
}
@@ -688,7 +688,7 @@ public:
if (!who)
return;
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -708,7 +708,7 @@ public:
void JustReachedHome() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
me->SetStandState(UNIT_STAND_STATE_STAND);
DoCast(me, SPELL_FREEZE);
}
@@ -785,7 +785,7 @@ public:
if (Creature* nextBoss = ObjectAccessor::GetCreature(*me, instance->GetGuidData(nextBossId)))
{
nextBoss->RemoveAurasDueToSpell(SPELL_FREEZE);
- nextBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
+ nextBoss->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC));
nextBoss->SetStandState(UNIT_STAND_STATE_STAND);
nextBoss->SetInCombatWithZone();
}
@@ -849,7 +849,7 @@ class go_palehoof_sphere : public GameObjectScript
Creature* palehoof = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_GORTOK_PALEHOOF));
if (palehoof && palehoof->IsAlive())
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
palehoof->AI()->DoAction(ACTION_NEXT_PHASE);
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index fa942e4c1bb..bf63d511a6d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -231,7 +231,7 @@ public:
{
case ACTION_START_ENCOUNTER:
instance->SetBossState(DATA_SKADI_THE_RUTHLESS, IN_PROGRESS);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setActive(true);
SpawnFirstWave();
Talk(SAY_AGGRO);
@@ -267,7 +267,7 @@ public:
Talk(SAY_DRAKE_DEATH);
DoCast(me, SPELL_SKADI_TELEPORT, true);
summons.DespawnEntry(NPC_WORLD_TRIGGER);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
_phase = PHASE_GROUND;
@@ -371,7 +371,7 @@ public:
me->setActive(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
+ me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false);
_scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/)
{
@@ -505,7 +505,7 @@ struct npc_skadi_trashAI : public ScriptedAI
switch (pointId)
{
case POINT_0:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, me->GetEntry() == NPC_YMIRJAR_WARRIOR ? EMOTE_STATE_READY1H : EMOTE_STATE_READY2HL);
+ me->SetEmoteState(me->GetEntry() == NPC_YMIRJAR_WARRIOR ? EMOTE_STATE_READY1H : EMOTE_STATE_READY2HL);
break;
case POINT_1:
_scheduler.Schedule(Seconds(1), [this](TaskContext /*context*/)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 6dcb88f9455..db6a0829c5b 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -191,14 +191,14 @@ class boss_svala : public CreatureScript
if (events.IsInPhase(IDLE) && me->IsValidAttackTarget(who) && me->IsWithinDistInMap(who, 40))
{
events.SetPhase(INTRO);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR)))
mirror->SetGoState(GO_STATE_READY);
if (Creature* arthas = me->SummonCreature(NPC_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN))
{
- arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ arthas->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
_arthasGUID = arthas->GetGUID();
}
events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_0, 1 * IN_MILLISECONDS, 0, INTRO);
@@ -303,7 +303,7 @@ class boss_svala : public CreatureScript
}
me->RemoveAllAuras();
me->UpdateEntry(NPC_SVALA_SORROWGRAVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_1, 6 * IN_MILLISECONDS, 0, INTRO);
break;
case EVENT_INTRO_SVALA_TALK_1:
@@ -338,7 +338,7 @@ class boss_svala : public CreatureScript
case EVENT_INTRO_DESPAWN_ARTHAS:
if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR)))
mirror->SetGoState(GO_STATE_ACTIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
arthas->DespawnOrUnsummon();
_arthasGUID.Clear();
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index a2b4a1000aa..4ec4c58be28 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -174,7 +174,7 @@ public:
{
DoCast(ancestor, SPELL_CHANNEL_YMIRON_TO_SPIRIT);
ancestor->CastSpell(me, SPELL_CHANNEL_SPIRIT_TO_YMIRON, true);
- ancestor->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ ancestor->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
ancestor->SetDisableGravity(true);
ActiveAncestorGUID = ancestor->GetGUID();
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
index 9474bae2da1..cc840fea23e 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
@@ -103,7 +103,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
if (GetBossState(DATA_GORTOK_PALEHOOF) == DONE)
{
HandleGameObject(ObjectGuid::Empty, true, go);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case GO_SKADI_THE_RUTHLESS_DOOR:
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
index 1938ac475b6..f6310236648 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -252,7 +252,7 @@ class npc_frozen_orb_stalker : public CreatureScript
npc_frozen_orb_stalkerAI(Creature* creature) : ScriptedAI(creature)
{
creature->SetVisible(false);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetControlled(true, UNIT_STATE_ROOT);
creature->SetReactState(REACT_PASSIVE);
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 4d09d8b0a51..7f480efe7a8 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -254,7 +254,7 @@ class npc_ichor_globule : public CreatureScript
if (spellInfo->Id == SPELL_WATER_GLOBULE_VISUAL)
{
DoCast(me, SPELL_WATER_GLOBULE_TRANSFORM);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->GetMotionMaster()->MoveFollow(caster, 0.0f, 0.0f);
}
}
@@ -308,14 +308,14 @@ class spell_ichoron_drained : public SpellScriptLoader
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31);
- GetTarget()->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ GetTarget()->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31));
+ GetTarget()->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31);
- GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ GetTarget()->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31));
+ GetTarget()->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
if (GetTarget()->IsAIEnabled)
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 4ceb0be6a1d..30a4b108388 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -411,14 +411,14 @@ class instance_violet_hold : public InstanceMapScript
for (uint8 i = 0; i < ActivationCrystalCount; ++i)
if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i]))
- crystal->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ crystal->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
else if (data == NOT_STARTED)
{
if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
{
mainDoor->SetGoState(GO_STATE_ACTIVE);
- mainDoor->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ mainDoor->RemoveFlag(GO_FLAG_LOCKED);
}
DoUpdateWorldState(WORLD_STATE_VH_SHOW, 0);
@@ -427,21 +427,21 @@ class instance_violet_hold : public InstanceMapScript
for (uint8 i = 0; i < ActivationCrystalCount; ++i)
if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i]))
- crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ crystal->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
else if (data == DONE)
{
if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
{
mainDoor->SetGoState(GO_STATE_ACTIVE);
- mainDoor->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ mainDoor->RemoveFlag(GO_FLAG_LOCKED);
}
DoUpdateWorldState(WORLD_STATE_VH_SHOW, 0);
for (uint8 i = 0; i < ActivationCrystalCount; ++i)
if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i]))
- crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ crystal->AddFlag(GO_FLAG_NOT_SELECTABLE);
if (Creature* sinclari = GetCreature(DATA_SINCLARI))
sinclari->AI()->DoAction(ACTION_SINCLARI_OUTRO);
@@ -559,7 +559,7 @@ class instance_violet_hold : public InstanceMapScript
{
if (Creature* moragg = GetCreature(DATA_MORAGG))
{
- moragg->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ moragg->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
moragg->AI()->DoZoneInCombat(moragg, 200.0f);
}
});
@@ -592,12 +592,12 @@ class instance_violet_hold : public InstanceMapScript
for (uint32 i = DATA_EREKEM_GUARD_1; i <= DATA_EREKEM_GUARD_2; ++i)
{
if (Creature* guard = instance->GetCreature(GetGuidData(i)))
- guard->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ guard->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
}
if (Creature* erekem = GetCreature(DATA_EREKEM))
{
- erekem->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ erekem->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
erekem->AI()->DoZoneInCombat(erekem, 200.0f);
}
});
@@ -620,7 +620,7 @@ class instance_violet_hold : public InstanceMapScript
{
if (Creature* ichoron = GetCreature(DATA_ICHORON))
{
- ichoron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ ichoron->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
ichoron->AI()->DoZoneInCombat(ichoron, 200.0f);
}
});
@@ -642,7 +642,7 @@ class instance_violet_hold : public InstanceMapScript
{
if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR))
{
- lavanthor->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ lavanthor->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
lavanthor->AI()->DoZoneInCombat(lavanthor, 200.0f);
}
});
@@ -669,7 +669,7 @@ class instance_violet_hold : public InstanceMapScript
{
if (Creature* xevozz = GetCreature(DATA_XEVOZZ))
{
- xevozz->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ xevozz->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
xevozz->AI()->DoZoneInCombat(xevozz, 200.0f);
}
});
@@ -695,7 +695,7 @@ class instance_violet_hold : public InstanceMapScript
{
if (Creature* zuramat = GetCreature(DATA_ZURAMAT))
{
- zuramat->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ zuramat->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
zuramat->AI()->DoZoneInCombat(zuramat, 200.0f);
}
});
@@ -735,7 +735,7 @@ class instance_violet_hold : public InstanceMapScript
UpdateKilledBoss(guard);
guard->GetMotionMaster()->MoveTargetedHome();
- guard->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ guard->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
}
}
// no break
@@ -748,7 +748,7 @@ class instance_violet_hold : public InstanceMapScript
}
boss->GetMotionMaster()->MoveTargetedHome();
- boss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ boss->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
break;
}
}
@@ -903,7 +903,7 @@ class instance_violet_hold : public InstanceMapScript
{
cyanigosa->RemoveAurasDueToSpell(SPELL_CYANIGOSA_ARCANE_POWER_STATE);
cyanigosa->CastSpell(cyanigosa, SPELL_CYANIGOSA_TRANSFORM, true);
- cyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ cyanigosa->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
}
});
});
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 23191151d2c..c6e8e19ea05 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -355,7 +355,7 @@ class npc_sinclari_vh : public CreatureScript
summon->AI()->SetData(DATA_PORTAL_LOCATION, i);
me->SetVisible(true);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
std::list<Creature*> guardList;
me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f);
@@ -372,7 +372,7 @@ class npc_sinclari_vh : public CreatureScript
{
if (menuId == GOSSIP_MENU_START_ENCOUNTER && gossipListId == 0)
{
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
_instance->SetData(DATA_MAIN_EVENT_STATE, SPECIAL);
ScheduleIntro();
player->PlayerTalkClass->SendCloseGossip();
@@ -469,7 +469,7 @@ class npc_sinclari_vh : public CreatureScript
if (GameObject* mainDoor = _instance->GetGameObject(DATA_MAIN_DOOR))
{
mainDoor->SetGoState(GO_STATE_READY);
- mainDoor->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ mainDoor->AddFlag(GO_FLAG_LOCKED);
}
task.Repeat(Seconds(5));
break;
@@ -496,7 +496,7 @@ class npc_sinclari_vh : public CreatureScript
task.Schedule(Seconds(10), [this](TaskContext /*task*/)
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
});
});
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 3e487c356f5..43d67555eab 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -120,7 +120,7 @@ public:
DoCast(me, SPELL_EXPLODE_CART, true);
DoCast(me, SPELL_SUMMON_CART, true);
if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f))
- cart->SetUInt32Value(GAMEOBJECT_FACTION, 14);
+ cart->SetFaction(14);
phaseTimer = 3000;
phase = 2;
break;
@@ -140,7 +140,7 @@ public:
DoCast(me, SPELL_SUMMON_WORM, true);
if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f))
{
- worm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ worm->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
worm->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
}
phaseTimer = 1000;
@@ -151,7 +151,7 @@ public:
if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f))
{
me->Kill(worm);
- worm->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ worm->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
phaseTimer = 2000;
phase = 7;
@@ -712,7 +712,7 @@ public:
owner->CastSpell(owner, SPELL_SUBDUED, true);
GetCaster()->CastSpell(GetCaster(), SPELL_DRAKE_HATCHLING_SUBDUED, true);
owner->setFaction(35);
- owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ owner->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
owner->DespawnOrUnsummon(3 * MINUTE*IN_MILLISECONDS);
}
@@ -818,7 +818,7 @@ public:
void Reset() override
{
me->RestoreFaction();
- me->RemoveStandFlags(UNIT_STAND_STATE_SIT);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
Initialize();
}
@@ -836,7 +836,7 @@ public:
if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3730.313f, 3518.689f, 473.324f, 1.562f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
{
arthasGUID = arthas->GetGUID();
- arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ arthas->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
arthas->SetReactState(REACT_PASSIVE);
arthas->SetWalk(true);
arthas->GetMotionMaster()->MovePoint(0, 3737.374756f, 3564.841309f, 477.433014f);
@@ -893,7 +893,7 @@ public:
{
talbot->UpdateEntry(NPC_PRINCE_VALANAR);
talbot->setFaction(14);
- talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ talbot->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
talbot->SetReactState(REACT_PASSIVE);
}
phaseTimer = 5000;
@@ -933,7 +933,7 @@ public:
leryssaGUID = leryssa->GetGUID();
leryssa->SetWalk(false);
leryssa->SetReactState(REACT_PASSIVE);
- leryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ leryssa->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
leryssa->GetMotionMaster()->MovePoint(0, 3741.969971f, 3571.439941f, 477.441010f);
}
phaseTimer = 2000;
@@ -991,10 +991,10 @@ public:
break;
case 14:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (talbot)
{
- talbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ talbot->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
talbot->SetReactState(REACT_AGGRESSIVE);
talbot->CastSpell(me, SPELL_SHADOW_BOLT, false);
}
@@ -1009,7 +1009,7 @@ public:
break;
case 16:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
phaseTimer = 20000;
++phase;
break;
@@ -1021,7 +1021,7 @@ public:
arlos->RemoveFromWorld();
if (talbot)
talbot->RemoveFromWorld();
- me->RemoveStandFlags(UNIT_STAND_STATE_SIT);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
SetEscortPaused(false);
phaseTimer = 0;
phase = 0;
@@ -1289,7 +1289,7 @@ public:
phase = 0;
phaseTimer = 0;
- creature->RemoveStandFlags(UNIT_STAND_STATE_SIT);
+ creature->SetStandState(UNIT_STAND_STATE_STAND);
}
bool bDone;
@@ -2165,8 +2165,8 @@ public:
npc_hidden_cultistAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE);
- uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS);
+ uiEmoteState = creature->GetEmoteState();
+ uiNpcFlags = NPCFlags(creature->m_unitData->NpcFlags[0]);
}
void Initialize()
@@ -2177,8 +2177,8 @@ public:
uiPlayerGUID.Clear();
}
- uint32 uiEmoteState;
- uint32 uiNpcFlags;
+ Emote uiEmoteState;
+ NPCFlags uiNpcFlags;
uint32 uiEventTimer;
uint8 uiEventPhase;
@@ -2188,10 +2188,10 @@ public:
void Reset() override
{
if (uiEmoteState)
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, uiEmoteState);
+ me->SetEmoteState(uiEmoteState);
if (uiNpcFlags)
- me->SetUInt32Value(UNIT_NPC_FLAGS, uiNpcFlags);
+ me->SetNpcFlags(uiNpcFlags);
Initialize();
@@ -2203,8 +2203,8 @@ public:
void DoAction(int32 /*iParam*/) override
{
me->StopMoving();
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
if (Player* player = ObjectAccessor::GetPlayer(*me, uiPlayerGUID))
me->SetFacingToObject(player);
uiEventTimer = 3000;
diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp
index f5d6ac3d912..22b162232b6 100644
--- a/src/server/scripts/Northrend/zone_dalaran.cpp
+++ b/src/server/scripts/Northrend/zone_dalaran.cpp
@@ -64,7 +64,7 @@ public:
{
npc_mageguard_dalaranAI(Creature* creature) : ScriptedAI(creature)
{
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_NORMAL, true);
creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 255bedc08a6..785f39259a9 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -404,7 +404,7 @@ public:
if (!tree || !player)
return;
- tree->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
+ tree->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
if (roll == 1) // friendly version
{
@@ -575,8 +575,8 @@ class npc_wyrmrest_defender : public CreatureScript
{
case SPELL_WYRMREST_DEFENDER_MOUNT:
Talk(WHISPER_MOUNTED, me->GetCharmerOrOwner());
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC));
+ me->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
break;
// Both below are for checking low hp warning
case SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE:
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 8d87b702ed5..b36374d6ecc 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -371,8 +371,8 @@ public:
if (me->FindNearestGameObject(OBJECT_HAUNCH, 2.0f))
{
me->SetStandState(UNIT_STAND_STATE_DEAD);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddDynamicFlag(UNIT_DYNFLAG_DEAD);
}
_phase = 0;
}
@@ -415,7 +415,7 @@ public:
{
if (me->FindNearestCreature(NPC_TALLHORN_STAG, 0.2f))
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
+ me->SetEmoteState(EMOTE_STATE_USE_STANDING);
}
else
_events.ScheduleEvent(EVENT_WOODSMAN_1, 0);
@@ -430,11 +430,11 @@ public:
switch (eventId)
{
case EVENT_WOODSMAN_1:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT);
+ me->SetEmoteState(EMOTE_STATE_LOOT);
_events.ScheduleEvent(EVENT_WOODSMAN_2, 3000);
break;
case EVENT_WOODSMAN_2:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H);
+ me->SetEmoteState(EMOTE_ONESHOT_ATTACK1H);
_events.ScheduleEvent(EVENT_WOODSMAN_1, 4000);
break;
default:
@@ -566,7 +566,7 @@ public:
{
_playerGUID.Clear();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_AGGRESSIVE);
}
@@ -616,7 +616,7 @@ public:
{
if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->SetReactState(REACT_PASSIVE);
me->CombatStop(false);
_playerGUID = caster->GetGUID();
@@ -690,7 +690,7 @@ public:
{
Initialize();
if (me->GetEntry() == NPC_LAKE_FROG_QUEST)
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
void UpdateAI(uint32 diff) override
@@ -715,11 +715,11 @@ public:
_events.ScheduleEvent(EVENT_LAKEFROG_3, 3000);
break;
case EVENT_LAKEFROG_3:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
_events.ScheduleEvent(EVENT_LAKEFROG_4, 25000);
break;
case EVENT_LAKEFROG_4:
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
_events.ScheduleEvent(EVENT_LAKEFROG_5, 2000);
break;
case EVENT_LAKEFROG_5:
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index 90914f1af0a..e00322c7c8a 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -944,7 +944,7 @@ public:
case 25:
Talk(PLANE_EMOTE);
DoCast(SPELL_ENGINE);
- me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT);
+ me->AddUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT);
break;
}
}
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index ec49ea14a60..56215d77c35 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -498,7 +498,7 @@ public:
case EVENT_SCRIPT_1:
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
Talk(SAY_BRANN_1, player);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveUnitFlag(UnitFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
if (Creature* voice = me->SummonCreature(NPC_A_DISTANT_VOICE, 7863.43f, -1396.585f, 1538.076f, 2.949606f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 49000))
voiceGUID = voice->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_2, 4000);
@@ -509,11 +509,11 @@ public:
events.ScheduleEvent(EVENT_SCRIPT_3, 6000);
break;
case EVENT_SCRIPT_3:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_WORK_MINING);
+ me->SetEmoteState(EMOTE_STATE_WORK_MINING);
events.ScheduleEvent(EVENT_SCRIPT_4, 6000);
break;
case EVENT_SCRIPT_4:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
{
voice->CastSpell(voice, SPELL_RESURRECTION);
@@ -673,7 +673,7 @@ public:
playerGUID = who->GetGUID();
Talk(SAY_HOLD_ON, who);
me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
me->GetMotionMaster()->MovePath(PATH_JOKKUM, false);
}
}
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 6c71672eb09..3dc606e1f76 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -345,8 +345,8 @@ class go_wg_vehicle_teleporter : public GameObjectScript
bool IsFriendly(Unit* passenger)
{
- return ((go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_HORDE] && passenger->getFaction() == HORDE) ||
- (go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_ALLIANCE] && passenger->getFaction() == ALLIANCE));
+ return ((go->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->getFaction() == HORDE) ||
+ (go->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->getFaction() == ALLIANCE));
}
Creature* GetValidVehicle(Creature* cVeh)
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 4f6de8521a2..76f6a76e8e6 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -55,7 +55,7 @@ public:
void Reset() override
{
_rageclawGUID.Clear();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
float x, y, z;
me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 0.1f);
@@ -237,8 +237,8 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ me->SetEmoteState(EMOTE_STATE_COWER);
Initialize();
}
@@ -251,8 +251,8 @@ public:
switch (eventId)
{
case EVENT_RECRUIT_1:
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
Talk(SAY_RECRUIT);
_events.ScheduleEvent(EVENT_RECRUIT_2, 3000);
break;
@@ -509,12 +509,12 @@ public:
{
case EVENT_TURN_TO_POT:
me->SetFacingTo(6.230825f);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING_NO_SHEATHE);
+ me->SetEmoteState(EMOTE_STATE_USE_STANDING_NO_SHEATHE);
_events.ScheduleEvent(EVENT_TURN_BACK, 11000);
break;
case EVENT_TURN_BACK:
me->SetFacingTo(4.886922f);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
_events.ScheduleEvent(EVENT_TURN_TO_POT, urand(25000, 41000));
break;
case EVENT_EASY_123:
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index cd3c6e0933e..fafdb880e1f 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -314,7 +314,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
nodes[0] = FlightPathStartNodes[NA_ROOST_N];
nodes[1] = FlightPathEndNodes[NA_ROOST_N];
player->ActivateTaxiPathTo(nodes);
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
+ player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
player->UpdatePvP(true, true);
retval = true;
break;
@@ -322,7 +322,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
nodes[0] = FlightPathStartNodes[NA_ROOST_S];
nodes[1] = FlightPathEndNodes[NA_ROOST_S];
player->ActivateTaxiPathTo(nodes);
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
+ player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
player->UpdatePvP(true, true);
retval = true;
break;
@@ -330,7 +330,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
nodes[0] = FlightPathStartNodes[NA_ROOST_W];
nodes[1] = FlightPathEndNodes[NA_ROOST_W];
player->ActivateTaxiPathTo(nodes);
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
+ player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
player->UpdatePvP(true, true);
retval = true;
break;
@@ -338,7 +338,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
nodes[0] = FlightPathStartNodes[NA_ROOST_E];
nodes[1] = FlightPathEndNodes[NA_ROOST_E];
player->ActivateTaxiPathTo(nodes);
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
+ player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP);
player->UpdatePvP(true, true);
retval = true;
break;
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
index d65e9bc3509..d54966b0c61 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
@@ -73,7 +73,7 @@ class instance_sethekk_halls : public InstanceMapScript
/// gameobject should have GO_DYNFLAG_LO_ACTIVATE too, which makes gobs interactable with GO_FLAG_INTERACT_COND
/// so just removed GO_FLAG_INTERACT_COND
if (GameObject* coffer = GetGameObject(DATA_TALON_KING_COFFER))
- coffer->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE);
+ coffer->RemoveFlag(GameObjectFlags(GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE));
}
break;
default:
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index d8ac61d0034..9611194b017 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -543,7 +543,7 @@ public:
void EnterCombat(Unit* /*who*/) override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
_EnterCombat();
}
@@ -563,7 +563,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
_JustDied();
}
@@ -674,7 +674,7 @@ public:
Timer[EVENT_TALK_SEQUENCE] = 100;
me->RemoveAllAuras();
me->InterruptNonMeleeSpells(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->GetMotionMaster()->Clear(false);
me->AttackStop();
break;
@@ -685,7 +685,7 @@ public:
Timer[EVENT_FLIGHT_SEQUENCE] = 1;
me->RemoveAllAuras();
me->InterruptNonMeleeSpells(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->GetMotionMaster()->Clear(false);
me->AttackStop();
}
@@ -810,7 +810,7 @@ public:
if (Glaive)
{
GlaiveGUID[i] = Glaive->GetGUID();
- Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Glaive->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Glaive->SetDisplayId(MODEL_INVISIBLE);
Glaive->setFaction(me->getFaction());
DoCast(Glaive, SPELL_THROW_GLAIVE2);
@@ -826,7 +826,7 @@ public:
if (Glaive)
{
GlaiveGUID[i] = Glaive->GetGUID();
- Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Glaive->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Glaive->SetDisplayId(MODEL_INVISIBLE);
Glaive->setFaction(me->getFaction());
DoCast(Glaive, SPELL_THROW_GLAIVE, true);
@@ -879,7 +879,7 @@ public:
break;
case 10: // attack
DoResetThreat();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetSheath(SHEATH_STATE_MELEE);
EnterPhase(PHASE_NORMAL_2);
break;
@@ -1315,7 +1315,7 @@ public:
{
me->SetFullHealth();
me->SetVisible(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
Timer[EVENT_MAIEV_STEALTH] = 0;
BlinkToPlayer();
EnterPhase(Phase);
@@ -1351,7 +1351,7 @@ public:
if (HealthBelowPct(50))
{
me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
me->AttackStop();
@@ -1424,8 +1424,8 @@ public:
KillAllElites();
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); // Database sometimes has strange values..
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE); // Database sometimes has strange values..
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->setActive(false);
me->SetVisible(false);
}
@@ -1486,7 +1486,7 @@ public:
void BeginChannel()
{
me->setActive(true);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
if (!JustCreated)
return;
float x, y, z;
@@ -1534,7 +1534,7 @@ public:
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
EnterEvadeMode(EVADE_REASON_OTHER);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
++WalkCount;
}
JustCreated = false;
@@ -1562,11 +1562,11 @@ public:
Timer = 30000; // chain lightning
break;
case PHASE_FIGHT_MINIONS:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
Timer = urand(10000, 16000); // summon minion
break;
case PHASE_RETURN:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
KillAllElites();
WalkCount = 0;
BeginWalk();
@@ -1806,9 +1806,9 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset()
Initialize();
me->SetDisplayId(MODEL_ILLIDAN);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag( UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
me->SetDisableGravity(false);
me->setActive(false);
@@ -1845,7 +1845,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::JustSummoned(Creature* su
case MAIEV_SHADOWSONG:
{
summon->SetVisible(false); // Leave her invisible until she has to talk
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
MaievGUID = summon->GetGUID();
ENSURE_AI(boss_maiev_shadowsong::boss_maievAI, summon->AI())->GetIllidanGUID(me->GetGUID());
summon->AI()->DoAction(PHASE_TALK_SEQUENCE);
@@ -1866,7 +1866,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
switch (TalkCount)
{
case 0:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
break;
case 8:
// Equip our warglaives!
@@ -1877,7 +1877,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
case 9:
if (Creature* akama = ObjectAccessor::GetCreature(*me, AkamaGUID))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->AddThreat(akama, 100.0f);
ENSURE_AI(npc_akama_illidan::npc_akama_illidanAI, akama->AI())->EnterPhase(PHASE_FIGHT_ILLIDAN);
EnterPhase(PHASE_NORMAL);
@@ -1900,8 +1900,8 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
case 14:
if (Creature* maiev = ObjectAccessor::GetCreature(*me, MaievGUID))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
- maiev->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
+ maiev->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
maiev->AddThreat(me, 10000000.0f); // Have Maiev add a lot of threat on us so that players don't pull her off if they damage her via AOE
maiev->AI()->AttackStart(me); // Force Maiev to attack us.
EnterPhase(PHASE_NORMAL_MAIEV);
@@ -1932,7 +1932,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
{
maiev->CastSpell(maiev, SPELL_TELEPORT_VISUAL, true);
maiev->setDeathState(JUST_DIED);
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
+ me->SetStandState(UNIT_STAND_STATE_DEAD);
}
break;
case 21: // Kill ourself.
@@ -1972,7 +1972,7 @@ public:
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index ebb698650fc..1e9fce3e1bd 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -165,7 +165,7 @@ public:
{
_inCombat = true;
DoZoneInCombat();
- me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_STAND);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
events.ScheduleEvent(EVENT_SUBMERGE, Seconds(10));
}
}
@@ -774,12 +774,12 @@ class spell_reliquary_of_souls_submerge : public SpellScriptLoader
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_SUBMERGED);
+ GetTarget()->SetStandState(UNIT_STAND_STATE_SUBMERGED);
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_STAND);
+ GetTarget()->SetStandState(UNIT_STAND_STATE_STAND);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 1d48140db59..41b07aad13c 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -222,9 +222,9 @@ public:
{
_Reset();
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetEmoteState(EMOTE_STATE_STUN);
me->SetWalk(true);
events.ScheduleEvent(EVENT_INITIALIZE_SPAWNERS, Seconds(1));
me->SummonCreatureGroup(SUMMON_GROUP_RESET);
@@ -247,7 +247,7 @@ public:
if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL)
{
events.ScheduleEvent(EVENT_START_CHANNELERS_AND_SPAWNERS, Seconds(1));
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ me->SetEmoteState(EMOTE_STATE_NONE);
events.ScheduleEvent(EVENT_EVADE_CHECK, Seconds(10));
if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
@@ -262,8 +262,8 @@ public:
if (_isInPhaseOne && motionType == CHASE_MOTION_TYPE)
{
_isInPhaseOne = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetWalk(false);
events.ScheduleEvent(EVENT_ADD_THREAT, Milliseconds(100));
@@ -324,7 +324,7 @@ public:
{
for (ObjectGuid const summonGuid : summons)
if (Creature* channeler = ObjectAccessor::GetCreature(*me, summonGuid))
- channeler->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ channeler->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
for (ObjectGuid const spawnerGuid : _spawners)
if (Creature* spawner = ObjectAccessor::GetCreature(*me, spawnerGuid))
@@ -388,7 +388,7 @@ public:
DoCastSelf(SPELL_STEALTH);
if (_instance->GetBossState(DATA_SHADE_OF_AKAMA) != DONE)
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
void JustSummoned(Creature* summon) override
@@ -476,7 +476,7 @@ public:
{
case EVENT_SHADE_START:
_instance->SetBossState(DATA_SHADE_OF_AKAMA, IN_PROGRESS);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->RemoveAurasDueToSpell(SPELL_STEALTH);
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(AKAMA_CHANNEL_WAYPOINT, AkamaWP[0], false);
@@ -593,7 +593,7 @@ public:
{
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
- if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
DoCastSelf(SPELL_SHADE_SOUL_CHANNEL);
else
@@ -602,7 +602,7 @@ public:
channel.Repeat(Seconds(2));
});
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void UpdateAI(uint32 diff) override
@@ -742,7 +742,7 @@ public:
{
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
- if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
me->GetMotionMaster()->MovePoint(0, shade->GetPosition());
else if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
@@ -780,7 +780,7 @@ public:
{
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
- if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
{
me->SetFacingToObject(shade);
DoCastSelf(SPELL_SHADE_SOUL_CHANNEL);
@@ -1174,7 +1174,7 @@ public:
Talk(SAY_BROKEN_HAIL);
break;
case ACTION_BROKEN_EMOTE:
- me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_KNEEL);
+ me->SetStandState(UNIT_STAND_STATE_KNEEL);
break;
default:
break;
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index 9259e74fc7a..e15663a071d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -117,7 +117,7 @@ public:
{
boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND), _intro(false)
{
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
creature->SetReactState(REACT_PASSIVE);
}
@@ -203,7 +203,7 @@ public:
events.Repeat(Seconds(18), Seconds(30));
break;
case EVENT_FINISH_INTRO:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetReactState(REACT_AGGRESSIVE);
break;
default:
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
index 73e115e7aa6..527d8983d80 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -668,7 +668,7 @@ public:
if (Creature* Cyclone = me->SummonCreature(CREATURE_CYCLONE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand32() % 5), TEMPSUMMON_TIMED_DESPAWN, 15000))
{
Cyclone->SetObjectScale(3.0f);
- Cyclone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Cyclone->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Cyclone->setFaction(me->getFaction());
Cyclone->CastSpell(Cyclone, SPELL_CYCLONE_CYCLONE, true);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
index 775e4323e00..d40f46bbaaa 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
@@ -154,7 +154,7 @@ public:
{
beamer->CastSpell(me, SPELL_BLUE_BEAM, true);
beamer->SetDisplayId(11686); //invisible
- beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ beamer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
beams[0] = beamer->GetGUID();
}
beamer = me->SummonCreature(ENTRY_BEAM_DUMMY, -219.918f, -371.308f, 22.0042f, 2.73072f, TEMPSUMMON_CORPSE_DESPAWN, 0);
@@ -162,7 +162,7 @@ public:
{
beamer->CastSpell(me, SPELL_BLUE_BEAM, true);
beamer->SetDisplayId(11686); //invisible
- beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ beamer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
beams[1] = beamer->GetGUID();
}
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index 9426cbb113e..211be3d55f2 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -152,7 +152,7 @@ public:
Intro = false;
JustCreated = true;
CanAttack = false;
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // set it only once on Creature create (no need do intro if wiped)
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // set it only once on Creature create (no need do intro if wiped)
}
void Initialize()
@@ -322,7 +322,7 @@ public:
if (AggroTimer <= diff)
{
CanAttack = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
AggroTimer=19000;
}
else
@@ -852,7 +852,7 @@ public:
Initialize();
me->SetDisplayId(11686); // invisible
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void MoveInLineOfSight(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 4b99ab3335b..d664ed9ce98 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -155,8 +155,8 @@ public:
instance->SetData(DATA_STRANGE_POOL, NOT_STARTED);
DoCast(me, SPELL_SUBMERGE); // submerge anim
me->SetVisible(false); // we start invis under water, submerged
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
void JustDied(Unit* /*killer*/) override
@@ -207,7 +207,7 @@ public:
if (!Submerged && WaitTimer2 <= diff) // wait 500ms before emerge anim
{
me->RemoveAllAuras();
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
DoCast(me, SPELL_EMERGE, false);
WaitTimer2 = 60000; // never reached
WaitTimer = 3000;
@@ -219,8 +219,8 @@ public:
{
WaitTimer = 3000;
CanStartEvent = true; // fresh fished from pool
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
else
WaitTimer -= diff;
@@ -335,8 +335,8 @@ public:
Submerged = false;
me->InterruptNonMeleeSpells(false); // shouldn't be any
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->RemoveFlag(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SUBMERGED);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
DoCast(me, SPELL_EMERGE, true);
Spawned = false;
SpoutTimer = 3000; // directly cast Spout after emerging!
@@ -355,7 +355,7 @@ public:
if (!Spawned)
{
- me->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->SetUnitFlags(UNIT_FLAG_IMMUNE_TO_PC);
// spawn adds
for (uint8 i = 0; i < 9; ++i)
if (Creature* summoned = me->SummonCreature(i < 6 ? NPC_COILFANG_AMBUSHER : NPC_COILFANG_GUARDIAN, AddPos[i][0], AddPos[i][1], AddPos[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0))
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
index 0965ad18bc2..52d74278f15 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
@@ -320,8 +320,8 @@ public:
{
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
index 0c1b98076f3..41897eaeb62 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
@@ -65,14 +65,14 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
//hack, due to really weird spell behaviour :(
if (instance->GetData(DATA_DISTILLER) == IN_PROGRESS)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
}
@@ -80,8 +80,8 @@ public:
void StartRageGen(Unit* /*caster*/)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_WARLORDS_RAGE_NAGA, true);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
index f338f7acf97..7082d0456ed 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
@@ -39,7 +39,7 @@ class go_main_chambers_access_panel : public GameObjectScript
if (go->GetEntry() == GO_ACCESS_PANEL_MEK && (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE || instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL))
instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, SPECIAL);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
return true;
@@ -140,7 +140,7 @@ class instance_steam_vault : public InstanceMapScript
case DATA_HYDROMANCER_THESPIA:
if (state == DONE)
if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_HYDRO))
- panel->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (state == SPECIAL)
{
if (GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL)
@@ -152,7 +152,7 @@ class instance_steam_vault : public InstanceMapScript
case DATA_MEKGINEER_STEAMRIGGER:
if (state == DONE)
if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_MEK))
- panel->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (state == SPECIAL)
{
if (GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL)
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
index dbdfdb346e1..82f33015979 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
@@ -268,7 +268,7 @@ public:
me->RemoveAurasDueToSpell(SPELL_STAY_SUBMERGED);
DoCast(me, SPELL_STAND);
DoCast(me, SPELL_RESURFACE, true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_SYNCH_HEALTH, Seconds(3));
}
@@ -277,7 +277,7 @@ public:
if (Creature* frozenCore = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FROZEN_CORE)))
frozenCore->AI()->DoAction(ACTION_AHUNE_RETREAT);
me->RemoveAurasDueToSpell(SPELL_AHUNES_SHIELD);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_31);
+ me->AddUnitFlag(UNIT_FLAG_UNK_31);
DoCast(me, SPELL_SUBMERGED, true);
DoCast(me, SPELL_AHUNE_SELF_STUN, true);
DoCast(me, SPELL_STAY_SUBMERGED, true);
@@ -326,7 +326,7 @@ public:
{
if (action == ACTION_AHUNE_RETREAT)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
me->RemoveAurasDueToSpell(SPELL_ICE_SPEAR_AURA);
_events.ScheduleEvent(EVENT_SYNCH_HEALTH, Seconds(3), 0, PHASE_TWO);
}
@@ -334,7 +334,7 @@ public:
{
_events.Reset();
DoCast(me, SPELL_ICE_SPEAR_AURA);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC));
}
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index fb35c42e74c..cb4b7aac3b7 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -107,14 +107,14 @@ class boss_broggok : public CreatureScript
break;
case ACTION_ACTIVATE_BROGGOK:
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000);
events.ScheduleEvent(EVENT_POISON_BOLT, 7000);
events.ScheduleEvent(EVENT_POISON_CLOUD, 5000);
break;
case ACTION_RESET_BROGGOK:
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
break;
}
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
index 52087352be1..8a361ea1a60 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
@@ -100,7 +100,7 @@ class boss_kelidan_the_breaker : public CreatureScript
Initialize();
SummonChannelers();
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
}
void EnterCombat(Unit* who) override
@@ -144,7 +144,7 @@ class boss_kelidan_the_breaker : public CreatureScript
return;
}
me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
if (killer)
AttackStart(killer);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
index c581a0b8198..27633445701 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
@@ -219,7 +219,7 @@ class instance_blood_furnace : public InstanceMapScript
{
if (!prisoner->IsAlive())
prisoner->Respawn(true);
- prisoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ prisoner->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
}
void StorePrisoner(Creature* creature)
@@ -307,7 +307,7 @@ class instance_blood_furnace : public InstanceMapScript
for (GuidSet::const_iterator i = prisoners.begin(); i != prisoners.end(); ++i)
if (Creature* prisoner = instance->GetCreature(*i))
{
- prisoner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ prisoner->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE));
prisoner->SetInCombatWithZone();
}
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
index 20c6e03762c..fb9fe27658c 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
@@ -64,7 +64,7 @@ class instance_ramparts : public InstanceMapScript
case DATA_NAZAN:
if (GetBossState(DATA_VAZRUDEN) == DONE && GetBossState(DATA_NAZAN) == DONE)
if (GameObject* chest = instance->GetGameObject(felIronChestGUID))
- chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ chest->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
default:
break;
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 454c1179595..155b59676de 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -249,7 +249,7 @@ class boss_magtheridon : public CreatureScript
CombatStart();
break;
case EVENT_RELEASED:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
me->SetInCombatWithZone();
instance->SetData(DATA_MANTICRON_CUBE, ACTION_ENABLE);
events.ScheduleEvent(EVENT_CLEAVE, Seconds(10));
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
index 6901d165cc1..e98465098b5 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
@@ -106,9 +106,9 @@ class instance_magtheridons_lair : public InstanceMapScript
if (GameObject* cube = instance->GetGameObject(gobGUID))
{
if (value == ACTION_ENABLE)
- cube->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cube->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
else
- cube->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cube->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
case DATA_COLLAPSE:
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index 604c4602e79..e3d95f79c28 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -111,7 +111,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
void Reset() override
{
_Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
Initialize();
}
@@ -147,7 +147,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
{
IsIntroEvent = false;
IsMainEvent = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
break;
default:
@@ -164,7 +164,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
PeonEngagedCount = 4;
PeonKilledCount = 4;
IsMainEvent = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void AttackStart(Unit* who) override
@@ -209,8 +209,8 @@ class boss_grand_warlock_nethekurse : public CreatureScript
void JustSummoned(Creature* summoned) override
{
summoned->setFaction(16);
- summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ summoned->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//triggered spell of consumption does not properly show it's SpellVisual, wrong spellid?
summoned->CastSpell(summoned, SPELL_TEMPORARY_VISUAL, true);
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
index 87ee671454e..afc2f96ef71 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
@@ -94,9 +94,9 @@ class boss_shattered_executioner : public CreatureScript
me->AddLootMode(LOOT_MODE_HARD_MODE_1);
if (instance->GetBossState(DATA_KARGATH) == DONE)
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
else
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
Initialize();
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index 7a98eab4066..d136a7c2db4 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -135,11 +135,11 @@ class boss_alar : public CreatureScript
me->SetDisplayId(me->GetNativeDisplayId());
me->SetSpeedRate(MOVE_RUN, DefaultMoveSpeedRate);
- //me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
- //me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
+ //me->SetBoundingRadius(10);
+ //me->SetCombatReach(10);
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
me->SetDisableGravity(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->setActive(false);
}
@@ -179,7 +179,7 @@ class boss_alar : public CreatureScript
me->SetHealth(0);
me->InterruptNonMeleeSpells(true);
me->RemoveAllAuras();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->AttackStop();
me->SetTarget(ObjectGuid::Empty);
me->SetSpeedRate(MOVE_RUN, 5.0f);
@@ -266,7 +266,7 @@ class boss_alar : public CreatureScript
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetFullHealth();
me->SetSpeedRate(MOVE_RUN, DefaultMoveSpeedRate);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoZoneInCombat();
DoCast(me, SPELL_REBIRTH, true);
MeltArmor_Timer = 60000;
@@ -307,8 +307,8 @@ class boss_alar : public CreatureScript
case WE_SUMMON:
for (uint8 i = 0; i < 2; ++i)
DoSpawnCreature(CREATURE_EMBER_OF_ALAR, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
- me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetBoundingRadius(10);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(me->GetNativeDisplayId());
DoCast(me, SPELL_REBIRTH_2, true);
break;
@@ -391,8 +391,8 @@ class boss_alar : public CreatureScript
{
me->AttackStop();
me->GetMotionMaster()->MovePoint(6, waypoint[4][0], waypoint[4][1], waypoint[4][2]);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 50);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetBoundingRadius(50);
WaitEvent = WE_METEOR;
WaitTimer = 0;
DiveBomb_Timer = 40000 + rand32() % 5000;
@@ -408,7 +408,7 @@ class boss_alar : public CreatureScript
Creature* Summoned = me->SummonCreature(CREATURE_FLAME_PATCH_ALAR, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 120000);
if (Summoned)
{
- Summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Summoned->SetObjectScale(Summoned->GetObjectScale() * 2.5f);
Summoned->SetDisplayId(11686);
Summoned->setFaction(me->getFaction());
@@ -501,7 +501,7 @@ class npc_ember_of_alar : public CreatureScript
damage = 0;
DoCast(me, SPELL_EMBER_BLAST, true);
me->SetDisplayId(11686);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
if (instance->GetBossState(DATA_ALAR) == IN_PROGRESS)
{
if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ALAR)))
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 9e2b7ebd5b9..9adea2414a8 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -151,7 +151,7 @@ class boss_high_astromancer_solarian : public CreatureScript
Initialize();
_Reset();
me->SetArmor(defaultarmor, 0);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
@@ -217,7 +217,7 @@ class boss_high_astromancer_solarian : public CreatureScript
AppearDelay = false;
if (Phase == 2)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(false);
}
AppearDelay_Timer = 2000;
@@ -320,7 +320,7 @@ class boss_high_astromancer_solarian : public CreatureScript
{
if (Creature* Summoned = me->SummonCreature(NPC_ASTROMANCER_SOLARIAN_SPOTLIGHT, Portals[i][0], Portals[i][1], Portals[i][2], CENTER_O, TEMPSUMMON_TIMED_DESPAWN, Phase2_Timer+Phase3_Timer+AppearDelay_Timer+1700))
{
- Summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Summoned->CastSpell(Summoned, SPELL_SPOTLIGHT, false);
}
}
@@ -364,7 +364,7 @@ class boss_high_astromancer_solarian : public CreatureScript
if (j != i)
SummonMinion(NPC_SOLARIUM_PRIEST, Portals[j][0], Portals[j][1], Portals[j][2]);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
Talk(SAY_SUMMON2);
@@ -399,7 +399,7 @@ class boss_high_astromancer_solarian : public CreatureScript
{
Phase = 4;
//To make sure she wont be invisible or not selecatble
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
Talk(SAY_VOIDA);
Talk(SAY_VOIDB);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 0d3628c25d3..c0ba5e9b2bf 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -333,8 +333,8 @@ struct advisorbase_ai : public ScriptedAI
Initialize();
me->SetStandState(UNIT_STAND_STATE_STAND);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
//reset encounter
if (instance->GetBossState(DATA_KAELTHAS) == IN_PROGRESS)
@@ -344,7 +344,7 @@ struct advisorbase_ai : public ScriptedAI
void MoveInLineOfSight(Unit* who) override
{
- if (!who || _inFakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (!who || _inFakeDeath || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -352,7 +352,7 @@ struct advisorbase_ai : public ScriptedAI
void AttackStart(Unit* who) override
{
- if (!who || _inFakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (!who || _inFakeDeath || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::AttackStart(who);
@@ -363,7 +363,7 @@ struct advisorbase_ai : public ScriptedAI
if (spell->Id == SPELL_RESSURECTION)
{
_hasRessurrected = true;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
me->SetStandState(UNIT_STAND_STATE_STAND);
events.ScheduleEvent(EVENT_DELAYED_RESSURECTION, 2000);
}
@@ -382,7 +382,7 @@ struct advisorbase_ai : public ScriptedAI
me->RemoveAllAurasOnDeath();
me->ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
me->ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED));
me->SetTarget(ObjectGuid::Empty);
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->GetMotionMaster()->Clear();
@@ -454,8 +454,8 @@ class boss_kaelthas : public CreatureScript
{
Initialize();
DoAction(ACTION_PREPARE_ADVISORS);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
me->SetDisableGravity(false);
me->SetTarget(ObjectGuid::Empty);
me->SetObjectScale(1.0f);
@@ -483,7 +483,7 @@ class boss_kaelthas : public CreatureScript
{
case ACTION_START_ENCOUNTER:
Talk(SAY_INTRO);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
_advisorGuid[ADVISOR_THALADRED] = instance->GetGuidData(DATA_THALADREDTHEDARKENER);
_advisorGuid[ADVISOR_SANGUINAR] = instance->GetGuidData(DATA_LORDSANGUINAR);
@@ -500,7 +500,7 @@ class boss_kaelthas : public CreatureScript
if (Creature* creature = ObjectAccessor::GetCreature(*me, _advisorGuid[i]))
{
creature->Respawn(true);
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->AI()->EnterEvadeMode();
}
}
@@ -600,7 +600,7 @@ class boss_kaelthas : public CreatureScript
case POINT_TRANSITION_CENTER_ASCENDING:
me->SetFacingTo(float(M_PI), true);
Talk(SAY_PHASE5_NUTS);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisableGravity(true);
//me->SetHover(true); -- Set in sniffs, but breaks his visual.
events.ScheduleEvent(EVENT_TRANSITION_2, 2000);
@@ -619,7 +619,7 @@ class boss_kaelthas : public CreatureScript
case POINT_END_TRANSITION:
me->SetReactState(REACT_AGGRESSIVE);
me->InterruptNonMeleeSpells(false);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_FULLPOWER);
if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0))
@@ -673,13 +673,13 @@ class boss_kaelthas : public CreatureScript
switch (eventId)
{
case EVENT_START_ENCOUNTER:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UNIT_FLAG_PACIFIED);
DoAction(ACTION_ACTIVE_ADVISOR);
break;
case EVENT_ACTIVE_ADVISOR:
if (Creature* advisor = ObjectAccessor::GetCreature(*me, _advisorGuid[_advisorCounter]))
{
- advisor->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
advisor->AI()->AttackStart(target);
@@ -709,7 +709,7 @@ class boss_kaelthas : public CreatureScript
// Sometimes people can collect Aggro in Phase 1-3. Reset threat before releasing Kael.
DoResetThreat();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED));
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
AttackStart(target);
@@ -742,7 +742,7 @@ class boss_kaelthas : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_PHOENIX, urand(45000, 60000), EVENT_GROUP_COMBAT, PHASE_COMBAT);
break;
case EVENT_END_TRANSITION:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
DoCast(SPELL_FULLPOWER);
events.ScheduleEvent(EVENT_TRANSITION_4, 2000);
break;
@@ -807,7 +807,7 @@ class boss_kaelthas : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_NETHER_BEAM_VISUAL3);
DoCast(me, SPELL_KAEL_EXPLODES3, true);
DoCast(me, SPELL_KAEL_STUNNED); // Core doesn't handle the emote properly while flying.
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED);
+ me->SetEmoteState(EMOTE_STATE_DROWNED);
// Destroy the surrounding environment.
if (GameObject* statue = instance->GetGameObject(DATA_KAEL_STATUE_LEFT))
@@ -1085,7 +1085,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
void AttackStart(Unit* who) override
{
- if (!who || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (!who || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
if (me->Attack(who, true))
@@ -1278,7 +1278,7 @@ class npc_kael_flamestrike : public CreatureScript
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index 53e8527f5e0..cf285ebb1c4 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -304,7 +304,7 @@ class npc_warden_mellichar : public CreatureScript
{
Initialize();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_TARGET_OMEGA);
instance->SetBossState(DATA_HARBINGER_SKYRISS, NOT_STARTED);
@@ -539,9 +539,9 @@ class npc_zerekethvoidzone : public CreatureScript
void Reset() override
{
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
me->setFaction(16);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_VOID_ZONE_DAMAGE);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
index b573d61a1fb..82cf63526c5 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -100,7 +100,7 @@ class boss_harbinger_skyriss : public CreatureScript
void Reset() override
{
if (!Intro)
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
Initialize();
}
@@ -183,7 +183,7 @@ class boss_harbinger_skyriss : public CreatureScript
Intro_Timer = 3000;
break;
case 3:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
Intro = true;
break;
}
@@ -287,7 +287,7 @@ class boss_harbinger_skyriss_illusion : public CreatureScript
void Reset() override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index dd72605d46a..0c00d733bcb 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -110,7 +110,7 @@ public:
void MoveInLineOfSight(Unit* who) override
{
- if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -144,7 +144,7 @@ public:
if (me->GetEntry() == ENTRY_NIHIL)
{
Talk(SAY_NIHIL_INTERRUPT);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
IsNihil = false;
}
@@ -153,7 +153,7 @@ public:
if (entry_list[cid] == ENTRY_NIHIL)
{
EnterEvadeMode();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
IsNihil = true;
}else
AttackStart(caster);
@@ -186,7 +186,7 @@ public:
++NihilSpeech_Phase;
break;
case 4:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//take off to location above
me->GetMotionMaster()->MovePoint(0, me->GetPositionX()+50.0f, me->GetPositionY(), me->GetPositionZ()+50.0f);
++NihilSpeech_Phase;
@@ -632,7 +632,7 @@ class npc_simon_bunny : public CreatureScript
_events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000);
if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance))
- relic->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ relic->AddFlag(GO_FLAG_NOT_SELECTABLE);
}
// Called when despawning the bunny. Sets all the node GOs to their default states.
@@ -642,14 +642,14 @@ class npc_simon_bunny : public CreatureScript
for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance))
- cluster->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cluster->AddFlag(GO_FLAG_NOT_SELECTABLE);
for (uint32 auraId = GO_AURA_BLUE; auraId <= GO_AURA_YELLOW; auraId++)
if (GameObject* auraGo = me->FindNearestGameObject(auraId, searchDistance))
auraGo->RemoveFromWorld();
if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance))
- relic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ relic->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
me->DespawnOrUnsummon(1000);
}
@@ -693,7 +693,7 @@ class npc_simon_bunny : public CreatureScript
{
for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance))
- cluster->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cluster->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (clustersOnly)
return;
@@ -747,7 +747,7 @@ class npc_simon_bunny : public CreatureScript
{
if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], 2.0f*searchDistance))
{
- cluster->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ cluster->AddFlag(GO_FLAG_NOT_SELECTABLE);
// break since we don't need glowing auras for large clusters
if (large)
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 99751a4ccbe..d186f1bf5b1 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -76,7 +76,7 @@ public:
{
Initialize();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_FRIENDLY);
Talk(SAY_SUMMON);
@@ -99,7 +99,7 @@ public:
if (HealthBelowPct(30))
{
me->setFaction(FACTION_FRIENDLY);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->RemoveAllAuras();
me->DeleteThreatList();
me->CombatStop(true);
@@ -684,7 +684,7 @@ public:
Initialize();
playerGUID.Clear();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UNIT_FLAG_PACIFIED);
}
void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
@@ -715,7 +715,7 @@ public:
me->GetMotionMaster()->MovePoint(0, exorcismPos[1]);
Talk(SAY_BARADA_2);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ me->AddUnitFlag(UNIT_FLAG_PACIFIED);
}
}
@@ -895,7 +895,7 @@ public:
}
me->RemoveAura(SPELL_BARADAS_COMMAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ me->RemoveUnitFlag(UNIT_FLAG_PACIFIED);
Talk(SAY_BARADA_8);
me->GetMotionMaster()->MoveTargetedHome();
@@ -959,7 +959,7 @@ public:
{
me->Dismount();
me->SetFacingToObject(player, true);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
_playerGUID = player->GetGUID();
_events.ScheduleEvent(EVENT_TALK, Seconds(2));
}
@@ -967,9 +967,9 @@ public:
void Reset() override
{
me->RestoreFaction();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
void DamageTaken(Unit* /*attacker*/, uint32 &damage) override
@@ -983,8 +983,8 @@ public:
me->RemoveAllAuras();
me->DeleteThreatList();
me->CombatStop(true);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
Talk(SAY_DEFEATED);
_events.ScheduleEvent(EVENT_EVADE, Minutes(1));
@@ -1004,7 +1004,7 @@ public:
_events.ScheduleEvent(EVENT_ATTACK, Seconds(2));
break;
case EVENT_ATTACK:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->setFaction(FACTION_HOSTILE);
if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID))
me->CombatStart(player);
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index 36b934b13f6..35814364992 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -500,7 +500,7 @@ public:
if (quest->GetQuestId() == Q_ALMABTRIEB)
{
creature->setFaction(113);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
}
return true;
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index b94f9768625..025b0ece9e4 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -167,7 +167,7 @@ public:
{
if (spell->Id == SPELL_SUMMON_INFERNAL)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE));
me->SetDisplayId(MODEL_INFERNAL);
}
}
@@ -543,7 +543,7 @@ public:
if (id)
{
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_EAT);
+ me->SetEmoteState(EMOTE_ONESHOT_EAT);
PoisonTimer = 15000;
}
}
@@ -885,7 +885,7 @@ public:
Initialize();
me->AddUnitState(UNIT_STATE_ROOT);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetTarget(ObjectGuid::Empty);
}
@@ -924,7 +924,7 @@ public:
case 6:
if (Player* AggroTarget = ObjectAccessor::GetPlayer(*me, AggroTargetGUID))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->ClearUnitState(UNIT_STATE_ROOT);
float x, y, z;
diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp
index 17a4acf37ee..d854277f4df 100644
--- a/src/server/scripts/Pet/pet_dk.cpp
+++ b/src/server/scripts/Pet/pet_dk.cpp
@@ -83,7 +83,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
return;
// Stop Fighting
- me->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, true);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
// Sanctuary
me->CastSpell(me, SPELL_DK_SANCTUARY, true);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 59587bbfd39..1defc975ab5 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1098,8 +1098,8 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ target->AddDynamicFlag(UNIT_DYNFLAG_DEAD);
+ target->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
if (target->GetTypeId() == TYPEID_UNIT)
target->ToCreature()->SetReactState(REACT_PASSIVE);
@@ -1108,8 +1108,8 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+ target->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
+ target->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
}
void Register() override
@@ -3927,7 +3927,7 @@ class spell_gen_gm_freeze : public SpellScriptLoader
player->CombatStop();
if (player->IsNonMeleeSpellCast(true))
player->InterruptNonMeleeSpells(true);
- player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ player->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
// if player class = hunter || warlock remove pet if alive
if ((player->getClass() == CLASS_HUNTER) || (player->getClass() == CLASS_WARLOCK))
@@ -3950,7 +3950,7 @@ class spell_gen_gm_freeze : public SpellScriptLoader
{
// Reset player faction + allow combat + allow duels
player->setFactionForRace(player->getRace());
- player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ player->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
// save player
player->SaveToDB();
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index d468b820bca..9a4e0c141a0 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -443,7 +443,7 @@ class spell_hun_masters_call : public SpellScriptLoader
// Do a mini Spell::CheckCasterAuras on the pet, no other way of doing this
SpellCastResult result = SPELL_CAST_OK;
- uint32 const unitflag = pet->GetUInt32Value(UNIT_FIELD_FLAGS);
+ uint32 const unitflag = pet->m_unitData->Flags;
if (!pet->GetCharmerGUID().IsEmpty())
result = SPELL_FAILED_CHARMED;
else if (unitflag & UNIT_FLAG_STUNNED)
@@ -510,7 +510,7 @@ class spell_hun_misdirection : public SpellScriptLoader
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEFAULT || GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_INTERRUPT)
return;
-
+
if (!GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC))
GetTarget()->ResetRedirectThreat();
}
@@ -590,7 +590,7 @@ class spell_hun_multi_shot : public SpellScriptLoader
void HandleOnHit()
{
// We need to check hunter's spec because it doesn't generate focus on other specs than MM
- if (GetCaster()->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_HUNTER_MARKSMAN)
+ if (GetCaster()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_HUNTER_MARKSMAN)
GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_MULTI_SHOT_FOCUS, true);
}
diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp
index 988ab17c19e..1030cfd63b5 100644
--- a/src/server/scripts/Spells/spell_pet.cpp
+++ b/src/server/scripts/Spells/spell_pet.cpp
@@ -298,10 +298,10 @@ public:
if (Unit* pet = GetUnitOwner())
if (pet->IsPet())
- if (Unit* owner = pet->ToPet()->GetOwner())
+ if (Player* owner = pet->ToPet()->GetOwner())
{
- int32 fire = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- int32 shadow = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
+ int32 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE];
+ int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW];
int32 maximum = (fire > shadow) ? fire : shadow;
if (maximum < 0)
maximum = 0;
@@ -325,11 +325,11 @@ public:
{
if (Unit* pet = GetUnitOwner())
if (pet->IsPet())
- if (Unit* owner = pet->ToPet()->GetOwner())
+ if (Player* owner = pet->ToPet()->GetOwner())
{
//the damage bonus used for pets is either fire or shadow damage, whatever is higher
- int32 fire = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- int32 shadow = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
+ int32 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE];
+ int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW];
int32 maximum = (fire > shadow) ? fire : shadow;
float bonusDamage = 0.0f;
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index d2dc4153420..01d1c1f45e5 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -277,13 +277,13 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ target->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
target->AddUnitState(UNIT_STATE_ROOT);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ GetTarget()->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
void Register() override
@@ -835,8 +835,8 @@ class spell_symbol_of_life_dummy : public SpellScriptLoader
if (target->HasAura(SPELL_PERMANENT_FEIGN_DEATH))
{
target->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH);
- target->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, 0);
- target->SetUInt32Value(UNIT_FIELD_FLAGS_2, 0);
+ target->SetDynamicFlags(0);
+ target->SetUnitFlags2(UnitFlags2(0));
target->SetHealth(target->GetMaxHealth() / 2);
target->SetPower(POWER_MANA, target->GetMaxPower(POWER_MANA) * 0.75f);
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index ffee81c073b..0d57059e3b3 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -1271,7 +1271,7 @@ class spell_warr_victorious_state : public SpellScriptLoader
void HandleOnProc(AuraEffect const* /*aurEff*/, ProcEventInfo& procInfo)
{
- if (procInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && procInfo.GetActor()->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_WARRIOR_FURY)
+ if (procInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && procInfo.GetActor()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_WARRIOR_FURY)
PreventDefaultAction();
procInfo.GetActor()->GetSpellHistory()->ResetCooldown(SPELL_WARRIOR_IMPENDING_VICTORY, true);
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 43b96548a91..d6c18647828 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -97,7 +97,7 @@ struct emerald_dragonAI : public WorldBossAI
void Reset() override
{
WorldBossAI::Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetReactState(REACT_AGGRESSIVE);
DoCast(me, SPELL_MARK_OF_NATURE_AURA, true);
events.ScheduleEvent(EVENT_TAIL_SWEEP, 4000);
@@ -631,7 +631,7 @@ class boss_taerar : public CreatureScript
_shades += count;
DoCast(SPELL_SHADE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->SetReactState(REACT_PASSIVE);
++_stage;
@@ -668,7 +668,7 @@ class boss_taerar : public CreatureScript
{
_banished = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE));
me->RemoveAurasDueToSpell(SPELL_SHADE);
me->SetReactState(REACT_AGGRESSIVE);
}
diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp
index 0a92c925c5f..a0649c046d2 100644
--- a/src/server/scripts/World/item_scripts.cpp
+++ b/src/server/scripts/World/item_scripts.cpp
@@ -250,7 +250,7 @@ public:
{
summon->SetVisible(false);
summon->SetReactState(REACT_PASSIVE);
- summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ summon->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
}
return false;
}
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 07fbb60ce36..5c2cc89eea7 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -286,7 +286,7 @@ public:
{
Initialize();
me->setFaction(FACTION_CHICKEN);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
}
void EnterCombat(Unit* /*who*/) override { }
@@ -294,7 +294,7 @@ public:
void UpdateAI(uint32 diff) override
{
// Reset flags after a certain time has passed so that the next player has to start the 'event' again
- if (me->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER))
+ if (me->HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER))
{
if (ResetFlagTimer <= diff)
{
@@ -316,7 +316,7 @@ public:
case TEXT_EMOTE_CHICKEN:
if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand32() % 30 == 1)
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_FRIENDLY);
Talk(player->GetTeam() == HORDE ? EMOTE_HELLO_H : EMOTE_HELLO_A);
}
@@ -324,7 +324,7 @@ public:
case TEXT_EMOTE_CHEER:
if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE)
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_FRIENDLY);
Talk(EMOTE_CLUCK_TEXT);
}
@@ -726,7 +726,7 @@ public:
void Reset() override
{
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void BeginEvent(Player* player)
@@ -751,7 +751,7 @@ public:
}
Event = true;
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void PatientDied(Position const* point)
@@ -861,13 +861,13 @@ public:
Initialize();
//no select
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//no regen health
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_IN_COMBAT);
//to make them lay with face down
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
+ me->SetStandState(UNIT_STAND_STATE_DEAD);
uint32 mobId = me->GetEntry();
@@ -902,13 +902,13 @@ public:
ENSURE_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord);
//make not selectable
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
//regen health
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
//stand up
- me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
Talk(SAY_DOC);
@@ -938,10 +938,10 @@ public:
if (me->IsAlive() && me->GetHealth() <= 6)
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
+ me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->setDeathState(JUST_DIED);
- me->SetFlag(OBJECT_DYNAMIC_FLAGS, 32);
+ me->AddDynamicFlag(UNIT_DYNFLAG_DEAD);
if (!DoctorGUID.IsEmpty())
if (Creature* doctor = ObjectAccessor::GetCreature((*me), DoctorGUID))
@@ -992,7 +992,7 @@ void npc_doctor::npc_doctorAI::UpdateAI(uint32 diff)
if (Creature* Patient = me->SummonCreature(patientEntry, **point, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))
{
//303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND)
- Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ Patient->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE);
Patients.push_back(Patient->GetGUID());
ENSURE_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID();
@@ -1198,7 +1198,7 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
void EnterCombat(Unit* /*who*/) override
@@ -1753,7 +1753,7 @@ public:
bool OnGossipHello(Player* player, Creature* creature) override
{
- if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN)) // not gaining XP
+ if (player->HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN)) // not gaining XP
{
AddGossipItemFor(player, MENU_ID_XP_ON_OFF, OPTION_ID_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
SendGossipMenuFor(player, NPC_TEXT_XP_ON_OFF, creature->GetGUID());
@@ -1773,10 +1773,10 @@ public:
switch (action)
{
case GOSSIP_ACTION_INFO_DEF + 1: // XP ON selected
- player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN); // turn on XP gain
+ player->RemovePlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn on XP gain
break;
case GOSSIP_ACTION_INFO_DEF + 2: // XP OFF selected
- player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN); // turn off XP gain
+ player->AddPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn off XP gain
break;
}
CloseGossipMenuFor(player);
@@ -2314,7 +2314,7 @@ class npc_train_wrecker : public CreatureScript
break;
}
me->UpdateEntry(NPC_EXULTING_WIND_UP_TRAIN_WRECKER);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_DANCE);
+ me->SetEmoteState(EMOTE_ONESHOT_DANCE);
me->DespawnOrUnsummon(5 * IN_MILLISECONDS);
_nextAction = 0;
break;
@@ -2427,8 +2427,8 @@ public:
})
.Schedule(Seconds(1), [this](TaskContext context)
{
- if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR))
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR);
+ if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasNpcFlag(NPCFlags(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR)))
+ me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR));
context.Repeat();
});
}
@@ -2439,7 +2439,7 @@ public:
{
case GOSSIP_OPTION_BANK:
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER);
+ me->AddNpcFlag(UNIT_NPC_FLAG_BANKER);
uint32 _bankAura = IsArgentSquire() ? SPELL_AURA_BANK_S : SPELL_AURA_BANK_G;
if (!me->HasAura(_bankAura))
DoCastSelf(_bankAura);
@@ -2450,7 +2450,7 @@ public:
}
case GOSSIP_OPTION_SHOP:
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR);
+ me->AddNpcFlag(UNIT_NPC_FLAG_VENDOR);
uint32 _shopAura = IsArgentSquire() ? SPELL_AURA_SHOP_S : SPELL_AURA_SHOP_G;
if (!me->HasAura(_shopAura))
DoCastSelf(_shopAura);
@@ -2461,7 +2461,7 @@ public:
}
case GOSSIP_OPTION_MAIL:
{
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_MAILBOX);
+ me->AddNpcFlag(UNIT_NPC_FLAG_MAILBOX);
player->GetSession()->SendShowMailBox(me->GetGUID());
uint32 _mailAura = IsArgentSquire() ? SPELL_AURA_POSTMAN_S : SPELL_AURA_POSTMAN_G;
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 0fc7bf628fc..8daf86c8489 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -131,6 +131,11 @@ class TC_SHARED_API ByteBuffer
append((uint8 *)&value, sizeof(value));
}
+ bool HasUnfinishedBitPack() const
+ {
+ return _bitpos != 8;
+ }
+
void FlushBits()
{
if (_bitpos == 8)