void CItemCommCrystal::OnHear(LPCTSTR pszCmd, CChar *pSrc) { ADDTOCALLSTACK("CItemCommCrystal::OnHear"); // IT_COMM_CRYSTAL // STATF_COMM_CRYSTAL = if i am on a person. TALKMODE_TYPE mode = TALKMODE_SAY; for ( size_t i = 0; i < m_Speech.GetCount(); i++ ) { CResourceLink *pLink = m_Speech[i]; ASSERT(pLink); CResourceLock s; if ( !pLink->ResourceLock(s) ) continue; TRIGRET_TYPE iRet = OnHearTrigger(s, pszCmd, pSrc, mode); if ( iRet == TRIGRET_ENDIF || iRet == TRIGRET_RET_FALSE ) continue; break; } // That's prevent @ -1 crash speech :P if ( *pszCmd == '@' ) return; if ( m_uidLink.IsValidUID() ) { // I am linked to something ? // Transfer the sound. CItem *pItem = m_uidLink.ItemFind(); if ( pItem && pItem->IsType(IT_COMM_CRYSTAL) ) pItem->Speak(pszCmd); } else if ( m_Speech.GetCount() <= 0 ) Speak(pszCmd); }
void CItemMulti::OnHearRegion( LPCTSTR pszCmd, CChar * pSrc ) { // IT_SHIP or IT_MULTI const CItemBaseMulti * pMultiDef = Multi_GetDef(); if ( pMultiDef == NULL ) return; TALKMODE_TYPE mode = TALKMODE_SAY; for ( int i=0; i<pMultiDef->m_Speech.GetCount(); i++ ) { CResourceLink * pLink = pMultiDef->m_Speech[i]; ASSERT(pLink); CResourceLock s; if ( ! pLink->ResourceLock( s )) continue; DEBUG_CHECK( pLink->HasTrigger(XTRIG_UNKNOWN)); TRIGRET_TYPE iRet = OnHearTrigger( s, pszCmd, pSrc, mode ); if ( iRet == TRIGRET_ENDIF || iRet == TRIGRET_RET_FALSE ) continue; break; } }