From 39ca88ec1ff7de6d5224e24cc1feed5269e83af4 Mon Sep 17 00:00:00 2001 From: Lorenc Pekaj Date: Mon, 17 Sep 2018 12:50:25 +1000 Subject: [PATCH] pool fixes --- gamemodes/irresistible/cnr/features/pool.pwn | 40 ++++++++++++------- .../cnr/features/visage/apartments.pwn | 4 +- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/gamemodes/irresistible/cnr/features/pool.pwn b/gamemodes/irresistible/cnr/features/pool.pwn index 436853e..afbd459 100644 --- a/gamemodes/irresistible/cnr/features/pool.pwn +++ b/gamemodes/irresistible/cnr/features/pool.pwn @@ -150,8 +150,8 @@ hook OnScriptInit( ) // custom pool tables CreatePoolTable( -1019.264, 1045.7419, 1.763000, 0.000000, 0, 0, E_SKIN_WOOD_PURPLE ); // panther - CreatePoolTable( 1999.0837, 1888.4924, 84.22465, 0.000000, 11, 0, E_SKIN_GOLD_GREEN ); // banging7grams - CreatePoolTable( 2005.2181, 1891.0632, 84.22465, 90.00000, 17, 0, E_SKIN_WOOD_GREEN ); // nibble + CreatePoolTable( 1999.0837, 1888.4924, 84.22465, 0.000000, VISAGE_APARTMENT_INT, VISAGE_APARTMENT_WORLD[ 1 ], E_SKIN_GOLD_GREEN ); // banging7grams + CreatePoolTable( 2005.2181, 1891.0632, 84.22465, 90.00000, VISAGE_APARTMENT_INT, VISAGE_APARTMENT_WORLD[ 7 ], E_SKIN_WOOD_GREEN ); // nibble printf( "[POOL TABLES]: %d pool tables have been successfully loaded.", Iter_Count( pooltables ) ); return 1; @@ -321,7 +321,7 @@ hook OnPlayerKeyStateChange( playerid, newkeys, oldkeys ) new Float: distance_to_ball = GetDistanceFromPointToPoint( X, Y, Xa, Ya ); - if ( distance_to_ball < 1.8 && Z < 999.5 ) + if ( distance_to_ball < 2.0 && Z < 999.5 ) { new Float: poolrot = atan2( Ya - Y, Xa - X ) - 90.0; @@ -568,8 +568,8 @@ stock CreatePoolTable( Float: X, Float: Y, Float: Z, Float: A = 0.0, interior = g_poolTableData[ poolid ] [ E_INTERIOR ] = interior; g_poolTableData[ poolid ] [ E_WORLD ] = world; - g_poolTableData[ poolid ] [ E_TABLE ] = CreateDynamicObject( 2964, X, Y, Z - 1.0, 0.0, 0.0, A, .interiorid = interior, .worldid = world ); - g_poolTableData[ poolid ] [ E_LABEL ] = CreateDynamic3DTextLabel( DEFAULT_POOL_STRING, COLOR_GREY, X, Y, Z, 10.0, .interiorid = interior, .worldid = world ); + g_poolTableData[ poolid ] [ E_TABLE ] = CreateDynamicObject( 2964, X, Y, Z - 1.0, 0.0, 0.0, A, .interiorid = interior, .worldid = world, .priority = 9999 ); + g_poolTableData[ poolid ] [ E_LABEL ] = CreateDynamic3DTextLabel( DEFAULT_POOL_STRING, COLOR_GREY, X, Y, Z, 10.0, .interiorid = interior, .worldid = world, .priority = 9999 ); Pool_RotateXY( -0.964, -0.51, A, x_vertex[ 0 ], y_vertex[ 0 ] ); Pool_RotateXY( -0.964, 0.533, A, x_vertex[ 1 ], y_vertex[ 1 ] ); @@ -584,8 +584,8 @@ stock CreatePoolTable( Float: X, Float: Y, Float: Z, Float: A = 0.0, interior = // create boundary for replacing the cueball new Float: vertices[ 4 ]; - Pool_RotateXY( 0.85, 0.4, g_poolTableData[ poolid ] [ E_ANGLE ], vertices[ 0 ], vertices[ 1 ] ); - Pool_RotateXY( -0.85, -0.4, g_poolTableData[ poolid ] [ E_ANGLE ], vertices[ 2 ], vertices[ 3 ] ); + Pool_RotateXY( 0.94, 0.48, g_poolTableData[ poolid ] [ E_ANGLE ], vertices[ 0 ], vertices[ 1 ] ); + Pool_RotateXY( -0.94, -0.48, g_poolTableData[ poolid ] [ E_ANGLE ], vertices[ 2 ], vertices[ 3 ] ); vertices[ 0 ] += g_poolTableData[ poolid ] [ E_X ], vertices[ 2 ] += g_poolTableData[ poolid ] [ E_X ]; vertices[ 1 ] += g_poolTableData[ poolid ] [ E_Y ], vertices[ 3 ] += g_poolTableData[ poolid ] [ E_Y ]; @@ -765,7 +765,7 @@ stock Pool_IsBallInHole( poolid, objectid ) Pool_RotateXY( g_poolPotOffsetData[ i ] [ 0 ], g_poolPotOffsetData[ i ] [ 1 ], g_poolTableData[ poolid ] [ E_ANGLE ], hole_x, hole_y ); // check if it is at the pocket - if ( IsBallAtPos( objectid, g_poolTableData[ poolid ] [ E_X ] + hole_x , g_poolTableData[ poolid ] [ E_Y ] + hole_y, g_poolTableData[ poolid ] [ E_Z ], POCKET_RADIUS ) ) { + if ( Pool_IsObjectAtPos( objectid, g_poolTableData[ poolid ] [ E_X ] + hole_x , g_poolTableData[ poolid ] [ E_Y ] + hole_y, g_poolTableData[ poolid ] [ E_Z ], POCKET_RADIUS ) ) { return i; } } @@ -850,7 +850,7 @@ stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range) { return (a1 < range) && (a1 > -range); } -stock IsBallAtPos( objectid, Float: x, Float: y, Float: z, Float: radius ) +stock Pool_IsObjectAtPos( objectid, Float: x, Float: y, Float: z, Float: radius ) { new Float: object_x, Float: object_y, Float: object_z; @@ -915,6 +915,21 @@ public OnPoolUpdate( poolid ) } } + // check if ball is close to hole + new + Float: hole_x, Float: hole_y; + + for ( new i = 0; i < sizeof( g_poolPotOffsetData ); i ++ ) + { + // rotate offsets according to table + Pool_RotateXY( g_poolPotOffsetData[ i ] [ 0 ], g_poolPotOffsetData[ i ] [ 1 ], g_poolTableData[ poolid ] [ E_ANGLE ], hole_x, hole_y ); + + // check if it is at the pocket + if ( Pool_IsObjectAtPos( g_poolBallData[ poolid ] [ E_BALL_OBJECT ] [ 0 ], g_poolTableData[ poolid ] [ E_X ] + hole_x , g_poolTableData[ poolid ] [ E_Y ] + hole_y, g_poolTableData[ poolid ] [ E_Z ], POCKET_RADIUS ) ) { + return GameTextForPlayer( playerid, "~n~~n~~n~~r~~h~Ball too close to hole!", 500, 3 ); + } + } + // reset state SetCameraBehindPlayer( playerid ); TogglePlayerControllable( playerid, true ); @@ -1175,10 +1190,7 @@ public PHY_OnObjectUpdate( objectid ) // mark final target hole if ( ( p_PoolScore[ first_player ] == 7 && p_PoolHoleGuide[ first_player ] == -1 ) || ( p_PoolScore[ second_player ] == 7 && p_PoolHoleGuide[ second_player ] == -1 ) ) { - new - player_being_marked = p_PoolScore[ first_player ] == 7 ? first_player : second_player; - - if ( p_PoolHoleGuide[ player_being_marked ] == -1 ) + foreach ( new player_being_marked : poolplayers< poolid > ) if ( p_PoolScore[ player_being_marked ] == 7 && p_PoolHoleGuide[ player_being_marked ] == -1 ) { new opposite_holeid = g_poolHoleOpposite[ holeid ]; @@ -1220,7 +1232,7 @@ stock Pool_OnPlayerWin( poolid, winning_player ) return 0; new - win_amount = floatround( float( g_poolTableData[ poolid ] [ E_WAGER ] ) * ( 1 - POOL_FEE_RATE ) ); + win_amount = floatround( float( g_poolTableData[ poolid ] [ E_WAGER ] ) * ( 1 - POOL_FEE_RATE ) * 2.0 ); // restore camera RestoreCamera( winning_player ); diff --git a/gamemodes/irresistible/cnr/features/visage/apartments.pwn b/gamemodes/irresistible/cnr/features/visage/apartments.pwn index b5cb0dd..5b0afea 100644 --- a/gamemodes/irresistible/cnr/features/visage/apartments.pwn +++ b/gamemodes/irresistible/cnr/features/visage/apartments.pwn @@ -25,8 +25,8 @@ static const Float: VISAGE_APARTMENT_ENTRANCE[ 3 ] = { 2670.9922, 1637.9547, 1508.3590 }; static const Float: VISAGE_APARTMENT_EXIT[ 3 ] = { 1983.7786, 1909.4755, 84.3009 }; -static const VISAGE_APARTMENT_INT = 0; -static const VISAGE_APARTMENT_WORLD[ 13 ] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; +stock const VISAGE_APARTMENT_INT = 0; +stock const VISAGE_APARTMENT_WORLD[ 13 ] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; /* ** Variables ** */ enum E_APARTMENT_DATA