Advertisement
Guest User

Mounted Miniguns

a guest
Apr 14th, 2010
995
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. /*
  2. This Include was made by ME, TheShadow from Germany.
  3. You haven't scripted this, so don't:
  4. - claim it as your own
  5. - remove my credits
  6. - rerelease this include
  7. - eat my pizza >:D
  8.  
  9. What is this Include for?:
  10. - You can create mounted Miniguns
  11. - They shoot at everyone who's in their range
  12. - Useful to defend admin areas for example
  13. */
  14.  
  15.  
  16.  
  17.  
  18.  
  19. #include <a_samp>
  20.  
  21. #define MAX_MINIGUNS 100
  22. #define TIMERDELAY 500 // MILLISECONDS !!!! 500 = half a second
  23.  
  24.  
  25. /// --------------------------------------------------------------------------------------------------------------------------------
  26. /// IF IT'S DEFINED YOU'LL SEE INFORMATIONS ABOUT THE SPRING GUNS WHEN YOU START SERVER YOUR AND WHEN YOU ARE IN RANGE OF ONE!!! ///
  27. //#define DEBUG
  28. /// --------------------------------------------------------------------------------------------------------------------------------
  29.  
  30. /*
  31. native CreateMinigun(Float:x,Float:y,Float:z,Float:rotation,firerange,damage,bool:activated);
  32. native DestroyMinigun(minigunid);
  33. native GetMinigunPosition(minigunid,&Float:x,&Float:y,&Float:z);
  34. native IsMinigunActive(minigunid);
  35. native SetMinigunActive(minigunid,bool:activated);
  36. native IsValidMinigun(minigunid);
  37. native SaveMinigunDataToLog(minigunid,comment[])
  38. */
  39.  
  40. enum mInfo
  41. {
  42. Object,
  43. Float:Xpos,
  44. Float:Ypos,
  45. Float:Zpos,
  46. Float:Rot,
  47. Float:Range,
  48. Damage,
  49. bool:Activated,
  50. Created
  51. };
  52.  
  53. new MinigunData[MAX_MINIGUNS][mInfo];
  54. new MINIGUNS = 0;
  55.  
  56. forward OnMinigunInit();
  57. forward OnMinigunExit();
  58. forward MinigunCheck();
  59. forward SaveMinigunDataToLog(minigunid,comment[]);
  60.  
  61. public OnMinigunInit()
  62. {
  63. SetTimer("MinigunCheck",TIMERDELAY,1);
  64. return 1;
  65. }
  66. public OnMinigunExit()
  67. {
  68. for(new i=0;i<MAX_MINIGUNS;i++){
  69. MinigunData[i][Object] = INVALID_OBJECT_ID;
  70. MinigunData[i][Xpos]=0.0;
  71. MinigunData[i][Ypos]=0.0;
  72. MinigunData[i][Zpos]=0.0;
  73. MinigunData[i][Rot]=0.0;
  74. MinigunData[i][Range] =0.0;
  75. MinigunData[i][Damage] = 0;
  76. MinigunData[i][Activated] = false;
  77. MinigunData[i][Created] = false;
  78. MINIGUNS = 0;
  79. }
  80. return 1;
  81. }
  82.  
  83.  
  84.  
  85. public MinigunCheck()
  86. {
  87. for(new i = 0; i < MAX_PLAYERS; i++)
  88. {
  89. for(new j = 0; j < MINIGUNS; j++)
  90. {
  91.  
  92. if(IsPlayerInRangeOfPoint(i,MinigunData[j][Range],MinigunData[j][Xpos],MinigunData[j][Ypos],MinigunData[j][Zpos]))
  93. {
  94. #if defined DEBUG
  95. new string[128];
  96. format(string,sizeof(string),"Minigun-DEBUG: ~n~ID: ~r~%d ~w~~n~X: ~r~%.4f~w~~n~ Y: ~r~%.4f ~w~~n~Z: ~r~%.4f ~w~~n~DMG: ~r~%d ~w~RANGE: ~r~%.4f",j,MinigunData[j][Xpos],MinigunData[j][Ypos],MinigunData[j][Zpos],MinigunData[j][Damage],MinigunData[j][Range]);
  97. GameTextForPlayer(i,string,TIMERDELAY+100,5);
  98. #endif
  99.  
  100.  
  101.  
  102. if(!IsPlayerAdmin(i) && MinigunData[j][Activated]){
  103. new Float:angle, Float:px, Float:py;
  104. GetPlayerPos(i,px,py,angle); // i know angle isn't right there but so i don't need a pz variable
  105. GetAngle(px,py,MinigunData[j][Xpos],MinigunData[j][Ypos],angle);
  106. SetObjectRot(MinigunData[j][Object],0.0,0.0,angle+90.0);
  107. MinigunData[j][Rot] = angle + 90.0;
  108. new Float:armour, Float:newarmour;
  109. GetPlayerArmour(i,armour);
  110. if(armour > 0){
  111. newarmour = armour - MinigunData[j][Damage];
  112. SetPlayerArmour(i,newarmour);
  113. }
  114. else {
  115.  
  116. new Float:health,Float:newhealth;
  117. GetPlayerHealth(i,health);
  118. newhealth = health - MinigunData[j][Damage];
  119. SetPlayerHealth(i,newhealth);
  120. }
  121. }
  122. }
  123. }
  124. }
  125. return 1;
  126. }
  127.  
  128.  
  129.  
  130.  
  131.  
  132. stock CreateMinigun(Float:x,Float:y,Float:z,Float:rotation,firerange,damage,bool:activated)
  133. {
  134. for(new i=0;i<MAX_MINIGUNS;i++){
  135. if(!MinigunData[i][Created]){
  136. MinigunData[i][Xpos] = x;
  137. MinigunData[i][Ypos] = y;
  138. MinigunData[i][Zpos] = z;
  139. MinigunData[i][Rot] = rotation;
  140. MinigunData[i][Range] = firerange;
  141. MinigunData[i][Damage] = damage;
  142. MinigunData[i][Activated] = activated;
  143. MinigunData[i][Object] = CreateObject(2985,x,y,z,0.0,0.0,rotation);
  144. MinigunData[i][Created] = true;
  145. #if defined DEBUG
  146. printf("Minigun created - ID: %d - X: %.4f - Y: %.4f - Z: %.4f", i, x,y,z);
  147. #endif
  148. MINIGUNS++;
  149. return i;
  150. }//end of if
  151. }//end of loop
  152. return -1;
  153. }//end of stock
  154.  
  155. stock GetAngle(Float:X, Float:Y, Float:CurrentX, Float:CurrentY, &Float:Angle)
  156. {
  157. Angle = atan2(Y-CurrentY, X-CurrentX);
  158. Angle = floatsub(Angle, 90.0);
  159. if(Angle < 0.0){
  160. Angle = floatadd(Angle, 360.0);
  161. }
  162. }
  163.  
  164. stock DestroyMinigun(minigunid)
  165. {
  166. if(IsValidMinigun(minigunid)){
  167. #if defined DEBUG
  168. printf("Minigun destroyed - ID: %d - X: %.4f - Y: %.4f - Z: %.4f", i, x,y,z);
  169. #endif
  170. DestroyObject(MinigunData[minigunid][Object]);
  171. MinigunData[minigunid][Object] = INVALID_OBJECT_ID;
  172. MinigunData[minigunid][Xpos]=0.0;
  173. MinigunData[minigunid][Ypos]=0.0;
  174. MinigunData[minigunid][Zpos]=0.0;
  175. MinigunData[minigunid][Rot]=0.0;
  176. MinigunData[minigunid][Range] =0.0;
  177. MinigunData[minigunid][Damage] = 0;
  178. MinigunData[minigunid][Activated] = false;
  179. MinigunData[minigunid][Created] = false;
  180. MINIGUNS = MINIGUNS - 1;
  181. }
  182. }
  183.  
  184. stock GetMinigunPosition(minigunid,&Float:x,&Float:y,&Float:z)
  185. {
  186. x = MinigunData[minigunid][Xpos];
  187. y = MinigunData[minigunid][Ypos];
  188. z = MinigunData[minigunid][Zpos];
  189. }
  190.  
  191. stock IsMinigunActive(minigunid){
  192. return MinigunData[minigunid][Activated];
  193. }
  194.  
  195.  
  196. stock SetMinigunActive(minigunid,bool:activated){
  197. if(IsValidMinigun(minigunid) MinigunData[minigunid][Activated] = activated;
  198. }
  199.  
  200. stock IsValidMinigun(minigunid)
  201. {
  202. if(MinigunData[minigunid][Created]) return true;
  203. return false;
  204. }
  205.  
  206. public SaveMinigunDataToLog(minigunid,comment[])
  207. {
  208. new entry[256];
  209. format(entry, sizeof(entry), "CreateMinigun(%.4f,%.4f,%.4f,%.4f,%d,%d,true);// %s\r\n",MinigunData[minigunid][Xpos],MinigunData[minigunid][Ypos],MinigunData[minigunid][Zpos],MinigunData[minigunid][Rot],MinigunData[minigunid][Range],MinigunData[minigunid][Damage], comment);
  210. new File:hFile;
  211. hFile = fopen("miniguns.txt", io_append);
  212. if (hFile)
  213. {
  214. fwrite(hFile, entry);
  215. fclose(hFile);
  216. }
  217.  
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement