Advertisement
EnzoMetlc

[FilterScript] Posiciones de cámara.

Jun 25th, 2014
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.64 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3.  
  4.  
  5. #pragma unused VehicleNames
  6.  
  7. #define MOVE_SPEED              100.0
  8. #define ACCEL_RATE              0.03
  9.  
  10.  
  11. #define CAMERA_MODE_NONE        0
  12. #define CAMERA_MODE_FLY         1
  13.  
  14.  
  15. #define MOVE_FORWARD            1
  16. #define MOVE_BACK               2
  17. #define MOVE_LEFT               3
  18. #define MOVE_RIGHT              4
  19. #define MOVE_FORWARD_LEFT       5
  20. #define MOVE_FORWARD_RIGHT      6
  21. #define MOVE_BACK_LEFT          7
  22. #define MOVE_BACK_RIGHT         8
  23.  
  24.  
  25.  
  26. enum noclipenum
  27. {
  28.     bool:inflymode,
  29.     cameramode,
  30.     flyobject,
  31.     mode,
  32.     lrold,
  33.     udold,
  34.     lastmove,
  35.     Float:accelmul
  36. }
  37. new noclipdata[MAX_PLAYERS][noclipenum];
  38.  
  39. //--------------------------------------------------
  40.  
  41. public OnFilterScriptExit()
  42. {
  43.     for(new x; x<MAX_PLAYERS; x++)
  44.     {
  45.         if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
  46.     }
  47.     return 1;
  48. }
  49.  
  50. //--------------------------------------------------
  51.  
  52. public OnPlayerConnect(playerid)
  53. {
  54.     noclipdata[playerid][cameramode]    = CAMERA_MODE_NONE;
  55.     noclipdata[playerid][lrold]         = 0;
  56.     noclipdata[playerid][udold]         = 0;
  57.     noclipdata[playerid][mode]          = 0;
  58.     noclipdata[playerid][lastmove]      = 0;
  59.     noclipdata[playerid][accelmul]      = 0.0;
  60.     return 1;
  61. }
  62.  
  63. public OnPlayerSpawn(playerid)
  64. {
  65.     SendClientMessage(playerid, -1, "* Use {FF0000}/flymode {FFFFFF}para comenzar o terminar.");
  66.     SendClientMessage(playerid, -1, "* Use {FF0000}/getcam (comentario) {FFFFFF}para guardar las posiciones de su cámara.");
  67.     return 1;
  68. }
  69.  
  70. //--------------------------------------------------
  71.  
  72. CMD:flymode(playerid)
  73. {
  74.     if(noclipdata[playerid][inflymode] == true) CancelFlyMode(playerid);
  75.     else FlyMode(playerid);
  76.     return 1;
  77. }
  78.  
  79. CMD:getcam(playerid, params[])
  80. {
  81.     new Float:Pos[3], Float:Vect[3];
  82.    
  83.     GetPlayerCameraPos(playerid, Pos[0], Pos[1], Pos[2]);
  84.     GetPlayerCameraFrontVector(playerid, Vect[0], Vect[1], Vect[2]);
  85.    
  86.     new comment[100]; // No tengo ganas de contar los caracteres.
  87.     new str[110]; // No tengo ganas de contar los caracteres.
  88.    
  89.     format(comment, sizeof(comment), "/*[]===== %s =====[]*/\r\n", params[0]);
  90.     format(str, sizeof(str), "SetPlayerCameraPos(playerid, %f, %f, %f);\r\nSetPlayerCameraLookAt(playerid, %f, %f, %f);\r\n\r\n", Pos[0], Pos[1], Pos[2], Vect[0]+(Pos[0]*2), Vect[1]+(Pos[1]*2), Vect[2]+(Pos[2]*2));
  91.    
  92.     new File:INI = fopen("CameraPosition.txt", io_append);
  93.     fwrite(INI, comment);
  94.     fwrite(INI, str);
  95.     fclose(INI);
  96.     SendClientMessage(playerid, 0x00FF00AA, "* Datos guardado correctamente en /scriptfiles/CameraPosition.txt/!");
  97.     return 1;
  98. }
  99.  
  100.  
  101. //--------------------------------------------------
  102.  
  103. public OnPlayerUpdate(playerid)
  104. {
  105.     if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  106.     {
  107.         new keys,ud,lr;
  108.         GetPlayerKeys(playerid,keys,ud,lr);
  109.  
  110.         if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  111.         {
  112.             MoveCamera(playerid);
  113.         }
  114.  
  115.         if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  116.         {
  117.             if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
  118.             {  
  119.                 StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  120.                 noclipdata[playerid][mode]      = 0;
  121.                 noclipdata[playerid][accelmul]  = 0.0;
  122.             }
  123.             else
  124.             {
  125.                 noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  126.                 MoveCamera(playerid);
  127.             }
  128.         }
  129.         noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
  130.         return 0;
  131.     }
  132.     return 1;
  133. }
  134.  
  135. //--------------------------------------------------
  136.  
  137. stock GetMoveDirectionFromKeys(ud, lr)
  138. {
  139.     new direction = 0;
  140.    
  141.     if(lr < 0)
  142.     {
  143.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;
  144.         else if(ud > 0) direction = MOVE_BACK_LEFT;
  145.         else            direction = MOVE_LEFT;
  146.     }
  147.     else if(lr > 0)
  148.     {
  149.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;
  150.         else if(ud > 0) direction = MOVE_BACK_RIGHT;    
  151.         else            direction = MOVE_RIGHT;      
  152.     }
  153.     else if(ud < 0)     direction = MOVE_FORWARD;  
  154.     else if(ud > 0)     direction = MOVE_BACK;     
  155.    
  156.     return direction;
  157. }
  158.  
  159. //--------------------------------------------------
  160.  
  161. stock MoveCamera(playerid)
  162. {
  163.     new Float:FV[3], Float:CP[3];
  164.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);          
  165.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  166.  
  167.     if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  168.  
  169.     new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  170.  
  171.     new Float:X, Float:Y, Float:Z;
  172.     GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  173.     MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  174.  
  175.     noclipdata[playerid][lastmove] = GetTickCount();
  176.     return 1;
  177. }
  178.  
  179. //--------------------------------------------------
  180.  
  181. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  182. {
  183.     #define OFFSET_X (FV[0]*6000.0)
  184.     #define OFFSET_Y (FV[1]*6000.0)
  185.     #define OFFSET_Z (FV[2]*6000.0)
  186.     switch(move_mode)
  187.     {
  188.         case MOVE_FORWARD:
  189.         {
  190.             X = CP[0]+OFFSET_X;
  191.             Y = CP[1]+OFFSET_Y;
  192.             Z = CP[2]+OFFSET_Z;
  193.         }
  194.         case MOVE_BACK:
  195.         {
  196.             X = CP[0]-OFFSET_X;
  197.             Y = CP[1]-OFFSET_Y;
  198.             Z = CP[2]-OFFSET_Z;
  199.         }
  200.         case MOVE_LEFT:
  201.         {
  202.             X = CP[0]-OFFSET_Y;
  203.             Y = CP[1]+OFFSET_X;
  204.             Z = CP[2];
  205.         }
  206.         case MOVE_RIGHT:
  207.         {
  208.             X = CP[0]+OFFSET_Y;
  209.             Y = CP[1]-OFFSET_X;
  210.             Z = CP[2];
  211.         }
  212.         case MOVE_BACK_LEFT:
  213.         {
  214.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  215.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  216.             Z = CP[2]-OFFSET_Z;
  217.         }
  218.         case MOVE_BACK_RIGHT:
  219.         {
  220.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  221.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  222.             Z = CP[2]-OFFSET_Z;
  223.         }
  224.         case MOVE_FORWARD_LEFT:
  225.         {
  226.             X = CP[0]+(OFFSET_X  - OFFSET_Y);
  227.             Y = CP[1]+(OFFSET_Y  + OFFSET_X);
  228.             Z = CP[2]+OFFSET_Z;
  229.         }
  230.         case MOVE_FORWARD_RIGHT:
  231.         {
  232.             X = CP[0]+(OFFSET_X  + OFFSET_Y);
  233.             Y = CP[1]+(OFFSET_Y  - OFFSET_X);
  234.             Z = CP[2]+OFFSET_Z;
  235.         }
  236.     }
  237. }
  238. //--------------------------------------------------
  239.  
  240. stock CancelFlyMode(playerid)
  241. {
  242.     noclipdata[playerid][inflymode] = false;
  243.     CancelEdit(playerid);
  244.     TogglePlayerSpectating(playerid, false);
  245.  
  246.     DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  247.     noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  248.     return 1;
  249. }
  250.  
  251. //--------------------------------------------------
  252.  
  253. stock FlyMode(playerid)
  254. {
  255.     new Float:X, Float:Y, Float:Z;
  256.     GetPlayerPos(playerid, X, Y, Z);
  257.     noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  258.  
  259.     TogglePlayerSpectating(playerid, true);
  260.     AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  261.  
  262.     noclipdata[playerid][inflymode] = true;
  263.     noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  264.     return 1;
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement