//----------------------------------------------------------------------------- // Purpose: Create a new Bot and put it in the game. // Output : Pointer to the new Bot, or NULL if there's no free clients. //----------------------------------------------------------------------------- CBasePlayer *BotPutInServer( bool bFrozen, int iTeam, int iClass, const char *pszCustomName ) { g_iNextBotTeam = iTeam; g_iNextBotClass = iClass; char botname[ 64 ]; if ( pszCustomName && pszCustomName[0] ) { Q_strncpy( botname, pszCustomName, sizeof( botname ) ); } else if ( bot_randomnames.GetBool() ) { switch( RandomInt(0,5) ) { case 0: Q_snprintf( botname, sizeof( botname ), "Bot", BotNumber ); break; case 1: Q_snprintf( botname, sizeof( botname ), "This is a medium Bot", BotNumber ); break; case 2: Q_snprintf( botname, sizeof( botname ), "This is a super long bot name that is too long for the game to allow", BotNumber ); break; case 3: Q_snprintf( botname, sizeof( botname ), "Another bot", BotNumber ); break; case 4: Q_snprintf( botname, sizeof( botname ), "Yet more Bot names, medium sized", BotNumber ); break; default: Q_snprintf( botname, sizeof( botname ), "B", BotNumber ); break; } } else { Q_snprintf( botname, sizeof( botname ), "Bot%02i", BotNumber ); } edict_t *pEdict = engine->CreateFakeClient( botname ); if (!pEdict) { Msg( "Failed to create Bot.\n"); return NULL; } // Allocate a CBasePlayer for the bot, and call spawn //ClientPutInServer( pEdict, botname ); CTFPlayer *pPlayer = ((CTFPlayer *)CBaseEntity::Instance( pEdict )); pPlayer->ClearFlags(); pPlayer->AddFlag( FL_CLIENT | FL_FAKECLIENT ); if ( bFrozen ) pPlayer->AddEFlags( EFL_BOT_FROZEN ); BotNumber++; botdata_t *pBot = &g_BotData[ pPlayer->entindex() - 1 ]; pBot->m_bWasDead = false; pBot->m_WantedTeam = iTeam; pBot->m_WantedClass = iClass; pBot->m_flJoinTeamTime = gpGlobals->curtime + 0.3; return pPlayer; }