Advertisement
Guest User

Jay

a guest
Nov 30th, 2009
8,229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.19 KB | None | 0 0
  1. /*******************************************************************************
  2.  
  3.     Snow filterscript to simulate falling snow effects for SA:MP
  4.     SA:MP 0.3
  5.  
  6.  
  7.     Author: James "Jay" Wilkinson
  8.    
  9.  
  10.     irc.gtanet.com #Jay
  11.     irc.gtanet.com #ww3
  12.     irc.sa-mp.com #ww3
  13.  
  14.  
  15.     Copyright (c) Jay 2009
  16.  
  17. *******************************************************************************/
  18. #include <a_samp>
  19.  
  20.  
  21.  
  22. #define SNOW_OBJECT      354
  23.  
  24. #define SLOTS           200         // aka MAX_PLAYERS
  25.  
  26. #define MAX_SNOW        20
  27.  
  28.  
  29. static snowObject[SLOTS][MAX_SNOW+1];
  30. static snowActive[SLOTS];
  31.  
  32.  
  33.  
  34.  
  35. public OnFilterScriptExit()
  36. {
  37.     for(new i = 0; i < SLOTS; i++)
  38.     {
  39.         if(!IsPlayerConnected(i) || IsPlayerNPC(i))
  40.             continue;
  41.            
  42.         DestroySnow(i);
  43.     }
  44.     return 1;
  45. }
  46.  
  47. public OnPlayerDisconnect(playerid, reason)
  48. {
  49.     if(!IsPlayerNPC(playerid))
  50.         DestroySnow(playerid);
  51. }
  52.  
  53. public OnPlayerSpawn(playerid)
  54. {
  55.     CreateSnow(playerid);
  56. }
  57.  
  58. public OnPlayerCommandText(playerid, cmdtext[])
  59. {
  60.     if(!strcmp(cmdtext, "/snow"))
  61.     {
  62.         if(!snowActive[playerid])
  63.         {
  64.             CreateSnow(playerid);
  65.         }else{
  66.             DestroySnow(playerid);
  67.         }
  68.         return 1;
  69.     }
  70.     return 0;
  71. }
  72.  
  73.  
  74. stock CreateSnow(playerid)
  75. {
  76.     if(GetPlayerState(playerid) == 0 || GetPlayerState(playerid) > 6)
  77.         return;
  78.  
  79.     if(GetPlayerInterior(playerid) != 0)
  80.         return;
  81.  
  82.     if(snowActive[playerid] == 1)
  83.         return;
  84.  
  85.     snowActive[playerid] = 1;
  86.  
  87.     new
  88.         Float:x,
  89.         Float:y,
  90.         Float:z;
  91.  
  92.     GetPlayerPos(playerid, x, y, z);
  93.  
  94.     for(new i = 0; i < MAX_SNOW; i++)
  95.     {
  96.         snowObject[playerid][i] = CreatePlayerObject(playerid, SNOW_OBJECT, x, y , z , 0, 0, 0);
  97.         RecreateSnow(playerid, snowObject[playerid][i]);
  98.     }
  99. }
  100.  
  101.  
  102.  
  103. stock DestroySnow(playerid)
  104. {
  105.     snowActive[playerid] = 0;
  106.  
  107.     for(new i = 0; i < MAX_SNOW; i++)
  108.     {
  109.         DestroyPlayerObject(playerid, snowObject[playerid][i]);
  110.     }
  111. }
  112.  
  113. stock RecreateSnow(playerid, objectid)
  114. {
  115.     if(snowActive[playerid] == 0)
  116.         return;
  117.  
  118.  
  119.     new
  120.         Float:x,
  121.         Float:y,
  122.         Float:z,
  123.         Float:objX,
  124.         Float:objY,
  125.         Float:objZ;
  126.        
  127.     GetPlayerPos(playerid, x, y, z);
  128.  
  129.     // And before you ask, I use random twice because SA:MP's random sucks ass
  130.     new i = random(random(100));
  131.  
  132.     if(i < 20)
  133.     {
  134.         SetPlayerObjectPos(playerid, objectid, x - random(random(100)), y + random (random(70)), z + random(20)+20);
  135.     }
  136.     else if(i >= 21 && i <= 30)
  137.     {
  138.         SetPlayerObjectPos(playerid, objectid, x + random(random(100)), y + random (random(70)), z + random(20)+20);
  139.     }
  140.     else if (i >= 31 && i < 40)
  141.     {
  142.         SetPlayerObjectPos(playerid, objectid, x + random(random(70)), y - random (random(100)), z + random(20)+20);
  143.     }
  144.     else
  145.     {
  146.         SetPlayerObjectPos(playerid, objectid, x + random(random(120)), y + random (random(30)), z + random(20)+20);
  147.     }
  148.  
  149.     GetPlayerObjectPos(playerid, objectid, objX, objY, objZ);
  150.  
  151.     MovePlayerObject(playerid, objectid, objX, objY, z-10, random(70)+5);
  152.  
  153. }
  154.  
  155. public OnPlayerObjectMoved(playerid, objectid)
  156. {
  157.  
  158.     if(snowActive[playerid] == 0)
  159.         return 1;
  160.  
  161.     for(new i = 0; i < MAX_SNOW; i++)
  162.     {
  163.         if(objectid == snowObject[playerid][i])
  164.         {
  165.             RecreateSnow(playerid, objectid);
  166.             return 1;
  167.         }
  168.     }
  169.     return 1;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement