bool BotShouldJump( gentity_t *self, gentity_t *blocker, const vec3_t dir ) { vec3_t playerMins; vec3_t playerMaxs; float jumpMagnitude; trace_t trace; const int TRACE_LENGTH = BOT_OBSTACLE_AVOID_RANGE; vec3_t end; //blocker is not on our team, so ignore if ( BotGetEntityTeam( self ) != BotGetEntityTeam( blocker ) ) { return false; } //already normalized BG_ClassBoundingBox( ( class_t ) self->client->ps.stats[STAT_CLASS], playerMins, playerMaxs, nullptr, nullptr, nullptr ); playerMins[2] += STEPSIZE; playerMaxs[2] += STEPSIZE; //Log::Debug(vtos(self->movedir)); VectorMA( self->s.origin, TRACE_LENGTH, dir, end ); //make sure we are moving into a block trap_Trace( &trace, self->s.origin, playerMins, playerMaxs, end, self->s.number, MASK_SHOT, 0 ); if ( trace.fraction >= 1.0f || blocker != &g_entities[trace.entityNum] ) { return false; } jumpMagnitude = BG_Class( ( class_t )self->client->ps.stats[STAT_CLASS] )->jumpMagnitude; //find the actual height of our jump jumpMagnitude = Square( jumpMagnitude ) / ( self->client->ps.gravity * 2 ); //prepare for trace playerMins[2] += jumpMagnitude; playerMaxs[2] += jumpMagnitude; //check if jumping will clear us of entity trap_Trace( &trace, self->s.origin, playerMins, playerMaxs, end, self->s.number, MASK_SHOT, 0 ); //if we can jump over it, then jump //note that we also test for a blocking barricade because barricades will collapse to let us through if ( blocker->s.modelindex == BA_A_BARRICADE || trace.fraction == 1.0f ) { return true; } else { return false; } }
void G_BotDel( int clientNum ) { gentity_t *bot = &g_entities[clientNum]; char userinfo[MAX_INFO_STRING]; const char *autoname; if ( !( bot->r.svFlags & SVF_BOT ) || !bot->botMind ) { Log::Warn( "'^7%s^7' is not a bot", bot->client->pers.netname ); return; } trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); autoname = Info_ValueForKey( userinfo, "autoname" ); if ( autoname && *autoname ) { G_BotNameUsed( BotGetEntityTeam( bot ), autoname, false ); } trap_SendServerCommand( -1, va( "print_tr %s %s", QQ( N_( "$1$^7 disconnected" ) ), Quote( bot->client->pers.netname ) ) ); trap_DropClient( clientNum, "disconnected" ); }