// Drift engine by Luby ^^ #include #define DRIFT_MINKAT 10.0 #define DRIFT_MAXKAT 90.0 #define DRIFT_SPEED 30.0 new DriftPointsNow[200]; new PlayerDriftCancellation[200]; new Float:ppos[200][3]; enum Float:Pos{ Float:sX,Float:sY,Float:sZ }; new Float:SavedPos[MAX_PLAYERS][Pos]; forward Drift(); forward AngleUpdate(); forward DriftCancellation(playerid); public OnFilterScriptInit(){ SetTimer("AngleUpdate", 200, true); SetTimer("Drift", 200, true); return 1; } Float:GetPlayerTheoreticAngle(i) // By Luby { new Float:sin; new Float:dis; new Float:angle2; new Float:x,Float:y,Float:z; new Float:tmp3; new Float:tmp4; new 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); if(x>ppos[i][0]){tmp3=x-ppos[i][0];}else{tmp3=ppos[i][0]-x;} if(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]x){ sin = asin(tmp3/dis); MindAngle = floatsub(floatadd(sin, 180), 180.0); } if(ppos[i][1]y && ppos[i][0] DRIFT_MINKAT && floatabs(floatsub(Angle1, Angle2)) < DRIFT_MAXKAT && BySpeed > DRIFT_SPEED){ if(PlayerDriftCancellation[g] > 0)KillTimer(PlayerDriftCancellation[g]); PlayerDriftCancellation[g] = 0; DriftPointsNow[g] += floatval( floatabs(floatsub(Angle1, Angle2)) * 3 * (BySpeed*0.1) )/10; PlayerDriftCancellation[g] = SetTimerEx("DriftCancellation", 3000, 0, "d", g); } if(DriftPointsNow[g] > 0){ format(s, sizeof(s), "~n~~n~~w~_________________Driftujesz !~n~___________________~p~Punkty: %d$!", DriftPointsNow[g]); GameTextForPlayer(g, s, 3000, 3); } SavedPos[ g ][ sX ] = X; SavedPos[ g ][ sY ] = Y; SavedPos[ g ][ sZ ] = Z; } } Split(s1[], s2[], s3[]=""){ // By Luby new rxx[256]; format(rxx, 256, "%s%s%s", s1, s2, s3); return rxx; } tostr(int){ // By Luby new st[256]; format(st, 256, "%d", int); return st; } public AngleUpdate(){ // By Luby for(new g=0;g<200;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; } } floatval(Float:val){ // By Luby new str[256]; format(str, 256, "%.0f", val); return todec(str); } IsCar(model) //By Luby { switch(model) { case 443:return 0; case 448:return 0; case 461:return 0; case 462:return 0; case 463:return 0; case 468:return 0; case 521:return 0; case 522:return 0; case 523:return 0; case 581:return 0; case 586:return 0; case 481:return 0; case 509:return 0; case 510:return 0; case 430:return 0; case 446:return 0; case 452:return 0; case 453:return 0; case 454:return 0; case 472:return 0; case 473:return 0; case 484:return 0; case 493:return 0; case 595:return 0; case 417:return 0; case 425:return 0; case 447:return 0; case 465:return 0; case 469:return 0; case 487:return 0; case 488:return 0; case 497:return 0; case 501:return 0; case 548:return 0; case 563:return 0; case 406:return 0; case 444:return 0; case 556:return 0; case 557:return 0; case 573:return 0; case 460:return 0; case 464:return 0; case 476:return 0; case 511:return 0; case 512:return 0; case 513:return 0; case 519:return 0; case 520:return 0; case 539:return 0; case 553:return 0; case 577:return 0; case 592:return 0; case 593:return 0; case 471:return 0; } return 1; } todec(str[]){ // By Luby return strval(str); } // Ogólnie wszystko by Luby ;))