global function RiffInstagib_Init #if SERVER struct { table playerWeapons array instagibWeapons } file #endif void function RiffInstagib_Init() { AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_RIFF", "riff_instagib", [ "#SETTING_DISABLED", "#SETTING_ENABLED" ], "0" ) #if SERVER if ( GetCurrentPlaylistVarInt( "riff_instagib", 0 ) == 0 ) return SetLoadoutGracePeriodEnabled( false ) SetWeaponDropsEnabled( false ) file.instagibWeapons = [ "mp_weapon_sniper", "mp_weapon_wingman", "mp_weapon_defender", "mp_weapon_arena3", "mp_weapon_wingman_n", "mp_weapon_doubletake", ] file.instagibWeapons.randomize() AddCallback_OnPlayerRespawned( InstagibSetWeapons ) AddCallback_OnPlayerKilled( InstagibCycleWeaponsForKill ) AddCallback_OnClientDisconnected( InstagibCleanupClient ) #endif } #if SERVER void function InstagibSetWeapons( entity player ) { if ( !( player in file.playerWeapons ) ) file.playerWeapons[ player ] <- 0 player.SetMaxHealth( 1 ) InstagibUpdateWeapons( player ) } void function InstagibUpdateWeapons( entity player ) { foreach( entity weapon in player.GetMainWeapons() ) player.TakeWeaponNow( weapon.GetWeaponClassName() ) player.TakeWeaponNow( player.GetOffhandWeapon( OFFHAND_RIGHT ).GetWeaponClassName() ) if ( !HasOffhandWeapon( player, "mp_weapon_grenade_sonar" ) ) player.GiveOffhandWeapon( "mp_weapon_grenade_sonar", OFFHAND_RIGHT ) player.GiveWeapon( file.instagibWeapons[ file.playerWeapons[ player ] ] ) } void function InstagibCycleWeaponsForKill( entity victim, entity attacker, var damageInfo ) { if ( !victim.IsPlayer() || !attacker.IsPlayer() || victim == attacker ) return file.playerWeapons[ attacker ] = ( file.playerWeapons[ attacker ] + 1 ) % file.instagibWeapons.len() InstagibUpdateWeapons( attacker ) } void function InstagibCleanupClient( entity player ) { if ( player in file.playerWeapons ) delete file.playerWeapons[ player ] } #endif