1
0

drone.inc 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. // Drone system repurposed by Jay Cortez
  2. #define DRONE_RESPAWN_TIME 30000
  3. new
  4. droneVeh, Float:dronePlayerPos[3], droneControl = -1, dronecontrolVW = 0;
  5. forward OnDroneRespawnDeploy();
  6. public OnDroneRespawnDeploy()
  7. {
  8. droneControl = -1;
  9. return 1;
  10. }
  11. CMD:deploydrone(playerid, params[])
  12. {
  13. if(PlayerInfo[playerid][pGroup] != GROUP_S9)
  14. return 1;
  15. if(droneControl == -2)
  16. return SendClientMessage(playerid, COLOR_GREY, "The drone takes time to repair, you must wait.");
  17. if(IsValidVehicle(droneVeh))
  18. return SendClientMessage(playerid, COLOR_GREY, "The drone has already been deployed.");
  19. new Float:vPos[4];
  20. GetXYInFrontOfPlayer(playerid, vPos[0], vPos[1], vPos[2], vPos[3], 0.5);
  21. droneVeh = CreateVehicle(501, vPos[0], vPos[1], vPos[2], 0.00, -1, -1, 1000);
  22. new droneString[128];
  23. format(droneString, sizeof(droneString), "* %s unpacks a drone and sets it down.", PlayerICName(playerid));
  24. ProxDetector(30.0, playerid, droneString, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  25. return 1;
  26. }
  27. CMD:controldrone(playerid, params[])
  28. {
  29. if(PlayerInfo[playerid][pGroup] != GROUP_S9)
  30. return 1;
  31. if(droneControl == -2)
  32. return SendClientMessage(playerid, COLOR_GREY, "The drone is currently being repaired");
  33. if(droneControl != playerid && droneControl != -1)
  34. return SendClientMessage(playerid, COLOR_GREY, "The drone is currently being operated.");
  35. if(!IsValidVehicle(droneVeh))
  36. return SendClientMessage(playerid, COLOR_GREY, "The drone isn't yet deployed.");
  37. new droneString[128];
  38. if(droneControl == -1)
  39. {
  40. GetPlayerPos(playerid, dronePlayerPos[0], dronePlayerPos[1], dronePlayerPos[2]);
  41. dronecontrolVW = GetPlayerVirtualWorld(playerid);
  42. SetPlayerVirtualWorld(playerid, 0);
  43. PutPlayerInVehicle(playerid, droneVeh, 0);
  44. droneControl = playerid;
  45. format(droneString, sizeof(droneString), "* %s fiddles with the drone's remote control.", PlayerICName(playerid));
  46. ProxDetector(30.0, playerid, droneString, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  47. format(droneString, sizeof(droneString), "HQ: %s has taken control of the tactical drone.", PlayerOOCName(playerid));
  48. SendGroupMessage(GROUP_S9, COLOR_S9, droneString);
  49. }
  50. else
  51. {
  52. RemovePlayerFromVehicle(playerid);
  53. SetPlayerVirtualWorld(playerid, dronecontrolVW);
  54. SetPlayerPos(playerid, dronePlayerPos[0], dronePlayerPos[1], dronePlayerPos[2]);
  55. format(droneString, sizeof(droneString), "* %s puts away the drone's remote control.", PlayerICName(playerid));
  56. ProxDetector(30.0, playerid, droneString, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  57. droneControl = -1;
  58. }
  59. return 1;
  60. }
  61. stock OnDroneUpdate(playerid)
  62. {
  63. if(droneControl == playerid)
  64. {
  65. for(new id = 0; id < MAX_PLAYERS; id++)
  66. {
  67. if(id == playerid) continue;
  68. new
  69. Float:px, Float:py, Float:pz;
  70. GetPlayerPos(id, px, py, pz);
  71. if(IsPlayerInRangeOfPoint(playerid, 2.6, px, py, pz))
  72. {
  73. SendClientMessage(droneControl, COLOR_S9, "[S9 Drone] The drone has been destroyed.");
  74. DestroyDrone(playerid);
  75. droneControl = -2;
  76. SetTimer("OnDroneRespawnDeploy", DRONE_RESPAWN_TIME, 0);
  77. }
  78. }
  79. }
  80. return 1;
  81. }
  82. stock DestroyDrone(playerid)
  83. {
  84. if(IsPlayerConnected(playerid))
  85. {
  86. RemovePlayerFromVehicle(playerid);
  87. SetPlayerPos(playerid, dronePlayerPos[0], dronePlayerPos[1], dronePlayerPos[2]);
  88. SetPlayerVirtualWorld(playerid, dronecontrolVW);
  89. }
  90. DestroyVehicle(droneVeh);
  91. droneVeh = INVALID_VEHICLE_ID;
  92. return 1;
  93. }
  94. stock OnDroneRespawn(vehicleid)
  95. {
  96. if(droneVeh == vehicleid)
  97. DestroyDrone(droneControl);
  98. return 1;
  99. }
  100. stock OnDroneSignalCheck(playerid)
  101. {
  102. if(droneControl == playerid)
  103. {
  104. if(IsValidVehicle(droneVeh))
  105. {
  106. new Float:droneHealth;
  107. GetVehicleHealth(droneVeh, droneHealth);
  108. if(droneHealth < 450.0)
  109. {
  110. SendClientMessage(playerid, COLOR_S9, "[S9 Drone] The signal was cut due to damage.");
  111. SetVehicleHealth(droneVeh, 1000.0);
  112. DestroyDrone(playerid);
  113. droneControl = -2;
  114. SetTimer("OnDroneRespawnDeploy", DRONE_RESPAWN_TIME, 0);
  115. }
  116. }
  117. }
  118. return 1;
  119. }
  120. stock OnDroneLogout(playerid)
  121. {
  122. if(droneControl == playerid)
  123. {
  124. droneControl = -1;
  125. return 1;
  126. }
  127. return 0;
  128. }
  129. stock droneAttacked(issuerid, playerid)
  130. {
  131. if(droneControl != issuerid)
  132. {
  133. DestroyDrone(droneControl);
  134. droneControl = -2;
  135. SetTimer("OnDroneRespawnDeploy", DRONE_RESPAWN_TIME, 0);
  136. SendClientMessage(playerid, COLOR_S9, "[S9 Drone] The drone has been destroyed.");
  137. }
  138. return 1;
  139. }
  140. stock OnDroneDeath(vehicleid)
  141. {
  142. if(droneControl > -1 && droneVeh == vehicleid)
  143. {
  144. DestroyDrone(droneControl);
  145. droneControl = -2;
  146. SetTimer("OnDroneRespawnDeploy", DRONE_RESPAWN_TIME, 0);
  147. SendClientMessage(droneControl, COLOR_S9, "[S9 Drone] The drone has been destroyed.");
  148. }
  149. return 1;
  150. }