DrebinN

Drebins Cam Editor v1.1 (y_ini version)

Apr 6th, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 21.88 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. #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. new MenuTimer;
  39. new Float:fPX, Float:fPY, Float:fPZ,
  40.     Float:fVX, Float:fVY, Float:fVZ,
  41.     Float:object_x, Float:object_y, Float:object_z;
  42. const Float:fScale                      = 5.0;
  43. new bool:IsCreating[MAX_PLAYERS]        = false;
  44. new bool:IsReSettingStart[MAX_PLAYERS]  = false;
  45. new bool:IsReSettingEnd[MAX_PLAYERS]    = false;
  46. new bool:SettingStartLoc[MAX_PLAYERS]   = false;
  47. new bool:SettingEndLoc[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.     SettingStartLoc[playerid]           = false;
  114.     SettingEndLoc[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.     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")) CancelFlyMode(playerid);
  133.             else FlyMode(playerid);
  134.         }
  135.         return 1;
  136.     }
  137.     return 0;
  138. }
  139.  
  140. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  141. {
  142.     if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))
  143.     {
  144.         if(IsCreating[playerid] == true)
  145.         {
  146.             if(SettingStartLoc[playerid] == true)
  147.             {
  148.                 const Float:fScale = 5.0;
  149.                 SettingStartLoc[playerid] = false;
  150.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  151.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  152.                 object_x = fPX + floatmul(fVX, fScale);
  153.                 object_y = fPY + floatmul(fVY, fScale);
  154.                 object_z = fPZ + floatmul(fVZ, fScale);
  155.                 coordInfo[playerid][StartX] = fPX;
  156.                 coordInfo[playerid][StartY] = fPY;
  157.                 coordInfo[playerid][StartZ] = fPZ;
  158.                 coordInfo[playerid][StartLookX] = object_x;
  159.                 coordInfo[playerid][StartLookY] = object_y;
  160.                 coordInfo[playerid][StartLookZ] = object_z;
  161.                 if(IsReSettingStart[playerid] == true)
  162.                 {
  163.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Start position {8EFF8E}re-set.");
  164.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  165.                     IsReSettingStart[playerid] = false;
  166.                     IsReSettingEnd[playerid] = false;
  167.                     SettingEndLoc[playerid] = false;
  168.                 }
  169.                 else
  170.                 {
  171.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Start position {8EFF8E}set.");
  172.                     SendClientMessage(playerid, -1, "Now use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to save the camera's position as the {F58282}end {FFFFFF}position.");
  173.                     SettingEndLoc[playerid] = true;
  174.                 }
  175.             }
  176.             else if(SettingEndLoc[playerid] == true)
  177.             {
  178.                 const Float:fScale = 5.0;
  179.                 SettingEndLoc[playerid] = false;
  180.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  181.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  182.                 object_x = fPX + floatmul(fVX, fScale);
  183.                 object_y = fPY + floatmul(fVY, fScale);
  184.                 object_z = fPZ + floatmul(fVZ, fScale);
  185.                 coordInfo[playerid][EndX] = fPX;
  186.                 coordInfo[playerid][EndY] = fPY;
  187.                 coordInfo[playerid][EndZ] = fPZ;
  188.                 coordInfo[playerid][EndLookX] = object_x;
  189.                 coordInfo[playerid][EndLookY] = object_y;
  190.                 coordInfo[playerid][EndLookZ] = object_z;
  191.                 if(IsReSettingEnd[playerid] == true)
  192.                 {
  193.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} End position {8EFF8E}re-set.");
  194.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  195.                     IsReSettingStart[playerid] = false;
  196.                     IsReSettingEnd[playerid] = false;
  197.                     SettingStartLoc[playerid] = false;
  198.                 }
  199.                 else
  200.                 {
  201.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} End position {8EFF8E}set.");
  202.                     new myOutpString[512];
  203.                     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]);
  204.                     ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", myOutpString,"Ok","Cancel");
  205.                 }
  206.             }
  207.         }
  208.     }
  209.     return 1;
  210. }
  211.  
  212. public OnPlayerUpdate(playerid)
  213. {
  214.     if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  215.     {
  216.         new keys,ud,lr;
  217.         GetPlayerKeys(playerid,keys,ud,lr);
  218.  
  219.         if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  220.         {
  221.             MoveCamera(playerid);
  222.         }
  223.         if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  224.         {
  225.             if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
  226.             {
  227.                 StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  228.                 noclipdata[playerid][mode]      = 0;
  229.                 noclipdata[playerid][accelmul]  = 0.0;
  230.             }
  231.             else
  232.             {
  233.                 noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  234.                 MoveCamera(playerid);
  235.             }
  236.         }
  237.         noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
  238.         return 0;
  239.     }
  240.     return 1;
  241. }
  242.  
  243. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  244. {
  245.     switch(dialogid)
  246.     {
  247.         case DIALOG_MENU:
  248.         {
  249.             if(response)
  250.             {
  251.                 switch(listitem)
  252.                 {
  253.                     case 0: //Preview
  254.                     {
  255.                         PreviewMovement(playerid);
  256.                     }
  257.                     case 1: //Change start
  258.                     {
  259.                         CancelFlyMode(playerid);
  260.                         IsReSettingStart[playerid] = true;
  261.                         SettingStartLoc[playerid] = true;
  262.                         IsCreating[playerid] = true;
  263.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], 0.0, 0.0, 0.0);
  264.                         TogglePlayerSpectating(playerid, true);
  265.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  266.                         SetPVarInt(playerid, "FlyMode", 1);
  267.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  268.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}start {FFFFFF}position.");
  269.                     }
  270.                     case 2: //Change end
  271.                     {
  272.                         CancelFlyMode(playerid);
  273.                         IsReSettingEnd[playerid] = true;
  274.                         SettingEndLoc[playerid] = true;
  275.                         IsCreating[playerid] = true;
  276.                         SetCameraBehindPlayer(playerid);
  277.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ], 0.0, 0.0, 0.0);
  278.                         TogglePlayerSpectating(playerid, true);
  279.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  280.                         SetPVarInt(playerid, "FlyMode", 1);
  281.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  282.                         SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to set a new {F58282}end {FFFFFF}position.");
  283.                     }
  284.                     case 3: //Change speed
  285.                     {
  286.                         new myOutpString[512];
  287.                         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]);
  288.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", myOutpString,"Ok","Cancel");
  289.                     }
  290.                     case 4: //Export
  291.                     {
  292.                         ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Save movement","Enter a name for the movement","Ok","Cancel");
  293.                     }
  294.                 }
  295.             }
  296.             else
  297.             {
  298.                 CancelFlyMode(playerid);
  299.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  300.             }
  301.         }
  302.      case DIALOG_MOVE_SPEED:
  303.         {
  304.             if(response)
  305.             {
  306.                 if(strlen(inputtext))
  307.                 {
  308.                     if(IsNumeric(inputtext))
  309.                     {
  310.                         coordInfo[playerid][MoveSpeed] = strval(inputtext);
  311.                         new myOutpString[512];
  312.                         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]);
  313.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", myOutpString,"Ok","Cancel");
  314.                         IsReSettingStart[playerid] = false;
  315.                         IsReSettingEnd[playerid] = false;
  316.                     }
  317.                     else
  318.                     {
  319.                         new myOutpString[512];
  320.                         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]);
  321.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", myOutpString,"Ok","Cancel");
  322.                     }
  323.                 }
  324.                 else
  325.                 {
  326.                     new myOutpString[512];
  327.                     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]);
  328.                     ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", myOutpString,"Ok","Cancel");
  329.                 }
  330.             }
  331.             else
  332.             {
  333.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  334.             }
  335.         }
  336.         case DIALOG_ROT_SPEED:
  337.         {
  338.             if(response)
  339.             {
  340.                 if(strlen(inputtext))
  341.                 {
  342.                     if(IsNumeric(inputtext))
  343.                     {
  344.                         coordInfo[playerid][RotSpeed] = strval(inputtext);
  345.                         ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  346.                         IsReSettingStart[playerid] = false;
  347.                         IsReSettingEnd[playerid] = false;
  348.                     }
  349.                     else
  350.                     {
  351.                         new myOutpString[512];
  352.                         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]);
  353.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", myOutpString,"Ok","Cancel");
  354.                     }
  355.                 }
  356.                 else
  357.                 {
  358.                     new myOutpString[512];
  359.                     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]);
  360.                     ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotation Speed", myOutpString,"Ok","Cancel");
  361.                 }
  362.             }
  363.             else
  364.             {
  365.                 new myOutpString[512];
  366.                 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]);
  367.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed",myOutpString,"Ok","Cancel");
  368.             }
  369.         }
  370.         case DIALOG_EXPORTNAME:
  371.         {
  372.             if(response)
  373.             {
  374.                 if(strlen(inputtext))
  375.                 {
  376.                     ExportMovement(playerid, inputtext);
  377.                 }
  378.                 else
  379.                 {
  380.                     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");
  381.                 }
  382.             }
  383.             else
  384.             {
  385.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  386.             }
  387.         }
  388.         case DIALOG_CLOSE_NEW:
  389.         {
  390.             CancelFlyMode(playerid);
  391.             if(response)
  392.             {
  393.                 IsCreating[playerid] = true;
  394.                 SettingStartLoc[playerid] = true;
  395.                 FlyMode(playerid);
  396.             }
  397.             else
  398.             {
  399.                 SendClientMessage(playerid, -1, "You exited the camera movement editor.");
  400.             }
  401.         }
  402.     }
  403.     return 1;
  404. }
  405.  
  406. forward ShowPlayerMenu(playerid);
  407. public ShowPlayerMenu(playerid)
  408. {
  409.     KillTimer(MenuTimer);
  410.     IsCamMoving[playerid] = false;
  411.     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Next step?","Preview Movement\nChange Start\nChange End\nChange Speed\nSave","Ok","Cancel");
  412.     return 1;
  413. }
  414.  
  415. forward PreviewMovement(playerid);
  416. public PreviewMovement(playerid)
  417. {
  418.     IsCamMoving[playerid] = true;
  419.     DestroyObject(noclipdata[playerid][flyobject]);
  420.     SetCameraBehindPlayer(playerid);
  421.     if(coordInfo[playerid][MoveSpeed] > coordInfo[playerid][RotSpeed])
  422.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][MoveSpeed], 0);
  423.     else
  424.         MenuTimer = SetTimer("ShowPlayerMenu", coordInfo[playerid][RotSpeed], 0);
  425.     InterpolateCameraPos(playerid, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]);
  426.     InterpolateCameraLookAt(playerid, coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]);
  427.     return 1;
  428. }
  429.  
  430. forward ExportMovement(playerid, inputtext[]);
  431. public ExportMovement(playerid, inputtext[])
  432. {
  433.     new movestring[512];
  434.     new rotstring[512];
  435.     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]);
  436.     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]);
  437.     new INI:ini = INI_Open("CameraMovements.txt");
  438.     INI_SetTag(ini, inputtext);
  439.     INI_WriteString(ini, "Movement", movestring);
  440.     INI_WriteString(ini, "Rotation", rotstring);
  441.     INI_Close(ini);
  442.     new string[256];
  443.     format(string, sizeof(string), "Camera movements saved under {F58282}%s {a9c4e4}to the CameraMovements.txt!\n\nWhat do you want to do next?", inputtext);
  444.     ShowPlayerDialog(playerid, DIALOG_CLOSE_NEW, DIALOG_STYLE_MSGBOX,"What next?",string,"Create new","Exit");
  445. }
  446.  
  447. stock GetMoveDirectionFromKeys(ud, lr)
  448. {
  449.     new direction = 0;
  450.  
  451.     if(lr < 0)
  452.     {
  453.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;  // Up & Left key pressed
  454.         else if(ud > 0) direction = MOVE_BACK_LEFT;     // Back & Left key pressed
  455.         else            direction = MOVE_LEFT;          // Left key pressed
  456.     }
  457.     else if(lr > 0)     // Right pressed
  458.     {
  459.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;  // Up & Right key pressed
  460.         else if(ud > 0) direction = MOVE_BACK_RIGHT;     // Back & Right key pressed
  461.         else            direction = MOVE_RIGHT;          // Right key pressed
  462.     }
  463.     else if(ud < 0)     direction = MOVE_FORWARD;   // Up key pressed
  464.     else if(ud > 0)     direction = MOVE_BACK;      // Down key pressed
  465.  
  466.     return direction;
  467. }
  468.  
  469. //--------------------------------------------------
  470.  
  471. stock MoveCamera(playerid)
  472. {
  473.     new Float:FV[3], Float:CP[3];
  474.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);          //  Cameras position in space
  475.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);  //  Where the camera is looking at
  476.     if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  477.     new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  478.     new Float:X, Float:Y, Float:Z;
  479.     GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  480.     MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  481.     noclipdata[playerid][lastmove] = GetTickCount();
  482.     return 1;
  483. }
  484.  
  485. //--------------------------------------------------
  486.  
  487. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  488. {
  489.     #define OFFSET_X (FV[0]*6000.0)
  490.     #define OFFSET_Y (FV[1]*6000.0)
  491.     #define OFFSET_Z (FV[2]*6000.0)
  492.     switch(move_mode)
  493.     {
  494.         case MOVE_FORWARD:
  495.         {
  496.             X = CP[0]+OFFSET_X;
  497.             Y = CP[1]+OFFSET_Y;
  498.             Z = CP[2]+OFFSET_Z;
  499.         }
  500.         case MOVE_BACK:
  501.         {
  502.             X = CP[0]-OFFSET_X;
  503.             Y = CP[1]-OFFSET_Y;
  504.             Z = CP[2]-OFFSET_Z;
  505.         }
  506.         case MOVE_LEFT:
  507.         {
  508.             X = CP[0]-OFFSET_Y;
  509.             Y = CP[1]+OFFSET_X;
  510.             Z = CP[2];
  511.         }
  512.         case MOVE_RIGHT:
  513.         {
  514.             X = CP[0]+OFFSET_Y;
  515.             Y = CP[1]-OFFSET_X;
  516.             Z = CP[2];
  517.         }
  518.         case MOVE_BACK_LEFT:
  519.         {
  520.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  521.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  522.             Z = CP[2]-OFFSET_Z;
  523.         }
  524.         case MOVE_BACK_RIGHT:
  525.         {
  526.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  527.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  528.             Z = CP[2]-OFFSET_Z;
  529.         }
  530.         case MOVE_FORWARD_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_FORWARD_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.     }
  543. }
  544. //--------------------------------------------------
  545.  
  546. stock CancelFlyMode(playerid)
  547. {
  548.     DeletePVar(playerid, "FlyMode");
  549.     IsCreating[playerid] = false;
  550.     CancelEdit(playerid);
  551.     TogglePlayerSpectating(playerid, false);
  552.  
  553.     DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  554.     noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  555.     IsCreating[playerid] = false;
  556.     IsReSettingStart[playerid] = false;
  557.     IsReSettingEnd[playerid] = false;
  558.     SettingStartLoc[playerid] = false;
  559.     SettingEndLoc[playerid] = false;
  560.     return 1;
  561. }
  562.  
  563. //--------------------------------------------------
  564.  
  565. stock FlyMode(playerid)
  566. {
  567.     new Float:X, Float:Y, Float:Z;
  568.     IsCreating[playerid] = true;
  569.     SettingStartLoc[playerid] = true;
  570.     GetPlayerPos(playerid, X, Y, Z);
  571.     noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  572.     TogglePlayerSpectating(playerid, true);
  573.     AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  574.  
  575.     SetPVarInt(playerid, "FlyMode", 1);
  576.     noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  577.     SendClientMessage(playerid, -1, "You entered the camera movement editor.");
  578.     SendClientMessage(playerid, -1, "With {F58282}~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~ and ~k~~GO_RIGHT~{FFFFFF} you can move the camera.");
  579.     SendClientMessage(playerid, -1, "Use {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}to save the camera's position as the {F58282}start {FFFFFF}position.");
  580.     return 1;
  581. }
  582.  
  583. IsNumeric(szInput[]) {
  584.     new iChar, i = 0;
  585.     while ((iChar = szInput[i++])) if (!('0' <= iChar <= '9')) return 0;
  586.     return 1;
  587. }
Advertisement
Add Comment
Please, Sign In to add comment