Advertisement
Guest User

Untitled

a guest
Mar 9th, 2011
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.57 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define SPEED_ROTATE_LEFTRIGHT_SLOW 0.5
  4. #define SPEED_ROTATE_LEFTRIGHT_FAST 2.0
  5.  
  6. #define SPEED_ROTATE_UPDOWN_SLOW 0.05
  7. #define SPEED_ROTATE_UPDOWN_FAST 0.15
  8.  
  9. #define SPEED_MOVE_UPDOWN_SLOW 0.25
  10. #define SPEED_MOVE_UPDOWN_FAST 1.0
  11.  
  12. #define SPEED_MOVE_FORWARDBACKWARD_SLOW 0.4
  13. #define SPEED_MOVE_FORWARDBACKWARD_FAST 2.0
  14.  
  15. #define SPEED_MOVE_LEFTRIGHT_SLOW 0.4
  16. #define SPEED_MOVE_LEFTRIGHT_FAST 2.0
  17.  
  18.  
  19.  
  20. #define ScriptVersion 2.0
  21.  
  22. //Cameradefines:
  23. new Float:PCP[MAX_PLAYERS][3]; // PCP = PlayerCameraPosition
  24. new Float:PCL[MAX_PLAYERS][3]; // PCL = PlayerCameraLookat
  25. new Float:PCA[MAX_PLAYERS]; // PCA = PlayerCameraAngle
  26.  
  27. //Playerdefines:
  28. new IsSpawned[MAX_PLAYERS];
  29. new IsInCameraMode[MAX_PLAYERS];
  30. new KeyTimer[MAX_PLAYERS];
  31. new KeyState[MAX_PLAYERS];
  32. new CameraLocked[MAX_PLAYERS];
  33. new FollowOn[MAX_PLAYERS];
  34.  
  35. //V2:
  36. new Float:SavedPCP[MAX_PLAYERS][3][3];
  37. new Float:SavedPCL[MAX_PLAYERS][3][3];
  38. new Float:SavedPCA[MAX_PLAYERS][3];
  39. new SlotUsed[MAX_PLAYERS][3];
  40.  
  41. public OnFilterScriptInit()
  42. {
  43. print("\n\n ----------------------------------------------------------");
  44. printf("| Flying Camera Filterscript [V%.1f] by Sandra loaded! |", ScriptVersion);
  45. print(" ----------------------------------------------------------\n\n");
  46. return 1;
  47. }
  48.  
  49. public OnFilterScriptExit()
  50. {
  51.  
  52. return 1;
  53. }
  54.  
  55. public OnPlayerConnect(playerid)
  56. {
  57. IsSpawned[playerid] = 0;
  58. IsInCameraMode[playerid] = 0;
  59. KeyState[playerid] = 0;
  60. CameraLocked[playerid] = 0;
  61. FollowOn[playerid] = 0;
  62. return 1;
  63. }
  64.  
  65. public OnPlayerDisconnect(playerid, reason)
  66. {
  67. if(IsInCameraMode[playerid] == 1)
  68. {
  69. KillTimer(KeyTimer[playerid]);
  70. IsInCameraMode[playerid] = 0;
  71. }
  72. for(new i=1; i<4; i++)
  73. {
  74. SavedPCP[playerid][i][0] = 0.0;
  75. SavedPCP[playerid][i][1] = 0.0;
  76. SavedPCP[playerid][i][2] = 0.0;
  77. SavedPCL[playerid][i][0] = 0.0;
  78. SavedPCL[playerid][i][1] = 0.0;
  79. SavedPCL[playerid][i][2] = 0.0;
  80. SavedPCA[playerid][i] = 0.0;
  81. }
  82. return 1;
  83. }
  84.  
  85. public OnPlayerSpawn(playerid)
  86. {
  87. IsSpawned[playerid] = 1;
  88. return 1;
  89. }
  90.  
  91. public OnPlayerDeath(playerid, killerid, reason)
  92. {
  93. IsSpawned[playerid] = 0;
  94. return 1;
  95. }
  96.  
  97. public OnPlayerCommandText(playerid, cmdtext[])
  98. {
  99. new cmd[256], idx, tmp[256];
  100. cmd = strtok(cmdtext, idx);
  101. if (strcmp("/spawn", cmd, true) == 0)
  102. {
  103. if(!IsPlayerAdmin(playerid)) return 0;
  104. IsSpawned[playerid] = 1;
  105. return 1;
  106. }
  107. if (strcmp("/camerahelp", cmd, true) == 0)
  108. {
  109. if(!IsPlayerAdmin(playerid)) return 0;
  110. SendClientMessage(playerid, 0xFA8072AA, "Flying Camera Help:");
  111. SendClientMessage(playerid, 0xFA8072AA, "*/fc* Start Flying Camera Mode");
  112. SendClientMessage(playerid, 0xFA8072AA, "*Arrow-keys*: Move camera forward/backward/left/right");
  113. SendClientMessage(playerid, 0xFA8072AA, "*Walk-key + Arrow-keys*: *Move camera up/down");
  114. SendClientMessage(playerid, 0xFA8072AA, "*Crouch-key + Arrow-keys*: *Rotate camera up/down/left/right");
  115. SendClientMessage(playerid, 0xFA8072AA, "*Sprint-key*: Speeds up every movement");
  116. SendClientMessage(playerid, 0xFA8072AA, "*/lock* Locks the camera and player is free to move.");
  117. SendClientMessage(playerid, 0xFA8072AA, "*/follow* Locks the camera and keeps looking at player.");
  118. SendClientMessage(playerid, 0xFA8072AA, "*/savecam [1-3]* */loadcam [1-3]*");
  119. return 1;
  120. }
  121. if (strcmp("/fc", cmd, true) == 0)
  122. {
  123. if(!IsPlayerAdmin(playerid)) return 0;
  124. if(IsSpawned[playerid] == 1)
  125. {
  126. if(IsInCameraMode[playerid] == 0)
  127. {
  128. TogglePlayerControllable(playerid, 0);
  129. CameraLocked[playerid] = 0;
  130. IsInCameraMode[playerid] = 1;
  131. FollowOn[playerid] = 0;
  132. GetPlayerPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  133. GetPlayerFacingAngle(playerid, PCA[playerid]);
  134. if(IsPlayerInAnyVehicle(playerid))
  135. {
  136. GetVehicleZAngle(GetPlayerVehicleID(playerid), PCA[playerid]);
  137. }
  138. PCL[playerid][0] = PCP[playerid][0];
  139. PCL[playerid][1] = PCP[playerid][1];
  140. PCL[playerid][2] = PCP[playerid][2];
  141. PCP[playerid][0] = PCP[playerid][0] - (5.0 * floatsin(-PCA[playerid], degrees));
  142. PCP[playerid][1] = PCP[playerid][1] - (5.0 * floatcos(-PCA[playerid], degrees));
  143. PCP[playerid][2] = PCP[playerid][2]+2.0;
  144. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  145. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  146. KeyTimer[playerid] = SetTimerEx("CheckKeyPress", 70, 1, "i", playerid);
  147. }
  148. else
  149. {
  150. TogglePlayerControllable(playerid, 1);
  151. KillTimer(KeyTimer[playerid]);
  152. IsInCameraMode[playerid] = 0;
  153. SetCameraBehindPlayer(playerid);
  154. }
  155. }
  156. else
  157. {
  158. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  159. }
  160. return 1;
  161. }
  162. if (strcmp("/lock", cmd, true) == 0)
  163. {
  164. if(!IsPlayerAdmin(playerid)) return 0;
  165. if(IsSpawned[playerid] == 1)
  166. {
  167. if(IsInCameraMode[playerid] == 1)
  168. {
  169. if(FollowOn[playerid] == 0)
  170. {
  171. if(CameraLocked[playerid] == 0)
  172. {
  173. CameraLocked[playerid] = 1;
  174. KillTimer(KeyTimer[playerid]);
  175. TogglePlayerControllable(playerid, 1);
  176. SendClientMessage(playerid, 0x00FF00AA, "Camera locked, player unlocked!");
  177. }
  178. else
  179. {
  180. CameraLocked[playerid] = 0;
  181. KeyTimer[playerid] = SetTimerEx("CheckKeyPress", 70, 1, "i", playerid);
  182. TogglePlayerControllable(playerid, 0);
  183. SendClientMessage(playerid, 0x00FF00AA, "Camera unlocked, player locked!");
  184. }
  185. }
  186. else
  187. {
  188. SendClientMessage(playerid, 0xFF0000AA, "Please turn the follow-mode off first! /follow");
  189. }
  190. }
  191. else
  192. {
  193. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  194. }
  195. }
  196. else
  197. {
  198. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  199. }
  200. return 1;
  201. }
  202.  
  203. if (strcmp("/follow", cmd, true) == 0)
  204. {
  205. if(!IsPlayerAdmin(playerid)) return 0;
  206. if(IsSpawned[playerid] == 1)
  207. {
  208. if(IsInCameraMode[playerid] == 1)
  209. {
  210. if(CameraLocked[playerid] == 0)
  211. {
  212. if(FollowOn[playerid] == 0)
  213. {
  214. FollowOn[playerid] = 1;
  215. TogglePlayerControllable(playerid, 1);
  216. KillTimer(KeyTimer[playerid]);
  217. KeyTimer[playerid] = SetTimerEx("FollowPlayer", 70, 1, "i", playerid);
  218. SendClientMessage(playerid, 0x00FF00AA, "Following player toggled on!");
  219. }
  220. else
  221. {
  222. FollowOn[playerid] = 0;
  223. TogglePlayerControllable(playerid, 0);
  224. KillTimer(KeyTimer[playerid]);
  225. KeyTimer[playerid] = SetTimerEx("CheckKeyPress", 70, 1, "i", playerid);
  226. SendClientMessage(playerid, 0x00FF00AA, "Following player toggled off!");
  227. }
  228. }
  229. else
  230. {
  231. SendClientMessage(playerid, 0xFF0000AA, "Please unlock the camera first! /lock");
  232. }
  233. }
  234. else
  235. {
  236. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  237. }
  238. }
  239. else
  240. {
  241. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  242. }
  243. return 1;
  244. }
  245.  
  246. if (strcmp("/savecamtofile", cmd, true) == 0 || strcmp("/sctf", cmd, true) == 0)
  247. {
  248. if(!IsPlayerAdmin(playerid)) return 0;
  249. if(IsPlayerAdmin(playerid))
  250. {
  251. if(IsSpawned[playerid] == 1)
  252. {
  253. if(IsInCameraMode[playerid] == 1)
  254. {
  255. new str[128];
  256. new File:file;
  257. if (!fexist("SavedCameraPositions.txt"))
  258. {
  259. file=fopen("SavedCameraPositions.txt",io_write);
  260. fclose(file);
  261. }
  262. file=fopen("SavedCameraPositions.txt",io_write);
  263. format(str, 128, "SetPlayerCameraPos(playerid, %.2f, %.2f, %.2f);", PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  264. fwrite(file,str);
  265. fwrite(file,"\r\n");
  266. format(str, 128, "SetPlayerCameraLookAt(playerid, %.2f, %.2f, %.2f);", PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  267. fwrite(file,str);
  268. fwrite(file,"\r\n");
  269. fwrite(file,"\r\n");
  270. fclose(file);
  271. SendClientMessage(playerid, 0x00FF00AA, "Cameraposition saved in SavedCameraPositions.txt!!");
  272. }
  273. else
  274. {
  275. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  276. }
  277. }
  278. else
  279. {
  280. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  281. }
  282. return 1;
  283. }
  284. }
  285. if (strcmp("/saveclassselection", cmd, true) == 0 || strcmp("/scs", cmd, true) == 0)
  286. {
  287. if(!IsPlayerAdmin(playerid)) return 0;
  288. if(IsPlayerAdmin(playerid))
  289. {
  290. if(IsSpawned[playerid] == 1)
  291. {
  292. if(IsInCameraMode[playerid] == 1)
  293. {
  294. new str[128];
  295. new File:file;
  296. if (!fexist("SavedClassSelections.txt"))
  297. {
  298. file=fopen("SavedClassSelections.txt",io_write);
  299. fclose(file);
  300. }
  301. file=fopen("SavedClassSelections.txt",io_write);
  302. new Float:X, Float:Y, Float:Z, Float:A, interior;
  303. GetPlayerPos(playerid, X, Y, Z);
  304. GetPlayerFacingAngle(playerid, A);
  305. interior = GetPlayerInterior(playerid);
  306.  
  307. fwrite(file,"public OnPlayerRequestClass(playerid, classid)");
  308. fwrite(file,"\r\n");
  309. fwrite(file,"{");
  310. fwrite(file,"\r\n");
  311.  
  312. format(str, 128, " SetPlayerInterior(playerid, %d);", interior);
  313. fwrite(file,str);
  314. fwrite(file,"\r\n");
  315.  
  316. format(str, 128, " SetPlayerPos(playerid, %.2f, %.2f, %.2f);", X, Y, Z);
  317. fwrite(file,str);
  318. fwrite(file,"\r\n");
  319.  
  320. format(str, 128, " SetPlayerFacingAngle(playerid, %.2f);", A);
  321. fwrite(file,str);
  322. fwrite(file,"\r\n");
  323.  
  324. format(str, 128, " SetPlayerCameraPos(playerid, %.2f, %.2f, %.2f);", PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  325. fwrite(file,str);
  326. fwrite(file,"\r\n");
  327.  
  328. format(str, 128, " SetPlayerCameraLookAt(playerid, %.2f, %.2f, %.2f);", PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  329. fwrite(file,str);
  330. fwrite(file,"\r\n");
  331. fwrite(file," return 1;");
  332. fwrite(file,"\r\n");
  333. fwrite(file,"}");
  334. fwrite(file,"\r\n");
  335. fwrite(file,"\r\n");
  336. fclose(file);
  337. SendClientMessage(playerid, 0x00FF00AA, "ClassSelection-screen saved in SavedClassSelections.txt!!");
  338. }
  339. else
  340. {
  341. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  342. }
  343. }
  344. else
  345. {
  346. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  347. }
  348. return 1;
  349. }
  350. }
  351.  
  352. if (strcmp("/savecam", cmd, true) == 0)
  353. {
  354. if(!IsPlayerAdmin(playerid)) return 0;
  355. if(IsSpawned[playerid] == 1)
  356. {
  357. if(IsInCameraMode[playerid] == 1)
  358. {
  359. tmp = strtok(cmdtext, idx);
  360. if(!strlen(tmp))
  361. {
  362. SendClientMessage(playerid, 0xFF0000AA, "[Error] Use: /savecam [1-3]");
  363. return 1;
  364. }
  365. new slot = strval(tmp);
  366. if(slot < 1 || slot > 3)
  367. {
  368. SendClientMessage(playerid, 0xFF0000AA, "[Error] Use: /savecam [1-3]");
  369. return 1;
  370. }
  371. new str[128];
  372. slot--;
  373. SavedPCP[playerid][slot][0] = PCP[playerid][0];
  374. SavedPCP[playerid][slot][1] = PCP[playerid][1];
  375. SavedPCP[playerid][slot][2] = PCP[playerid][2];
  376. SavedPCL[playerid][slot][0] = PCL[playerid][0];
  377. SavedPCL[playerid][slot][1] = PCL[playerid][1];
  378. SavedPCL[playerid][slot][2] = PCL[playerid][2];
  379. SavedPCA[playerid][slot] = PCA[playerid];
  380. SlotUsed[playerid][slot] = 1;
  381. slot++;
  382. format(str, 128, "CameraPosition saved into slot '%d'. Use \"/loadcam %d\" to go back to this cameraview", slot, slot);
  383. SendClientMessage(playerid, 0x00FF00AA, str);
  384. }
  385. else
  386. {
  387. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  388. }
  389. }
  390. else
  391. {
  392. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  393. }
  394. return 1;
  395. }
  396.  
  397. if (strcmp("/loadcam", cmd, true) == 0)
  398. {
  399. if(!IsPlayerAdmin(playerid)) return 0;
  400. if(IsSpawned[playerid] == 1)
  401. {
  402. if(IsInCameraMode[playerid] == 1)
  403. {
  404. tmp = strtok(cmdtext, idx);
  405. if(!strlen(tmp))
  406. {
  407. SendClientMessage(playerid, 0xFF0000AA, "[Error] Use: /loadcam [1-3]");
  408. return 1;
  409. }
  410. new slot = strval(tmp);
  411. if(slot < 1 || slot > 3)
  412. {
  413. SendClientMessage(playerid, 0xFF0000AA, "[Error] Use: /loadcam [1-3]");
  414. return 1;
  415. }
  416. slot--;
  417. if(SlotUsed[playerid][slot] == 0)
  418. {
  419. SendClientMessage(playerid, 0xFF0000AA, "[Error] This slot is empty!");
  420. return 1;
  421. }
  422. PCP[playerid][0] = SavedPCP[playerid][slot][0];
  423. PCP[playerid][1] = SavedPCP[playerid][slot][1];
  424. PCP[playerid][2] = SavedPCP[playerid][slot][2];
  425. PCL[playerid][0] = SavedPCL[playerid][slot][0];
  426. PCL[playerid][1] = SavedPCL[playerid][slot][1];
  427. PCL[playerid][2] = SavedPCL[playerid][slot][2];
  428. PCA[playerid] = SavedPCA[playerid][slot];
  429. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  430. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  431. }
  432. else
  433. {
  434. SendClientMessage(playerid, 0xFF0000AA, "You're not in the Flying Camera Mode!");
  435. }
  436. }
  437. else
  438. {
  439. SendClientMessage(playerid, 0xFF0000AA, "Please spawn first!");
  440. }
  441. return 1;
  442. }
  443. return 0;
  444. }
  445.  
  446. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  447. {
  448. if(newkeys == KEY_CROUCH)
  449. {
  450. KeyState[playerid] = 1;
  451. }
  452. else if(newkeys == KEY_SPRINT)
  453. {
  454. KeyState[playerid] = 2;
  455. }
  456. else if(newkeys == (KEY_CROUCH+KEY_SPRINT))
  457. {
  458. KeyState[playerid] = 3;
  459. }
  460. else if(newkeys == KEY_WALK)
  461. {
  462. KeyState[playerid] = 4;
  463. }
  464. else if(newkeys == (KEY_WALK+KEY_SPRINT))
  465. {
  466. KeyState[playerid] = 5;
  467. }
  468. else
  469. {
  470. KeyState[playerid] = 0;
  471. }
  472. return 1;
  473. }
  474.  
  475. forward CheckKeyPress(playerid);
  476. public CheckKeyPress(playerid)
  477. {
  478. new keys, updown, leftright;
  479. GetPlayerKeys(playerid, keys, updown, leftright);
  480.  
  481. //==================================================
  482. //ROTATING CAMERA
  483. //==================================================
  484. if(KeyState[playerid] == 1 || KeyState[playerid] == 3)
  485. {
  486. if(leftright == KEY_RIGHT)
  487. {
  488. if(KeyState[playerid] == 3)
  489. {
  490. PCA[playerid] = (PCA[playerid]-SPEED_ROTATE_LEFTRIGHT_FAST);
  491. }
  492. else
  493. {
  494. PCA[playerid] = (PCA[playerid]-SPEED_ROTATE_LEFTRIGHT_SLOW);
  495. }
  496. if(PCA[playerid] <= 0)
  497. {
  498. PCA[playerid] = (360-PCA[playerid]);
  499. }
  500. MovePlayerCamera(playerid);
  501. }
  502. if(leftright == KEY_LEFT)
  503. {
  504. if(KeyState[playerid] == 3)
  505. {
  506. PCA[playerid] = (PCA[playerid]+SPEED_ROTATE_LEFTRIGHT_FAST);
  507. }
  508. else
  509. {
  510. PCA[playerid] = (PCA[playerid]+SPEED_ROTATE_LEFTRIGHT_SLOW);
  511. }
  512. if(PCA[playerid] >= 360)
  513. {
  514. PCA[playerid] = (PCA[playerid]-360);
  515. }
  516. MovePlayerCamera(playerid);
  517. }
  518. if(updown == KEY_UP)
  519. {
  520. if(PCL[playerid][2] < (PCP[playerid][2]+5))
  521. {
  522. if(KeyState[playerid] == 3)
  523. {
  524. PCL[playerid][2] = PCL[playerid][2]+SPEED_ROTATE_UPDOWN_FAST;
  525. }
  526. else
  527. {
  528. PCL[playerid][2] = PCL[playerid][2]+SPEED_ROTATE_UPDOWN_SLOW;
  529. }
  530. }
  531. MovePlayerCamera(playerid);
  532. }
  533. if(updown == KEY_DOWN)
  534. {
  535. if(PCL[playerid][2] > (PCP[playerid][2]-5))
  536. {
  537. if(KeyState[playerid] == 3)
  538. {
  539. PCL[playerid][2] = PCL[playerid][2]-SPEED_ROTATE_UPDOWN_FAST;
  540. }
  541. else
  542. {
  543. PCL[playerid][2] = PCL[playerid][2]-SPEED_ROTATE_UPDOWN_SLOW;
  544. }
  545. }
  546. MovePlayerCamera(playerid);
  547. }
  548. }
  549.  
  550. //==================================================
  551. //MOVING CAMERA UP/DOWN
  552. //==================================================
  553. if(KeyState[playerid] == 4 || KeyState[playerid] == 5)
  554. {
  555. if(updown == KEY_UP)
  556. {
  557. if(KeyState[playerid] == 4) //Slow Up
  558. {
  559. PCP[playerid][2] = (PCP[playerid][2]+SPEED_MOVE_UPDOWN_SLOW);
  560. PCL[playerid][2] = (PCL[playerid][2]+SPEED_MOVE_UPDOWN_SLOW);
  561. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  562. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  563. }
  564. else if(KeyState[playerid] == 5) //Fast Up
  565. {
  566. PCP[playerid][2] = (PCP[playerid][2]+SPEED_MOVE_UPDOWN_FAST);
  567. PCL[playerid][2] = (PCL[playerid][2]+SPEED_MOVE_UPDOWN_FAST);
  568. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  569. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  570. }
  571. }
  572. if(updown == KEY_DOWN)
  573. {
  574. if(KeyState[playerid] == 4) //Slow Down
  575. {
  576. PCP[playerid][2] = (PCP[playerid][2]-SPEED_MOVE_UPDOWN_SLOW);
  577. PCL[playerid][2] = (PCL[playerid][2]-SPEED_MOVE_UPDOWN_SLOW);
  578. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  579. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  580. }
  581. else if(KeyState[playerid] == 5) //Fast Down
  582. {
  583. PCP[playerid][2] = (PCP[playerid][2]-SPEED_MOVE_UPDOWN_FAST);
  584. PCL[playerid][2] = (PCL[playerid][2]-SPEED_MOVE_UPDOWN_FAST);
  585. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  586. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  587. }
  588. }
  589. }
  590.  
  591.  
  592.  
  593. //==================================================
  594. //MOVING CAMERA
  595. //==================================================
  596. else if(KeyState[playerid] == 2 || KeyState[playerid] == 0)
  597. {
  598. if(leftright == KEY_RIGHT)
  599. {
  600. new Float:Angle;
  601. Angle = PCA[playerid];
  602. Angle -= 90.0;
  603. if(KeyState[playerid] == 2)
  604. {
  605.  
  606. PCP[playerid][0] = PCP[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  607. PCP[playerid][1] = PCP[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  608. PCL[playerid][0] = PCL[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  609. PCL[playerid][1] = PCL[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  610. }
  611. else
  612. {
  613. PCP[playerid][0] = PCP[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  614. PCP[playerid][1] = PCP[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  615. PCL[playerid][0] = PCL[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  616. PCL[playerid][1] = PCL[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  617. }
  618. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  619. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  620. }
  621. if(leftright == KEY_LEFT)
  622. {
  623. new Float:Angle;
  624. Angle = PCA[playerid];
  625. Angle += 90.0;
  626. if(KeyState[playerid] == 2)
  627. {
  628. PCP[playerid][0] = PCP[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  629. PCP[playerid][1] = PCP[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  630. PCL[playerid][0] = PCL[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  631. PCL[playerid][1] = PCL[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_FAST);
  632. }
  633. else
  634. {
  635. PCP[playerid][0] = PCP[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  636. PCP[playerid][1] = PCP[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  637. PCL[playerid][0] = PCL[playerid][0] + floatmul(floatsin(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  638. PCL[playerid][1] = PCL[playerid][1] + floatmul(floatcos(-Angle, degrees), SPEED_MOVE_LEFTRIGHT_SLOW);
  639. }
  640. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  641. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  642. }
  643.  
  644. if(updown == KEY_UP)
  645. {
  646. new Float:X, Float:Y, Float:Z;
  647. if(KeyState[playerid] == 2)
  648. {
  649. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], SPEED_MOVE_FORWARDBACKWARD_FAST, X, Y, Z);
  650. PCP[playerid][0] = X;
  651. PCP[playerid][1] = Y;
  652. PCP[playerid][2] = Z;
  653. X = 0.0; Y=0.0; Z=0.0;
  654. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], 5.0, X, Y, Z);
  655. PCL[playerid][0] = X;
  656. PCL[playerid][1] = Y;
  657. PCL[playerid][2] = Z;
  658. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  659. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  660. }
  661. else
  662. {
  663. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], SPEED_MOVE_FORWARDBACKWARD_SLOW, X, Y, Z);
  664. PCP[playerid][0] = X;
  665. PCP[playerid][1] = Y;
  666. PCP[playerid][2] = Z;
  667. X = 0.0; Y=0.0; Z=0.0;
  668. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], 5.0, X, Y, Z);
  669. PCL[playerid][0] = X;
  670. PCL[playerid][1] = Y;
  671. PCL[playerid][2] = Z;
  672. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  673. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  674. }
  675. }
  676.  
  677. if(updown == KEY_DOWN)
  678. {
  679. new Float:X, Float:Y, Float:Z;
  680. if(KeyState[playerid] == 2)
  681. {
  682. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], -SPEED_MOVE_FORWARDBACKWARD_FAST, X, Y, Z);
  683. PCP[playerid][0] = X;
  684. PCP[playerid][1] = Y;
  685. PCP[playerid][2] = Z;
  686. X = 0.0; Y=0.0; Z=0.0;
  687. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], 5.0, X, Y, Z);
  688. PCL[playerid][0] = X;
  689. PCL[playerid][1] = Y;
  690. PCL[playerid][2] = Z;
  691. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  692. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  693. }
  694. else
  695. {
  696. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], -SPEED_MOVE_FORWARDBACKWARD_SLOW, X, Y, Z);
  697. PCP[playerid][0] = X;
  698. PCP[playerid][1] = Y;
  699. PCP[playerid][2] = Z;
  700. X = 0.0; Y=0.0; Z=0.0;
  701. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PCL[playerid][0], PCL[playerid][1], PCL[playerid][2], 5.0, X, Y, Z);
  702. PCL[playerid][0] = X;
  703. PCL[playerid][1] = Y;
  704. PCL[playerid][2] = Z;
  705. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  706. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  707. }
  708. }
  709. }
  710. }
  711.  
  712. stock MovePlayerCamera(playerid)
  713. {
  714. PCL[playerid][0] = PCP[playerid][0] + (floatmul(5.0, floatsin(-PCA[playerid], degrees)));
  715. PCL[playerid][1] = PCP[playerid][1] + (floatmul(5.0, floatcos(-PCA[playerid], degrees)));
  716. SetPlayerCameraPos(playerid, PCP[playerid][0], PCP[playerid][1], PCP[playerid][2]);
  717. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  718. }
  719.  
  720. GetCoordsOnLine3D(Float:startX, Float:startY, Float:startZ, Float:endX, Float:endY, Float:endZ, Float:length, &Float:RX, &Float:RY, &Float:RZ) //Original function by Nubotron. Slightly edited by me.
  721. {
  722. RX = startX - endX;
  723. RY = startY - endY;
  724. RZ = startZ - endZ;
  725. new Float:sqrt = floatsqroot((RX * RX) + (RY * RY) + (RZ * RZ));
  726. if (sqrt < 0.01)
  727. sqrt = 0.01;
  728. RX = -length * (RX / sqrt) + startX;
  729. RY = -length * (RY / sqrt) + startY;
  730. RZ = -length * (RZ / sqrt) + startZ;
  731. }
  732.  
  733. stock Float:GetAngle(playerid, Float:x, Float:y) //Original function by Fallout. Edited by me.
  734. {
  735. new Float: Pa;
  736. Pa = floatabs(atan((y-PCP[playerid][1])/(x-PCP[playerid][0])));
  737. if (x <= PCP[playerid][0] && y >= PCP[playerid][1]) Pa = floatsub(180, Pa);
  738. else if (x < PCP[playerid][0] && y < PCP[playerid][1]) Pa = floatadd(Pa, 180);
  739. else if (x >= PCP[playerid][0] && y <= PCP[playerid][1]) Pa = floatsub(360.0, Pa);
  740. Pa = floatsub(Pa, 90.0);
  741. if (Pa >= 360.0) Pa = floatsub(Pa, 360.0);
  742. return Pa;
  743. }
  744.  
  745.  
  746. forward FollowPlayer(playerid);
  747. public FollowPlayer(playerid)
  748. {
  749. new Float:PX, Float:PY, Float:PZ;
  750. new Float:X, Float:Y, Float:Z;
  751. GetPlayerPos(playerid, PX, PY, PZ);
  752. GetCoordsOnLine3D(PCP[playerid][0], PCP[playerid][1], PCP[playerid][2], PX, PY, PZ, 5.0, X, Y, Z);
  753. PCL[playerid][0] = X;
  754. PCL[playerid][1] = Y;
  755. PCL[playerid][2] = Z;
  756. PCA[playerid] = GetAngle(playerid, PX, PY);
  757. SetPlayerCameraLookAt(playerid, PCL[playerid][0], PCL[playerid][1], PCL[playerid][2]);
  758. }
  759.  
  760. strtok(const string[], &index)
  761. {
  762. new length = strlen(string);
  763. while ((index < length) && (string[index] <= ' '))
  764. {
  765. index++;
  766. }
  767. new offset = index, result[20];
  768. while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  769. {
  770. result[index - offset] = string[index];
  771. index++;
  772. }
  773. result[index - offset] = EOS;
  774. return result;
  775. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement