Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //------------------------------------------------------------//
- // DERBY DE DEMOLICIÓN
- // 01/05/2024 4:00 PM Venezuela
- // Versión: 1.0 (Beta)
- // Realizada por Romer para la comunidad Adobe Roleplay
- // Todos los Derechos reservados.
- //------------------------------------------------------------//
- #include <a_samp.inc>
- #include <streamer.inc>
- #include <zcmd.inc>
- #include <foreach.inc>
- //==== Configuración ============
- #define SHOOTER_WORLD (399) // World Minijuego
- #define SHOOTER_TIME (110000) // Tiempo en Milisegundos
- #define DEFAULT_SHOOTER_TIME (115) // Tiempo en segundos
- #define COLOR_WHITE 0xFFFFFFFF
- #define COLOR_WHITEP 0xFFE4C4FF
- #define COLOR_RED 0xFF0000FF
- #define COLOR_YELLOW 0xFFFF00FF
- #define RED_E "{FF0000}"
- #define WHITE_E "{FFFFFF}"
- #define SHOOTER "{FFFFFF}[{00FF5D}DERBY{FFFFFF}]{FFFFFF}"
- #define function%0(%1) forward %0(%1); public %0(%1)
- new shstr[200];
- new SHOOTER_Players, // Contador de Jugadores
- SHOOTER_Count, // Cuenta Regresiva para empezar
- SHOOTER_Timer, // Timer
- SHOOTER_Started,
- SHTimer,
- bool:InShooter[MAX_PLAYERS], // Se inicia o no se inicia
- SHOOTER_Active; // Minijuego activo o inactivo
- new tShootertime = -1,
- ShooterGameTime = DEFAULT_SHOOTER_TIME;
- new Float:POS[3];
- new Text:SHTD;
- new SpawnVehicle[MAX_PLAYERS];
- new Float:RandomSpawnMap[][4] = //Coordenadas Randoms en LS
- {
- {2052.3774,-2601.4272,13.5469,88.407},
- {1722.2308,-2633.4995,13.5469,358.4798},
- {1459.9255,-2452.4858,13.5547,264.1655},
- {2006.3190,-2424.8120,13.5469,112.197},
- {1913.9677,-2537.0171,13.5469,88.3839}
- };
- enum ShooterEnum
- {
- S_ROCKET_OBJECT,
- S_ROCKET_TIMER,
- }
- new Shooter[MAX_PLAYERS][ShooterEnum];
- //============ Configuración===============
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Derby de demolición iniciado");
- print("--------------------------------------\n");
- for(new i = 0, j = GetPlayerPoolSize()+1; i < j; i++) if(IsPlayerConnected(i))
- {
- CallLocalFunction("OnPlayerConnect", "i", i);
- }
- ShooterGameTime = DEFAULT_SHOOTER_TIME;
- SHTimer = SetTimer("OnTimeUpdate", 1000, true);
- SHOOTER_Players = 0;
- tShootertime = -1;
- return 1;
- }
- public OnFilterScriptExit()
- {
- for(new i = 0, j = GetPlayerPoolSize()+1; i < j; i++) if(IsPlayerConnected(i))
- {
- CallLocalFunction("OnPlayerDisconnect", "id", i, 3);
- }
- KillTimer(SHTimer);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- return 0;
- }
- forward OnTimeUpdate();
- public OnTimeUpdate()
- {
- if(SHOOTER_Active == 1)
- {
- ShooterGameTime--;
- format(shstr, sizeof(shstr), "~w~Tiempo Restante: ~r~~h~%s", GameTimeConvert(ShooterGameTime));
- TextDrawSetString(SHTD, shstr);
- }
- else
- {
- TextDrawSetString(SHTD, "~w~Tiempo Restante: ~r~~h~-:-");
- }
- return 1;
- }
- GameTimeConvert(seconds)
- {
- new etmp[16];
- new minutes = floatround(seconds / 60);
- seconds -= minutes * 60;
- format(etmp, sizeof(etmp), "%i:%02i", minutes, seconds);
- return etmp;
- }
- public OnPlayerConnect(playerid)
- {
- InShooter[playerid] = false;
- SHTD = TextDrawCreate(480.400024, 342.320007, "Tiempo Restante: EN ESPERA");
- TextDrawLetterSize(SHTD,0.235999, 1.398399);
- TextDrawAlignment(SHTD, 1);
- TextDrawColor(SHTD, -1);
- TextDrawSetShadow(SHTD, 0);
- TextDrawSetOutline(SHTD, 1);
- TextDrawBackgroundColor(SHTD, 255);
- TextDrawFont(SHTD, 1);
- TextDrawSetProportional(SHTD, 1);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(InShooter[playerid] == true)
- {
- RemoveFromSHOOTER(playerid);
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(InShooter[playerid] == true)
- {
- RemoveFromSHOOTER(playerid);
- }
- return 1;
- }
- CMD:salirderby(playerid)
- {
- if(InShooter[playerid] == true) // Derby
- {
- SetPlayerPos(playerid, 1555.400390, -1675.611694, 16.195312, 0.0, 0, 0, true);
- SetPlayerVirtualWorld(playerid, 0);
- SendClientMessage(playerid, COLOR_WHITEP, ""SHOOTER" Has abandonado el derby.");
- RemoveFromSHOOTER(playerid);
- }
- else SendClientMessage(playerid, COLOR_WHITEP, ""RED_E" No puedes usar este comando ahora mismo.");
- return 1;
- }
- CMD:derby(playerid)
- {
- if(SHOOTER_Players >= 20) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"Disculpe, el derby alcanzó el máximo de jugadores");
- if(InShooter[playerid] == true) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"Ya estás en este minijuego, escribe /salirderby para salir de este minijuego");
- if(SHOOTER_Active == 1) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"El Derby ya ha comenzado!");
- if(IsPlayerInAnyVehicle(playerid))
- {
- RemovePlayerFromVehicle(playerid);
- }
- if(SHOOTER_Started == 0)
- {
- SHOOTER_StartGame();
- SHOOTER_Started = 1;
- }
- InShooter[playerid] = true;
- new PlayerName[24];
- GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
- format(shstr, sizeof(shstr),""SHOOTER" %s se ha unido al derby de demolición[/derby]", PlayerName);
- SendClientMessage(playerid, COLOR_WHITE, shstr);
- SHOOTER_Players++;
- SHOOTER_SetPlayer(playerid);
- return 1;
- }
- SHOOTER_SetPlayer(playerid)
- {
- if(IsPlayerInAnyVehicle(playerid)) RemovePlayerFromVehicle(playerid);
- TextDrawShowForPlayer(playerid, SHTD);
- ResetPlayerWeapons(playerid);
- SetPlayerHealth(playerid, 100);
- TogglePlayerControllable(playerid, false);
- new vd;
- switch(random(3))
- {
- case 0: vd = 504;
- case 1: vd = 494;
- case 2: vd = 528;
- }
- new rand = random(sizeof(RandomSpawnMap));
- SpawnVehicle[playerid] = CreateVehicle(vd , RandomSpawnMap[rand][0], RandomSpawnMap[rand][1], RandomSpawnMap[rand][2], RandomSpawnMap[rand][3], random(255),random(255),(60 * 60));
- SetPlayerPos(playerid, RandomSpawnMap[rand][0], RandomSpawnMap[rand][1],RandomSpawnMap[rand][2]+1.5);
- SetPlayerFacingAngle(playerid, RandomSpawnMap[rand][3]+3);
- SetVehicleVirtualWorld(SpawnVehicle[playerid], SHOOTER_WORLD);
- SetPlayerVirtualWorld(playerid, SHOOTER_WORLD);
- PutPlayerInVehicle(playerid, SpawnVehicle[playerid], 0);
- SetCameraBehindPlayer(playerid);
- }
- SHOOTER_StartGame()
- {
- SHOOTER_Count = 20;
- SHOOTER_Timer = SetTimer("SHOOTERCountDown", 1000, true);
- SendClientMessageToAll(COLOR_RED, ""SHOOTER" Derby de demolición iniciado, escribe /derby para participar!");
- return 1;
- }
- function SHOOTERCountDown()
- {
- new strk[100];
- SHOOTER_Count--;
- if(SHOOTER_Count == 0)
- {
- format(strk, sizeof(strk), "~r~~h~Derby Iniciado~w~!!");
- }
- else
- {
- switch(SHOOTER_Count)
- {
- case 25, 15, 5:
- {
- format(shstr, sizeof(shstr), ""SHOOTER" El derby de demolición iniciará en %d segundos, escribe /derby para participar", SHOOTER_Count);
- SendClientMessageToAll(0xFFFFFFFF, shstr);
- }
- }
- }
- foreach(Player, ii)
- {
- if(InShooter[ii] == true)
- {
- GameTextForPlayer(ii, strk, 2000, 3);
- }
- }
- if(SHOOTER_Count <= 0)
- {
- KillTimer(SHOOTER_Timer);
- format(shstr, sizeof(shstr), ""SHOOTER" El derby de demolición ha comenzado. buena suerte!");
- SendClientMessageToAll(0xFFFFFFFF, shstr);
- foreach(Player, ii)
- {
- if(InShooter[ii] == true)
- {
- SetCameraBehindPlayer(ii);
- PlayerPlaySound(ii, 3200, 0, 0, 0);
- TogglePlayerControllable(ii, true);
- ExecSHOOTERTimer();
- }
- }
- if(SHOOTER_Players <= 1)
- {
- SHOOTER_Cancel();
- SendClientMessageToAll(COLOR_YELLOW, ""SHOOTER" El derby ha terminado por no haber los jugadores suficientes!(Minimo 2 jugadores)");
- foreach(Player, ii)
- {
- if(InShooter[ii] == true)
- {
- InShooter[ii] = false;
- RemoveFromSHOOTER(ii);
- }
- }
- }
- else SHOOTER_Active = 1;
- }
- return 1;
- }
- function ExecSHOOTERTimer()
- {
- KillTimer(tShootertime);
- tShootertime = SetTimer("EndSHOOTER", SHOOTER_TIME, false);
- return 1;
- }
- function EndSHOOTER()
- {
- foreach(Player, ii)
- {
- if(InShooter[ii] == true && SHOOTER_Active ==1)
- {
- InShooter[ii] = false;
- SetPlayerVirtualWorld(ii, 0);
- format(shstr, sizeof(shstr), ""SHOOTER" El derby ha acabado. Tiempo terminado.");
- SendClientMessageToAll(COLOR_WHITEP, shstr);
- SpawnPlayer(ii);
- SHOOTER_Cancel();
- TextDrawHideForPlayer(ii, SHTD);
- if(SpawnVehicle[ii] != -1)
- {
- DestroyVehicle(SpawnVehicle[ii]);
- SpawnVehicle[ii] = -1;
- }
- }
- }
- return 1;
- }
- RemoveFromSHOOTER(playerid)
- {
- InShooter[playerid] = false;
- SetPlayerVirtualWorld(playerid, 0);
- SetPlayerPos(playerid, 1098.2443,1610.6401,12.5469);
- SpawnPlayer(playerid);
- ResetPlayerWeapons(playerid);
- TextDrawHideForPlayer(playerid, SHTD);
- if(SpawnVehicle[playerid] != -1)
- {
- DestroyVehicle(SpawnVehicle[playerid]);
- SpawnVehicle[playerid] = -1;
- }
- if(SHOOTER_Active == 1)
- {
- SHOOTER_Players--;
- if(SHOOTER_Players == 1 || SHOOTER_Players <= 0)
- {
- CheckShooter();
- }
- }
- return 1;
- }
- function CheckShooter()
- {
- if(SHOOTER_Players == 1)
- {
- foreach(Player, ii)
- {
- if(InShooter[ii] == true)
- {
- new PlayerName[24];
- GetPlayerName(ii, PlayerName, sizeof(PlayerName));
- format(shstr,sizeof(shstr),""SHOOTER" %s(%i) ganó el derby de demolición!{E8D04C} Premio: $12,000", PlayerName ,ii);
- SendClientMessageToAll(COLOR_WHITEP, shstr);
- GameTextForPlayer(ii, "~g~~h~~h~Felicidades!", 3000, 3);
- SendClientMessage(ii, COLOR_WHITEP, ""SHOOTER" Acabas de ganar el derby!");
- GivePlayerMoney(ii, 12000);
- }
- if(SpawnVehicle[ii] != -1)
- {
- DestroyVehicle(SpawnVehicle[ii]);
- SpawnVehicle[ii] = -1;
- }
- SHOOTER_Cancel();
- }
- }
- return 1;
- }
- SHOOTER_Cancel()
- {
- SHOOTER_Players = 0;
- SHOOTER_Active = 0;
- SHOOTER_Count = 0;
- SHOOTER_Started = 0;
- KillTimer(tShootertime);
- ShooterGameTime = DEFAULT_SHOOTER_TIME;
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- foreach(new i : Player)
- {
- if(objectid == Shooter[i][S_ROCKET_OBJECT])
- {
- new Float:pos[3];
- GetObjectPos(objectid, pos[0], pos[1], pos[2]);
- CreateExplosion(pos[0], pos[1], pos[2], 11, 3.0);
- DestroyObject(objectid);
- KillTimer(Shooter[i][S_ROCKET_TIMER]);
- Shooter[i][S_ROCKET_TIMER] = -1;
- }
- }
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(newkeys & KEY_FIRE && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && InShooter[playerid] == true)
- {
- if(InShooter[playerid] == true && SHOOTER_Active == 1)
- {
- new vehicleid = GetPlayerVehicleID(playerid);
- if(IsValidObject(Shooter[playerid][S_ROCKET_OBJECT])) return GameTextForPlayer(playerid, "~y~Recargando Cohetes...", 2000, 3);
- if(Shooter[playerid][S_ROCKET_TIMER] != -1) KillTimer(Shooter[playerid][S_ROCKET_TIMER]);
- Shooter[playerid][S_ROCKET_TIMER] = SetTimerEx("OnPlayerShootRocket", 250, true, "i", playerid);
- new Float:pos[4];
- GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
- GetVehicleZAngle(vehicleid, pos[3]);
- Shooter[playerid][S_ROCKET_OBJECT] = CreateObject(345, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
- new Float:distance = 50.0;
- MoveObject(Shooter[playerid][S_ROCKET_OBJECT], pos[0] + (distance * floatsin(-pos[3], degrees)), pos[1] + (distance * floatcos(-pos[3], degrees)), pos[2], 50.0);
- return 1;
- }
- }
- if(newkeys & KEY_CROUCH && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) // Jump
- {
- if(InShooter[playerid] == true)
- {
- if(GetPVarInt(playerid, "UsedJump") ==1)
- {
- GameTextForPlayer(playerid, "~y~Super Salto Cooldown", 3000, 3);
- return true;
- }
- SetPVarInt(playerid, "UsedJump", 1);
- SetTimerEx("ResetJump", 8000, false, "i", playerid);
- new vID = GetPlayerVehicleID(playerid);
- GetVehicleVelocity(vID, POS[0], POS[1], POS[2]);
- SetVehicleVelocity(vID, POS[0], POS[1], POS[2] + 0.3);
- }
- }
- return 1;
- }
- function ResetJump(playerid)
- {
- if(IsPlayerConnected(playerid)) DeletePVar(playerid, "UsedJump");
- }
- forward OnPlayerShootRocket(playerid);
- public OnPlayerShootRocket(playerid)
- {
- new Float:pos[3];
- GetObjectPos(Shooter[playerid][S_ROCKET_OBJECT], pos[0], pos[1], pos[2]);
- foreach(new i : Player)
- {
- if(i != playerid)
- {
- if(IsPlayerInRangeOfPoint(i, 5.0, pos[0], pos[1], pos[2]))
- {
- CreateExplosion(pos[0], pos[1], pos[2], 11, 3.0);
- DestroyObject(Shooter[playerid][S_ROCKET_OBJECT]);
- KillTimer(Shooter[playerid][S_ROCKET_TIMER]);
- Shooter[playerid][S_ROCKET_TIMER] = -1;
- break;
- }
- }
- }
- return 1;
- }
Add Comment
Please, Sign In to add comment