52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
#include "StdAfx.h"
|
|
|
|
void TalkAI::Initialize(CAnimal *pSelf, PAICONFIG pConfig)
|
|
{
|
|
m_pSelf = pSelf;
|
|
m_pAIConfig = pConfig;
|
|
if (m_pAIConfig)
|
|
{
|
|
m_bHasNonCombatTalk = m_bHasCombatTalk = true;
|
|
if (m_pAIConfig->m_combatTalkConfig.nIntervalLower <= 0 ||
|
|
m_pAIConfig->m_combatTalkConfig.nIntervalLower <= 0 ||
|
|
m_pAIConfig->m_combatTalkConfig.nTalkRate <= 0)
|
|
m_bHasCombatTalk = false;
|
|
|
|
if (m_pAIConfig->m_nonCombatTalkConfig.nIntervalLower <= 0 ||
|
|
m_pAIConfig->m_nonCombatTalkConfig.nIntervalLower <= 0 ||
|
|
m_pAIConfig->m_nonCombatTalkConfig.nTalkRate <= 0)
|
|
m_bHasNonCombatTalk = false;
|
|
}
|
|
}
|
|
|
|
void TalkAI::Update(TICKCOUNT nCurrentTick)
|
|
{
|
|
if (m_t2sTalk.CheckAndSet(nCurrentTick))
|
|
{
|
|
UpdateNPCTalk();
|
|
}
|
|
}
|
|
|
|
void TalkAI::UpdateNPCTalk()
|
|
{
|
|
if (m_bHasNonCombatTalk)
|
|
UpdateNPCNonCombatTalkImpl();
|
|
}
|
|
|
|
|
|
void TalkAI::UpdateNPCNonCombatTalkImpl()
|
|
{
|
|
if (enNpc == m_pSelf->GetType())
|
|
((CNpc *)m_pSelf)->NPCTalk();
|
|
|
|
PostponeTalkTimer();
|
|
}
|
|
|
|
void TalkAI::PostponeTalkTimer()
|
|
{
|
|
if (!m_pAIConfig) return;
|
|
int nRange = m_pAIConfig->m_nonCombatTalkConfig.nIntervalUpper - m_pAIConfig->m_nonCombatTalkConfig.nIntervalLower+1;
|
|
int nNextHit = wrand(nRange) + m_pAIConfig->m_nonCombatTalkConfig.nIntervalLower;
|
|
m_t2sTalk.SetNextHitTimeFromNow(nNextHit * 1000);
|
|
}
|