From c4e50c8bfcf74d115155ec6f14d2ea9e9c63653c Mon Sep 17 00:00:00 2001 From: Lorenc Pekaj Date: Thu, 4 Oct 2018 05:35:04 +1000 Subject: [PATCH] add perks based off total level and make it expensive ... dm experience now varies between the weapon --- gamemodes/irresistible/cnr/dialog_ids.pwn | 8 +- gamemodes/irresistible/cnr/experience.pwn | 4 +- .../irresistible/cnr/features/_features.pwn | 1 + gamemodes/irresistible/cnr/features/perks.pwn | 151 ++++++++++++++++++ gamemodes/sf-cnr.pwn | 144 ++--------------- 5 files changed, 174 insertions(+), 134 deletions(-) create mode 100644 gamemodes/irresistible/cnr/features/perks.pwn diff --git a/gamemodes/irresistible/cnr/dialog_ids.pwn b/gamemodes/irresistible/cnr/dialog_ids.pwn index d010e48..68bbbe4 100644 --- a/gamemodes/irresistible/cnr/dialog_ids.pwn +++ b/gamemodes/irresistible/cnr/dialog_ids.pwn @@ -30,10 +30,10 @@ #define DIALOG_VEHICLE_SPAWN 1018 #define DIALOG_ARENAS 1019 #define DIALOG_BOUGHT_VEH 1020 -//#define DIALOG_PERKS 1021 -//#define DIALOG_PERKS_P 1022 -#define DIALOG_VIP 1023 -//#define DIALOG_PERKS_V 1024 +#define DIALOG_PERKS 1021 +#define DIALOG_PERKS_P 1022 +#define DIALOG_PERKS_V 1023 +#define DIALOG_VIP 1024 #define DIALOG_DONATED 1025 #define DIALOG_VEHICLE_LOCATE 1026 #define DIALOG_GANG_COLOR 1027 diff --git a/gamemodes/irresistible/cnr/experience.pwn b/gamemodes/irresistible/cnr/experience.pwn index 0840b2d..ee3911e 100644 --- a/gamemodes/irresistible/cnr/experience.pwn +++ b/gamemodes/irresistible/cnr/experience.pwn @@ -258,12 +258,12 @@ function Experience_HideIncrementTD( playerid ) return 1; } -/*stock GetPlayerTotalLevel( playerid, &level = 0 ) { +stock GetPlayerTotalLevel( playerid, &level = 0 ) { for ( new l = 0; l < sizeof ( g_levelData ); l ++ ) { level += floatround( GetPlayerLevel( playerid, E_LEVELS: l ), floatround_floor ); } return level; -}*/ +} /* ** Migrations ** */ /* diff --git a/gamemodes/irresistible/cnr/features/_features.pwn b/gamemodes/irresistible/cnr/features/_features.pwn index 6acbc52..1e326c9 100644 --- a/gamemodes/irresistible/cnr/features/_features.pwn +++ b/gamemodes/irresistible/cnr/features/_features.pwn @@ -28,6 +28,7 @@ #include "irresistible\cnr\features\gps.pwn" #include "irresistible\cnr\features\animations.pwn" #include "irresistible\cnr\features\spikestrips.pwn" +#include "irresistible\cnr\features\perks.pwn" // #include "irresistible\cnr\features\pilot.pwn" // #include "irresistible\cnr\features\fishing.pwn" // #include "irresistible\cnr\features\vote.pwn" diff --git a/gamemodes/irresistible/cnr/features/perks.pwn b/gamemodes/irresistible/cnr/features/perks.pwn new file mode 100644 index 0000000..cdc0c21 --- /dev/null +++ b/gamemodes/irresistible/cnr/features/perks.pwn @@ -0,0 +1,151 @@ +/* + * Irresistible Gaming (c) 2018 + * Developed by Lorenc Pekaj + * Module: cnr\features\perks.pwn + * Purpose: perks system + */ + +/* ** Includes ** */ +#include < YSI\y_hooks > + +/* ** Hooks ** */ +hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) +{ + if ( dialogid == DIALOG_PERKS && response ) + { + switch( listitem ) + { + case 0: ShowPlayerDialog( playerid, DIALOG_PERKS_P, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Game Perks", ""COL_WHITE"Item Name\t"COL_WHITE"Total Level Req.\t"COL_WHITE"Cost ($)\nUnlimited Ammunition\t"COL_GOLD"50\t"COL_GREEN"$9,900", "Select", "Back" ); + case 1: ShowPlayerDialog( playerid, DIALOG_PERKS_V, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Game Perks", ""COL_WHITE"Item Name\t"COL_WHITE"Total Level Req.\t"COL_WHITE"Cost ($)\nFix & Flip vehicle\t"COL_GOLD"75\t"COL_GREEN"$9,900\nRepair Vehicle\t"COL_GOLD"75\t"COL_GREEN"$7,500\nAdd NOS\t"COL_GOLD"50\t"COL_GREEN"$3,000\nFlip vehicle\t"COL_GOLD"40\t"COL_GREEN"$2,500", "Select", "Back" ); + } + } + else if ( dialogid == DIALOG_PERKS_P ) + { + if ( !response ) + return ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); + + new + total_level = GetPlayerTotalLevel( playerid ); + + switch( listitem ) + { + case 0: + { + if ( total_level < 50 ) { + return SendError( playerid, "Your total level must be at least 50 to use this (/level)." ); + } + + if ( GetPlayerCash( playerid ) < 9900 ) { + return SendError( playerid, "You do not have enough money for this item ($9,900)" ); + } + + for ( new i = 0; i < MAX_WEAPONS; i++ ) + { + if ( IsWeaponInAnySlot( playerid, i ) && i != 0 && !( 16 <= i <= 18 ) && i != 35 && i != 47 && i != WEAPON_BOMB ) + { + GivePlayerWeapon( playerid, i, 15000 ); + } + } + + GivePlayerCash( playerid, -9900 ); + SendServerMessage( playerid, "You have bought unlimited ammunition for $9,900." ); + SetPlayerArmedWeapon( playerid, 0 ); + Beep( playerid ); + } + } + } + else if ( dialogid == DIALOG_PERKS_V ) + { + if ( !response ) + return ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); + + if ( !IsPlayerInAnyVehicle( playerid ) || GetPlayerState( playerid ) != PLAYER_STATE_DRIVER ) + return SendError( playerid, "You are not in any vehicle as a driver." ); + + new + total_level = GetPlayerTotalLevel( playerid ); + + + switch( listitem ) + { + case 0: + { + if ( total_level < 75 ) { + return SendError( playerid, "Your total level must be at least 75 to use this (/level)." ); + } + + if ( GetPlayerCash( playerid ) < 9900 ) { + return SendError( playerid, "You do not have enough money for this item ($9,900)" ); + } + + new Float: vZ, vehicleid = GetPlayerVehicleID( playerid ); + GetVehicleZAngle( vehicleid, vZ ), SetVehicleZAngle( vehicleid, vZ ); + p_DamageSpamCount{ playerid } = 0; + RepairVehicle( vehicleid ); + GivePlayerCash( playerid, -9900 ); + SendServerMessage( playerid, "You have fixed and flipped your vehicle for $9,900." ); + PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); + } + case 1: + { + if ( total_level < 75 ) { + return SendError( playerid, "Your total level must be at least 75 to use this (/level)." ); + } + + if ( GetPlayerCash( playerid ) < 7500 ) { + return SendError( playerid, "You do not have enough money for this item ($7,500)" ); + } + + new vehicleid = GetPlayerVehicleID( playerid ); + PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); + p_DamageSpamCount{ playerid } = 0; + RepairVehicle( vehicleid ); + GivePlayerCash( playerid, -7500 ); + SendServerMessage( playerid, "You have repaired your car for $7,500." ); + } + case 2: + { + if ( total_level < 50 ) { + return SendError( playerid, "Your total level must be at least 50 to use this (/level)." ); + } + + if ( GetPlayerCash( playerid ) < 3000 ) { + return SendError( playerid, "You do not have enough money for this item ($3,000)" ); + } + + AddVehicleComponent( GetPlayerVehicleID( playerid ), 1010 ); + GivePlayerCash( playerid, -3000 ); + SendServerMessage( playerid, "You have installed nitro on your car for $3,000." ); + PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); + } + case 3: + { + if ( total_level < 40 ) { + return SendError( playerid, "Your total level must be at least 40 to use this (/level)." ); + } + + if ( GetPlayerCash( playerid ) < 2500 ) { + return SendError( playerid, "You do not have enough money for this item ($2,500)" ); + } + + new Float: vZ, vehicleid = GetPlayerVehicleID( playerid ); + GetVehicleZAngle( vehicleid, vZ ), SetVehicleZAngle( vehicleid, vZ ); + GivePlayerCash( playerid, -2500 ); + SendServerMessage( playerid, "You have flipped your vehicle for $2,500." ); + PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); + } + } + } + return 1; +} + +/* ** Commands ** */ +CMD:perks( playerid, params[ ] ) +{ + if ( IsPlayerInEvent( playerid ) ) { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + return ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); +} + +/* ** Functions ** */ diff --git a/gamemodes/sf-cnr.pwn b/gamemodes/sf-cnr.pwn index ae5e435..73aad09 100644 --- a/gamemodes/sf-cnr.pwn +++ b/gamemodes/sf-cnr.pwn @@ -16,7 +16,7 @@ #pragma option -d3 #pragma dynamic 7200000 -//#define DEBUG_MODE +#define DEBUG_MODE #if defined DEBUG_MODE #pragma option -d3 @@ -4801,10 +4801,21 @@ public OnPlayerDeath( playerid, killerid, reason ) } } - if ( p_Class[ killerid ] != CLASS_POLICE ) { + if ( p_Class[ killerid ] != CLASS_POLICE ) + { GivePlayerWantedLevel( killerid, 12 ); GivePlayerScore( killerid, 1, .multiplier = 0.2 ); - GivePlayerExperience( killerid, E_DEATHMATCH ); + + new + Float: default_experience = 1.0; + + switch ( reason ) { + case 23: default_experience = 1.5; + case 25: default_experience = 1.25; + case 26: default_experience = 0.8; + case 34: default_experience = 1.75; + } + GivePlayerExperience( killerid, E_DEATHMATCH, default_experience ); } } else if ( IsPlayerNPC( killerid ) ) SendDeathMessage( killerid, playerid, reason ); @@ -7421,7 +7432,7 @@ CMD:mech( playerid, params[ ] ) p_DamageSpamCount{ playerid } = 0; RepairVehicle( iVehicle ); SendServerMessage( playerid, "You have repaired this vehicle." ); - p_AntiMechFixSpam[ playerid ] = g_iTime + 5; + p_AntiMechFixSpam[ playerid ] = g_iTime + 10; GivePlayerCash( playerid, -cost ); } else if ( strmatch( params, "nos" ) ) @@ -7482,7 +7493,7 @@ CMD:mech( playerid, params[ ] ) RepairVehicle( iVehicle ); GetVehicleZAngle( iVehicle, vZ ), SetVehicleZAngle( iVehicle, vZ ); SendServerMessage( playerid, "You have flipped and fixed this vehicle." ); - p_AntiMechFixSpam[ playerid ] = g_iTime + 5; + p_AntiMechFixSpam[ playerid ] = g_iTime + 10; p_AntiMechFlipSpam[ playerid ] = g_iTime + 5; GivePlayerCash( playerid, -cost ); } @@ -7857,12 +7868,6 @@ thread OnPlayerWeeklyTime( playerid, irc, player[ ] ) return 1; } -CMD:xpmarket( playerid, params[ ] ) return SendError( playerid, "You can no longer sell your experience anymore." ); -/*{ - ShowPlayerDialog( playerid, DIALOG_XPMARKET, DIALOG_STYLE_INPUT, "{FFFFFF}XP Market", sprintf( ""COL_WHITE"You have %s legacy XP. Current exchange rate is $10 per XP.\n\nHow many would you like to exchange?", number_format( p_XP[ playerid ] ) ), "Select", "Cancel"); - return 1; -}*/ - CMD:emp( playerid, params[ ] ) { new @@ -8178,13 +8183,6 @@ CMD:discordpm( playerid, params[ ] ) } #endif -CMD:perks( playerid, params[ ] ) -{ - //if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); - //ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); - return SendServerMessage( playerid, "/perks is unavailable, become a dirty mechanic instead." ); -} - CMD:viewguns( playerid, params[ ] ) { /* ** COOL DOWN ** */ @@ -13542,103 +13540,6 @@ public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) ); return 1; } - /*if ( ( dialogid == DIALOG_PERKS ) && response ) - { - switch( listitem ) - { - case 0: ShowPlayerDialog( playerid, DIALOG_PERKS_P, DIALOG_STYLE_TABLIST, "{FFFFFF}Game Perks", "Unlimited Ammunition\t"COL_GOLD"100 XP", "Select", "Back" ); - case 1: ShowPlayerDialog( playerid, DIALOG_PERKS_V, DIALOG_STYLE_TABLIST, "{FFFFFF}Game Perks", "Fix & Flip vehicle\t"COL_GOLD"200 XP\nFlip vehicle\t"COL_GOLD"50 XP\n"COL_WHITE"Add NOS\t"COL_GOLD"80 XP\n"COL_WHITE"Repair Vehicle\t"COL_GOLD"120 XP", "Select", "Back" ); - } - } - if ( ( dialogid == DIALOG_PERKS_P ) ) - { - if ( !response ) - return ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); - - switch( listitem ) - { - case 0: - { - if ( p_XP[ playerid ] >= 100 ) - { - GivePlayerXP_Legacy( playerid, -100 ); - for( new i; i < MAX_WEAPONS; i++ ) - { - if ( IsWeaponInAnySlot( playerid, i ) && i != 0 && !( 16 <= i <= 18 ) && i != 35 && i != 47 && i != WEAPON_BOMB ) - { - GivePlayerWeapon( playerid, i, 15000 ); - } - } - SendServerMessage( playerid, "You have bought unlimited ammunition for 100 XP." ); - SetPlayerArmedWeapon( playerid, 0 ); - Beep( playerid ); - } - else return SendError( playerid, "You don't have enough XP for this." ); - } - } - } - if ( ( dialogid == DIALOG_PERKS_V ) ) - { - if ( !response ) - return ShowPlayerDialog( playerid, DIALOG_PERKS, DIALOG_STYLE_LIST, "{FFFFFF}Game Perks", "Player Perks\nVehicle Perks", "Select", "Cancel" ); - - if ( !IsPlayerInAnyVehicle( playerid ) || GetPlayerState( playerid ) != PLAYER_STATE_DRIVER ) - return SendError( playerid, "You are not in any vehicle as a driver." ); - - switch( listitem ) - { - case 0: - { - if ( p_XP[ playerid ] >= 200 ) - { - new Float: vZ, vehicleid = GetPlayerVehicleID( playerid ); - GetVehicleZAngle( vehicleid, vZ ), SetVehicleZAngle( vehicleid, vZ ); - p_DamageSpamCount{ playerid } = 0; - RepairVehicle( vehicleid ); - GivePlayerXP_Legacy( playerid, -200 ); - SendServerMessage( playerid, "You have fixed and flipped your vehicle for 200 XP." ); - PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); - } - else return SendError( playerid, "You don't have enough XP for this." ); - } - case 1: - { - if ( p_XP[ playerid ] >= 50 ) - { - new Float: vZ, vehicleid = GetPlayerVehicleID( playerid ); - GetVehicleZAngle( vehicleid, vZ ), SetVehicleZAngle( vehicleid, vZ ); - GivePlayerXP_Legacy( playerid, -50 ); - SendServerMessage( playerid, "You have flipped your vehicle for 50 XP." ); - PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); - } - else return SendError( playerid, "You don't have enough XP for this." ); - } - case 2: - { - if ( p_XP[ playerid ] >= 80 ) - { - AddVehicleComponent( GetPlayerVehicleID( playerid ), 1010 ); - GivePlayerXP_Legacy( playerid, -80 ); - SendServerMessage( playerid, "You have installed nitro on your car for 80 XP." ); - PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); - } - else return SendError( playerid, "You don't have enough XP for this." ); - } - case 3: - { - if ( p_XP[ playerid ] >= 120 ) - { - new vehicleid = GetPlayerVehicleID( playerid ); - PlayerPlaySound( playerid, 1133, 0.0, 0.0, 5.0 ); - p_DamageSpamCount{ playerid } = 0; - RepairVehicle( vehicleid ); - GivePlayerXP_Legacy( playerid, -120 ); - SendServerMessage( playerid, "You have repaired your car for 120 XP." ); - } - else return SendError( playerid, "You don't have enough XP for this." ); - } - } - }*/ if ( dialogid == DIALOG_CASINO_REWARDS && response ) { if ( IsPlayerJailed( playerid ) ) return SendError( playerid, "You cannot use this while you're in jail." ); @@ -13829,19 +13730,6 @@ public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) } else ShowPlayerShopMenu( playerid ); } - /*if ( ( dialogid == DIALOG_XPMARKET ) && response ) - { - if ( !strlen( inputtext ) || !IsNumeric( inputtext ) ) - return SendError( playerid, "The input you have entered is invalid, must be a numeric with over 0 characters." ), cmd_xpmarket( playerid, "" ), 1; - - if ( strval( inputtext ) < 0 || strval( inputtext ) > p_XP[ playerid ] || strval( inputtext ) > 99999999 ) - return SendError( playerid, "Invalid amount, must be from 0 to the amount of XP you have." ), cmd_xpmarket( playerid, "" ), 1; - - GivePlayerXP_Legacy( playerid, -( strval( inputtext ) ) ); - GivePlayerCash( playerid, strval( inputtext ) * EXCHANGE_XPCASH ); - printf( "[xpmarket] %s -> %s", ReturnPlayerName( playerid ), cash_format( strval( inputtext ) * EXCHANGE_XPCASH ) ); // 8hska7082bmahu - SendServerMessage( playerid, "You have successfully exchanged %d XP for %s dollars.", strval( inputtext ), cash_format( strval( inputtext ) * EXCHANGE_XPCASH ) ); - }*/ if ( ( dialogid == DIALOG_VIP_LOCKER ) && response ) { if ( IsPlayerJailed( playerid ) ) return SendError( playerid, "You cannot use this while you're in jail." );