Rei_Ayanami

Derby

Jan 23rd, 2025 (edited)
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //------------------------------------------------------------//
  2. // DERBY DE DEMOLICIÓN
  3. // 01/05/2024 4:00 PM Venezuela
  4. // Versión: 1.0 (Beta)
  5. // Realizada por Romer para la comunidad Adobe Roleplay
  6. // Todos los Derechos reservados.
  7. //------------------------------------------------------------//
  8. #include <a_samp.inc>
  9. #include <streamer.inc>
  10. #include <zcmd.inc>
  11. #include <foreach.inc>
  12.  
  13. //==== Configuración ============
  14. #define SHOOTER_WORLD (399) // World Minijuego
  15. #define SHOOTER_TIME (110000) // Tiempo en Milisegundos
  16. #define DEFAULT_SHOOTER_TIME (115) // Tiempo en segundos
  17.  
  18. #define COLOR_WHITE 0xFFFFFFFF
  19. #define COLOR_WHITEP 0xFFE4C4FF
  20. #define COLOR_RED 0xFF0000FF
  21. #define COLOR_YELLOW 0xFFFF00FF
  22. #define RED_E "{FF0000}"
  23. #define WHITE_E "{FFFFFF}"
  24. #define SHOOTER "{FFFFFF}[{00FF5D}DERBY{FFFFFF}]{FFFFFF}"
  25. #define function%0(%1) forward %0(%1); public %0(%1)
  26. new shstr[200];
  27. new SHOOTER_Players, // Contador de Jugadores
  28. SHOOTER_Count, // Cuenta Regresiva para empezar
  29. SHOOTER_Timer, // Timer
  30. SHOOTER_Started,
  31. SHTimer,
  32. bool:InShooter[MAX_PLAYERS], // Se inicia o no se inicia
  33. SHOOTER_Active; // Minijuego activo o inactivo
  34.  
  35. new tShootertime = -1,
  36. ShooterGameTime = DEFAULT_SHOOTER_TIME;
  37.  
  38. new Float:POS[3];
  39. new Text:SHTD;
  40. new SpawnVehicle[MAX_PLAYERS];
  41.  
  42. new Float:RandomSpawnMap[][4] = //Coordenadas Randoms en LS
  43. {
  44. {2052.3774,-2601.4272,13.5469,88.407},
  45. {1722.2308,-2633.4995,13.5469,358.4798},
  46. {1459.9255,-2452.4858,13.5547,264.1655},
  47. {2006.3190,-2424.8120,13.5469,112.197},
  48. {1913.9677,-2537.0171,13.5469,88.3839}
  49. };
  50.  
  51. enum ShooterEnum
  52. {
  53. S_ROCKET_OBJECT,
  54. S_ROCKET_TIMER,
  55. }
  56. new Shooter[MAX_PLAYERS][ShooterEnum];
  57.  
  58.  
  59. //============ Configuración===============
  60.  
  61.  
  62. public OnFilterScriptInit()
  63. {
  64. print("\n--------------------------------------");
  65. print(" Derby de demolición iniciado");
  66. print("--------------------------------------\n");
  67. for(new i = 0, j = GetPlayerPoolSize()+1; i < j; i++) if(IsPlayerConnected(i))
  68. {
  69. CallLocalFunction("OnPlayerConnect", "i", i);
  70. }
  71.  
  72. ShooterGameTime = DEFAULT_SHOOTER_TIME;
  73. SHTimer = SetTimer("OnTimeUpdate", 1000, true);
  74. SHOOTER_Players = 0;
  75. tShootertime = -1;
  76.  
  77. return 1;
  78. }
  79.  
  80. public OnFilterScriptExit()
  81. {
  82. for(new i = 0, j = GetPlayerPoolSize()+1; i < j; i++) if(IsPlayerConnected(i))
  83. {
  84. CallLocalFunction("OnPlayerDisconnect", "id", i, 3);
  85. }
  86. KillTimer(SHTimer);
  87. return 1;
  88. }
  89. public OnPlayerSpawn(playerid)
  90. {
  91.  
  92. return 0;
  93. }
  94. forward OnTimeUpdate();
  95. public OnTimeUpdate()
  96. {
  97. if(SHOOTER_Active == 1)
  98. {
  99. ShooterGameTime--;
  100. format(shstr, sizeof(shstr), "~w~Tiempo Restante: ~r~~h~%s", GameTimeConvert(ShooterGameTime));
  101. TextDrawSetString(SHTD, shstr);
  102. }
  103. else
  104. {
  105. TextDrawSetString(SHTD, "~w~Tiempo Restante: ~r~~h~-:-");
  106. }
  107. return 1;
  108. }
  109. GameTimeConvert(seconds)
  110. {
  111. new etmp[16];
  112. new minutes = floatround(seconds / 60);
  113. seconds -= minutes * 60;
  114. format(etmp, sizeof(etmp), "%i:%02i", minutes, seconds);
  115. return etmp;
  116. }
  117. public OnPlayerConnect(playerid)
  118. {
  119. InShooter[playerid] = false;
  120. SHTD = TextDrawCreate(480.400024, 342.320007, "Tiempo Restante: EN ESPERA");
  121. TextDrawLetterSize(SHTD,0.235999, 1.398399);
  122. TextDrawAlignment(SHTD, 1);
  123. TextDrawColor(SHTD, -1);
  124. TextDrawSetShadow(SHTD, 0);
  125. TextDrawSetOutline(SHTD, 1);
  126. TextDrawBackgroundColor(SHTD, 255);
  127. TextDrawFont(SHTD, 1);
  128. TextDrawSetProportional(SHTD, 1);
  129. return 1;
  130. }
  131.  
  132. public OnPlayerDisconnect(playerid, reason)
  133. {
  134. if(InShooter[playerid] == true)
  135. {
  136. RemoveFromSHOOTER(playerid);
  137. }
  138. return 1;
  139. }
  140.  
  141. public OnPlayerDeath(playerid, killerid, reason)
  142. {
  143.  
  144. if(InShooter[playerid] == true)
  145. {
  146. RemoveFromSHOOTER(playerid);
  147. }
  148. return 1;
  149. }
  150. CMD:salirderby(playerid)
  151. {
  152. if(InShooter[playerid] == true) // Derby
  153. {
  154. SetPlayerPos(playerid, 1555.400390, -1675.611694, 16.195312, 0.0, 0, 0, true);
  155. SetPlayerVirtualWorld(playerid, 0);
  156. SendClientMessage(playerid, COLOR_WHITEP, ""SHOOTER" Has abandonado el derby.");
  157. RemoveFromSHOOTER(playerid);
  158. }
  159. else SendClientMessage(playerid, COLOR_WHITEP, ""RED_E" No puedes usar este comando ahora mismo.");
  160. return 1;
  161. }
  162. CMD:derby(playerid)
  163. {
  164. if(SHOOTER_Players >= 20) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"Disculpe, el derby alcanzó el máximo de jugadores");
  165. if(InShooter[playerid] == true) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"Ya estás en este minijuego, escribe /salirderby para salir de este minijuego");
  166. if(SHOOTER_Active == 1) return SendClientMessage(playerid, COLOR_WHITE, ""RED_E"El Derby ya ha comenzado!");
  167.  
  168. if(IsPlayerInAnyVehicle(playerid))
  169. {
  170. RemovePlayerFromVehicle(playerid);
  171. }
  172. if(SHOOTER_Started == 0)
  173. {
  174. SHOOTER_StartGame();
  175. SHOOTER_Started = 1;
  176. }
  177. InShooter[playerid] = true;
  178. new PlayerName[24];
  179. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  180. format(shstr, sizeof(shstr),""SHOOTER" %s se ha unido al derby de demolición[/derby]", PlayerName);
  181. SendClientMessage(playerid, COLOR_WHITE, shstr);
  182. SHOOTER_Players++;
  183. SHOOTER_SetPlayer(playerid);
  184. return 1;
  185. }
  186. SHOOTER_SetPlayer(playerid)
  187. {
  188. if(IsPlayerInAnyVehicle(playerid)) RemovePlayerFromVehicle(playerid);
  189. TextDrawShowForPlayer(playerid, SHTD);
  190. ResetPlayerWeapons(playerid);
  191. SetPlayerHealth(playerid, 100);
  192. TogglePlayerControllable(playerid, false);
  193. new vd;
  194. switch(random(3))
  195. {
  196. case 0: vd = 504;
  197. case 1: vd = 494;
  198. case 2: vd = 528;
  199. }
  200. new rand = random(sizeof(RandomSpawnMap));
  201. SpawnVehicle[playerid] = CreateVehicle(vd , RandomSpawnMap[rand][0], RandomSpawnMap[rand][1], RandomSpawnMap[rand][2], RandomSpawnMap[rand][3], random(255),random(255),(60 * 60));
  202. SetPlayerPos(playerid, RandomSpawnMap[rand][0], RandomSpawnMap[rand][1],RandomSpawnMap[rand][2]+1.5);
  203. SetPlayerFacingAngle(playerid, RandomSpawnMap[rand][3]+3);
  204. SetVehicleVirtualWorld(SpawnVehicle[playerid], SHOOTER_WORLD);
  205. SetPlayerVirtualWorld(playerid, SHOOTER_WORLD);
  206. PutPlayerInVehicle(playerid, SpawnVehicle[playerid], 0);
  207. SetCameraBehindPlayer(playerid);
  208. }
  209.  
  210. SHOOTER_StartGame()
  211. {
  212. SHOOTER_Count = 20;
  213. SHOOTER_Timer = SetTimer("SHOOTERCountDown", 1000, true);
  214.  
  215. SendClientMessageToAll(COLOR_RED, ""SHOOTER" Derby de demolición iniciado, escribe /derby para participar!");
  216. return 1;
  217. }
  218.  
  219. function SHOOTERCountDown()
  220. {
  221. new strk[100];
  222. SHOOTER_Count--;
  223. if(SHOOTER_Count == 0)
  224. {
  225. format(strk, sizeof(strk), "~r~~h~Derby Iniciado~w~!!");
  226. }
  227. else
  228. {
  229. switch(SHOOTER_Count)
  230. {
  231. case 25, 15, 5:
  232. {
  233. format(shstr, sizeof(shstr), ""SHOOTER" El derby de demolición iniciará en %d segundos, escribe /derby para participar", SHOOTER_Count);
  234. SendClientMessageToAll(0xFFFFFFFF, shstr);
  235. }
  236. }
  237. }
  238.  
  239. foreach(Player, ii)
  240. {
  241. if(InShooter[ii] == true)
  242. {
  243. GameTextForPlayer(ii, strk, 2000, 3);
  244. }
  245. }
  246. if(SHOOTER_Count <= 0)
  247. {
  248. KillTimer(SHOOTER_Timer);
  249. format(shstr, sizeof(shstr), ""SHOOTER" El derby de demolición ha comenzado. buena suerte!");
  250. SendClientMessageToAll(0xFFFFFFFF, shstr);
  251. foreach(Player, ii)
  252. {
  253. if(InShooter[ii] == true)
  254. {
  255. SetCameraBehindPlayer(ii);
  256. PlayerPlaySound(ii, 3200, 0, 0, 0);
  257. TogglePlayerControllable(ii, true);
  258. ExecSHOOTERTimer();
  259. }
  260. }
  261. if(SHOOTER_Players <= 1)
  262. {
  263. SHOOTER_Cancel();
  264. SendClientMessageToAll(COLOR_YELLOW, ""SHOOTER" El derby ha terminado por no haber los jugadores suficientes!(Minimo 2 jugadores)");
  265. foreach(Player, ii)
  266. {
  267. if(InShooter[ii] == true)
  268. {
  269. InShooter[ii] = false;
  270. RemoveFromSHOOTER(ii);
  271. }
  272. }
  273. }
  274. else SHOOTER_Active = 1;
  275. }
  276. return 1;
  277. }
  278. function ExecSHOOTERTimer()
  279. {
  280. KillTimer(tShootertime);
  281. tShootertime = SetTimer("EndSHOOTER", SHOOTER_TIME, false);
  282. return 1;
  283. }
  284. function EndSHOOTER()
  285. {
  286. foreach(Player, ii)
  287. {
  288. if(InShooter[ii] == true && SHOOTER_Active ==1)
  289. {
  290. InShooter[ii] = false;
  291. SetPlayerVirtualWorld(ii, 0);
  292. format(shstr, sizeof(shstr), ""SHOOTER" El derby ha acabado. Tiempo terminado.");
  293. SendClientMessageToAll(COLOR_WHITEP, shstr);
  294. SpawnPlayer(ii);
  295. SHOOTER_Cancel();
  296. TextDrawHideForPlayer(ii, SHTD);
  297. if(SpawnVehicle[ii] != -1)
  298. {
  299. DestroyVehicle(SpawnVehicle[ii]);
  300. SpawnVehicle[ii] = -1;
  301. }
  302. }
  303. }
  304. return 1;
  305. }
  306.  
  307. RemoveFromSHOOTER(playerid)
  308. {
  309. InShooter[playerid] = false;
  310. SetPlayerVirtualWorld(playerid, 0);
  311. SetPlayerPos(playerid, 1098.2443,1610.6401,12.5469);
  312. SpawnPlayer(playerid);
  313. ResetPlayerWeapons(playerid);
  314. TextDrawHideForPlayer(playerid, SHTD);
  315. if(SpawnVehicle[playerid] != -1)
  316. {
  317. DestroyVehicle(SpawnVehicle[playerid]);
  318. SpawnVehicle[playerid] = -1;
  319. }
  320. if(SHOOTER_Active == 1)
  321. {
  322. SHOOTER_Players--;
  323.  
  324. if(SHOOTER_Players == 1 || SHOOTER_Players <= 0)
  325. {
  326. CheckShooter();
  327. }
  328. }
  329. return 1;
  330. }
  331. function CheckShooter()
  332. {
  333. if(SHOOTER_Players == 1)
  334. {
  335. foreach(Player, ii)
  336. {
  337. if(InShooter[ii] == true)
  338. {
  339. new PlayerName[24];
  340. GetPlayerName(ii, PlayerName, sizeof(PlayerName));
  341. format(shstr,sizeof(shstr),""SHOOTER" %s(%i) ganó el derby de demolición!{E8D04C} Premio: $12,000", PlayerName ,ii);
  342. SendClientMessageToAll(COLOR_WHITEP, shstr);
  343. GameTextForPlayer(ii, "~g~~h~~h~Felicidades!", 3000, 3);
  344. SendClientMessage(ii, COLOR_WHITEP, ""SHOOTER" Acabas de ganar el derby!");
  345. GivePlayerMoney(ii, 12000);
  346. }
  347. if(SpawnVehicle[ii] != -1)
  348. {
  349. DestroyVehicle(SpawnVehicle[ii]);
  350. SpawnVehicle[ii] = -1;
  351. }
  352. SHOOTER_Cancel();
  353. }
  354. }
  355. return 1;
  356. }
  357.  
  358. SHOOTER_Cancel()
  359. {
  360. SHOOTER_Players = 0;
  361. SHOOTER_Active = 0;
  362. SHOOTER_Count = 0;
  363. SHOOTER_Started = 0;
  364. KillTimer(tShootertime);
  365. ShooterGameTime = DEFAULT_SHOOTER_TIME;
  366. return 1;
  367. }
  368.  
  369.  
  370.  
  371.  
  372. public OnObjectMoved(objectid)
  373. {
  374. foreach(new i : Player)
  375. {
  376. if(objectid == Shooter[i][S_ROCKET_OBJECT])
  377. {
  378. new Float:pos[3];
  379.  
  380. GetObjectPos(objectid, pos[0], pos[1], pos[2]);
  381. CreateExplosion(pos[0], pos[1], pos[2], 11, 3.0);
  382. DestroyObject(objectid);
  383.  
  384. KillTimer(Shooter[i][S_ROCKET_TIMER]);
  385. Shooter[i][S_ROCKET_TIMER] = -1;
  386. }
  387. }
  388. return 1;
  389. }
  390.  
  391.  
  392. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  393. {
  394. if(newkeys & KEY_FIRE && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && InShooter[playerid] == true)
  395. {
  396. if(InShooter[playerid] == true && SHOOTER_Active == 1)
  397. {
  398. new vehicleid = GetPlayerVehicleID(playerid);
  399. if(IsValidObject(Shooter[playerid][S_ROCKET_OBJECT])) return GameTextForPlayer(playerid, "~y~Recargando Cohetes...", 2000, 3);
  400.  
  401. if(Shooter[playerid][S_ROCKET_TIMER] != -1) KillTimer(Shooter[playerid][S_ROCKET_TIMER]);
  402. Shooter[playerid][S_ROCKET_TIMER] = SetTimerEx("OnPlayerShootRocket", 250, true, "i", playerid);
  403.  
  404. new Float:pos[4];
  405. GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
  406. GetVehicleZAngle(vehicleid, pos[3]);
  407.  
  408. Shooter[playerid][S_ROCKET_OBJECT] = CreateObject(345, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
  409.  
  410. new Float:distance = 50.0;
  411. MoveObject(Shooter[playerid][S_ROCKET_OBJECT], pos[0] + (distance * floatsin(-pos[3], degrees)), pos[1] + (distance * floatcos(-pos[3], degrees)), pos[2], 50.0);
  412. return 1;
  413. }
  414. }
  415. if(newkeys & KEY_CROUCH && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) // Jump
  416. {
  417. if(InShooter[playerid] == true)
  418. {
  419. if(GetPVarInt(playerid, "UsedJump") ==1)
  420. {
  421. GameTextForPlayer(playerid, "~y~Super Salto Cooldown", 3000, 3);
  422. return true;
  423. }
  424. SetPVarInt(playerid, "UsedJump", 1);
  425. SetTimerEx("ResetJump", 8000, false, "i", playerid);
  426. new vID = GetPlayerVehicleID(playerid);
  427. GetVehicleVelocity(vID, POS[0], POS[1], POS[2]);
  428. SetVehicleVelocity(vID, POS[0], POS[1], POS[2] + 0.3);
  429. }
  430. }
  431. return 1;
  432. }
  433. function ResetJump(playerid)
  434. {
  435. if(IsPlayerConnected(playerid)) DeletePVar(playerid, "UsedJump");
  436. }
  437. forward OnPlayerShootRocket(playerid);
  438. public OnPlayerShootRocket(playerid)
  439. {
  440. new Float:pos[3];
  441. GetObjectPos(Shooter[playerid][S_ROCKET_OBJECT], pos[0], pos[1], pos[2]);
  442. foreach(new i : Player)
  443. {
  444. if(i != playerid)
  445. {
  446. if(IsPlayerInRangeOfPoint(i, 5.0, pos[0], pos[1], pos[2]))
  447. {
  448. CreateExplosion(pos[0], pos[1], pos[2], 11, 3.0);
  449. DestroyObject(Shooter[playerid][S_ROCKET_OBJECT]);
  450.  
  451. KillTimer(Shooter[playerid][S_ROCKET_TIMER]);
  452. Shooter[playerid][S_ROCKET_TIMER] = -1;
  453. break;
  454. }
  455. }
  456. }
  457. return 1;
  458. }
Add Comment
Please, Sign In to add comment