//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== int BotChooseBestFightWeapon(int weaponstate, int *inventory) { int i, index, bestweapon; float weight, bestweight; weaponconfig_t *wc; bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle(weaponstate); if (!ws) return 0; wc = weaponconfig; if (!weaponconfig) return 0; //if the bot has no weapon weight configuration if (!ws->weaponweightconfig) return 0; bestweight = 0; bestweapon = 0; for (i = 0; i < wc->numweapons; i++) { if (!wc->weaponinfo[i].valid) continue; index = ws->weaponweightindex[i]; if (index < 0) continue; weight = FuzzyWeight(inventory, ws->weaponweightconfig, index); if (weight > bestweight) { bestweight = weight; bestweapon = i; } //end if } //end for return bestweapon; } //end of the function BotChooseBestFightWeapon
void BotFreeWeaponWeights(int weaponstate) { bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle(weaponstate); if (!ws) return; if (ws->weaponweightconfig) FreeWeightConfig(ws->weaponweightconfig); if (ws->weaponweightindex) FreeMemory(ws->weaponweightindex); }
void BotGetWeaponInfo(int weaponstate, int weapon, weaponinfo_t *weaponinfo) { bot_weaponstate_t *ws; if (!BotValidWeaponNumber(weapon)) return; ws = BotWeaponStateFromHandle(weaponstate); if (!ws) return; if (!weaponconfig) return; memcpy(weaponinfo, &weaponconfig->weaponinfo[weapon], sizeof(weaponinfo_t)); }
void BotResetWeaponState(int weaponstate) { struct weightconfig_s *weaponweightconfig; int *weaponweightindex; bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle(weaponstate); if (!ws) return; weaponweightconfig = ws->weaponweightconfig; weaponweightindex = ws->weaponweightindex; //memset(ws, 0, sizeof(bot_weaponstate_t)); ws->weaponweightconfig = weaponweightconfig; ws->weaponweightindex = weaponweightindex; }
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void BotFreeWeaponWeights( int weaponstate ) { bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle( weaponstate ); if ( !ws ) { return; } if ( ws->weaponweightconfig ) { FreeWeightConfig( ws->weaponweightconfig ); } if ( ws->weaponweightindex ) { FreeMemory( ws->weaponweightindex ); } } //end of the function BotFreeWeaponWeights
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void BotGetWeaponInfo( int weaponstate, int weapon, weaponinfo_t *weaponinfo ) { bot_weaponstate_t *ws; if ( !BotValidWeaponNumber( weapon ) ) { return; } ws = BotWeaponStateFromHandle( weaponstate ); if ( !ws ) { return; } if ( !weaponconfig ) { return; } memcpy( weaponinfo, &weaponconfig->weaponinfo[weapon], sizeof( weaponinfo_t ) ); } //end of the function BotGetWeaponInfo
int BotLoadWeaponWeights(int weaponstate, char *filename) { bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle(weaponstate); if (!ws) return BLERR_CANNOTLOADWEAPONWEIGHTS; BotFreeWeaponWeights(weaponstate); // ws->weaponweightconfig = ReadWeightConfig(filename); if (!ws->weaponweightconfig) { botimport.Print(PRT_FATAL, "couldn't load weapon config %s\n", filename); return BLERR_CANNOTLOADWEAPONWEIGHTS; } if (!weaponconfig) return BLERR_CANNOTLOADWEAPONCONFIG; ws->weaponweightindex = WeaponWeightIndex(ws->weaponweightconfig, weaponconfig); return BLERR_NOERROR; }
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== int BotLoadWeaponWeights( int weaponstate, char *filename ) { bot_weaponstate_t *ws; ws = BotWeaponStateFromHandle( weaponstate ); if ( !ws ) { return BLERR_CANNOTLOADWEAPONWEIGHTS; } BotFreeWeaponWeights( weaponstate ); // PS_SetBaseFolder( "botfiles" ); ws->weaponweightconfig = ReadWeightConfig( filename ); PS_SetBaseFolder( "" ); if ( !ws->weaponweightconfig ) { botimport.Print( PRT_FATAL, "couldn't load weapon config %s\n", filename ); return BLERR_CANNOTLOADWEAPONWEIGHTS; } //end if if ( !weaponconfig ) { return BLERR_CANNOTLOADWEAPONCONFIG; } ws->weaponweightindex = WeaponWeightIndex( ws->weaponweightconfig, weaponconfig ); return BLERR_NOERROR; } //end of the function BotLoadWeaponWeights