TrinityCore
Corpse.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_CORPSE_H
19#define TRINITYCORE_CORPSE_H
20
21#include "Object.h"
22#include "GridObject.h"
23#include "DatabaseEnvFwd.h"
24#include "GridDefines.h"
25#include "IteratorPair.h"
26
27struct Loot;
28
30{
34};
35#define MAX_CORPSE_TYPE 3
36
37// Value equal client resurrection dialog show radius.
38#define CORPSE_RECLAIM_RADIUS 39
39
41{
50};
51
52class TC_GAME_API Corpse final : public WorldObject, public GridObject<Corpse>
53{
54 public:
55 explicit Corpse(CorpseType type = CORPSE_BONES);
56 ~Corpse();
57
58 protected:
59 void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
60 void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
61 void ClearUpdateMask(bool remove) override;
62
63 public:
64 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
65 UF::CorpseData::Mask const& requestedCorpseMask, Player const* target) const;
66
67 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
68 {
69 explicit ValuesUpdateForPlayerWithMaskSender(Corpse const* owner) : Owner(owner) { }
70
71 Corpse const* Owner;
74
75 void operator()(Player const* player) const;
76 };
77
78 void AddToWorld() override;
79 void RemoveFromWorld() override;
80
81 bool Create(ObjectGuid::LowType guidlow, Map* map);
82 bool Create(ObjectGuid::LowType guidlow, Player* owner);
83
84 void Update(uint32 diff) override;
85
86 void SaveToDB();
87 bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields);
88
89 void DeleteFromDB(CharacterDatabaseTransaction trans);
90 static void DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans);
91
92 CorpseDynFlags GetCorpseDynamicFlags() const { return CorpseDynFlags(*m_corpseData->DynamicFlags); }
93 void SetCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
94 void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
95 void ReplaceAllCorpseDynamicFlags(CorpseDynFlags dynamicFlags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
96
97 ObjectGuid GetCreatorGUID() const override { return m_corpseData->Owner; }
98 ObjectGuid GetOwnerGUID() const override { return m_corpseData->Owner; }
99 void SetOwnerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Owner), owner); }
100 void SetPartyGUID(ObjectGuid partyGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::PartyGUID), partyGuid); }
101 void SetGuildGUID(ObjectGuid guildGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::GuildGUID), guildGuid); }
102 void SetDisplayId(uint32 displayId) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DisplayID), displayId); }
103 void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::RaceID), race); }
104 void SetClass(uint8 playerClass) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Class), playerClass); }
105 void SetSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Sex), sex); }
107 void SetFactionTemplate(int32 factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FactionTemplate), factionTemplate); }
108 uint32 GetFaction() const override { return m_corpseData->FactionTemplate; }
109 void SetFaction(uint32 faction) override { SetFactionTemplate(faction); }
110 void SetItem(uint32 slot, uint32 item) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Items, slot), item); }
111
112 template<typename Iter>
114 {
116 for (auto&& customization : customizations)
117 {
119 newChoice.ChrCustomizationOptionID = customization.ChrCustomizationOptionID;
120 newChoice.ChrCustomizationChoiceID = customization.ChrCustomizationChoiceID;
121 }
122 }
123
124 time_t const& GetGhostTime() const { return m_time; }
125 void ResetGhostTime();
126 CorpseType GetType() const { return m_type; }
127
128 CellCoord const& GetCellCoord() const { return _cellCoord; }
129 void SetCellCoord(CellCoord const& cellCoord) { _cellCoord = cellCoord; }
130
131 std::unique_ptr<Loot> m_loot;
132 Loot* GetLootForPlayer(Player const* /*player*/) const override { return m_loot.get(); }
133
135
136 bool IsExpired(time_t t) const;
137
139
140 private:
142 time_t m_time;
144};
145#endif
CorpseType
Definition: Corpse.h:30
@ CORPSE_RESURRECTABLE_PVE
Definition: Corpse.h:32
@ CORPSE_RESURRECTABLE_PVP
Definition: Corpse.h:33
@ CORPSE_BONES
Definition: Corpse.h:31
CorpseFlags
Definition: Corpse.h:41
@ CORPSE_FLAG_UNK1
Definition: Corpse.h:44
@ CORPSE_FLAG_FFA_PVP
Definition: Corpse.h:49
@ CORPSE_FLAG_HIDE_CLOAK
Definition: Corpse.h:47
@ CORPSE_FLAG_NONE
Definition: Corpse.h:42
@ CORPSE_FLAG_BONES
Definition: Corpse.h:43
@ CORPSE_FLAG_SKINNABLE
Definition: Corpse.h:48
@ CORPSE_FLAG_HIDE_HELM
Definition: Corpse.h:46
@ CORPSE_FLAG_PVP
Definition: Corpse.h:45
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:50
CorpseDynFlags
Definition: Corpse.h:53
CellCoord _cellCoord
Definition: Corpse.h:143
void ReplaceAllFlags(uint32 flags)
Definition: Corpse.h:106
void SetFaction(uint32 faction) override
Definition: Corpse.h:109
void SetRace(uint8 race)
Definition: Corpse.h:103
void SetClass(uint8 playerClass)
Definition: Corpse.h:104
Loot * GetLootForPlayer(Player const *) const override
Definition: Corpse.h:132
void SetSex(uint8 sex)
Definition: Corpse.h:105
void SetGuildGUID(ObjectGuid guildGuid)
Definition: Corpse.h:101
void SetDisplayId(uint32 displayId)
Definition: Corpse.h:102
Player * lootRecipient
Definition: Corpse.h:134
void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags)
Definition: Corpse.h:94
void SetCustomizations(Trinity::IteratorPair< Iter > customizations)
Definition: Corpse.h:113
CorpseType m_type
Definition: Corpse.h:141
CorpseDynFlags GetCorpseDynamicFlags() const
Definition: Corpse.h:92
void SetFactionTemplate(int32 factionTemplate)
Definition: Corpse.h:107
void SetOwnerGUID(ObjectGuid owner)
Definition: Corpse.h:99
void SetCorpseDynamicFlag(CorpseDynFlags dynamicFlags)
Definition: Corpse.h:93
void SetPartyGUID(ObjectGuid partyGuid)
Definition: Corpse.h:100
UF::UpdateField< UF::CorpseData, 0, TYPEID_CORPSE > m_corpseData
Definition: Corpse.h:138
uint32 GetFaction() const override
Definition: Corpse.h:108
std::unique_ptr< Loot > m_loot
Definition: Corpse.h:131
ObjectGuid GetCreatorGUID() const override
Definition: Corpse.h:97
time_t const & GetGhostTime() const
Definition: Corpse.h:124
CellCoord const & GetCellCoord() const
Definition: Corpse.h:128
time_t m_time
Definition: Corpse.h:142
void ReplaceAllCorpseDynamicFlags(CorpseDynFlags dynamicFlags)
Definition: Corpse.h:95
ObjectGuid GetOwnerGUID() const override
Definition: Corpse.h:98
void SetCellCoord(CellCoord const &cellCoord)
Definition: Corpse.h:129
CorpseType GetType() const
Definition: Corpse.h:126
void SetItem(uint32 slot, uint32 item)
Definition: Corpse.h:110
Class used to access individual fields of database query result.
Definition: Field.h:90
Definition: Map.h:189
uint64 LowType
Definition: ObjectGuid.h:278
void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter< T > setter)
Definition: Object.h:329
void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:301
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
Definition: Object.h:308
void SetUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:294
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
virtual void ClearUpdateMask(bool remove)
Definition: Object.cpp:790
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:287
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition: IteratorPair.h:32
void AddToWorld() override
Definition: Object.cpp:1011
void RemoveFromWorld() override
Definition: Object.cpp:1017
virtual void Update(uint32 diff)
Definition: Object.cpp:898
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:72
ValuesUpdateForPlayerWithMaskSender(Corpse const *owner)
Definition: Corpse.h:69
Definition: Loot.h:281
UpdateFieldArray< uint32, 19, 13, 14 > Items
UpdateField< uint32, 0, 6 > DisplayID
UpdateField< uint8, 0, 7 > RaceID
UpdateField< uint8, 0, 9 > Class
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 1 > Customizations
UpdateField< uint32, 0, 10 > Flags
UpdateField< ObjectGuid, 0, 4 > PartyGUID
UpdateField< ObjectGuid, 0, 3 > Owner
UpdateField< uint8, 0, 8 > Sex
UpdateField< int32, 0, 11 > FactionTemplate
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< ObjectGuid, 0, 5 > GuildGUID