xFireworks.inc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include <a_samp>
  2. //------------------------------------------------------------------------------
  3. #if defined _xfireworks_included
  4. #endinput
  5. #endif
  6. #define _xfireworks_included
  7. #pragma library xfireworks
  8. /*
  9. native xFireworks_OnObjectMoved();
  10. native CreateFirework(Float:x,Float:y,Float:z,Float:height,Float:leandir,Float:windoffset,Float:climespeed,expltype,Float:explsize);
  11. */
  12. //------------------------------------------------------------------------------
  13. enum fireworks
  14. {
  15. Float:f_height,
  16. Float:f_leandir,
  17. f_status,
  18. f_expltype,
  19. f_objectid,
  20. Float:f_explsize,
  21. Float:f_climespeed,
  22. Float:f_windoffset,
  23. bool:f_inuse
  24. }
  25. new Fireworks[MAX_OBJECTS][fireworks];
  26. new colortypes[] = {354, 3666};
  27. xFireworks_OnObjectMoved(objectid)
  28. {
  29. new id = GetFireworkID(objectid);
  30. if(id == -1) return 0;
  31. switch(Fireworks[id][f_status])
  32. {
  33. case 1..4:
  34. {
  35. new Float:x, Float:y, Float:z;
  36. GetObjectPos(objectid,x,y,z);
  37. GetXYInFrontOfPosition(x,y,Fireworks[id][f_leandir],Fireworks[id][f_windoffset] / 5);
  38. z += Fireworks[id][f_height] / 5;
  39. Fireworks[id][f_status]++;
  40. MoveObject(Fireworks[id][f_objectid],x,y,z,Fireworks[id][f_climespeed]);
  41. }
  42. default:
  43. {
  44. new Float:x, Float:y, Float:z;
  45. GetObjectPos(objectid,x,y,z);
  46. CreateExplosion(x,y,z,Fireworks[id][f_expltype],Fireworks[id][f_explsize]);
  47. DestroyFirework(id);
  48. }
  49. }
  50. return 1;
  51. }
  52. CreateFirework(Float:x,Float:y,Float:z,Float:height,Float:leandir,Float:windoffset,Float:climespeed,expltype,Float:explsize)
  53. {
  54. new id = GetFreeID();
  55. if(id == -1) return 0;
  56. Fireworks[id][f_objectid] = CreateObject(colortypes[random(sizeof(colortypes))],x,y,z,0.0,0.0,0.0);
  57. Fireworks[id][f_height] = height;
  58. Fireworks[id][f_leandir] = leandir;
  59. Fireworks[id][f_expltype] = expltype;
  60. Fireworks[id][f_climespeed] = climespeed;
  61. Fireworks[id][f_windoffset] = windoffset;
  62. Fireworks[id][f_explsize] = explsize;
  63. Fireworks[id][f_inuse] = true;
  64. Fireworks[id][f_status] = 1;
  65. z += height / 5;
  66. GetXYInFrontOfPosition(x,y,leandir,windoffset / 5);
  67. MoveObject(Fireworks[id][f_objectid],x,y,z,climespeed);
  68. return 1;
  69. }
  70. stock GetFreeID()
  71. {
  72. for(new i = 0; i < sizeof(Fireworks); i++)
  73. {
  74. if(!Fireworks[i][f_inuse])
  75. {
  76. return i;
  77. }
  78. }
  79. return -1;
  80. }
  81. stock GetFireworkID(objectid)
  82. {
  83. for(new i = 0; i < sizeof(Fireworks); i++)
  84. {
  85. if(Fireworks[i][f_objectid] == objectid)
  86. {
  87. return i;
  88. }
  89. }
  90. return -1;
  91. }
  92. stock DestroyFirework(id)
  93. {
  94. DestroyObject(Fireworks[id][f_objectid]);
  95. Fireworks[id][f_inuse] = false;
  96. }
  97. stock GetXYInFrontOfPosition(&Float:x, &Float:y, Float:a, Float:distance)
  98. {
  99. x += (distance * floatsin(-a, degrees));
  100. y += (distance * floatcos(-a, degrees));
  101. }