Advertisement
Guest User

Dron_Turbo

a guest
Jan 13th, 2014
802
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 25.92 KB | None | 0 0
  1. /*
  2.  
  3.              _____           _     _
  4.             |  __ \         | |   (_)
  5.             | |  | |_ __ ___| |__  _ _ __
  6.             | |  | | '__/ _ \ '_ \| | '_ \
  7.             | |__| | | |  __/ |_) | | | | |
  8.             |_____/|_|  \___|_.__/|_|_| |_|
  9.                         ©2012
  10.                        
  11.                         v 1.1
  12.  
  13. */
  14. #define FILTERSCRIPT
  15.  
  16. #include <a_samp>
  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. const Float:fScale = 5.0;
  40. new MenuTimer;
  41. new Float:fPX, Float:fPY, Float:fPZ,
  42.             Float:fVX, Float:fVY, Float:fVZ,
  43.             Float:object_x, Float:object_y, Float:object_z;
  44. new bool:IsCreating[MAX_PLAYERS]        = false;
  45. new bool:IsReSettingStart[MAX_PLAYERS]  = false;
  46. new bool:IsReSettingEnd[MAX_PLAYERS]    = false;
  47. new bool:SettingFirstLoc[MAX_PLAYERS]   = false;
  48. new bool:SettingLastLoc[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.     SettingFirstLoc[playerid]           = false;
  115.     SettingLastLoc[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.     if(IsCreating[playerid] == false) SendClientMessage(playerid, -1, "Наберите /cameditor, чтобы открыть редактор передвижения камеры.");
  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"))
  134.             {
  135.                 CancelFlyMode(playerid);
  136.                 IsCreating[playerid] = false;
  137.             }
  138.             else FlyMode(playerid);
  139.         }
  140.         return 1;
  141.     }
  142.     if(!strcmp(cmdtext, "/closecameditor", true))
  143.     {
  144.         if(IsCreating[playerid])
  145.         {
  146.             CancelFlyMode(playerid);
  147.             IsCreating[playerid] = false;
  148.             noclipdata[playerid][cameramode]    = CAMERA_MODE_NONE;
  149.             noclipdata[playerid][lrold]         = 0;
  150.             noclipdata[playerid][udold]         = 0;
  151.             noclipdata[playerid][mode]          = 0;
  152.             noclipdata[playerid][lastmove]      = 0;
  153.             noclipdata[playerid][accelmul]      = 0.0;
  154.             IsCreating[playerid]                = false;
  155.             IsReSettingStart[playerid]          = false;
  156.             IsReSettingEnd[playerid]            = false;
  157.             SettingFirstLoc[playerid]           = false;
  158.             SettingLastLoc[playerid]            = false;
  159.             IsCamMoving[playerid]               = false;
  160.             coordInfo[playerid][MoveSpeed]      = 1000;
  161.             coordInfo[playerid][RotSpeed]       = 1000;
  162.             SendClientMessage(playerid, -1, "Вы вышли из редактора передвижения камеры.");
  163.         }
  164.         else SendClientMessage(playerid, -1, "Вы не используете редактор передвижения камеры.");
  165.         return 1;
  166.     }
  167.     return 0;
  168. }
  169.  
  170. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  171. {
  172.     if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))
  173.     {
  174.         if(IsCreating[playerid] == true)
  175.         {
  176.             if(SettingFirstLoc[playerid] == true)
  177.             {
  178.                 const Float:fScale = 5.0;
  179.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  180.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  181.                 object_x = fPX + floatmul(fVX, fScale);
  182.                 object_y = fPY + floatmul(fVY, fScale);
  183.                 object_z = fPZ + floatmul(fVZ, fScale);
  184.                 coordInfo[playerid][StartX]         = fPX;
  185.                 coordInfo[playerid][StartY]         = fPY;
  186.                 coordInfo[playerid][StartZ]         = fPZ;
  187.                 coordInfo[playerid][StartLookX]     = object_x;
  188.                 coordInfo[playerid][StartLookY]     = object_y;
  189.                 coordInfo[playerid][StartLookZ]     = object_z;
  190.                 if(IsReSettingStart[playerid] == true)
  191.                 {
  192.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Стартовая позиция {8EFF8E}изменена.");
  193.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  194.                     IsReSettingStart[playerid]      = false;
  195.                     IsReSettingEnd[playerid]        = false;
  196.                     SettingFirstLoc[playerid]       = false;
  197.                     SettingLastLoc[playerid]        = false;
  198.                 }
  199.                 else
  200.                 {
  201.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Стартовая позиция {8EFF8E}установлена.");
  202.                     SendClientMessage(playerid, -1, "Используйте {F58282}ОГОНЬ(ЛКМ){FFFFFF},чтобы сохранить позицию камеры, как {F58282}конечную {FFFFFF}позицию.");
  203.                     SettingLastLoc[playerid] = true;
  204.                     SettingFirstLoc[playerid] = false;
  205.                 }
  206.             }
  207.             else if(SettingLastLoc[playerid] == true)
  208.             {
  209.                 const Float:fScale = 5.0;
  210.                 new string[512];
  211.                 format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}передвижения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  212.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Скорость передвижения", string,"Ок","Отмена");
  213.                 GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  214.                 GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  215.                 object_x = fPX + floatmul(fVX, fScale);
  216.                 object_y = fPY + floatmul(fVY, fScale);
  217.                 object_z = fPZ + floatmul(fVZ, fScale);
  218.                 coordInfo[playerid][EndX]           = fPX;
  219.                 coordInfo[playerid][EndY]           = fPY;
  220.                 coordInfo[playerid][EndZ]           = fPZ;
  221.                 coordInfo[playerid][EndLookX]       = object_x;
  222.                 coordInfo[playerid][EndLookY]       = object_y;
  223.                 coordInfo[playerid][EndLookZ]       = object_z;
  224.                 if(IsReSettingEnd[playerid] == true)
  225.                 {
  226.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Конечная позиция {8EFF8E}изменена.");
  227.                     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  228.                     IsReSettingStart[playerid]      = false;
  229.                     IsReSettingEnd[playerid]        = false;
  230.                     SettingFirstLoc[playerid]       = false;
  231.                     SettingLastLoc[playerid]        = false;
  232.                 }
  233.                 else
  234.                 {
  235.                     SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Конечная позиция {8EFF8E}установлена.");
  236.                     SettingLastLoc[playerid] = false;
  237.                 }
  238.             }
  239.         }
  240.     }
  241.     return 1;
  242. }
  243.  
  244. public OnPlayerUpdate(playerid)
  245. {
  246.     if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
  247.     {
  248.         new keys,ud,lr;
  249.         GetPlayerKeys(playerid,keys,ud,lr);
  250.  
  251.         if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
  252.         {
  253.             MoveCamera(playerid);
  254.         }
  255.         if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
  256.         {
  257.             if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0){
  258.                 StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
  259.                 noclipdata[playerid][mode]      = 0;
  260.                 noclipdata[playerid][accelmul]  = 0.0;
  261.             }
  262.             else
  263.             {
  264.                 noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
  265.                 MoveCamera(playerid);
  266.             }
  267.         }
  268.         noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
  269.         return 0;
  270.     }
  271.     return 1;
  272. }
  273.  
  274. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  275. {
  276.     switch(dialogid)
  277.     {
  278.         case DIALOG_MENU:
  279.         {
  280.             if(response)
  281.             {
  282.                 switch(listitem)
  283.                 {
  284.                     case 0: //Preview
  285.                     {
  286.                         PreviewMovement(playerid);
  287.                     }
  288.                     case 1: //Change start
  289.                     {
  290.                         DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  291.                         IsReSettingEnd[playerid]    = false;
  292.                         SettingLastLoc[playerid]    = false;
  293.                         IsReSettingStart[playerid] = true;
  294.                         SettingFirstLoc[playerid]  = true;
  295.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], 0.0, 0.0, 0.0);
  296.                         TogglePlayerSpectating(playerid, true);
  297.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  298.                         SetPVarInt(playerid, "FlyMode", 1);
  299.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  300.                         SendClientMessage(playerid, -1, "Используйте {F58282}ОГОНЬ(ЛКМ) {FFFFFF},чтобы установить новую {F58282}стартовую {FFFFFF}позицию.");
  301.                     }
  302.                     case 2: //Change end
  303.                     {
  304.                         DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  305.                         IsReSettingStart[playerid]  = false;
  306.                         SettingFirstLoc[playerid]   = false;
  307.                         IsReSettingEnd[playerid] = true;
  308.                         SettingLastLoc[playerid] = true;
  309.                         IsCreating[playerid]     = true;
  310.                         SetCameraBehindPlayer(playerid);
  311.                         noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ], 0.0, 0.0, 0.0);
  312.                         TogglePlayerSpectating(playerid, true);
  313.                         AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  314.                         SetPVarInt(playerid, "FlyMode", 1);
  315.                         noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  316.                         SendClientMessage(playerid, -1, "Используйте {F58282}ОГОНЬ(ЛКМ) {FFFFFF},чтобы установить новую {F58282}конечную {FFFFFF}позицию.");
  317.                     }
  318.                     case 3: //Change speed
  319.                     {
  320.                         new string[512];
  321.                         format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}передвижения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  322.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Скорость передвижения", string,"Ок","Отмена");
  323.                     }
  324.                     case 4: //Export
  325.                     {
  326.                         ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Сохранение","Введите название:","Ок","Отмена");
  327.                     }
  328.                 }
  329.             }
  330.             else
  331.             {
  332.                 CancelFlyMode(playerid);
  333.                 SendClientMessage(playerid, -1, "Вы вышли из редактора передвижения камеры.");
  334.                 IsCreating[playerid] = false;
  335.             }
  336.         }
  337.      case DIALOG_MOVE_SPEED:
  338.         {
  339.             if(response)
  340.             {
  341.                 if(strlen(inputtext))
  342.                 {
  343.                     if(IsNumeric(inputtext))
  344.                     {
  345.                         coordInfo[playerid][MoveSpeed] = strval(inputtext);
  346.                         new string[512];
  347.                         format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}вращения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\n{F58282}Примечание: {a9c4e4}1 секунда = 1000 милисекунд", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  348.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Скорость вращения", string,"Ок","Отмена");
  349.                         IsReSettingStart[playerid] = false;
  350.                         IsReSettingEnd[playerid]   = false;
  351.                     }
  352.                     else
  353.                     {
  354.                         new string[512];
  355.                         format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}передвижения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд\nТолько числа!", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  356.                         ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Скорость передвижения", string,"Ок","Отмена");
  357.                     }
  358.                 }
  359.                 else
  360.                 {
  361.                     new string[512];
  362.                     format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}передвижения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд\nВы не ввели значение!", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  363.                     ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Скорость передвижения", string,"Ок","Отмена");
  364.                 }
  365.             }
  366.             else
  367.             {
  368.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  369.             }
  370.         }
  371.         case DIALOG_ROT_SPEED:
  372.         {
  373.             if(response)
  374.             {
  375.                 if(strlen(inputtext))
  376.                 {
  377.                     if(IsNumeric(inputtext))
  378.                     {
  379.                         coordInfo[playerid][RotSpeed] = strval(inputtext);
  380.                         ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  381.                         IsReSettingStart[playerid] = false;
  382.                         IsReSettingEnd[playerid]   = false;
  383.                     }
  384.                     else
  385.                     {
  386.                         new string[512];
  387.                         format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}вращения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд\nТолько числа!", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  388.                         ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Скорость вращения", string,"Ок","Отмена");
  389.                     }
  390.                 }
  391.                 else
  392.                 {
  393.                     new string[512];
  394.                     format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}вращения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд\nВы не ввели значение!", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  395.                     ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Скорость вращения", string,"Ок","Отмена");
  396.                 }
  397.             }
  398.             else
  399.             {
  400.                 new string[512];
  401.                 format(string, sizeof(string), "Пожалуйста введите нужное время {F58282}передвижения{a9c4e4} в милисекундах\n\nТекущая скорость передвижения: \t{F58282}%i милисекунд\n{a9c4e4}Текущая скорость вращения: \t{F58282}%i милисекунд\n\n\nПримечание: {a9c4e4}1 секунда = 1000 милисекунд", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]);
  402.                 ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Скорость передвижения",string,"Ок","Отмена");
  403.             }
  404.         }
  405.         case DIALOG_EXPORTNAME:
  406.         {
  407.             if(response)
  408.             {
  409.                 if(strlen(inputtext))
  410.                 {
  411.                     ExportMovement(playerid, inputtext);
  412.                 }
  413.                 else
  414.                 {
  415.                     ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Сохранение","Введите название:\n{ff0000}Вы не ввели название!","Ок","Отмена");
  416.                 }
  417.             }
  418.             else
  419.             {
  420.                 ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  421.             }
  422.         }
  423.         case DIALOG_CLOSE_NEW:
  424.         {
  425.             if(response)
  426.             {
  427.                 IsCreating[playerid]      = true;
  428.                 SettingFirstLoc[playerid] = true;
  429.                 FlyMode(playerid);
  430.             }
  431.             else
  432.             {
  433.                 SendClientMessage(playerid, -1, "Вы вышли из редактора передвижения камеры.");
  434.                 CancelFlyMode(playerid);
  435.                 IsCreating[playerid] = false;
  436.             }
  437.         }
  438.     }
  439.     return 1;
  440. }
  441.  
  442. forward ShowPlayerMenu(playerid);
  443. public ShowPlayerMenu(playerid)
  444. {
  445.     KillTimer(MenuTimer);
  446.     IsCamMoving[playerid] = false;
  447.     ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Следующий шаг?","Предосмотр\nИзменить старт\nИзменить конец\nИзменить скорость\nСохранить","Ок","Отмена");
  448.     return 1;
  449. }
  450.  
  451. forward PreviewMovement(playerid);
  452. public PreviewMovement(playerid)
  453. {
  454.     IsCamMoving[playerid] = true;
  455.     DestroyObject(noclipdata[playerid][flyobject]);
  456.     SetCameraBehindPlayer(playerid);
  457.     if(coordInfo[playerid][MoveSpeed] > coordInfo[playerid][RotSpeed])
  458.         MenuTimer = SetTimerEx("ShowPlayerMenu", coordInfo[playerid][MoveSpeed], 0, "i", playerid);
  459.     else
  460.         MenuTimer = SetTimerEx("ShowPlayerMenu", coordInfo[playerid][RotSpeed], 0, "i", playerid);
  461.     InterpolateCameraPos(playerid, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]);
  462.     InterpolateCameraLookAt(playerid, coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]);
  463.     return 1;
  464. }
  465.  
  466. forward ExportMovement(playerid, inputtext[]);
  467. public ExportMovement(playerid, inputtext[])
  468. {
  469.     new tagstring[64];
  470.     new movestring[512];
  471.     new rotstring[512];
  472.     new filename[50];
  473.     format(filename, 128, "CamEdit_%s.txt", inputtext);
  474.     format(tagstring, sizeof(tagstring), "|----------%s----------|\r\n", inputtext);
  475.     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]);
  476.     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]);
  477.     new File:File = fopen(filename, io_write);
  478.     fwrite(File, tagstring);
  479.     fwrite(File, movestring);
  480.     fwrite(File, rotstring);
  481.     fclose(File);
  482.     new myOutpString[256];
  483.     format(myOutpString, sizeof(myOutpString), "Передвижения камеры сохранились под {F58282}%s {a9c4e4}в папке scriptfiles!\n\nЧто вы хотите делать дальше?", filename);
  484.     ShowPlayerDialog(playerid, DIALOG_CLOSE_NEW, DIALOG_STYLE_MSGBOX,"Что дальше?",myOutpString,"Создать","Выход");
  485. }
  486.  
  487. stock GetMoveDirectionFromKeys(ud, lr)
  488. {
  489.     new direction = 0;
  490.  
  491.     if(lr < 0)
  492.     {
  493.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;
  494.         else if(ud > 0) direction = MOVE_BACK_LEFT;
  495.         else            direction = MOVE_LEFT;
  496.     }
  497.     else if(lr > 0)
  498.     {
  499.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;
  500.         else if(ud > 0) direction = MOVE_BACK_RIGHT;
  501.         else            direction = MOVE_RIGHT;
  502.     }
  503.     else if(ud < 0)     direction = MOVE_FORWARD;
  504.     else if(ud > 0)     direction = MOVE_BACK;
  505.  
  506.     return direction;
  507. }
  508.  
  509. //--------------------------------------------------
  510.  
  511. stock MoveCamera(playerid)
  512. {
  513.     new Float:FV[3], Float:CP[3];
  514.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);
  515.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
  516.     if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
  517.     new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
  518.     new Float:X, Float:Y, Float:Z;
  519.     GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
  520.     MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
  521.     noclipdata[playerid][lastmove] = GetTickCount();
  522.     return 1;
  523. }
  524.  
  525. //--------------------------------------------------
  526.  
  527. stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  528. {
  529.     #define OFFSET_X (FV[0]*6000.0)
  530.     #define OFFSET_Y (FV[1]*6000.0)
  531.     #define OFFSET_Z (FV[2]*6000.0)
  532.     switch(move_mode)
  533.     {
  534.         case MOVE_FORWARD:
  535.         {
  536.             X = CP[0]+OFFSET_X;
  537.             Y = CP[1]+OFFSET_Y;
  538.             Z = CP[2]+OFFSET_Z;
  539.         }
  540.         case MOVE_BACK:
  541.         {
  542.             X = CP[0]-OFFSET_X;
  543.             Y = CP[1]-OFFSET_Y;
  544.             Z = CP[2]-OFFSET_Z;
  545.         }
  546.         case MOVE_LEFT:
  547.         {
  548.             X = CP[0]-OFFSET_Y;
  549.             Y = CP[1]+OFFSET_X;
  550.             Z = CP[2];
  551.         }
  552.         case MOVE_RIGHT:
  553.         {
  554.             X = CP[0]+OFFSET_Y;
  555.             Y = CP[1]-OFFSET_X;
  556.             Z = CP[2];
  557.         }
  558.         case MOVE_BACK_LEFT:
  559.         {
  560.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  561.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  562.             Z = CP[2]-OFFSET_Z;
  563.         }
  564.         case MOVE_BACK_RIGHT:
  565.         {
  566.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  567.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  568.             Z = CP[2]-OFFSET_Z;
  569.         }
  570.         case MOVE_FORWARD_LEFT:
  571.         {
  572.             X = CP[0]+(OFFSET_X  - OFFSET_Y);
  573.             Y = CP[1]+(OFFSET_Y  + OFFSET_X);
  574.             Z = CP[2]+OFFSET_Z;
  575.         }
  576.         case MOVE_FORWARD_RIGHT:
  577.         {
  578.             X = CP[0]+(OFFSET_X  + OFFSET_Y);
  579.             Y = CP[1]+(OFFSET_Y  - OFFSET_X);
  580.             Z = CP[2]+OFFSET_Z;
  581.         }
  582.     }
  583. }
  584. //--------------------------------------------------
  585.  
  586. stock CancelFlyMode(playerid)
  587. {
  588.     DeletePVar(playerid, "FlyMode");
  589.     CancelEdit(playerid);
  590.     TogglePlayerSpectating(playerid, false);
  591.     DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
  592.     noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
  593.     IsReSettingStart[playerid]  = false;
  594.     IsReSettingEnd[playerid]    = false;
  595.     SettingFirstLoc[playerid]   = false;
  596.     SettingLastLoc[playerid]    = false;
  597.     return 1;
  598. }
  599.  
  600. //--------------------------------------------------
  601.  
  602. stock FlyMode(playerid)
  603. {
  604.     new Float:X, Float:Y, Float:Z;
  605.     IsCreating[playerid] = true;
  606.     SettingFirstLoc[playerid] = true;
  607.     GetPlayerPos(playerid, X, Y, Z);
  608.     noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
  609.     TogglePlayerSpectating(playerid, true);
  610.     AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
  611.  
  612.     SetPVarInt(playerid, "FlyMode", 1);
  613.     noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
  614.     SendClientMessage(playerid, -1, "Вы вошли в редактор перемещения камеры.");
  615.     SendClientMessage(playerid, -1, "Вы можете использовать /closecameditor чтобы закрыть его.");
  616.     SendClientMessage(playerid, -1, "При помощи {F58282}W, S, A and D{FFFFFF} вы можете перемещать камеру.");
  617.     SendClientMessage(playerid, -1, "Используйте {F58282}ОГОНЬ(ЛКМ) {FFFFFF},чтобы сохранить позицию камеры, как {F58282}стартовую {FFFFFF}позицию.");
  618.     return 1;
  619. }
  620.  
  621. IsNumeric(szInput[]) {
  622.     new iChar, i = 0;
  623.     while ((iChar = szInput[i++])) if (!('0' <= iChar <= '9')) return 0;
  624.     return 1;
  625. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement