1
0

speed_cams.inc 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*
  2. _____ _ _____ ____
  3. / ____| | | / ____| | _ \
  4. | (___ _ __ ___ ___ __| | | | __ _ _ __ ___ ___ _ __ __ _ ___ | |_) |_ _
  5. \___ \| '_ \ / _ \/ _ \/ _` | | | / _` | '_ ` _ \ / _ \ '__/ _` / __| | _ <| | | |
  6. ____) | |_) | __/ __/ (_| | | |___| (_| | | | | | | __/ | | (_| \__ \ | |_) | |_| |
  7. |_____/| .__/ \___|\___|\__,_| \_____\__,_|_| |_| |_|\___|_| \__,_|___/ |____/ \__, |
  8. | | __/ |
  9. _____ |_| _ _____ |___/
  10. | __ \ | | ___ / ____| | |
  11. | | | | ___ ___ _ __ ___ ___ _ __ __| | ( _ ) | (___ _ __ __ _ _ __| | _____
  12. | | | |/ _ \/ __| '_ ` _ \ / _ \| '_ \ / _` | / _ \/\ \___ \| '_ \ / _` | '__| |/ / _ \
  13. | |__| | __/\__ \ | | | | | (_) | | | | (_| | | (_> < ____) | |_) | (_| | | | < __/
  14. |_____/ \___||___/_| |_| |_|\___/|_| |_|\__,_| \___/\/ |_____/| .__/ \__,_|_| |_|\_\___|
  15. | |
  16. |_|
  17. */
  18. #define MAX_CAMS (50)
  19. #define CAM_OBJ (18880)
  20. enum SpeedCams {
  21. speedID,
  22. bool:speedPlaced, // Varible we used to see if the speed cam is created/placed
  23. Float:speedPosition[3],
  24. Float:speedRotation[3],
  25. speedSpeed, // Speed limit
  26. speedCreator[MAX_PLAYER_NAME + 1],
  27. speedObject,
  28. Text3D:speed3D
  29. };
  30. new Cams[MAX_CAMS][SpeedCams];
  31. Hook:speedcams_OnGameModeInit()
  32. {
  33. LoadSpeed();
  34. return 1;
  35. }
  36. stock SaveSpeed(creator[], speed, Float:x, Float:y, Float:z, Float: rotx, Float: roty, Float: rotz, id)
  37. {
  38. new filename[50];
  39. format(filename, sizeof(filename), "Speed%i.ini", id);
  40. if(!dini_Exists(filename))
  41. {
  42. dini_Create(filename);
  43. dini_Set(filename, "Creator", creator);
  44. dini_FloatSet(filename, "X", x);
  45. dini_FloatSet(filename, "Y", y);
  46. dini_FloatSet(filename, "Z", z);
  47. dini_FloatSet(filename, "RX", rotx);
  48. dini_FloatSet(filename, "RY", roty);
  49. dini_FloatSet(filename, "RZ", rotz);
  50. dini_IntSet(filename, "speed", speed);
  51. }
  52. else
  53. {
  54. dini_Set(filename, "Creator", creator);
  55. dini_FloatSet(filename, "X", x);
  56. dini_FloatSet(filename, "Y", y);
  57. dini_FloatSet(filename, "Z", z);
  58. dini_FloatSet(filename, "RX", rotx);
  59. dini_FloatSet(filename, "RY", roty);
  60. dini_FloatSet(filename, "RZ", rotz);
  61. dini_IntSet(filename, "speed", speed);
  62. }
  63. return 1;
  64. }
  65. stock LoadSpeed()
  66. {
  67. new filename[50];
  68. for(new i = 0; i < MAX_CAMS; i++)
  69. {
  70. format(filename, sizeof(filename), "Speed%i.ini", i);
  71. if(!dini_Exists(filename)) continue;
  72. if(dini_Exists(filename))
  73. {
  74. format(Cams[i][speedCreator], MAX_PLAYER_NAME+1, "%s", dini_Get(filename, "Creator"));
  75. Cams[i][speedPlaced] = true;
  76. Cams[i][speedPosition][0] = dini_Float(filename, "X");
  77. Cams[i][speedPosition][1] = dini_Float(filename, "Y");
  78. Cams[i][speedPosition][2] = dini_Float(filename, "Z");
  79. Cams[i][speedRotation][0] = dini_Float(filename, "RX");
  80. Cams[i][speedRotation][1] = dini_Float(filename, "RY");
  81. Cams[i][speedRotation][2] = dini_Float(filename, "RZ");
  82. Cams[i][speedSpeed] = dini_Int(filename, "speed");
  83. Cams[i][speedObject] = CreateDynamicObject(CAM_OBJ, Cams[i][speedPosition][0], Cams[i][speedPosition][1], Cams[i][speedPosition][2], Cams[i][speedRotation][0], Cams[i][speedRotation][1], Cams[i][speedRotation][2]);
  84. new strmsg[128];
  85. format(strmsg, sizeof(strmsg), "Speed Camera\nSpeed limit: %i MPH.", Cams[i][speedSpeed]);
  86. Cams[i][speed3D] = Create3DTextLabel(strmsg, COLOR_ENTRANCE, Cams[i][speedPosition][0], Cams[i][speedPosition][1], Cams[i][speedPosition][2]+4, 5, 0, 0);
  87. }
  88. }
  89. return 1;
  90. }
  91. CMD:createspeed(playerid, params[])
  92. {
  93. if(PlayerInfo[playerid][pAdmin] > 2 || PlayerInfo[playerid][pDev] >= 2)
  94. {
  95. new speed;
  96. if(sscanf(params, "i", speed)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /createspeed [speedlimit in MPH]");
  97. if(speed > 150 || speed < 50) return SendClientMessage(playerid, COLOR_GREY, "The speed limit must be between 50 and 150 MPH.");
  98. new strmsg[128], Float:Position[3];
  99. GetPlayerPos(playerid, Position[0], Position[1], Position[2]);
  100. for(new i = 0; i < MAX_CAMS; i++)
  101. {
  102. if(Cams[i][speedPlaced] == false)
  103. {
  104. format(strmsg, sizeof(strmsg), "You've created camera ID %i.", i);
  105. SendClientMessage(playerid, COLOR_LIGHTBLUE, strmsg);
  106. GetPlayerName(playerid, Cams[i][speedCreator], 25);
  107. Cams[i][speedPlaced] = true;
  108. Cams[i][speedPosition][0] = Position[0];
  109. Cams[i][speedPosition][1] = Position[1];
  110. Cams[i][speedPosition][2] = Position[2];
  111. Cams[i][speedSpeed] = speed;
  112. Cams[i][speedObject] = CreateDynamicObject(CAM_OBJ, Position[0], Position[1], Position[2], 0, 0, 0);
  113. format(strmsg, sizeof(strmsg), "Speed Camera\nSpeed limit: %i MPH.", speed);
  114. Cams[i][speed3D] = Create3DTextLabel(strmsg, COLOR_ENTRANCE, Cams[i][speedPosition][0], Cams[i][speedPosition][1], Cams[i][speedPosition][2]+4, 5, 0, 0);
  115. EditDynamicObject(playerid, Cams[i][speedObject]);
  116. SaveSpeed(Cams[i][speedCreator], Cams[i][speedSpeed], Cams[i][speedPosition][0], Cams[i][speedPosition][1], Cams[i][speedPosition][2], Cams[i][speedRotation][0], Cams[i][speedRotation][1], Cams[i][speedRotation][2], i);
  117. new Float: temppos[3];
  118. GetPlayerPos(playerid, temppos[0], temppos[1], temppos[2]);
  119. SetPlayerPos(playerid, temppos[0]+2, temppos[1], temppos[2]);
  120. break;
  121. }
  122. }
  123. }
  124. return 1;
  125. }
  126. CMD:editspeed(playerid, params[])
  127. {
  128. if(PlayerInfo[playerid][pAdmin] < 3 && PlayerInfo[playerid][pDev] < 2) return AdmErrorMsg;
  129. new camid, action[30], valuevar;
  130. if(!sscanf(params, "is[30]i", camid, action, valuevar))
  131. {
  132. if(camid < 0 || camid > 49) return SendClientMessage(playerid, COLOR_GREY, "The camera id must be between 0 and 49.");
  133. new tempmsg[80];
  134. if(!strcmp(action, "pos", true))
  135. {
  136. format(tempmsg, sizeof(tempmsg), "You are now editing speed camera ID %i's position.", camid);
  137. SendClientMessage(playerid, COLOR_LIGHTBLUE, tempmsg);
  138. EditDynamicObject(playerid, Cams[camid][speedObject]);
  139. }
  140. else if(!strcmp(action, "speed", true))
  141. {
  142. if(valuevar < 50 || valuevar > 150) return SendClientMessage(playerid, COLOR_GREY, "The speed limit must be between 50 and 150 MPH.");
  143. Cams[camid][speedSpeed] = valuevar;
  144. format(tempmsg, sizeof(tempmsg), "You have edited speed camera ID %i's speed limit to %i.", camid, valuevar);
  145. SendClientMessage(playerid, COLOR_LIGHTBLUE, tempmsg);
  146. format(tempmsg, sizeof(tempmsg), "Speed Camera\nSpeed limit: %i MPH.", valuevar);
  147. Update3DTextLabelText(Cams[camid][speed3D], COLOR_ENTRANCE, tempmsg);
  148. }
  149. SaveSpeed(Cams[camid][speedCreator], Cams[camid][speedSpeed], Cams[camid][speedPosition][0], Cams[camid][speedPosition][1], Cams[camid][speedPosition][2], Cams[camid][speedRotation][0], Cams[camid][speedRotation][1], Cams[camid][speedRotation][2], camid);
  150. }
  151. else return SendClientMessage(playerid, -1, "{00BFFF}Usage:{FFFFFF} /editspeed [cameraid] [pos/speed] [0/value]");
  152. return 1;
  153. }
  154. CMD:deletespeed(playerid, params[])
  155. {
  156. if(PlayerInfo[playerid][pAdmin] > 2 || PlayerInfo[playerid][pDev] >= 2)
  157. {
  158. new camid;
  159. if(sscanf(params, "i", camid)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /deletespeed [camid]");
  160. if(Cams[camid][speedPlaced] == false) return SendClientMessage(playerid, COLOR_GREY, "That camera id is not used.");
  161. if(camid < 0 || camid > 49) return SendClientMessage(playerid, COLOR_GREY, "The camera id must be between 0 and 49.");
  162. Cams[camid][speedPlaced] = false;
  163. Cams[camid][speedPosition][0] = 0;
  164. Cams[camid][speedPosition][1] = 0;
  165. Cams[camid][speedPosition][2] = 0;
  166. Cams[camid][speedRotation][0] = 0;
  167. Cams[camid][speedRotation][1] = 0;
  168. Cams[camid][speedRotation][2] = 0;
  169. Cams[camid][speedSpeed] = 0;
  170. DestroyDynamicObjectEx(Cams[camid][speedObject]);
  171. Delete3DTextLabel(Cams[camid][speed3D]);
  172. new filename[50];
  173. format(filename, sizeof(filename), "Speed%i.ini", camid);
  174. dini_Remove(filename);
  175. new strmsg[50];
  176. format(strmsg, sizeof(strmsg), "You have deleted speed camera ID %i.", camid);
  177. SendClientMessage(playerid, COLOR_LIGHTBLUE, strmsg);
  178. }
  179. return 1;
  180. }
  181. CMD:closeestcams(playerid, params[])
  182. {
  183. if(PlayerInfo[playerid][pAdmin] < 3 && PlayerInfo[playerid][pDev] < 2) return AdmErrorMsg;
  184. new strmsg[128];
  185. for(new i = 0; i < MAX_CAMS; i++)
  186. {
  187. if(Cams[i][speedPlaced] == true)
  188. {
  189. if(IsPlayerInRangeOfPoint(playerid, 10.0, Cams[i][speedPosition][0], Cams[i][speedPosition][1], Cams[i][speedPosition][2]))
  190. {
  191. format(strmsg, sizeof(strmsg), "Camera ID: %i | Camera Placer: %s | Max Speed: %i",
  192. i, Cams[i][speedCreator], Cams[i][speedSpeed]);
  193. SendClientMessage(playerid, COLOR_LIGHTBLUE, strmsg);
  194. }
  195. }
  196. }
  197. return 1;
  198. }