Advertisement
ipsBruno

(Filterscript) Drift Evento SA:MP

Jan 5th, 2013
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 26.00 KB | None | 0 0
  1. #include a_samp
  2.  
  3. // ===========================================================================
  4.  
  5. #undef MAX_PLAYERS
  6. #define MAX_PLAYERS 100
  7.  
  8. // ===========================================================================
  9.  
  10.  
  11. #define function::%0(%1) forward %0(%1); public %0(%1)
  12.  
  13. // ===========================================================================
  14.  
  15. new PontosNoDesafio[MAX_PLAYERS];
  16.  
  17. new Text:Textdraw1[MAX_PLAYERS];
  18. new Text:TextDrawInfo[MAX_PLAYERS];
  19. new Text:NSFDraw[MAX_PLAYERS];
  20.  
  21. new playerDrift[MAX_PLAYERS];
  22.  
  23. new DB: jogadoresRanking;
  24.  
  25. new bool: JogadorJogando[ MAX_PLAYERS char];
  26. new bool: ArenaOcupada;
  27. new bool: iniciadoArena;
  28.  
  29. // ===========================================================================
  30.  
  31. public OnFilterScriptInit() {
  32.  
  33.     printf("Sistema de drift carregado !!");
  34.  
  35.     jogadoresRanking = db_open("drift.db");
  36.     db_free_result(db_query(jogadoresRanking,"CREATE TABLE IF NOT EXISTS `Usuarios` (`jogador`,`Pontos`)"));
  37.  
  38.     SetTimer("DriftCounter", 850, true);
  39.  
  40.     return true;
  41. }
  42.  
  43.  
  44.  
  45. public OnGameModeExit() {
  46.     db_close(jogadoresRanking);
  47.     return true;
  48. }
  49.  
  50.  
  51. public OnPlayerDeath(playerid, killerid, reason)
  52. {
  53.     OnPlayerExitVehicle(playerid, -1);
  54. }
  55.  
  56. public OnPlayerConnect(playerid) {
  57.     NSFDraw[playerid] = TextDrawCreate(274.000000, 104.000000, "000,000");
  58.     TextDrawBackgroundColor(NSFDraw[playerid], 255);
  59.     TextDrawFont(NSFDraw[playerid], 1);
  60.     TextDrawLetterSize(NSFDraw[playerid], 0.460000, 1.600000);
  61.     TextDrawColor(NSFDraw[playerid], -39169);
  62.     TextDrawSetOutline(NSFDraw[playerid], 1);
  63.     TextDrawSetProportional(NSFDraw[playerid], 1);
  64.     TextDrawTextSize(TextDrawInfo[playerid], 620.000000, 0.000000);
  65.  
  66.     static string[256];
  67.     format(string, 128, "~n~~w~Drift Pontos: ~r~%d", getScoreData(playerid) );
  68.     TextDrawInfo[playerid] = TextDrawCreate(500.000000, 110.000000, string);
  69.     TextDrawBackgroundColor(TextDrawInfo[playerid], 255);
  70.     TextDrawFont(TextDrawInfo[playerid], 1);
  71.     TextDrawLetterSize(TextDrawInfo[playerid], 0.30000, 1.00000);
  72.     TextDrawColor(TextDrawInfo[playerid], -1);
  73.     TextDrawSetOutline(TextDrawInfo[playerid], 1);
  74.     TextDrawSetProportional(TextDrawInfo[playerid], 1);
  75.     TextDrawUseBox(TextDrawInfo[playerid], 0);
  76.     TextDrawBoxColor(TextDrawInfo[playerid], 255);
  77.     TextDrawTextSize(TextDrawInfo[playerid], 620.000000, 0.000000);
  78.  
  79.  
  80.  
  81.     ////////////////////////////////////////////////////
  82.  
  83.     Textdraw1[playerid] = TextDrawCreate(500.000000, 110.000000, "~h~~p~~h~Desafio drift:~n~~w~Eu: ~r~0~n~~w~Ele: ~r~0");
  84.     TextDrawBackgroundColor(Textdraw1[playerid], 255);
  85.     TextDrawFont(Textdraw1[playerid], 1);
  86.     TextDrawLetterSize(Textdraw1[playerid], 0.30000, 1.00000);
  87.     TextDrawColor(Textdraw1[playerid], -1);
  88.     TextDrawSetOutline(Textdraw1[playerid], 1);
  89.     TextDrawSetProportional(Textdraw1[playerid], 1);
  90.     TextDrawUseBox(Textdraw1[playerid], 0);
  91.     TextDrawBoxColor(Textdraw1[playerid], 255);
  92.     TextDrawTextSize(Textdraw1[playerid], 620.000000, 0.000000);
  93.  
  94.  
  95.     return true;
  96. }
  97.  
  98. public OnPlayerSpawn(playerid) {
  99.  
  100.     TextDrawShowForPlayer(playerid, TextDrawInfo[playerid]);
  101.     SetPlayerScore(playerid, getScoreData(playerid));
  102.     return true;
  103. }
  104.  
  105.  
  106. new jogadoresEvento, jogadorQueFez, scoreApostado, jogadoresMortos;
  107.  
  108. public OnPlayerExitVehicle(playerid, vehicleid) {
  109.  
  110.     if (JogadorJogando{playerid}) {
  111.    
  112.         //
  113.         jogadoresMortos++; // 1
  114.         //
  115.         RemovePlayerFromVehicle(playerid);
  116.         //
  117.  
  118.         new string[128];
  119.         GetPlayerName (playerid, string, 25);
  120.  
  121.         format(string, 128, "[Info] O %s morreu no desafio (com %d pontos)", string, PontosNoDesafio[playerid]);
  122.         SendClientMessageToAll(0xFF0000FF, string);
  123.  
  124.         //
  125.         DestroyVehicle(GetPVarInt(playerid, "CarroDrift"));
  126.         //
  127.  
  128.         JogadorJogando{playerid} =  false;
  129.  
  130.         TextDrawHideForPlayer(playerid, Textdraw1[playerid]);
  131.         TextDrawShowForPlayer(playerid, TextDrawInfo[playerid]);
  132.  
  133.         SetPlayerScore(playerid, GetPlayerScore(playerid) - scoreApostado);
  134.  
  135.         //
  136.         salvarJogador(playerid);
  137.  
  138.  
  139.         PontosNoDesafio[playerid] = 0;
  140.  
  141.         SetTimerEx("SpawnEx", 3000, false, "i", playerid);
  142.        
  143.         if(jogadoresEvento  == (jogadoresMortos + 1)) {
  144.        
  145.             for(playerid = 0; playerid != MAX_PLAYERS; playerid ++) {
  146.                 if(JogadorJogando{playerid}) break;
  147.             }
  148.            
  149.             SetPlayerScore(playerid, GetPlayerScore(playerid) + (scoreApostado * jogadoresMortos));
  150.            
  151.            
  152.             GetPlayerName (playerid, string, 25);
  153.  
  154.             format(string, 128, "[Info] O %s foi o grande vencedor e ganhou o bolada de %d de score", string,  (scoreApostado * jogadoresMortos));
  155.             SendClientMessageToAll(0x00FF00FF, string);
  156.             iniciadoArena = false;
  157.        
  158.             //
  159.             RemovePlayerFromVehicle(playerid);
  160.            
  161.             scoreApostado       = 0;
  162.             jogadorQueFez       = -1;
  163.             jogadoresEvento     = 0;
  164.  
  165.             ArenaOcupada = false;
  166.             JogadorJogando{playerid} = false;
  167.             PontosNoDesafio[playerid] = 0;
  168.    
  169.             jogadoresMortos = 0;
  170.            
  171.             TextDrawHideForPlayer(playerid, Textdraw1[playerid]);
  172.             TextDrawShowForPlayer(playerid, TextDrawInfo[playerid]);
  173.            
  174.             DestroyVehicle(GetPVarInt(playerid, "CarroDrift"));
  175.             salvarJogador(playerid);
  176.            
  177.             SetTimerEx("SpawnEx", 3000, false, "i", playerid);
  178.        
  179.        
  180.         }
  181.  
  182.         //////////////////////////
  183.     }
  184.  
  185.     TextDrawHideForPlayer(playerid, NSFDraw[playerid]);
  186.  
  187.     return true;
  188. }
  189.  
  190.  
  191.  
  192. public OnPlayerDisconnect(playerid, reason) {
  193.  
  194.     salvarJogador(playerid);
  195.  
  196.     TextDrawDestroy(NSFDraw[playerid]);
  197.     TextDrawDestroy(TextDrawInfo[playerid]);
  198.     TextDrawDestroy(Textdraw1[playerid]);
  199.  
  200.     if (JogadorJogando{playerid}) {
  201.         OnPlayerExitVehicle(playerid, -1);
  202.     }
  203.  
  204.  
  205.     return true;
  206. }
  207.  
  208.  
  209.  
  210. public OnPlayerCommandText(playerid, cmdtext[])
  211. {
  212.  
  213.     if(!strcmp(cmdtext[1], "carroteste", true)) {
  214.         SetPlayerScore(playerid, 5000);
  215.         static Float: xPos[3];
  216.         GetPlayerPos(playerid, xPos[0], xPos[1], xPos[2]);
  217.         CreateVehicle(562, xPos[0], xPos[1], xPos[2], 82.2873, 0, 1, 60);
  218.         return true;
  219.     }
  220.  
  221.     if(!strcmp(cmdtext[1], "ranking", true)) {
  222.  
  223.         static
  224.  
  225.             query[128],
  226.             nome[MAX_PLAYER_NAME],
  227.             stringDialog[1024];
  228.  
  229.         nome[0] = 0,stringDialog[0] = 0,query[0] = 0;
  230.         SendClientMessage(playerid, -1, "Melhores Jogadores");
  231.  
  232.         // new string2[128];
  233.  
  234.         new DBResult:result;
  235.         new DBResult:playerResult;
  236.  
  237.         format(query, sizeof(query), "SELECT `jogador` FROM `Usuarios` ORDER BY (`Pontos` * 1) DESC limit 10");
  238.  
  239.         // main table
  240.         result = db_query(jogadoresRanking, query);
  241.  
  242.         for(new i, r = db_num_rows(result); i != r; ++ i) {
  243.  
  244.             db_get_field(result, 0, nome, MAX_PLAYER_NAME);
  245.  
  246.             // get query player tab
  247.             format(query, sizeof(query), "SELECT `pontos` FROM `Usuarios` WHERE `jogador` = '%s'", nome);
  248.  
  249.             // get player score
  250.             db_get_field((playerResult = db_query(jogadoresRanking,query), playerResult), 0, query, 14);
  251.  
  252.             //
  253.  
  254.             format(stringDialog, sizeof stringDialog,"%s%02d \t %24s\t\t\tDrift (%05d)\n", stringDialog, (i +1) , nome, strval(query));
  255.  
  256.             //
  257.  
  258.             db_next_row(result);
  259.  
  260.             db_free_result(playerResult);
  261.  
  262.         }
  263.  
  264.         ShowPlayerDialog(playerid,  4, DIALOG_STYLE_MSGBOX, "Ranking", stringDialog, "Fechar", "Fechar");
  265.  
  266.  
  267.         return db_free_result(result), true;
  268.     }
  269.  
  270.  
  271.     if(!strcmp(cmdtext[1], "entrar", true)) {
  272.  
  273.         if(!ArenaOcupada || iniciadoArena)
  274.             return SendClientMessage(playerid, -1, "[Erro] A arena de drift está fechada. Digite /desafiar !!");
  275.  
  276.  
  277.         if(IsPlayerInAnyVehicle(playerid)) {
  278.  
  279.             SendClientMessage(playerid, -1, "[Erro] Caso estiver em algum carro saia dele!");
  280.             return true;
  281.         }
  282.  
  283.         SendClientMessage(playerid, 0xFF00FF, "[Info] Para ganhar você precisa fazer 5 mil pontos a mais que seus adversário - Pontuação ao lado >");
  284.  
  285.         JogadorJogando{playerid} = true;
  286.  
  287.        
  288.  
  289.         SetPVarInt(playerid, "CarroDrift", CreateVehicle(562, 1501.4595,1321.5551- float(jogadoresEvento * 5),10.5013, 82.2873, 0, 1, 60));
  290.         PutPlayerInVehicle(playerid, GetPVarInt(playerid, "CarroDrift"), 0);
  291.         TogglePlayerControllable(playerid,0);
  292.  
  293.         GameTextForPlayer(playerid, "~w~Carregando !!" , 2500, 6);
  294.  
  295.         TextDrawShowForPlayer(playerid, Textdraw1[playerid]);
  296.         TextDrawHideForPlayer(playerid, TextDrawInfo[playerid]);
  297.  
  298.         jogadoresEvento ++;
  299.        
  300.        
  301.         return true;
  302.     }
  303.  
  304.  
  305.     if(!strcmp(cmdtext[1], "desafiar", true, 8))
  306.     {
  307.         if(ArenaOcupada)
  308.            return SendClientMessage(playerid, -1, "[Erro] A arena de drift está ocupada !!");
  309.  
  310.  
  311.         new score, cmd[32];
  312.  
  313.         if(sscanf( cmdtext, "sd", cmd,  score ) )
  314.             return SendClientMessage(playerid, -1, "[Erro] Use corretamente: /desafiar [score]");
  315.  
  316.         if(score == 65535 || !score)
  317.             return SendClientMessage(playerid, -1, "[Erro] Use um valor de score entre 1 e 65535");
  318.  
  319.         if(getScoreData(playerid) < score)
  320.             return SendClientMessage(playerid, -1, "[Erro] Você não tem score suficiente para fazer aposta !!");
  321.  
  322.         static string[128];
  323.         format(string, 128, "[Info] Um jogador abriu o evento de drift. Digite /entrar para entrar | VALOR DA APOSTA: {FF0000}%d | 30 SEGUNDOS !!", score);
  324.         SendClientMessageToAll(-1, string);
  325.  
  326.         scoreApostado       = score;
  327.         jogadorQueFez       = playerid;
  328.         jogadoresEvento     = 1;
  329.  
  330.         ArenaOcupada = true;
  331.  
  332.         SetPVarInt(playerid, "CarroDrift", CreateVehicle(562, 1501.4595,1321.5551,10.5013, 82.2873, 0, 1, 60));
  333.         PutPlayerInVehicle(playerid, GetPVarInt(playerid, "CarroDrift"), 0);
  334.         TogglePlayerControllable(playerid, 0);
  335.        
  336.         SendClientMessage(playerid, 0xFF00FF, "[Info] Para ganhar você precisa fazer 5 mil pontos a mais que seus adversário - Pontuação ao lado >");
  337.  
  338.  
  339.         jogadoresMortos = 0;
  340.         JogadorJogando{playerid} = true;
  341.        
  342.         SetTimer("IniciarDriftEvento", 10000, false);
  343.        
  344.         TextDrawShowForPlayer(playerid, Textdraw1[playerid]);
  345.         TextDrawHideForPlayer(playerid, TextDrawInfo[playerid]);
  346.  
  347.         return true;
  348.     }
  349.  
  350.     return false;
  351. }
  352.  
  353.  
  354. public OnPlayerUpdate(playerid) {
  355.  
  356.     SetPVarInt(playerid, "SegundosTick", gettime());
  357.    
  358.     if( gettime() - GetPVarInt(playerid, "SegundosTick") > 1)
  359.         salvarJogador(playerid);
  360.  
  361.     return true;
  362. }
  363.  
  364. //
  365. //
  366. //
  367. //
  368.  
  369. function::IniciarDriftEvento() {
  370.  
  371.     if(jogadoresEvento == 1) {
  372.         scoreApostado       = 0;
  373.         JogadorJogando{jogadorQueFez} = false;
  374.         jogadorQueFez       = -1;
  375.         jogadoresEvento     = 0;
  376.         TogglePlayerControllable(jogadorQueFez, 1);
  377.         iniciadoArena = false;
  378.  
  379.         ArenaOcupada = true;
  380.  
  381.         return SendClientMessageToAll(-1, "[Info] Não foi possível iniciar o evento pois o número de jogadores foi pouco");
  382.     }
  383.    
  384.     SetTimer("DriftEventoCheck", 1000, false);
  385.    
  386.     iniciadoArena = true;
  387.    
  388.     for(new i; i != MAX_PLAYERS; i++) {
  389.         if(JogadorJogando{i} == true) {
  390.             TogglePlayerControllable(i, true);
  391.             GameTextForPlayer(i, "~w~Comece agora !!" , 3500, 6);
  392.         }
  393.     }
  394.     return true;
  395. }
  396.  
  397.  
  398. //
  399. // @function: get score data
  400. // @author: Bruno da Silva
  401. //
  402.  
  403. function::getScoreData(playerid) {
  404.  
  405.         new query[256], string[128];
  406.  
  407.         new DBResult:qresult, ret;
  408.         GetPlayerName(playerid, string, MAX_PLAYER_NAME + 1);
  409.  
  410.         format(query,sizeof(query),"SELECT `Pontos` FROM `Usuarios` WHERE `jogador` = '%s'", string);
  411.  
  412.         qresult = db_query(jogadoresRanking,query);
  413.         if(db_num_rows(qresult) == 1)
  414.         {
  415.                 db_get_field(qresult,0,string,128);
  416.                 ret = strval(string);
  417.         }
  418.         db_free_result(qresult);
  419.         return ret;
  420. }
  421.  
  422.  
  423.  
  424.  
  425. /////////////////////////////////////////////////////////
  426. //
  427. // @funcion: save data
  428. // @author: Bruno da Silva
  429. //
  430. ////////////////////////////////////////////////////////
  431.  
  432. function::salvarJogador(playerid) {
  433.  
  434.     new tname[MAX_PLAYER_NAME + 1];
  435.     GetPlayerName(playerid,tname,sizeof(tname));
  436.  
  437.     new query[256];
  438.     format(query,sizeof(query),"SELECT `jogador` FROM `Usuarios` WHERE `jogador`=('%s') LIMIT 1",tname);
  439.  
  440.     new DBResult:qresult;
  441.     qresult = db_query(jogadoresRanking,query);
  442.  
  443.     if(db_num_rows(qresult) == 1)
  444.     {
  445.         format(query,sizeof(query),"UPDATE `Usuarios` SET `Pontos`='%d' WHERE (`jogador` = ('%s'))",GetPlayerScore(playerid),tname);
  446.         db_free_result(db_query(jogadoresRanking,query));
  447.     }
  448.     else if(db_num_rows(qresult) == 0)
  449.     {
  450.         format(query, sizeof(query), "INSERT INTO `Usuarios` (`jogador`,`Pontos`) VALUES(('%s'),%d)",tname ,GetPlayerScore(playerid));
  451.  
  452.         db_free_result(db_query(jogadoresRanking,query));
  453.     }
  454.  
  455.     return true;
  456. }
  457.  
  458. static bruno[ MAX_PLAYERS ] ;
  459.  
  460.  
  461. function::ReadRank(jogador[]) {
  462.  
  463.     new files[42];
  464.     format(files, 42, "rank/%s.rank", jogador);
  465.  
  466.     new rank[32];
  467.  
  468.     if(!fexist(files)) return 0;
  469.  
  470.     new File: fp = fopen(files, io_read);
  471.  
  472.     fread(fp, rank, sizeof rank);
  473.  
  474.     fclose (fp);
  475.  
  476.     return strval(rank);
  477. }
  478.  
  479. function::WriteRank(jogador[], rank) {
  480.  
  481.     new files[42];
  482.     format(files, 42, "rank/%s.rank", jogador);
  483.  
  484.     new File: fp = fopen(files, io_write);
  485.  
  486.     format(files, 32, "%d", rank);
  487.  
  488.     fwrite(fp, files);
  489.     fclose (fp);
  490.  
  491.     return true;
  492. }
  493.  
  494.  
  495. function::DriftEventoCheck() {
  496.  
  497.     if(iniciadoArena == true) {
  498.         SetTimer("DriftEventoCheck", 1000, false);
  499.     }
  500.    
  501.     new string[1024], nome[128];
  502.    
  503.     string = "~h~~p~~h~Desafio drift:~n~";
  504.    
  505.     for(new i; i != MAX_PLAYERS; i++) {
  506.  
  507.         if(JogadorJogando{i} == true) {
  508.  
  509.             GetPlayerName(i, nome, 24);
  510.             format (nome, 128, "~w~%s: ~r~%d~n~", nome, PontosNoDesafio[i]);
  511.             strcat(string, nome);
  512.                 //
  513.         }
  514.     }
  515.  
  516.  
  517.     for(new i; i != MAX_PLAYERS; i++) {
  518.         if(JogadorJogando{i}) {
  519.        
  520.             TextDrawSetString(Textdraw1[i], string);
  521.            
  522.             for(new j; j != MAX_PLAYERS; j++) {
  523.                 if(JogadorJogando{j} && j != i) {
  524.                     if (PontosNoDesafio[i] - PontosNoDesafio[j] > 5000 ) {
  525.                         OnPlayerExitVehicle(j, GetPlayerVehicleID(j));
  526.                     }
  527.                     else if (  PontosNoDesafio[j] - PontosNoDesafio[i]  > 5000 ) {
  528.                         OnPlayerExitVehicle(i, GetPlayerVehicleID(i));
  529.                     }
  530.                 }
  531.             }
  532.         }
  533.     }
  534.     return true;
  535. }
  536.  
  537. function::DriftEarn(playerid,  score) {
  538.  
  539.     score *= 10;
  540.  
  541.     if (JogadorJogando{playerid}) {
  542.         PontosNoDesafio[playerid] += score;
  543.     }
  544.     else {
  545.  
  546.  
  547.         playerDrift [playerid] += score;
  548.  
  549.         TextDrawShowForPlayer(playerid, NSFDraw[playerid]);
  550.  
  551.         new string[128];
  552.  
  553.  
  554.         switch(playerDrift [playerid])
  555.         {
  556.             case 000 .. 100: string = "~n~Drift";
  557.             case 101 .. 400: string = "~n~Good Drift";
  558.             case 401 .. 1200: string = "~n~Great Drift";
  559.  
  560.             case 1201 .. 3800: string = "~n~SUPERB DRIFT!";
  561.             case 3801 .. 6000: string = "~n~COLOSSAL DRIFT!";
  562.             case 6001 .. 20000: string = "~n~OUTRAGEOUS DRIFT!";
  563.             case 20001 .. 40000: string = "~n~INSANE DRIFT!";
  564.             default:  string = "~n~~r~DRIFT KING!";
  565.  
  566.  
  567.         }
  568.         format(string, 128, "%0d%s", playerDrift [playerid], string);
  569.  
  570.  
  571.         TextDrawSetString(NSFDraw[playerid], string);
  572.  
  573.         KillTimer(bruno[playerid]);
  574.  
  575.         bruno[playerid] = SetTimerEx("DriftCheck", 1700, false, "id", playerDrift[playerid], playerid);
  576.  
  577.     }
  578.     return true;
  579. }
  580.  
  581. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  582. {
  583.     if(playerDrift[playerid] > 50) {
  584.         playerDrift[playerid] = 0;
  585.         TextDrawSetString(NSFDraw[playerid], "~r~FAIL");
  586.         KillTimer(bruno[playerid]);
  587.     }
  588.     return 1;
  589. }
  590.  
  591. function::DriftCheck(score, playerid) {
  592.  
  593.     if(playerDrift[playerid] == score && !JogadorJogando{playerid}) {
  594.             TextDrawSetString(TextDrawInfo[playerid], "~g~Drifted !!");
  595.             if(playerDrift[playerid] > 25000)
  596.             {
  597.                 new string[128];
  598.                 new nome[32];
  599.  
  600.                 GetPlayerName(playerid, nome, 32);
  601.                 if(playerDrift [playerid] > ReadRank(nome)) {
  602.                     WriteRank(nome, playerDrift [playerid]);
  603.  
  604.                     format(string, 128, "[Info] O jogador \"%s\" chegou à seu recorde de %d em um único drift !!", nome, playerDrift [playerid]);
  605.                     SendClientMessageToAll(0x00FF00FF, string);
  606.                 }
  607.             }
  608.  
  609.             SetPlayerScore(playerid, GetPlayerScore(playerid) + (playerDrift[playerid]/600));
  610.             new string[256];
  611.             format(string, 256, "~n~~w~Drift Pontos: ~r~%d",   getScoreData(playerid));
  612.             TextDrawSetString(TextDrawInfo[playerid], string);
  613.             salvarJogador(playerid);
  614.             playerDrift[playerid] = 0;
  615.             TextDrawHideForPlayer(playerid, NSFDraw[playerid]);
  616.     }
  617.     return true;
  618. }
  619.  
  620. function::DriftCounter() {
  621.  
  622.  
  623.     for (new i; i != MAX_PLAYERS; i++) {
  624.         if(IsPlayerInAnyVehicle(i)) {
  625.  
  626.             new vehicleid = GetPlayerVehicleID(i);
  627.  
  628.             if(IsCarVehicle(vehicleid)) {
  629.  
  630.                 new Float:x, Float:y, Float:z;
  631.                 GetVehicleVelocity(vehicleid, x, y, z);
  632.  
  633.                 new speed = floatround(floatsqroot(x*x+y*y+z*z)*200);
  634.  
  635.                 if(speed > 1.0) {
  636.  
  637.                     new radianos = floatround( atan2( y, x ) );
  638.  
  639.                     if(radianos > 400) radianos -= 400;
  640.  
  641.                     switch(radianos) {
  642.                         case 090 .. 180: radianos -= 90;
  643.                         case 181 .. 360: radianos += 90;
  644.                         default: radianos += 270;
  645.                     }
  646.  
  647.  
  648.                     ////////////////////////////////////////////////////////////////
  649.  
  650.                     static
  651.                         Float: angle
  652.                     ;
  653.  
  654.                     GetVehicleZAngle(vehicleid, angle);
  655.  
  656.                     radianos = floatround( floatabs( radianos - angle ) );
  657.  
  658.                     if(radianos > 180) {
  659.                         radianos = floatround( floatabs ( radianos - 360 ) );
  660.                     }
  661.  
  662.                     new
  663.                       key[3];
  664.  
  665.                     GetPlayerKeys(i, key[0], key[1], key[2]);
  666.  
  667.                     if( key[0] != 32 && speed > 23 )
  668.                     {
  669.                         if( radianos > 3 && ((radianos * speed) / 30)  < 300) {
  670.                             DriftEarn(i, (radianos * speed) / 35 ) ;
  671.                         }
  672.                     }
  673.  
  674.                     ////////////////////////////////////////////////////////////////
  675.  
  676.                 }
  677.             }
  678.         }
  679.     }
  680.  
  681.     return true;
  682.  
  683. }
  684.  
  685.  
  686. ///////////////////////////////////////////////////////////////////////////////
  687. //
  688. // @function: SpawnEx — Correção para SpawnPlayer
  689. // @author: Bruno da Silva
  690. //
  691. //////////////////////////////////////////////////////////////////////////////
  692.  
  693. function::SpawnEx(playerid) {
  694.     SpawnPlayer(playerid);
  695.     return true;
  696. }
  697.  
  698.  
  699. ///////////////////////////////////////////////////////////////////////////////
  700. //
  701. // @function: sscanf
  702. // @author: Y_less
  703. //
  704. //////////////////////////////////////////////////////////////////////////////
  705.  
  706. function::sscanf(string[], format[], {Float,_}:...)
  707. {
  708.     #if defined isnull
  709.         if (isnull(string))
  710.     #else
  711.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  712.     #endif
  713.         {
  714.             return format[0];
  715.         }
  716.     #pragma tabsize 4
  717.     new
  718.         formatPos = 0,
  719.         stringPos = 0,
  720.         paramPos = 2,
  721.         paramCount = numargs(),
  722.         delim = ' ';
  723.     while (string[stringPos] && string[stringPos] <= ' ')
  724.     {
  725.         stringPos++;
  726.     }
  727.     while (paramPos < paramCount && string[stringPos])
  728.     {
  729.         switch (format[formatPos++])
  730.         {
  731.             case '\0':
  732.             {
  733.                 return 0;
  734.             }
  735.             case 'i', 'd':
  736.             {
  737.                 new
  738.                     neg = 1,
  739.                     num = 0,
  740.                     ch = string[stringPos];
  741.                 if (ch == '-')
  742.                 {
  743.                     neg = -1;
  744.                     ch = string[++stringPos];
  745.                 }
  746.                 do
  747.                 {
  748.                     stringPos++;
  749.                     if ('0' <= ch <= '9')
  750.                     {
  751.                         num = (num * 10) + (ch - '0');
  752.                     }
  753.                     else
  754.                     {
  755.                         return -1;
  756.                     }
  757.                 }
  758.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  759.                 setarg(paramPos, 0, num * neg);
  760.             }
  761.             case 'h', 'x':
  762.             {
  763.                 new
  764.                     num = 0,
  765.                     ch = string[stringPos];
  766.                 do
  767.                 {
  768.                     stringPos++;
  769.                     switch (ch)
  770.                     {
  771.                         case 'x', 'X':
  772.                         {
  773.                             num = 0;
  774.                             continue;
  775.                         }
  776.                         case '0' .. '9':
  777.                         {
  778.                             num = (num << 4) | (ch - '0');
  779.                         }
  780.                         case 'a' .. 'f':
  781.                         {
  782.                             num = (num << 4) | (ch - ('a' - 10));
  783.                         }
  784.                         case 'A' .. 'F':
  785.                         {
  786.                             num = (num << 4) | (ch - ('A' - 10));
  787.                         }
  788.                         default:
  789.                         {
  790.                             return -1;
  791.                         }
  792.                     }
  793.                 }
  794.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  795.                 setarg(paramPos, 0, num);
  796.             }
  797.             case 'c':
  798.             {
  799.                 setarg(paramPos, 0, string[stringPos++]);
  800.             }
  801.             case 'f':
  802.             {
  803.  
  804.                 new changestr[16], changepos = 0, strpos = stringPos;
  805.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  806.                 {
  807.                     changestr[changepos++] = string[strpos++];
  808.                     }
  809.                 changestr[changepos] = '\0';
  810.                 setarg(paramPos,0,_:floatstr(changestr));
  811.             }
  812.             case 'p':
  813.             {
  814.                 delim = format[formatPos++];
  815.                 continue;
  816.             }
  817.             case '\'':
  818.             {
  819.                 new
  820.                     end = formatPos - 1,
  821.                     ch;
  822.                 while ((ch = format[++end]) && ch != '\'') {}
  823.                 if (!ch)
  824.                 {
  825.                     return -1;
  826.                 }
  827.                 format[end] = '\0';
  828.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  829.                 {
  830.                     if (format[end + 1])
  831.                     {
  832.                         return -1;
  833.                     }
  834.                     return 0;
  835.                 }
  836.                 format[end] = '\'';
  837.                 stringPos = ch + (end - formatPos);
  838.                 formatPos = end + 1;
  839.             }
  840.             case 'u':
  841.             {
  842.                 new
  843.                     end = stringPos - 1,
  844.                     id = 0,
  845.                     bool:num = true,
  846.                     ch;
  847.                 while ((ch = string[++end]) && ch != delim)
  848.                 {
  849.                     if (num)
  850.                     {
  851.                         if ('0' <= ch <= '9')
  852.                         {
  853.                             id = (id * 10) + (ch - '0');
  854.                         }
  855.                         else
  856.                         {
  857.                             num = false;
  858.                         }
  859.                     }
  860.                 }
  861.                 if (num && IsPlayerConnected(id))
  862.                 {
  863.                     setarg(paramPos, 0, id);
  864.                 }
  865.                 else
  866.                 {
  867.                     #if !defined foreach
  868.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  869.                         #define __SSCANF_FOREACH__
  870.                     #endif
  871.                     string[end] = '\0';
  872.                     num = false;
  873.                     new
  874.                         name[MAX_PLAYER_NAME];
  875.                     id = end - stringPos;
  876.                     foreach (Player, playerid)
  877.                     {
  878.                         GetPlayerName(playerid, name, sizeof (name));
  879.                         if (!strcmp(name, string[stringPos], true, id))
  880.                         {
  881.                             setarg(paramPos, 0, playerid);
  882.                             num = true;
  883.                             break;
  884.                         }
  885.                     }
  886.                     if (!num)
  887.                     {
  888.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  889.                     }
  890.                     string[end] = ch;
  891.                     #if defined __SSCANF_FOREACH__
  892.                         #undef foreach
  893.                         #undef __SSCANF_FOREACH__
  894.                     #endif
  895.                 }
  896.                 stringPos = end;
  897.             }
  898.             case 's', 'z':
  899.             {
  900.                 new
  901.                     i = 0,
  902.                     ch;
  903.                 if (format[formatPos])
  904.                 {
  905.                     while ((ch = string[stringPos++]) && ch != delim)
  906.                     {
  907.                         setarg(paramPos, i++, ch);
  908.                     }
  909.                     if (!i)
  910.                     {
  911.                         return -1;
  912.                     }
  913.                 }
  914.                 else
  915.                 {
  916.                     while ((ch = string[stringPos++]))
  917.                     {
  918.                         setarg(paramPos, i++, ch);
  919.                     }
  920.                 }
  921.                 stringPos--;
  922.                 setarg(paramPos, i, '\0');
  923.             }
  924.             default:
  925.             {
  926.                 continue;
  927.             }
  928.         }
  929.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  930.         {
  931.             stringPos++;
  932.         }
  933.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  934.         {
  935.             stringPos++;
  936.         }
  937.         paramPos++;
  938.     }
  939.     do
  940.     {
  941.         if ((delim = format[formatPos++]) > ' ')
  942.         {
  943.             if (delim == '\'')
  944.             {
  945.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  946.             }
  947.             else if (delim != 'z')
  948.             {
  949.                 return delim;
  950.             }
  951.         }
  952.     }
  953.     while (delim > ' ');
  954.     return 0;
  955. }
  956.  
  957.  
  958.  
  959. ///////////////////////////////////////////////////////////////////////////////
  960. //
  961. // @function: Is Car Vehicle 1/0
  962. // @author: Made Man
  963. //
  964. //////////////////////////////////////////////////////////////////////////////
  965.  
  966. function::IsCarVehicle(vehicleid)
  967. {
  968.     switch(GetVehicleModel(vehicleid))
  969.     {
  970.         case
  971.             416, //ambulan - car
  972.             445, //admiral - car
  973.             602, //alpha - car
  974.             485, //baggage - car
  975.             568, //bandito - car
  976.             429, //banshee - car
  977.             499, //benson - car
  978.             424, //bfinject, //car
  979.             536, //blade - car
  980.             496, //blistac - car
  981.             504, //bloodra - car
  982.             422, //bobcat - car
  983.             609, //boxburg - car
  984.             498, //boxville, //car
  985.             401, //bravura - car
  986.             575, //broadway, //car
  987.             518, //buccanee, //car
  988.             402, //buffalo - car
  989.             541, //bullet - car
  990.             482, //burrito - car
  991.             431, //bus - car
  992.             438, //cabbie - car
  993.             457, //caddy - car
  994.             527, //cadrona - car
  995.             483, //camper - car
  996.             524, //cement - car
  997.             415, //cheetah - car
  998.             542, //clover - car
  999.             589, //club - car
  1000.             480, //comet - car
  1001.             596, //copcarla, //car
  1002.             599, //copcarru, //car
  1003.             597, //copcarsf, //car
  1004.             598, //copcarvg, //car
  1005.             578, //dft30 - car
  1006.             486, //dozer - car
  1007.             507, //elegant - car
  1008.             562, //elegy - car
  1009.             585, //emperor - car
  1010.             427, //enforcer, //car
  1011.             419, //esperant, //car
  1012.             587, //euros - car
  1013.             490, //fbiranch, //car
  1014.             528, //fbitruck, //car
  1015.             533, //feltzer - car
  1016.             544, //firela - car
  1017.             407, //firetruk, //car
  1018.             565, //flash - car
  1019.             455, //flatbed - car
  1020.             530, //forklift, //car
  1021.             526, //fortune - car
  1022.             466, //glendale, //car
  1023.             604, //glenshit, //car
  1024.             492, //greenwoo, //car
  1025.             474, //hermes - car
  1026.             434, //hotknife, //car
  1027.             502, //hotrina - car
  1028.             503, //hotrinb - car
  1029.             494, //hotring - car
  1030.             579, //huntley - car
  1031.             545, //hustler - car
  1032.             411, //infernus, //car
  1033.             546, //intruder, //car
  1034.             559, //jester - car
  1035.             508, //journey - car
  1036.             571, //kart - car
  1037.             400, //landstal, //car
  1038.             403, //linerun - car
  1039.             517, //majestic, //car
  1040.             410, //manana - car
  1041.             551, //merit - car
  1042.             500, //mesa - car
  1043.             418, //moonbeam, //car
  1044.             572, //mower - car
  1045.             423, //mrwhoop - car
  1046.             516, //nebula - car
  1047.             582, //newsvan - car
  1048.             467, //oceanic - car
  1049.             404, //peren - car
  1050.             514, //petro - car
  1051.             603, //phoenix - car
  1052.             600, //picador - car
  1053.             413, //pony - car
  1054.             426, //premier - car
  1055.             436, //previon - car
  1056.             547, //primo - car
  1057.             489, //rancher - car
  1058.             441, //rcbandit, //car
  1059.             594, //rccam - car
  1060.             564, //rctiger - car
  1061.             515, //rdtrain - car
  1062.             479, //regina - car
  1063.             534, //remingtn, //car
  1064.             505, //rnchlure, //car
  1065.             442, //romero - car
  1066.             440, //rumpo - car
  1067.             475, //sabre - car
  1068.             543, //sadler - car
  1069.             605, //sadlshit, //car
  1070.             495, //sandking, //car
  1071.             567, //savanna - car
  1072.             428, //securica, //car
  1073.             405, //sentinel, //car
  1074.             535, //slamvan - car
  1075.             458, //solair - car
  1076.             580, //stafford, //car
  1077.             439, //stallion, //car
  1078.             561, //stratum - car
  1079.             409, //stretch - car
  1080.             560, //sultan - car
  1081.             550, //sunrise - car
  1082.             506, //supergt - car
  1083.             601, //swatvan - car
  1084.             574, //sweeper - car
  1085.             566, //tahoma - car
  1086.             549, //tampa - car
  1087.             420, //taxi - car
  1088.             459, //topfun - car
  1089.             576, //tornado - car
  1090.             583, //tug - car
  1091.             451, //turismo - car
  1092.             558, //uranus - car
  1093.             552, //utility - car
  1094.             540, //vincent - car
  1095.             491, //virgo - car
  1096.             412, //voodoo - car
  1097.             478, //walton - car
  1098.             421, //washing - car
  1099.             529, //willard - car
  1100.             555, //windsor - car
  1101.             456, //yankee - car
  1102.             554, //yosemite - car
  1103.             477 //zr350 - car
  1104.         :
  1105.         return true;
  1106.     }
  1107.     return false;
  1108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement