Advertisement
Dandys

Respawn Pickups

Jul 27th, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.98 KB | None | 0 0
  1. #include <a_samp>
  2. #if !defined MAX_REPICKUPS
  3.     #define MAX_REPICKUPS 50
  4. #endif
  5.  
  6. enum _RePickup{
  7.     reID,
  8.     reModel,
  9.     reType,
  10.     Float:reX,
  11.     Float:reY,
  12.     Float:reZ,
  13.     reVirtualWorld,
  14.     reDelay,
  15.     reRespawn
  16. };
  17.  
  18. new rePickup[MAX_REPICKUPS][_RePickup];
  19. new rePickupID = -1;
  20.  
  21. stock CreateRePickup(model, Float:X, Float:Y, Float:Z, virtualworld = -1, delay = 30)//delay = po jaké době se má znovu zobrazit (v minutách), respawn = zde se po sebrání pickupu zapíše nastavený delay a ten se bude v timeru odečítat
  22. {
  23.     if(rePickupID != MAX_REPICKUPS){
  24.         rePickupID++;
  25.         //ukládáme to do pole jelikož je po nalezení budeme ničit a po uběhnutí delay zase vytvoříme (respawneme)
  26.         rePickup[rePickupID][reModel] = model;
  27.         rePickup[rePickupID][reType] = 8; //typ 8 - Disappears after pickup, but has no effect. - zmizí a pak ho timer sám odstraní
  28.         rePickup[rePickupID][reX] = X;
  29.         rePickup[rePickupID][reY] = Y;
  30.         rePickup[rePickupID][reZ] = Z;
  31.         rePickup[rePickupID][reVirtualWorld] = virtualworld;
  32.         rePickup[rePickupID][reDelay] = delay;
  33.         rePickup[rePickupID][reRespawn] = 0;
  34.         RespawnRePickup(rePickupID); //vytvoří Pickup
  35.         return (true);
  36.     }
  37.     else
  38.     {
  39.         printf("[ RePickup ] Bylo vytvořeno maximální množství RePickupů (%d), pro více pickupů změnte MAX_REPICKUPS! ", MAX_REPICKUPS);
  40.         return (false);
  41.     }
  42. }
  43.  
  44. stock RespawnRePickup(rePickupId)
  45. {
  46.     rePickup[rePickupId][reID] = CreatePickup(rePickup[rePickupId][reModel],rePickup[rePickupId][reType],rePickup[rePickupId][reX],rePickup[rePickupId][reY],rePickup[rePickupId][reZ],rePickup[rePickupId][reVirtualWorld]); //ukládáme si id, které vrátí CreatePickup, abychom mohli PickupZničit
  47. }
  48.  
  49. stock DestroyRePickup(rePickupId)
  50. {
  51.     DestroyPickup(rePickup[rePickupId][reID]);
  52. }
  53.  
  54. forward RePickupTimer();
  55. public RePickupTimer()
  56. {
  57.     if(rePickupID != -1)
  58.     {
  59.         for(new pId = 0; pId <= rePickupID; pId++)
  60.         {
  61.             if(rePickup[pId][reRespawn] >= rePickup[pId][reDelay]){
  62.                 DestroyRePickup(pId);
  63.                 rePickup[pId][reRespawn]--;
  64.             }
  65.             else if(rePickup[pId][reRespawn] != 0)
  66.             {
  67.                 rePickup[pId][reRespawn]--;
  68.             }
  69.             else{
  70.                 RespawnRePickup(pId);
  71.             }
  72.            
  73.         }
  74.     }
  75.     return (true);
  76. }
  77.  
  78. public OnGameModeInit()
  79. {
  80.     CreateRePickup(1274,1492.1907,-1767.8684,18.7958);
  81.     CreateRePickup(1212,1312.3002,-1006.9481,33.8984);
  82.     CreateRePickup(1212,980.9848,-1064.0038,36.0387);
  83.    
  84.     SetTimer("RePickupTimer", 1000 * 60, true); //zavolá funkci každou minutu, což nám způsobí, že pickup nebude zobrazen na vteřinu přesně jako delay, ale bude mít maximálně 0 - 59 sekundové zpoždění... ;) jde předělat s přesností na vteřiny
  85.  
  86.     return (true);
  87. }
  88.  
  89. public OnPlayerPickUpPickup(playerid, pickupid)
  90. {
  91.     if(rePickupID != -1)
  92.     {
  93.         for(new pId = 0; pId <= rePickupID; pId++)
  94.         {
  95.             if(pickupid == rePickup[pId][reID]){
  96.                 rePickup[pId][reRespawn] = rePickup[pId][reDelay];
  97.                 GivePlayerMoney(playerid, 10000);
  98.             }
  99.         }
  100.     }
  101.     return (true);
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement