/* ================ G_ForceWeaponChange ================ */ void G_ForceWeaponChange( playerState_t *ps, weapon_t weapon ) { // stop a reload in progress if ( ps->weaponstate == WEAPON_RELOADING ) { ps->torsoAnim = ( ( ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT ) | TORSO_RAISE; ps->weaponTime = 250; ps->weaponstate = WEAPON_READY; } if ( weapon == WP_NONE || !BG_InventoryContainsWeapon( weapon, ps->stats ) ) { // switch to the first non blaster weapon ps->persistant[ PERS_NEWWEAPON ] = BG_PrimaryWeapon( ps->stats ); } else { ps->persistant[ PERS_NEWWEAPON ] = weapon; } // force this here to prevent flamer effect from continuing ps->generic1 = WPM_NOTFIRING; // The PMove will do an animated drop, raise, and set the new weapon ps->pm_flags |= PMF_WEAPON_SWITCH; }
/* =============== trigger_ammo_touch =============== */ void trigger_ammo_touch( gentity_t *self, gentity_t *other, trace_t *trace ) { int maxClips, maxAmmo; weapon_t weapon; if( !other->client ) return; if( other->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS ) return; if( self->timestamp > level.time ) return; if( other->client->ps.weaponstate != WEAPON_READY ) return; weapon = BG_PrimaryWeapon( other->client->ps.stats ); if( BG_Weapon( weapon )->usesEnergy && self->spawnflags & 2 ) return; if( !BG_Weapon( weapon )->usesEnergy && self->spawnflags & 4 ) return; if( self->spawnflags & 1 ) self->timestamp = level.time + 1000; else self->timestamp = level.time + FRAMETIME; maxAmmo = BG_Weapon( weapon )->maxAmmo; maxClips = BG_Weapon( weapon )->maxClips; if( ( other->client->ps.ammo + self->damage ) > maxAmmo ) { if( other->client->ps.clips < maxClips ) { other->client->ps.clips++; other->client->ps.ammo = 1; } else other->client->ps.ammo = maxAmmo; } else other->client->ps.ammo += self->damage; }
void G_ForceWeaponChange( gentity_t *ent, weapon_t weapon ) { playerState_t *ps = &ent->client->ps; if ( weapon == WP_NONE || !BG_InventoryContainsWeapon( weapon, ps->stats ) ) { // switch to the first non blaster weapon ps->persistant[ PERS_NEWWEAPON ] = BG_PrimaryWeapon( ent->client->ps.stats ); } else { ps->persistant[ PERS_NEWWEAPON ] = weapon; } // force this here to prevent flamer effect from continuing ps->generic1 = WPM_NOTFIRING; // The PMove will do an animated drop, raise, and set the new weapon ps->pm_flags |= PMF_WEAPON_SWITCH; }
static void CG_Rocket_DFCMArmouryBuyWeapon( int handle, const char *data ) { weapon_t weapon = (weapon_t) atoi( Info_ValueForKey( data, "1" ) ); const char *Class = ""; const char *Icon = ""; const char *action = ""; playerState_t *ps = &cg.snap->ps; int credits = ps->persistant[ PERS_CREDIT ]; weapon_t currentweapon = BG_PrimaryWeapon( ps->stats ); credits += BG_Weapon( currentweapon )->price; if( BG_InventoryContainsWeapon( weapon, cg.predictedPlayerState.stats ) ){ Class = "active"; action = va( "onClick='Cmd.exec(\"sell %s\")'", BG_Weapon( weapon )->name ); //Check mark icon. UTF-8 encoding of \uf00c Icon = "<icon class=\"current\">\xEF\x80\x8C</icon>"; } else if ( !BG_WeaponUnlocked( weapon ) || BG_WeaponDisabled( weapon ) ) { Class = "locked"; //Padlock icon. UTF-8 encoding of \uf023 Icon = "<icon>\xEF\x80\xA3</icon>"; } else if(BG_Weapon( weapon )->price > credits){ Class = "expensive"; //$1 bill icon. UTF-8 encoding of \uf0d6 Icon = "<icon>\xEF\x83\x96</icon>"; } else { Class = "available"; action = va( "onClick='Cmd.exec(\"buy +%s\")'", BG_Weapon( weapon )->name ); } Rocket_DataFormatterFormattedData( handle, va( "<button class='armourybuy %s' onMouseover='Events.pushevent(\"setDS armouryBuyList weapons %s\", event)' %s>%s<img src='/%s'/></button>", Class, Info_ValueForKey( data, "2" ), action, Icon, CG_GetShaderNameFromHandle( cg_weapons[ weapon ].ammoIcon )), false ); }
static AIValue_t percentAmmo( gentity_t *self, const AIValue_t* ) { return AIBoxFloat( PercentAmmoRemaining( BG_PrimaryWeapon( self->client->ps.stats ), &self->client->ps ) ); }
/* ================================================================================= trigger_ammo ================================================================================= */ void env_afx_ammo_touch( gentity_t *self, gentity_t *other, trace_t* ) { int maxClips, maxAmmo; weapon_t weapon; if ( !other->client ) { return; } if ( other->client->pers.team != TEAM_HUMANS ) { return; } if ( self->timestamp > level.time ) { return; } if ( other->client->ps.weaponstate != WEAPON_READY ) { return; } weapon = BG_PrimaryWeapon( other->client->ps.stats ); if ( BG_Weapon( weapon )->usesEnergy && ( self->spawnflags & 2 ) ) { return; } if ( !BG_Weapon( weapon )->usesEnergy && ( self->spawnflags & 4 ) ) { return; } if ( self->spawnflags & 1 ) { self->timestamp = level.time + 1000; } else { self->timestamp = level.time + FRAMETIME; } maxAmmo = BG_Weapon( weapon )->maxAmmo; maxClips = BG_Weapon( weapon )->maxClips; if ( ( other->client->ps.ammo + self->config.amount ) > maxAmmo ) { if ( other->client->ps.clips < maxClips ) { other->client->ps.clips++; other->client->ps.ammo = 1; } else { other->client->ps.ammo = maxAmmo; } } else { other->client->ps.ammo += self->config.amount; } }