Advertisement
Guest User

Camera Editor.

a guest
Jan 21st, 2015
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.67 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3.  
  4. //------------------------------------------------------------------------------
  5.  
  6. #define MOVE_SPEED 100.0
  7. #define ACCEL_RATE 0.03
  8. #define CAMERA_MODE_NONE 0
  9. #define CAMERA_MODE_FLY 1
  10. #define MOVE_FORWARD 1
  11. #define MOVE_BACK 2
  12. #define MOVE_LEFT 3
  13. #define MOVE_RIGHT 4
  14. #define MOVE_FORWARD_LEFT 5
  15. #define MOVE_FORWARD_RIGHT 6
  16. #define MOVE_BACK_LEFT 7
  17. #define MOVE_BACK_RIGHT 8
  18.  
  19. //------------------------------------------------------------------------------
  20.  
  21. #define DIALOG_FILENAME 2000
  22. #define DIALOG_LIST 2001
  23. #define DIALOG_ROT 2002
  24. #define DIALOG_MOVE 2003
  25. #define DIALOG_SALVARE 2004
  26.  
  27. //------------------------------------------------------------------------------
  28.  
  29. enum noclipenum
  30. {
  31. cameramode,
  32. flyobject,
  33. mode,
  34. lrold,
  35. udold,
  36. lastmove,
  37. Float:accelmul
  38. }
  39.  
  40. //------------------------------------------------------------------------------
  41.  
  42. enum cInfo
  43. {
  44. Float:cStartX,
  45. Float:cStartY,
  46. Float:cStartZ,
  47. Float:cEndX,
  48. Float:cEndY,
  49. Float:cEndZ,
  50. Float:cStartLookX,
  51. Float:cStartLookY,
  52. Float:cStartLookZ,
  53. Float:cEndLookX,
  54. Float:cEndLookY,
  55. Float:cEndLookZ,
  56. MoveSpeed,
  57. RotSpeed,
  58. cName[32]
  59. }
  60.  
  61. //------------------------------------------------------------------------------
  62.  
  63. new noclipdata[MAX_PLAYERS][noclipenum];
  64. new Position[MAX_PLAYERS][cInfo];
  65. new Start[MAX_PLAYERS];
  66.  
  67. //------------------------------------------------------------------------------
  68.  
  69. CMD:cam(playerid, params[])
  70. {
  71. if(GetPVarType(playerid, "FlyMode")) CancelFlyMode(playerid);
  72. else FlyMode(playerid);
  73. return 1;
  74. }
  75.  
  76. //------------------------------------------------------------------------------
  77.  
  78. CMD:camera(playerid, params[])
  79. {
  80. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  81. return 1;
  82. }
  83.  
  84. //------------------------------------------------------------------------------
  85.  
  86. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  87. {
  88. new string[200];
  89. if(dialogid == DIALOG_LIST)
  90. {
  91. if(response)
  92. {
  93. if(listitem == 0)
  94. {
  95. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}Press {FF0000}'LMB' {FFFFFF}and select your start position.");
  96. Start[playerid] = 1;
  97. }
  98. if(listitem == 1)
  99. {
  100. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}Press {FF0000}'LMB' {FFFFFF}and select your finish position.");
  101. Start[playerid] = 2;
  102. }
  103. if(listitem == 2)
  104. {
  105. format(string, sizeof(string), "{FFFFFF}Select your speed rotation.\n\nCurrent Speed: {FF0000}%d\n\n{FF0000}* NOTE: {FFFFFF}1000 miliseconds = 1 seconds.", Position[playerid][RotSpeed]);
  106. ShowPlayerDialog(playerid, DIALOG_ROT, DIALOG_STYLE_INPUT, "Rotation speed", string, "Continue", "Exit");
  107. }
  108. if(listitem == 3)
  109. {
  110. format(string, sizeof(string), "{FFFFFF}Select your moving speed.\n\nCurrent Speed: {FF0000}%d\n\n{FF0000}* NOTE: {FFFFFF}1000 miliseconds = 1 seconds.", Position[playerid][MoveSpeed]);
  111. ShowPlayerDialog(playerid, DIALOG_MOVE, DIALOG_STYLE_INPUT, "Moving Speed", string, "Continue", "Exit");
  112. }
  113. if(listitem == 4)
  114. {
  115. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}You started preview.");
  116. SetTimerEx("Menu", Position[playerid][MoveSpeed], false, "i", playerid);
  117. DestroyObject(noclipdata[playerid][flyobject]);
  118. SetCameraBehindPlayer(playerid);
  119. InterpolateCameraPos(playerid, Position[playerid][cStartX], Position[playerid][cStartY], Position[playerid][cStartZ], Position[playerid][cEndX], Position[playerid][cEndY], Position[playerid][cEndZ], Position[playerid][MoveSpeed]);
  120. InterpolateCameraLookAt(playerid, Position[playerid][cStartLookX], Position[playerid][cStartLookY], Position[playerid][cStartLookZ], Position[playerid][cEndLookX], Position[playerid][cEndLookY], Position[playerid][cEndLookZ], Position[playerid][RotSpeed]);
  121. }
  122. if(listitem == 5)
  123. {
  124. SendClientMessage(playerid, -1, "{FF0000}[SAVE]: {FFFFFF}Do you want to save this project?");
  125. ShowPlayerDialog(playerid, DIALOG_SALVARE, DIALOG_STYLE_MSGBOX, "Save", "Do you want to save this project?", "Yes", "No");
  126. }
  127. }
  128. }
  129. if(dialogid == DIALOG_ROT)
  130. {
  131. if(response)
  132. {
  133. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}You've selected your Rotation Speed.");
  134. Position[playerid][RotSpeed] = strval(inputtext);
  135. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  136. }
  137. }
  138. if(dialogid == DIALOG_MOVE)
  139. {
  140. if(response)
  141. {
  142. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}You've selected your Moving Speed..");
  143. Position[playerid][MoveSpeed] = strval(inputtext);
  144. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  145. }
  146. }
  147. if(dialogid == DIALOG_SALVARE)
  148. {
  149. if(response)
  150. {
  151. new movestring[1000], rotstring[1000];
  152. format(movestring, sizeof(movestring), "InterpolateCameraPos(playerid, %f, %f, %f, %f, %f, %f, %d);\r\n", Position[playerid][cStartX], Position[playerid][cStartY], Position[playerid][cStartZ], Position[playerid][cEndX], Position[playerid][cEndY], Position[playerid][cEndZ], Position[playerid][MoveSpeed]);
  153. format(rotstring, sizeof(rotstring), "InterpolateCameraLookAt(playerid, %f, %f, %f, %f, %f, %f, %d);", Position[playerid][cStartLookX], Position[playerid][cStartLookY], Position[playerid][cStartLookZ], Position[playerid][cEndLookX], Position[playerid][cEndLookY], Position[playerid][cEndLookZ], Position[playerid][RotSpeed]);
  154. new File:file = fopen("camera.txt");
  155. fwrite(file, movestring);
  156. fwrite(file, rotstring);
  157. fclose(file);
  158. }
  159. else
  160. {
  161. SendClientMessage(playerid, -1, "{FF0000}[PROJECT]: {FFFFFF}You've exited your project, and it didn't been saved.");
  162. Start[playerid] = 0;
  163. Position[playerid][cStartX] = 0;
  164. Position[playerid][cStartY] = 0;
  165. Position[playerid][cStartZ] = 0;
  166. Position[playerid][cEndX] = 0;
  167. Position[playerid][cEndY] = 0;
  168. Position[playerid][cEndZ] = 0;
  169. Position[playerid][cStartLookX] = 0;
  170. Position[playerid][cStartLookY] = 0;
  171. Position[playerid][cStartLookZ] = 0;
  172. Position[playerid][cEndLookX] = 0;
  173. Position[playerid][cEndLookY] = 0;
  174. Position[playerid][cEndLookZ] = 0;
  175. Position[playerid][MoveSpeed] = 0;
  176. Position[playerid][RotSpeed] = 0;
  177. Position[playerid][cName] = 0;
  178. }
  179. }
  180. return 1;
  181. }
  182.  
  183. //------------------------------------------------------------------------------
  184.  
  185. forward Menu(playerid);
  186. public Menu(playerid)
  187. {
  188. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  189. FlyMode(playerid);
  190. return 1;
  191. }
  192.  
  193. //------------------------------------------------------------------------------
  194.  
  195. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  196. {
  197. new Float:X, Float:Y, Float:Z;
  198. GetPlayerPos(playerid, X, Y, Z);
  199. if(newkeys && KEY_FIRE)
  200. {
  201. if(Start[playerid] == 1)
  202. {
  203. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}This it's your Start's position.");
  204. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  205. Position[playerid][cStartX] = X;
  206. Position[playerid][cStartY] = Y;
  207. Position[playerid][cStartZ] = Z;
  208. Position[playerid][cStartLookX] = X;
  209. Position[playerid][cStartLookY] = Y;
  210. Position[playerid][cStartLookZ] = Z;
  211. }
  212. if(Start[playerid] == 2)
  213. {
  214. SendClientMessage(playerid, -1, "{FF0000}[CAMERA]: {FFFFFF}This it's your End's position.");
  215. ShowPlayerDialog(playerid, DIALOG_LIST, DIALOG_STYLE_LIST, "Options", "{FFFFFF}Start Position\nEnd Position\nRotation Speed\nMove Speed\nPreview\nSave", "Continue", "Exit");
  216. Position[playerid][cEndX] = X;
  217. Position[playerid][cEndY] = Y;
  218. Position[playerid][cEndZ] = Z;
  219. Position[playerid][cEndLookX] = X;
  220. Position[playerid][cEndLookY] = Y;
  221. Position[playerid][cEndLookZ] = Z;
  222. Start[playerid] = 0;
  223. }
  224. }
  225. return 1;
  226. }
  227.  
  228. //------------------------------------------------------------------------------
  229.  
  230. public OnFilterScriptExit()
  231. {
  232. for(new x; x < MAX_PLAYERS; x++)
  233. {
  234. if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
  235. }
  236. return 1;
  237. }
  238.  
  239. //------------------------------------------------------------------------------
  240.  
  241. public OnPlayerConnect(playerid)
  242. {
  243. noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  244. noclipdata[playerid][lrold] = 0;
  245. noclipdata[playerid][udold] = 0;
  246. noclipdata[playerid][mode] = 0;
  247. noclipdata[playerid][lastmove] = 0;
  248. noclipdata[playerid][accelmul] = 0.0;
  249. return 1;
  250. }
  251.  
  252. //------------------------------------------------------------------------------
  253.  
  254. public OnPlayerUpdate(playerid)
  255. {
  256. if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  257. {
  258. new keys,ud,lr;
  259. GetPlayerKeys(playerid,keys,ud,lr);
  260.  
  261. if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  262. {
  263. MoveCamera(playerid);
  264. }
  265. if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  266. {
  267. if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
  268. {
  269. StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  270. noclipdata[playerid][mode] = 0;
  271. noclipdata[playerid][accelmul] = 0.0;
  272. }
  273. else
  274. {
  275. noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  276. MoveCamera(playerid);
  277. }
  278. }
  279. noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
  280. return 0;
  281. }
  282. return 1;
  283. }
  284.  
  285. //------------------------------------------------------------------------------
  286.  
  287. public OnFilterScriptInit()
  288. {
  289. print("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *");
  290. print("* * * * * * * * * * * * H-CAMERA EDITOR * * * * * * * * * * * * * * *");
  291. print("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *");
  292. return 1;
  293. }
  294.  
  295. //------------------------------------------------------------------------------
  296.  
  297. stock GetMoveDirectionFromKeys(ud, lr)
  298. {
  299. new direction = 0;
  300. if(lr < 0)
  301. {
  302. if(ud < 0) direction = MOVE_FORWARD_LEFT;
  303. else if(ud > 0) direction = MOVE_BACK_LEFT;
  304. else direction = MOVE_LEFT;
  305. }
  306. else if(lr > 0)
  307. {
  308. if(ud < 0) direction = MOVE_FORWARD_RIGHT;
  309. else if(ud > 0) direction = MOVE_BACK_RIGHT;
  310. else direction = MOVE_RIGHT;
  311. }
  312. else if(ud < 0) direction = MOVE_FORWARD;
  313. else if(ud > 0) direction = MOVE_BACK;
  314. return direction;
  315. }
  316.  
  317. //------------------------------------------------------------------------------
  318.  
  319. stock MoveCamera(playerid)
  320. {
  321. new Float:FV[3], Float:CP[3];
  322. GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  323. GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  324. if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  325. new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  326. new Float:X, Float:Y, Float:Z;
  327. GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  328. MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  329. noclipdata[playerid][lastmove] = GetTickCount();
  330. return 1;
  331. }
  332.  
  333. //------------------------------------------------------------------------------
  334.  
  335. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  336. {
  337. #define OFFSET_X (FV[0]*6000.0)
  338. #define OFFSET_Y (FV[1]*6000.0)
  339. #define OFFSET_Z (FV[2]*6000.0)
  340. switch(move_mode)
  341. {
  342. case MOVE_FORWARD:
  343. {
  344. X = CP[0]+OFFSET_X;
  345. Y = CP[1]+OFFSET_Y;
  346. Z = CP[2]+OFFSET_Z;
  347. }
  348. case MOVE_BACK:
  349. {
  350. X = CP[0]-OFFSET_X;
  351. Y = CP[1]-OFFSET_Y;
  352. Z = CP[2]-OFFSET_Z;
  353. }
  354. case MOVE_LEFT:
  355. {
  356. X = CP[0]-OFFSET_Y;
  357. Y = CP[1]+OFFSET_X;
  358. Z = CP[2];
  359. }
  360. case MOVE_RIGHT:
  361. {
  362. X = CP[0]+OFFSET_Y;
  363. Y = CP[1]-OFFSET_X;
  364. Z = CP[2];
  365. }
  366. case MOVE_BACK_LEFT:
  367. {
  368. X = CP[0]+(-OFFSET_X - OFFSET_Y);
  369. Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  370. Z = CP[2]-OFFSET_Z;
  371. }
  372. case MOVE_BACK_RIGHT:
  373. {
  374. X = CP[0]+(-OFFSET_X + OFFSET_Y);
  375. Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  376. Z = CP[2]-OFFSET_Z;
  377. }
  378. case MOVE_FORWARD_LEFT:
  379. {
  380. X = CP[0]+(OFFSET_X - OFFSET_Y);
  381. Y = CP[1]+(OFFSET_Y + OFFSET_X);
  382. Z = CP[2]+OFFSET_Z;
  383. }
  384. case MOVE_FORWARD_RIGHT:
  385. {
  386. X = CP[0]+(OFFSET_X + OFFSET_Y);
  387. Y = CP[1]+(OFFSET_Y - OFFSET_X);
  388. Z = CP[2]+OFFSET_Z;
  389. }
  390. }
  391. }
  392.  
  393. //------------------------------------------------------------------------------
  394.  
  395. stock CancelFlyMode(playerid)
  396. {
  397. DeletePVar(playerid, "FlyMode");
  398. CancelEdit(playerid);
  399. TogglePlayerSpectating(playerid, false);
  400. DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  401. noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  402. return 1;
  403. }
  404.  
  405. //------------------------------------------------------------------------------
  406.  
  407. stock FlyMode(playerid)
  408. {
  409. new Float:X, Float:Y, Float:Z;
  410. GetPlayerPos(playerid, X, Y, Z);
  411. noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  412. TogglePlayerSpectating(playerid, true);
  413. AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  414. SetPVarInt(playerid, "FlyMode", 1);
  415. noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  416. return 1;
  417. }
  418.  
  419. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement