TrinityCore
Loading...
Searching...
No Matches
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
35#define MAX_CORPSE_TYPE 3
36
37// Value equal client resurrection dialog show radius.
38#define CORPSE_RECLAIM_RADIUS 39
39
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(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
60 void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
61 void ClearValuesChangesMask() override;
62
63 public:
64 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
65 UF::CorpseData::Mask const& requestedCorpseMask, Player const* target, bool ignoreNestedChangesMask) const;
66
67 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
68 {
69 explicit ValuesUpdateForPlayerWithMaskSender(Corpse const* owner) : Owner(owner), IgnoreNestedChangesMask(false) { }
70
71 Corpse const* Owner;
75
76 void operator()(Player const* player) const;
77 };
78
79 void AddToWorld() override;
80 void RemoveFromWorld() override;
81
82 bool Create(ObjectGuid::LowType guidlow, Map* map);
83 bool Create(ObjectGuid::LowType guidlow, Player* owner);
84
85 void Update(uint32 diff) override;
86
87 void SaveToDB();
88 bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields);
89
90 void DeleteFromDB(CharacterDatabaseTransaction trans);
91 static void DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans);
92
93 CorpseDynFlags GetCorpseDynamicFlags() const { return CorpseDynFlags(*m_corpseData->DynamicFlags); }
94 void SetCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
95 void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
96 void ReplaceAllCorpseDynamicFlags(CorpseDynFlags dynamicFlags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); }
97
98 ObjectGuid GetCreatorGUID() const override { return m_corpseData->Owner; }
99 ObjectGuid GetOwnerGUID() const override { return m_corpseData->Owner; }
100 void SetOwnerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Owner), owner); }
101 void SetPartyGUID(ObjectGuid partyGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::PartyGUID), partyGuid); }
102 void SetGuildGUID(ObjectGuid guildGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::GuildGUID), guildGuid); }
103 void SetDisplayId(uint32 displayId) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DisplayID), displayId); }
104 void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::RaceID), race); }
105 void SetClass(uint8 playerClass) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Class), playerClass); }
106 void SetSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Sex), sex); }
108 void SetFactionTemplate(int32 factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FactionTemplate), factionTemplate); }
109 uint32 GetFaction() const override { return m_corpseData->FactionTemplate; }
110 void SetFaction(uint32 faction) override { SetFactionTemplate(faction); }
111 void SetItem(uint32 slot, uint32 item) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Items, slot), item); }
112
113 template<typename Iter>
115 {
117 for (auto&& customization : customizations)
118 {
120 newChoice.ChrCustomizationOptionID = customization.ChrCustomizationOptionID;
121 newChoice.ChrCustomizationChoiceID = customization.ChrCustomizationChoiceID;
122 }
123 }
124
125 time_t const& GetGhostTime() const { return m_time; }
126 void ResetGhostTime();
127 CorpseType GetType() const { return m_type; }
128
129 CellCoord const& GetCellCoord() const { return _cellCoord; }
130 void SetCellCoord(CellCoord const& cellCoord) { _cellCoord = cellCoord; }
131
132 std::unique_ptr<Loot> m_loot;
133 Loot* GetLootForPlayer(Player const* /*player*/) const override { return m_loot.get(); }
134
136
137 bool IsExpired(time_t t) const;
138
140
141 private:
143 time_t m_time;
145};
146#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:129
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
uint16 flags
@ TYPEID_CORPSE
Definition ObjectGuid.h:48
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
CorpseDynFlags
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
Definition BaseEntity.h:221
void SetUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
Definition BaseEntity.h:228
void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter< T > setter)
Definition BaseEntity.h:263
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
Definition BaseEntity.h:242
void RemoveUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
Definition BaseEntity.h:235
CellCoord _cellCoord
Definition Corpse.h:144
void ReplaceAllFlags(uint32 flags)
Definition Corpse.h:107
void SetFaction(uint32 faction) override
Definition Corpse.h:110
void SetRace(uint8 race)
Definition Corpse.h:104
void SetClass(uint8 playerClass)
Definition Corpse.h:105
Loot * GetLootForPlayer(Player const *) const override
Definition Corpse.h:133
void SetSex(uint8 sex)
Definition Corpse.h:106
void SetGuildGUID(ObjectGuid guildGuid)
Definition Corpse.h:102
void SetDisplayId(uint32 displayId)
Definition Corpse.h:103
Player * lootRecipient
Definition Corpse.h:135
void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags)
Definition Corpse.h:95
void SetCustomizations(Trinity::IteratorPair< Iter > customizations)
Definition Corpse.h:114
CorpseType m_type
Definition Corpse.h:142
CorpseDynFlags GetCorpseDynamicFlags() const
Definition Corpse.h:93
void SetFactionTemplate(int32 factionTemplate)
Definition Corpse.h:108
void SetOwnerGUID(ObjectGuid owner)
Definition Corpse.h:100
void SetCorpseDynamicFlag(CorpseDynFlags dynamicFlags)
Definition Corpse.h:94
void SetPartyGUID(ObjectGuid partyGuid)
Definition Corpse.h:101
UF::UpdateField< UF::CorpseData, int32(WowCS::EntityFragment::CGObject), TYPEID_CORPSE > m_corpseData
Definition Corpse.h:139
uint32 GetFaction() const override
Definition Corpse.h:109
std::unique_ptr< Loot > m_loot
Definition Corpse.h:132
ObjectGuid GetCreatorGUID() const override
Definition Corpse.h:98
time_t const & GetGhostTime() const
Definition Corpse.h:125
CellCoord const & GetCellCoord() const
Definition Corpse.h:129
time_t m_time
Definition Corpse.h:143
void ReplaceAllCorpseDynamicFlags(CorpseDynFlags dynamicFlags)
Definition Corpse.h:96
ObjectGuid GetOwnerGUID() const override
Definition Corpse.h:99
void SetCellCoord(CellCoord const &cellCoord)
Definition Corpse.h:130
CorpseType GetType() const
Definition Corpse.h:127
void SetItem(uint32 slot, uint32 item)
Definition Corpse.h:111
Class used to access individual fields of database query result.
Definition Field.h:94
Definition Map.h:225
uint64 LowType
Definition ObjectGuid.h:321
virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual void ClearValuesChangesMask()
Definition Object.cpp:130
Utility class to enable range for loop syntax for multimap.equal_range uses.
void AddToWorld() override
Definition Object.cpp:365
void RemoveFromWorld() override
Definition Object.cpp:371
virtual void Update(uint32 diff)
Definition Object.cpp:245
UpdateFieldFlag
Definition UpdateField.h:37
ValuesUpdateForPlayerWithMaskSender(Corpse const *owner)
Definition Corpse.h:69
Definition Loot.h:286
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