void DoNextDialogueStep() { // Last Dialogue Entry done? if (_currentEntry && !_currentEntry->TextEntry) { _actionTimer = 0; return; } // Get Text, SpeakerEntry and Timer int32 textEntry = _currentEntry->TextEntry; uint32 sayerEntry = _currentEntry->SayerEntry; _actionTimer = _currentEntry->SayTimer; // Simulate Case if (sayerEntry && textEntry >= 0) { // Use Speaker if directly provided if (Creature* speaker = GetSpeakerByEntry(sayerEntry)) speaker->AI()->Talk(textEntry); } JustDidDialogueStep(_currentEntry->TextEntry); // Increment position ++_currentEntry; }
/// Internal helper function to do the actual say of a DialogueEntry void DialogueHelper::DoNextDialogueStep() { // Last Dialogue Entry done? if (m_pCurrentEntry && !m_pCurrentEntry->iTextEntry || m_pCurrentEntryTwoSide && !m_pCurrentEntryTwoSide->iTextEntry) { m_uiTimer = 0; return; } // Get Text, SpeakerEntry and Timer int32 iTextEntry = 0; uint32 uiSpeakerEntry = 0; if (m_pDialogueArray) // One Side { uiSpeakerEntry = m_pCurrentEntry->uiSayerEntry; iTextEntry = m_pCurrentEntry->iTextEntry; m_uiTimer = m_pCurrentEntry->uiTimer; } else // Two Sides { // Second Entries can be 0, if they are the entry from first side will be taken uiSpeakerEntry = !m_bIsFirstSide && m_pCurrentEntryTwoSide->uiSayerEntryAlt ? m_pCurrentEntryTwoSide->uiSayerEntryAlt : m_pCurrentEntryTwoSide->uiSayerEntry; iTextEntry = !m_bIsFirstSide && m_pCurrentEntryTwoSide->iTextEntryAlt ? m_pCurrentEntryTwoSide->iTextEntryAlt : m_pCurrentEntryTwoSide->iTextEntry; m_uiTimer = m_pCurrentEntryTwoSide->uiTimer; } // Simulate Case if (uiSpeakerEntry && iTextEntry < 0) { // Use Speaker if directly provided Creature* pSpeaker = GetSpeakerByEntry(uiSpeakerEntry); if (m_pInstance && !pSpeaker) // Get Speaker from instance { if (m_bCanSimulate) // Simulate case m_pInstance->DoOrSimulateScriptTextForThisInstance(iTextEntry, uiSpeakerEntry); else pSpeaker = m_pInstance->GetSingleCreatureFromStorage(uiSpeakerEntry); } if (pSpeaker) DoScriptText(iTextEntry, pSpeaker); } JustDidDialogueStep(m_pDialogueArray ? m_pCurrentEntry->iTextEntry : m_pCurrentEntryTwoSide->iTextEntry); // Increment position if (m_pDialogueArray) ++m_pCurrentEntry; else ++m_pCurrentEntryTwoSide; }