Advertisement
CodeStyle175

Firework sphere

Dec 26th, 2014
2,261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.62 KB | None | 0 0
  1. //Firework system for making sphere | By: CodeStyle175
  2. //Firework effects comes out when time is between 1-6. (/changetime)
  3. //You can change this script, but you have to KEEP CREDITS...
  4.  
  5. #include <a_samp>
  6. #include <zcmd>
  7. #include <sscanf2>
  8.  
  9. #define RED 0xF3400CFF
  10. #define SCM SendClientMessage
  11.  
  12. #define MAX_FIREWORK 100 //You can change it...
  13. #define NON -1
  14.  
  15. #define function%0(%1) forward%0(%1); public%0(%1)
  16.  
  17. enum EnumFirework
  18. {
  19.     FW_Owner,
  20.     Float:FW_Pos[4],
  21.     Float:FW_Height,
  22.     Float:FW_Radius,
  23.     FW_Amount,
  24.     FW_RocketsReleased,
  25.     FW_Timer,
  26.     FW_Box
  27. };
  28. new FireworkInfo[MAX_FIREWORK][EnumFirework];
  29.  
  30. public OnFilterScriptInit(){
  31.         for(new i; i < MAX_FIREWORK; i++) FireworkInfo[i][FW_Owner]=NON;
  32.     printf("Firework system by: CodeStyle175");
  33.     return 1;
  34. }
  35. public OnFilterScriptExit(){
  36.     return 1;
  37. }
  38.  
  39. function EmptyFireworkSlot()
  40. {
  41.     for(new i=1; i < MAX_FIREWORK; i++)if(FireworkInfo[i][FW_Owner]==NON) return i;
  42.     return 0;
  43. }
  44.  
  45. CMD:placefirework(playerid,params[])
  46. {
  47.     new Float:height,Float:radius,amount,string[60];
  48.     if(sscanf(params,"ffd",height,radius,amount))return SCM(playerid,-1,"USAGE: /placefirework [Height] [Radius] [Amount]");
  49.     new eid=EmptyFireworkSlot();
  50.     if(!eid)return SCM(playerid,RED,"There are no more free firework slots!");
  51.     GetPlayerPos(playerid,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2]);
  52.     GetPlayerFacingAngle(playerid,FireworkInfo[eid][FW_Pos][3]);
  53.     //Enum info settimine
  54.     FireworkInfo[eid][FW_RocketsReleased]=-2;
  55.     FireworkInfo[eid][FW_Radius]=radius;
  56.     FireworkInfo[eid][FW_Height]=height;
  57.     FireworkInfo[eid][FW_Owner]=playerid;
  58.     FireworkInfo[eid][FW_Amount]=amount;
  59.     FireworkInfo[eid][FW_Pos][0]+= (2.0 * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
  60.     FireworkInfo[eid][FW_Pos][1]+= (2.0 * floatcos(-FireworkInfo[eid][FW_Pos][3],degrees));
  61.     FireworkInfo[eid][FW_Pos][2]-=0.9;
  62.     FireworkInfo[eid][FW_Box]=CreateObject(3016,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2], 0,0,0);
  63.     format(string,sizeof(string),"Firework box ID: %d",eid);
  64.     SCM(playerid,-1,string);
  65.     return 1;
  66. }
  67. CMD:startfirework(playerid,params[])
  68. {
  69.     new eid;
  70.     if(sscanf(params,"d",eid))return SCM(playerid,-1,"USAGE: /startfirwork [ID]");
  71.     if(FireworkInfo[eid][FW_Owner]!=playerid)return SCM(playerid,RED,"You can't light up this firework!");
  72.     FireworkInfo[eid][FW_Timer]=SetTimerEx("StartFirework",600,true,"d",eid);
  73.     return 1;
  74. }
  75. CMD:changetime(playerid,params[])
  76. {
  77.     new time;
  78.     if(sscanf(params,"d",time))return SCM(playerid,-1,"USAGE: /changetime [Time]");
  79.     SetWorldTime(time);
  80.     SCM(playerid,-1,"You changed world time.");
  81.     return 1;
  82. }
  83.  
  84. function StartFirework(eid)
  85. {
  86.         FireworkInfo[eid][FW_Amount]--;
  87.     new Float:distance,Float:Ax,Float:Ay,Float:Az,time,object;
  88.  
  89.         if(!FireworkInfo[eid][FW_Amount]){
  90.         if(IsPlayerConnected(FireworkInfo[eid][FW_Owner]))SCM(FireworkInfo[eid][FW_Owner],-1,"Firework stopped has stopped!");
  91.         FireworkInfo[eid][FW_Owner]=NON;
  92.         DestroyObject(FireworkInfo[eid][FW_Box]);
  93.         KillTimer(FireworkInfo[eid][FW_Timer]);
  94.         return 1;
  95.     }
  96.     new Float:dis=10.0*FireworkInfo[eid][FW_RocketsReleased];
  97.     if(++FireworkInfo[eid][FW_RocketsReleased]==3)FireworkInfo[eid][FW_RocketsReleased]=-2;
  98.     //Counting
  99.     Ax=FireworkInfo[eid][FW_Pos][0]+(distance * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
  100.     Ay=FireworkInfo[eid][FW_Pos][1]+(distance * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
  101.     Az=FireworkInfo[eid][FW_Pos][2]+FireworkInfo[eid][FW_Height];
  102.     //Rocket body moving
  103.     object=CreateObject(3000,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2],0,0,0);
  104.     time=MoveObject(object, Ax,Ay,Az, 20.0);
  105.         SetTimerEx("MakeSphere",time,false,"dffff",object,Ax,Ay,Az,FireworkInfo[eid][FW_Radius]);
  106.     return 1;
  107. }
  108. function MakeSphere(nobject,Float:x,Float:y,Float:z,Float:radius)
  109. {
  110.         DestroyObject(nobject);
  111.     new object,type[3]={19282,19283,19284};
  112.     new Float:phi=0.0,Float:theta=0.0,time;
  113.     new Float:Ax=0.0,Float:Ay=0.0,Float:Az=0.0;
  114.         CreateExplosion(x,y,z, 12,10.0);
  115.     for(new i; i < 26; i++){ // 1 8 8 8 1
  116.         Ax=x+(radius*floatsin(-phi,degrees)*floatcos(-theta,degrees));
  117.         Ay=y+(radius*floatsin(-phi,degrees)*floatsin(-theta,degrees));
  118.         Az=z+(radius*floatcos(-phi,degrees));
  119.         //Object moveing
  120.         object=CreateObject(type[random(3)],x,y,z,0.0,0.0,theta+45);//Start
  121.         time=MoveObject(object, Ax,Ay,Az, 5.0);
  122.             SetTimerEx("FireworkRocketEnd",time,false,"d",object);//End
  123.         //Reset
  124.         theta+=45.0; if(theta==360.0){ Ax=0.0; Ax=0.0; Ay=0.0;}
  125.             if((1+i)%8==1)phi+=45;
  126.         }
  127.     return 1;
  128. }
  129. function FireworkRocketEnd(object)return DestroyObject(object);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement