TrinityCore
Conversation.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_CONVERSATION_H
19#define TRINITYCORE_CONVERSATION_H
20
21#include "Object.h"
22#include "GridObject.h"
23#include "Hash.h"
24
25class Unit;
26class SpellInfo;
27enum class ConversationActorType : uint32;
28
29class TC_GAME_API Conversation final : public WorldObject, public GridObject<Conversation>
30{
31 public:
34
35 protected:
36 void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
37 void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
38 void ClearUpdateMask(bool remove) override;
39
40 public:
41 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
42 UF::ConversationData::Mask const& requestedConversationMask, Player const* target) const;
43
44 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
45 {
46 explicit ValuesUpdateForPlayerWithMaskSender(Conversation const* owner) : Owner(owner) { }
47
51
52 void operator()(Player const* player) const;
53 };
54
55 void AddToWorld() override;
56 void RemoveFromWorld() override;
57
58 void Update(uint32 diff) override;
59 void Remove();
60 Milliseconds GetDuration() const { return _duration; }
61 uint32 GetTextureKitId() const { return _textureKitId; }
62
63 static Conversation* CreateConversation(uint32 conversationEntry, Unit* creator, Position const& pos, ObjectGuid privateObjectOwner, SpellInfo const* spellInfo = nullptr, bool autoStart = true);
64 void Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, Map* map, Unit* creator, Position const& pos, ObjectGuid privateObjectOwner, SpellInfo const* spellInfo = nullptr);
65 bool Start();
66 void AddActor(int32 actorId, uint32 actorIdx, ObjectGuid const& actorGuid);
67 void AddActor(int32 actorId, uint32 actorIdx, ConversationActorType type, uint32 creatureId, uint32 creatureDisplayInfoId);
68
69 ObjectGuid GetCreatorGUID() const override { return _creatorGuid; }
70 ObjectGuid GetOwnerGUID() const override { return GetCreatorGUID(); }
71 uint32 GetFaction() const override { return 0; }
72
73 float GetStationaryX() const override { return _stationaryPosition.GetPositionX(); }
74 float GetStationaryY() const override { return _stationaryPosition.GetPositionY(); }
75 float GetStationaryZ() const override { return _stationaryPosition.GetPositionZ(); }
76 float GetStationaryO() const override { return _stationaryPosition.GetOrientation(); }
77 void RelocateStationaryPosition(Position const& pos) { _stationaryPosition.Relocate(pos); }
78
79 Milliseconds const* GetLineStartTime(LocaleConstant locale, int32 lineId) const;
80 Milliseconds GetLastLineEndTime(LocaleConstant locale) const;
81 static int32 GetLineDuration(LocaleConstant locale, int32 lineId);
82 Milliseconds GetLineEndTime(LocaleConstant locale, int32 lineId) const;
83
84 LocaleConstant GetPrivateObjectOwnerLocale() const;
85 Unit* GetActorUnit(uint32 actorIdx) const;
86 Creature* GetActorCreature(uint32 actorIdx) const;
87
88 uint32 GetScriptId() const;
89
91
92 private:
97
98 std::unordered_map<std::pair<LocaleConstant /*locale*/, int32 /*lineId*/>, Milliseconds /*startTime*/> _lineStartTimes;
100};
101
102#endif // TRINITYCORE_CONVERSATION_H
LocaleConstant
Definition: Common.h:48
@ TOTAL_LOCALES
Definition: Common.h:62
ConversationActorType
#define TC_GAME_API
Definition: Define.h:123
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
void RelocateStationaryPosition(Position const &pos)
Definition: Conversation.h:77
ObjectGuid GetCreatorGUID() const override
Definition: Conversation.h:69
std::array< Milliseconds, TOTAL_LOCALES > _lastLineEndTimes
Definition: Conversation.h:99
UF::UpdateField< UF::ConversationData, 0, TYPEID_CONVERSATION > m_conversationData
Definition: Conversation.h:90
float GetStationaryZ() const override
Definition: Conversation.h:75
uint32 GetFaction() const override
Definition: Conversation.h:71
Milliseconds _duration
Definition: Conversation.h:95
Milliseconds GetDuration() const
Definition: Conversation.h:60
uint32 _textureKitId
Definition: Conversation.h:96
float GetStationaryY() const override
Definition: Conversation.h:74
float GetStationaryX() const override
Definition: Conversation.h:73
std::unordered_map< std::pair< LocaleConstant, int32 >, Milliseconds > _lineStartTimes
Definition: Conversation.h:98
ObjectGuid _creatorGuid
Definition: Conversation.h:94
float GetStationaryO() const override
Definition: Conversation.h:76
Position _stationaryPosition
Definition: Conversation.h:93
uint32 GetTextureKitId() const
Definition: Conversation.h:61
ObjectGuid GetOwnerGUID() const override
Definition: Conversation.h:70
Definition: Map.h:189
uint64 LowType
Definition: ObjectGuid.h:278
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
virtual void ClearUpdateMask(bool remove)
Definition: Object.cpp:790
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
Definition: Unit.h:627
void AddToWorld() override
Definition: Object.cpp:1011
virtual ObjectGuid GetCreatorGUID() const =0
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
void Remove(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:100
ValuesUpdateForPlayerWithMaskSender(Conversation const *owner)
Definition: Conversation.h:46