Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include a_samp
- #include zcmd
- // Defines
- #define MAX_DERBY_POSITIONS 2 // so will be able to put players on random derbys [ avoid boring ]
- #define MAX_DERBY_PLAYERS 6
- enum derbyinfo {
- PlayersIN[2],
- MateFinishit,
- Running,
- DerbyTimerz,
- Float:lowestZ,
- Float:X12,
- Float:Y12,
- Float:Z12,
- }
- new DerbyLOL[derbyinfo];
- enum pinfoz {
- InDerby,
- }
- new PlayerInfo[MAX_PLAYERS][pinfoz];
- public OnPlayerConnect(playerid) {
- PlayerInfo[playerid][InDerby] = 0;
- }
- public OnPlayerDisconnect(playerid) {
- if(PlayerInfo[playerid][InDerby])
- {
- EliminatePlayer(playerid, "Left The Server");
- }
- }
- // Important functions
- GetRacePositions(raceid, &Float:X, &Float:Y, &Float:Z) { // & to be able to change X Y Z value by the function
- switch(raceid)
- {
- case 0: {
- X = 0.0; // here you put the X you got from /save
- Y = 0.0; // here you put the Y you got from /save
- Z = 0.0; // here you put the Z you got from /save
- }
- case 1: {
- X = 0.0; // here you put the X you got from /save
- Y = 0.0; // here you put the Y you got from /save
- Z = 0.0; // here you put the Z you got from /save
- }
- }
- }
- GetDerbyName(derbyid) {
- new derbyname[50];
- switch(derbyid) {
- case 0: derbyname = "Omarito Derby";
- case 1: derbyname = "Join if you dare :d";
- case 2: { }
- // ...
- default: derbyname = "Unknow"; // that mean if none of the cases value matched
- }
- return derbyname;
- }
- StartDerby(WHATID) {
- switch(WHATID) {
- case 0: // race position 1
- {
- new Float:X, Float:Y, Float:Z;
- GetRacePositions(WHATID, X, Y, Z);
- DerbyLOL[X12] = X;
- DerbyLOL[Y12] = Y;
- DerbyLOL[Z12] = Z;
- DerbyLOL[lowestZ] = 0.0; // lowest Z to check if players fall, if you got a map in sky put it as objects Z - 5 else if wanna check if player is in water use 0
- // ^ becasue its float so we use 0.0 instead just 0
- DerbyLOL[DerbyTimerz] = SetTimer("DerbyChecker", 1000, 1); // to be able to check players every 1 second, DerbyTimerz = to be able to kill the timer later
- DerbyLOL[MateFinishit] = SetTimer("FinishITDUDE", 4 * 60 * 1000, 0);
- DerbyLOL[Running] = 1;
- }
- }
- }
- forward public FinishITDUDE();
- public FinishITDUDE() {
- if(!DerbyLOL[Running] || DerbyLOL[PlayersIN][0] == 0) return 1;
- if(DerbyLOL[PlayersIN][0] == 1)
- {
- AnnounceDerbyWinner();
- return 1;
- }
- else
- {
- SendClientMessageToAll(-1,"Derby has been finished | No One Won |");
- FinishDerby();
- return 1;
- }
- }
- forward public DerbyChecker();
- public DerbyChecker() {
- for(new i = 0; i < MAX_PLAYERS; i++) {
- if(IsPlayerConnected(i) && PlayerInfo[i][InDerby]) { // checks if player connected and his InDerby value is not 0 or below 1
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(i, X, Y, Z);
- if(Z < DerbyLOL[lowestZ]) // check if player fall / his Z pos lower than the one we defined
- {
- EliminatePlayer(i, "Fall Down");
- }
- else
- {
- if(!IsPlayerInAnyVehicle(i)) // check if player is not in any vehicle
- {
- EliminatePlayer(i, "Out Of Vehicle");
- }
- }
- }
- }
- }
- FinishDerby() {
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- PlayerInfo[i][InDerby] = 0;
- }
- KillTimer(DerbyLOL[DerbyTimerz]);
- DerbyLOL[PlayersIN][0] = 0;
- DerbyLOL[PlayersIN][1] = 0;
- DerbyLOL[Running] = 0;
- DerbyLOL[DerbyTimerz] = 0;
- DerbyLOL[lowestZ] = 0.0;
- DerbyLOL[X12] = 0.0;
- DerbyLOL[Y12] = 0.0;
- DerbyLOL[Z12] = 0.0;
- return 1;
- }
- AnnounceDerbyWinner() {
- for(new i = 0; i < MAX_PLAYERS; i++) {
- if(IsPlayerConnected(i) && PlayerInfo[i][InDerby]) {
- new string[128],name11[24];
- GetPlayerName(i, name11, sizeof name11);
- format(string,sizeof string,"%s has won the derby!",name11);
- SendClientMessageToAll(-1, string);
- PlayerInfo[i][InDerby] = 0;
- GivePlayerMoney(i, 50000);
- break; // stop the loop
- }
- }
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- PlayerInfo[i][InDerby] = 0;
- }
- KillTimer(DerbyLOL[DerbyTimerz]);
- DerbyLOL[PlayersIN][0] = 0;
- DerbyLOL[PlayersIN][1] = 0;
- DerbyLOL[DerbyTimerz] = 0;
- DerbyLOL[Running] = 0;
- DerbyLOL[lowestZ] = 0.0;
- DerbyLOL[X12] = 0.0;
- DerbyLOL[Y12] = 0.0;
- DerbyLOL[Z12] = 0.0;
- }
- EliminatePlayer(playerid, const reason[]) {
- if(!PlayerInfo[playerid][InDerby]) return 1; // simple checker to check if player is really in derby to eliminate him
- new string[128],name11[24];
- GetPlayerName(playerid, name11, sizeof name11);
- format(string, sizeof string,"%s has been eliminated from derby |- Position: %d -|- Reason: %s -|",name11, DerbyLOL[PlayersIN][0], reason);
- SendClientMessageToAll(-1, string);
- PlayerInfo[playerid][InDerby] = 0;
- SpawnPlayer(playerid);
- if(DerbyLOL[PlayersIN][0] == 3)
- {
- GivePlayerMoney(playerid, 20000);
- }
- if(DerbyLOL[PlayersIN][0] == 2)
- {
- GivePlayerMoney(playerid, 30000);
- }
- DerbyLOL[PlayersIN][0] --;
- if(DerbyLOL[PlayersIN][0] == 1) AnnounceDerbyWinner();
- return 1;
- }
- // Commands
- CMD:derbylol(playerid,params[]) {
- if(!IsPlayerAdmin(playerid)) return 0;
- new rand = random(MAX_DERBY_POSITIONS);
- StartDerby(rand);
- new string[128];
- format(string,sizeof string,"Derby %s has started use /derby to join",GetDerbyName(rand));
- return 1;
- }
- forward public SpawnHiSCarZ(playerid);
- public SpawnHiSCarZ(playerid) {
- new rand = random(4);
- CarSpawner(playerid,(rand==0) ? (402) : (rand==1) ? (495) : (rand==2) ? (573) : (rand==3) ? (494) : (495));
- }
- forward CarSpawner(playerid,cmodel);
- public CarSpawner(playerid,cmodel)
- {
- if(IsPlayerInAnyVehicle(playerid)) return 1;
- new Float:x, Float:y, Float:z, Float:angle;
- GetPlayerPos(playerid, x, y, z);
- GetPlayerFacingAngle(playerid, angle);
- new ctsvehicle=CreateVehicle(cmodel, x, y, z, angle, -1, -1, 10000);
- SetVehicleVirtualWorld(ctsvehicle, GetPlayerVirtualWorld(playerid));
- LinkVehicleToInterior(ctsvehicle, GetPlayerInterior(playerid));
- PutPlayerInVehicle(playerid, ctsvehicle, 0);
- return 1;
- }
- CMD:derby(playerid,params[]) { // to join derby
- if(PlayerInfo[playerid][InDerby] >= MAX_DERBY_PLAYERS) return SendClientMessage(playerid, -1,"Yo mate you are already in derby!");
- if(DerbyLOL[PlayersIN][1]) return SendClientMessage(playerid, -1,"ERROR: Derby maximum players ammount already reached");
- if(!DerbyLOL[Running]) return SendClientMessage(playerid, -1,"ERROR: No derby running to join it");
- SetPlayerPos(playerid, DerbyLOL[X12], DerbyLOL[Y12], DerbyLOL[Z12]);
- SetTimerEx("SpawnHiSCarZ", 1500, 0, "i", playerid);
- PlayerInfo[playerid][InDerby] = 1;
- new string[128],name11[24];
- GetPlayerName(playerid, name11, sizeof name11);
- format(string,sizeof string,"%s has joined derby! | use /derby to join |",name11);
- SendClientMessageToAll(-1, string);
- DerbyLOL[PlayersIN][0] ++;
- DerbyLOL[PlayersIN][1] ++;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement