diff --git a/gamemodes/irresistible/cnr/features/battleroyale/battleroyale.pwn b/gamemodes/irresistible/cnr/features/battleroyale/battleroyale.pwn index 4dff34e..efff3ce 100644 --- a/gamemodes/irresistible/cnr/features/battleroyale/battleroyale.pwn +++ b/gamemodes/irresistible/cnr/features/battleroyale/battleroyale.pwn @@ -5,16 +5,6 @@ * Purpose: Battle Royale minigame implementation for SA-MP */ -/* - TODO: - [X] Make pickups work - [ ] Messages fix - [X] Prize pool deposit - [X] Invisible walls - [ ] Make areas - [X] Hide player name tags / checkpoints -*/ - /* ** Includes ** */ #include < YSI\y_hooks > #include < YSI\y_iterate > @@ -115,7 +105,7 @@ static const { "Tierra Robada", -2989.5, 2074.5, -1144.5, 2990.5, 150, 10 }, { "Red County", -276.0, -1024.0, 2997.0, 694.0, 150, 20 }, { "Bone County", -1848.0, 565.0, 1061.0, 2956.0, BR_MAX_PICKUPS, BR_MAX_VEHICLES }, - { "Flint County", -2988.0, -2988.5, 170, -634.5, BR_MAX_PICKUPS, BR_MAX_VEHICLES } + { "Flint County", -2988.0, -2988.5, 170.0, -634.5, BR_MAX_PICKUPS, BR_MAX_VEHICLES } } ; @@ -296,6 +286,8 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) } GivePlayerCash( playerid, -10000 ); + br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] += 10000; + BattleRoyale_JoinLobby( playerid, lobbyid ); BattleRoyale_SendMessageAll( "%s(%d) has created a Battle Royale lobby!", ReturnPlayerName( playerid ), playerid ); @@ -372,6 +364,14 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) } return BattleRoyale_EditLobby( playerid, lobbyid ); } + else if ( listitem == 9 ) // start lobby option + { + if ( Iter_Count( battleroyaleplayers[ lobbyid ] ) < 2 ) { + return SendError( playerid, "You need at least 2 players in your lobby to start this match." ); + } + BattleRoyale_StartGame( lobbyid ); + return BattleRoyale_EditLobby( playerid, lobbyid ); + } else { SetPVarInt( playerid, "editing_field", listitem ); @@ -540,11 +540,16 @@ CMD:battleroyale( playerid, params[ ] ) } else if ( strmatch( params, "start" ) ) { + if ( Iter_Count( battleroyaleplayers[ lobbyid ] ) < 2 ) { + return SendError( playerid, "You need at least 2 players in your lobby to start this match." ); + } return BattleRoyale_StartGame( lobbyid ); } else if ( strmatch ( params, "leave" ) ) { - return BattleRoyale_RemovePlayer( playerid, true ); + BattleRoyale_SendMessage( lobbyid, "%s(%d) has disconnected from the match!", ReturnPlayerName( playerid ), playerid ); + BattleRoyale_RemovePlayer( playerid, true ); + return 1; } else if ( ! strcmp( params, "donate", false, 6 ) ) { @@ -578,7 +583,8 @@ static stock BattleRoyale_CreateLobby( playerid ) br_lobbyData[ lobbyid ] [ E_LIMIT ] = 6; br_lobbyData[ lobbyid ] [ E_AREA_ID ] = 0; - br_lobbyData[ lobbyid ] [ E_ENTRY_FEE ] = 1000; + br_lobbyData[ lobbyid ] [ E_ENTRY_FEE ] = 10000; + br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] = 0; br_lobbyData[ lobbyid ] [ E_HOST ] = playerid; br_lobbyData[ lobbyid ] [ E_STATUS ] = E_STATUS_WAITING; @@ -611,7 +617,8 @@ static stock BattleRoyale_EditLobby( playerid, lobbyid ) "Health\t"COL_GREY"%0.2f%%\n" \ "Armour\t"COL_GREY"%0.2f%%\n" \ "Walking Weapons Only\t%s\n" \ - "CAC Only\t%s\n", + "CAC Only\t%s\n" \ + ""COL_PURPLE"Start Match\t"COL_PURPLE">>>", br_lobbyData[ lobbyid ] [ E_NAME ], br_lobbyData[ lobbyid ] [ E_PASSWORD ], br_lobbyData[ lobbyid ] [ E_LIMIT ], @@ -740,9 +747,13 @@ hook OnPlayerStreamIn( playerid, forplayerid ) static stock BattleRoyale_EndGame( lobbyid ) { - new prize = floatround( float( br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] ) / float( Iter_Count( battleroyaleplayers[ lobbyid ] ) ), floatround_ceil ); + new fees_incurred = floatround( float( br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] ) * 0.2 ); - new Float: distribution = floatround( float( prize ) / float( br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] ) * 100.0 ); + new prize = floatround( float( br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] - fees_incurred ) / float( Iter_Count( battleroyaleplayers[ lobbyid ] ) ), floatround_ceil ); + + new Float: distribution = floatround( float( prize ) / float( br_lobbyData[ lobbyid ] [ E_PRIZE_POOL ] - fees_incurred ) * 100.0 ); + + StockMarket_UpdateEarnings( E_STOCK_BATTLE_ROYAL_CENTER, fees_incurred, 0.5 ); foreach ( new playerid : battleroyaleplayers[ lobbyid ] ) { diff --git a/gamemodes/irresistible/cnr/features/stocks/stocks.pwn b/gamemodes/irresistible/cnr/features/stocks/stocks.pwn index d26ed96..b789dd7 100644 --- a/gamemodes/irresistible/cnr/features/stocks/stocks.pwn +++ b/gamemodes/irresistible/cnr/features/stocks/stocks.pwn @@ -63,7 +63,8 @@ enum E_STOCK_PAWN_STORE, E_STOCK_CASINO, E_STOCK_GOVERNMENT, - E_STOCK_AVIATION + E_STOCK_AVIATION, + E_STOCK_BATTLE_ROYAL_CENTER }; static stock @@ -93,6 +94,7 @@ hook OnScriptInit( ) CreateStockMarket( E_STOCK_CASINO, "Casino", "CAS", 100000.0, 990.0, 7500.0, 100000.0, 150.0, "Money lost by players gambling" ); CreateStockMarket( E_STOCK_GOVERNMENT, "Government", "GOV", 100000.0, 750.0, 7500.0, 100000.0, 150.0, "Fireman and LEO activities" ); CreateStockMarket( E_STOCK_AVIATION, "Elitas Travel", "ET", 100000.0, 50.0, 500.0, 100000.0, 20.0, "Completed pilot missions and intercity travel" ); + CreateStockMarket( E_STOCK_BATTLE_ROYAL_CENTER, "Battle Royale Center", "BRC", 100000.0, 50.0, 500.0, 100000.0, 20.0, "Battle Royale minigame fees" ); // force inactive share holders to sell their shares on startup mysql_tquery( dbHandle, sprintf( "SELECT so.* FROM `STOCK_OWNERS` so JOIN `USERS` u ON so.`USER_ID`=u.`ID` WHERE UNIX_TIMESTAMP()-u.`LASTLOGGED` > 604800 AND so.`USER_ID` != %d", STOCK_MM_USER_ID ), "StockMarket_ForceShareSale", "" );