====== Функции игрового движка ====== ===== get_response ===== **Краткое описание:**\\ Возвращает готовую строку из пакета отправленного сервером клиенту. Получить ответ от сервера в специальном формате строки.\\ **Использование:** get_response( flag ) **Обязательные аргументы:** * 1 : (integer -- число) ===== createFileRecovery ===== **Краткое описание:**\\ Создает служебный файл игрового движка\\ **Использование:** -- Восстановление настроек запуска движка function goRecovery() ... -- Создание файла после некорректного выхода cl_exec( "createFileRecovery", "../cache.dat" ) end Создает файл в данном случае **cache.dat** с текстом внутри: recoveryMode=1 **Обязательные аргументы:** * 1 : <имя файла> (строка) ===== declareRecovery ===== **Краткое описание:**\\ Сообщает игровому движку о файле\\ cl_exec( "declareRecovery", "../cache.dat" ) **Обязательные аргументы:** * 1 : <имя файла> (строка) ===== getRecoveryFile ===== **Краткое описание:**\\ Получает назначенный файл от игрового движка cl_exec( "getRecoveryFile" ) ===== wait ===== **Краткое описание:**\\ Создает временную задержку в миллисекундах\\ **Пример использования:** cl_exec( "wait", 100 ) **Обязательные аргументы:** * 1 : <длительность> (мс) ===== yield ===== **Краткое описание:**\\ Создает в потоке временную задержку (используется для снижения нагрузки на процессор)\\ **Пример использования:** cl_exec( "yield" ) ===== quitApp ===== **Краткое описание:**\\ Игровой движок завершает работу. Выход из приложения\\ **Пример использования:** cl_exec( "quitApp" ) ===== existsFile ===== **Краткое описание:**\\ Возвращает **true** или **false** при проверке на существование файла\\ **Пример использования:** cl_exec( "existsFile", filename ) **Обязательные аргументы:** * 1 : <имя файла> (строка) ===== msg ===== **Краткое описание:**\\ Создает диалоговое окно с вопросом и отработкой кнопок\\ **Пример использования:** cl_exec( "msg", "Предыдущий запуск: MotionEngine завершился некорректно.\nЗапустить в безопасном режиме?\n\nЭто рекомендуется сделать большинству пользователей.", "Запустить в безопасном режиме?", "MB_YESNOCANCEL", "MB_ICONWARNING" ) **Полный пример использования:** -- Создание MessageBox messagebox = cl_exec( "msg", "Предыдущий запуск: MotionEngine завершился некорректно.\nЗапустить в безопасном режиме?\n\nЭто рекомендуется сделать большинству пользователей.", "Запустить в безопасном режиме?", "MB_YESNOCANCEL", "MB_ICONWARNING" ) -- 6, 7, 2 if(cl_exec( "getMsgID", messagebox ) == "IDYES") then cl_exec( "deleteFile", cl_exec( "getRecoveryFile" ) ) end if(cl_exec( "getMsgID", messagebox ) == "IDNO") then cl_exec( "deleteFile", cl_exec( "getRecoveryFile" ) ) end if(cl_exec( "getMsgID", messagebox ) == "IDCANCEL") then end кусок кода из C++ (согласно: [[https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox|https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox]]) // Кнопки #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_CANCELTRYCONTINUE 0x00000006L #define MB_HELP 0x00004000L #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_RETRYCANCEL 0x00000005L #define MB_YESNO 0x00000004L #define MB_YESNOCANCEL 0x00000003L // Иконки #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONWARNING 0x00000030L #define MB_ICONINFORMATION 0x00000040L #define MB_ICONASTERISK 0x00000040L #define MB_ICONQUESTION 0x00000020L #define MB_ICONSTOP 0x00000010L #define MB_ICONERROR 0x00000010L #define MB_ICONHAND 0x00000010L **Обязательные аргументы:** * 1 : <текст> (строка) * 2 : <заголовок окна> (строка) * 3 : <кнопки> (строка) * 4 : <иконка> (строка) ===== getMsgID ===== **Краткое описание:**\\ Возвращает строку. Преобразует число в ID события\\ **Пример использования:** cl_exec( "getMsgID", messagebox ) **Может возвращать** * 1 **IDOK** * 2 **IDCANCEL** * 3 **IDABORT** * 4 **IDRETRY** * 5 **IDIGNORE** * 6 **IDYES** * 17 **IDNO** * 10 **IDTRYAGAIN** * 11 **IDCONTINUE** **Обязательные аргументы:** * 1 : (integer -- число) Ответ от диалогового окна ===== readTable ===== **Краткое описание:**\ Аналог стандартной функции **require** ([[#require]]). Для подключения модулей в отдельных потоках.\\ **Пример создания таблицы:** local ServerType = { name = "ExampleServer", version = "1.0" } function ServerType:greet() print( "Hello from " .. self.name ) end function ServerType:greet2() print( "Test from " .. self.name ) end return ServerType **Пример использования таблицы:** local ServerType = cl_exec( "readTable" , "mp._servertype" ) for k, v in pairs( ServerType ) do print( "Key:", k, "Value:", v ) end **Обязательные аргументы:** * 1 : <имя файла> (строка). Путь вместо **'**/**'**, пишется точка. ===== joinServer ===== **Краткое описание:**\\ Подключение к серверу, указывается IP-адрес и порт.\\ **Возвращает integer:** * 0 -- если не указан IP-адрес сервера для подключения * 1 -- если IP-адрес был указан и модуль сетевой готов подключится **Пример использования:** cl_exec( "joinServer", "192.168.138.128", 28600 ) **Обязательные аргументы:** * 1 : (строка). * 2 : (integer -- число). ===== disconnect ===== **Краткое описание:**\\ Производит отключение от сервера.\\ **Пример использования:** cl_exec( "disconnect" ) **Примечание**\\ Рекомендуем использовать внутри условия [[#isActiveServer]], что активно подключение к серверу if cl_exec( "isActiveServer" ) then -- тут end ===== createPacket ===== **Краткое описание:**\\ Создает и отправляет пакет серверу\\ **Пример использования:** cl_exec( "createPacket", flag, int_table( _serverType, "LOW" ), "getPosition()" ) **Обязательные аргументы:** * 1 : <тип> (integer -- число). Тип пакета * 2 : <критичность> (integer -- число). Критичность пакета * 3 : <контент> (строка). Текст пакета **Примечание**\\ Рекомендуем использовать внутри условия [[#isActiveServer]] if cl_exec( "isActiveServer" ) then -- тут end ===== getActivePlayer ===== **Краткое описание:**\\ Возвращает текущего игрока (за которого мы играем!) а именно его ID в модуле сервера\\ **Пример использования:** cl_exec( "getActivePlayer" ) **Примечание**\\ Рекомендуем использовать внутри условия [[#isActiveServer]]. Возвращать функция может ID строку либо пустая строка. if cl_exec( "isActiveServer" ) then -- тут end ===== isActiveServer ===== **Краткое описание:**\\ Возвращает: * 0 -- если нет соединенися с сервером * 1 -- если уже подключены к серверу **Пример использования:** if cl_exec( "isActiveServer" ) then ... end ===== PropsLoading ===== **Краткое описание:**\\ Задает режим игровому движку. Используется для создания новых объектов моделей на сцене. **Функция устаревшая (не понятно работает или нет)**\\ **Пример использования:** cl_exec( "PropsLoading", ) **Обязательные аргументы:** * 1 : (число). (0 -- начать работу с объектами или 1 -- закончить работу с объектами) ===== PropRemove ===== **Краткое описание:**\\ Добавляет в список для дальнейшего удаления объекта. После добавления необходимо произвести удаление с помощью функции [[#PropProcessRemove]] **Пример использования:** cl_exec( "PropRemove", "db07dc8054b761be7db7e22227cc2787" ) **Обязательные аргументы:** * 1 : (строка). Указывается ID созданного объекта который на сцене ===== PropProcessRemove ===== **Краткое описание:**\\ Удаляет объекты со сцены. Смотрите функцию [[#PropProcessRemove]]\\ **Пример использования:** cl_exec( "PropProcessRemove" ) ===== propCreate ===== **Краткое описание:**\\ Добавляет в список для дальнейшего создания объекта. После добавления необходимо произвести создание моделей с помощью функции [[#propProcessCreate]]. Функция возвращает ID нового объекта.\\ **Пример использования:**\\ Создается одна модель: * задается в список * производится процесс создания модели на сцене modelpic = cl_exec( "propCreate", 0, -- слой foundFile[i], -- файл mep-модели "", -- скин "0.0;0.0;0.0", -- позиция XYZ "-90.0;0.0;90.0", -- поворот XYZ 0.1 -- масштаб ) cl_exec( "propProcessCreate" ) **Обязательные аргументы:** * 1 : (integer -- число). слой у сцены (начинается с 0) * 2 : (строка). Указывается имя файла mep-модели * 3 : (строка). Указывается имя файла скина .mtx * 4 : (строка). позиция в формате: X;Y;Z * 5 : (строка). поворот в формате: X;Y;Z * 6 : (float -- число с плавающей точкой). Масштаб объекта ===== propCreateId ===== **Краткое описание:**\\ Добавляет в список для дальнейшего создания объекта. После добавления необходимо произвести создание моделей с помощью функции [[#propProcessCreate]]. Существует другой аналог функции [[#propCreateId]], [[#propCreate]] которая возвращает случайный ID новой 3д-модели\\ **Пример использования:**\\ Создается одна модель: * задается в список * производится процесс создания модели на сцене cl_exec( "propCreateId", 0, -- слой "db07dc8054b761be7db7e22227cc2787", -- id-объекта "bed_05.mep", -- файл mep-модели "bed_03_blanket.ME2.s0.mtx", -- скин "0.0;0.0;0.0", -- позиция XYZ "-90.0;0.0;90.0", -- поворот XYZ 0.1 -- масштаб ) cl_exec( "propProcessCreate" ) **Обязательные аргументы:** * 1 : (integer -- число). слой у сцены (начинается с 0) * 2 : (строка). Указывается имя файла mep-модели * 3 : (строка). Указывается имя файла скина .mtx * 4 : (строка). позиция в формате: X;Y;Z * 5 : (строка). поворот в формате: X;Y;Z * 6 : (float -- число с плавающей точкой). Масштаб объекта ===== propProcessCreate ===== **Краткое описание:**\\ Создает объекты на сцене. Смотрите функцию [[#propCreate]] и [[#propCreateId]]\\ **Пример использования:** cl_exec( "propProcessCreate" ) ===== propTransform ===== **Краткое описание:**\\ Изменяет трансформацию объекта на сцене\\ **Пример использования:** cl_exec( "propTransform", "db07dc8054b761be7db7e22227cc2787", string.format("%.2f;%.2f;%.2f", self.x, (self.y-230), self.z), string.format("%.2f;%.2f;%.2f", -90.0, 0.0, ((-self.yaw)+180)), "0.1;0.1;0.1" ) **Обязательные аргументы:** * 1 : (строка). ID-объекта на сцене * 2 : (строка). Позиция в формате: X;Y;Z * 3 : (строка). Поворот в формате: X;Y;Z * 4 : (строка). Масштаб в формате: X;Y;Z ===== goScreenshot ===== **Краткое описание:**\\ Создает скриншот игрового движка\\ **Пример использования:** cl_exec( "goScreenshot", 0 ) **Обязательные аргументы:** * 1 : (integer -- число). * если 0, то сохранение в файл идёт ../screenshot<порядковый номер скриншота>.png * если 1, то сохраняется в base64 кодировке вывести можно код функцией [[#getScreenshotData]] ===== getScreenshotData ===== **Краткое описание:** Возвращает строку с данными base64 созданного скриншота (ранее создан с помощью [[#goScreenshot]])\\ **Пример использования:** scrnData = cl_exec( "getScreenshotData" ) ===== camera_origin ===== **Краткое описание:** Задает местоположение камеры\\ **Пример использования:** cl_exec( "camera_origin", 0.0, 0.0, 0.0 ) **Обязательные аргументы:** * 1 : (float -- число с плавающей точкой). * 2 : (float -- число с плавающей точкой). * 3 : (float -- число с плавающей точкой). ===== camera_angles ===== **Краткое описание:** Задает углы камеры\\ **Пример использования:** cl_exec( "camera_angles", 90.0, 60.0 ) **Обязательные аргументы:** * 1 : (float -- число с плавающей точкой) поворот 0 -> 360 градусов. * 2 : (float -- число с плавающей точкой) наклон -90 -> 90 градусов. ===== camera_freeze ===== **Краткое описание:** Задает заморозку камеры\\ **Пример использования:** cl_exec( "camera_freeze", 1 ) **Обязательные аргументы:** * 1 : 1 включено, 0 выключено. ===== camera_zoom ===== **Краткое описание:** Задает заморозку камеры\\ **Пример использования:** cl_exec( "camera_zoom", 45.0 ) **Обязательные аргументы:** * 1 : приближение камеры. ===== camera_speed ===== **Краткое описание:** Задает заморозку камеры\\ **Пример использования:** cl_exec( "camera_speed", 5.0 ) **Обязательные аргументы:** * 1 : скорость полета камеры. ===== camera_sensitivity ===== **Краткое описание:** Задает заморозку камеры\\ **Пример использования:** cl_exec( "camera_sensitivity", 0.1 ) **Обязательные аргументы:** * 1 : чувствительность камеры. ===== camera_getX ===== **Краткое описание:** Возвращает позицию X камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getX" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getY ===== **Краткое описание:** Возвращает позицию Y камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getY" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getZ ===== **Краткое описание:** Возвращает позицию Z камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getZ" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getYaw ===== **Краткое описание:** Возвращает Yaw (поворот) камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getYaw" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getPitch ===== **Краткое описание:** Возвращает Pitch (наклон) камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getPitch" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getFreeze ===== **Краткое описание:** Возвращает состояние заморозки камеры в формате числа (integer)\\ **Пример использования:** cl_exec( "camera_getFreeze" ) > если произошла ошибка, возвращается -1 значение ===== camera_getZoom ===== **Краткое описание:** Возвращает значение приближения камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getZoom" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getSpeed ===== **Краткое описание:** Возвращает скорость полета камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getSpeed" ) > если произошла ошибка, возвращается -1.0 значение ===== camera_getSensitivity ===== **Краткое описание:** Возвращает чувствительность камеры в формате числа с плавающей точкой (float)\\ **Пример использования:** cl_exec( "camera_getSensitivity" ) > если произошла ошибка, возвращается -1.0 значение ===== player_forward ===== **Краткое описание:** Выполняет перемещение камеры вперед игрока\\ **Пример использования:** cl_exec( "player_forward" ) ===== player_backward ===== **Краткое описание:** Выполняет перемещение камеры назад игрока\\ **Пример использования:** cl_exec( "player_backward" ) **Пример использования в скриптах:** if keyboard:getKey("GLFW_KEY_UP", "GLFW_PRESS") then cl_exec( "player_forward" ) end if keyboard:getKey("GLFW_KEY_DOWN", "GLFW_PRESS") then cl_exec( "player_backward" ) end if keyboard:getKey("GLFW_KEY_LEFT", "GLFW_PRESS") then cl_exec( "player_left" ) end if keyboard:getKey("GLFW_KEY_RIGHT", "GLFW_PRESS") then cl_exec( "player_right" ) end ===== player_left ===== **Краткое описание:** Выполняет перемещение камеры влево игрока\\ **Пример использования:** cl_exec( "player_left" ) ===== player_right ===== **Краткое описание:** Выполняет перемещение камеры вправо игрока\\ **Пример использования:** cl_exec( "player_right" ) ===== player_jump ===== **Краткое описание:** Выполняет перемещение камеры прыжок игрока\\ **Пример использования:** cl_exec( "player_jump" ) ===== physics_is ===== **Краткое описание:** Возвращает работает ли в данный момент сцена PhysX\\ **Пример использования:** local physics = cl_exec( "physics_is" ) ===== physics_start ===== **Краткое описание:** Запуск сцены в PhysX\\ **Пример использования:** cl_exec( "physics_start" ) ===== physics_stop ===== **Краткое описание:** Остановить сцену в PhysX\\ **Пример использования:** cl_exec( "physics_stop" ) ===== physics_debug ===== **Краткое описание:** Включить/Выключить отладчик в PhysX\\ **Пример использования:** cl_exec( "physics_debug", 1 ) **Обязательные аргументы:** * 1 : параметр 1 или 0 для включения-выключения отладчика. ====== Транспорт ====== ===== vehicle_create ===== **Краткое описание:**\\ Создает автомобиль на координатах позиции и вращения, возвращает айди созданного автомобиля\\ **пример настроек в файле [[/me/config/vehicle|тут]]**\\ **Использование:** local carId = cl_exec( "vehicle_create", "../Contents/cfg/vehicle_kubel.json", 0.0, (2.0+0.5+1.0)*2, 0.0, 0, 0, 0) **Обязательные аргументы:** * 1 : файл настроек автомобиля * 2 : (float -- число с плавающей точкой) * 3 : * 4 : * 5 : (float -- число с плавающей точкой) * 6 : * 7 : ===== vehicle_camera ===== **Краткое описание:**\\ Задает настройки камеры слежения за автомобилем. Рекомендуем применять функцию перед командой vehicle_enter, для предварительной подготовки камеры к работе\\ **пример настроек в файле [[/me/config/vehicle_camera|тут]]**\\ **Использование:** cl_exec( "vehicle_camera", "../Contents/cfg/vehicle_kubel_cam.json") **Обязательные аргументы:** * 1 : файл настроек камеры ===== vehicle_destroy ===== **Краткое описание:**\\ Удаляет автомобиль по айди\\ **Использование:** cl_exec( "vehicle_destroy", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_is ===== **Краткое описание:**\\ Проверяет существует ли автомобиль по айди\\ **Использование:** cl_exec( "vehicle_is", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_originX ===== **Краткое описание:**\\ Получить позицию автомобиля по X\\ **Использование:** local x = cl_exec( "vehicle_originX", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_originY ===== **Краткое описание:**\\ Получить позицию автомобиля по Y\\ **Использование:** local y = cl_exec( "vehicle_originY", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_originZ ===== **Краткое описание:**\\ Получить позицию автомобиля по Z\\ **Использование:** local z = cl_exec( "vehicle_originZ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_rotationX ===== **Краткое описание:**\\ Получить поворот автомобиля по X\\ **Использование:** local rx = cl_exec( "vehicle_rotationX", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_rotationY ===== **Краткое описание:**\\ Получить поворот автомобиля по Y\\ **Использование:** local ry = cl_exec( "vehicle_rotationY", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_rotationZ ===== **Краткое описание:**\\ Получить поворот автомобиля по Z\\ **Использование:** local rz = cl_exec( "vehicle_rotationZ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_teleport ===== **Краткое описание:**\\ Телепортировать на конкретную координату автомобиль\\ **Использование:** cl_exec( "vehicle_teleport", 2, 150, 10, 10) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля (если значение -1, то игрок выходит из машины) * 2 : позиция X для телепортирования * 3 : позиция Y для телепортирования * 4 : позиция Z для телепортирования ===== vehicle_rotate ===== **Краткое описание:**\\ Вращать автомобиль по X,Y,Z\\ **Использование:** cl_exec( "vehicle_rotate", 2, 0, 0, 90) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля (если значение -1, то игрок выходит из машины) * 2 : поворот X для телепортирования * 3 : поворот Y для телепортирования * 4 : поворот Z для телепортирования ===== vehicle_enter ===== **Краткое описание:**\\ Игрок садится в указанный автомобиль\\ **Использование:** cl_exec( "vehicle_enter", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля (если значение -1, то игрок выходит из машины) ===== vehicle_driveType ===== **Краткое описание:**\\ Задать динамически привод колес, значения: 0 - задний, 1 - передний, 2 - 4x4\\ **Использование:** cl_exec( "vehicle_driveType", 2, 0) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля * 2 : тип привода 0, 1, 2 ===== vehicle_getDriveType ===== **Краткое описание:**\\ Возвращает значение привода: 0 - задний, 1 - передний, 2 - 4x4\\ **Использование:** cl_exec( "vehicle_getDriveType ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_wheelOrigin ===== **Краткое описание:**\\ Задать позицию колеса\\ **Использование:** cl_exec( "vehicle_wheelOrigin", 2, 0, -100.0, 0.0, -100.5) cl_exec( "vehicle_wheelOrigin", 2, 1, 100.0, 0.0, -100.5) cl_exec( "vehicle_wheelOrigin", 2, 2, -100.0, 0.0, 100.5) cl_exec( "vehicle_wheelOrigin", 2, 3, 100.0, 0.0, 100.5) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля * 2 : айди колеса 0-3 * 3: позиция X * 4: позиция Y * 5: позиция Z ===== vehicle_chassis ===== **Краткое описание:**\\ Создать или изменить созданное шасси\\ **Использование:** cl_exec( "vehicle_chassis", 2, -100.0, 0.0, -100.5, 50) Если необходимо изменить только высоту от земли до шасси: cl_exec( "vehicle_chassis", 2, -1, -1, -1, 50) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля * 2: размер X * 3: размер Y * 4: размер Z * 5 : высота от земли до шасси ===== vehicle_modelOffset ===== **Краткое описание:**\\ Задать локальную позицию в машине (для создания кузова 3д-моделью)\\ **Использование:** cl_exec( "vehicle_modelOffset", 2, 0.5, 0.2, 0.0) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля * 2: позиция X * 3: позиция Y * 4: позиция Z ===== vehicle_ModelX ===== **Краткое описание:**\\ Получить позицию модель-автомобиля по X\\ **Использование:** local x = cl_exec( "vehicle_ModelX", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_ModelY ===== **Краткое описание:**\\ Получить позицию модель-автомобиля по Y\\ **Использование:** local y = cl_exec( "vehicle_ModelY", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_ModelZ ===== **Краткое описание:**\\ Получить позицию модель-автомобиля по Z\\ **Использование:** local z = cl_exec( "vehicle_ModelZ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_ModelRX ===== **Краткое описание:**\\ Получить поворот модель-автомобиля по X\\ **Использование:** local rx = cl_exec( "vehicle_ModelRX", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_ModelRY ===== **Краткое описание:**\\ Получить поворот модель-автомобиля по Y\\ **Использование:** local ry = cl_exec( "vehicle_ModelRY", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_ModelRZ ===== **Краткое описание:**\\ Получить поворот модель-автомобиля по Z\\ **Использование:** local rz = cl_exec( "vehicle_ModelRZ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_getOriginCenterOfMassX ===== **Краткое описание:**\\ Возвращает координату X центра масс автомобиля\\ **Использование:** cl_exec( "vehicle_getOriginCenterOfMassX", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_getOriginCenterOfMassY ===== **Краткое описание:**\\ Возвращает координату Y центра масс автомобиля\\ **Использование:** cl_exec( "vehicle_getOriginCenterOfMassY", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ===== vehicle_getOriginCenterOfMassZ ===== **Краткое описание:**\\ Возвращает координату Z центра масс автомобиля\\ **Использование:** cl_exec( "vehicle_getOriginCenterOfMassZ", 2) **Обязательные аргументы:** * 1 : айди созданного ранее автомобиля ====== Основные функции скриптов ====== ===== print ===== **Краткое описание:** Выводит сообщение одной строкой, либо выводит строки с расстоянием между собой (похоже на табуляцию \t) но одной строкой\\ **Пример использования:**\\ обычный подход print("[Lua] Test complete.") -- вывод: -- [Lua] Test complete. вывод с помощью пробелов напоминающую табуляцию print("test1", "test2", "test3") -- вывод: -- test1 test2 test3 ===== function ===== **Краткое описание:**\\ Стандартная функция в языке программирования Lua. Можно использовать функцию как отдельный поток ([[#thread]])\\ **Пример использования:**\\ обычное объявление функции function fn1( var1 ) ... end объявление одной строкой fn1 = function(x) print(x) end **Использование:** fn1( 11122 ) ===== for как бесконечный цикл ===== **Краткое описание:**\\ В Lua для **i = 1 math.huge do** создает цикл, который повторяется бесконечно, поскольку **math.huge** представляет собой наибольшее положительное число, которое может представить Lua, фактически действуя как бесконечность.\\ **Пример использования:** for i = 1, math.huge do print("Бесконечный цикл работает...") end ===== coroutine ===== **Краткое описание:**\\ Механизм, позволяющий выполнять функции асинхронно и приостанавливать их выполнение на определённых этапах. В отличие от потоков, корутины не поддерживают параллелизм, но предоставляют удобный способ управлять асинхронным или частичным выполнением кода. * **coroutine.resume** -- запускает или возобновляет выполнение корутины. * **coroutine.yield** -- приостанавливает выполнение корутины до следующего вызова **resume**, сохраняя состояние. **Пример использования:** co1 = coroutine.create(function () tes = 1 while true do print("co1 " .. tes) tes = tes + 1 coroutine.yield() -- Приостанавливаем выполнение корутины tes = tes + 1 end end) coroutine.resume(co1) -- запуск/возобновление coroutine.resume(co1) coroutine.resume(co1) вывод: * co1 1 * co1 3 * co1 5 **Разбор примера:** -- Создаем корутину co1 = coroutine.create(function () tes = 1 -- начальное значение while true do -- бесконечный цикл print("co1 " .. tes) -- вывод: 1, 3, 5... tes = tes + 1 -- увеличиваем на 1 coroutine.yield() -- стоп, ждём resume tes = tes + 1 -- продолжаем, увеличиваем ещё на 1 end end) -- Запускаем/возобновляем корутину 3 раза coroutine.resume(co1) -- Вывод: co1 1 coroutine.resume(co1) -- Вывод: co1 3 coroutine.resume(co1) -- Вывод: co1 5 1. Выполнение **coroutine.resume(co1)** * Запуск функции: tes = 1 * вывод **"co1 1"** * tes = 2 * coroutine.yield() * остановка функции 2. Выполнение **coroutine.resume(co1)** * Продолжение после yield(): tes = 3 * вывод **"co1 3"** * tes = 4 * yield() * остановка функции 3. Выполнение **coroutine.resume(co1)** * Продолжение после yield(): tes = 5 * вывод **"co1 5"** * tes = 6 * yield() * остановка функции ===== thread ===== **Краткое описание:**\\ Создаёт отдельные последовательности выполнения кода, которые могут выполняться параллельно. Выполнение нескольких задач одновременно, существенно повышает производительность и реакцию программы. \\ **Пример использования:**\\ отдельный поток function test1() ... end -- вызов: thread( test1 ) отдельный поток с несколькими аргументами function test1( var1, var2 ) ... end -- вызов: thread( function() test1(11, 22) end ) отдельный поток с использованием бесконечного цикла function test1() while( true ) do ... yield() -- необходимо использовать задержку для избежания нагрузки на CPU end end -- вызов: thread( test1 ) **Примечание**\\ Отдельный поток не может работать со стандартным **require** ([[#require]]), альтернатива позволяет использовать таблицы ([[#readTable]]). Также не умеет работать с глобальными **metatable** (решение: локальные **metatable** можно создавать)\\ **Ошибка: при использовании require в отдельном потоке** local ServerType = require( "mp/_servertype" ) -- attempt to call a nil value (method '...') ===== require ===== **Краткое описание:**\\ Стандартная Lua функция, которая загружает модули (файлы со скриптами). Она делает следующее: * Проверяет, не был ли модуль уже загружен ранее (чтобы не загружать его дважды). * Если модуль ещё не загружен, ищет файл с именем, соответствующим переданной строке. * Выполняет этот файл. * Возвращает результат загрузки модуля. **Пример использования:**\\ Пример создания модуля для **require** с последующим созданием переменной: local TestModule = { KEY1 = 1, KEY2 = 10, KEY3 = 256 } return TestModule Создание переменной в основном скрипте local TestModule = require("mp/testmodule.lua") Подключение скрипта require("_utility") ====== Базовые функции (на основе _<скриптов>.lua) ====== ===== int_table ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Возвращает значение строки из таблицы в виде числа\\ **Пример использования:** int_table( <таблица>, <ключ> ) ... local flag = int_table( _packetType, "PLAYER" ) ... **Обязательные аргументы:** * 1 : <таблица> (таблица) * 2 : <ключ> (строка) ===== str_table ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Возвращает значение строки из таблицы\\ **Пример использования:** str_table( <таблица>, <ключ> ) ... local name = str_table( _tableTest, "PLAYER" ) ... **Обязательные аргументы:** * 1 : <таблица> (таблица) * 2 : <ключ> (строка) ===== debug_str_table ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Выводит сообщение со строкой из таблицы\\ **Пример использования:** debug_str_table( <таблица>, <ключ> ) **Обязательные аргументы:** * 1 : <таблица> (таблица) * 2 : <ключ> (строка) ===== debug_table ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Выводит сообщение со всеми ключами и значениями\\ **Пример использования:** debug_table( <таблица> ) -- вывод -- Key: Firstname Value: Mark **Обязательные аргументы:** * 1 : <таблица> (таблица) ===== add_table ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Добавление нового значения в таблицу\\ **Пример использования:** add_table( <таблица>, <ключ> ) ... add_table( players, _local ) ... **Обязательные аргументы:** * 1 : <таблица> (таблица) * 2 : <ключ> (строка) ===== player_get_pos ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Возвращает строку позиции игрока в специальном формате (используется при передаче в пакет)\\ **Пример использования:** player_get_pos( , , , , ) ... -- присваиваем координаты нашего персонажа playerCurrent = player_get_pos( camera:getPosX(), -- x camera:getPosY(), -- y camera:getPosZ(), -- z camera:getYaw(), -- поворот camera:getPitch() -- наклон ) ... **Обязательные аргументы:** * 1 : (мировая координата X) * 2 : (мировая координата Y) * 3 : (мировая координата Z) * 4 : (поворот камеры игрока) * 5 : (наклон камеры игрока) ===== wait ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Создает временную задержку в миллисекундах\\ **Пример использования:** wait( <мс> ) **Обязательные аргументы:** * 1 : <длительность> (мс) ===== yield ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Создает в потоке временную задержку (используется для снижения нагрузки на процессор) **Пример использования:** yield() ===== shuffle ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Случайное перемешивание значений таблицы\\ **Пример использования:** shuffle( <таблица> ) **Обязательные аргументы:** * 1 : <таблица> (таблица) ===== DIR ===== * Местоположение файла: **/lua/_utility.lua** **Краткое описание:**\\ Возвращает путь к нужной директории\\ **Пример использования:** DIR( "textures" ) **Обязательные аргументы:** * 1 : <тип ресурса> (строка) - название значений из секции "directories" в файле: preferences.json\\ (к примеру: objects, shaders, sounds, levels, interface, textures, MEBOX, configs)