You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.7 KiB
89 lines
2.7 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef TF_AUTORP_H
|
||
|
#define TF_AUTORP_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "igamesystem.h"
|
||
|
#include "utlvector.h"
|
||
|
#include "utlmap.h"
|
||
|
|
||
|
enum matchresult_t
|
||
|
{
|
||
|
MATCHES_NOT,
|
||
|
MATCHES_SINGULAR,
|
||
|
MATCHES_PLURAL,
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CTFAutoRP : public CAutoGameSystem
|
||
|
{
|
||
|
public:
|
||
|
CTFAutoRP() : CAutoGameSystem( "CTFAutoRP" )
|
||
|
{
|
||
|
m_pDataFileKV = NULL;
|
||
|
m_pWordTable = new CUtlSymbolTable( 0, 32, true );
|
||
|
}
|
||
|
|
||
|
void ParseDataFile( void );
|
||
|
void ApplyRPTo( char *pBuf, int iBufSize );
|
||
|
|
||
|
private:
|
||
|
struct wordreplacement_t
|
||
|
{
|
||
|
int iChance;
|
||
|
int iPrePendCount;
|
||
|
CUtlVector<const char*> a_pszPrepended; // Words that prepend the replacement
|
||
|
CUtlVector<const char*> a_pszReplacements; // Words that replace the original word
|
||
|
CUtlVector<const char*> a_pszPluralReplacements; // If the match was a plural match, use these replacements instead, if they exist. Otherwise, use a_pszReplacements.
|
||
|
CUtlVector<CUtlSymbol> m_Words; // Word that matches this replacement
|
||
|
CUtlVector<CUtlSymbol> m_Plurals; // Word that must come before to match this replacement, for double word replacements (i.e. "it is" -> "'tis")
|
||
|
CUtlVector<CUtlSymbol> m_PrevWords; // Word that must come before to match this replacement, for double word replacements (i.e. "it is" -> "'tis")
|
||
|
};
|
||
|
|
||
|
struct replacementcheck_t
|
||
|
{
|
||
|
char szWord[128];
|
||
|
int iWordLen;
|
||
|
char szPrevWord[128];
|
||
|
int iPrevLen;
|
||
|
|
||
|
bool bUsedPrevWord;
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
const char *GetRandomPre( void );
|
||
|
const char *GetRandomPost( void );
|
||
|
void ModifySpeech( const char *pszInText, char *pszOutText, int iOutLen, bool bGeneratePreAndPost, bool bInPrePost );
|
||
|
matchresult_t WordMatches( wordreplacement_t *pRep, replacementcheck_t *pCheck );
|
||
|
bool ReplaceWord( replacementcheck_t *pCheck, char *szRep, int iRepSize, bool bSymbols, bool bWordListOnly );
|
||
|
bool PerformReplacement( const char *pszReplacement, replacementcheck_t *pRepCheck, char *szStoredWord, int iStoredWordSize, char *pszOutText, int iOutLen );
|
||
|
|
||
|
private:
|
||
|
// Database
|
||
|
KeyValues *m_pDataFileKV;
|
||
|
// Storage of all replacement blocks
|
||
|
CUtlVector<wordreplacement_t> m_a_Replacements;
|
||
|
CUtlSymbolTable *m_pWordTable;
|
||
|
|
||
|
// Extra lists for random selection
|
||
|
CUtlVector<const char*> m_a_pszPrependedWords;
|
||
|
CUtlVector<const char*> m_a_pszAppendedWords;
|
||
|
|
||
|
// Current application
|
||
|
CUtlVector<const char*> *m_pszCurrentList;
|
||
|
int m_iCurrentReplacement;
|
||
|
};
|
||
|
|
||
|
extern CTFAutoRP *AutoRP( void );
|
||
|
|
||
|
#endif // TF_AUTORP_H
|