Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
1,443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.31 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3. #include <streamer>
  4. #include <YSI\y_hooks>
  5. #include <YSI\y_iterate>
  6.  
  7.  
  8. #define MAX_FIRE_WORKS 100
  9. #define MAX_SHOTS 500
  10.  
  11. #define SHOT_TYPE_ISOHEDRON 0
  12. #define SHOT_TYPE_SPHERE 1
  13.  
  14.  
  15. static GenerateIsohedron(Float:radius, Float:Points[12][3])
  16. {
  17. Points[0][0] = 0.000, Points[0][1] = 1.000*radius, Points[0][2] = 0.000,
  18. Points[1][0] = 0.894*radius, Points[1][1] = 0.447*radius, Points[1][2] = 0.000,
  19. Points[2][0] = 0.276*radius, Points[2][1] = 0.447*radius, Points[2][2] = 0.851*radius,
  20. Points[3][0] = -0.724*radius, Points[3][1] = 0.447*radius, Points[3][2] = 0.526*radius,
  21. Points[4][0] = -0.724*radius, Points[4][1] = 0.447*radius, Points[4][2] = -0.526*radius,
  22. Points[5][0] = 0.276*radius, Points[5][1] = 0.447*radius, Points[5][2] = -0.851*radius,
  23. Points[6][0] = 0.724*radius, Points[6][1] = -0.447*radius, Points[6][2] = 0.526*radius,
  24. Points[7][0] = -0.276*radius, Points[7][1] = -0.447*radius, Points[7][2] = 0.851*radius,
  25. Points[8][0] = -0.894*radius, Points[8][1] = -0.447*radius, Points[8][2] = 0.000,
  26. Points[9][0] = -0.276*radius, Points[9][1] = -0.447*radius, Points[9][2] = -0.851*radius,
  27. Points[10][0]= 0.724*radius, Points[10][1]= -0.447*radius, Points[10][2]= -0.526*radius,
  28. Points[11][0]= 0.000, Points[11][1]= -1.000*radius, Points[11][2]= 0.000;
  29. }
  30.  
  31. static GenerateSphere(Float:radius, Float:Points[36][3])
  32. {
  33. Points[0][0] = 0.433883*radius, Points[0][1] = 0.900968*radius, Points[0][2] = 0.000000;
  34. Points[1][0] = 0.216941*radius, Points[1][1] = 0.900968*radius, Points[1][2] = 0.375754*radius;
  35. Points[2][0] = -0.216941*radius, Points[2][1] = 0.900968*radius, Points[2][2] = 0.375754*radius;
  36. Points[3][0] = -0.433883*radius, Points[3][1] = 0.900968*radius, Points[3][2] = -0.000000*radius;
  37. Points[4][0] = -0.216941*radius, Points[4][1] = 0.900968*radius, Points[4][2] = -0.375754*radius;
  38. Points[5][0] = 0.216941*radius, Points[5][1] = 0.900968*radius, Points[5][2] = -0.375754*radius;
  39. Points[6][0] = 0.781831*radius, Points[6][1] = 0.623489*radius, Points[6][2] = 0.000000*radius;
  40. Points[7][0] = 0.390915*radius, Points[7][1] = 0.623489*radius, Points[7][2] = 0.677085*radius;
  41. Points[8][0] = -0.390915*radius, Points[8][1] = 0.623489*radius, Points[8][2] = 0.677085*radius;
  42. Points[9][0] = -0.781831*radius, Points[9][1] = 0.623489*radius, Points[9][2] = 0.000000;
  43. Points[10][0] = -0.390915*radius, Points[10][1] = 0.623489*radius, Points[10][2] = -0.677085*radius;
  44. Points[11][0] = 0.390915*radius, Points[11][1] = 0.623489*radius, Points[11][2] = -0.677085*radius;
  45. Points[12][0] = 0.974927*radius, Points[12][1] = 0.222520*radius, Points[12][2] = 0.000000*radius;
  46. Points[13][0] = 0.487463*radius, Points[13][1] = 0.222520*radius, Points[13][2] = 0.844312*radius;
  47. Points[14][0] = -0.487464*radius, Points[14][1] = 0.222520*radius, Points[14][2] = 0.844312*radius;
  48. Points[15][0] = -0.974927*radius, Points[15][1] = 0.222520*radius, Points[15][2] = 0.000000;
  49. Points[16][0] = -0.487463*radius, Points[16][1] = 0.222520*radius, Points[16][2] = -0.844312*radius;
  50. Points[17][0] = 0.487463*radius, Points[17][1] = 0.222520*radius, Points[17][2] = -0.844312*radius;
  51. Points[18][0] = 0.974927*radius, Points[18][1] = -0.222520*radius, Points[18][2] = 0.000000;
  52. Points[19][0] = 0.487463*radius, Points[19][1] = -0.222520*radius, Points[19][2] = 0.844312*radius;
  53. Points[20][0] = -0.487464*radius, Points[20][1] = -0.222520*radius, Points[20][2] = 0.844312*radius;
  54. Points[21][0] = -0.974927*radius, Points[21][1] = -0.222520*radius, Points[21][2] = 0.000000;
  55. Points[22][0] = -0.487463*radius, Points[22][1] = -0.222520*radius, Points[22][2] = -0.844312*radius;
  56. Points[23][0] = 0.487463*radius, Points[23][1] = -0.222520*radius, Points[23][2] = -0.844312*radius;
  57. Points[24][0] = 0.781831*radius, Points[24][1] = -0.623489*radius, Points[24][2] = 0.000000;
  58. Points[25][0] = 0.390915*radius, Points[25][1] = -0.623489*radius, Points[25][2] = 0.677085*radius;
  59. Points[26][0] = -0.390915*radius, Points[26][1] = -0.623489*radius, Points[26][2] = 0.677085*radius;
  60. Points[27][0] = -0.781831*radius, Points[27][1] = -0.623489*radius, Points[27][2] = 0.000000;
  61. Points[28][0] = -0.390915*radius, Points[28][1] = -0.623489*radius, Points[28][2] = -0.677085*radius;
  62. Points[29][0] = 0.390915*radius, Points[29][1] = -0.623489*radius, Points[29][2] = -0.677085*radius;
  63. Points[30][0] = 0.433883*radius, Points[30][1] = -0.900968*radius, Points[30][2] = 0.000000;
  64. Points[31][0] = 0.216941*radius, Points[31][1] = -0.900968*radius, Points[31][2] = 0.375754*radius;
  65. Points[32][0] = -0.216941*radius, Points[32][1] = -0.900968*radius, Points[32][2] = 0.375754*radius;
  66. Points[33][0] = -0.433883*radius, Points[33][1] = -0.900968*radius, Points[33][2] = 0.000000;
  67. Points[34][0] = -0.216941*radius, Points[34][1] = -0.900968*radius, Points[34][2] = -0.375754*radius;
  68. Points[35][0] = 0.216941*radius, Points[35][1] = -0.900968*radius, Points[35][2] = -0.375754*radius;
  69. }
  70.  
  71. enum FIREWORKINFO
  72. {
  73. bool:FireWorkInUse,
  74. FireWorkObject,
  75. Float:FireWorkPosX,
  76. Float:FireWorkPosY,
  77. Float:FireWorkPosZ,
  78. Float:FireWorkHeight,
  79. }
  80.  
  81. enum SHOTINFO
  82. {
  83. FireWorkRef,
  84. ShotObjectID,
  85. ShotType,
  86. ShotObject,
  87. Float:Shotoffx,
  88. Float:Shotoffy,
  89. Float:Shotoffz,
  90. }
  91.  
  92. static ShotObjects[6] = { 19290, 19291, 19292, 19293, 19294, 19295 };
  93.  
  94. static FireWorkShots[MAX_SHOTS][SHOTINFO];
  95.  
  96. static FireWorkData[MAX_FIRE_WORKS][FIREWORKINFO];
  97.  
  98. public OnFilterScriptInit()
  99. {
  100. for(new i = 0; i < MAX_SHOTS; i++) FireWorkShots[i][FireWorkRef] = -1;
  101. return 1;
  102. }
  103.  
  104. // Create a firework
  105. static CreateFireWork(Float:x, Float:y, Float:z, Float:height, shottimes)
  106. {
  107. for(new i = 0; i < MAX_FIRE_WORKS; i++)
  108. {
  109. if(FireWorkData[i][FireWorkInUse] == false)
  110. {
  111. FireWorkData[i][FireWorkObject] = CreateDynamicObject(2868, x, y, z, 0.0, 0.0, 0.0);
  112. FireWorkData[i][FireWorkPosX] = x;
  113. FireWorkData[i][FireWorkPosY] = y;
  114. FireWorkData[i][FireWorkPosZ] = z;
  115. FireWorkData[i][FireWorkHeight] = height;
  116.  
  117. foreach(new j : Player) Streamer_Update(j);
  118.  
  119. for(new j = 1; j < shottimes; j++)
  120. {
  121. new type = random(2);
  122. SetTimerEx("LaunchFireWork", 1000*j, false, "ii", i, type);
  123. }
  124.  
  125. SetTimerEx("ClearFireWork", 1000*shottimes, false, "i", i);
  126.  
  127. FireWorkData[i][FireWorkInUse] = true;
  128. return i;
  129. }
  130. }
  131. return -1;
  132. }
  133.  
  134. forward ClearFireWork(index);
  135. public ClearFireWork(index)
  136. {
  137. DestroyDynamicObject(FireWorkData[index][FireWorkObject]);
  138. FireWorkData[index][FireWorkInUse] = false;
  139. return 1;
  140. }
  141.  
  142. forward LaunchFireWork(index, type);
  143. public LaunchFireWork(index, type)
  144. {
  145. for(new i = 0; i < MAX_SHOTS; i++)
  146. {
  147. if(FireWorkShots[i][FireWorkRef] == -1)
  148. {
  149. FireWorkShots[i][ShotObject] = ShotObjects[random(6)];
  150. FireWorkShots[i][ShotObjectID] = CreateDynamicObject(FireWorkShots[i][ShotObject], FireWorkData[index][FireWorkPosX], FireWorkData[index][FireWorkPosY], FireWorkData[index][FireWorkPosZ], 0.0, 0.0, 0.0);
  151. FireWorkShots[i][FireWorkRef] = index;
  152. FireWorkShots[i][ShotType] = type;
  153.  
  154. if(random(2) == 1) FireWorkShots[i][Shotoffx] = -(float(random(2000)) / 100.0);
  155. else FireWorkShots[i][Shotoffx] = float(random(2000)) / 100.0;
  156.  
  157. if(random(2) == 1) FireWorkShots[i][Shotoffy] = -(float(random(2000)) / 100.0);
  158. else FireWorkShots[i][Shotoffy] = float(random(2000)) / 100.0;
  159.  
  160. if(random(2) == 1) FireWorkShots[i][Shotoffz] = -(float(random(1000)) / 100.0);
  161. else FireWorkShots[i][Shotoffz] = float(random(300)) / 100.0;
  162.  
  163. MoveDynamicObject(FireWorkShots[i][ShotObjectID],
  164. FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx],
  165. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy],
  166. FireWorkData[index][FireWorkPosZ]+FireWorkData[index][FireWorkHeight]+FireWorkShots[i][Shotoffz], 50.0);
  167.  
  168. foreach(new j : Player) Streamer_Update(j);
  169. return 1;
  170. }
  171. }
  172. return 1;
  173. }
  174.  
  175.  
  176. hook OnDynamicObjectMoved(objectid)
  177. {
  178. for(new i = 0; i < MAX_SHOTS; i++)
  179. {
  180. if(FireWorkShots[i][ShotObjectID] == objectid)
  181. {
  182. DestroyDynamicObject(FireWorkShots[i][ShotObjectID]);
  183. new index = FireWorkShots[i][FireWorkRef];
  184. FireWorkShots[i][FireWorkRef] = -1;
  185. FireWorkShots[i][ShotObjectID] = -1;
  186.  
  187. new tmpobj;
  188.  
  189. switch(FireWorkShots[i][ShotType])
  190. {
  191. case SHOT_TYPE_ISOHEDRON:
  192. {
  193. new Float:IsoPoints[12][3];
  194. GenerateIsohedron(10.0, IsoPoints);
  195. for(new j = 0; j < 12; j++)
  196. {
  197. tmpobj = CreateDynamicObject(FireWorkShots[i][ShotObject],
  198. FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx],
  199. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy],
  200. FireWorkData[index][FireWorkPosZ]+FireWorkData[index][FireWorkHeight]+FireWorkShots[i][Shotoffz],
  201. 0.0, 0.0, 0.0);
  202.  
  203. MoveDynamicObject(tmpobj,
  204. FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx]+IsoPoints[j][0],
  205. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy]+IsoPoints[j][1],
  206. FireWorkData[index][FireWorkPosZ]+FireWorkShots[i][Shotoffx]+FireWorkData[index][FireWorkHeight]+IsoPoints[j][2]-5.0, 10.0);
  207. SetTimerEx("DestroyFireWorkShot", 1500, false, "j", tmpobj);
  208. }
  209. foreach(new j : Player) Streamer_Update(j);
  210.  
  211. CreateExplosion(FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx],
  212. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy],
  213. FireWorkData[index][FireWorkPosZ]+FireWorkShots[i][Shotoffz]+FireWorkData[index][FireWorkHeight],
  214. 12, 1.0);
  215. return 1;
  216. }
  217. case SHOT_TYPE_SPHERE:
  218. {
  219. new Float:SpherePoints[36][3];
  220. GenerateSphere(10.0, SpherePoints);
  221. for(new j = 0; j < 36; j++)
  222. {
  223. tmpobj = CreateDynamicObject(FireWorkShots[i][ShotObject],
  224. FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx],
  225. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy],
  226. FireWorkData[index][FireWorkPosZ]+FireWorkData[index][FireWorkHeight]+FireWorkShots[i][Shotoffz],
  227. 0.0, 0.0, 0.0);
  228.  
  229. MoveDynamicObject(tmpobj,
  230. FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx]+SpherePoints[j][0],
  231. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy]+SpherePoints[j][1],
  232. FireWorkData[index][FireWorkPosZ]+FireWorkShots[i][Shotoffx]+FireWorkData[index][FireWorkHeight]+SpherePoints[j][2]-5.0, 10.0);
  233. SetTimerEx("DestroyFireWorkShot", 1500, false, "j", tmpobj);
  234. }
  235. foreach(new j : Player) Streamer_Update(j);
  236.  
  237. CreateExplosion(FireWorkData[index][FireWorkPosX]+FireWorkShots[i][Shotoffx],
  238. FireWorkData[index][FireWorkPosY]+FireWorkShots[i][Shotoffy],
  239. FireWorkData[index][FireWorkPosZ]+FireWorkShots[i][Shotoffz]+FireWorkData[index][FireWorkHeight],
  240. 8, 1.0);
  241. return 1;
  242. }
  243. }
  244. }
  245. }
  246. return 1;
  247. }
  248.  
  249. forward DestroyFireWorkShot(id);
  250. public DestroyFireWorkShot(id)
  251. {
  252. DestroyDynamicObject(id);
  253. return 1;
  254. }
  255.  
  256.  
  257. CMD:firework(playerid, arg[])
  258. {
  259. new Float:x, Float:y, Float:z, Float:FacingA;
  260.  
  261. GetPlayerFacingAngle(playerid, FacingA);
  262. x = (x + 1.0 * floatsin(-FacingA,degrees));
  263. y = (y + 1.0 * floatcos(-FacingA,degrees));
  264. CreateFireWork(x, y, z-1.0, 40.0, 100);
  265. return 1;
  266. }
  267.  
  268.  
  269.  
  270. enum XYZ {
  271. bool:Used,
  272. Float:xpos,
  273. Float:ypos,
  274. Float:zpos,
  275. }
  276.  
  277. //----------------------------------------------------------------------------
  278. /*
  279. // Generates sphere meshes
  280.  
  281. new Sphere[1000][XYZ];
  282.  
  283. #define DEGS_TO_RAD 0.01745329251
  284.  
  285. stock GenerateSphereMesh(Float:radius, nLatitude, nLongitude, Float:Sphere[][3])
  286. {
  287. new p, s;
  288. new Float:x, Float:y, Float:z, Float:out;
  289. new nPitch = nLongitude + 1;
  290.  
  291. new Float:pitchInc = (180 / float(nPitch)) * DEGS_TO_RAD;
  292. new Float:rotInc = (360 / float(nLatitude)) * DEGS_TO_RAD;
  293.  
  294. new numVertices = numVertices+2;
  295. new count;
  296. for(p=1; p<nPitch; p++)
  297. {
  298. out = radius * floatsin(float(p) * pitchInc);
  299. out = floatabs(out);
  300. y = radius * floatcos(float(p) * pitchInc);
  301.  
  302. for(s=0; s<nLatitude; s++)
  303. {
  304. x = out * floatcos(float(s) * rotInc);
  305. z = out * floatsin(float(s) * rotInc);
  306. numVertices++;
  307. Sphere[count][0] = x;
  308. Sphere[count][1] = y;
  309. Sphere[count][2] = z;
  310. count++;
  311. }
  312. }
  313. }
  314. */
  315. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement