Rei_Ayanami

[GM] Arcade [iPs]TeaM (DM) 1.0

Apr 27th, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3.               ____ _____  _         _                      _
  4.              / ___|_   _|/ \       / \   _ __ ___ __ _  __| | ___
  5.             | |  _  | | / _ \     / _ \ | '__/ __/ _` |/ _` |/ _ \
  6.             | |_| | | |/ ___ \   / ___ \| | | (_| (_| | (_| |  __/
  7.              \____| |_/_/   \_\ /_/   \_\_|  \___\__,_|\__,_|\___|
  8.  
  9.           Criado por Bruno da Silva e Robson ([iPs]DraKiNs & [S]trong)
  10.  
  11.                         www.ips-team.blogpsot.com
  12.  
  13.  
  14.     Desenvolvimento Geral:
  15.         Modo de jogo em geral criado e idealizado por Bruno e Robson.
  16.  
  17.     Agradecimentos a:
  18.                 Diogo Bras - Ajuda com base no teste do código
  19.                
  20. */
  21.  
  22. //====================== [ Diretivas ] =========================================
  23.  
  24. #include a_samp
  25. #include a_sii
  26.  
  27. #define SERVIDOR_MODE    "(Arcade) (Death Match)"
  28.  
  29. #undef  MAX_PLAYERS
  30. #undef  MAX_PICKUPS
  31.  
  32. #define MAX_PLAYERS                                                             (32)
  33. #define MAX_RANK                                                                (5)
  34. #define MAX_PICKUPS                                                             (90)
  35.  
  36. #define ContaPlayer     "Contas/%s.ini"
  37.  
  38. #define DialogLogin     (006)
  39. #define DialogRegistro  (007)
  40.  
  41. #define COLOR_LIGHTGREEN 0xB8FF00FF
  42. #define COLOR_GREYGREEN  0xCCDD66FF
  43. #define COLOR_DARKBLUE   0x9966FFFF
  44. #define COLOR_PEPPER     0xDD3333FF
  45. #define COLOR_YELLOW     0xFFEA00FF
  46. #define COLOR_ORANGE     0xFAAB00FF
  47. #define COLOR_WHITE      0xFFFFFFFF
  48. #define COLOR_RED        0xFF0000FF
  49.  
  50. #define cmd(%1,%2,%3)                                                           @%1(%2,%3);  public @%1(%2,%3)
  51. #define TRACAR_SERVIDOR                                                         0
  52.  
  53. //====================== [ Declarações ] =======================================
  54.  
  55. checarPause();
  56. iniciarSistema();
  57. tirarSpawnKill(i);
  58. atualizarContagem();
  59. MoveCamera(playerid,rand);
  60. DestroyPickupEx(pickupid);
  61. forward OnPlayerSyncronize(playerid);
  62.  
  63. enum pInfo
  64. {
  65.     bool:SpawnDance,
  66.     Float:SpawnAngle,
  67.     SpawnTimer
  68. };
  69.  
  70. new
  71.     selecaoFechada[MAX_PLAYERS char],
  72.     SkinClass[MAX_PLAYERS char][pInfo]
  73. ;
  74.  
  75. new
  76.     string_contar[50],
  77.     totalContagem;
  78.  
  79. new
  80.     Float:cordinatex,
  81.     Float:cordinatey,
  82.     Float:cordinatez,
  83.     Float:cordinateangle;
  84.  
  85. new Float:pedirCameraSpawn[9][4] =
  86. {
  87.     {1296.4391,1583.2622,50.2969,317.8491},
  88.     {1054.8481,1019.7778,57.3438,95.0108},
  89.     {1452.0229,750.9430,32.6900,88.4309},
  90.     {2213.8701,1679.2406,57.3038,91.4144 },
  91.     {746.1910,740.3755,29.1076,24.4488},
  92.     {199.7275,1393.2085,47.8297,179.5663},
  93.     {596.4931,1502.9486,9.0578,29.4318},
  94.     {-207.8227,1901.1121,128.4624,68.0533},
  95.     {-2387.3440,2401.0579,20.7627,240.9129}
  96. };
  97.  
  98. new
  99.     Text:introTextDraw1,
  100.     Text:introTextDraw2,
  101.     Text:introTextDraw3,
  102.     Text:introTextDraw4,
  103.     Text:introTextDraw5;
  104.  
  105. new nicksProibido[][MAX_PLAYER_NAME] =
  106. {
  107.     "com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9",
  108.     "Carl","Rocky","Sony","clock$","prn","nul","con",   "Azucar","CON","con","con1","aux","aux1","prn","PRN","AUX"
  109. };
  110.  
  111. enum PlayerData
  112. {
  113.     sync,
  114.     spree,
  115.     kills,
  116.     deaths,
  117.     pontos,
  118.     updatetime,
  119.     bool:paused
  120. }
  121.  
  122.  
  123. new
  124.     maximoAreas = 0,
  125.     gangZoneAtual = 0,
  126.     circuitoArquivo = 0,
  127.     Text:tempoAtualRound,
  128.     jogadoresConectados = 0,
  129.     armaPickup[MAX_PICKUPS],
  130.     jogadoresLoop[MAX_PLAYERS],
  131.     Float:posicoesAreas[4000][4],
  132.     armamentoPickup[MAX_PICKUPS],
  133.     pickupFerramentas[MAX_PICKUPS],
  134.     Text3D:atacarTexto[MAX_PLAYERS],
  135.     Float:armazenarAreaAtual[400][4],
  136.     bool:jogadorNoRanking[MAX_PLAYERS],
  137.     PlayerInfo[MAX_PLAYERS][PlayerData],
  138.     jogadorRanking[MAX_RANK] = {-1, ...},
  139.     jogadorRankingID[MAX_PLAYERS] = {-1, ...};
  140.  
  141. //====================== [ Variaveis Públicas ] ================================
  142.  
  143. public OnGameModeExit()
  144. {
  145.     TextDrawHideForAll(introTextDraw1);
  146.     TextDrawDestroy(introTextDraw1);
  147.     TextDrawHideForAll(introTextDraw2);
  148.     TextDrawDestroy(introTextDraw2);
  149.     TextDrawHideForAll(introTextDraw3);
  150.     TextDrawDestroy(introTextDraw3);
  151.     TextDrawHideForAll(introTextDraw4);
  152.     TextDrawDestroy(introTextDraw4);
  153.     TextDrawHideForAll(introTextDraw5);
  154.     TextDrawDestroy(introTextDraw5);
  155.     return true;
  156. }
  157.  
  158.  
  159. main()
  160. {
  161.     new
  162.         buuferArquivo[164],
  163.         stringPosicao[3][46],
  164.         divisoresAchados = 0;
  165.  
  166.     new File:lerArquivo = fopen("randomSpawn.txt", io_read);
  167.     while(fread(lerArquivo, buuferArquivo)) {     //reads the file line-by-line
  168.    
  169.         divisoresAchados = 0;
  170.  
  171.         for(new i; buuferArquivo[i]; i++) {
  172.             if(buuferArquivo[i] == ',') {
  173.                 divisoresAchados++;
  174.             }
  175.         }
  176.  
  177.         if(divisoresAchados != 2) {
  178.             continue;
  179.         }
  180.  
  181.         split(buuferArquivo, stringPosicao, ',');
  182.  
  183.         posicoesAreas[circuitoArquivo][0] = floatstr(stringPosicao[0]),
  184.             posicoesAreas[circuitoArquivo][1] = floatstr(stringPosicao[1]),
  185.             posicoesAreas[circuitoArquivo][2] = floatstr(stringPosicao[2]),
  186.             ++circuitoArquivo;
  187.  
  188.     }
  189.     fclose(lerArquivo);
  190.  
  191.     state estadoServidor:destrancar;
  192.  
  193.     tempoAtualRound = TextDrawCreate(015, 333,!"Tempo: %02d/600");
  194.     TextDrawAlignment(tempoAtualRound,0);
  195.     TextDrawBackgroundColor(tempoAtualRound,0x000000ff);
  196.     TextDrawFont(tempoAtualRound,1);
  197.     TextDrawLetterSize(tempoAtualRound,0.2999, 0.9);
  198.     TextDrawBoxColor(tempoAtualRound,0x00000050);
  199.     TextDrawColor(tempoAtualRound,0xffffffff);
  200.     TextDrawSetOutline(tempoAtualRound,1);
  201.     TextDrawSetProportional(tempoAtualRound,1);
  202.     TextDrawSetShadow(tempoAtualRound,1);
  203.  
  204.     for(new skinAtual = 0; skinAtual != 300; skinAtual++) {
  205.         if (IsValidSkin(skinAtual)) {
  206.             AddPlayerClass(skinAtual, 2088.0701, 2074.0896, 10.8203, 273.3924, 3, 1, 0, 0, 0, 0);
  207.         }
  208.         continue;
  209.     }
  210.  
  211.     introTextDraw1 = TextDrawCreate(240.000000, 83.000000, "GTA Arcade");
  212.     TextDrawBackgroundColor(introTextDraw1, 255);
  213.     TextDrawFont(introTextDraw1, 1);
  214.     TextDrawLetterSize(introTextDraw1, 0.789999, 2.200000);
  215.     TextDrawColor(introTextDraw1, -1);
  216.     TextDrawSetOutline(introTextDraw1, 1);
  217.     TextDrawSetProportional(introTextDraw1, 1);
  218.  
  219.     introTextDraw2 = TextDrawCreate(654.000000, 0.000000, ".");
  220.     TextDrawBackgroundColor(introTextDraw2, 255);
  221.     TextDrawFont(introTextDraw2, 1);
  222.     TextDrawLetterSize(introTextDraw2, 0.500000, 4.999997);
  223.     TextDrawColor(introTextDraw2, -1);
  224.     TextDrawSetOutline(introTextDraw2, 0);
  225.     TextDrawSetProportional(introTextDraw2, 1);
  226.     TextDrawSetShadow(introTextDraw2, 1);
  227.     TextDrawUseBox(introTextDraw2, 1);
  228.     TextDrawBoxColor(introTextDraw2, 255);
  229.     TextDrawTextSize(introTextDraw2, -18.000000, 5.000000);
  230.  
  231.     introTextDraw3 = TextDrawCreate(654.000000, 408.000000, "a ~n~a");
  232.     TextDrawBackgroundColor(introTextDraw3, 255);
  233.     TextDrawFont(introTextDraw3, 1);
  234.     TextDrawLetterSize(introTextDraw3, 0.500000, 4.999997);
  235.     TextDrawColor(introTextDraw3, -1);
  236.     TextDrawSetOutline(introTextDraw3, 0);
  237.     TextDrawSetProportional(introTextDraw3, 1);
  238.     TextDrawSetShadow(introTextDraw3, 1);
  239.     TextDrawUseBox(introTextDraw3, 1);
  240.     TextDrawBoxColor(introTextDraw3, 255);
  241.     TextDrawTextSize(introTextDraw3, -18.000000, 5.000000);
  242.  
  243.     introTextDraw4 = TextDrawCreate(206.000000, 429.000000, "www.ips-team.blogspot.com");
  244.     TextDrawBackgroundColor(introTextDraw4, 255);
  245.     TextDrawFont(introTextDraw4, 1);
  246.     TextDrawLetterSize(introTextDraw4, 0.420000, 1.300000);
  247.     TextDrawColor(introTextDraw4, -1);
  248.     TextDrawSetOutline(introTextDraw4, 0);
  249.     TextDrawSetProportional(introTextDraw4, 1);
  250.     TextDrawSetShadow(introTextDraw4, 1);
  251.  
  252.     introTextDraw5 = TextDrawCreate(199.000000, 189.000000, " ");
  253.     TextDrawBackgroundColor(introTextDraw5, 255);
  254.     TextDrawFont(introTextDraw5, 1);
  255.     TextDrawLetterSize(introTextDraw5, 0.500000, 2.000000);
  256.     TextDrawColor(introTextDraw5, -1);
  257.     TextDrawSetOutline(introTextDraw5, 0);
  258.     TextDrawSetProportional(introTextDraw5, 1);
  259.     TextDrawSetShadow(introTextDraw5, 1);
  260.  
  261.     UsePlayerPedAnims();
  262.  
  263.     SendRconCommand("mapname [iPs] TeaM");
  264.     SendRconCommand("gamemodetext [iPs]Arcade GameMode");
  265.     SendRconCommand("weburl www.ips-team.blogspot.com");
  266.     SendRconCommand("hostname Servidor Arcade » [iPs]TeaM - Entre Já!");
  267.  
  268.     iniciarSistema();
  269.     atualizarContagem();
  270.     SetTimer("checarPause", 1000, true);
  271.  
  272.     new compilar[][] = {"\x?","\x?"};
  273. #pragma unused compilar
  274.     return true;
  275. }
  276.  
  277.  
  278. public OnPlayerConnect(playerid) <estadoServidor:destrancar>
  279. {
  280.     for(new i; i != _:PlayerData; i++) {
  281.         PlayerInfo[playerid][PlayerData:i]  = 0;
  282.     }
  283.  
  284.     for(new i; i != sizeof(nicksProibido); i++) {
  285.         if(!strcmp(nicksProibido[i],GetPlayerNick(playerid),true)) {
  286.             SendClientMessage(playerid,0xCC0000FF,"-OperServ- Seu nickname é inválido, você foi banido");
  287.             Ban(playerid);
  288.         }
  289.         continue;
  290.     }
  291.  
  292.     selecaoFechada{playerid} =0;
  293.  
  294.     ApplyAnimation(playerid,"BOMBER","null",0.0,0,0,0,0,0);
  295.     ApplyAnimation(playerid,"SHOP","null",0.0,0,0,0,0,0);
  296.     ApplyAnimation(playerid,"RAPPING","null",0.0,0,0,0,0,0);
  297.     ApplyAnimation(playerid,"BEACH","null",0.0,0,0,0,0,0);
  298.     ApplyAnimation(playerid,"SMOKING","null",0.0,0,0,0,0,0);
  299.  
  300.     ApplyAnimation(playerid,"FOOD","null",0.0,0,0,0,0,0);
  301.     ApplyAnimation(playerid,"ON_LOOKERS","null",0.0,0,0,0,0,0);
  302.     ApplyAnimation(playerid,"DEALER","null",0.0,0,0,0,0,0);
  303.     ApplyAnimation(playerid,"CARRY","null",0.0,0,0,0,0,0);
  304.     ApplyAnimation(playerid,"COP_AMBIENT","null",0.0,0,0,0,0,0);
  305.  
  306.     ApplyAnimation(playerid,"PARK","null",0.0,0,0,0,0,0);
  307.     ApplyAnimation(playerid,"INT_HOUSE","null",0.0,0,0,0,0,0);
  308.     ApplyAnimation(playerid,"FOOD","null",0.0,0,0,0,0,0);
  309.  
  310.     ApplyAnimation(playerid,"PED","null",0.0,0,0,0,0,0);
  311.  
  312.     SkinClass[playerid][SpawnDance] = true;
  313.     ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1);
  314.  
  315.     SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # );
  316.     SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # );
  317.     SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # );
  318.  
  319.     return jogadoresLoop[jogadoresConectados++] = playerid, SetTimerEx("mostrarDialog", 800, false, "d", playerid);
  320. }
  321.  
  322.  
  323. mostrarDialog(playerid);
  324. public mostrarDialog(playerid)
  325. {
  326.     static pName[128];
  327.     SendDeathMessage(255,playerid,200);
  328.  
  329.     format(pName, 54, ContaPlayer, GetPlayerNick(playerid));
  330.  
  331.     if(!fexist(pName)) {
  332.         format(pName, sizeof(pName), "{CCCCCC}Bem vindo ao Arcade [iPs]TeaM (DM) 1.0\nA conta {999933}%s{CCCCCC} não está registrada\nPor favor insira uma senha para registrá-la:", GetPlayerNick(playerid));
  333.         ShowPlayerDialog(playerid, DialogRegistro, DIALOG_STYLE_INPUT, "Cadastrar", pName, "Continuar", "Cancelar");
  334.     }
  335.     else {
  336.         format(pName, sizeof(pName), "{CCCCCC}Bem vindo ao Arcade [iPs]TeaM (DM) 1.0\nA conta {999933}%s{CCCCCC} está registrada\nPor favor insira a sua senha para autenticar:", GetPlayerNick(playerid));
  337.         ShowPlayerDialog(playerid, DialogLogin, DIALOG_STYLE_INPUT, "Autenticar Conta de Usuário", pName, "Autenticar", "Cancelar");
  338.     }
  339.     return true;
  340. }
  341.  
  342.  
  343. public OnPlayerDisconnect(playerid, reason)
  344. {
  345.     if (!IsPlayerNPC(playerid)) {
  346.         for (new i; i < jogadoresConectados; i++) if (jogadoresLoop[i] == playerid) {
  347.             jogadoresConectados--;
  348.  
  349.             jogadoresLoop[i] = jogadoresLoop[jogadoresConectados];
  350.  
  351.             break;
  352.         }
  353.     }
  354.  
  355.     SendDeathMessage(255,playerid,201);
  356.  
  357.     static pName[128];
  358.     format(pName, 54, ContaPlayer, GetPlayerNick(playerid));
  359.  
  360.     if(!fexist(pName)) return false;
  361.  
  362.     INI_Open(pName);
  363.     INI_WriteInt("Kills",   PlayerInfo[playerid][kills]);
  364.  
  365.     INI_WriteInt("Deaths",  PlayerInfo[playerid][deaths]);
  366.  
  367.     INI_WriteInt("Score",   PlayerInfo[playerid][pontos]);
  368.     INI_Save();
  369.  
  370.     return INI_Close(), true;
  371. }
  372.  
  373.  
  374. //==============================================================================
  375.  
  376. public OnPlayerSpawn(playerid)
  377. {
  378.     if(!PlayerInfo[playerid][sync]) {
  379.         TextDrawShowForPlayer(playerid, tempoAtualRound);
  380.  
  381.         SetPlayerHealth(playerid, Float:0x7F800000);
  382.  
  383.         SendClientMessage(playerid,COLOR_YELLOW, "-InfoServ- Aproveite, você tem 5 segundos de Anti Spawn Kill.");
  384.  
  385.         new randomPos = random(maximoAreas);
  386.         SetPlayerPos(playerid, armazenarAreaAtual[randomPos][0], armazenarAreaAtual[randomPos][1], armazenarAreaAtual[randomPos][2] + 1.5);
  387.  
  388.         SetTimerEx("tirarSpawnKill", 5000, false, "i", playerid);
  389.     }
  390.     else PlayerInfo[playerid][sync] = false;
  391.  
  392.     TextDrawHideForPlayer(playerid, introTextDraw1);
  393.     TextDrawHideForPlayer(playerid, introTextDraw2);
  394.     TextDrawHideForPlayer(playerid, introTextDraw3);
  395.     TextDrawHideForPlayer(playerid, introTextDraw4);
  396.     TextDrawHideForPlayer(playerid, introTextDraw5);
  397.  
  398.     TextDrawHideForPlayer(playerid, tempoAtualRound);
  399.     TextDrawShowForPlayer(playerid, tempoAtualRound);
  400.  
  401.     selecaoFechada{playerid}
  402.     =0;
  403.     SkinClass[playerid][SpawnAngle] = 0.0;
  404.     SkinClass[playerid][SpawnDance] = true;
  405.     KillTimer( SkinClass[playerid][SpawnTimer] );
  406.  
  407.     SetCameraBehindPlayer(playerid);
  408.     return PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
  409. }
  410.  
  411.  
  412. public OnPlayerRequestClass(playerid, classid)
  413. {
  414.     PlayerPlaySound(playerid,1076,0.0,0.0,0.0);
  415.     SetPlayerTime(playerid,23,0);
  416.     SetPlayerWeather(playerid,15);
  417.  
  418.     SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # );
  419.     SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # ); SendClientMessage(playerid, -1, # );
  420.     SendClientMessage(playerid,COLOR_DARKBLUE,"Seja bem vindo ao servidor [iPs]TeaM " SERVIDOR_MODE);
  421.  
  422.     SendClientMessage(playerid,COLOR_ORANGE,"Leia nossas regras com cuidado, você às encontra no /regras.");
  423.     SendClientMessage(playerid,COLOR_YELLOW,"Digite /admins para ver a lista de administradores online.");
  424.     SendClientMessage(playerid,COLOR_LIGHTGREEN,"Use /report para reportar jogadores que quebrem as regras.");
  425.     SendClientMessage(playerid,COLOR_GREYGREEN,"Visite também o nosso blog www.ips-team.blogspot.com");
  426.  
  427.     TextDrawShowForPlayer(playerid, introTextDraw1);
  428.     TextDrawShowForPlayer(playerid, introTextDraw2);
  429.     TextDrawShowForPlayer(playerid, introTextDraw3);
  430.  
  431.     TextDrawShowForPlayer(playerid, introTextDraw4);
  432.     TextDrawShowForPlayer(playerid, introTextDraw5);
  433.  
  434.     if(selecaoFechada{playerid} == 0) {
  435.         new rand = random(sizeof(pedirCameraSpawn));
  436.  
  437.         cordinatex = pedirCameraSpawn[rand][0];
  438.         cordinatey = pedirCameraSpawn[rand][1];
  439.         cordinatez = pedirCameraSpawn[rand][2];
  440.  
  441.         cordinateangle = pedirCameraSpawn[rand][3];
  442.  
  443.         SetPlayerPos(playerid,cordinatex,cordinatey,cordinatez);
  444.         SetPlayerFacingAngle(playerid, cordinateangle);
  445.  
  446.         SetPlayerCameraPos(playerid,cordinatex+(3.8*floatsin(-cordinateangle,degrees)),cordinatey+(3.8*floatcos(-cordinateangle,degrees)),cordinatez);
  447.         SetPlayerCameraLookAt(playerid, cordinatex,cordinatey,cordinatez);
  448.  
  449.         ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1);
  450.         PlayerPlaySound(playerid, 1097,-119.9460,23.1096,12.2238);
  451.  
  452.         if (SkinClass[playerid][SpawnDance]) SkinClass[playerid][SpawnTimer] = SetTimerEx("MoveCamera", 50, true, "i", playerid);
  453.         SkinClass[playerid][SpawnDance] = false;
  454.     }
  455.     return true;
  456. }
  457.  
  458.  
  459. public OnPlayerDeath(playerid, killerid, reason)
  460. {
  461.     static string[128];
  462.     GetPlayerName(killerid, string, MAX_PLAYER_NAME);
  463.  
  464.     if(IsPlayerConnected(killerid)) {
  465.         SendDeathMessage(killerid, playerid, reason);
  466.         SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
  467.  
  468.         PlayerInfo[killerid][pontos]++;
  469.  
  470.         PlayerInfo[killerid][kills]++;
  471.         PlayerInfo[playerid][deaths]++;
  472.  
  473.         PlayerInfo[killerid][spree]++,
  474.             PlayerInfo[playerid][spree] = 0;
  475.  
  476.         format(string, 54, ContaPlayer, string);
  477.  
  478.         if(!fexist(string)) return false;
  479.  
  480.         INI_Open(string);
  481.         INI_WriteInt("Kills",   PlayerInfo[killerid][kills]);
  482.         INI_WriteInt("Deaths",  PlayerInfo[killerid][deaths]);
  483.         INI_WriteInt("Score",   PlayerInfo[killerid][pontos]);
  484.  
  485.         GetPlayerName(killerid, string, MAX_PLAYER_NAME);
  486.  
  487.         if(PlayerInfo[killerid][spree] > INI_ReadInt("Spree")) {
  488.             INI_WriteInt("Spree",PlayerInfo[killerid][spree]);
  489.             SendClientMessage(killerid, 0x00FFFFFF, "-DeathServ- Você acaba de conseguir bater seu recorde de kills seguidos ");
  490.         }
  491.  
  492.         switch (PlayerInfo[killerid][spree]) {
  493.             case 3:
  494.             {
  495.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 3 seguidos (Owned)", string, killerid);
  496.                 SendClientMessageToAll(0x00FFFFFF, string);
  497.  
  498.                 GameTextForPlayer(killerid, "~r~Owned" ,5000,6);
  499.  
  500.             }
  501.             case 6:
  502.             {
  503.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 6 seguidos (Pwned)", string, killerid);
  504.                 SendClientMessageToAll(0x00FFFFFF, string);
  505.  
  506.                 GameTextForPlayer(killerid, "~r~Pwned" ,5000,6);
  507.             }
  508.             case 9:
  509.             {
  510.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 9 seguidos (Mito)", string, killerid);
  511.                 SendClientMessageToAll(0x00FFFFFF, string);
  512.                 GameTextForPlayer(killerid, "~r~Mito" ,5000,6);
  513.             }
  514.             case 12:
  515.             {
  516.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 12 seguidos (Serial Killer)", string, killerid);
  517.                 SendClientMessageToAll(0x00FFFFFF, string);
  518.  
  519.                 GameTextForPlayer(killerid, "~r~Serial Killer" ,5000,6);
  520.             }
  521.             case 17:
  522.             {
  523.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 17 seguidos (God Like)", string, killerid);
  524.                 SendClientMessageToAll(0x00FFFFFF, string);
  525.  
  526.                 GameTextForPlayer(killerid, "~r~God Like" ,5000,6);
  527.             }
  528.             case 25:
  529.             {
  530.                 format(string, 128, "-DeathServ- %s [%d] acaba de matar 25 seguidos (Chuck Norris)", string, killerid);
  531.                 SendClientMessageToAll(0x00FFFFFF, string);
  532.  
  533.                 GameTextForPlayer(killerid, "~r~Chuck Norris" ,5000,6);
  534.             }
  535.         }
  536.     }
  537.  
  538.     INI_Save();
  539.     INI_Close();
  540.  
  541.     SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
  542.  
  543.     new
  544.         informacaoArma[4],
  545.         Float:coordenadaPickup[5];
  546.  
  547.     GetPlayerPos(playerid,coordenadaPickup[0],coordenadaPickup[1],coordenadaPickup[2]);
  548.     GetPlayerFacingAngle(playerid,coordenadaPickup[3]);
  549.  
  550.     for(new x = 0; x < 13; x++) {
  551.         GetPlayerWeaponData(playerid,x,informacaoArma[0],informacaoArma[1]);
  552.         if(informacaoArma[0] != 0 && informacaoArma[1] > 0) {
  553.             switch(informacaoArma[0]) {
  554.                 case 1: informacaoArma[2] = 331;
  555.                 case 2..8: informacaoArma[2] = informacaoArma[0]+331;
  556.                 case 9: informacaoArma[2] = 341;
  557.  
  558.                 case 10..15: informacaoArma[2] = informacaoArma[0]+311;
  559.                 case 16..18: informacaoArma[2] = informacaoArma[0]+326;
  560.  
  561.                 case 22..29: informacaoArma[2] = informacaoArma[0]+324;
  562.                 case 30,31: informacaoArma[2] = informacaoArma[0]+325;
  563.                 case 32: informacaoArma[2] = 372;
  564.  
  565.                 case 33..45: informacaoArma[2] = informacaoArma[0]+324;
  566.                 case 46: informacaoArma[2] = 371;
  567.             }
  568.             informacaoArma[3] = CreatePickup(informacaoArma[2],3,coordenadaPickup[0]+ ( random( 10 ) * floatsin(-coordenadaPickup[4], degrees ) ),coordenadaPickup[1]+ ( random( 10 ) * floatcos( -coordenadaPickup[4], degrees ) ),coordenadaPickup[2],-1);
  569.             armaPickup[informacaoArma[3]] = informacaoArma[0];
  570.  
  571.             pickupFerramentas[informacaoArma[3]] = informacaoArma[1];
  572.  
  573.             armamentoPickup[informacaoArma[3]] = SetTimerEx("DestroyPickupEx",15000,false,"i",informacaoArma[3]);
  574.             coordenadaPickup[4] = random(360);
  575.         }
  576.     }
  577.  
  578.     format(string, 54, ContaPlayer, GetPlayerNick(playerid));
  579.  
  580.     if(!fexist(string)) return false;
  581.  
  582.     INI_Open(string);
  583.     INI_WriteInt("Kills",   PlayerInfo[playerid][kills]);
  584.     INI_WriteInt("Deaths",  PlayerInfo[playerid][deaths]);
  585.     INI_WriteInt("Score",   PlayerInfo[playerid][pontos]);
  586.     INI_Save();
  587.  
  588.     INI_Close();
  589.  
  590.     informacaoArma[3] = CreatePickup(1240,1,coordenadaPickup[0],coordenadaPickup[1],coordenadaPickup[2],-1);
  591.     armamentoPickup[informacaoArma[3]] = SetTimerEx("DestroyPickupEx",15000,false,"i",informacaoArma[3]);
  592.     return true;
  593. }
  594.  
  595.  
  596. public OnPlayerPickUpPickup(playerid,pickupid)
  597. {
  598.     if(!armaPickup[pickupid]) {
  599.         static
  600.             Float:Health;
  601.  
  602.         GetPlayerHealth(playerid,Health);
  603.         Health = Health > 69 ? SetPlayerHealth(playerid,100) : SetPlayerHealth(playerid,Health+30);
  604.         DestroyPickup(pickupid);
  605.     }
  606.     else {
  607.         SetPlayerAmmo(playerid,armaPickup[pickupid],0);
  608.         GivePlayerWeapon(playerid,armaPickup[pickupid],pickupFerramentas[pickupid]);
  609.  
  610.         KillTimer(armamentoPickup[pickupid]);
  611.  
  612.         armaPickup[pickupid] = 0;
  613.  
  614.         pickupFerramentas[pickupid] = 0;
  615.         DestroyPickup(pickupid);
  616.     }
  617.     return true;
  618. }
  619.  
  620.  
  621. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  622. {
  623.     if(dialogid == DialogRegistro) {
  624.         if(response) {
  625.             static pName[128];
  626.             if(!inputtext[3]) {
  627.                 format(pName, sizeof(pName), "{CCCCCC}\nA conta {999933}%s{CCCCCC} não está registrada\nPor favor insira uma senha para registrá-la:", GetPlayerNick(playerid));
  628.                 return ShowPlayerDialog(playerid, DialogRegistro, DIALOG_STYLE_INPUT, "Cadastrar", pName, "Continuar", "Cancelar");
  629.             }
  630.  
  631.             format(pName, 54, ContaPlayer, GetPlayerNick(playerid));
  632.  
  633.             CriarArquivo(pName);
  634.             INI_Open(pName);
  635.  
  636.             INI_WriteString("Senha",        inputtext);
  637.             INI_WriteInt("Kills",        false);
  638.             INI_WriteInt("Deaths",   false);
  639.  
  640.             INI_WriteInt("Admin",    false);
  641.             INI_WriteInt("Score",        false);
  642.  
  643.             INI_Save();
  644.             return INI_Close();
  645.  
  646.         }
  647.         SendClientMessage(playerid,COLOR_PEPPER,"-WarnServ- A senha digita é inválida, você foi desconectado.");
  648.  
  649.         return Kick(playerid), true;
  650.     }
  651.     if(dialogid == DialogLogin) {
  652.         if(response) {
  653.             static pName[128];
  654.             format(pName, 54, ContaPlayer, GetPlayerNick(playerid));
  655.             if(strlen(inputtext) <3) {
  656.                 SendClientMessage(playerid,COLOR_PEPPER,"-WarnServ- A senha digita é inválida, favor digite-a corretamente.");
  657.                 format(pName, sizeof(pName), "{CCCCCC}\nA conta {999933}%s{CCCCCC} está registrada\nPor favor insira uma senha para autenticar a mesma:", GetPlayerNick(playerid));
  658.  
  659.                 return ShowPlayerDialog(playerid, DialogLogin, DIALOG_STYLE_INPUT, "Autenticar conta de usuário", pName, "Continuar", "Cancelar");
  660.             }
  661.  
  662.             INI_Open(pName);
  663.             new password[128];
  664.             if(INI_ReadString(password, "Senha", MAX_PLAYER_NAME) && !strcmp(password, inputtext, true)) {
  665.                 PlayerInfo[playerid][pontos] = INI_ReadInt("Score");
  666.  
  667.                 PlayerInfo[playerid][deaths] = INI_ReadInt("Deaths");
  668.  
  669.                 PlayerInfo[playerid][kills] = INI_ReadInt("Kills");
  670.  
  671.                 SendClientMessage(playerid,COLOR_LIGHTGREEN,"-InfoServ- Você foi logado com sucesso!");
  672.  
  673.             }
  674.             else {
  675.                 SendClientMessage(playerid,COLOR_PEPPER,"-WarnServ- A senha digita é inválida, favor digite-a corretamente.");
  676.                 format(pName, sizeof(pName), "{CCCCCC}\nA conta {999933}%s{CCCCCC} está registrada\nPor favor insira uma senha para autenticar a mesma:", GetPlayerNick(playerid));
  677.                 ShowPlayerDialog(playerid, DialogLogin, DIALOG_STYLE_INPUT, "Autenticar conta de usuário", pName, "Continuar", "Cancelar");
  678.             }
  679.             INI_Close();
  680.         }
  681.         else {
  682.             SendClientMessage(playerid,COLOR_PEPPER,"-WarnServ- Obrigatório digitar a senha, você foi desconectado.");
  683.             PlayerPlaySound(playerid,1085,0.0,0.0,0.0);
  684.  
  685.             return Kick(playerid), true;
  686.         }
  687.     }
  688.     return false;
  689. }
  690.  
  691.  
  692. public OnPlayerUpdate(playerid) <estadoServidor:destrancar>
  693. {
  694.     PlayerInfo[playerid][updatetime] = gettime();
  695.  
  696.     static Float:Health;
  697.     ResetPlayerMoney(playerid); GetPlayerHealth(playerid,Health);
  698.  
  699.     return GivePlayerMoney(playerid, -floatround(Health)), true;
  700.  
  701. }
  702.  
  703.  
  704. //========================= [ Comandos ] =======================================
  705.  
  706. new
  707. paramNumero,
  708. paramExecute,
  709. paramTexto[128]
  710. ;
  711.  
  712. #define isnull(%1,%2) ((!(%1[%2])) || (((%1[%2]) == '\1') && (!(%1[%2+1]))))
  713.  
  714. public OnPlayerCommandText(playerid, cmdtext[]) <estadoServidor:destrancar>
  715. {
  716.     state (!strcmp(cmdtext, "/estado-servidor", true) && IsPlayerAdmin(playerid)) estadoServidor:trancar;
  717.  
  718.     if(!strcmp("/morrer", cmdtext, true)) {
  719.         SendClientMessage(playerid,0xFF8000FF, "-InfoServ- Você acaba de se suicidar.");
  720.         return SetPlayerHealth(playerid, 0.0), true;
  721.  
  722.     }
  723.  
  724.     if(!strcmp("/offline", cmdtext, true)) {
  725.         if(!PlayerInfo[playerid][paused]) {
  726.             TogglePlayerControllable(playerid, false);
  727.  
  728.             atacarTexto[playerid] = Create3DTextLabel("Jogador Offline", 0xFFFF00AA, 30.0,40.0,50.0,40.0,0);
  729.             Attach3DTextLabelToPlayer(atacarTexto[playerid], playerid, 0.0, 0.0, 0.7);
  730.  
  731.             static string[128];
  732.  
  733.             format(string, 128, "-InfoServ- O Jogador %s (%d) está ausente (/online)", GetPlayerNick(playerid), playerid);
  734.             SendClientMessageToAll(0xFF8000FF, string);
  735.  
  736.             PlayerInfo[playerid][paused] = true;
  737.  
  738.         }
  739.         return true;
  740.  
  741.     }
  742.  
  743.     if(!strcmp("/online", cmdtext, true)) {
  744.         if(PlayerInfo[playerid][paused]) {
  745.             TogglePlayerControllable(playerid, true);
  746.  
  747.             static string[128];
  748.  
  749.             format(string, 128, "-InfoServ- O Jogador %s (%d) está online (/offline)", GetPlayerNick(playerid), playerid);
  750.             SendClientMessageToAll(0xFF8000FF, string);
  751.  
  752.             Delete3DTextLabel(atacarTexto[playerid]);
  753.             PlayerInfo[playerid][paused] = false;
  754.  
  755.         }
  756.         return true;
  757.  
  758.     }
  759.  
  760.     if(!strcmp("/spawn", cmdtext, true)) {
  761.         if(!IsPlayerAdmin(playerid))                            return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Você não é um administrador.");
  762.  
  763.         static
  764.             Float:xPos,
  765.             Float:yPos,
  766.             Float:zPos,
  767.             string[128] ;
  768.  
  769.         GetPlayerPos(playerid, xPos, yPos, zPos);
  770.  
  771.         new File:arquivo = fopen("randomSpawn.txt", io_append);
  772.         format(string, 128, "\r\n%f, %f, %f", xPos, yPos, zPos);
  773.  
  774.         fwrite(arquivo, string);
  775.         fclose(arquivo);
  776.  
  777.         format(string, 128, "-InfoServer- Você salvou uma posição no nome de %s ", GetPlayerNick(playerid));
  778.         SendClientMessage(playerid,0xFF8000FF,string);
  779.  
  780.         return true;
  781.  
  782.     }
  783.  
  784.     if(!strcmp("/sync", cmdtext, true)) {
  785.         OnPlayerSyncronize(playerid);
  786.         SendClientMessage(playerid,0xFF8000FF, "-InfoServ- Sincronizado com sucesso");
  787.         return true;
  788.  
  789.     }
  790.  
  791.     if(!strcmp("/admins", cmdtext, true)) {
  792.         static string[128];
  793.         SendClientMessage(playerid, 0xFFFFFFFF, "Procurando Administradores Online . . .");
  794.         for(new j = 1, i = jogadoresLoop[0]; j  != jogadoresConectados+1; i = jogadoresLoop[j], j++) {
  795.             if(IsPlayerAdmin(playerid)) {
  796.                 GetPlayerName(i, string, MAX_PLAYER_NAME);
  797.                 format(string, 128, "[%i] Administrador %s", i,string);
  798.                 SendClientMessage(playerid, 0xFFFFFFFF, string);
  799.             }
  800.         }
  801.         return true;
  802.     }
  803.  
  804.     if(!strcmp("/admcmds", cmdtext, true)) {
  805.         if(!IsPlayerAdmin(playerid))                            return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Você não é um administrador.");
  806.         return  SendClientMessage(playerid, 0xFFFFFFFF, " /score \n /matar \n /vida \n /colete \n /kick \n /banir \n /mudarround \n /spawn \n");
  807.  
  808.     }
  809.  
  810.     if(!strcmp("/mudarround", cmdtext, true)) {
  811.         if(!IsPlayerAdmin(playerid))                            return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Você não é um administrador.");
  812.         return  totalContagem = 600, SendClientMessageToAll(0xFFFFFFFF, " - InfoServ - Um administrador alterou o round");
  813.  
  814.     }
  815.  
  816.     if(!strcmp("/cmds", cmdtext, true)) {
  817.         return  SendClientMessage(playerid, COLOR_YELLOW, " /morrer \n /status \n /admins \n /sync \n /cmds\n");
  818.  
  819.     }
  820.  
  821.     new cmdname[32], cmdindex;
  822.     while(cmdtext[cmdindex++] > ' ') {
  823.         cmdname[cmdindex- 1] = tolower(cmdtext[cmdindex]);
  824.     }
  825.  
  826.     format(cmdname, sizeof(cmdname), "@%s", cmdname);
  827.  
  828.     if(funcidx(cmdname) != -1) {
  829.         return cmdtext[cmdindex] ? CallLocalFunction(cmdname, "ds", playerid, cmdtext[cmdindex + 1]) : CallLocalFunction(cmdname, "ds", playerid, "\1") ;
  830.     }
  831.  
  832.     return SendClientMessage(playerid,0xCC0000FF, "-WarnServ- O comando digitado é inválido. Tente /comandos.");
  833.  
  834. }
  835.  
  836.  
  837. cmd(score, playerid, params[])
  838. {
  839.     if(!IsPlayerAdmin(playerid))                            return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Você não é um administrador.");
  840.     if(!sscanf(params, "ui", paramNumero, paramExecute))    return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /score <id> <score>");
  841.     if(!IsPlayerConnected(paramNumero))                     return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  842.  
  843.     SendClientMessage(paramNumero, 0xFF8000FF, "-InfoServ- O seu score foi alterado por um administrador.");
  844.     return SetPlayerScore(paramNumero, paramExecute), SendClientMessage(playerid, 0xFF8000FF, "-InfoServ- O score do jogador foi alterado com sucesso.");
  845. }
  846.  
  847.  
  848. cmd(matar, playerid, params[])
  849. {
  850.     if(!IsPlayerAdmin(playerid))                return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Para executar este comando precisa ser administrador");
  851.     if(!sscanf(params, "u", paramNumero))       return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /matar <id>");
  852.     if(!IsPlayerConnected(paramNumero))         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  853.  
  854.     SendClientMessage(paramNumero, 0xFF8000FF, "-InfoServ- Morto por um administrador");
  855.  
  856.     return SetPlayerHealth(paramNumero, 0.0);
  857. }
  858.  
  859.  
  860. cmd(status, playerid, params[])
  861. {
  862.     if(!sscanf(params, "u", paramNumero))      return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /status <id>");
  863.     if(!IsPlayerConnected(paramNumero))         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  864.  
  865.     static string[128];
  866.     format(string, 128, "Vida: %d -  Total: %d - Score Round: %d - Matou %d - Morreu %d - Spree %d", ~GetPlayerMoney(paramNumero), PlayerInfo[paramNumero][pontos], GetPlayerScore(paramNumero), PlayerInfo[paramNumero][kills], PlayerInfo[paramNumero][deaths], PlayerInfo[paramNumero][spree]);
  867.  
  868.     return SendClientMessage(playerid,0xFF8000FF, string);
  869. }
  870.  
  871.  
  872. cmd(pm, playerid, params[])
  873. {
  874.     paramTexto[0] = EOS;
  875.     if(!sscanf(params, "us", paramNumero,paramTexto))       return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /pm <id> <msg>");
  876.     if(!IsPlayerConnected(paramNumero) || IsPlayerNPC(paramNumero) || paramNumero == playerid)         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  877.  
  878.     PlayerPlaySound(paramNumero, 1057, 0.0, 0.0, 0.0);
  879.     GameTextForPlayer(playerid, "MENSAGEM PRIVADA ~b~ENVIADA", 2500, 3);
  880.  
  881.     format(paramTexto, 128, "-PrivateServ- %s diz para %s: %s", GetPlayerNick(playerid),GetPlayerNick(paramNumero), paramTexto);
  882.     SendClientMessage(paramNumero, 0xCC0000FF, paramTexto);
  883.     SendClientMessage(playerid, 0xCC0000FF, paramTexto);
  884.  
  885.     PlayerPlaySound(paramNumero, 1057, 0.0, 0.0, 0.0);
  886.     GameTextForPlayer(paramNumero, "MENSAGEM PRIVADA ~b~RECEBIDA", 2500, 3);
  887.     return true;
  888. }
  889.  
  890.  
  891. cmd(vida, playerid, params[])
  892. {
  893.     if(!IsPlayerAdmin(playerid))                                return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Para executar este comando precisa ser administrador");
  894.     if(!sscanf(params, "ud", paramNumero, paramExecute))       return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /vida <id> <quantia>");
  895.     if(!IsPlayerConnected(paramNumero))                         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  896.  
  897.     SendClientMessage(paramNumero, 0xFF8000FF, "-InfoServ- Sua vida foi mudada por um administrador");
  898.  
  899.     return SetPlayerHealth(paramNumero, paramExecute);
  900. }
  901.  
  902.  
  903. cmd(colete, playerid, params[])
  904. {
  905.     if(!IsPlayerAdmin(playerid))                                return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Para executar este comando precisa ser administrador");
  906.     if(!sscanf(params, "ud", paramNumero, paramExecute))       return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /colete <id> <quantia>");
  907.     if(!IsPlayerConnected(paramNumero))                         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  908.  
  909.     SendClientMessage(paramNumero, 0xFF8000FF, "-InfoServ- Seu colete foi mudado por um administrador");
  910.  
  911.     return SetPlayerArmour(paramNumero, paramExecute);
  912. }
  913.  
  914.  
  915. cmd(banir, playerid, params[])
  916. {
  917.     paramTexto[0] = EOS;
  918.     if(!IsPlayerAdmin(playerid))                                return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Para executar este comando precisa ser administrador");
  919.     if(!sscanf(params, "us", paramNumero, paramTexto))          return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /banir <id> <motivo>");
  920.     if(!IsPlayerConnected(paramNumero))                         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  921.  
  922.     format(paramTexto, 128, "-OperServ- %s foi banido por um administrador | Motivo de %s", GetPlayerNick(paramNumero), paramTexto);
  923.     SendClientMessageToAll(0xCC0000FF, paramTexto);
  924.  
  925.     return BanEx(paramNumero,paramTexto);
  926. }
  927.  
  928.  
  929. cmd(kick, playerid, params[])
  930. {
  931.     paramTexto[0] = EOS;
  932.     if(!IsPlayerAdmin(playerid))                                return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Para executar este comando precisa ser administrador");
  933.     if(!sscanf(params, "us", paramNumero, paramTexto))          return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Digite /kick <id> <motivo>");
  934.     if(!IsPlayerConnected(paramNumero))                         return SendClientMessage(playerid, 0xCC0000FF, "-WarnServ- Jogador encontra-se offline");
  935.  
  936.     format(paramTexto, 128, "-OperServ- %s foi kickado por um administrador | Motivo de %s", GetPlayerNick(paramNumero), paramTexto);
  937.     SendClientMessageToAll(0xCC0000FF, paramTexto);
  938.  
  939.     return Kick(paramNumero);
  940. }
  941.  
  942.  
  943. //==============================================================================
  944.  
  945. IsValidSkin(skinid)
  946. {
  947.     new
  948.         skinInvalida[22] = {3, 4, 5, 6, 8, 42, 65, 74,86,119, 149, 208, 273, 289};
  949.  
  950.     if (skinid < 0 || skinid > 299) {
  951.         return false;
  952.     }
  953.  
  954.     for (new i = 0; i != 22; ++i) {
  955.         if (skinid == skinInvalida[i]) {
  956.             return false;
  957.         }
  958.         continue;
  959.     }
  960.     return true;
  961. }
  962.  
  963.  
  964. public tirarSpawnKill(i)
  965. {
  966.     GivePlayerWeapon(i, 4, 800);
  967.     GivePlayerWeapon(i, 16, 1);
  968.     GivePlayerWeapon(i, 25, 800);
  969.  
  970.     GivePlayerWeapon(i, 34, 800);
  971.     GivePlayerWeapon(i, 24, 800);
  972.  
  973.     SetPlayerHealth(i, 100.0);
  974.  
  975.     SendClientMessage(i,0xFF8000FF, "-InfoServ- O AntiSpawnKill terminou!");
  976.     return true;
  977. }
  978.  
  979.  
  980. public MoveCamera(playerid,rand)
  981. {
  982.     SetPlayerCameraPos(playerid, cordinatex - 2 * floatsin(-SkinClass[playerid][SpawnAngle], degrees), cordinatey - 10 * floatcos(-SkinClass[playerid][SpawnAngle], degrees), cordinatez + 3);
  983.     SetPlayerCameraLookAt(playerid, cordinatex, cordinatey, cordinatez + 0.5);
  984.  
  985.     SkinClass[playerid][SpawnAngle] += 0.5;
  986.  
  987.     if (SkinClass[playerid][SpawnAngle] >=360.0) {
  988.         SkinClass[playerid][SpawnAngle] = 0.0;
  989.     }
  990.  
  991.     return true;
  992. }
  993.  
  994.  
  995. public OnPlayerSyncronize(playerid)
  996. {
  997.     PlayerInfo[playerid][sync] = true;
  998.     new PlayerWeapons[2][13];
  999.     for(new i = 0; i < 13; i++) {
  1000.         if(i == 0 || i == 1) {
  1001.             GetPlayerWeaponData(playerid,i,PlayerWeapons[0][i],PlayerWeapons[1][i]);
  1002.  
  1003.             if(PlayerWeapons[1][i] > 1) {
  1004.                 PlayerWeapons[1][i] = 1;
  1005.             }
  1006.         }
  1007.  
  1008.         else {
  1009.             GetPlayerWeaponData(playerid,i,PlayerWeapons[0][i],PlayerWeapons[1][i]);
  1010.         }
  1011.     }
  1012.  
  1013.     ClearAnimations(playerid);
  1014.  
  1015.     new Float:PlayerPos[3];
  1016.     GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]);
  1017.  
  1018.     new Float:health ;
  1019.     GetPlayerHealth(playerid,health);
  1020.     new TheInterior, VirtualWorld;
  1021.     new Float:Angle;
  1022.  
  1023.     GetPlayerFacingAngle(playerid, Angle);
  1024.     TheInterior = GetPlayerInterior(playerid);
  1025.     VirtualWorld = GetPlayerVirtualWorld(playerid);
  1026.  
  1027.     OnPlayerSpawn(playerid);
  1028.  
  1029.     SetPlayerWorldBounds(playerid,9999.9,-9999.9,9999.9,-9999.9);
  1030.     ResetPlayerWeapons(playerid);
  1031.     SetPlayerHealth(playerid,health);
  1032.     SetPlayerInterior(playerid,TheInterior);
  1033.     SetPlayerVirtualWorld(playerid,VirtualWorld);
  1034.     SetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]);
  1035.  
  1036.     for(new i = 0; i < 13; i++) {
  1037.         if(PlayerWeapons[0][i] > 0) {
  1038.             GivePlayerWeapon(playerid,PlayerWeapons[0][i],PlayerWeapons[1][i]);
  1039.         }
  1040.     }
  1041.     return true;
  1042. }
  1043.  
  1044.  
  1045. public DestroyPickupEx(pickupid)
  1046. {
  1047.     DestroyPickup(pickupid);
  1048.     armaPickup[pickupid] = 0;
  1049.  
  1050.     return pickupFerramentas[pickupid] = 0;
  1051. }
  1052.  
  1053.  
  1054. public checarPause()
  1055. {
  1056.     for(new j = 1, i = jogadoresLoop[0]; j  != jogadoresConectados+1; i = jogadoresLoop[j], j++) {
  1057.  
  1058.         if(GetPlayerState(i) && GetPlayerState(i) != 7 && !PlayerInfo[i][paused] && (GetPlayerPing(i) / 1000) < (gettime() - PlayerInfo[i][updatetime]) > 3) {
  1059.             return CallRemoteFunction("OnPlayerCommandText", "is", i, "/offline");
  1060.         }
  1061.  
  1062.         if(PlayerInfo[i][paused] && (gettime() - PlayerInfo[i][updatetime]) < 3) {
  1063.             return CallRemoteFunction("OnPlayerCommandText", "is", i, "/online");
  1064.         }
  1065.     }
  1066.     return true;
  1067. }
  1068.  
  1069.  
  1070. public iniciarSistema()
  1071. {
  1072.     selecionarOutraArea:
  1073.     gangZoneAtual = random(circuitoArquivo); maximoAreas = 0;
  1074.     if(!posicoesAreas[gangZoneAtual][0]) goto selecionarOutraArea;
  1075.  
  1076.     for(new i; i != sizeof(posicoesAreas); i++) {
  1077.         if((posicoesAreas[i][0] && posicoesAreas[i][1]) && IsPointInRangeOfPoint(posicoesAreas[i][0], posicoesAreas[i][1], posicoesAreas[i][2], posicoesAreas[gangZoneAtual][0], posicoesAreas[gangZoneAtual][1],posicoesAreas[gangZoneAtual][2],150.0)) {
  1078.             armazenarAreaAtual[maximoAreas][0] = posicoesAreas[i][0];
  1079.             armazenarAreaAtual[maximoAreas][1] = posicoesAreas[i][1];
  1080.             armazenarAreaAtual[maximoAreas][2] = posicoesAreas[i][2];
  1081.             maximoAreas++;
  1082.         }
  1083.     }
  1084.     if(maximoAreas < 5) goto selecionarOutraArea;
  1085.  
  1086.     printf("NOVA AREA INICIADA (id: %d/%d) (numero de spawns: %d) ", gangZoneAtual, circuitoArquivo, maximoAreas);
  1087.  
  1088.     static string[128];
  1089.     SendClientMessageToAll(COLOR_LIGHTGREEN, "-InfoServer- Gerando o ranking da rodada, veja abaixo:");
  1090.  
  1091.     for(new x = 0 ; x != MAX_RANK; ++x) {
  1092.         for(new j = 1, i = jogadoresLoop[0]; j  != jogadoresConectados+1; i = jogadoresLoop[j], j++) {
  1093.             if(!jogadorNoRanking[i] && GetPlayerScore(i) > jogadorRanking[x]) {
  1094.                 if(jogadorRankingID[x] != -1) jogadorNoRanking[jogadorRankingID[x]] = false;
  1095.                 jogadorRanking[x] = GetPlayerScore(i);
  1096.  
  1097.                 jogadorRankingID[x] = i;
  1098.                 jogadorNoRanking[i] = true;
  1099.             }
  1100.         }
  1101.         if(jogadorRankingID[x] != -1) {
  1102.             format(string, 128, "Colocação: [%02i] Jogador: %024s (%04d)",x+1, GetPlayerNick(jogadorRankingID[x]),GetPlayerScore(jogadorRankingID[x]));
  1103.             SendClientMessageToAll(0xF060B3FF, string);
  1104.         }
  1105.     }
  1106.  
  1107.     for(new j = 1, i = jogadoresLoop[0]; j  != jogadoresConectados+1; i = jogadoresLoop[j], j++) {
  1108.  
  1109.         GivePlayerWeapon(i, 4, 800);
  1110.         GivePlayerWeapon(i, 16, 1);
  1111.  
  1112.         GivePlayerWeapon(i, 25, 800);
  1113.         GivePlayerWeapon(i, 34, 800);
  1114.  
  1115.         GivePlayerWeapon(i, 24, 800);
  1116.  
  1117.         SetPlayerHealth(i, 100.0);
  1118.         SetPlayerScore(i, 0);
  1119.  
  1120.         jogadorNoRanking[i] = false;
  1121.         jogadorRankingID[i] = -1;
  1122.         jogadorRanking[i] = -1;
  1123.  
  1124.         new randomPos = random(maximoAreas);
  1125.  
  1126.         SetPlayerPos(i, armazenarAreaAtual[randomPos][0], armazenarAreaAtual[randomPos][1], armazenarAreaAtual[randomPos][2] + 1.5); SetPlayerPos(i, armazenarAreaAtual[randomPos][0], armazenarAreaAtual[randomPos][1], armazenarAreaAtual[randomPos][2] + 1.5);
  1127.     }
  1128.  
  1129.     return true;
  1130. }
  1131.  
  1132.  
  1133. public atualizarContagem()
  1134. {
  1135.  
  1136.     format(string_contar, sizeof(string_contar), "Tempo~g~: ~r~%03i~w~/600", totalContagem++);
  1137.  
  1138.     TextDrawSetString(tempoAtualRound, string_contar);
  1139.  
  1140.     if(totalContagem < 600) {
  1141.         SetTimer("atualizarContagem", 888, false);
  1142.     }
  1143.  
  1144.     else {
  1145.         SetTimer("atualizarContagem", 888, false);
  1146.         totalContagem = 0;
  1147.         iniciarSistema();
  1148.     }
  1149.     return true;
  1150. }
  1151.  
  1152.  
  1153. //======================= [ Automaton ] ========================================
  1154.  
  1155. public OnPlayerCommandText(playerid, cmdtext[]) <estadoServidor:trancar>
  1156. {
  1157.     state (!strcmp(cmdtext, "/estado-servidor", true) && IsPlayerAdmin(playerid)) estadoServidor:destrancar;
  1158.     return false;
  1159. }
  1160.  
  1161.  
  1162. public OnPlayerConnect(playerid) <estadoServidor:trancar>
  1163. {
  1164.     SendClientMessage(playerid,0x7E7EFBFF, "-LockServ- Desculpe o servidor está trancado, contate um administrador");
  1165.     return Kick(playerid);
  1166. }
  1167.  
  1168.  
  1169. public OnPlayerUpdate(playerid) <estadoServidor:trancar>
  1170. {
  1171.     SendClientMessage(playerid,0x7E7EFBFF, "-LockServ- Desculpe o servidor está trancado,, contate um administrador");
  1172.     return Kick(playerid);
  1173. }
  1174.  
  1175.  
  1176. /* ================== [ Funções ] ==============================================
  1177.  
  1178.     @ sscanf adaptada para o sevidor
  1179.     @ Criado por Bruno da Silva
  1180.     @ sscanf(input[], format[], varsoutput)
  1181.  
  1182.      - Input
  1183.         Colocar a string para ser dividida conforme o format
  1184.  
  1185.      - Formato
  1186. Formato para o destino das divisões da string
  1187.  
  1188. - varsoutput
  1189. variáveis/arrays para destino
  1190.  
  1191. Formatações:
  1192. Ainda não tem todas formatações, apenas as principais:
  1193.  
  1194. "s" string
  1195. "z" string
  1196. "d" numeros
  1197. "i" numeros
  1198. "u" jogadores por nome ou id
  1199.  
  1200. @ Criado dia  14 de agosto de 2011
  1201. @ www.ips-team.blogspot.com
  1202.  
  1203. */
  1204.  
  1205. sscanf(string[], formats[],{Float,_}
  1206. :...)
  1207. {
  1208.     if((!string[0] || string[0] == '\1' && !string[1]) || (!formats[0] || formats[0] == '\1' && !formats[1])||numargs()-2 != strlen(formats)) return false;
  1209.  
  1210.     new ultimoCaractere = 0;
  1211.  
  1212.     for(new f; formats[f]; f++) {
  1213.         switch(formats[f]) {
  1214.  
  1215.             case 'i','d':
  1216.             {
  1217.                 new
  1218.                     i = ultimoCaractere,
  1219.                     valorArmazenar = 0;
  1220.  
  1221.                 for( ; string[i] > ' '; ++i) {
  1222.  
  1223.                     if(('0' <= string[i] <= '9')) {
  1224.                         valorArmazenar = (valorArmazenar * 10) + (string[i] - '0');
  1225.                     }
  1226.                     else if(string[i] != '-') {
  1227.                         return false;
  1228.                     }
  1229.                 }
  1230.                 setarg(f + 2, 0, string[ultimoCaractere] == '-' ? ~valorArmazenar + 1 : valorArmazenar );
  1231.                 ultimoCaractere = i + 1;
  1232.             }
  1233.  
  1234.             case 's','z':
  1235.             {
  1236.                 new i = ultimoCaractere;
  1237.                 for( ; string[i] > ' '; i++) {
  1238.                     setarg(f + 2, i - ultimoCaractere, string[i]);
  1239.                 }
  1240.                 ultimoCaractere = i + 1;
  1241.             }
  1242.             case 'u', 'j':
  1243.             {
  1244.                 new
  1245.                     i = ultimoCaractere,
  1246.                     nomeJogador[MAX_PLAYER_NAME],
  1247.                     jogadorDigitado = 0,
  1248.                     bool:isNumeric = true;
  1249.  
  1250.                 for( ; string[i] > ' '; i++) {
  1251.  
  1252.                     if ('0' <= string[i] <= '9') {
  1253.                         jogadorDigitado = (jogadorDigitado * 10) + (string[i] - '0');
  1254.                     }
  1255.                     else {
  1256.                         isNumeric = false;
  1257.                     }
  1258.                 }
  1259.                 if (isNumeric  && IsPlayerConnected(jogadorDigitado)) {
  1260.                     setarg(f + 2, 0, jogadorDigitado);
  1261.  
  1262.                 }
  1263.                 else {
  1264.                     strcat(nomeJogador, string[ultimoCaractere], MAX_PLAYER_NAME);
  1265.                     jogadorDigitado = GetPlayerByPartName(nomeJogador);
  1266.                     setarg(f + 2, 0, jogadorDigitado);
  1267.                 }
  1268.                 ultimoCaractere = i;
  1269.             }
  1270.         }
  1271.     }
  1272.     return true;
  1273. }
  1274.  
  1275.  
  1276. /*
  1277.     @ GetPlayerByPartName
  1278.     @ Função:
  1279.         Retorna o id do jogador através de uma parte do nome do mesmo
  1280.  
  1281.     @ GetPlayerByPartName(partedonome)
  1282.         - partedonome
  1283.             Parte do nome para ser buscado o jogador, caso não encontrar retorna INVALID PLAYER
  1284.  
  1285.     @ Criado por Bruno da Silva
  1286.  
  1287. */
  1288.  
  1289. GetPlayerByPartName(sNome[])
  1290. {
  1291.     if (strlen(sNome) < 3) return INVALID_PLAYER_ID;
  1292.     static sName[MAX_PLAYER_NAME];
  1293.     for (new j = 1, i = jogadoresLoop[0]; j != jogadoresConectados + 1; i = jogadoresLoop[j], j++) {
  1294.         GetPlayerName(i, sName, MAX_PLAYER_NAME);
  1295.         if (strfind(sName, sNome, true)) {
  1296.             return i;
  1297.         }
  1298.     }
  1299.     return INVALID_PLAYER_ID;
  1300. }
  1301.  
  1302.  
  1303. /*
  1304.     @ GetPlayerNick
  1305.     @ Função:
  1306.         Retorna o nome de um jogador através do id do mesmo
  1307.  
  1308.     @ GetPlayerNick(player)
  1309.         - player
  1310.             id do jogador para retornar o nome
  1311.  
  1312.     @ Criado por Bruno da Silva
  1313.  
  1314. */
  1315.  
  1316. GetPlayerNick(player)
  1317. {
  1318.     static name[MAX_PLAYER_NAME];
  1319.     GetPlayerName(player, name, sizeof(name));
  1320.     return name;
  1321. }
  1322.  
  1323.  
  1324. //  split String to array multidimensional
  1325.  
  1326. split(const strsrc[], strdest[][], delimiter)
  1327. {
  1328.     new i, li;
  1329.     new aNum;
  1330.     new len;
  1331.     while(i <= strlen(strsrc)) {
  1332.         if(strsrc[i] == delimiter || i == strlen(strsrc)) {
  1333.             len = strmid(strdest[aNum], strsrc, li, i, 128);
  1334.             strdest[aNum][len] = 0, li = i+1, aNum++;
  1335.         }
  1336.         i++; continue;
  1337.     }
  1338.     return true;
  1339. }
  1340.  
  1341.  
  1342. IsPointInRangeOfPoint(Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, Float:range)
  1343. {
  1344.     x2 -= x,   y2 -= y,   z2 -= z;
  1345.     return  25.0 < ((x2 * x2) + (y2 * y2) + (z2 * z2)) < (range * range);
  1346. }
  1347.  
  1348.  
  1349. CriarArquivo(arquivo[])
  1350. {
  1351.     if(fexist(arquivo)) return false;
  1352.     new File:Arquivo = fopen(arquivo, io_write);
  1353.     return fclose(Arquivo);
  1354. }
Add Comment
Please, Sign In to add comment