Rei_Ayanami

Sumo Script

Apr 27th, 2024
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*------------------------------------------------------------------------------
  2.                     ********************************
  3.                             SUMO - Mini-Game.
  4.                     ********************************
  5. Descrição:
  6.     Um pequeno mini-game de estilo sumo.
  7. Versão:
  8.     1.0
  9. Desenvolvedor:
  10.     Luke "Larceny" G.
  11. ChangeLOG:
  12.     05/10/2011:
  13.         Primeiro lançamento.
  14. Agradecimentos:
  15.     ZeeX                                    - ZCMD Command Processor.
  16.     Y_Less                                  - foreach
  17.     GhostRider                              - Mapping.
  18.     Equipe SA-MP(past\present\future)       - SAMP.
  19. ------------------------------------------------------------------------------*/
  20.  
  21. #define FILTERSCRIPT
  22.  
  23. #include <a_samp>
  24. #include  <zcmd>
  25.  
  26. #tryinclude <foreach>
  27.  
  28. new
  29.     g_PLAYERS_TOTAL,
  30.     g_COUNTIN_TIMER,
  31.     g_SPAWNED_VEHICLE[MAX_PLAYERS];
  32.  
  33. forward CreateSumoVehicle(playerid);
  34. forward OnClientUpdate();
  35.  
  36. #define IsPlayerInSumo(%0)          GetPVarInt(%0,"IsPlayerInSumo")
  37. #define SetPlayerSumo(%1,%2)        SetPVarInt(%1,"IsPlayerInSumo",%2)
  38. #define GetPlayerSumoTime(%0)       GetPVarInt(%0,"PlayerSumoTime")
  39. #define SetPlayerSumoAFK(%0,%1)     SetPVarInt(%0,"SumoAFK",%1)
  40. #define AddPlayerSumoTime(%0,%1)    SetPVarInt(%0,"PlayerSumoTime",GetPVarInt(%0,"PlayerSumoTime")+%1)
  41. #define SetPlayerSumoTime(%0,%1)    SetPVarInt(%0,"PlayerSumoTime",%1)
  42.  
  43. stock
  44.     GetPlayerNameEx(playerid)
  45. {
  46.     new
  47.         string[MAX_PLAYER_NAME];
  48.     GetPlayerName(playerid, string, MAX_PLAYER_NAME);
  49.     return string;
  50. }
  51.  
  52. stock
  53.     CreateVehicleEx(playerid, modelid, Float:X, Float:Y, Float:Z, Float:A, color1, color2)
  54. {
  55.     if (g_SPAWNED_VEHICLE[playerid] != 0) DestroyVehicle(g_SPAWNED_VEHICLE[playerid]);
  56.     g_SPAWNED_VEHICLE[playerid] = CreateVehicle(modelid, X,Y,Z,A, color1, color2, -1);
  57. }
  58.  
  59. new SUMO_CARS[17][1] =
  60. {
  61.     {411},
  62.     {541},
  63.     {451},
  64.     {602},
  65.     {429},
  66.     {402},
  67.     {415},
  68.     {587},
  69.     {502},
  70.     {503},
  71.     {559},
  72.     {603},
  73.     {475},
  74.     {506},
  75.     {477},
  76.     {504},
  77.     {558}
  78. };
  79.  
  80. new Float:SUMO_SPAWNS[11][4] =
  81. {
  82.     {2913.7920,-3130.5566,107.2750,163.2152},
  83.     {2901.9172,-3126.9749,107.2984,191.7273},
  84.     {2888.5759,-3131.6440,107.3228,208.8633},
  85.     {2876.4026,-3138.3540,107.3490,235.2153},
  86.     {2869.5813,-3150.2598,107.3736,264.0153},
  87.     {2869.2766,-3161.9634,107.3946,276.5433},
  88.     {2872.5164,-3174.3484,107.4165,291.9513},
  89.     {2878.2810,-3185.4270,107.4387,321.1833},
  90.     {2887.4141,-3192.7739,107.4608,321.1833},
  91.     {2897.9683,-3196.9666,107.4779,355.0377},
  92.     {2911.6592,-3197.2813,107.5027,355.0377}
  93. };
  94.  
  95. public OnFilterScriptInit()
  96. {
  97.     print("\n--------------------------------------------------------");
  98.     print(" Iniciando \"SUMO_SCRIPT\" by Luke \"Larceny\" G...");
  99.     print(" ...\"SUMO_SCRIPT\" iniciado com sucesso!");
  100.     print("--------------------------------------------------------\n");
  101.     CreateObject(13607,2905.9548339844,-3160.29296875,104.93536376953,0,0,0,300.0);
  102.     CreateObject(18450,2958.955078125,-3215.8120117188,86.87939453125,359.58288574219,20.072540283203,314.08843994141,300.0);
  103.     CreateObject(13607,3007.0251464844,-3267.2795410156,78.075241088867,0,0,306,300.0);
  104.     CreateObject(1633,2931.97265625,-3195.7143554688,99.627136230469,11.920684814453,0,43.659301757813,300.0);
  105.     CreateObject(1633,2940.1413574219,-3188.4636230469,99.581954956055,11.920166015625,0,43.654174804688,300.0);
  106.     CreateObject(1633,2937.1958007813,-3191.3784179688,99.564033508301,11.920166015625,0,43.654174804688,300.0);
  107.     CreateObject(1633,2934.4245605469,-3193.8444824219,99.583084106445,11.920166015625,0,43.654174804688,300.0);
  108.     CreateObject(3864,2918.455078125,-3195.91796875,107.33255767822,0,0,0,300.0);
  109.     CreateObject(3864,2904.1618652344,-3198.6179199219,107.49332427979,0,0,0,300.0);
  110.     CreateObject(3864,2891.4709472656,-3195.6599121094,107.49332427979,0,0,0,300.0);
  111.     CreateObject(3864,2882.2456054688,-3190.8923339844,107.49332427979,0,0,0,300.0);
  112.     CreateObject(3864,2873.7077636719,-3181.337890625,107.49332427979,0,0,0,300.0);
  113.     CreateObject(3864,2869.1154785156,-3168.7836914063,107.49332427979,0,0,0,300.0);
  114.     CreateObject(3864,2868.744140625,-3155.3662109375,107.49332427979,0,0,0,300.0);
  115.     CreateObject(3864,2871.6098632813,-3144.1569824219,107.49332427979,0,0,0,300.0);
  116.     CreateObject(3864,2879.5402832031,-3132.4753417969,107.49332427979,0,0,0,300.0);
  117.     CreateObject(3864,2893.7329101563,-3124.2341308594,107.49332427979,0,0,0,300.0);
  118.     CreateObject(3864,2908.5739746094,-3122.6245117188,107.49332427979,0,0,0,300.0);
  119.     CreateObject(3864,2923.6279296875,-3127.2817382813,107.49332427979,0,0,0,300.0);
  120.     CreateObject(3864,2936.5686035156,-3137.7502441406,107.49332427979,0,0,0,300.0);
  121.     CreateObject(3864,2941.8908691406,-3148.3449707031,107.49332427979,0,0,0,300.0);
  122.     CreateObject(3864,2944.1440429688,-3162.4973144531,107.5002746582,0,0,0,300.0);
  123.     CreateObject(3864,2940.5539550781,-3177.8244628906,107.49332427979,0,0,0,300.0);
  124.     g_COUNTIN_TIMER = SetTimer("OnClientUpdate", 1000, true);
  125.     return 1;
  126. }
  127.  
  128. public OnFilterScriptExit()
  129. {
  130.     KillTimer(g_COUNTIN_TIMER);
  131.     return 1;
  132. }
  133.  
  134. public OnPlayerSpawn(playerid)
  135. {
  136.     if (IsPlayerInSumo(playerid))
  137.     {
  138.         new
  139.             SUMO_STRING[58],
  140.             RAND = random(sizeof(SUMO_SPAWNS)),
  141.             RAND_CARS = random(sizeof(SUMO_CARS));
  142.         format(SUMO_STRING, sizeof(SUMO_STRING), "[X]{FFFFFF} %s morreu no ringue.", GetPlayerNameEx(playerid));
  143.         #if defined _foreach_included
  144.             foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  145.         #else
  146.             for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  147.         #endif
  148.         SetPlayerSumoTime(playerid, 0);
  149.         CreateVehicleEx(playerid, SUMO_CARS[RAND_CARS][0], SUMO_SPAWNS[RAND][0], SUMO_SPAWNS[RAND][1], SUMO_SPAWNS[RAND][2], SUMO_SPAWNS[RAND][3]+5, -1, -1);
  150.         PutPlayerInVehicle(playerid, g_SPAWNED_VEHICLE[playerid], 0);
  151.     }
  152.     return 1;
  153. }
  154.  
  155. public OnPlayerDisconnect(playerid, reason)
  156. {
  157.     if (IsPlayerInSumo(playerid))
  158.     {
  159.         g_PLAYERS_TOTAL--;
  160.         #if defined _foreach_included
  161.         foreach (Player, i)
  162.         #else
  163.         for (new i = 0; i < MAX_PLAYERS; i++)
  164.         #endif
  165.         {
  166.             if (IsPlayerInSumo(i))
  167.             {
  168.                 new
  169.                     STRING[75];
  170.                 format(STRING, sizeof STRING, "[X] {FFFFFF}%s desconectou e foi removido do ringue.", GetPlayerNameEx(playerid));
  171.                 SendClientMessage(i, 0x00FF33FF, STRING);
  172.                 /* strdel(STRING, 0, 12);
  173.                 printf("SUMO_SCRIPT: %s", STRING); */
  174.             }
  175.         }
  176.     }
  177.     return 1;
  178. }
  179.  
  180. public OnClientUpdate()
  181. {
  182.     #if defined _foreach_included
  183.     foreach (Player, i)
  184.     #else
  185.     for (new i = 0; i < MAX_PLAYERS; i++)
  186.     #endif
  187.     {
  188.         if (IsPlayerInSumo(i))
  189.         {
  190.             if (g_PLAYERS_TOTAL > 0 && GetPVarInt(i,"SumoAFK") < 15){ AddPlayerSumoTime(i, 1); }
  191.             new
  192.                 SUMO_TIME[18],
  193.                 TEXT_TIME[90],
  194.                 Float:pPos[3];
  195.             format(SUMO_TIME, sizeof SUMO_TIME, "%d {FFFFFF}/ 500", GetPlayerSumoTime(i));
  196.             SetPlayerChatBubble(i, SUMO_TIME, 0x00FF33FF, 50.0, 1500);
  197.             format(TEXT_TIME, sizeof TEXT_TIME, "~n~~n~~n~~n~~n~~n~~n~~n~                                           ~g~~h~~h~%i ~w~/ 500", GetPlayerSumoTime(i));
  198.             GameTextForPlayer(i, TEXT_TIME, 2000, 3);
  199.             GetPlayerPos(i, pPos[0], pPos[1], pPos[2]);
  200.             if (GetPVarFloat(i,"SumoX") != pPos[0] || GetPVarFloat(i,"SumoY") != pPos[1] || GetPVarFloat(i,"SumoZ") != pPos[2])
  201.             {// Caso o jogador ficar ausente
  202.                 SetPVarFloat(i, "SumoX", pPos[0]);
  203.                 SetPVarFloat(i, "SumoY", pPos[1]);
  204.                 SetPVarFloat(i, "SumoZ", pPos[2]);
  205.                 SetPVarInt(i, "SumoAFK", 0);
  206.             }
  207.             else
  208.             {
  209.                 SetPVarInt(i, "SumoAFK", GetPVarInt(i,"SumoAFK")+1);
  210.                 if (GetPVarInt(i,"SumoAFK") == 15)
  211.                 {
  212.                     new
  213.                         SUMO_STRING[73];
  214.                     format(SUMO_STRING, sizeof(SUMO_STRING), "[X]{FFFFFF} %s está ausente e não ganhará pontos.", GetPlayerNameEx(i));
  215.                     #if defined _foreach_included
  216.                         foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  217.                     #else
  218.                         for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  219.                     #endif
  220.                 }
  221.             }
  222.             new
  223.                 Float:Saude;
  224.             GetPlayerHealth(i, Saude);
  225.             if (Saude < 1)
  226.             {// Caso o jogador morrer
  227.                 return 1;
  228.             }
  229.             if (pPos[2] < 25.0)
  230.             {// Caso o jogador cair do ringue
  231.                 new
  232.                     SUMO_STRING[55],
  233.                     RAND = random(sizeof(SUMO_SPAWNS)),
  234.                     RANDCARS = random(sizeof(SUMO_CARS));
  235.                 format(SUMO_STRING, sizeof(SUMO_STRING), "[X]{FFFFFF} %s caiu do ringue.", GetPlayerNameEx(i));
  236.                 #if defined _foreach_included
  237.                     foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  238.                 #else
  239.                     for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  240.                 #endif
  241.                 SetPlayerSumoTime(i, 0);
  242.                 CreateVehicleEx(i, SUMO_CARS[RANDCARS][0], SUMO_SPAWNS[RAND][0], SUMO_SPAWNS[RAND][1], SUMO_SPAWNS[RAND][2], SUMO_SPAWNS[RAND][3]+5, -1, -1);
  243.                 PutPlayerInVehicle(i, g_SPAWNED_VEHICLE[i], 0);
  244.                 return 1;
  245.             }
  246.             if (GetPlayerState(i) != PLAYER_STATE_DRIVER && !GetPVarInt(i, "FirstSumo"))
  247.             {// Caso o jogador sair do carro
  248.                 new
  249.                     SUMO_STRING[53],
  250.                     RAND = random(sizeof(SUMO_SPAWNS)),
  251.                     RANDCARS = random(sizeof(SUMO_CARS));
  252.                 format(SUMO_STRING, sizeof(SUMO_STRING), "[X]{FFFFFF} %s saiu do carro.", GetPlayerNameEx(i));
  253.                 #if defined _foreach_included
  254.                     foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  255.                 #else
  256.                     for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  257.                 #endif
  258.                 SetPlayerSumoTime(i, 0);
  259.                 CreateVehicleEx(i, SUMO_CARS[RANDCARS][0], SUMO_SPAWNS[RAND][0], SUMO_SPAWNS[RAND][1], SUMO_SPAWNS[RAND][2], SUMO_SPAWNS[RAND][3]+5, -1, -1);
  260.                 PutPlayerInVehicle(i, g_SPAWNED_VEHICLE[i], 0);
  261.                 return 1;
  262.             }
  263.             if (GetPlayerSumoTime(i) == 399)
  264.             {// Caso o jogador obter 400segundos sem cair
  265.                 new
  266.                     SUMO_STRING[70];
  267.                 format(SUMO_STRING, sizeof SUMO_STRING, "[X]{FFFFFF} %s está quase vencendo, derrube-o!", GetPlayerNameEx(i));
  268.                 #if defined _foreach_included
  269.                     foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS) && OTHERS != i){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  270.                 #else
  271.                     for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS) && OTHERS != i){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING);}}
  272.                 #endif
  273.                 SendClientMessage(i, 0x00FF33FF, "[X]{FFFFFF} Você está quase vencendo!");
  274.             }
  275.             if (GetPlayerSumoTime(i) == 499)
  276.             {// Caso o jogador obter 500segundos sem cair
  277.                 SendClientMessage(i, 0x00FF33FF, "[X]{FFFFFF} Você venceu o jogo e ganhou $6000!");
  278.                 GivePlayerMoney(i, 6000);
  279.                 new
  280.                     SUMO_STRING[60];
  281.                 format(SUMO_STRING, sizeof SUMO_STRING, "[X]{FFFFFF} %s é o vencedor do sumo.", GetPlayerNameEx(i));
  282.                 #if defined _foreach_included
  283.                     foreach (Player, OTHERS){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING); SetPlayerSumoTime(OTHERS, 0);}}
  284.                 #else
  285.                     for (new OTHERS = 0; OTHERS < MAX_PLAYERS; OTHERS++){if (IsPlayerInSumo(OTHERS)){SendClientMessage(OTHERS, 0x00FF33FF, SUMO_STRING); SetPlayerSumoTime(OTHERS, 0);}}
  286.                 #endif
  287.             }
  288.         }
  289.     }
  290.     return 1;
  291. }
  292.  
  293. public CreateSumoVehicle(playerid)
  294. {
  295.     new
  296.         RAND = random(sizeof(SUMO_SPAWNS)),
  297.         RANDCARS = random(sizeof(SUMO_CARS));
  298.     CreateVehicleEx(playerid, SUMO_CARS[RANDCARS][0], SUMO_SPAWNS[RAND][0], SUMO_SPAWNS[RAND][1], SUMO_SPAWNS[RAND][2], SUMO_SPAWNS[RAND][3]+5, -1, -1);
  299.     PutPlayerInVehicle(playerid, g_SPAWNED_VEHICLE[playerid], 0);
  300.     if (GetPVarInt(playerid, "FirstSumo")) DeletePVar(playerid, "FirstSumo");
  301. }
  302.  
  303. CMD:sumo( playerid, params[] )
  304. {
  305.     if (IsPlayerInSumo(playerid))
  306.     {
  307.         SetPlayerSumo(playerid, 0);
  308.         SetPlayerSumoTime(playerid, 0);
  309.         g_PLAYERS_TOTAL--;
  310.         SendClientMessage(playerid, 0x00FF33FF, "[X]{FFFFFF} Você saiu do jogo: \"{00FF33}Sumo{FFFFFF}\"");
  311.         SetPlayerPos(playerid, 1642.3619, -2333.0234, 13.5469);
  312.         SetPlayerFacingAngle(playerid, 356.8151);
  313.         SetCameraBehindPlayer(playerid);
  314.         DestroyVehicle(g_SPAWNED_VEHICLE[playerid]);
  315.     }
  316.     else
  317.     {
  318.         g_PLAYERS_TOTAL++;
  319.         SetPlayerPos(playerid, 2924.0842,-3189.0569,102.2883);
  320.         SetPlayerFacingAngle(playerid, 174.5274);
  321.         SetTimerEx("CreateSumoVehicle", 1200, false, "i", playerid);
  322.         SetPlayerInterior(playerid, 0);
  323.         SetPlayerVirtualWorld(playerid, 0);
  324.         SendClientMessage(playerid, 0x00FF33FF, "[X]{FFFFFF} Você agora está jogando: \"{00FF33}Sumo{FFFFFF}\"");
  325.         SetPlayerSumo(playerid, 1);
  326.         SetPVarInt(playerid, "FirstSumo", 1);
  327.     }
  328.     return 1;  
  329. }
  330.  
  331. CMD:sumotime( playerid, params[] )
  332. {
  333.     if (!IsPlayerInSumo(playerid))
  334.         return SendClientMessage(playerid, 0x00FF33FF, "[X]{FFFFFF} Você não está no ringue.");
  335.     new
  336.         e_STRING[61];
  337.     format(e_STRING, sizeof e_STRING, "[X]{FFFFFF} Seu tempo no sumo é de {00FF33}%d{FFFFFF}/500.", GetPlayerSumoTime(playerid))
  338.     SendClientMessage(playerid, 0x00FF33FF, e_STRING);
  339.     return 1;  
  340. }
  341.  
  342. CMD:sumoplayers( playerid, params[] )
  343. {
  344.     new
  345.         e_STRING[70];
  346.     format(e_STRING, sizeof e_STRING, "[X]{FFFFFF} Jogadores atualmente no sumo {00FF33}%d{FFFFFF}/%i.", g_PLAYERS_TOTAL, GetMaxPlayers());
  347.     SendClientMessage(playerid, 0x00FF33FF, e_STRING);
  348.     return 1;
  349. }
  350.  
  351. CMD:ajudasumo( playerid, params[] )
  352.     return SendClientMessage(playerid, 0x00FF33FF, "[X]{FFFFFF} /sumo - /sumotime - /sumoplayers");
Add Comment
Please, Sign In to add comment