Advertisement
Jujuv

[PAWN | GM] Mini-Game - Escape

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