Advertisement
Guest User

Sandra

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