diff options
| author | ModoX <moardox@gmail.com> | 2023-07-08 19:03:17 +0200 |
|---|---|---|
| committer | ModoX <moardox@gmail.com> | 2023-07-08 19:03:26 +0200 |
| commit | a44748599196307ccdd40cf42c74f419e7679b59 (patch) | |
| tree | 1cd6439246a3b29c4cef276054f322cb4f790551 /src/server/game | |
| parent | afa67150411a59eaa6192af51de8cc3edf42b518 (diff) | |
Core/Conversation: Added some helper methods for scripting
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/Conversation/Conversation.cpp | 55 | ||||
| -rw-r--r-- | src/server/game/Entities/Conversation/Conversation.h | 6 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index 527bc6636dd..087fb812e08 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -24,10 +24,12 @@ #include "IteratorPair.h" #include "Log.h" #include "Map.h" +#include "ObjectAccessor.h" #include "PhasingHandler.h" #include "Player.h" #include "ScriptMgr.h" #include "UpdateData.h" +#include "WorldSession.h" Conversation::Conversation() : WorldObject(false), _duration(0), _textureKitId(0) { @@ -278,6 +280,59 @@ Milliseconds Conversation::GetLastLineEndTime(LocaleConstant locale) const return _lastLineEndTimes[locale]; } +int32 Conversation::GetLineDuration(LocaleConstant locale, int32 lineId) +{ + ConversationLineEntry const* convoLine = sConversationLineStore.LookupEntry(lineId); + if (!convoLine) + { + TC_LOG_ERROR("entities.conversation", "Conversation::GetLineDuration: Tried to get duration for invalid ConversationLine id {}.", lineId); + return 0; + } + + int32 const* textDuration = sDB2Manager.GetBroadcastTextDuration(convoLine->BroadcastTextID, locale); + if (!textDuration) + return 0; + + return *textDuration + convoLine->AdditionalDuration; +} + +Milliseconds Conversation::GetLineEndTime(LocaleConstant locale, int32 lineId) const +{ + Milliseconds const* lineStartTime = GetLineStartTime(locale, lineId); + if (!lineStartTime) + { + TC_LOG_ERROR("entities.conversation", "Conversation::GetLineEndTime: Unable to get line start time for locale {}, lineid {} (Conversation ID: {}).", locale, lineId, GetEntry()); + return Milliseconds(0); + } + return *lineStartTime + Milliseconds(GetLineDuration(locale, lineId)); +} + +LocaleConstant Conversation::GetPrivateObjectOwnerLocale() const +{ + LocaleConstant privateOwnerLocale = LOCALE_enUS; + if (Player* owner = ObjectAccessor::GetPlayer(*this, GetPrivateObjectOwner())) + privateOwnerLocale = owner->GetSession()->GetSessionDbLocaleIndex(); + return privateOwnerLocale; +} + +Unit* Conversation::GetActorUnit(uint32 actorIdx) const +{ + if (m_conversationData->Actors.size() <= actorIdx) + { + TC_LOG_ERROR("entities.conversation", "Conversation::GetActorUnit: Tried to access invalid actor idx {} (Conversation ID: {}).", actorIdx, GetEntry()); + return nullptr; + } + return ObjectAccessor::GetUnit(*this, m_conversationData->Actors[actorIdx].ActorGUID); +} + +Creature* Conversation::GetActorCreature(uint32 actorIdx) const +{ + Unit* actor = GetActorUnit(actorIdx); + if (!actor) + return nullptr; + return actor->ToCreature(); +} + uint32 Conversation::GetScriptId() const { return sConversationDataStore->GetConversationTemplate(GetEntry())->ScriptId; diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h index d387353da3f..12a03e7fbb0 100644 --- a/src/server/game/Entities/Conversation/Conversation.h +++ b/src/server/game/Entities/Conversation/Conversation.h @@ -78,6 +78,12 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat Milliseconds const* GetLineStartTime(LocaleConstant locale, int32 lineId) const; Milliseconds GetLastLineEndTime(LocaleConstant locale) const; + static int32 GetLineDuration(LocaleConstant locale, int32 lineId); + Milliseconds GetLineEndTime(LocaleConstant locale, int32 lineId) const; + + LocaleConstant GetPrivateObjectOwnerLocale() const; + Unit* GetActorUnit(uint32 actorIdx) const; + Creature* GetActorCreature(uint32 actorIdx) const; uint32 GetScriptId() const; |
