/* ================= G_GiveClientMaxAmmo ================= */ void G_GiveClientMaxAmmo( gentity_t *ent, qboolean buyingEnergyAmmo ) { int i, maxAmmo, maxClips; qboolean restoredAmmo = qfalse, restoredEnergy = qfalse; //TODO find a solution to move dependency of ent->s.number and &ent->eventTime outside this function playerState_t *ps=&ent->client->ps; for ( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ ) { qboolean energyWeapon; energyWeapon = BG_Weapon( i )->usesEnergy; if ( !BG_InventoryContainsWeapon( i, ps->stats ) || BG_Weapon( i )->infiniteAmmo || BG_WeaponIsFull( i, ps->stats, ps->ammo, ps->clips ) || ( buyingEnergyAmmo && !energyWeapon ) ) { continue; } maxAmmo = BG_Weapon( i )->maxAmmo; maxClips = BG_Weapon( i )->maxClips; // Apply battery pack modifier if ( energyWeapon && BG_InventoryContainsUpgrade( UP_BATTPACK, ps->stats ) ) { maxAmmo *= BATTPACK_MODIFIER; restoredEnergy = qtrue; } ps->ammo = maxAmmo; ps->clips = maxClips; restoredAmmo = qtrue; } if ( restoredAmmo ) { G_ForceWeaponChange( ps, ps->weapon ); } if ( restoredEnergy ) { G_AddPlayerEvent( ps, EV_RPTUSE_SOUND, 0, ent->s.number, &ent->eventTime ); } }
/* ================= G_GiveClientMaxAmmo ================= */ void G_GiveClientMaxAmmo( gentity_t *ent, qboolean buyingEnergyAmmo ) { int i, maxAmmo, maxClips; qboolean restoredAmmo = qfalse, restoredEnergy = qfalse; for ( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ ) { qboolean energyWeapon; energyWeapon = BG_Weapon( i )->usesEnergy; if ( !BG_InventoryContainsWeapon( i, ent->client->ps.stats ) || BG_Weapon( i )->infiniteAmmo || BG_WeaponIsFull( i, ent->client->ps.stats, ent->client->ps.Ammo, ent->client->ps.clips ) || ( buyingEnergyAmmo && !energyWeapon ) ) { continue; } maxAmmo = BG_Weapon( i )->maxAmmo; maxClips = BG_Weapon( i )->maxClips; // Apply battery pack modifier if ( energyWeapon && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats ) ) { maxAmmo *= BATTPACK_MODIFIER; restoredEnergy = qtrue; } ent->client->ps.Ammo = maxAmmo; ent->client->ps.clips = maxClips; restoredAmmo = qtrue; } if ( restoredAmmo ) { G_ForceWeaponChange( ent, ent->client->ps.weapon ); } if ( restoredEnergy ) { G_AddEvent( ent, EV_RPTUSE_SOUND, 0 ); } }
/* ================= G_GiveClientMaxAmmo ================= */ void G_GiveClientMaxAmmo( gentity_t *ent, qboolean buyingEnergyAmmo ) { int i; int maxAmmo, maxClips; qboolean weaponType, restoredAmmo = qfalse; for( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ ) { if( buyingEnergyAmmo ) weaponType = BG_FindUsesEnergyForWeapon( i ); else weaponType = !BG_FindUsesEnergyForWeapon( i ); if( BG_InventoryContainsWeapon( i, ent->client->ps.stats ) && weaponType && !BG_FindInfinteAmmoForWeapon( i ) && !BG_WeaponIsFull( i, ent->client->ps.stats, ent->client->ps.ammo, ent->client->ps.powerups ) ) { BG_FindAmmoForWeapon( i, &maxAmmo, &maxClips ); if(ent->client->pers.trippleammo == 1) { maxAmmo*=3; } if( buyingEnergyAmmo ) { G_AddEvent( ent, EV_RPTUSE_SOUND, 0 ); if( BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats ) ) maxAmmo = (int)( (float)maxAmmo * BATTPACK_MODIFIER ); } BG_PackAmmoArray( i, ent->client->ps.ammo, ent->client->ps.powerups, maxAmmo, maxClips ); restoredAmmo = qtrue; } } if( restoredAmmo ) G_ForceWeaponChange( ent, ent->client->ps.weapon ); }