DrebinN

Cameditor Dini 1.1.2

Apr 7th, 2012
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 21.86 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 <dini>
  16.  
  17. #define MOVE_SPEED              100.0
  18. #define ACCEL_RATE              0.03
  19.  
  20. #define CAMERA_MODE_NONE        0
  21. #define CAMERA_MODE_FLY         1
  22.  
  23. #define MOVE_FORWARD            1
  24. #define MOVE_BACK               2
  25. #define MOVE_LEFT               3
  26. #define MOVE_RIGHT              4
  27. #define MOVE_FORWARD_LEFT       5
  28. #define MOVE_FORWARD_RIGHT      6
  29. #define MOVE_BACK_LEFT          7
  30. #define MOVE_BACK_RIGHT         8
  31.  
  32. #define DIALOG_MENU 1678
  33. #define DIALOG_MOVE_SPEED 1679
  34. #define DIALOG_ROT_SPEED 1680
  35. #define DIALOG_EXPORTNAME 1681
  36. #define DIALOG_CLOSE_NEW 1682
  37.  
  38. const Float:fScale = 5.0;
  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. new bool:IsCreating[MAX_PLAYERS]        = false;
  44. new bool:IsReSettingStart[MAX_PLAYERS]  = false;
  45. new bool:IsReSettingEnd[MAX_PLAYERS]    = false;
  46. new bool:SettingFirstLoc[MAX_PLAYERS]   = false;
  47. new bool:SettingLastLoc[MAX_PLAYERS]    = false;
  48. new bool:IsCamMoving[MAX_PLAYERS]       = false;
  49.  
  50. enum noclipenum
  51. {
  52.     cameramode,
  53.     flyobject,
  54.     mode,
  55.     lrold,
  56.     udold,
  57.     lastmove,
  58.     Float:accelmul
  59. }
  60. new noclipdata[MAX_PLAYERS][noclipenum];
  61.  
  62. enum Coordinates
  63. {
  64.     Float:StartX,
  65.     Float:StartY,
  66.     Float:StartZ,
  67.     Float:EndX,
  68.     Float:EndY,
  69.     Float:EndZ,
  70.     Float:StartLookX,
  71.     Float:StartLookY,
  72.     Float:StartLookZ,
  73.     Float:EndLookX,
  74.     Float:EndLookY,
  75.     Float:EndLookZ,
  76.     MoveSpeed,
  77.     RotSpeed
  78. }
  79. new coordInfo[MAX_PLAYERS][Coordinates];
  80.  
  81. #if defined FILTERSCRIPT
  82.  
  83. public OnFilterScriptInit()
  84. {
  85.     print("\n--------------------------------------");
  86.     print(" CamEditor by Drebin");
  87.     print("--------------------------------------\n");
  88.     return 1;
  89. }
  90.  
  91. public OnFilterScriptExit()
  92. {
  93.     for(new x; x<MAX_PLAYERS; x++)
  94.     {
  95.         if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
  96.     }
  97.     return 1;
  98. }
  99.  
  100. #endif
  101.  
  102. public OnPlayerConnect(playerid)
  103. {
  104.     noclipdata[playerid][cameramode]    = CAMERA_MODE_NONE;
  105.     noclipdata[playerid][lrold]         = 0;
  106.     noclipdata[playerid][udold]         = 0;
  107.     noclipdata[playerid][mode]          = 0;
  108.     noclipdata[playerid][lastmove]      = 0;
  109.     noclipdata[playerid][accelmul]      = 0.0;
  110.     IsCreating[playerid]                = false;
  111.     IsReSettingStart[playerid]          = false;
  112.     IsReSettingEnd[playerid]            = false;
  113.     SettingFirstLoc[playerid]           = false;
  114.     SettingLastLoc[playerid]            = false;
  115.     IsCamMoving[playerid]               = false;
  116.     coordInfo[playerid][MoveSpeed]      = 1000;
  117.     coordInfo[playerid][RotSpeed]       = 1000;
  118.     return 1;
  119. }
  120.  
  121. public OnPlayerSpawn(playerid)
  122. {
  123.     if(IsCreating[playerid] == false) SendClientMessage(playerid, -1, "Type /cameditor to open the camera movement editor");
  124. }
  125.  
  126. public OnPlayerCommandText(playerid, cmdtext[])
  127. {
  128.     if(!strcmp(cmdtext, "/cameditor", true))
  129.     {
  130.         if(IsCamMoving[playerid] == false)
  131.         {
  132.             if(GetPVarType(playerid, "FlyMode"))
  133.             {
  134.                 CancelFlyMode(playerid);
  135.                 IsCreating[playerid] = false;
  136.             }
  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.                         DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  265.                         IsReSettingEnd[playerid]    = false;
  266.                         SettingLastLoc[playerid]    = false;
  267.                         IsReSettingStart[playerid] = true;
  268.                         SettingFirstLoc[playerid]  = true;
  269.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], 0.0, 0.0, 0.0);
  270.                         TogglePlayerSpectating(playerid, true);
  271.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  272.                         SetPVarInt(playerid, "FlyMode", 1);
  273.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  274.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}start {FFFFFF}position.");
  275.                     }
  276.                     case 2: //Change end
  277.                     {
  278.                         DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  279.                         IsReSettingStart[playerid]  = false;
  280.                         SettingFirstLoc[playerid]   = false;
  281.                         IsReSettingEnd[playerid] = true;
  282.                         SettingLastLoc[playerid] = true;
  283.                         IsCreating[playerid]     = true;
  284.                         SetCameraBehindPlayer(playerid);
  285.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ], 0.0, 0.0, 0.0);
  286.                         TogglePlayerSpectating(playerid, true);
  287.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  288.                         SetPVarInt(playerid, "FlyMode", 1);
  289.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  290.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}end {FFFFFF}position.");
  291.                     }
  292.                     case 3: //Change speed
  293.                     {
  294.                         new string[512];
  295.                         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]);
  296.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  297.                     }
  298.                     case 4: //Export
  299.                     {
  300.                         ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Save movement","Enter a name for the movement","Ok","Cancel");
  301.                     }
  302.                 }
  303.             }
  304.             else
  305.             {
  306.                 CancelFlyMode(playerid);
  307.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  308.                 IsCreating[playerid] = false;
  309.             }
  310.         }
  311.      case DIALOG_MOVE_SPEED:
  312.         {
  313.             if(response)
  314.             {
  315.                 if(strlen(inputtext))
  316.                 {
  317.                     if(IsNumeric(inputtext))
  318.                     {
  319.                         coordInfo[playerid][MoveSpeed] = strval(inputtext);
  320.                         new string[512];
  321.                         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]);
  322.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  323.                         IsReSettingStart[playerid] = false;
  324.                         IsReSettingEnd[playerid]   = false;
  325.                     }
  326.                     else
  327.                     {
  328.                         new string[512];
  329.                         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]);
  330.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  331.                     }
  332.                 }
  333.                 else
  334.                 {
  335.                     new string[512];
  336.                     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]);
  337.                     ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel");
  338.                 }
  339.             }
  340.             else
  341.             {
  342.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  343.             }
  344.         }
  345.         case DIALOG_ROT_SPEED:
  346.         {
  347.             if(response)
  348.             {
  349.                 if(strlen(inputtext))
  350.                 {
  351.                     if(IsNumeric(inputtext))
  352.                     {
  353.                         coordInfo[playerid][RotSpeed] = strval(inputtext);
  354.                         ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  355.                         IsReSettingStart[playerid] = false;
  356.                         IsReSettingEnd[playerid]   = false;
  357.                     }
  358.                     else
  359.                     {
  360.                         new string[512];
  361.                         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]);
  362.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  363.                     }
  364.                 }
  365.                 else
  366.                 {
  367.                     new string[512];
  368.                     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]);
  369.                     ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", string,"Ok","Cancel");
  370.                 }
  371.             }
  372.             else
  373.             {
  374.                 new string[512];
  375.                 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]);
  376.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed",string,"Ok","Cancel");
  377.             }
  378.         }
  379.         case DIALOG_EXPORTNAME:
  380.         {
  381.             if(response)
  382.             {
  383.                 if(strlen(inputtext))
  384.                 {
  385.                     ExportMovement(playerid, inputtext);
  386.                 }
  387.                 else
  388.                 {
  389.                     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");
  390.                 }
  391.             }
  392.             else
  393.             {
  394.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  395.             }
  396.         }
  397.         case DIALOG_CLOSE_NEW:
  398.         {
  399.             if(response)
  400.             {
  401.                 IsCreating[playerid]      = true;
  402.                 SettingFirstLoc[playerid] = true;
  403.                 FlyMode(playerid);
  404.             }
  405.             else
  406.             {
  407.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  408.                 CancelFlyMode(playerid);
  409.                 IsCreating[playerid] = false;
  410.             }
  411.         }
  412.     }
  413.     return 1;
  414. }
  415.  
  416. forward ShowPlayerMenu(playerid);
  417. public ShowPlayerMenu(playerid)
  418. {
  419.     KillTimer(MenuTimer);
  420.     IsCamMoving[playerid] = false;
  421.     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  422.     return 1;
  423. }
  424.  
  425. forward PreviewMovement(playerid);
  426. public PreviewMovement(playerid)
  427. {
  428.     IsCamMoving[playerid] = true;
  429.     DestroyObject(noclipdata[playerid][flyobject]);
  430.     SetCameraBehindPlayer(playerid);
  431.     if(coordInfo[playerid][MoveSpeed] > coordInfo[playerid][RotSpeed])
  432.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][MoveSpeed], 0);
  433.     else
  434.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][RotSpeed], 0);
  435.     InterpolateCameraPos(playerid, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]);
  436.     InterpolateCameraLookAt(playerid, coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]);
  437.     return 1;
  438. }
  439.  
  440. forward ExportMovement(playerid, inputtext[]);
  441. public ExportMovement(playerid, inputtext[])
  442. {
  443.     new tagstring[64];
  444.     new movestring[512];
  445.     new rotstring[512];
  446.     format(tagstring, sizeof(tagstring), "|----------%s----------|\r\n", inputtext);
  447.     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]);
  448.     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]);
  449.     new File:File = fopen("CameraMovements.txt", io_write);
  450.     fwrite(File, tagstring);
  451.     fwrite(File, movestring);
  452.     fwrite(File, rotstring);
  453.     fclose(File);
  454.     new myOutpString[256];
  455.     format(myOutpString, sizeof(myOutpString), "Camera movements saved under {F58282}%s {a9c4e4}to the CameraMovements.txt!\n\nWhat do you want to do next?", inputtext);
  456.     ShowPlayerDialog(playerid, DIALOG_CLOSE_NEW, DIALOG_STYLE_MSGBOX,"What next?",myOutpString,"Create new","Exit");
  457. }
  458.  
  459. stock GetMoveDirectionFromKeys(ud, lr)
  460. {
  461.     new direction = 0;
  462.  
  463.     if(lr < 0)
  464.     {
  465.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;
  466.         else if(ud > 0) direction = MOVE_BACK_LEFT;
  467.         else            direction = MOVE_LEFT;
  468.     }
  469.     else if(lr > 0)
  470.     {
  471.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;
  472.         else if(ud > 0) direction = MOVE_BACK_RIGHT;
  473.         else            direction = MOVE_RIGHT;
  474.     }
  475.     else if(ud < 0)     direction = MOVE_FORWARD;
  476.     else if(ud > 0)     direction = MOVE_BACK;
  477.  
  478.     return direction;
  479. }
  480.  
  481. //--------------------------------------------------
  482.  
  483. stock MoveCamera(playerid)
  484. {
  485.     new Float:FV[3], Float:CP[3];
  486.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  487.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  488.     if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  489.     new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  490.     new Float:X, Float:Y, Float:Z;
  491.     GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  492.     MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  493.     noclipdata[playerid][lastmove] = GetTickCount();
  494.     return 1;
  495. }
  496.  
  497. //--------------------------------------------------
  498.  
  499. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  500. {
  501.     #define OFFSET_X (FV[0]*6000.0)
  502.     #define OFFSET_Y (FV[1]*6000.0)
  503.     #define OFFSET_Z (FV[2]*6000.0)
  504.     switch(move_mode)
  505.     {
  506.         case MOVE_FORWARD:
  507.         {
  508.             X = CP[0]+OFFSET_X;
  509.             Y = CP[1]+OFFSET_Y;
  510.             Z = CP[2]+OFFSET_Z;
  511.         }
  512.         case MOVE_BACK:
  513.         {
  514.             X = CP[0]-OFFSET_X;
  515.             Y = CP[1]-OFFSET_Y;
  516.             Z = CP[2]-OFFSET_Z;
  517.         }
  518.         case MOVE_LEFT:
  519.         {
  520.             X = CP[0]-OFFSET_Y;
  521.             Y = CP[1]+OFFSET_X;
  522.             Z = CP[2];
  523.         }
  524.         case MOVE_RIGHT:
  525.         {
  526.             X = CP[0]+OFFSET_Y;
  527.             Y = CP[1]-OFFSET_X;
  528.             Z = CP[2];
  529.         }
  530.         case MOVE_BACK_LEFT:
  531.         {
  532.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  533.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  534.             Z = CP[2]-OFFSET_Z;
  535.         }
  536.         case MOVE_BACK_RIGHT:
  537.         {
  538.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  539.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  540.             Z = CP[2]-OFFSET_Z;
  541.         }
  542.         case MOVE_FORWARD_LEFT:
  543.         {
  544.             X = CP[0]+(OFFSET_X  - OFFSET_Y);
  545.             Y = CP[1]+(OFFSET_Y  + OFFSET_X);
  546.             Z = CP[2]+OFFSET_Z;
  547.         }
  548.         case MOVE_FORWARD_RIGHT:
  549.         {
  550.             X = CP[0]+(OFFSET_X  + OFFSET_Y);
  551.             Y = CP[1]+(OFFSET_Y  - OFFSET_X);
  552.             Z = CP[2]+OFFSET_Z;
  553.         }
  554.     }
  555. }
  556. //--------------------------------------------------
  557.  
  558. stock CancelFlyMode(playerid)
  559. {
  560.     DeletePVar(playerid, "FlyMode");
  561.     CancelEdit(playerid);
  562.     TogglePlayerSpectating(playerid, false);
  563.     DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  564.     noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  565.     IsReSettingStart[playerid]  = false;
  566.     IsReSettingEnd[playerid]    = false;
  567.     SettingFirstLoc[playerid]   = false;
  568.     SettingLastLoc[playerid]    = false;
  569.     return 1;
  570. }
  571.  
  572. //--------------------------------------------------
  573.  
  574. stock FlyMode(playerid)
  575. {
  576.     new Float:X, Float:Y, Float:Z;
  577.     IsCreating[playerid] = true;
  578.     SettingFirstLoc[playerid] = true;
  579.     GetPlayerPos(playerid, X, Y, Z);
  580.     noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  581.     TogglePlayerSpectating(playerid, true);
  582.     AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  583.  
  584.     SetPVarInt(playerid, "FlyMode", 1);
  585.     noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  586.     SendClientMessage(playerid, -1, "You entered the camera movement editor.");
  587.     SendClientMessage(playerid, -1, "With {F58282}~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~ and ~k~~GO_RIGHT~{FFFFFF} you can move the camera.");
  588.     SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to save the camera's position as the {F58282}start {FFFFFF}position.");
  589.     return 1;
  590. }
  591.  
  592. IsNumeric(szInput[]) {
  593.     new iChar, i = 0;
  594.     while ((iChar = szInput[i++])) if (!('0' <= iChar <= '9')) return 0;
  595.     return 1;
  596. }
Advertisement
Add Comment
Please, Sign In to add comment