Advertisement
Jujuv

[PAWN | GM] MG - Escape

Jul 4th, 2014
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.88 KB | None | 0 0
  1. #include "INC\NGE_Main"
  2.  
  3.  
  4. //------------------[Enumérations]-------------------//
  5. enum
  6. {
  7.     TEAM_ESCAPERS,
  8.     TEAM_GUARDS
  9. }
  10. enum
  11. {
  12.     STEP1,
  13.     STEP2,
  14.     STEP3,
  15.     Ended
  16. }
  17. enum E_CHECKPOINTS
  18. {
  19.     Float:xPos,
  20.     Float:yPos,
  21.     Float:zPos
  22. }
  23. enum E_PLAYERINFOS
  24. {
  25.     team,
  26.     bool:IsSpawned,
  27.     bool:IsTakingCP
  28. }
  29. enum E_TEAMSINFO
  30. {
  31.     players
  32. }
  33. //-------------------[Tableaux]--------------------//
  34. new Float:gEscaperSpawns[][4] = //Points d'apparition de l'équipe "escaper"
  35. {
  36.     {5179.8052, -3395.5149, 12.8238, 10.0504},
  37.     {5162.5498, -3393.5613, 12.8205, 34.1773},
  38.     {5130.3335, -3392.2803, 12.8108, 20.7038},
  39.     {5125.9805, -3373.5413, 12.8055, 195.2087}
  40. };
  41.  
  42. new Float:gGuardSpawns[][4] = //Points d'apparition de l'équipe "guards"
  43. {
  44.     {5166.0029, -3368.1262, 8.3086, 182.7260},
  45.     {5147.5791, -3390.4114, 8.2958, 11.3777},
  46.     {5174.9072, -3384.6157, 8.3025, 126.6856},
  47.     {5123.3975, -3381.1401, 12.7458, 185.5695}
  48. };
  49.  
  50. new gTeams[2][E_TEAMSINFO];
  51. new gEscapeCheckpoints[3][E_CHECKPOINTS];
  52. new gPlayers[MAX_PLAYERS][E_PLAYERINFOS];
  53.  
  54. //------------------[Variables]-----------------//
  55. new gEscapersAtCP = 0;//Quantitée de fuyards sur le CP
  56. new gPlayersConnected = 0;
  57. new gMaxPlayersConnected = 0;//ID de joueur le plus élevé connécté
  58. new gGameState;
  59. new CPTimer;
  60. new TakeCPCalled;
  61. new Text:TD_TeamChoice;
  62. new Text:TD_CPTime;
  63.  
  64. //--------------------[Macros]------------------//
  65. #define ShowFullTeamMessage(%0) ShowTextDrawMessage(%0, TD_TeamChoice, "~r~ Cette equipe est dèja remplie !")
  66.  
  67. //------------------[Fonctions]-----------------//
  68. forward GameDelay();
  69. public GameDelay()
  70. {
  71.     if(gEscapersAtCP)
  72.     {
  73.         KillTimer(CPTimer);
  74.         TakeCPCalled = 0;
  75.         gEscapersAtCP = 0;
  76.         HideCPTimeForAll();
  77.     }
  78.    
  79.     gGameState = Ended;
  80.     DisableCPForAll();
  81.     FreezeAll();
  82.     SendClientMessageToAll(-1, "[SERVEUR]Les matons sont parvenus à repousser l'offensif et gagnent la partie !");
  83.     SendRconCommand("gmx");
  84. }
  85.  
  86. stock DisableCPForAll()
  87. {
  88.     for(new i = 0; i <= gMaxPlayersConnected; i++)
  89.     {
  90.         if(IsPlayerConnected(i))
  91.             DisablePlayerCheckpoint(i);
  92.     }
  93. }
  94.  
  95. stock FreezeAll()
  96. {
  97.     for(new i = 0; i <= gMaxPlayersConnected; i++)
  98.     {
  99.         if(IsPlayerConnected(i))
  100.             TogglePlayerControllable(i, 0);
  101.     }
  102. }
  103. stock LoadCheckpoints()
  104. {
  105.         gEscapeCheckpoints[0][xPos] = 5148.6641;
  106.         gEscapeCheckpoints[0][yPos] = -3390.521;
  107.         gEscapeCheckpoints[0][zPos] = 8.2928;
  108.  
  109.         gEscapeCheckpoints[1][xPos] = 5148.6011;
  110.         gEscapeCheckpoints[1][yPos] = -3398.3489;
  111.         gEscapeCheckpoints[1][zPos] = 8.2942;
  112.  
  113.         gEscapeCheckpoints[2][xPos] = 5199.0000;
  114.         gEscapeCheckpoints[2][yPos] = -3437.5762;
  115.         gEscapeCheckpoints[2][zPos] = 8.2583;
  116.  
  117.         return 1;
  118. }
  119.  
  120. stock RandomSpawn(playerid)
  121. {
  122.     new rdm = random(4);
  123.     switch(gPlayers[playerid][team])
  124.     {
  125.             case TEAM_ESCAPERS:
  126.                 {
  127.                     SetPlayerPos(playerid, gEscaperSpawns[rdm][0], gEscaperSpawns[rdm][1], gEscaperSpawns[rdm][2]);
  128.                     SetPlayerFacingAngle(playerid, gEscaperSpawns[rdm][3]);
  129.                 }
  130.             case TEAM_GUARDS:
  131.                 {
  132.                     SetPlayerPos(playerid, gGuardSpawns[rdm][0], gGuardSpawns[rdm][1], gGuardSpawns[rdm][2]);
  133.                     SetPlayerFacingAngle(playerid, gGuardSpawns[rdm][3]);
  134.                 }
  135.     }
  136.     gPlayers[playerid][IsSpawned] = true;
  137.    
  138.     return 1;
  139. }
  140.  
  141.  
  142. stock ShowTextDrawMessage(playerid, Text:textdrawID, message[])
  143. {
  144.     TextDrawHideForPlayer(playerid, textdrawID);
  145.     TextDrawSetString(textdrawID, message);
  146.     TextDrawShowForPlayer(playerid, textdrawID);
  147.  
  148. }
  149.  
  150. stock StopCapture()
  151. {
  152.     KillTimer(CPTimer);
  153.     TakeCPCalled = 0;
  154.     HideCPTimeForAll();
  155.    
  156.     return 1;
  157. }
  158.  
  159. stock HideCPTimeForAll()
  160. {
  161.     for(new i = 0; i <= gMaxPlayersConnected; i++)
  162.     {
  163.         if(gPlayers[i][team] == TEAM_ESCAPERS)
  164.             TextDrawHideForPlayer(i, TD_CPTime);
  165.     }
  166.  
  167.     return 1;
  168. }
  169.  
  170. forward TakeCP();
  171. public TakeCP()
  172. {
  173.     TakeCPCalled++;
  174.     if(TakeCPCalled == 30)
  175.     {
  176.         StopCapture();
  177.         WinCP();
  178.     }
  179.     else
  180.         ShowCPTime(30 - TakeCPCalled);
  181.  
  182.     return 1;
  183. }
  184.  
  185. stock WinCP()
  186. {
  187.     if(gGameState == Ended)
  188.         return 0;
  189.        
  190.     switch(gGameState)
  191.     {
  192.             case STEP1:
  193.                 {
  194.                         SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le premier Checkpoint ! [1/3]");
  195.                 }
  196.             case STEP2:
  197.                 {
  198.                         SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le second Checkpoint ! [2/3]");
  199.                 }
  200.             case STEP3:
  201.                 {
  202.                         SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le dernier Checkpoint et remporte donc la partie ! [3/3]");
  203.                         DisableCPForAll();
  204.                         FreezeAll();
  205.                         SendRconCommand("gmx");
  206.                 }
  207.     }
  208.  
  209.     gGameState++;
  210.     gEscapersAtCP = 0;
  211.     SetCPForAll();
  212.  
  213.     return 1;
  214. }
  215.  
  216. stock SetCP(playerid)
  217. {
  218.     DisablePlayerCheckpoint(playerid);
  219.     SetPlayerCheckpoint(playerid, gEscapeCheckpoints[gGameState][xPos], gEscapeCheckpoints[gGameState][yPos], gEscapeCheckpoints[gGameState][zPos], 3.0);
  220.  
  221.     return 1;
  222. }
  223.  
  224. stock SetCPForAll()
  225. {
  226.         for(new i = 0; i <= gMaxPlayersConnected; i++)
  227.         {
  228.                 if(IsPlayerConnected(i))
  229.                         SetCP(i);
  230.         }
  231.  
  232.         return 1;
  233. }
  234.  
  235. stock ShowCPTime(CaptureTime)
  236. {
  237.     new message[10];
  238.     format(message, sizeof(message), "%i", CaptureTime);
  239.     for(new i = 0; i <= gMaxPlayersConnected; i++)
  240.     {
  241.         if(gPlayers[i][team] == TEAM_ESCAPERS)
  242.         {
  243.                 ShowTextDrawMessage(i, TD_CPTime, message);
  244.         }
  245.     }
  246.  
  247.     return 1;
  248. }
  249.  
  250. //------------------[Callbacks]-----------------//
  251. main()
  252. {
  253.     print("\n----------------------------------");
  254.     print("Mini-Game : Escape by Jujuv ");
  255.     print("----------------------------------\n");
  256. }
  257.  
  258. public OnGameModeInit()
  259. {
  260.     LoadCheckpoints();
  261.     SetGameModeText("Mini-Game : Escape");
  262.  
  263.     AddPlayerClass(121, 5179.8052, -3395.5149, 12.8238, 10.0504, 30, 500, 33, 50, 25, 15);//TEAM_ESCAPERS
  264.     AddPlayerClass(281, 5166.0029, -3368.1262, 8.3086, 0182.7260, 31, 500, 34, 50, 25, 15);//TEAM_GUARDS
  265.  
  266.     TD_TeamChoice = TextDrawCreate(320, 240, "");
  267.     TD_CPTime = TextDrawCreate(320, 240, "");
  268.     TextDrawFont(TD_TeamChoice, 1);
  269.  
  270.     gGameState = STEP1;
  271.    
  272.     SetTimer("GameDelay", 600000, false);
  273.  
  274.     #include "INC/MAP/prison"
  275.  
  276. return 1;
  277. }
  278.  
  279. public OnPlayerRequestClass(playerid, classid)
  280. {
  281.     switch(classid)
  282.     {
  283.         case TEAM_ESCAPERS:
  284.             {
  285.                 if(gTeams[TEAM_ESCAPERS][players] > gPlayersConnected / 2 && gPlayersConnected >= 2)
  286.                 {
  287.                         ShowFullTeamMessage(playerid);
  288.                         return 0;
  289.                 }
  290.  
  291.                 SetPlayerSkin(playerid, 121);
  292.                 SetPlayerPos(playerid, 5159.8022, -3391.7324, 8.29562);
  293.                 SetPlayerFacingAngle(playerid, 1.1320);
  294.                 SetPlayerCameraPos(playerid, 5160.0029, -3389.7178, 8.2956);
  295.                 SetPlayerCameraLookAt(playerid, 5159.8022, -3391.7324, 8.29562);
  296.                
  297.  
  298.                 ShowTextDrawMessage(playerid, TD_TeamChoice, "~p~ Fuyards !");
  299.                 gPlayers[playerid][team] = TEAM_ESCAPERS;
  300.             }
  301.  
  302.         case TEAM_GUARDS:
  303.             {
  304.                 if(gTeams[TEAM_GUARDS][players] > gPlayersConnected / 2 && gPlayersConnected >= 2)
  305.                 {
  306.                         ShowFullTeamMessage(playerid);
  307.                         return 0;
  308.                 }
  309.  
  310.                 SetPlayerSkin(playerid, 281);
  311.                 SetPlayerPos(playerid, 5141.0894, -3391.5962, 17.3525);
  312.                 SetPlayerFacingAngle(playerid, 30.1289);
  313.                 SetPlayerCameraPos(playerid, 5141.6567, -3374.1262, 17.3553);
  314.                 SetPlayerCameraLookAt(playerid, 5141.0894, -3391.5962, 17.3525);
  315.                
  316.                 ShowTextDrawMessage(playerid, TD_TeamChoice, "~b~ Matons !");
  317.                 gPlayers[playerid][team] = TEAM_GUARDS;
  318.             }
  319.     }
  320.     return 1;
  321. }
  322.  
  323. public OnPlayerConnect(playerid)
  324. {
  325.     gPlayersConnected++;
  326.     gPlayers[playerid][team] = NO_TEAM;
  327.  
  328.     if(gMaxPlayersConnected < playerid)
  329.         gMaxPlayersConnected = playerid;
  330.  
  331.     gPlayers[playerid][IsSpawned] = false;
  332.     gPlayers[playerid][IsTakingCP] = false;
  333.  
  334.     return 1;
  335. }
  336.  
  337. public OnPlayerDisconnect(playerid, reason)
  338. {
  339.     gPlayersConnected--;
  340.  
  341.     if(playerid == gMaxPlayersConnected)
  342.       {
  343.          for(new i = gMaxPlayersConnected-1; i >= 0; i--)
  344.             {
  345.                   if(IsPlayerConnected(i))
  346.                       {gMaxPlayersConnected = i; break;}
  347.             }
  348.       }
  349.      
  350.     if(gPlayers[playerid][IsTakingCP])
  351.     {
  352.         gPlayers[playerid][IsTakingCP] = false;
  353.         gEscapersAtCP--;
  354.  
  355.         if(!gEscapersAtCP)
  356.             StopCapture();
  357.     }
  358.  
  359.     return 1;
  360. }
  361.  
  362. public OnPlayerSpawn(playerid)
  363. {
  364.     TextDrawHideForPlayer(playerid, TD_TeamChoice);
  365.  
  366.     gTeams[gPlayers[playerid][team]][players]++;
  367.    
  368.     RandomSpawn(playerid);
  369.  
  370.     if(gPlayers[playerid][team] == TEAM_ESCAPERS)
  371.         SetCP(playerid);
  372.  
  373.     return 1;
  374. }
  375.  
  376. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  377. {
  378.     if(gPlayers[playerid][team] == gPlayers[issuerid][team])
  379.         {
  380.             new Float:pHealth;
  381.             GetPlayerHealth(playerid, pHealth);
  382.             SetPlayerHealth(playerid, pHealth+amount);
  383.         }
  384. }
  385.  
  386. public OnPlayerEnterCheckpoint(playerid)
  387. {
  388.     if(gPlayers[playerid][team] != TEAM_ESCAPERS)
  389.         return 1;
  390.  
  391.     if(!gEscapersAtCP)
  392.         CPTimer = SetTimer("TakeCP", 1000, true);
  393.  
  394.     gEscapersAtCP++;
  395.     gPlayers[playerid][IsTakingCP] = true;
  396.  
  397.     return 1;
  398. }
  399.  
  400. public OnPlayerLeaveCheckpoint(playerid)
  401. {
  402.     if(!gPlayers[playerid][IsSpawned])
  403.         return 0;
  404.        
  405.     gPlayers[playerid][IsTakingCP] = false;
  406.     gEscapersAtCP--;
  407.  
  408.     if(!gEscapersAtCP)
  409.         StopCapture();
  410.  
  411.  
  412.     return 1;
  413. }
  414.  
  415.  
  416. public OnPlayerDeath(playerid, killerid, reason)
  417. {
  418.     if(IsPlayerInCheckpoint(playerid) && gPlayers[playerid][team] == TEAM_ESCAPERS)
  419.         OnPlayerLeaveCheckpoint(playerid);
  420.        
  421.     gPlayers[playerid][IsSpawned] = false;
  422.    
  423.     return 1;
  424. }
  425.  
  426.  
  427. // Testing CMDS
  428. public OnPlayerCommandText(playerid, cmdtext[])
  429. {
  430.     if (!strcmp("/kill", cmdtext, true) && IsPlayerAdmin(playerid))
  431.     {
  432.         SetPlayerHealth(playerid, 0.0);
  433.         return 1;
  434.     }
  435.    
  436.     if(!strcmp("/debug", cmdtext, true) && IsPlayerAdmin(playerid))
  437.     {
  438.         new str[500];
  439.         format(str, sizeof(str), "gEscaperAtCP: %i\ngPlayersConnected: %i\ngMaxPlayersConnected : %i\ngGameState: %i\nTakeCPCalled: %i", gEscapersAtCP, gPlayersConnected, gMaxPlayersConnected, gGameState, TakeCPCalled);
  440.         ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "DEBUG", str, "Close", "");
  441.         return 1;
  442.     }
  443.     return 0;
  444. }
  445.  
  446. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  447. {
  448.         if(IsPlayerAdmin(playerid))
  449.             { SetPlayerPosFindZ(playerid, fX, fY, fZ); }
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement