Advertisement
Guest User

[FilterScript] SaveCameraPos

a guest
Jan 23rd, 2013
880
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.84 KB | None | 0 0
  1. /*
  2. by SA-MP Team
  3. Editado por: dimmy_scarface
  4. */
  5.  
  6.  
  7. #include <a_samp>
  8. #include <zcmd>
  9. #include <sscanf2>
  10.  
  11.  
  12. new PlayerText:TDCam[MAX_PLAYERS];
  13.  
  14. #define MOVE_SPEED 100.0
  15. #define ACCEL_RATE 0.03
  16. #define CAMERA_MODE_NONE 0
  17. #define CAMERA_MODE_FLY 1
  18. #define MOVE_FORWARD 1
  19. #define MOVE_BACK 2
  20. #define MOVE_LEFT 3
  21. #define MOVE_RIGHT 4
  22. #define MOVE_FORWARD_LEFT 5
  23. #define MOVE_FORWARD_RIGHT 6
  24. #define MOVE_BACK_LEFT 7
  25. #define MOVE_BACK_RIGHT 8
  26. #define PASTA_SAVE "SaveCamera.pwn"
  27.  
  28.  
  29.  
  30. enum noclipenum
  31. {
  32. cameramode,
  33. flyobject,
  34. mode,
  35. lrold,
  36. udold,
  37. lastmove,
  38. Float:accelmul
  39. }
  40. new noclipdata[MAX_PLAYERS][noclipenum];
  41.  
  42. //--------------------------------------------------
  43.  
  44.  
  45.  
  46. public OnFilterScriptExit()
  47. {
  48. for(new x; x<MAX_PLAYERS; x++)
  49. {
  50. if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelCameraMode(x);
  51. }
  52. return 1;
  53. }
  54.  
  55. //--------------------------------------------------
  56.  
  57.  
  58.  
  59. public OnPlayerConnect(playerid)
  60. {
  61. SendClientMessage(playerid, 0xF6F600FF, "SERVER: Use /cameramode para iniciar a movimentação da camera");
  62. noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  63. noclipdata[playerid][lrold] = 0;
  64. noclipdata[playerid][udold] = 0;
  65. noclipdata[playerid][mode] = 0;
  66. noclipdata[playerid][lastmove] = 0;
  67. noclipdata[playerid][accelmul] = 0.0;
  68. return 1;
  69. }
  70.  
  71.  
  72.  
  73.  
  74.  
  75. CMD:cameramode(playerid)
  76. {
  77. if(GetPVarType(playerid, "FlyMode"))
  78. CancelCameraMode(playerid);
  79. else
  80. FlyMode(playerid);
  81. return 1;
  82. }
  83.  
  84.  
  85.  
  86. CMD:savecamera(playerid, params[])
  87. {
  88. new nome[74];
  89. if(sscanf(params, "s[74]", nome))return SendClientMessage(playerid, -1, "Uso: /savecamera <nome>");
  90. if(GetPVarType(playerid, "FlyMode"))
  91. SaveCamera(playerid, params);
  92. else
  93. SendClientMessage(playerid, -1, "Você não pode usar este comando agora");
  94. return 1;
  95. }
  96.  
  97.  
  98.  
  99.  
  100.  
  101. public OnPlayerUpdate(playerid)
  102. {
  103. if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  104. {
  105. new keys,ud,lr;
  106. GetPlayerKeys(playerid,keys,ud,lr);
  107. if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  108. {
  109. MoveCamera(playerid);
  110. }
  111. if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  112. {
  113. if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
  114. {
  115. StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  116. noclipdata[playerid][mode] = 0;
  117. noclipdata[playerid][accelmul] = 0.0;
  118. }
  119. else
  120. {
  121. noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  122. MoveCamera(playerid);
  123. }
  124. }
  125. noclipdata[playerid][udold] = ud;noclipdata[playerid][lrold] = lr;
  126. TextCamera(playerid);
  127. return 0;
  128. }
  129. return 1;
  130. }
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138. stock GetMoveDirectionFromKeys(ud, lr)
  139. {
  140. new direction = 0;
  141.  
  142. if(lr < 0)
  143. {
  144. if(ud < 0) direction = MOVE_FORWARD_LEFT;
  145. else if(ud > 0) direction = MOVE_BACK_LEFT;
  146. else direction = MOVE_LEFT;
  147. }
  148. else if(lr > 0)
  149. {
  150. if(ud < 0) direction = MOVE_FORWARD_RIGHT;
  151. else if(ud > 0) direction = MOVE_BACK_RIGHT;
  152. else direction = MOVE_RIGHT;
  153. }
  154. else if(ud < 0) direction = MOVE_FORWARD;
  155. else if(ud > 0) direction = MOVE_BACK;
  156.  
  157. return direction;
  158. }
  159.  
  160.  
  161.  
  162.  
  163.  
  164. stock TextCamera(playerid)
  165. {
  166. new Float:FV[3], Float:CP[3], str[128],Float:X, Float:Y, Float:Z;
  167.  
  168. GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  169.  
  170. GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  171.  
  172. GetNextCameraPositionEx(CP, FV, X, Y, Z);
  173.  
  174. format(str, sizeof str, "~b~Cam Pos:~w~~h~ %0.2f, %0.2f, %0.2f~n~~b~Look AT:~w~~h~ %0.2f, %0.2f, %0.2f",CP[0], CP[1], CP[2],X, Y, Z);
  175. PlayerTextDrawSetString(playerid, TDCam[playerid], str);
  176. return 1;
  177. }
  178.  
  179.  
  180.  
  181.  
  182. stock MoveCamera(playerid)
  183. {
  184. new Float:FV[3], Float:CP[3],Float:X, Float:Y, Float:Z;
  185.  
  186. GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  187. GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  188. if(noclipdata[playerid][accelmul] <= 1)
  189. {
  190.  
  191. noclipdata[playerid][accelmul] += ACCEL_RATE;
  192.  
  193. }
  194.  
  195. new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  196.  
  197. GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  198. MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  199.  
  200. noclipdata[playerid][lastmove] = GetTickCount();
  201. return 1;
  202. }
  203.  
  204.  
  205.  
  206. stock SaveCamera(playerid, nome[])
  207. {
  208. new Float:FV[3], Float:CP[3], File:file, str[420],Float:X, Float:Y, Float:Z;
  209.  
  210. GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  211.  
  212. GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  213.  
  214. GetNextCameraPositionEx(CP, FV, X, Y, Z);
  215.  
  216. file = fopen(PASTA_SAVE,io_append);
  217. format(str, sizeof str, "\n\n\n//---------- %s ----------\nSetPlayerCameraPos(playerid, %0.2f, %0.2f, %0.2f);\nSetPlayerCameraLookAt(playerid, %0.2f, %0.2f, %0.2f);\n//-----------------------------------",
  218. nome, CP[0], CP[1], CP[2], X, Y, Z);
  219. fwrite(file,str);
  220. fclose(file);
  221. SendClientMessage(playerid, 0xF6F600FF, "-----------------------------------------------------------------------------------------------------------------------------");
  222. format(str, sizeof str, "A posição da camera '{FFFFFF}%s{F6F600}' foi salva no arquivo ({FFFFFF}%s{F6F600}) em sua pasta 'scriptfiles'",nome, PASTA_SAVE);
  223. SendClientMessage(playerid, 0xF6F600FF, str);
  224. SendClientMessage(playerid, 0xF6F600FF, "-----------------------------------------------------------------------------------------------------------------------------");
  225. return 1;
  226. }
  227.  
  228.  
  229.  
  230.  
  231.  
  232. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  233. {
  234. #define OFFSET_X (FV[0]*6000.0)
  235. #define OFFSET_Y (FV[1]*6000.0)
  236. #define OFFSET_Z (FV[2]*6000.0)
  237. switch(move_mode)
  238. {
  239. case MOVE_FORWARD:
  240. {
  241. X = CP[0]+OFFSET_X;
  242. Y = CP[1]+OFFSET_Y;
  243. Z = CP[2]+OFFSET_Z;
  244. }
  245. case MOVE_BACK:
  246. {
  247. X = CP[0]-OFFSET_X;
  248. Y = CP[1]-OFFSET_Y;
  249. Z = CP[2]-OFFSET_Z;
  250. }
  251. case MOVE_LEFT:
  252. {
  253. X = CP[0]-OFFSET_Y;
  254. Y = CP[1]+OFFSET_X;
  255. Z = CP[2];
  256. }
  257. case MOVE_RIGHT:
  258. {
  259. X = CP[0]+OFFSET_Y;
  260. Y = CP[1]-OFFSET_X;
  261. Z = CP[2];
  262. }
  263. case MOVE_BACK_LEFT:
  264. {
  265. X = CP[0]+(-OFFSET_X - OFFSET_Y);
  266. Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  267. Z = CP[2]-OFFSET_Z;
  268. }
  269. case MOVE_BACK_RIGHT:
  270. {
  271. X = CP[0]+(-OFFSET_X + OFFSET_Y);
  272. Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  273. Z = CP[2]-OFFSET_Z;
  274. }
  275. case MOVE_FORWARD_LEFT:
  276. {
  277. X = CP[0]+(OFFSET_X - OFFSET_Y);
  278. Y = CP[1]+(OFFSET_Y + OFFSET_X);
  279. Z = CP[2]+OFFSET_Z;
  280. }
  281. case MOVE_FORWARD_RIGHT:
  282. {
  283. X = CP[0]+(OFFSET_X + OFFSET_Y);
  284. Y = CP[1]+(OFFSET_Y - OFFSET_X);
  285. Z = CP[2]+OFFSET_Z;
  286. }
  287. }
  288. }
  289.  
  290.  
  291.  
  292. stock GetNextCameraPositionEx(Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  293. {
  294. #define OFFSET_XX (FV[0]*6.0)
  295. #define OFFSET_YY (FV[1]*6.0)
  296. #define OFFSET_ZZ (FV[2]*6.0)
  297. X = CP[0]+OFFSET_XX;
  298. Y = CP[1]+OFFSET_YY;
  299. Z = CP[2]+OFFSET_ZZ;
  300. }
  301.  
  302.  
  303.  
  304.  
  305.  
  306. stock CancelCameraMode(playerid)
  307. {
  308. SendClientMessage(playerid, 0xF6F600FF, "Você foi spawnado.");
  309. DeletePVar(playerid, "FlyMode");
  310. CancelEdit(playerid);
  311. TogglePlayerSpectating(playerid, false);
  312. PlayerTextDrawDestroy(playerid, TDCam[playerid]);
  313. DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  314. noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  315. SetTimerEx("SetPlayerOriginalPos", 1000, false, "d", playerid);
  316. return 1;
  317. }
  318.  
  319.  
  320. forward SetPlayerOriginalPos(playerid);
  321. public SetPlayerOriginalPos(playerid)
  322. {
  323. SetPlayerPos(playerid, GetPVarFloat(playerid, "OriginalX"),GetPVarFloat(playerid, "OriginalY"),GetPVarFloat(playerid, "OriginalZ"));
  324. }
  325.  
  326. stock FlyMode(playerid)
  327. {
  328. SendClientMessage(playerid, 0xF6F600FF, "Mova a camera com facilidade até achar o local desejado, para salvar USE /savecamera");
  329. TDCam[playerid] = CreatePlayerTextDraw(playerid, 32.000000, 310.000000, " ");
  330. PlayerTextDrawBackgroundColor(playerid, TDCam[playerid], 70);
  331. PlayerTextDrawFont(playerid, TDCam[playerid], 1);
  332. PlayerTextDrawLetterSize(playerid, TDCam[playerid], 0.250000, 1.300000);
  333. PlayerTextDrawColor(playerid, TDCam[playerid], -1);
  334. PlayerTextDrawSetOutline(playerid, TDCam[playerid], 1);
  335. PlayerTextDrawSetProportional(playerid, TDCam[playerid], 1);
  336. PlayerTextDrawShow(playerid, TDCam[playerid]);
  337. new Float:X, Float:Y, Float:Z;
  338. GetPlayerPos(playerid, X, Y, Z);
  339. noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  340. TogglePlayerSpectating(playerid, true);
  341. AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  342. SetPVarInt(playerid, "FlyMode", 1);
  343. noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  344. SetPVarFloat(playerid, "OriginalX", X);
  345. SetPVarFloat(playerid, "OriginalY", Y);
  346. SetPVarFloat(playerid, "OriginalZ", Z);
  347. return 1;
  348. }
  349.  
  350.  
  351.  
  352.  
  353. //--------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement