1
0

jammers.inc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /*
  2. file: items/jammers.inc
  3. description: Signal jammers for special organisations.
  4. author: Day
  5. improved by: Jay Cortez
  6. date improved: 5th April 2018
  7. */
  8. #include <a_samp>
  9. #include <foreach>
  10. #define JAMMER_RANGE 30.0
  11. // Jammer properties
  12. enum jInfo
  13. {
  14. jUniqueID,
  15. jObjectID,
  16. jPlaced,
  17. Float:jPos[4],
  18. jOn,
  19. jInt,
  20. jWorld,
  21. Text3D:jLabel
  22. };
  23. new JammerInfo[MAX_PLAYERS][jInfo];
  24. // Places a jammer at the player
  25. stock placeJammer(playerid)
  26. {
  27. GetXYInFrontOfPlayer(playerid, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2], JammerInfo[playerid][jPos][3], 1);
  28. JammerInfo[playerid][jObjectID] = CreateDynamicObject(19513, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2] -1.0, 0, 0, JammerInfo[playerid][jPos][3], GetPlayerVirtualWorld(playerid));
  29. JammerInfo[playerid][jLabel] = CreateDynamic3DTextLabel("Signal Jammer [{FF0000}OFF{FFFFFF}]", 0xFFFFFFFF, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2] - 1 +0.88, 40.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), -1, -1, 30.0);
  30. SetPlayerSpecialAction(playerid, 0);
  31. ApplyAnimationEx(playerid, "CARRY", "putdwn", 3.0, 0, 0, 0, 0, 0, 0);
  32. JammerInfo[playerid][jPlaced] += 1;
  33. JammerInfo[playerid][jWorld] = GetPlayerVirtualWorld(playerid);
  34. JammerInfo[playerid][jInt] = GetPlayerInterior(playerid);
  35. return 1;
  36. }
  37. stock togJammer(playerid)
  38. {
  39. if(!JammerInfo[playerid][jOn])
  40. {
  41. JammerInfo[playerid][jOn] = 1;
  42. SendClientMessage(playerid, 0x9ACD32AA, "Jammer activated.");
  43. DestroyDynamic3DTextLabel(JammerInfo[playerid][jLabel]);
  44. JammerInfo[playerid][jLabel] = CreateDynamic3DTextLabel("Signal Jammer [{9ACD32}ON{FFFFFF}]", 0xFFFFFFFF, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2] - 1 +0.88, 40.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), -1, -1, 30.0);
  45. // Cut phone calls
  46. foreach(new i: Player)
  47. {
  48. if(CheckForJammer(i))
  49. Mobile[i] = 999;
  50. }
  51. }
  52. else if(JammerInfo[playerid][jOn])
  53. {
  54. JammerInfo[playerid][jOn] = 0;
  55. SendClientMessage(playerid, 0xFF0000AA, "Jammer deactivated.");
  56. DestroyDynamic3DTextLabel(JammerInfo[playerid][jLabel]);
  57. JammerInfo[playerid][jLabel] = CreateDynamic3DTextLabel("Signal Jammer [{FF0000}OFF{FFFFFF}]", 0xFFFFFFFF, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2] - 1 +0.88, 40.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), -1, -1, 30.0);
  58. }
  59. return 1;
  60. }
  61. // Removes the player's jammer
  62. stock removeJammer(playerid)
  63. {
  64. JammerInfo[playerid][jOn] = 0;
  65. JammerInfo[playerid][jPlaced] = 0;
  66. JammerInfo[playerid][jPos][0] = 0; //x
  67. JammerInfo[playerid][jPos][1] = 0; //y
  68. JammerInfo[playerid][jPos][2] = 0; //z
  69. JammerInfo[playerid][jPos][3] = 0; //a
  70. JammerInfo[playerid][jWorld] = -1;
  71. DestroyDynamicObjectEx(JammerInfo[playerid][jObjectID]);
  72. DestroyDynamic3DTextLabel(JammerInfo[playerid][jLabel]);
  73. JammerInfo[playerid][jObjectID] = 0;
  74. JammerInfo[playerid][jLabel] = Text3D:INVALID_3DTEXT_ID;
  75. return 1;
  76. }
  77. // Check if the player is currently being jammed
  78. stock CheckForJammer(playerid)
  79. {
  80. foreach(new i: Player)
  81. {
  82. if(!JammerInfo[i][jPlaced]) continue;
  83. if(IsPlayerInRangeOfPoint(playerid, JAMMER_RANGE, JammerInfo[i][jPos][0], JammerInfo[i][jPos][1], JammerInfo[i][jPos][2]) && JammerInfo[i][jOn])
  84. return true;
  85. }
  86. return false;
  87. }
  88. // Checks if the player is allowed to use jammers
  89. stock JammerAllowed(playerid) {
  90. return (
  91. PlayerInfo[playerid][pGroup] == GROUP_S9 ||
  92. PlayerInfo[playerid][pGroup] == GROUP_HITMAN ||
  93. PlayerInfo[playerid][pGroup] == GROUP_CRIME ||
  94. PlayerInfo[playerid][pMember] == FACTION_FBI ||
  95. PlayerInfo[playerid][pGroup] == GROUP_CARTEL
  96. );
  97. }
  98. // Command to place down a jammer
  99. CMD:placejammer(playerid, params[])
  100. {
  101. if(!JammerAllowed(playerid))
  102. return AdmErrorMsg;
  103. if(!PlayerInfo[playerid][pJammer])
  104. return SendClientMessage(playerid, COLOR_GREY, "You do not have a signal jammer.");
  105. if(JammerInfo[playerid][jPlaced])
  106. return SendClientMessage(playerid, COLOR_GREY, "You've already got a signal jammer placed somewhere.");
  107. placeJammer(playerid);
  108. PlayerInfo[playerid][pJammer] = 0;
  109. return 1;
  110. }
  111. // Command to remove a jammer
  112. CMD:removejammer(playerid, params[])
  113. {
  114. if(!JammerAllowed(playerid))
  115. return AdmErrorMsg;
  116. if(!JammerInfo[playerid][jPlaced])
  117. return SendClientMessage(playerid, COLOR_GREY, "You haven't placed a jammer yet.");
  118. if(!IsPlayerInRangeOfPoint(playerid, 1.0, JammerInfo[playerid][jPos][0], JammerInfo[playerid][jPos][1], JammerInfo[playerid][jPos][2]))
  119. return SendClientMessage(playerid, COLOR_GREY, "You are not near your signal jammer.");
  120. SetPlayerSpecialAction(playerid, 0);
  121. ApplyAnimationEx(playerid, "CARRY", "putdwn", 3.0, 0, 0, 0, 0, 0, 0);
  122. removeJammer(playerid);
  123. PlayerInfo[playerid][pJammer] = 1;
  124. return 1;
  125. }
  126. // Command to toggle a jammer
  127. CMD:togjammer(playerid, params[])
  128. return cmd_jammer(playerid, params);
  129. CMD:jammer(playerid, params[])
  130. {
  131. if(!JammerAllowed(playerid))
  132. return AdmErrorMsg;
  133. if(!JammerInfo[playerid][jPlaced])
  134. return SendClientMessage(playerid, COLOR_GREY, "You haven't placed a jammer yet.");
  135. togJammer(playerid);
  136. return 1;
  137. }
  138. // Command for admins to find out who owns a jammer
  139. CMD:jammerowner(playerid, params[])
  140. {
  141. if(PlayerInfo[playerid][pAdmin] < 2)
  142. return AdmErrorMsg;
  143. foreach(new i:Player)
  144. {
  145. if(!JammerInfo[i][jPlaced]) continue;
  146. if(IsPlayerInRangeOfPoint(playerid, 3.0, JammerInfo[i][jPos][0], JammerInfo[i][jPos][1], JammerInfo[i][jPos][2]))
  147. {
  148. new jammerStr[128];
  149. format(jammerStr, sizeof(jammerStr), "This jammer belongs to %s.", PlayerICName(i));
  150. SendClientMessage(playerid, COLOR_GREY, jammerStr);
  151. return 1;
  152. }
  153. }
  154. SendClientMessage(playerid, COLOR_GREY, "No jammer was found near you.");
  155. return 1;
  156. }
  157. // Command to remove a jammer as an administrator
  158. CMD:aremovejammer(playerid)
  159. {
  160. if(PlayerInfo[playerid][pAdmin] < 2)
  161. return AdmErrorMsg;
  162. foreach(new i:Player)
  163. {
  164. if(!JammerInfo[i][jPlaced]) continue;
  165. if(IsPlayerInRangeOfPoint(playerid, 3.0, JammerInfo[i][jPos][0], JammerInfo[i][jPos][1], JammerInfo[i][jPos][2]))
  166. {
  167. removeJammer(i);
  168. new jammerStr[128];
  169. format(jammerStr, sizeof(jammerStr), "You have removed the signal jammer. (belonged to %s)", PlayerICName(i));
  170. SendClientMessage(playerid, COLOR_GREY, jammerStr);
  171. SendClientMessage(i, COLOR_GREY, "Your signal jammer has been removed by an admin.");
  172. return 1;
  173. }
  174. }
  175. SendClientMessage(playerid, COLOR_GREY, "No jammer was found near you.");
  176. return 1;
  177. }
  178. // Command to crush a jammer
  179. CMD:crushjammer(playerid, params[])
  180. {
  181. foreach(new i:Player)
  182. {
  183. if(!JammerInfo[i][jPlaced]) continue;
  184. if(IsPlayerInRangeOfPoint(playerid, 1.0, JammerInfo[i][jPos][0], JammerInfo[i][jPos][1], JammerInfo[i][jPos][2]))
  185. {
  186. removeJammer(i);
  187. SetPlayerSpecialAction(playerid, 0);
  188. ApplyAnimationEx(playerid, "ped", "Jump_Land", 3.0, 0, 0, 0, 0, 0, 0);
  189. SendClientMessage(playerid, COLOR_GREY, "The signal jammer has been crushed.");
  190. return 1;
  191. }
  192. }
  193. SendClientMessage(playerid, COLOR_GREY, "No jammer was found near you.");
  194. return 1;
  195. }