/* ============ AICast_ProcessAIFunctions ============ */ void AICast_ProcessAIFunctions( cast_state_t *cs, float thinktime ) { int i; const char *funcname; //check for air BotCheckAir( cs->bs ); //if the cast has no ai function if ( !cs->aifunc ) { AIFunc_DefaultStart( cs ); } // // call AI funcs for this cast // AICast_DBG_InitAIFuncs(); // // only allow looping in debug mode (since it's much slower) for ( i = 0; i < ( aicast_debug.integer ? MAX_AIFUNCS : 1 ); i++ ) { if ( !( funcname = cs->aifunc( cs ) ) ) { break; } else { trap_BotResetAvoidReach( cs->bs->ms ); // reset avoidreach cs->thinkFuncChangeTime = level.time; AICast_DBG_AddAIFunc( cs, funcname ); } } // //if the cast executed too many AI functions // if ( aicast_debug.integer && i >= MAX_AIFUNCS ) { AICast_DBG_ListAIFuncs( cs, 10 ); // print the last 10 funcs called } }
/* ============== BotResetState called when a bot enters the intermission or observer mode and when the level is changed ============== */ void BotResetState( bot_state_t *bs ) { int client, entitynum, inuse; int movestate, goalstate, chatstate, weaponstate; bot_settings_t settings; int character; playerState_t ps; //current player state float entergame_time; //save some things that should not be reset here memcpy( &settings, &bs->settings, sizeof( bot_settings_t ) ); memcpy( &ps, &bs->cur_ps, sizeof( playerState_t ) ); inuse = bs->inuse; client = bs->client; entitynum = bs->entitynum; character = bs->character; movestate = bs->ms; goalstate = bs->gs; chatstate = bs->cs; weaponstate = bs->ws; entergame_time = bs->entergame_time; //free checkpoints and patrol points BotFreeWaypoints( bs->checkpoints ); BotFreeWaypoints( bs->patrolpoints ); //reset the whole state memset( bs, 0, sizeof( bot_state_t ) ); //copy back some state stuff that should not be reset bs->ms = movestate; bs->gs = goalstate; bs->cs = chatstate; bs->ws = weaponstate; memcpy( &bs->cur_ps, &ps, sizeof( playerState_t ) ); memcpy( &bs->settings, &settings, sizeof( bot_settings_t ) ); bs->inuse = inuse; bs->client = client; bs->entitynum = entitynum; bs->character = character; bs->entergame_time = entergame_time; //reset several states if ( bs->ms ) { trap_BotResetMoveState( bs->ms ); } if ( bs->gs ) { trap_BotResetGoalState( bs->gs ); } if ( bs->ws ) { trap_BotResetWeaponState( bs->ws ); } if ( bs->gs ) { trap_BotResetAvoidGoals( bs->gs ); } if ( bs->ms ) { trap_BotResetAvoidReach( bs->ms ); } }
/* ============= BotResetState Called when a bot enters the intermission or observer mode and when the level is changed. ============= */ void BotResetState(bot_state_t *bs) { int client, entitynum, inuse; int movestate, chatstate; bot_settings_t settings; int character; float enter_game_time; // Only reset valid states if (!bs || !bs->inuse) return; // Save data that should not be reset memcpy(&settings, &bs->settings, sizeof(bot_settings_t)); inuse = bs->inuse; client = bs->client; entitynum = bs->entitynum; character = bs->character; movestate = bs->ms; chatstate = bs->cs; enter_game_time = bs->enter_game_time; // Free checkpoints and patrol points BotFreeWaypoints(bs->checkpoints); BotFreeWaypoints(bs->patrol); // Reset the state memset(bs, 0, sizeof(bot_state_t)); // Copy back some state stuff that should not be reset bs->ms = movestate; bs->cs = chatstate; bs->ent = &g_entities[client]; bs->ps = &bs->ent->client->ps; memcpy(&bs->settings, &settings, sizeof(bot_settings_t)); bs->inuse = inuse; bs->client = client; bs->entitynum = entitynum; bs->character = character; bs->enter_game_time = enter_game_time; // Reset the move state if (bs->ms) { trap_BotResetMoveState(bs->ms); trap_BotResetAvoidReach(bs->ms); } // Initialize internal bot data data, such as statistics and awareness BotInitialize(bs); }
/* ============== BotResetState called when a bot enters the intermission or observer mode and when the level is changed ============== */ void BotResetState(bot_state_t *bs) { int client, entitynum, inuse; #ifndef __MMO__ int movestate, goalstate, weaponstate; #endif //__MMO__ bot_settings_t settings; playerState_t ps; //current player state float entergame_time; //save some things that should not be reset here memcpy(&settings, &bs->settings, sizeof(bot_settings_t)); memcpy(&ps, &bs->cur_ps, sizeof(playerState_t)); inuse = bs->inuse; client = bs->client; entitynum = bs->entitynum; #ifndef __MMO__ movestate = bs->ms; goalstate = bs->gs; weaponstate = bs->ws; #endif //__MMO__ entergame_time = bs->entergame_time; //reset the whole state memset(bs, 0, sizeof(bot_state_t)); //copy back some state stuff that should not be reset #ifndef __MMO__ bs->ms = movestate; bs->gs = goalstate; bs->ws = weaponstate; #endif //__MMO__ memcpy(&bs->cur_ps, &ps, sizeof(playerState_t)); memcpy(&bs->settings, &settings, sizeof(bot_settings_t)); bs->inuse = inuse; bs->client = client; bs->entitynum = entitynum; bs->entergame_time = entergame_time; #ifndef __MMO__ //reset several states if (bs->ms) trap_BotResetMoveState(bs->ms); if (bs->gs) trap_BotResetGoalState(bs->gs); if (bs->ws) trap_BotResetWeaponState(bs->ws); if (bs->gs) trap_BotResetAvoidGoals(bs->gs); if (bs->ms) trap_BotResetAvoidReach(bs->ms); #endif //__MMO__ }