Código:
/* Criando Creditos pelo Rei Ayanami
[FS] Drift Pontos
Não retire meu creditos -_-
Meu discord e Tornado Magnet#1803
NOVOS DRIFT PONTOS TEXTDRAW
*/
#include <a_samp>
#define DRIFT_MINKAT 5.0
#define DRIFT_MAXKAT 30.0
#define DRIFT_SPEED 10.0
#define COLOR_Label 0xFFFFFFFF
#define COLOR_LabelOut 0x00000040
#define COLOR_ValueOut 0xFFFFFF40
#define COLOR_Value 0x000000FF
#define Label_X 500
#define Value_X 500
#define TD_Y 180
new DriftTimer[MAX_PLAYERS];
new TimerA,TimerB,TimerC;
new Points[MAX_PLAYERS];
new DriftPointsNow[MAX_PLAYERS];
new PlayerDriftCancellation[MAX_PLAYERS];
new Float:ppos[MAX_PLAYERS][3];
enum Float:Pos{ Float:sX,Float:sY,Float:sZ };
new Float:SavedPos[MAX_PLAYERS][Pos];
new bool:DriftMode[MAX_PLAYERS]=false;
new DriftBonus[MAX_PLAYERS]=1;
new Float:HealthInit[MAX_PLAYERS]=1000.0;
new bool:AutoFixBool[MAX_PLAYERS]=true;
new Text:TDLabels[3];
new Text:TDValueDrift[MAX_PLAYERS];
new Text:TDValueBonus[MAX_PLAYERS];
new Text:TDValueCash[MAX_PLAYERS];
forward Drift();
forward AngleUpdate();
forward DriftExit(playerid);
forward CheckPlayerState();
forward AutoFix();
public OnFilterScriptInit(){
TimerA=SetTimer("AngleUpdate", 200, true);
TimerB=SetTimer("AutoFix", 500, true);
TimerC=SetTimer("CheckPlayerState", 100, true);
SetTimer("Atualizar",1000,true);
LoadTextDraws();
return 1;
}
public OnFilterScriptExit(){
KillTimer(TimerA);
KillTimer(TimerB);
KillTimer(TimerC);
return 1;
}
Float:GetPlayerTheoreticAngle(i)
{
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]<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{return MindAngle;}
}
public DriftExit(playerid){
PlayerDriftCancellation[playerid] = 0;
new Float:h;
GetVehicleHealth(GetPlayerVehicleID(playerid),h);
if(DriftPointsNow[playerid]>70 && DriftPointsNow[playerid]<50000 && h==HealthInit[playerid]) GivePlayerMoney(playerid,DriftPointsNow[playerid]*DriftBonus[playerid]);
TextDrawHideForPlayer(playerid,TDLabels[0]);
TextDrawHideForPlayer(playerid,TDLabels[1]);
TextDrawHideForPlayer(playerid,TDLabels[2]);
TextDrawHideForPlayer(playerid,TDValueDrift[playerid]);
TextDrawHideForPlayer(playerid,TDValueBonus[playerid]);
TextDrawHideForPlayer(playerid,TDValueCash[playerid]);
DriftBonus[playerid]=1;
AutoFixBool[playerid]=true;
SetVehicleHealth(GetPlayerVehicleID(playerid),HealthInit[playerid]);
DriftPointsNow[playerid] = 0;
}
Float:ReturnPlayerAngle(playerid){
new Float:Ang;
if(IsPlayerInAnyVehicle(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), Ang); else GetPlayerFacingAngle(playerid, Ang);
return Ang;
}
public Drift(){
new Float:Angle1, Float:Angle2, Float:BySpeed;
new Float:Z;
new Float:X;
new Float:Y;
new Float:SpeedX;
for(new g=0;g<80;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) && GetVType(GetPlayerVehicleID(g)) && floatabs(floatsub(Angle1, Angle2)) > 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;
Points[g] += floatval( floatabs(floatsub(Angle1, Angle2)) * 3 * (BySpeed*0.1) )/10;
PlayerDriftCancellation[g] = SetTimerEx("DriftExit", 3000, 0, "d", g);
}
if(DriftPointsNow[g] > 70 && DriftPointsNow[g]<50000){
if(DriftPointsNow[g]<500){
DriftBonus[g]=1;
}
if(DriftPointsNow[g]>=500 && DriftPointsNow[g]<1000){
DriftBonus[g]=2;
}
if(DriftPointsNow[g]>=1000 && DriftPointsNow[g]<1700){
DriftBonus[g]=3;
}
if(DriftPointsNow[g]>=1700 && DriftPointsNow[g]<2500){
DriftBonus[g]=4;
}
if(DriftPointsNow[g]>=2500 && DriftPointsNow[g]<4000){
DriftBonus[g]=5;
}
if(DriftPointsNow[g]>=4000 && DriftPointsNow[g]<5000){
DriftBonus[g]=6;
}
if(DriftPointsNow[g]>=5000 && DriftPointsNow[g]<6000){
DriftBonus[g]=7;
}
if(DriftPointsNow[g]>=6000 && DriftPointsNow[g]<7000){
DriftBonus[g]=8;
}
if(DriftPointsNow[g]>=8000 && DriftPointsNow[g]<9000){
DriftBonus[g]=9;
}
if(DriftPointsNow[g]>=9000 && DriftPointsNow[g]<10000){
DriftBonus[g]=10;
}
if(DriftPointsNow[g]>=10000 && DriftPointsNow[g]<11000){
DriftBonus[g]=11;
}
if(DriftPointsNow[g]>=11000 && DriftPointsNow[g]<12000){
DriftBonus[g]=12;
}
if(DriftPointsNow[g]>=12000 && DriftPointsNow[g]<13000){
DriftBonus[g]=13;
}
if(DriftPointsNow[g]>=13000 && DriftPointsNow[g]<14000){
DriftBonus[g]=14;
}
if(DriftPointsNow[g]>=14000 && DriftPointsNow[g]<15000){
DriftBonus[g]=15;
}
if(DriftPointsNow[g]>=15000 && DriftPointsNow[g]<16000){
DriftBonus[g]=16;
}
if(DriftPointsNow[g]>=16000 && DriftPointsNow[g]<17000){
DriftBonus[g]=17;
}
if(DriftPointsNow[g]>=17000 && DriftPointsNow[g]<18000){
DriftBonus[g]=18;
}
if(DriftPointsNow[g]>=18000 && DriftPointsNow[g]<19000){
DriftBonus[g]=19;
}
if(DriftPointsNow[g]>=19000 && DriftPointsNow[g]<20000){
DriftBonus[g]=20;
}
if(DriftPointsNow[g]>=20000 && DriftPointsNow[g]<21000){
DriftBonus[g]=21;
}
if(DriftPointsNow[g]>=21000 && DriftPointsNow[g]<22000){
DriftBonus[g]=22;
}
if(DriftPointsNow[g]>=22000 && DriftPointsNow[g]<23000){
DriftBonus[g]=23;
}
if(DriftPointsNow[g]>=23000 && DriftPointsNow[g]<24000){
DriftBonus[g]=24;
}
if(DriftPointsNow[g]>=24000 && DriftPointsNow[g]<25000){
DriftBonus[g]=25;
}
if(DriftPointsNow[g]>=25000 && DriftPointsNow[g]<26000){
DriftBonus[g]=26;
}
if(DriftPointsNow[g]>=26000 && DriftPointsNow[g]<27000){
DriftBonus[g]=27;
}
if(DriftPointsNow[g]>=27000 && DriftPointsNow[g]<28000){
DriftBonus[g]=28;
}
if(DriftPointsNow[g]>=28000 && DriftPointsNow[g]<29000){
DriftBonus[g]=29;
}
if(DriftPointsNow[g]>=29000 && DriftPointsNow[g]<30000){
DriftBonus[g]=30;
}
if(DriftPointsNow[g]>=30000 && DriftPointsNow[g]<31000){
DriftBonus[g]=31;
}
if(DriftPointsNow[g]>=31000 && DriftPointsNow[g]<32000){
DriftBonus[g]=32;
}
if(DriftPointsNow[g]>=32000 && DriftPointsNow[g]<33000){
DriftBonus[g]=33;
}
if(DriftPointsNow[g]>=33000 && DriftPointsNow[g]<34000){
DriftBonus[g]=34;
}
if(DriftPointsNow[g]>=34000 && DriftPointsNow[g]<35000){
DriftBonus[g]=35;
}
if(DriftPointsNow[g]>=35000 && DriftPointsNow[g]<36000){
DriftBonus[g]=36;
}
if(DriftPointsNow[g]>=36000 && DriftPointsNow[g]<37000){
DriftBonus[g]=37;
}
if(DriftPointsNow[g]>=37000 && DriftPointsNow[g]<38000){
DriftBonus[g]=38;
}
if(DriftPointsNow[g]>=38000 && DriftPointsNow[g]<39000){
DriftBonus[g]=39;
}
if(DriftPointsNow[g]>=39000 && DriftPointsNow[g]<40000){
DriftBonus[g]=40;
}
if(DriftPointsNow[g]>=40000 && DriftPointsNow[g]<41000){
DriftBonus[g]=41;
}
if(DriftPointsNow[g]>=41000 && DriftPointsNow[g]<42000){
DriftBonus[g]=42;
}
if(DriftPointsNow[g]>=42000 && DriftPointsNow[g]<43000){
DriftBonus[g]=43;
}
if(DriftPointsNow[g]>=43000 && DriftPointsNow[g]<44000){
DriftBonus[g]=44;
}
if(DriftPointsNow[g]>=44000 && DriftPointsNow[g]<45000){
DriftBonus[g]=45;
}
if(DriftPointsNow[g]>=45000 && DriftPointsNow[g]<46000){
DriftBonus[g]=46;
}
if(DriftPointsNow[g]>=46000 && DriftPointsNow[g]<47000){
DriftBonus[g]=47;
}
if(DriftPointsNow[g]>=47000 && DriftPointsNow[g]<48000){
DriftBonus[g]=48;
}
if(DriftPointsNow[g]>=48000 && DriftPointsNow[g]<49000){
DriftBonus[g]=49;
}
if(DriftPointsNow[g]>=49000 && DriftPointsNow[g]<50000){
DriftBonus[g]=50;
}if(DriftPointsNow[g]>=50000){
DriftBonus[g]=51;
}
TextDrawShowForPlayer(g,TDLabels[0]);
TextDrawShowForPlayer(g,TDLabels[1]);
TextDrawShowForPlayer(g,TDLabels[2]);
TextDrawShowForPlayer(g,TDValueDrift[g]);
TextDrawShowForPlayer(g,TDValueBonus[g]);
TextDrawShowForPlayer(g,TDValueCash[g]);
new DPs[128],DBn[128],Cash[128],csh;
valstr(DPs,DriftPointsNow[g],false);
format(DBn,sizeof(DBn),"X%i",DriftBonus[g]);
csh=DriftPointsNow[g]*DriftBonus[g];
format(Cash,sizeof(Cash),"$%i",csh);
new PointsD[20];
format(PointsD,sizeof(PointsD),"%d",Points[g]);
setproperty(0, "", 1235, PointsD);
TextDrawSetString(TDValueDrift[g],DPs);
TextDrawSetString(TDValueBonus[g],DBn);
TextDrawSetString(TDValueCash[g],Cash);
}
SavedPos[ g ][ sX ] = X;
SavedPos[ g ][ sY ] = Y;
SavedPos[ g ][ sZ ] = Z;
}
}
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;
}
}
floatval(Float:val){
new str[256];
format(str, 256, "%.0f", val);
return todec(str);
}
todec(str[]){
return strval(str);
}
LoadTextDraws(){
TDLabels[0]=TextDrawCreate(Label_X,TD_Y,"Drift Pontos");
TextDrawColor(TDLabels[0],COLOR_Label);
TextDrawSetShadow(TDLabels[0],0);
TextDrawSetOutline(TDLabels[0],1);
TextDrawLetterSize(TDLabels[0],0.5,2);
TextDrawBackgroundColor(TDLabels[0],COLOR_LabelOut);
TextDrawFont(TDLabels[0],1);
TDLabels[1]=TextDrawCreate(Label_X,TD_Y+50,"Drift Bonus");
TextDrawColor(TDLabels[1],COLOR_Label);
TextDrawSetShadow(TDLabels[1],0);
TextDrawSetOutline(TDLabels[1],1);
TextDrawLetterSize(TDLabels[1],0.5,2);
TextDrawBackgroundColor(TDLabels[1],COLOR_LabelOut);
TextDrawFont(TDLabels[1],1);
TDLabels[2]=TextDrawCreate(Label_X,TD_Y+100,"Drift Pagamento");
TextDrawColor(TDLabels[2],COLOR_Label);
TextDrawSetShadow(TDLabels[2],0);
TextDrawSetOutline(TDLabels[2],1);
TextDrawLetterSize(TDLabels[2],0.5,2);
TextDrawBackgroundColor(TDLabels[2],COLOR_LabelOut);
TextDrawFont(TDLabels[2],1);
new i;
for(i=0;i<=MAX_PLAYERS;i++){
TDValueDrift[i]=TextDrawCreate(Value_X,TD_Y+20,"0");
TextDrawColor(TDValueDrift[i],COLOR_Value);
TextDrawSetShadow(TDValueDrift[i],0);
TextDrawSetOutline(TDValueDrift[i],1);
TextDrawLetterSize(TDValueDrift[i],0.5,2);
TextDrawBackgroundColor(TDValueDrift[i],COLOR_ValueOut);
TextDrawFont(TDValueDrift[i],3);
TDValueBonus[i]=TextDrawCreate(Value_X,TD_Y+70,"X1");
TextDrawColor(TDValueBonus[i],COLOR_Value);
TextDrawSetShadow(TDValueBonus[i],0);
TextDrawSetOutline(TDValueBonus[i],1);
TextDrawLetterSize(TDValueBonus[i],0.5,2);
TextDrawBackgroundColor(TDValueBonus[i],COLOR_ValueOut);
TextDrawFont(TDValueBonus[i],3);
TDValueCash[i]=TextDrawCreate(Value_X,TD_Y+120,"$0");
TextDrawColor(TDValueCash[i],COLOR_Value);
TextDrawSetShadow(TDValueCash[i],0);
TextDrawSetOutline(TDValueCash[i],1);
TextDrawLetterSize(TDValueCash[i],0.5,2);
TextDrawBackgroundColor(TDValueCash[i],COLOR_ValueOut);
TextDrawFont(TDValueCash[i],3);
}
return 1;
}
public CheckPlayerState(){
new i,cs;
for(i=0;i<=MAX_PLAYERS;i++){
cs=GetPlayerState(i);
if(DriftMode[i] && cs==PLAYER_STATE_DRIVER && DriftPointsNow[i]>70 && Points[i]>70){
new Float:h;
GetVehicleHealth(GetPlayerVehicleID(i),h);
if(h<HealthInit[i]){
KillTimer(DriftTimer[i]);
Points[i] = Points[i]-DriftPointsNow[i];
new PointsD[20];
format(PointsD,sizeof(PointsD),"%d",Points[i]);
setproperty(0, "", 1235, PointsD);
GameTextForPlayer(i,"~n~~n~~n~~n~~n~~n~~n~~r~Bateu!",800,5);
DriftExit(i);
DriftMode[i]=false;
}
}
if(cs==PLAYER_STATE_DRIVER && DriftMode[i]==false){
if(GetVType(GetPlayerVehicleID(i))){
DriftMode[i]=true;
GetVehicleHealth(GetPlayerVehicleID(i),HealthInit[i]);
AutoFixBool[i]=false;
DriftTimer[i]=SetTimerEx("Drift", 200, true, "i", i);
}
}
else if(cs!=PLAYER_STATE_DRIVER && DriftMode[i]==true){
KillTimer(DriftTimer[i]);
DriftMode[i]=false;
AutoFixBool[i]=true;
}
else{}
}
return 1;
}
public AutoFix(){
new i;
for(i=0;i<=MAX_PLAYERS;i++){
if(AutoFixBool[i] && IsPlayerInAnyVehicle(i)){
SetVehicleHealth(GetPlayerVehicleID(i),HealthInit[i]);
}
}
}
GetVType(vid){
new Convertibles[4]={480, 533, 439, 555};
new Industrial[26]={499, 422, 482, 498, 609, 524, 578, 455, 403, 414, 582, 443, 514, 413, 515, 440, 543, 605, 459, 531, 408, 552, 478, 456, 554};
new LowRider[8]={536, 575, 534, 567, 535, 566, 576, 412};
new OffRoad[13]={568, 424, 573, 579, 400, 500, 444, 556, 557, 470, 489, 505, 595};
new Service[19]={416, 433, 431, 438, 437, 523, 427, 490, 528, 407, 544, 596, 596, 597, 598, 599, 432, 601, 420};
new Saloon[35]={445, 504, 401, 518, 527, 542, 507, 562, 585, 419, 526, 604, 466, 492, 474, 546, 517, 410, 551, 516, 467, 600, 426, 436, 547, 405, 580, 560, 550, 549, 540, 491, 529, 421};
new Sports[20]={602, 429, 496, 402, 541, 415, 589, 587, 565, 494, 502, 503, 411, 559, 603, 475, 506, 451, 558, 477};
new Wagons[5]={418, 404, 479, 458, 561};
new modelid=GetVehicleModel(vid);
new i;
for(i=0;i<3;i++){
if(Convertibles[i]==modelid) return 1;
}
for(i=0;i<25;i++){
if(Industrial[i]==modelid) return 1;
}
for(i=0;i<7;i++){
if(LowRider[i]==modelid) return 1;
}
for(i=0;i<12;i++){
if(OffRoad[i]==modelid) return 1;
}
for(i=0;i<19;i++){
if(Service[i]==modelid) return 1;
}
for(i=0;i<35;i++){
if(Saloon[i]==modelid) return 1;
}
for(i=0;i<20;i++){
if(Sports[i]==modelid) return 1;
}
for(i=0;i<5;i++){
if(Wagons[i]==modelid) return 1;
}
return 0;
}