Advertisement
Southclaw

Southclaw's Car Sumo Minigame

Aug 13th, 2012
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.13 KB | None | 0 0
  1. #define SMO_INDEX_FILE      "Sumo/index.ini"
  2. #define SMO_DATA_FILE       "Sumo/%s.dat"
  3. #define SMO_CAM_FILE        "smocam.%s"
  4. #define SMO_MAX_ARENA       (16)
  5. #define SMO_MAX_NAME        (32)
  6. #define SMO_MAX_SPAWN       (8)
  7. #define SMO_SPAWN_ZOFFSET   (5.0)
  8.  
  9. #define SMO_SPEC_NONE       (-1)
  10. #define SMO_SPEC_ARENA      (-2)
  11.  
  12. enum E_SMO_ARENA_DATA
  13. {
  14.     smo_Name[SMO_MAX_NAME],
  15.     smo_MaxSpawns,
  16.     smo_Camera,
  17.     Float:smo_Base,
  18.     Float:smo_SpawnX[SMO_MAX_SPAWN],
  19.     Float:smo_SpawnY[SMO_MAX_SPAWN],
  20.     Float:smo_SpawnZ[SMO_MAX_SPAWN],
  21.     Float:smo_SpawnR[SMO_MAX_SPAWN]
  22. }
  23.  
  24. new
  25.     smo_Data[SMO_MAX_ARENA][E_SMO_ARENA_DATA],
  26.     smo_CurrentArena;
  27.  
  28. new
  29.     PlayerText:smo_TdBack,
  30.     PlayerText:smo_TdText,
  31.     PlayerText:smo_TdVehicle,
  32.     PlayerText:smo_TdSpawn,
  33.  
  34.     smo_TimesFallen[MAX_PLAYERS],
  35.     smo_SpawnCount[MAX_PLAYERS],
  36.     smo_PlayerVehicleID[MAX_PLAYERS],
  37.     smo_PlayerVehicleModel[MAX_PLAYERS],
  38.     smo_Spectating[MAX_PLAYERS],
  39.     Timer:smo_SpawnTimer[MAX_PLAYERS],
  40.     Iterator:smo_SpawnedIndex<MAX_PLAYERS>;
  41.  
  42. new
  43.     smo_Vehicles[19]=
  44.     {
  45.         504,
  46.         498,
  47.         502,
  48.         503,
  49.         475,
  50.         470,
  51.         478,
  52.         571,
  53.         471,
  54.         479,
  55.         482,
  56.         483,
  57.         489,
  58.         494,
  59.         495,
  60.         496,
  61.         542,
  62.         530,
  63.         572
  64.     };
  65.  
  66. CMD:sumo(playerid, params[])
  67. {
  68.     if(bServerGlobalSettings & rc_Started)
  69.     {
  70.         msg(playerid, YELLOW, " >  You can't start a minigame while a race is active.");
  71.         return 1;
  72.     }
  73.     if(gCurrentChallenge != CHALLENGE_NONE)
  74.     {
  75.         msg(playerid, YELLOW, " >  You can't start a minigame while a challenge is active.");
  76.         return 1;
  77.     }
  78.     if(gCurrentMinigame[playerid] == MINIGAME_CARSUMO)
  79.     {
  80.         smo_Quit(playerid);
  81.     }
  82.     else if(gCurrentMinigame[playerid] == MINIGAME_NONE)
  83.     {
  84.         smo_CurrentArena = 0;
  85.         smo_Join(playerid);
  86.         msgaF(YELLOW, " >  %P"#C_YELLOW" has gone to the "#C_BLUE"Sumo "#C_YELLOW"minigame! Type "#C_ORANGE"/sumo "#C_YELLOW"to join.", playerid);
  87.     }
  88.     else
  89.     {
  90.         msg(playerid, YELLOW, " >  Please exit your current minigame before joining another");
  91.     }
  92.     return 1;
  93. }
  94.  
  95. smo_Join(playerid)
  96. {
  97.     gCurrentMinigame[playerid] = MINIGAME_CARSUMO;
  98.     smo_FormatVehicleList(playerid);
  99.  
  100.     if(Iter_Contains(smo_SpawnedIndex, playerid))Iter_Remove(smo_SpawnedIndex, playerid);
  101.  
  102.     PlayerTextDrawSetString(playerid, smo_TdSpawn, "5");
  103.     PlayerTextDrawSetSelectable(playerid, smo_TdSpawn, false);
  104.     smo_SpawnTimer[playerid] = defer smo_UpdateSpawnButton(playerid);
  105.     smo_SpawnCount[playerid] = 4;
  106.     smo_Spectate(playerid);
  107. }
  108.  
  109. smo_Spawn(playerid)
  110. {
  111.     new spawn = random(3);
  112.    
  113.     ExitCamera(playerid);
  114.  
  115.     TogglePlayerSpectating(playerid, false);
  116.     TogglePlayerControllable(playerid, true);
  117.  
  118.     SetPlayerPos(playerid,
  119.         smo_Data[smo_CurrentArena][smo_SpawnX][spawn],
  120.         smo_Data[smo_CurrentArena][smo_SpawnY][spawn],
  121.         smo_Data[smo_CurrentArena][smo_SpawnZ][spawn] + SMO_SPAWN_ZOFFSET);
  122.  
  123.     smo_PlayerVehicleID[playerid] = CreateVehicle(smo_PlayerVehicleModel[playerid],
  124.         smo_Data[smo_CurrentArena][smo_SpawnX][spawn],
  125.         smo_Data[smo_CurrentArena][smo_SpawnY][spawn],
  126.         smo_Data[smo_CurrentArena][smo_SpawnZ][spawn] + SMO_SPAWN_ZOFFSET,
  127.         smo_Data[smo_CurrentArena][smo_SpawnR][spawn], -1, -1, -1);
  128.  
  129.     SetVehicleParamsEx(smo_PlayerVehicleID[playerid], 1, 1, 0, 0, 0, 0, 0);
  130.     PutPlayerInVehicle(playerid, smo_PlayerVehicleID[playerid], 0);
  131.  
  132.     PlayerTextDrawShow(playerid, smo_TdBack);
  133.     PlayerTextDrawShow(playerid, smo_TdText);
  134.     smo_HideLobbyControls(playerid);
  135.  
  136.     Iter_Add(smo_SpawnedIndex, playerid);
  137.     smo_Spectating[playerid] = SMO_SPEC_NONE;
  138. }
  139.  
  140. script_sumo_Update(playerid)
  141. {
  142.     if(Iter_Contains(smo_SpawnedIndex, playerid))
  143.     {
  144.         new
  145.             iVehicle = GetPlayerVehicleID(playerid),
  146.             Float:z;
  147.  
  148.         GetPlayerPos(playerid, z, z, z);
  149.         if(z < smo_Data[smo_CurrentArena][smo_Base])smo_Out(playerid);
  150.        
  151.         if(!IsValidVehicle(iVehicle))
  152.             PutPlayerInVehicle(playerid, smo_PlayerVehicleID[playerid], 0);
  153.     }
  154.     return 1;
  155. }
  156.  
  157.  
  158. smo_Out(playerid)
  159. {
  160.     Iter_Remove(smo_SpawnedIndex, playerid);
  161.     smo_TimesFallen[playerid]++;
  162.     smo_UpdateTextDraw(playerid);
  163.    
  164.     for(new i;i<MAX_PLAYERS;i++)
  165.     {
  166.         if(!IsPlayerConnected(i) || playerid == i || gCurrentMinigame[i] != MINIGAME_CARSUMO)continue;
  167.         if(smo_Spectating[i] == playerid)
  168.         {
  169.             smo_Spectate(i);
  170.         }
  171.     }
  172.  
  173.     smo_Spectate(playerid);
  174.     DestroyVehicle(smo_PlayerVehicleID[playerid]);
  175.  
  176.     PlayerTextDrawSetString(playerid, smo_TdSpawn, "5");
  177.     PlayerTextDrawSetSelectable(playerid, smo_TdSpawn, false);
  178.     smo_SpawnTimer[playerid] = defer smo_UpdateSpawnButton(playerid);
  179.     smo_SpawnCount[playerid] = 4;
  180.     return 1;
  181. }
  182. smo_ShowLobbyControls(playerid)
  183. {
  184.     PlayerTextDrawShow(playerid, smo_TdVehicle);
  185.     PlayerTextDrawShow(playerid, smo_TdSpawn);
  186.     SelectTextDraw(playerid, YELLOW);
  187. }
  188. smo_HideLobbyControls(playerid)
  189. {
  190.     PlayerTextDrawHide(playerid, smo_TdVehicle);
  191.     PlayerTextDrawHide(playerid, smo_TdSpawn);
  192.     CancelSelectTextDraw(playerid);
  193. }
  194. timer smo_UpdateSpawnButton[1000](playerid)
  195. {
  196.     if(smo_SpawnCount[playerid] <= 0)
  197.     {
  198.         PlayerTextDrawSetString(playerid, smo_TdSpawn, "Spawn");
  199.         PlayerTextDrawSetSelectable(playerid, smo_TdSpawn, true);
  200.     }
  201.     else
  202.     {
  203.         new
  204.             tmpStr[2];
  205.  
  206.         valstr(tmpStr, smo_SpawnCount[playerid]);
  207.         PlayerTextDrawSetString(playerid, smo_TdSpawn, tmpStr);
  208.  
  209.         smo_SpawnCount[playerid]--;
  210.         smo_SpawnTimer[playerid] = defer smo_UpdateSpawnButton(playerid);
  211.     }
  212.     smo_ShowLobbyControls(playerid);
  213. }
  214. script_Sumo_ClickPTD(playerid, PlayerText:playertextid)
  215. {
  216.     if(playertextid == smo_TdVehicle)
  217.     {
  218.         smo_FormatVehicleList(playerid);
  219.     }
  220.     if(playertextid == smo_TdSpawn)
  221.     {
  222.         smo_Spawn(playerid);
  223.     }
  224. }
  225.  
  226. smo_Spectate(playerid)
  227. {
  228.     if(Iter_Count(smo_SpawnedIndex) == 0)
  229.     {
  230.         msg(playerid, YELLOW, " >  You are now spectating: "#C_BLUE"Arena");
  231.         PlayCameraMover(playerid, smo_Data[smo_CurrentArena][smo_Camera], .loop = true);
  232.         smo_Spectating[playerid] = SMO_SPEC_ARENA;
  233.     }
  234.     else
  235.     {
  236.         new randomPlayer = Iter_Random(smo_SpawnedIndex);
  237.         while(randomPlayer == playerid)randomPlayer = Iter_Random(smo_SpawnedIndex);
  238.  
  239.         msgF(playerid, YELLOW, " >  You are now spectating: %P", randomPlayer);
  240.  
  241.         TogglePlayerSpectating(playerid, true);
  242.         PlayerSpectateVehicle(playerid, GetPlayerVehicleID(randomPlayer));
  243.         smo_Spectating[playerid] = randomPlayer;
  244.     }
  245. }
  246.  
  247. smo_UpdateTextDraw(playerid)
  248. {
  249.     new str[11];
  250.     format(str, 11, "Falls: %d", smo_TimesFallen[playerid]);
  251.     PlayerTextDrawSetString(playerid, smo_TdText, str);
  252.  
  253.     PlayerTextDrawShow(playerid, smo_TdBack);
  254.     PlayerTextDrawShow(playerid, smo_TdText);
  255. }
  256.  
  257. smo_Quit(playerid, msg= true)
  258. {
  259.     gCurrentMinigame[playerid] = MINIGAME_NONE;
  260.     if(smo_Spectating[playerid] != SMO_SPEC_NONE)
  261.     {
  262.         if(smo_Spectating[playerid] == SMO_SPEC_ARENA)ExitCamera(playerid);
  263.         TogglePlayerSpectating(playerid, false);
  264.         SpawnPlayer(playerid);
  265.        
  266.     }
  267.     stop smo_SpawnTimer[playerid];
  268.     for(new i;i<MAX_PLAYERS;i++)
  269.     {
  270.         if(!IsPlayerConnected(i))continue;
  271.         if(smo_Spectating[i] == playerid && playerid != i)
  272.         {
  273.             smo_Spectate(i);
  274.         }
  275.     }
  276.     Iter_Remove(smo_SpawnedIndex, playerid);
  277.     DestroyVehicle(smo_PlayerVehicleID[playerid]);
  278.  
  279.  
  280.     PlayerTextDrawHide(playerid, smo_TdBack);
  281.     PlayerTextDrawHide(playerid, smo_TdText);
  282.     smo_HideLobbyControls(playerid);
  283.  
  284.     if(msg)msgaF(YELLOW, " >  %P"#C_YELLOW" has left the "#C_BLUE"/sumo "#C_YELLOW"minigame.", playerid);
  285.    
  286.     new count;
  287.  
  288.     PlayerLoop(i)
  289.         if(gCurrentMinigame[i] == MINIGAME_CARSUMO)count++;
  290.  
  291.     if(count == 0)for(new i;i<MAX_PLAYERS;i++)
  292.         smo_TimesFallen[i] = 0;
  293.  
  294.     return 0;
  295. }
  296.  
  297. smo_FormatVehicleList(playerid)
  298. {
  299.     new
  300.         list[256];
  301.  
  302.     for(new i;i<sizeof(smo_Vehicles);i++)
  303.     {
  304.         strcat(list, VehicleNames[smo_Vehicles[i]-400]);
  305.         strcat(list, "\n");
  306.     }
  307.     ShowPlayerDialog(playerid, d_SumoList, DIALOG_STYLE_LIST, "Choose a vehicle", list, "Accept", "Cancel");
  308. }
  309. script_sumo_DialogResponse(playerid, dialogid, response, listitem)
  310. {
  311.     if(dialogid == d_SumoList && response)
  312.     {
  313.         smo_PlayerVehicleModel[playerid] = smo_Vehicles[listitem];
  314.     }
  315. }
  316.  
  317. smo_LoadArenas()
  318. {
  319.     new
  320.         File:idxFile,
  321.         File:dataFile,
  322.         line[128],
  323.         data[128],
  324.         str[42],
  325.         spawnIdx,
  326.         idx;
  327.  
  328.     if(!fexist(SMO_INDEX_FILE))return print("ERROR: Car-Sumo Arena Index Not Found");
  329.    
  330.     idxFile = fopen(SMO_INDEX_FILE, io_read);
  331.    
  332.     while(fread(idxFile, line))
  333.     {
  334.         line[strlen(line)-2] = EOS;
  335.  
  336.         if(sscanf(line, "p<=>s[32]f", smo_Data[idx][smo_Name], smo_Data[idx][smo_Base]))print("ERROR: Arena Data Corrupted");
  337.  
  338.         format(str, 42, SMO_DATA_FILE, smo_Data[idx][smo_Name]);
  339.  
  340.         if(!fexist(str))
  341.         {
  342.             printf("ERROR: Arena data file '%s' not found", str);
  343.             continue;
  344.         }
  345.  
  346.         dataFile = fopen(str, io_read);
  347.  
  348.         while(fread(dataFile, data))
  349.         {
  350.             sscanf(data, "p<,>ffff",
  351.                 smo_Data[idx][smo_SpawnX][spawnIdx],
  352.                 smo_Data[idx][smo_SpawnY][spawnIdx],
  353.                 smo_Data[idx][smo_SpawnZ][spawnIdx],
  354.                 smo_Data[idx][smo_SpawnR][spawnIdx]);
  355.  
  356.             spawnIdx++;
  357.         }
  358.         format(str, 42, SMO_CAM_FILE, smo_Data[idx][smo_Name]);
  359.         smo_Data[idx][smo_MaxSpawns] = spawnIdx;
  360.         smo_Data[idx][smo_Camera] = LoadCameraMover(str);
  361.  
  362.         fclose(dataFile);
  363.         idx++;
  364.     }
  365.     return 1;
  366. }
  367.  
  368. smo_LoadTextDraws(playerid)
  369. {
  370.     smo_TdBack                      =CreatePlayerTextDraw(playerid, 19.000000, 309.000000, "____");
  371.     PlayerTextDrawBackgroundColor   (playerid, smo_TdBack, 255);
  372.     PlayerTextDrawFont              (playerid, smo_TdBack, 1);
  373.     PlayerTextDrawLetterSize        (playerid, smo_TdBack, 0.319999, 1.899999);
  374.     PlayerTextDrawColor             (playerid, smo_TdBack, -1);
  375.     PlayerTextDrawSetOutline        (playerid, smo_TdBack, 0);
  376.     PlayerTextDrawSetProportional   (playerid, smo_TdBack, 1);
  377.     PlayerTextDrawSetShadow         (playerid, smo_TdBack, 1);
  378.     PlayerTextDrawUseBox            (playerid, smo_TdBack, 1);
  379.     PlayerTextDrawBoxColor          (playerid, smo_TdBack, 0xFFFFFFFF);
  380.     PlayerTextDrawTextSize          (playerid, smo_TdBack, 81.000000, 0.000000);
  381.  
  382.     smo_TdText                      =CreatePlayerTextDraw(playerid, 20.000000, 310.000000, "Falls: 0");
  383.     PlayerTextDrawBackgroundColor   (playerid, smo_TdText, 255);
  384.     PlayerTextDrawFont              (playerid, smo_TdText, 1);
  385.     PlayerTextDrawLetterSize        (playerid, smo_TdText, 0.300000, 1.699998);
  386.     PlayerTextDrawColor             (playerid, smo_TdText, -1);
  387.     PlayerTextDrawSetOutline        (playerid, smo_TdText, 0);
  388.     PlayerTextDrawSetProportional   (playerid, smo_TdText, 1);
  389.     PlayerTextDrawSetShadow         (playerid, smo_TdText, 1);
  390.     PlayerTextDrawUseBox            (playerid, smo_TdText, 1);
  391.     PlayerTextDrawBoxColor          (playerid, smo_TdText, 0x000000A0);
  392.     PlayerTextDrawTextSize          (playerid, smo_TdText, 80.000000, 0.000000);
  393.  
  394.     smo_TdVehicle                   =CreatePlayerTextDraw(playerid, 320.000000, 320.000000, "Change Vehicle");
  395.     PlayerTextDrawAlignment         (playerid, smo_TdVehicle, 2);
  396.     PlayerTextDrawBackgroundColor   (playerid, smo_TdVehicle, 255);
  397.     PlayerTextDrawFont              (playerid, smo_TdVehicle, 1);
  398.     PlayerTextDrawLetterSize        (playerid, smo_TdVehicle, 0.400000, 2.000000);
  399.     PlayerTextDrawColor             (playerid, smo_TdVehicle, -1);
  400.     PlayerTextDrawSetOutline        (playerid, smo_TdVehicle, 0);
  401.     PlayerTextDrawSetProportional   (playerid, smo_TdVehicle, 1);
  402.     PlayerTextDrawSetShadow         (playerid, smo_TdVehicle, 1);
  403.     PlayerTextDrawUseBox            (playerid, smo_TdVehicle, 1);
  404.     PlayerTextDrawBoxColor          (playerid, smo_TdVehicle, 100);
  405.     PlayerTextDrawTextSize          (playerid, smo_TdVehicle, 18.000000, 110.000000);
  406.     PlayerTextDrawSetSelectable     (playerid, smo_TdVehicle, true);
  407.  
  408.     smo_TdSpawn                     =CreatePlayerTextDraw(playerid, 320.000000, 344.000000, "5");
  409.     PlayerTextDrawAlignment         (playerid, smo_TdSpawn, 2);
  410.     PlayerTextDrawBackgroundColor   (playerid, smo_TdSpawn, 255);
  411.     PlayerTextDrawFont              (playerid, smo_TdSpawn, 1);
  412.     PlayerTextDrawLetterSize        (playerid, smo_TdSpawn, 0.400000, 2.000000);
  413.     PlayerTextDrawColor             (playerid, smo_TdSpawn, -1);
  414.     PlayerTextDrawSetOutline        (playerid, smo_TdSpawn, 0);
  415.     PlayerTextDrawSetProportional   (playerid, smo_TdSpawn, 1);
  416.     PlayerTextDrawSetShadow         (playerid, smo_TdSpawn, 1);
  417.     PlayerTextDrawUseBox            (playerid, smo_TdSpawn, 1);
  418.     PlayerTextDrawBoxColor          (playerid, smo_TdSpawn, 100);
  419.     PlayerTextDrawTextSize          (playerid, smo_TdSpawn, 18.000000, 110.000000);
  420. }
  421. smo_UnloadTextDraws(playerid)
  422. {
  423.     PlayerTextDrawDestroy(playerid, smo_TdBack);
  424.     PlayerTextDrawDestroy(playerid, smo_TdText);
  425.     PlayerTextDrawDestroy(playerid, smo_TdVehicle);
  426.     PlayerTextDrawDestroy(playerid, smo_TdSpawn);
  427. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement