DrebinN

Drebins Cam Editor v1.1 (dini version)

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