Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.84 KB | None | 0 0
  1. #include <a_samp>
  2. #include <sscanf>
  3. #include <xFireworks>
  4.  
  5. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  6.  
  7. new explosions[] = {0,2,4,5,6,7,8,9,10,13};
  8.  
  9. enum t_fwbattery {
  10. inuse,
  11. timer,
  12. count,
  13. Float:height,
  14. hvar,
  15. Float:windspeed,
  16. Float:interval,
  17. Float:pos[3],
  18. machine
  19. };
  20.  
  21. new batteries[50][t_fwbattery];
  22.  
  23. findempty()
  24. {
  25. for (new i=0;i<sizeof(batteries);i++) {
  26. if (!batteries[i][inuse]) return i;
  27. }
  28. return -1;
  29. }
  30.  
  31. GetSomeTime(id)
  32. {
  33. return floatround((400 + random(300)) * batteries[id][interval]);
  34. }
  35.  
  36.  
  37. forward machinetimer(id);
  38. public machinetimer(id)
  39. {
  40. if (batteries[id][count]) {
  41. CreateFirework(batteries[id][pos][0],batteries[id][pos][1],batteries[id][pos][2], //pos
  42. batteries[id][height] - batteries[id][hvar]/2 + random(batteries[id][hvar]), //height
  43. random(360),batteries[id][windspeed], //wind
  44. 50.0, //speed
  45. explosions[random(sizeof(explosions))],100.0); //explosion
  46. batteries[id][count]--;
  47. batteries[id][timer] = SetTimerEx("machinetimer",GetSomeTime(id),false,"i",id);
  48. } else {
  49. KillTimer(batteries[id][timer]);
  50. batteries[id][timer] = -1;
  51. batteries[id][inuse] = false;
  52. DestroyObject(batteries[id][machine]);
  53. }
  54. }
  55.  
  56. public OnFilterScriptInit()
  57. {
  58. for (new i=0;i<sizeof(batteries);i++) {
  59. batteries[i][inuse] = false;
  60. }
  61. print(" -- Fireworks by Martok");
  62. }
  63.  
  64. public OnFilterScriptExit()
  65. {
  66. for (new i=0;i<sizeof(batteries);i++) {
  67. DestroyObject(batteries[i][machine]);
  68. }
  69. }
  70.  
  71. dcmd_fwspawn(playerid, params[])
  72. {
  73. new c, id, Float:h, hv, Float:w, Float:in;
  74. if (sscanf(params, "ififf",c,h,hv,w,in)) {
  75. SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /fwspawn {COUNT} {HEIGHT} {HVAR} {WINDSPEED} {INTERVAL}");
  76. SendClientMessage(playerid, 0xFFFFFFFF, "Example: /fwspawn 20 50.0 20 30.0 1.0");
  77. }
  78. else {
  79. id = findempty();
  80. if (id<0) SendClientMessage(playerid, 0xFFFFFFFF, "No free slot!");
  81. else {
  82. new Float:x, Float:y, Float:z, Float:a;
  83. GetPlayerPos(playerid,x,y,z);
  84. GetPlayerFacingAngle(playerid,a);
  85. GetXYInFrontOfPosition(x,y,a,1.0);
  86. batteries[id][pos][0] = x;
  87. batteries[id][pos][1] = y;
  88. batteries[id][pos][2] = z;
  89. batteries[id][count] = c;
  90. batteries[id][height] = h;
  91. batteries[id][hvar] = hv;
  92. batteries[id][windspeed] = w;
  93. batteries[id][interval] = in;
  94.  
  95. batteries[id][inuse] = true;
  96. batteries[id][machine] = CreateObject(2780,x,y,z,0.0,0.0,0.0);
  97. new tmp[256];
  98. format(tmp,sizeof(tmp),"Machine created. Slot: %d", id);
  99. SendClientMessage(playerid, 0x55FF55FF, tmp);
  100. }
  101. }
  102. return 1;
  103. }
  104.  
  105. dcmd_fwfire(playerid, params[])
  106. {
  107. new id;
  108. if (sscanf(params, "i",id) || id>sizeof(batteries) || id<0) SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /fwfire {ID}");
  109. else {
  110. batteries[id][timer] = SetTimerEx("machinetimer",GetSomeTime(id),false,"i",id);
  111. SendClientMessage(playerid, 0xFFFFFFFF, "Firework started.");
  112. }
  113. return 1;
  114. }
  115.  
  116. dcmd_fwfireall(playerid, params[])
  117. {
  118. #pragma unused params
  119. #pragma unused playerid
  120. for (new i=0; i<sizeof(batteries); i++) {
  121. if (batteries[i][inuse]) {
  122. batteries[i][timer] = SetTimerEx("machinetimer",GetSomeTime(i),false,"i",i);
  123. }
  124. }
  125. SendClientMessage(playerid, 0xFFFFFFFF, "All fireworks started.");
  126. return 1;
  127. }
  128.  
  129. dcmd_fwkill(playerid, params[])
  130. {
  131. new id;
  132. if (sscanf(params, "i",id) || id>sizeof(batteries) || id<0) SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /fwfire {ID}");
  133. else {
  134. KillTimer(batteries[id][timer]);
  135. batteries[id][inuse] = false;
  136. DestroyObject(batteries[id][machine]);
  137. SendClientMessage(playerid, 0xFFFFFFFF, "Firework deleted.");
  138. }
  139. return 1;
  140. }
  141.  
  142. dcmd_fwkillall(playerid, params[])
  143. {
  144. #pragma unused params
  145. #pragma unused playerid
  146. for (new i=0; i<sizeof(batteries); i++) {
  147. if (batteries[i][inuse]) {
  148. KillTimer(batteries[i][timer]);
  149. batteries[i][inuse] = false;
  150. DestroyObject(batteries[i][machine]);
  151. }
  152. }
  153. SendClientMessage(playerid, 0xFFFFFFFF, "All fireworks deleted.");
  154. return 1;
  155. }
  156.  
  157. dcmd_fwsave(playerid, params[])
  158. {
  159. new filename[20],tmp[256];
  160. if (sscanf(params, "s",filename)) SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /fwsave {NAME}");
  161. else {
  162. format(tmp,sizeof(tmp),"%s.firework",filename);
  163. new File:f = fopen(tmp,io_write);
  164. for (new i=0; i<sizeof(batteries); i++) {
  165. if (batteries[i][inuse]) {
  166. format(tmp, sizeof(tmp), "%f %f %f %d %f %d %f %f\r\n",
  167. batteries[i][pos][0],
  168. batteries[i][pos][1],
  169. batteries[i][pos][2],
  170. batteries[i][count],
  171. batteries[i][height],
  172. batteries[i][hvar],
  173. batteries[i][windspeed],
  174. batteries[i][interval]);
  175. fwrite(f, tmp);
  176. }
  177. }
  178. fclose(f);
  179. SendClientMessage(playerid, 0xFFFFFFFF, "Fireworks saved.");
  180. }
  181. return 1;
  182. }
  183.  
  184.  
  185. dcmd_fwload(playerid, params[])
  186. {
  187. new filename[20],tmp[256];
  188. if (sscanf(params, "s",filename)) SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /fwload {NAME}");
  189. else {
  190. format(tmp,sizeof(tmp),"%s.firework",filename);
  191. if (!fexist(tmp)) SendClientMessage(playerid, 0xFFFFFFFF, "File not found!")
  192. else {
  193. new id;
  194. new File:f = fopen(tmp,io_read);
  195. while(fread(f, tmp)) {
  196. id = findempty();
  197. if (id<0) {
  198. SendClientMessage(playerid, 0xFFFFFFFF, "Out of slots...");
  199. return 1;
  200. }
  201. batteries[id][inuse] = true;
  202. sscanf(tmp, "fffififf",
  203. batteries[id][pos][0],
  204. batteries[id][pos][1],
  205. batteries[id][pos][2],
  206. batteries[id][count],
  207. batteries[id][height],
  208. batteries[id][hvar],
  209. batteries[id][windspeed],
  210. batteries[id][interval]);
  211. batteries[id][machine] = CreateObject(2780,batteries[id][pos][0],batteries[id][pos][1],batteries[id][pos][2],0.0,0.0,0.0);
  212.  
  213. }
  214. fclose(f);
  215. SendClientMessage(playerid, 0xFFFFFFFF, "Fireworks loaded.");
  216. }
  217. }
  218. return 1;
  219. }
  220.  
  221. dcmd_fwnight(playerid, params[])
  222. {
  223. #pragma unused params
  224. #pragma unused playerid
  225. SetWorldTime(0);
  226. for(new i = 0; i < MAX_PLAYERS; i++) {
  227. if(IsPlayerConnected(i))
  228. SetPlayerTime(playerid,0,0);
  229. }
  230. return SendClientMessageToAll(0xDDDD11FF,"The world time has been changed to 0:00.");
  231. }
  232.  
  233. dcmd_fwhelp(playerid, params[])
  234. {
  235. #pragma unused params
  236. SendClientMessage(playerid, 0xDDDD11FF, "Comandos dos Fogos:");
  237. SendClientMessage(playerid, 0xDDDD11FF, "/fwspawn - cria a bateria");
  238. SendClientMessage(playerid, 0xDDDD11FF, "/fwfire - solta os fogos");
  239. SendClientMessage(playerid, 0xDDDD11FF, "/fwkill - remove a bateria");
  240. SendClientMessage(playerid, 0xDDDD11FF, "/fwfireall - cancela os fogos");
  241. SendClientMessage(playerid, 0xDDDD11FF, "/fwkillall - remove todas as baterias");
  242. SendClientMessage(playerid, 0xDDDD11FF, "/fwsave - salva as baterias");
  243. SendClientMessage(playerid, 0xDDDD11FF, "/fwload - carrega um arquivo");
  244. SendClientMessage(playerid, 0xDDDD11FF, "/fwnight - solta todos os fogos a noite");
  245. return 1;
  246. }
  247.  
  248. public OnPlayerCommandText(playerid,cmdtext[])
  249. {
  250. if (IsPlayerAdmin(playerid) || CallRemoteFunction("GetPlayerLevel","i",playerid)>2) {
  251. dcmd(fwhelp,6,cmdtext);
  252.  
  253. dcmd(fwspawn,7,cmdtext);
  254. dcmd(fwfire,6,cmdtext);
  255. dcmd(fwkill,6,cmdtext);
  256. dcmd(fwfireall,9,cmdtext);
  257. dcmd(fwkillall,9,cmdtext);
  258. dcmd(fwsave,6,cmdtext);
  259. dcmd(fwload,6,cmdtext);
  260. dcmd(fwnight,7,cmdtext);
  261. }
  262. return 0;
  263. }
  264.  
  265. public OnObjectMoved(objectid)
  266. {
  267. xFireworks_OnObjectMoved(objectid);
  268. //
  269. By Thiago RodiauOUI :D
  270. //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement