Advertisement
Guest User

[DYNAMIC] CCTV System

a guest
Aug 26th, 2016
934
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.36 KB | None | 0 0
  1. /*
  2. =============================================
  3. | CCTV SYSTEM |
  4. | (core) |
  5. =============================================
  6. */
  7.  
  8. #define MAX_CCTV 100
  9. #define MAX_CCTV_NAME 50
  10.  
  11. enum E_CCTV_INFO
  12. {
  13. ID,
  14.  
  15. cctv_Name[MAX_CCTV_NAME],
  16. Float: cctv_X,
  17. Float: cctv_Y,
  18. Float: cctv_Z,
  19.  
  20. Float: cctv_rotX,
  21. Float: cctv_rotY,
  22. Float: cctv_rotZ,
  23.  
  24. cctv_VW,
  25. cctv_Interior,
  26. cctv_Faction,
  27.  
  28. cctv_Object
  29. };
  30.  
  31. new
  32. CCTVInfo[MAX_CCTV][E_CCTV_INFO],
  33. Iterator: CCTVIter<MAX_CCTV>;
  34.  
  35. new
  36. Float: CCTV_oldX[MAX_PLAYERS],
  37. Float: CCTV_oldY[MAX_PLAYERS],
  38. Float: CCTV_oldZ[MAX_PLAYERS],
  39. Float: CCTV_oldAngle[MAX_PLAYERS],
  40. CCTV_oldSkin[MAX_PLAYERS],
  41. CCTV_oldVW[MAX_PLAYERS],
  42. CCTV_oldInterior[MAX_PLAYERS],
  43. inCCTV[MAX_PLAYERS],
  44. CCTV_ID[MAX_PLAYERS],
  45. CCTV_inEditing[MAX_PLAYERS];
  46.  
  47. public OnGameModeInit()
  48. {
  49. LoadCCTVs();
  50. #if defined cctv_OnGameModeInit
  51. cctv_OnGameModeInit();
  52. #endif
  53. return 1;
  54. }
  55.  
  56. #if defined _ALS_OnGameModeInit
  57. #undef OnGameModeInit
  58. #else
  59. #define _ALS_OnGameModeInit
  60. #endif
  61.  
  62. #define OnGameModeInit cctv_OnGameModeInit
  63. #if defined cctv_OnGameModeInit
  64. forward cctv_OnGameModeInit();
  65. #endif
  66.  
  67. public OnPlayerEditDynamicObject(playerid, objectid, response, Float: x, Float: y, Float: z, Float: rx, Float: ry, Float: rz)
  68. {
  69. if(response == EDIT_RESPONSE_CANCEL)
  70. {
  71. if(CCTV_inEditing[playerid]) CancelEditCCTV(playerid, CCTV_ID[playerid]);
  72. }
  73. else if(response == EDIT_RESPONSE_FINAL)
  74. {
  75. if(CCTV_inEditing[playerid])
  76. {
  77. new id = CCTV_ID[playerid];
  78.  
  79. SetDynamicObjectPos(objectid, x, y, z);
  80. SetDynamicObjectRot(objectid, rx, ry, rz);
  81.  
  82. CCTVInfo[id][cctv_X] = x;
  83. CCTVInfo[id][cctv_Y] = y;
  84. CCTVInfo[id][cctv_Z] = z;
  85.  
  86. CCTVInfo[id][cctv_rotX] = rx;
  87. CCTVInfo[id][cctv_rotY] = ry;
  88. CCTVInfo[id][cctv_rotZ] = rz;
  89.  
  90. SaveCCTV(id);
  91. CCTV_inEditing[playerid] = 0;
  92. CCTV_ID[playerid] = -1;
  93. }
  94. }
  95.  
  96. #if defined cctv_OnPlayerEditDynamicObject
  97. cctv_OnPlayerEditDynamicObject(playerid, objectid, response, Float: x, Float: y, Float: z, Float: rx, Float: ry, Float: rz)
  98. #endif
  99. return 1;
  100. }
  101.  
  102. #if defined _ALS_OnPlayerEditDynamicObject
  103. #undef OnPlayerEditDynamicObject
  104. #else
  105. #define _ALS_OnPlayerEditDynamicObject
  106. #endif
  107.  
  108. #define OnPlayerEditDynamicObject cctv_OnPlayerEditDynamicObject
  109. #if defined cctv_OnPlayerEditDynamicObject
  110. forward cctv_OnPlayerEditDynamicObject(playerid, objectid, response, Float: x, Float: y, Float: z, Float: rx, Float: ry, Float: rz);
  111. #endif
  112.  
  113. LoadCCTVs() return mysql_tquery(handle_mysql, "SELECT * FROM `cctv` ORDER BY `ID`", "OnLoadCCTVs", "");
  114.  
  115. OnLoadCCTVs(); public OnLoadCCTVs()
  116. {
  117. new
  118. rows = cache_get_row_count(), id, cctvName[MAX_CCTV_NAME];
  119. if(rows)
  120. {
  121. for(new i; i < rows; i++)
  122. {
  123. id = Iter_Free(CCTVIter);
  124. if(id != -1)
  125. {
  126. CCTVInfo[id][ID] = cache_get_field_content_int(i, "ID");
  127. cache_get_field_content(i, "cctv_name", cctvName);
  128. strcpy(CCTVInfo[id][cctv_Name], cctvName, MAX_CCTV_NAME);
  129.  
  130. CCTVInfo[id][cctv_X] = cache_get_field_content_float(i, "cctv_x");
  131. CCTVInfo[id][cctv_Y] = cache_get_field_content_float(i, "cctv_y");
  132. CCTVInfo[id][cctv_Z] = cache_get_field_content_float(i, "cctv_z");
  133.  
  134. CCTVInfo[id][cctv_rotX] = cache_get_field_content_float(i, "cctv_rot_x");
  135. CCTVInfo[id][cctv_rotY] = cache_get_field_content_float(i, "cctv_rot_y");
  136. CCTVInfo[id][cctv_rotZ] = cache_get_field_content_float(i, "cctv_rot_z");
  137.  
  138. CCTVInfo[id][cctv_VW] = cache_get_field_content_int(i, "cctv_vw");
  139. CCTVInfo[id][cctv_Interior] = cache_get_field_content_int(i, "cctv_interior");
  140. CCTVInfo[id][cctv_Faction] = cache_get_field_content_int(i, "cctv_faction");
  141.  
  142. CCTVInfo[id][cctv_Object] = CreateDynamicObject(1886, CCTVInfo[id][cctv_X], CCTVInfo[id][cctv_Y], CCTVInfo[id][cctv_Z], CCTVInfo[id][cctv_rotX], CCTVInfo[id][cctv_rotY], CCTVInfo[id][cctv_rotZ], CCTVInfo[id][cctv_VW]);
  143.  
  144. Iter_Add(CCTVIter, id);
  145. }
  146. }
  147. }
  148. printf("[OnLoadCCTVs] They were loaded %d CCTV.", Iter_Count(CCTVIter));
  149. return 1;
  150. }
  151.  
  152. OnCCTVCreated(id); public OnCCTVCreated(id)
  153. {
  154. CCTVInfo[id][ID] = cache_insert_id();
  155. return SaveCCTV(id);
  156. }
  157.  
  158. SaveCCTV(id)
  159. {
  160. new query[512];
  161. mysql_format(handle_mysql, query, sizeof query, "UPDATE `cctv` SET `cctv_name` = '%s', `cctv_faction` = '%d', `cctv_x` = '%f', `cctv_y` = '%f', `cctv_z` = '%f', `cctv_rot_x` = '%f', `cctv_rot_y` = '%f', `cctv_rot_z` = '%f', `cctv_vw` = '%d', `cctv_interior` = '%d' WHERE `ID` = '%d'",
  162. CCTVInfo[id][cctv_Name],
  163. CCTVInfo[id][cctv_Faction],
  164. CCTVInfo[id][cctv_X],
  165. CCTVInfo[id][cctv_Y],
  166. CCTVInfo[id][cctv_Z],
  167. CCTVInfo[id][cctv_rotX],
  168. CCTVInfo[id][cctv_rotY],
  169. CCTVInfo[id][cctv_rotZ],
  170. CCTVInfo[id][cctv_VW],
  171. CCTVInfo[id][cctv_Interior],
  172. CCTVInfo[id][ID]);
  173. mysql_query(handle_mysql, query);
  174. return 1;
  175. }
  176.  
  177. CreateCCTV(playerid, name[], factionid)
  178. {
  179. new id = Iter_Free(CCTVIter);
  180. if(id != -1)
  181. {
  182. new
  183. Float: x, Float: y, Float: z;
  184. GetPlayerPos(playerid, x, y, z);
  185.  
  186. CCTVInfo[id][cctv_X] = x;
  187. CCTVInfo[id][cctv_Y] = y;
  188. CCTVInfo[id][cctv_Z] = z;
  189.  
  190. CCTVInfo[id][cctv_rotX] = 0.0;
  191. CCTVInfo[id][cctv_rotY] = 0.0;
  192. CCTVInfo[id][cctv_rotZ] = 0.0;
  193.  
  194. CCTVInfo[id][cctv_Faction] = factionid;
  195.  
  196. CCTVInfo[id][cctv_VW] = GetPlayerVirtualWorld(playerid);
  197. CCTVInfo[id][cctv_Interior] = GetPlayerInterior(playerid);
  198. strcpy(CCTVInfo[id][cctv_Name], name, MAX_CCTV_NAME);
  199.  
  200. CCTVInfo[id][cctv_Object] = CreateDynamicObject(1886, CCTVInfo[id][cctv_X], CCTVInfo[id][cctv_Y], CCTVInfo[id][cctv_Z], CCTVInfo[id][cctv_rotX], CCTVInfo[id][cctv_rotY], CCTVInfo[id][cctv_rotZ], CCTVInfo[id][cctv_VW]);
  201.  
  202. Iter_Add(CCTVIter, id);
  203. mysql_tquery(handle_mysql, "INSERT INTO `cctv` (`cctv_x`) VALUES (0)", "OnCCTVCreated", "d", id);
  204. }
  205. return id;
  206. }
  207.  
  208. DeleteCCTV(playerid, id)
  209. {
  210. if(!Iter_Contains(CCTVIter, id)) return SendClientMessage(playerid, 0xFF6347FF, "The ID of the typed CCTV is nonexistent. (Use Server ID)");
  211.  
  212. new
  213. query[128], str[128];
  214. mysql_format(handle_mysql, query, sizeof query, "DELETE FROM `cctv` WHERE `ID` = '%d'", CCTVInfo[id][ID]);
  215. mysql_query(handle_mysql, query);
  216.  
  217. format(str, sizeof str, "AdmCmd: CCTV (ServerID: #%d - DatabaseID: #%d) successfully deleted.", id, CCTVInfo[id][ID]);
  218. SendClientMessage(playerid, 0xFF6347FF, str);
  219.  
  220. CCTVInfo[id][cctv_X] = CCTVInfo[id][cctv_Y] = CCTVInfo[id][cctv_Z] =
  221. CCTVInfo[id][cctv_rotX] = CCTVInfo[id][cctv_rotY] = CCTVInfo[id][cctv_rotZ] = 0.0;
  222.  
  223. CCTVInfo[id][cctv_VW] = CCTVInfo[id][cctv_Interior] =
  224. CCTVInfo[id][cctv_Faction] = CCTVInfo[id][ID] = -1;
  225.  
  226. Iter_Remove(CCTVIter, id);
  227. return 1;
  228. }
  229.  
  230. EditCCTV(playerid, id)
  231. {
  232. if(!Iter_Contains(CCTVIter, id)) return SendClientMessage(playerid, 0xFF6347FF, "The ID of the typed CCTV is nonexistent. (Use Server ID)");
  233. if(CCTV_inEditing[playerid]) return SendClientMessage(playerid, 0xFF6347FF, "You're already changing the position of a CCTV.");
  234. CCTV_inEditing[playerid] = 1;
  235. CCTV_ID[playerid] = id;
  236. EditDynamicObject(playerid, CCTVInfo[id][cctv_Object]);
  237.  
  238. new str[128];
  239. format(str, sizeof str, "AdmCmd: You are editing the position of CCTV: Server ID (#%d) - Database ID: (#%d)", id, CCTVInfo[id][ID]);
  240. SendClientMessage(playerid, 0xFF6347FF, str);
  241. SendClientMessage(playerid, 0xFF6347FF, "[!] You can complete the editing by pressing the FLOPPY, or cancel by pressing ESC.");
  242. return 1;
  243. }
  244.  
  245. CancelEditCCTV(playerid, id)
  246. {
  247. CCTV_inEditing[playerid] = 0;
  248. CCTV_ID[playerid] = -1;
  249. SetDynamicObjectPos(CCTVInfo[id][cctv_Object], CCTVInfo[id][cctv_X], CCTVInfo[id][cctv_Y], CCTVInfo[id][cctv_Z]);
  250. SetDynamicObjectRot(CCTVInfo[id][cctv_Object], CCTVInfo[id][cctv_rotX], CCTVInfo[id][cctv_rotY], CCTVInfo[id][cctv_rotZ]);
  251. return 1;
  252. }
  253.  
  254. ChangeCCTVName(playerid, id, name[])
  255. {
  256. if(!Iter_Contains(CCTVIter, id)) return SendClientMessage(playerid, 0xFF6347FF, "The ID of the typed CCTV is nonexistent. (Use Server ID)");
  257. new str[128];
  258. strcpy(CCTVInfo[id][cctv_Name], name, MAX_CCTV_NAME);
  259. format(str, sizeof str, "AdmCmd: CCTV (#%d) renamed: %s.", id, name);
  260. SendClientMessage(playerid, 0xFF6347FF, str);
  261. return 1;
  262. }
  263.  
  264. ChangeCCTVFaction(playerid, id, factionid)
  265. {
  266. if(!Iter_Contains(CCTVIter, id)) return SendClientMessage(playerid, 0xFF6347FF, "The ID of the typed CCTV is nonexistent. (Use Server ID)");
  267. new str[128];
  268. format(str, sizeof str, "AdmCmd: Faction of CCTV (#%d) modified faction ID #%d.", id, factionid);
  269. SendClientMessage(playerid, 0xFF6347FF, str);
  270. CCTVInfo[id][cctv_Faction] = factionid;
  271. return 1;
  272. }
  273.  
  274. MoveCCTV(playerid, id)
  275. {
  276. if(!Iter_Contains(CCTVIter, id)) return SendClientMessage(playerid, 0xFF6347FF, "The ID of the typed CCTV is nonexistent. (Use Server ID)");
  277. new
  278. Float: x, Float: y, Float: z, str[128];
  279. GetPlayerPos(playerid, x, y, z);
  280.  
  281. CCTVInfo[id][cctv_X] = x;
  282. CCTVInfo[id][cctv_Y] = y + 0.5;
  283. CCTVInfo[id][cctv_Z] = z;
  284.  
  285. CCTVInfo[id][cctv_rotX] = 0.0;
  286. CCTVInfo[id][cctv_rotY] = 0.0;
  287. CCTVInfo[id][cctv_rotZ] = 0.0;
  288.  
  289. CCTVInfo[id][cctv_VW] = GetPlayerVirtualWorld(playerid);
  290. CCTVInfo[id][cctv_Interior] = GetPlayerInterior(playerid);
  291. format(str, sizeof str, "AdmCmd: CCTV (#%d) moved to your current location.", id);
  292. SendClientMessage(playerid, 0xFF6347FF, str);
  293.  
  294. SetDynamicObjectPos(CCTVInfo[id][cctv_Object], CCTVInfo[id][cctv_X], CCTVInfo[id][cctv_Y], CCTVInfo[id][cctv_Z]);
  295. SetDynamicObjectRot(CCTVInfo[id][cctv_Object], CCTVInfo[id][cctv_rotX], CCTVInfo[id][cctv_rotY], CCTVInfo[id][cctv_rotZ]);
  296.  
  297. SaveCCTV(id);
  298. return 1;
  299. }
  300.  
  301. ShowPlayerCCTVMenu(playerid)
  302. {
  303. new
  304. str_long[2048], str[MAX_CCTV_NAME];
  305. foreach(new i : CCTVIter)
  306. {
  307. //if(PLAYER FACTION ID == CCTVInfo[id][cctv_Faction])
  308. format(str, sizeof str, "%s\n", CCTVInfo[i][cctv_Name]);
  309. strcat(str_long, str);
  310. }
  311. Dialog_Show(playerid, DIALOG_SHOW_CCTV, DIALOG_STYLE_LIST, "CCTV", str_long, "Show", "<<");
  312. return 1;
  313. }
  314.  
  315. PlayerViewCCTV(playerid, id)
  316. {
  317. new str[128],
  318. Float: x, Float: y, Float: z, Float: angle;
  319. inCCTV[playerid] = 1;
  320.  
  321. GetPlayerPos(playerid, x, y, z);
  322. CCTV_oldSkin[playerid] = GetPlayerSkin(playerid);
  323.  
  324. CCTV_oldX[playerid] = x;
  325. CCTV_oldY[playerid] = y;
  326. CCTV_oldZ[playerid] = z;
  327. CCTV_oldAngle[playerid] = angle;
  328.  
  329. SetPlayerPos(playerid, CCTVInfo[id][cctv_X], CCTVInfo[id][cctv_Y], CCTVInfo[id][cctv_Z]);
  330. SetPlayerVirtualWorld(playerid, CCTVInfo[id][cctv_VW]);
  331. SetPlayerInterior(playerid, CCTVInfo[id][cctv_Interior]);
  332.  
  333. TogglePlayerSpectating(playerid, 1);
  334. AttachCameraToDynamicObject(playerid, CCTVInfo[id][cctv_Object]);
  335.  
  336. format(str, sizeof str, "You are viewing this CCTV %s.", CCTVInfo[id][cctv_Name]);
  337. SendClientMessage(playerid, 0xFF6347FF, str);
  338. SendClientMessage(playerid, 0xFF6347FF, "[!] To end the digital vision /cctvoff.");
  339. return 1;
  340. }
  341.  
  342. PlayerCancelCCTV(playerid)
  343. {
  344. TogglePlayerSpectating(playerid, 0);
  345. SetPlayerPos(playerid, CCTV_oldX[playerid], CCTV_oldY[playerid], CCTV_oldZ[playerid]);
  346. SetPlayerFacingAngle(playerid, CCTV_oldAngle[playerid]);
  347. SetPlayerVirtualWorld(playerid, CCTV_oldVW[playerid]);
  348. SetPlayerInterior(playerid, CCTV_oldInterior[playerid]);
  349. SetPlayerSkin(playerid, CCTV_oldSkin[playerid]);
  350.  
  351. CCTV_oldX[playerid] = CCTV_oldY[playerid] = CCTV_oldZ[playerid] = 0.0;
  352. CCTV_oldVW[playerid] = CCTV_oldInterior[playerid] = inCCTV[playerid] = 0;
  353. CCTV_oldSkin[playerid] = -1;
  354. return 1;
  355. }
  356.  
  357. Dialog:DIALOG_SHOW_CCTV(playerid, response, lisitem, inputtext[])
  358. {
  359. if(!response) return 1;
  360. PlayerViewCCTV(playerid, lisitem);
  361. return 1;
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement