From 1b5c54dc2d190b99a6aa87e01c10b8a76261e7ab Mon Sep 17 00:00:00 2001 From: Lorenc Pekaj Date: Sat, 12 Jan 2019 22:27:45 +1100 Subject: [PATCH] /updatedonategoal for lead maintainer to variably adjust the donation requirement per month --- .../cnr/features/vip/redeem_code.pwn | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn b/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn index 1bfad1c..a29d3f9 100644 --- a/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn +++ b/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn @@ -26,9 +26,6 @@ enum E_DONATION_DATA E_DATE }; -static const - Float: DONATION_GOAL_AMOUNT = 250.0; // $250.00 USD/month goal - static stock g_redeemVipWait = 0; static stock g_TopDonorWall = INVALID_OBJECT_ID; stock Text: g_TopDonorTD = Text: INVALID_TEXT_DRAW; @@ -39,6 +36,9 @@ forward OnDonationRedemptionResponse( index, response_code, data[ ] ); /* ** Hooks ** */ hook OnScriptInit( ) { + // Server Variables + AddServerVariable( "donation_goal_amount", "250.0", GLOBAL_VARTYPE_FLOAT ); + // Wall of Donors SetDynamicObjectMaterialText( CreateDynamicObject( 3074, -1574.3559, 885.1296, 28.4690, 0.0000, 0.0000, -0.0156 ), 0, "Thx Monthly Donors", 130, "Times New Roman", 64, 1, -65536, 0, 1 ); SetDynamicObjectMaterialText( ( g_TopDonorWall = CreateDynamicObject( 3074, -1574.3559, 885.1296, 14.0153, 0.0000, 0.0000, -0.0156 ) ), 0, "Nobody donated :(", 130, "Arial", 48, 0, -65536, 0, 1 ); @@ -205,7 +205,7 @@ thread OnGrabLatestDonor( hidden ) new Float: last_donation = cache_get_field_content_float( 0, "LAST_AMOUNT", dbHandle ); new Float: total_donations = cache_get_field_content_float( 0, "TOTAL_DONATIONS", dbHandle ); - new Float: funding_goal_percent = total_donations / DONATION_GOAL_AMOUNT * 100.0; + new Float: funding_goal_percent = total_donations / GetServerVariableFloat( "donation_goal_amount" ) * 100.0; // Prevents total revenue for the month being disclosed mathematically if ( funding_goal_percent >= 100.0 ) { @@ -289,12 +289,32 @@ CMD:donated( playerid, params[ ] ) } /* ** RCON Commands ** */ +CMD:updatedonategoal( playerid, params[ ] ) +{ + new + Float: donation_goal; + + if ( ! IsPlayerAdmin( playerid ) && ! IsPlayerLeadMaintainer( playerid ) ) return 0; + else if ( sscanf( params, "f", donation_goal ) ) return SendUsage( playerid, "/updatedonationreq [DONATION_GOAL_AMOUNT]" ); + else if ( ! ( 1.0 <= donation_goal < 10000.0 ) ) return SendError( playerid, "Donation goal amount must be between $1 and $10,000." ); + else + { + new + Float: previous_goal = GetServerVariableFloat( "donation_goal_amount" ); + + UpdateGlobalDonated( .hidden = 1 ); + SendServerMessage( playerid, "Updating donation goal from $%s to $%s!", number_format( previous_goal, .decimals = 2 ), number_format( donation_goal, .decimals = 2 ) ); + UpdateServerVariableFloat( "donation_goal_amount", donation_goal ); + } + return 1; +} + CMD:updatedonortd( playerid, params[ ] ) { new targetid, Float: amount, reset; - if ( ! IsPlayerAdmin( playerid ) ) return 0; + if ( ! IsPlayerAdmin( playerid ) && ! IsPlayerLeadMaintainer( playerid ) ) return 0; else if ( sscanf( params, "D(0)D(65535)F(0.0)", reset, targetid, amount ) ) return SendUsage( playerid, "/updatedonortd [RESET] [PLAYER_ID] [AMOUNT]" ); else {