Pytelek

Attraction_DB.inc

Dec 31st, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.39 KB | None | 0 0
  1. #define LICZBA_DB 2
  2. #define MAX_PLAYERS_DB 16
  3. #define DB_VW 2
  4.  
  5. new Iterator:DerbyPlayers<MAX_PLAYERS>;
  6.  
  7. #define DB_STATE_RECORDS 0
  8. #define DB_STATE_BEFORE_START 1
  9. #define DB_STATE_IN_PROGRESS 2
  10.  
  11. new DerbyState = DB_STATE_RECORDS;
  12.  
  13. #define DB_PLAYER_STATE_SIGNED 1
  14.  
  15. new DerbyPlayerState[MAX_PLAYERS];
  16. new DerbyPlayerVehicle[MAX_PLAYERS];
  17.  
  18. #define DB_REMOVE_REASON_EXIT 0
  19. #define DB_REMOVE_REASON_VEHICLE_EXIT 1
  20. #define DB_REMOVE_REASON_AFK 2
  21. #define DB_REMOVE_REASON_DROWNED 3
  22. #define DB_REMOVE_REASON_QUIT 4
  23. #define DB_REMOVE_REASON_END 5
  24.  
  25. new DerbyVehicles[MAX_PLAYERS_DB];
  26. new Float:DerbyVehiclesPos[MAX_PLAYERS_DB][4] = {
  27.     {2888.95605469, 492.40585327, 78.79947662, 270.25817871},
  28.     {2888.88085938, 467.74752808, 78.79947662, 270.25817871},
  29.     {2889.25000000, 442.15625000, 78.79947662, 270.25817871},
  30.     {2904.11474609, 423.76696777, 78.77447510, 0.25817871},
  31.     {2930.58251953, 424.04306030, 78.77447510, 0.25817871},
  32.     {2958.39892578, 423.78359985, 78.77447510, 0.25817871},
  33.     {2986.80200195, 424.27566528, 78.77447510, 0.25817871},
  34.     {3001.86645508, 442.33184814, 78.79947662, 90.25817871},
  35.     {3002.02978516, 467.72830200, 78.79947662, 90.25817871},
  36.     {3001.50488281, 492.68856812, 78.79947662, 90.25817871},
  37.     {3001.78491211, 519.28485107, 78.77447510, 90.25817871},
  38.     {2985.99145508, 536.43664551, 78.77447510, 180.25817871},
  39.     {2957.25537109, 536.47650146, 78.77447510, 180.25817871},
  40.     {2929.47705078, 536.85388184, 78.77447510, 180.25817871},
  41.     {2903.21923828, 536.34606934, 78.77447510, 180.25817871},
  42.     {2888.98461914, 519.35327148, 78.79947662, 270.25817871}
  43. };
  44.  
  45. CMD:db(playerid, params[])
  46. {
  47.     cmd_derby(playerid, params);
  48.     return 1;
  49. }
  50.  
  51. CMD:derby(playerid, params[])
  52. {
  53.     if( DerbyPlayerState[playerid] == DB_PLAYER_STATE_SIGNED ) return SendClientMessage(playerid, C_RED2, "Bierzesz już udział w derbach.");
  54.     if( pInfo[playerid][player_attraction_apply] ) return SendClientMessage(playerid, C_RED2, "Bierzesz już udział w innej zabawie.");
  55.     if( DerbyState == DB_STATE_IN_PROGRESS ) return SendClientMessage(playerid, C_RED2, "Derby już wystartowały.");
  56.    
  57.     if( Iter_Count(DerbyPlayers) == MAX_PLAYERS_DB ) return SendClientMessage(playerid, C_RED2, "Na derby zapisała się już maksymalna ilość graczy.");
  58.  
  59.     SendClientMessage(playerid, C_GREEN, "[Derby] Zapisałeś się na derby");
  60.    
  61.     pInfo[playerid][player_attraction_apply] = true;
  62.    
  63.     Iter_Add(DerbyPlayers, playerid);
  64.     DerbyPlayerState[playerid] = DB_PLAYER_STATE_SIGNED;
  65.    
  66.     ZapisyUpdate();
  67.    
  68.     if(Iter_Count(DerbyPlayers) == LICZBA_DB && DerbyState != DB_STATE_IN_PROGRESS )
  69.     {
  70.         SendClientMessageToAll(0xA346FFFF, "[Derby] Zapisy na derby zakończą się za 20 sekund po czym zabawa wystartuje.");
  71.         DerbyState = DB_STATE_BEFORE_START;
  72.        
  73.         defer DerbyStart();
  74.     }
  75.    
  76.     return 1;
  77. }
  78.  
  79. CMD:dbexit(playerid,cmdtext[])
  80. {
  81.     DerbyRemovePlayer(playerid, DB_REMOVE_REASON_EXIT);
  82.     return 1;
  83. }
  84.  
  85. CMD:dbend(playerid,cmdtext[])
  86. {
  87.     if( pInfo[playerid][player_crew_level] < CREW_LEVEL_MODERATOR ) return SendClientMessage(playerid, C_RED2, "•• |Info| Nie jesteś administratorem ani moderatorem!");
  88.    
  89.     SendClientMessageToAll(C_INFO,"•• |Info| Derby zostały przerwane przez administratora!");
  90.    
  91.     DerbyEnd();
  92.     return 1;
  93. }
  94.  
  95. stock ChangeVehicleEngineState(vehicleid, bool:e_state)
  96. {
  97.     new engine, lights, alarm, doors, bonnet, boot, objective;
  98.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  99.     SetVehicleParamsEx(vehicleid, e_state, lights, alarm, doors, bonnet, boot, objective);
  100. }
  101.  
  102. timer DerbyStart[20000]()
  103. {
  104.     new nr = 0;
  105.    
  106.     foreach(new p : DerbyPlayers)
  107.     {
  108.         ResetPlayerWeapons(p);
  109.                
  110.         DerbyVehicles[nr] = CreateVehicle(429, DerbyVehiclesPos[nr][0], DerbyVehiclesPos[nr][1], DerbyVehiclesPos[nr][2], DerbyVehiclesPos[nr][3], -1, -1, -1);
  111.         SetVehicleHealth(DerbyVehicles[nr], 999999);
  112.         SetVehicleVirtualWorld(DerbyVehicles[nr], DB_VW);
  113.        
  114.         ChangeVehicleEngineState(DerbyVehicles[nr], false);
  115.    
  116.         SetPlayerPos(p, DerbyVehiclesPos[nr][0], DerbyVehiclesPos[nr][1], DerbyVehiclesPos[nr][2]);
  117.         SetPlayerVirtualWorld(p, DB_VW);
  118.        
  119.         PutPlayerInVehicle(p, DerbyVehicles[nr], 0);
  120.        
  121.         DerbyPlayerVehicle[p] = nr;
  122.        
  123.         nr ++;
  124.     }
  125.    
  126.     defer DerbyEnginesOn[5000]();
  127.    
  128.     return 1;
  129. }
  130.  
  131. timer DerbyEnginesOn[100]()
  132. {
  133.     foreach(new p : DerbyPlayers)
  134.     {
  135.         ChangeVehicleEngineState(DerbyVehicles[DerbyPlayerVehicle[p]], true);
  136.     }
  137.    
  138.     DerbyState = DB_STATE_IN_PROGRESS;
  139.     ZapisyUpdate();
  140.      
  141.     SendClientMessageToAll(C_ZABAWA,"[Derby] Zabawa derby wystartowała!");
  142. }
  143.  
  144. hook OnPlayerDisconnectDB(playerid, reason)
  145. {
  146.     if( Iter_Contains(DerbyPlayers, playerid) )
  147.     {
  148.         DerbyRemovePlayer(playerid, DB_REMOVE_REASON_QUIT);
  149.         return 1;
  150.     }
  151.    
  152.     return 1;
  153. }
  154.  
  155. stock DerbyRemovePlayer(playerid, reason, clean = true)
  156. {
  157.     switch( reason )
  158.     {
  159.         case DB_REMOVE_REASON_DROWNED:
  160.         {
  161.             SendClientMessage(playerid, C_RED2, "[Derby] Zostałeś usunięty z derb ponieważ spadłeś.");
  162.         }
  163.        
  164.         case DB_REMOVE_REASON_VEHICLE_EXIT:
  165.         {
  166.             SendClientMessage(playerid, C_RED2, "[Derby] Zostałeś usunięty z derb ponieważ wyszedłeś z pojazdu.");
  167.         }
  168.        
  169.         case DB_REMOVE_REASON_AFK:
  170.         {
  171.             SendClientMessage(playerid, C_RED2, "[Derby] Zostałeś usunięty z derb ponieważ wszedłeś na afk.");
  172.         }
  173.        
  174.         case DB_REMOVE_REASON_EXIT:
  175.         {
  176.             if( DerbyState == DB_STATE_IN_PROGRESS ) SendClientMessage(playerid, C_RED2, "[Derby] Wyszedłeś z derb.");
  177.             else SendClientMessage(playerid, C_GREEN, "[Derby] Wypisałeś się z derb.");
  178.         }
  179.     }
  180.    
  181.     DerbyPlayerState[playerid] = 0;
  182.    
  183.     new player;
  184.     if( clean )
  185.     {
  186.         Iter_SafeRemove(DerbyPlayers, playerid, player);
  187.     }
  188.    
  189.     printf("playerid: %d", playerid);
  190.     printf("DerbyPlayerVehicle: %d", DerbyPlayerVehicle[playerid]);
  191.    
  192.     if( DerbyPlayerVehicle[playerid] > 0 && IsValidVehicle(DerbyVehicles[DerbyPlayerVehicle[playerid]]) )
  193.     {
  194.         DestroyVehicle(DerbyVehicles[DerbyPlayerVehicle[playerid]]);
  195.         DerbyPlayerVehicle[playerid] = 0;
  196.     }
  197.    
  198.     if( DerbyState == DB_STATE_IN_PROGRESS || (DerbyState < DB_STATE_IN_PROGRESS && reason != DB_REMOVE_REASON_EXIT)  ) SpawnPlayer(playerid);
  199.    
  200.     pInfo[playerid][player_attraction_apply] = false;
  201.     DerbyRefreshData();
  202.    
  203.     ZapisyUpdate();
  204.    
  205.     return player;
  206. }
  207.  
  208. task DerbyCheck[400]()
  209. {
  210.     if( DerbyState == DB_STATE_IN_PROGRESS )
  211.     {
  212.         foreach(new p : DerbyPlayers)
  213.         {
  214.             new
  215.                 Float:pos[3];
  216.             GetPlayerPos(p, pos[0], pos[1], pos[2]);
  217.             if( pos[2] < 40.0 )
  218.             {
  219.                 DerbyRemovePlayer(p, DB_REMOVE_REASON_DROWNED);
  220.             }
  221.             else if( !IsPlayerInAnyVehicle(p) )
  222.             {
  223.                 DerbyRemovePlayer(p, DB_REMOVE_REASON_VEHICLE_EXIT);
  224.             }
  225.             else if( AFK[p] )
  226.             {
  227.                 DerbyRemovePlayer(p, DB_REMOVE_REASON_AFK);
  228.             }
  229.         }
  230.     }
  231. }
  232.  
  233. stock DerbyRefreshData()
  234. {  
  235.     if( DerbyState < DB_STATE_IN_PROGRESS ) return 1;
  236.  
  237.     if( Iter_Count(DerbyPlayers) == 1 )
  238.     {
  239.         new playerid = Iter_First(DerbyPlayers);
  240.        
  241.         new str[64];
  242.         format(str,sizeof(str),"[Derby] Zabawe derby wygrywa %s, gratulacje!", pInfo[playerid][player_name]);
  243.         SendClientMessageToAll(0xA346FFFF,str);
  244.        
  245.         WinSound(playerid);
  246.        
  247.         if(pInfo[playerid][player_logged])
  248.         {
  249.             GameTextForPlayer(playerid,"respekt~n~~g~+15", 1000, 1);
  250.             pInfo[playerid][player_respect] += 15;
  251.         }
  252.        
  253.         DerbyEnd();
  254.         return 1;
  255.     }
  256.    
  257.     return 1;
  258. }
  259.  
  260. stock DerbyEnd()
  261. {
  262.     DerbyState = DB_STATE_RECORDS;
  263.    
  264.     foreach(new p : DerbyPlayers)
  265.     {
  266.         DerbyRemovePlayer(p, DB_REMOVE_REASON_END, false);
  267.     }
  268.    
  269.     Iter_Clear(DerbyPlayers);
  270.    
  271.     ZapisyUpdate();
  272.  
  273.     return 1;
  274. }
Advertisement
Add Comment
Please, Sign In to add comment