Guest User

Untitled

a guest
Jul 20th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 21.59 KB | None | 0 0
  1. /*
  2.  
  3.              _____           _     _
  4.             |  __ \         | |   (_)
  5.             | |  | |_ __ ___| |__  _ _ __
  6.             | |  | | '__/ _ \ '_ \| | '_ \
  7.             | |__| | | |  __/ |_) | | | | |
  8.             |_____/|_|  \___|_.__/|_|_| |_|
  9.                         ©2012
  10.  
  11. */
  12. #define FILTERSCRIPT
  13.  
  14. #include <a_samp>
  15. #include <YSI/y_ini>
  16.  
  17. // Players Move Speed
  18. #define MOVE_SPEED              100.0
  19. #define ACCEL_RATE              0.03
  20.  
  21. // Players Mode
  22. #define CAMERA_MODE_NONE        0
  23. #define CAMERA_MODE_FLY         1
  24.  
  25. // Key state definitions
  26. #define MOVE_FORWARD            1
  27. #define MOVE_BACK               2
  28. #define MOVE_LEFT               3
  29. #define MOVE_RIGHT              4
  30. #define MOVE_FORWARD_LEFT       5
  31. #define MOVE_FORWARD_RIGHT      6
  32. #define MOVE_BACK_LEFT          7
  33. #define MOVE_BACK_RIGHT         8
  34.  
  35. #define DIALOG_MENU 1678
  36. #define DIALOG_MOVE_SPEED 1679
  37. #define DIALOG_ROT_SPEED 1680
  38. #define DIALOG_EXPORTNAME 1681
  39. #define DIALOG_CLOSE_NEW 1682
  40.  
  41. const Float:fScale = 5.0;
  42. new MenuTimer;
  43. new Float:fPX, Float:fPY, Float:fPZ,
  44.             Float:fVX, Float:fVY, Float:fVZ,
  45.             Float:object_x, Float:object_y, Float:object_z;
  46. new bool:IsCreating[MAX_PLAYERS] = false;
  47. new bool:IsReSettingStart[MAX_PLAYERS] = false;
  48. new bool:IsReSettingEnd[MAX_PLAYERS] = false;
  49. new bool:SettingFirstLoc[MAX_PLAYERS] = false;
  50. new bool:SettingLastLoc[MAX_PLAYERS] = false;
  51. new bool:IsCamMoving[MAX_PLAYERS] = false;
  52.  
  53. // Enumeration for storing data about the player
  54. enum noclipenum
  55. {
  56.     cameramode,
  57.     flyobject,
  58.     mode,
  59.     lrold,
  60.     udold,
  61.     lastmove,
  62.     Float:accelmul
  63. }
  64. new noclipdata[MAX_PLAYERS][noclipenum];
  65.  
  66. enum Coordinates
  67. {
  68.     Float:StartX,
  69.     Float:StartY,
  70.     Float:StartZ,
  71.     Float:EndX,
  72.     Float:EndY,
  73.     Float:EndZ,
  74.     Float:StartLookX,
  75.     Float:StartLookY,
  76.     Float:StartLookZ,
  77.     Float:EndLookX,
  78.     Float:EndLookY,
  79.     Float:EndLookZ,
  80.     MoveSpeed,
  81.     RotSpeed
  82. }
  83. new coordInfo[MAX_PLAYERS][Coordinates];
  84.  
  85. #if defined FILTERSCRIPT
  86.  
  87. public OnFilterScriptInit()
  88. {
  89.     print("\n--------------------------------------");
  90.     print(" CamEditor by Drebin");
  91.     print("--------------------------------------\n");
  92.     return 1;
  93. }
  94.  
  95. public OnFilterScriptExit()
  96. {
  97.     for(new x; x<MAX_PLAYERS; x++)
  98.     {
  99.         if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
  100.     }
  101.     return 1;
  102. }
  103.  
  104. #endif
  105.  
  106. public OnPlayerConnect(playerid)
  107. {
  108.     noclipdata[playerid][cameramode]    = CAMERA_MODE_NONE;
  109.     noclipdata[playerid][lrold]         = 0;
  110.     noclipdata[playerid][udold]         = 0;
  111.     noclipdata[playerid][mode]          = 0;
  112.     noclipdata[playerid][lastmove]      = 0;
  113.     noclipdata[playerid][accelmul]      = 0.0;
  114.     IsCreating[playerid]                = false;
  115.     IsReSettingStart[playerid]          = false;
  116.     IsReSettingEnd[playerid]            = false;
  117.     SettingFirstLoc[playerid]           = false;
  118.     SettingLastLoc[playerid]            = false;
  119.     IsCamMoving[playerid]               = false;
  120.     coordInfo[playerid][MoveSpeed]      = 1000;
  121.     coordInfo[playerid][RotSpeed]       = 1000;
  122.     return 1;
  123. }
  124.  
  125. public OnPlayerSpawn(playerid)
  126. {
  127.     SendClientMessage(playerid, -1, "Type /cameditor to open the camera movement editor");
  128. }
  129.  
  130. public OnPlayerCommandText(playerid, cmdtext[])
  131. {
  132.     if(!strcmp(cmdtext, "/cameditor", true))
  133.     {
  134.         if(IsCamMoving[playerid] == false)
  135.         {
  136.             if(GetPVarType(playerid, "FlyMode")) CancelFlyMode(playerid);
  137.             else FlyMode(playerid);
  138.         }
  139.         return 1;
  140.     }
  141.     return 0;
  142. }
  143.  
  144. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  145. {
  146.     if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))
  147.     {
  148.         if(IsCreating[playerid] == true)
  149.         {
  150.             if(SettingFirstLoc[playerid] == true)
  151.             {
  152.                 const Float:fScale = 5.0;
  153.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  154.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  155.                 object_x = fPX + floatmul(fVX, fScale);
  156.                 object_y = fPY + floatmul(fVY, fScale);
  157.                 object_z = fPZ + floatmul(fVZ, fScale);
  158.                 coordInfo[playerid][StartX] = fPX;
  159.                 coordInfo[playerid][StartY] = fPY;
  160.                 coordInfo[playerid][StartZ] = fPZ;
  161.                 coordInfo[playerid][StartLookX] = object_x;
  162.                 coordInfo[playerid][StartLookY] = object_y;
  163.                 coordInfo[playerid][StartLookZ] = object_z;
  164.                 if(IsReSettingStart[playerid] == true)
  165.                 {
  166.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Start position {8EFF8E}re-set.");
  167.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  168.                     IsReSettingStart[playerid] = false;
  169.                     IsReSettingEnd[playerid] = false;
  170.                     SettingFirstLoc[playerid] = false;
  171.                     SettingLastLoc[playerid] = false;
  172.                 }
  173.                 else
  174.                 {
  175.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Start position {8EFF8E}set.");
  176.                     SendClientMessage(playerid, -1, "Now use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to save the camera's position as the {F58282}end {FFFFFF}position.");
  177.                     SettingLastLoc[playerid] = true;
  178.                     SettingFirstLoc[playerid] = false;
  179.                 }
  180.             }
  181.             else if(SettingLastLoc[playerid] == true)
  182.             {
  183.                 const Float:fScale = 5.0;
  184.                 new string[512];
  185.                 format(string, sizeof(string), "Please enter the desired {F58282}movement{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n\n\nNote: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  186.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  187.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  188.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  189.                 object_x = fPX + floatmul(fVX, fScale);
  190.                 object_y = fPY + floatmul(fVY, fScale);
  191.                 object_z = fPZ + floatmul(fVZ, fScale);
  192.                 coordInfo[playerid][EndX] = fPX;
  193.                 coordInfo[playerid][EndY] = fPY;
  194.                 coordInfo[playerid][EndZ] = fPZ;
  195.                 coordInfo[playerid][EndLookX] = object_x;
  196.                 coordInfo[playerid][EndLookY] = object_y;
  197.                 coordInfo[playerid][EndLookZ] = object_z;
  198.                 if(IsReSettingEnd[playerid] == true)
  199.                 {
  200.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} End position {8EFF8E}re-set.");
  201.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  202.                     IsReSettingStart[playerid] = false;
  203.                     IsReSettingEnd[playerid] = false;
  204.                     SettingFirstLoc[playerid] = false;
  205.                     SettingLastLoc[playerid] = false;
  206.                 }
  207.                 else
  208.                 {
  209.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} End position {8EFF8E}set.");
  210.                     SettingLastLoc[playerid] = false;
  211.                 }
  212.             }
  213.         }
  214.     }
  215.     return 1;
  216. }
  217.  
  218. public OnPlayerUpdate(playerid)
  219. {
  220.     if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  221.     {
  222.         new keys,ud,lr;
  223.         GetPlayerKeys(playerid,keys,ud,lr);
  224.  
  225.         if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  226.         {
  227.             MoveCamera(playerid);
  228.         }
  229.         if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  230.         {
  231.             if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0){
  232.                 StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  233.                 noclipdata[playerid][mode]      = 0;
  234.                 noclipdata[playerid][accelmul]  = 0.0;
  235.             }
  236.             else
  237.             {
  238.                 noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  239.                 MoveCamera(playerid);
  240.             }
  241.         }
  242.         noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
  243.         return 0;
  244.     }
  245.     return 1;
  246. }
  247.  
  248. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  249. {
  250.     switch(dialogid)
  251.     {
  252.         case DIALOG_MENU:
  253.         {
  254.             if(response)
  255.             {
  256.                 switch(listitem)
  257.                 {
  258.                     case 0: //Preview
  259.                     {
  260.                         PreviewMovement(playerid);
  261.                     }
  262.                     case 1: //Change start
  263.                     {
  264.                         CancelFlyMode(playerid);
  265.                         IsReSettingStart[playerid] = true;
  266.                         SettingFirstLoc[playerid] = true;
  267.                         IsCreating[playerid] = true;
  268.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], 0.0, 0.0, 0.0);
  269.                         TogglePlayerSpectating(playerid, true);
  270.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  271.                         SetPVarInt(playerid, "FlyMode", 1);
  272.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  273.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}start {FFFFFF}position.");
  274.                     }
  275.                     case 2: //Change end
  276.                     {
  277.                         CancelFlyMode(playerid);
  278.                         IsReSettingEnd[playerid] = true;
  279.                         SettingLastLoc[playerid] = true;
  280.                         IsCreating[playerid] = true;
  281.                         SetCameraBehindPlayer(playerid);
  282.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ], 0.0, 0.0, 0.0);
  283.                         TogglePlayerSpectating(playerid, true);
  284.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  285.                         SetPVarInt(playerid, "FlyMode", 1);
  286.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  287.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}end {FFFFFF}position.");
  288.                     }
  289.                     case 3: //Change speed
  290.                     {
  291.                         new string[512];
  292.                         format(string, sizeof(string), "Please enter the desired {F58282}movement{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n\n\nNote: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  293.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  294.                     }
  295.                     case 4: //Export
  296.                     {
  297.                         ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Save movement","Enter a name for the movement","Ok","Cancel");
  298.                     }
  299.                 }
  300.             }
  301.             else
  302.             {
  303.                 CancelFlyMode(playerid);
  304.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  305.             }
  306.         }
  307.      case DIALOG_MOVE_SPEED:
  308.         {
  309.             if(response)
  310.             {
  311.                 if(strlen(inputtext))
  312.                 {
  313.                     if(IsNumeric(inputtext))
  314.                     {
  315.                         coordInfo[playerid][MoveSpeed] = strval(inputtext);
  316.                         new string[512];
  317.                         format(string, sizeof(string), "Please enter the desired {F58282}rotation{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  318.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  319.                         IsReSettingStart[playerid] = false;
  320.                         IsReSettingEnd[playerid] = false;
  321.                     }
  322.                     else
  323.                     {
  324.                         new string[512];
  325.                         format(string, sizeof(string), "Please enter the desired {F58282}movement{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n{FF0000}NUMBERS ONLY\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  326.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  327.                     }
  328.                 }
  329.                 else
  330.                 {
  331.                     new string[512];
  332.                     format(string, sizeof(string), "Please enter the desired {F58282}movement{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n{FF0000}You need to enter a value\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  333.                     ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  334.                 }
  335.             }
  336.             else
  337.             {
  338.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  339.             }
  340.         }
  341.         case DIALOG_ROT_SPEED:
  342.         {
  343.             if(response)
  344.             {
  345.                 if(strlen(inputtext))
  346.                 {
  347.                     if(IsNumeric(inputtext))
  348.                     {
  349.                         coordInfo[playerid][RotSpeed] = strval(inputtext);
  350.                         ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  351.                         IsReSettingStart[playerid] = false;
  352.                         IsReSettingEnd[playerid] = false;
  353.                     }
  354.                     else
  355.                     {
  356.                         new string[512];
  357.                         format(string, sizeof(string), "Please enter the desired {F58282}rotation{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n{FF0000}NUMBERS ONLY!\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  358.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  359.                     }
  360.                 }
  361.                 else
  362.                 {
  363.                     new string[512];
  364.                     format(string, sizeof(string), "Please enter the desired {F58282}rotation{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n{FF0000}You need to enter a value\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  365.                     ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  366.                 }
  367.             }
  368.             else
  369.             {
  370.                 new string[512];
  371.                 format(string, sizeof(string), "Please enter the desired {F58282}movement{a9c4e4} time in milliseconds\n\nCurrent movement speed: \t{F58282}%i milliseconds\n{a9c4e4}Current rotation speed: \t{F58282}%i milliseconds\n\n\n{F58282}Note: {a9c4e4}1 second = 1000 milliseconds", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  372.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed",string,"Ok","Cancel");
  373.             }
  374.         }
  375.         case DIALOG_EXPORTNAME:
  376.         {
  377.             if(response)
  378.             {
  379.                 if(strlen(inputtext))
  380.                 {
  381.                     new movestring[512];
  382.                     new rotstring[512];
  383.                     format(movestring, sizeof(movestring),"InterpolateCameraPos(playerid, %f, %f, %f, %f, %f, %f, %i);",coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]);
  384.                     format(rotstring,sizeof(rotstring),"InterpolateCameraLookAt(playerid, %f, %f, %f, %f, %f, %f, %i);",coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]);
  385.                     new INI:ini = INI_Open("CameraMovements.txt");
  386.                     INI_SetTag(ini, inputtext);
  387.                     INI_WriteString(ini, "Movement", movestring);
  388.                     INI_WriteString(ini, "Rotation", rotstring);
  389.                     INI_Close(ini);
  390.                     ShowPlayerDialog(playerid, DIALOG_CLOSE_NEW, DIALOG_STYLE_MSGBOX,"What next?","Camera movements saved!\n\nWhat do you want to do next?","Create new","Exit");
  391.                 }
  392.                 else
  393.                 {
  394.                     ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Save movement","Enter a name for the movement\n{FF0000}You need to enter a text","Ok","Cancel");
  395.                 }
  396.             }
  397.             else
  398.             {
  399.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  400.             }
  401.         }
  402.         case DIALOG_CLOSE_NEW:
  403.         {
  404.             CancelFlyMode(playerid);
  405.             if(response)
  406.             {
  407.                 IsCreating[playerid] = true;
  408.                 SettingFirstLoc[playerid] = true;
  409.                 FlyMode(playerid);
  410.             }
  411.             else
  412.             {
  413.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  414.             }
  415.         }
  416.     }
  417.     return 1;
  418. }
  419.  
  420. forward ShowPlayerMenu(playerid);
  421. public ShowPlayerMenu(playerid)
  422. {
  423.     KillTimer(MenuTimer);
  424.     IsCamMoving[playerid] = false;
  425.     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  426.     return 1;
  427. }
  428.  
  429. forward PreviewMovement(playerid);
  430. public PreviewMovement(playerid)
  431. {
  432.     IsCamMoving[playerid] = true;
  433.     DestroyObject(noclipdata[playerid][flyobject]);
  434.     SetCameraBehindPlayer(playerid);
  435.     if(coordInfo[playerid][MoveSpeed] > coordInfo[playerid][RotSpeed])
  436.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][MoveSpeed], 0);
  437.     else
  438.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][RotSpeed], 0);
  439.     InterpolateCameraPos(playerid, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]);
  440.     InterpolateCameraLookAt(playerid, coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]);
  441.     return 1;
  442. }
  443.  
  444. stock GetMoveDirectionFromKeys(ud, lr)
  445. {
  446.     new direction = 0;
  447.  
  448.     if(lr < 0)
  449.     {
  450.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;  // Up & Left key pressed
  451.         else if(ud > 0) direction = MOVE_BACK_LEFT;     // Back & Left key pressed
  452.         else            direction = MOVE_LEFT;          // Left key pressed
  453.     }
  454.     else if(lr > 0)     // Right pressed
  455.     {
  456.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;  // Up & Right key pressed
  457.         else if(ud > 0) direction = MOVE_BACK_RIGHT;     // Back & Right key pressed
  458.         else            direction = MOVE_RIGHT;          // Right key pressed
  459.     }
  460.     else if(ud < 0)     direction = MOVE_FORWARD;   // Up key pressed
  461.     else if(ud > 0)     direction = MOVE_BACK;      // Down key pressed
  462.  
  463.     return direction;
  464. }
  465.  
  466. //--------------------------------------------------
  467.  
  468. stock MoveCamera(playerid)
  469. {
  470.     new Float:FV[3], Float:CP[3];
  471.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);          //  Cameras position in space
  472.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);  //  Where the camera is looking at
  473.     if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  474.     new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  475.     new Float:X, Float:Y, Float:Z;
  476.     GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  477.     MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  478.     noclipdata[playerid][lastmove] = GetTickCount();
  479.     return 1;
  480. }
  481.  
  482. //--------------------------------------------------
  483.  
  484. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  485. {
  486.     #define OFFSET_X (FV[0]*6000.0)
  487.     #define OFFSET_Y (FV[1]*6000.0)
  488.     #define OFFSET_Z (FV[2]*6000.0)
  489.     switch(move_mode)
  490.     {
  491.         case MOVE_FORWARD:
  492.         {
  493.             X = CP[0]+OFFSET_X;
  494.             Y = CP[1]+OFFSET_Y;
  495.             Z = CP[2]+OFFSET_Z;
  496.         }
  497.         case MOVE_BACK:
  498.         {
  499.             X = CP[0]-OFFSET_X;
  500.             Y = CP[1]-OFFSET_Y;
  501.             Z = CP[2]-OFFSET_Z;
  502.         }
  503.         case MOVE_LEFT:
  504.         {
  505.             X = CP[0]-OFFSET_Y;
  506.             Y = CP[1]+OFFSET_X;
  507.             Z = CP[2];
  508.         }
  509.         case MOVE_RIGHT:
  510.         {
  511.             X = CP[0]+OFFSET_Y;
  512.             Y = CP[1]-OFFSET_X;
  513.             Z = CP[2];
  514.         }
  515.         case MOVE_BACK_LEFT:
  516.         {
  517.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  518.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  519.             Z = CP[2]-OFFSET_Z;
  520.         }
  521.         case MOVE_BACK_RIGHT:
  522.         {
  523.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  524.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  525.             Z = CP[2]-OFFSET_Z;
  526.         }
  527.         case MOVE_FORWARD_LEFT:
  528.         {
  529.             X = CP[0]+(OFFSET_X  - OFFSET_Y);
  530.             Y = CP[1]+(OFFSET_Y  + OFFSET_X);
  531.             Z = CP[2]+OFFSET_Z;
  532.         }
  533.         case MOVE_FORWARD_RIGHT:
  534.         {
  535.             X = CP[0]+(OFFSET_X  + OFFSET_Y);
  536.             Y = CP[1]+(OFFSET_Y  - OFFSET_X);
  537.             Z = CP[2]+OFFSET_Z;
  538.         }
  539.     }
  540. }
  541. //--------------------------------------------------
  542.  
  543. stock CancelFlyMode(playerid)
  544. {
  545.     DeletePVar(playerid, "FlyMode");
  546.     IsCreating[playerid] = false;
  547.     CancelEdit(playerid);
  548.     TogglePlayerSpectating(playerid, false);
  549.  
  550.     DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  551.     noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  552.     IsCreating[playerid] = false;
  553.     IsReSettingStart[playerid] = false;
  554.     IsReSettingEnd[playerid] = false;
  555.     SettingFirstLoc[playerid] = false;
  556.     SettingLastLoc[playerid] = false;
  557.     return 1;
  558. }
  559.  
  560. //--------------------------------------------------
  561.  
  562. stock FlyMode(playerid)
  563. {
  564.     new Float:X, Float:Y, Float:Z;
  565.     IsCreating[playerid] = true;
  566.     SettingFirstLoc[playerid] = true;
  567.     GetPlayerPos(playerid, X, Y, Z);
  568.     noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  569.     TogglePlayerSpectating(playerid, true);
  570.     AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  571.  
  572.     SetPVarInt(playerid, "FlyMode", 1);
  573.     noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  574.     SendClientMessage(playerid, -1, "You entered the camera movement editor.");
  575.     SendClientMessage(playerid, -1, "With {F58282}~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~ and ~k~~GO_RIGHT~{FFFFFF} you can move the camera.");
  576.     SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to save the camera's position as the {F58282}start {FFFFFF}position.");
  577.     return 1;
  578. }
  579.  
  580. IsNumeric(szInput[]) {
  581.     new iChar, i = 0;
  582.     while ((iChar = szInput[i++])) if (!('0' <= iChar <= '9')) return 0;
  583.     return 1;
  584. }
Add Comment
Please, Sign In to add comment