Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "INC\NGE_Main"
- //------------------[Enumérations]-------------------//
- enum
- {
- TEAM_ESCAPERS,
- TEAM_GUARDS
- }
- enum
- {
- STEP1,
- STEP2,
- STEP3,
- Ended
- }
- enum E_CHECKPOINTS
- {
- Float:xPos,
- Float:yPos,
- Float:zPos
- }
- enum E_PLAYERINFOS
- {
- team,
- bool:IsSpawned,
- bool:IsTakingCP
- }
- enum E_TEAMSINFO
- {
- players
- }
- //-------------------[Tableaux]--------------------//
- new Float:gEscaperSpawns[][4] = //Points d'apparition de l'équipe "escaper"
- {
- {5179.8052, -3395.5149, 12.8238, 10.0504},
- {5162.5498, -3393.5613, 12.8205, 34.1773},
- {5130.3335, -3392.2803, 12.8108, 20.7038},
- {5125.9805, -3373.5413, 12.8055, 195.2087}
- };
- new Float:gGuardSpawns[][4] = //Points d'apparition de l'équipe "guards"
- {
- {5166.0029, -3368.1262, 8.3086, 182.7260},
- {5147.5791, -3390.4114, 8.2958, 11.3777},
- {5174.9072, -3384.6157, 8.3025, 126.6856},
- {5123.3975, -3381.1401, 12.7458, 185.5695}
- };
- new gTeams[2][E_TEAMSINFO];
- new gEscapeCheckpoints[3][E_CHECKPOINTS];
- new gPlayers[MAX_PLAYERS][E_PLAYERINFOS];
- //------------------[Variables]-----------------//
- new gEscapersAtCP = 0;//Quantitée de fuyards sur le CP
- new gPlayersConnected = 0;
- new gMaxPlayersConnected = 0;//ID de joueur le plus élevé connécté
- new gGameState;
- new CPTimer;
- new TakeCPCalled;
- new Text:TD_TeamChoice;
- new Text:TD_CPTime;
- //--------------------[Macros]------------------//
- #define ShowFullTeamMessage(%0) ShowTextDrawMessage(%0, TD_TeamChoice, "~r~ Cette equipe est dèja remplie !")
- //------------------[Fonctions]-----------------//
- forward GameDelay();
- public GameDelay()
- {
- if(gEscapersAtCP)
- {
- KillTimer(CPTimer);
- TakeCPCalled = 0;
- gEscapersAtCP = 0;
- HideCPTimeForAll();
- }
- gGameState = Ended;
- DisableCPForAll();
- FreezeAll();
- SendClientMessageToAll(-1, "[SERVEUR]Les matons sont parvenus à repousser l'offensif et gagnent la partie !");
- SendRconCommand("gmx");
- }
- stock DisableCPForAll()
- {
- for(new i = 0; i <= gMaxPlayersConnected; i++)
- {
- if(IsPlayerConnected(i))
- DisablePlayerCheckpoint(i);
- }
- }
- stock FreezeAll()
- {
- for(new i = 0; i <= gMaxPlayersConnected; i++)
- {
- if(IsPlayerConnected(i))
- TogglePlayerControllable(i, 0);
- }
- }
- stock LoadCheckpoints()
- {
- gEscapeCheckpoints[0][xPos] = 5148.6641;
- gEscapeCheckpoints[0][yPos] = -3390.521;
- gEscapeCheckpoints[0][zPos] = 8.2928;
- gEscapeCheckpoints[1][xPos] = 5148.6011;
- gEscapeCheckpoints[1][yPos] = -3398.3489;
- gEscapeCheckpoints[1][zPos] = 8.2942;
- gEscapeCheckpoints[2][xPos] = 5199.0000;
- gEscapeCheckpoints[2][yPos] = -3437.5762;
- gEscapeCheckpoints[2][zPos] = 8.2583;
- return 1;
- }
- stock RandomSpawn(playerid)
- {
- new rdm = random(4);
- switch(gPlayers[playerid][team])
- {
- case TEAM_ESCAPERS:
- {
- SetPlayerPos(playerid, gEscaperSpawns[rdm][0], gEscaperSpawns[rdm][1], gEscaperSpawns[rdm][2]);
- SetPlayerFacingAngle(playerid, gEscaperSpawns[rdm][3]);
- }
- case TEAM_GUARDS:
- {
- SetPlayerPos(playerid, gGuardSpawns[rdm][0], gGuardSpawns[rdm][1], gGuardSpawns[rdm][2]);
- SetPlayerFacingAngle(playerid, gGuardSpawns[rdm][3]);
- }
- }
- gPlayers[playerid][IsSpawned] = true;
- return 1;
- }
- stock ShowTextDrawMessage(playerid, Text:textdrawID, message[])
- {
- TextDrawHideForPlayer(playerid, textdrawID);
- TextDrawSetString(textdrawID, message);
- TextDrawShowForPlayer(playerid, textdrawID);
- }
- stock StopCapture()
- {
- KillTimer(CPTimer);
- TakeCPCalled = 0;
- HideCPTimeForAll();
- return 1;
- }
- stock HideCPTimeForAll()
- {
- for(new i = 0; i <= gMaxPlayersConnected; i++)
- {
- if(gPlayers[i][team] == TEAM_ESCAPERS)
- TextDrawHideForPlayer(i, TD_CPTime);
- }
- return 1;
- }
- forward TakeCP();
- public TakeCP()
- {
- TakeCPCalled++;
- if(TakeCPCalled == 30)
- {
- StopCapture();
- WinCP();
- }
- else
- ShowCPTime(30 - TakeCPCalled);
- return 1;
- }
- stock WinCP()
- {
- if(gGameState == Ended)
- return 0;
- switch(gGameState)
- {
- case STEP1:
- {
- SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le premier Checkpoint ! [1/3]");
- }
- case STEP2:
- {
- SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le second Checkpoint ! [2/3]");
- }
- case STEP3:
- {
- SendClientMessageToAll(-1, "[SERVEUR] L'équipe fuyards a capturé le dernier Checkpoint et remporte donc la partie ! [3/3]");
- DisableCPForAll();
- FreezeAll();
- SendRconCommand("gmx");
- }
- }
- gGameState++;
- gEscapersAtCP = 0;
- SetCPForAll();
- return 1;
- }
- stock SetCP(playerid)
- {
- DisablePlayerCheckpoint(playerid);
- SetPlayerCheckpoint(playerid, gEscapeCheckpoints[gGameState][xPos], gEscapeCheckpoints[gGameState][yPos], gEscapeCheckpoints[gGameState][zPos], 3.0);
- return 1;
- }
- stock SetCPForAll()
- {
- for(new i = 0; i <= gMaxPlayersConnected; i++)
- {
- if(IsPlayerConnected(i))
- SetCP(i);
- }
- return 1;
- }
- stock ShowCPTime(CaptureTime)
- {
- new message[10];
- format(message, sizeof(message), "%i", CaptureTime);
- for(new i = 0; i <= gMaxPlayersConnected; i++)
- {
- if(gPlayers[i][team] == TEAM_ESCAPERS)
- {
- ShowTextDrawMessage(i, TD_CPTime, message);
- }
- }
- return 1;
- }
- //------------------[Callbacks]-----------------//
- main()
- {
- print("\n----------------------------------");
- print("Mini-Game : Escape by Jujuv ");
- print("----------------------------------\n");
- }
- public OnGameModeInit()
- {
- LoadCheckpoints();
- SetGameModeText("Mini-Game : Escape");
- AddPlayerClass(121, 5179.8052, -3395.5149, 12.8238, 10.0504, 30, 500, 33, 50, 25, 15);//TEAM_ESCAPERS
- AddPlayerClass(281, 5166.0029, -3368.1262, 8.3086, 0182.7260, 31, 500, 34, 50, 25, 15);//TEAM_GUARDS
- TD_TeamChoice = TextDrawCreate(320, 240, "");
- TD_CPTime = TextDrawCreate(320, 240, "");
- TextDrawFont(TD_TeamChoice, 1);
- gGameState = STEP1;
- SetTimer("GameDelay", 600000, false);
- #include "INC/MAP/prison"
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- switch(classid)
- {
- case TEAM_ESCAPERS:
- {
- if(gTeams[TEAM_ESCAPERS][players] > gPlayersConnected / 2 && gPlayersConnected >= 2)
- {
- ShowFullTeamMessage(playerid);
- return 0;
- }
- SetPlayerSkin(playerid, 121);
- SetPlayerPos(playerid, 5159.8022, -3391.7324, 8.29562);
- SetPlayerFacingAngle(playerid, 1.1320);
- SetPlayerCameraPos(playerid, 5160.0029, -3389.7178, 8.2956);
- SetPlayerCameraLookAt(playerid, 5159.8022, -3391.7324, 8.29562);
- ShowTextDrawMessage(playerid, TD_TeamChoice, "~p~ Fuyards !");
- gPlayers[playerid][team] = TEAM_ESCAPERS;
- }
- case TEAM_GUARDS:
- {
- if(gTeams[TEAM_GUARDS][players] > gPlayersConnected / 2 && gPlayersConnected >= 2)
- {
- ShowFullTeamMessage(playerid);
- return 0;
- }
- SetPlayerSkin(playerid, 281);
- SetPlayerPos(playerid, 5141.0894, -3391.5962, 17.3525);
- SetPlayerFacingAngle(playerid, 30.1289);
- SetPlayerCameraPos(playerid, 5141.6567, -3374.1262, 17.3553);
- SetPlayerCameraLookAt(playerid, 5141.0894, -3391.5962, 17.3525);
- ShowTextDrawMessage(playerid, TD_TeamChoice, "~b~ Matons !");
- gPlayers[playerid][team] = TEAM_GUARDS;
- }
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- gPlayersConnected++;
- gPlayers[playerid][team] = NO_TEAM;
- if(gMaxPlayersConnected < playerid)
- gMaxPlayersConnected = playerid;
- gPlayers[playerid][IsSpawned] = false;
- gPlayers[playerid][IsTakingCP] = false;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- gPlayersConnected--;
- if(playerid == gMaxPlayersConnected)
- {
- for(new i = gMaxPlayersConnected-1; i >= 0; i--)
- {
- if(IsPlayerConnected(i))
- {gMaxPlayersConnected = i; break;}
- }
- }
- if(gPlayers[playerid][IsTakingCP])
- {
- gPlayers[playerid][IsTakingCP] = false;
- gEscapersAtCP--;
- if(!gEscapersAtCP)
- StopCapture();
- }
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- TextDrawHideForPlayer(playerid, TD_TeamChoice);
- gTeams[gPlayers[playerid][team]][players]++;
- RandomSpawn(playerid);
- if(gPlayers[playerid][team] == TEAM_ESCAPERS)
- SetCP(playerid);
- return 1;
- }
- public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
- {
- if(gPlayers[playerid][team] == gPlayers[issuerid][team])
- {
- new Float:pHealth;
- GetPlayerHealth(playerid, pHealth);
- SetPlayerHealth(playerid, pHealth+amount);
- }
- }
- public OnPlayerEnterCheckpoint(playerid)
- {
- if(gPlayers[playerid][team] != TEAM_ESCAPERS)
- return 1;
- if(!gEscapersAtCP)
- CPTimer = SetTimer("TakeCP", 1000, true);
- gEscapersAtCP++;
- gPlayers[playerid][IsTakingCP] = true;
- return 1;
- }
- public OnPlayerLeaveCheckpoint(playerid)
- {
- if(!gPlayers[playerid][IsSpawned])
- return 0;
- gPlayers[playerid][IsTakingCP] = false;
- gEscapersAtCP--;
- if(!gEscapersAtCP)
- StopCapture();
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(IsPlayerInCheckpoint(playerid) && gPlayers[playerid][team] == TEAM_ESCAPERS)
- OnPlayerLeaveCheckpoint(playerid);
- gPlayers[playerid][IsSpawned] = false;
- return 1;
- }
- // Testing CMDS
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (!strcmp("/kill", cmdtext, true) && IsPlayerAdmin(playerid))
- {
- SetPlayerHealth(playerid, 0.0);
- return 1;
- }
- if(!strcmp("/debug", cmdtext, true) && IsPlayerAdmin(playerid))
- {
- new str[500];
- format(str, sizeof(str), "gEscaperAtCP: %i\ngPlayersConnected: %i\ngMaxPlayersConnected : %i\ngGameState: %i\nTakeCPCalled: %i", gEscapersAtCP, gPlayersConnected, gMaxPlayersConnected, gGameState, TakeCPCalled);
- ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "DEBUG", str, "Close", "");
- return 1;
- }
- return 0;
- }
- public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
- {
- if(IsPlayerAdmin(playerid))
- { SetPlayerPosFindZ(playerid, fX, fY, fZ); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement