Дрифтовий счётчик

Дрифт лічильник

Опис: Готові рішення скриптів, filterScriptМодератор: SJplayer

До всіх #define додамо:

#define COLOR_YELLOW 0xFFFF00FF #define COLOR_GREEN 0x33AA33FF #define DRIFT_MINKAT 10.0 #define DRIFT_MAXKAT 90.0 #define DRIFT_SPEED 30.

До всіх new додамо:

new dtimer, atimer; new Text: Score [MAX_PLAYERS]; new Text: Chet [MAX_PLAYERS]; new scores [MAX_PLAYERS], scplay[MAX_PLAYERS], chets[MAX_PLAYERS]; new PlayerDriftCancellation [200]; New DriftPointsNow [200]; new Float: ppos [200] [3]; enum Float : Pos < Float: sX, Float: sY, Float: sZ >; new Float : SavedPos [ MAX_PLAYERS ][ Pos ];

У enum pInfo додамо

До всіх forward

forward Drift(); forward AngleUpdate (); forward Drift Cancelation ( playerid );

У public onGameModeInit()

dtimer = SetTimer ("Drift", 200, true); atimer = SetTimer ("AngleUpdate", 200, true);

У public OnGameModeExit()

KillTimer (dtimer); KillTimer (atimer);

У public onGameModeInit()

scores [playerid] = 0; chets [playerid] = 1; scplay [playerid] = 1; Score [playerid] = TextDrawCreate (500, 150, "-"); TextDrawAlignment ( Score [ playerid ], 0 ); TextDrawBackgroundColor (Score [playerid], 0x000000ff); TextDrawFont (Score [playerid], 3); TextDrawLetterSize (Score [playerid], 0.4, 1.5); TextDrawColor (Score [playerid], COLOR_YELLOW); TextDrawSetOutline (Score [playerid], 1); TextDrawSetProportional (Score [playerid], 1); TextDrawSetShadow (Score [playerid], 1); Chet [playerid] = TextDrawCreate (500, 170, "-"); TextDrawAlignment ( Chet [playerid], 0); TextDrawBackgroundColor (Chet [playerid], 0x000000ff); TextDrawFont ( Chet [playerid], 3); TextDrawLetterSize ( Chet [playerid], 0,5, 1,7); TextDrawColor ( Chet [ідентифікатор гравця], 0xA4A2AEF6); TextDrawSetOutline ( Chet [playerid], 1); TextDrawSetProportional ( Chet [playerid], 1); TextDrawSetShadow ( Chet [playerid], 1);

В public OnPlayerDisconnect(playerid, reason)

TextDrawDestroy ( Score [ playerid ]); TextDrawDestroy ( Chet [ playerid ]);

В кінці мода добавим

Float : GetPlayerTheoreticAngle ( i ) new Float : sin ; новий Float : dis ; новий Float: angle2; новий Float: x, Float: y, Float: z; новий Float : tmp3 ; новий Float: tmp4; новий Float: MindAngle;

if ( IsPlayerConnected ( i )) GetPlayerPos ( i , x , y , z ); dis = floatsqroot ( floatpower ( floatabs ( floatsub ( x , ppos [ i ][ 0 ])), 2 )+ floatpower ( floatabs ( floatsub ( y , ppos [ i ][ 1 ])), 2 )); if (IsPlayerInAnyVehicle (i))< GetVehicleZAngle ( GetPlayerVehicleID ( i ), angle2 );>else< GetPlayerFacingAngle ( i , angle2 );> якщо ( x > ppos [ i ][ 0 ])< tmp3 = x - ppos [ i ][ 0 ];>else< tmp3 = ppos [ i ][ 0 ]- x ;> якщо ( y > ppos [ i ][ 1 ])< tmp4 = y - ppos [ i ][ 1 ];>else< tmp4 = ppos [ i ][ 1 ]- y ;> if (ppos [i][1]> y && ppos [i][0]> x) sin = asin (tmp3 / dis); MindAngle = floatsub ( floatsub ( floatadd ( sin , 90 ), floatmul ( sin , 2 )), - 90,0 ); > if (ppos [i][1] y && ppos [i][0]> x) sin = asin (tmp3 / dis); MindAngle = floatsub ( floatadd ( sin , 180 ), 180.0 ); > if ( ppos [ i ][ 1 ] y && ppos [i][0]x) sin = acos (tmp4 / dis); MindAngle = floatsub ( floatadd ( sin , 360 ), floatmul ( sin , 2 )); > if (ppos [i][1]> y && ppos [i][0]x) sin = asin (tmp3 / dis); MindAngle = floatadd ( sin , 180 ); > >

if ( MindAngle == 0.0 ) return angle2 ; > else повертає MindAngle ; > >

public DriftCancellation (playerid) PlayerDriftCancellation [playerid] = 0; GivePlayerMoney (ідентифікатор гравця, DriftPointsNow [ідентифікатор гравця]); PlayerInfo [ playerid ][ pScore ] += результати [ playerid ]; SetPlayerScore (playerid, PlayerInfo [playerid][ pScore]); DriftPointsNow [ідентифікатор гравця] = 0; оцінки [ідентифікатор гравця] = 0; TextDrawHideForPlayer ( playerid , Chet [ playerid ]); >

Float : ReturnPlayerAngle ( playerid ) new Float : Ang ; if ( IsPlayerInAnyVehicle ( playerid )) GetVehicleZAngle ( GetPlayerVehicleID ( playerid ), Ang ); else GetPlayerFacingAngle (playerid, Ang); повернути Ang ; >

public Drift () new Float: Angle1, Float: Angle2, Float: BySpeed, s [128]; новий Float : Z ; новий Float : X ; новий Float : Y ; новий Float: SpeedX; for (новий g = 0; g MAX_PLAYERS; g ++) GetPlayerPos (g, X, Y, Z); SpeedX = floatsqroot ( floatadd ( floatadd ( floatpower ( floatabs ( floatsub ( X , SavedPos [ g ][ sX ])), 2 ), floatpower ( floatabs ( floatsub ( Y , SavedPos [ g ][ sY ])), 2 )), floatpower ( floatabs ( floatsub ( Z , SavedPos [ g ][ sZ ])), 2 ))); Angle1 = ReturnPlayerAngle ( g ); Angle2 = GetPlayerTheoreticAngle ( g ); BySpeed ​​= floatmul ( SpeedX , 12 ); if ( IsPlayerInAnyVehicle ( g ) && IsCar ( GetPlayerVehicleID ( g )) && floatabs ( floatsub ( Angle1 , Angle2 )) >DRIFT_MINKAT && floatabs ( floatsub ( Angle1 , Angle2 )) DRIFT_MAXKAT && За швидкістю > DRIFT_SPEED ) if ( PlayerDriftCancellation [ g ] > 0 ) KillTimer ( PlayerDriftCancellation [ g ]); PlayerDriftCancellation [g] = 0; DriftPointsNow [g] += 10; оцінки [g]++; PlayerDriftCancellation [g] = SetTimerEx ("DriftCancellation", 2000, 0, "d", g); > if ( DriftPointsNow [ g ] > 0 ) if ( scplay [ g ] == 1 ) TextDrawShowForPlayer ( g , Chet [ g ]); format ( s , sizeof ( s ), "drift: +%d$" , DriftPointsNow [ g ]); TextDrawSetString ( Chet [ g ], s ); > > SavedPos [ g ][ sX ] = X ; SavedPos [ g ][ sY ] = Y ; SavedPos [ g ][ sZ ] = Z ; > >

IsCar (модель) перемикач (модель) випадок 443: повернення 0; випадок 448: повернути 0; випадок 461: повернути 0; випадок 462: повернути 0; випадок 463: повернути 0; випадок 468: повернути 0; випадок 521: повернути 0; випадок 522: повернути 0; випадок 523: повернути 0; випадок 581: повернути 0; випадок 586: повернути 0; випадок 481: повернути 0; випадок 509: повернути 0; випадок 510: повернути 0; випадок 430: повернути 0; випадок 446: повернути 0; випадок 452: повернути 0; випадок 453: повернути 0; випадок 454: повернути 0; випадок 472: повернути 0; випадок 473: повернути 0; випадок 484: повернути 0; випадок 493: повернути 0; випадок 595: повернути 0; випадок 417: повернути 0; випадок 425: повернути 0; випадок 447: повернути 0; випадок 465: повернути 0; випадок 469: повернути 0; випадок 487: повернути 0; випадок 488: повернути 0; випадок 497: повернути 0; випадок 501: повернути 0; випадок 548: повернути 0; випадок 563: повернути 0; випадок 406: повернути 0; випадок 444: повернути 0; випадок 556: повернути 0; випадок 557: повернути 0; випадок 573: повернути 0; випадок 460:повернути 0; випадок 464: повернути 0; випадок 476: повернути 0; випадок 511: повернути 0; випадок 512: повернути 0; випадок 513: повернути 0; випадок 519: повернути 0; випадок 520: повернути 0; випадок 539: повернути 0; випадок 553: повернути 0; випадок 577: повернути 0; випадок 592: повернути 0; випадок 593: повернути 0; випадок 471: повернути 0; > повернути 1 ; >

public AngleUpdate () < for ( new g = 0 ; g MAX_PLAYERS ; g ++) new Float : x , Float : y , Float : z ; if (IsPlayerInAnyVehicle (g)) GetVehiclePos (GetPlayerVehicleID (g), x, y, z); else GetPlayerPos (g, x, y, z); ppos [g][0] = x; ppos [ g ][ 1 ] = y ; ppos [ g ][ 2 ] = z ; > >

public OnVehicleDamageStatusUpdate ( vehicleid , playerid ) if ( DriftPointsNow [ playerid ] > 0 ) DriftPointsNow [ playerid ] = 0 ; оцінки [ідентифікатор гравця] = 0; TextDrawSetString ( Chet [ playerid ], "

В public OnPlayerSpawn(playerid)

TextDrawHideForPlayer (ідентифікатор гравця, Чет [ідентифікатор гравця]); TextDrawShowForPlayer (playerid, Score [playerid]);

І в public OnPlayerUpdate(playerid)

новий рядок [ 128 ]; //Оновлення Score:%d format ( string , sizeof (string), "score %07d" , PlayerInfo [ playerid ][ pScore ]); TextDrawSetString (Score [playerid], string);