Last active
August 29, 2015 14:01
-
-
Save Seregamil/f14b3bc24fbbee7490f5 to your computer and use it in GitHub Desktop.
DriftSystem
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //by Seregamil | |
| #include a_samp | |
| #define void%0(%1) forward%0(%1); public%0(%1) | |
| #define MINIMAL_ANGLE (12.5) | |
| #define MAXIMAL_ANGLE (90.0) | |
| #define MINIMAL_SPEED (15.0) | |
| native IsValidVehicle(vehicleid); | |
| main(){} | |
| new d_timer[ MAX_PLAYERS ], driftPoints[ MAX_PLAYERS ], driftWaiting[ MAX_PLAYERS ]; | |
| new Float: saved_angle[ MAX_PLAYERS ], Float: saved_health[ MAX_PLAYERS ]; | |
| public OnGameModeInit(){ | |
| return true; | |
| } | |
| public OnPlayerConnect(playerid){ | |
| return true; | |
| } | |
| public OnPlayerDisconnect(playerid, reason){ | |
| KillTimer( d_timer[ playerid ] ); | |
| return true; | |
| } | |
| /*public OnPlayerCommandText(playerid, cmdtext[]){ | |
| new Float: x, Float: y, Float: z, Float: a; | |
| GetPlayerPos( playerid, x, y, z ); | |
| GetPlayerFacingAngle( playerid, a ); | |
| PutPlayerInVehicle( playerid, CreateVehicle( 411, x, y, z, a, 1, 1, 999999 ), 0 ); | |
| return SendClientMessage(playerid, -1, "Command is not exist"); | |
| }*/ | |
| public OnPlayerStateChange(playerid, newstate, oldstate){ | |
| switch( newstate ){ | |
| case PLAYER_STATE_DRIVER: { | |
| new vehicleid = GetPlayerVehicleID( playerid ); | |
| if( isDriftingVehicle( GetVehicleModel( vehicleid ) ) ){ | |
| GetVehicleZAngle( vehicleid, saved_angle[ playerid ] ); | |
| GetVehicleHealth( vehicleid, saved_health[ playerid ] ); | |
| d_timer[ playerid ] = SetTimerEx( "driftUpdate", 200, true, "ii", playerid, vehicleid ); | |
| } | |
| } | |
| default: | |
| KillTimer( d_timer[ playerid ] ); | |
| } | |
| return true; | |
| } | |
| void driftUpdate( playerid, vehicleid ){ | |
| if( ( !IsPlayerConnected( playerid ) ) || ( !IsValidVehicle( vehicleid ) ) || ( !IsPlayerInVehicle( playerid, vehicleid ) ) ){ | |
| saved_angle[ playerid ] = 0.0; | |
| KillTimer( d_timer[ playerid ] ); | |
| return ; | |
| } | |
| new Float: velocity_x, Float: velocity_y, Float: velocity_z; | |
| GetVehicleVelocity( vehicleid, velocity_x, velocity_y, velocity_z ); | |
| new Float: vehicle_speed = ( ( velocity_x * velocity_x + velocity_y * velocity_y + velocity_z * velocity_z ) * 195.0 ); | |
| if( vehicle_speed < MINIMAL_SPEED ) { | |
| GetVehicleZAngle( vehicleid, saved_angle[ playerid ] ); | |
| GetVehicleHealth( vehicleid, saved_health[ playerid ] ); | |
| return ; | |
| } | |
| new Float: vehicle_angle; | |
| GetVehicleZAngle( vehicleid, vehicle_angle ); | |
| new Float: vehicle_health; | |
| GetVehicleHealth( vehicleid, vehicle_health ); | |
| if( vehicle_health < saved_health[ playerid ] ) { | |
| SendClientMessage(playerid, -1, "Crash"); | |
| saved_angle[ playerid ] = vehicle_angle; | |
| saved_health[ playerid ] = vehicle_health; | |
| if( driftPoints[ playerid ] > 0 ) driftPoints[ playerid ] = 0; | |
| if( driftWaiting[ playerid ] > 0 ) driftWaiting[ playerid ] = 0; | |
| ResetPlayerMoney( playerid ); | |
| return ; | |
| } | |
| new Float: calculate = floatabs( saved_angle[ playerid ] - vehicle_angle ); | |
| if( MINIMAL_ANGLE < calculate < MAXIMAL_ANGLE ){ | |
| driftPoints[ playerid ] += floatround( calculate ); | |
| GivePlayerMoney( playerid, driftPoints[ playerid ] ); | |
| } | |
| else | |
| if( driftPoints[ playerid ] > 0 && ++driftWaiting[ playerid ] == 10 ) | |
| driftPoints[ playerid ] = 0, driftWaiting[ playerid ] = 0, ResetPlayerMoney( playerid ); | |
| saved_angle[ playerid ] = vehicle_angle; | |
| saved_health[ playerid ] = vehicle_health; | |
| } | |
| isDriftingVehicle( vehicleid ){ | |
| switch( vehicleid ){ | |
| case 448,461,462,468,481,509,521,522,581,537,538,523,417,425,447,460,469,476,487,488,497,511,512,513,519,520,548,553,563,577,592,593,430,446,452,454,472,473,453,484,493,595,464: | |
| return false; | |
| } | |
| return true; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment