MX_Master

Общий мини "HELP ME" топик по скриптингу

Recommended Posts

function OnClientRender() 
    if vehicle.max_speed == NULL then 
        vehicle.max_speed = 0; 
    end 
     
    if vehicle.speed > vehicle.max_speed then 
        vehicle.max_speed = vehicle.speed; 
    end 
end 

Собственно все необходимые проверки я опустил. В целом логика должна быть ясна.

Share this post


Link to post
function OnClientRender() 
    if vehicle.max_speed == NULL then 
        vehicle.max_speed = 0; 
    end 
     
    if vehicle.speed > vehicle.max_speed then 
        vehicle.max_speed = vehicle.speed; 
    end 
end 

Собственно все необходимые проверки я опустил. В целом логика должна быть ясна.

Спасибо за содействие, но я немного не это имел ввиду. Другими словами - мне нужна была таблица макс. скорости для каждого ТС, я ее уже составил. Еще раз спасибо.

Share this post


Link to post

Ты же сказал что тебе наоборот не нужна таблица?

Share this post


Link to post
Ты же сказал что тебе наоборот не нужна таблица?

То, что ты написал - это проверка едет авто с макс. скоростью или нет, а мне нужно просто вычислять макс. скорость каждого авто и сделать это посредствами функций сложно(в том плане, что на макс. скорость влияет много факторов: вес и т.д), поэтому я и составил таблицу. Тоесть другими словами: мне нужно макс. скорость авто, как только я в него сел и формулу для расчета макс. скорости с помощью параметров от handling я на просторах интернета не нашел. Поэтому выбор был только один: таблица.

Share this post


Link to post
Ты же сказал что тебе наоборот не нужна таблица?

То, что ты написал - это проверка едет авто с макс. скоростью или нет, а мне нужно просто вычислять макс. скорость каждого авто и сделать это посредствами функций сложно(в том плане, что на макс. скорость влияет много факторов: вес и т.д), поэтому я и составил таблицу. Тоесть другими словами: мне нужно макс. скорость авто, как только я в него сел и формулу для расчета макс. скорости с помощью параметров от handling я на просторах интернета не нашел. Поэтому выбор был только один: таблица.

Нет там такой проверки. Там идёт вычисление максимальной достигнутой скорости автомобилем.

Если тебе нужно моментально узнать какой скоростной лимит у автомобиля, то Handling в помощь. Но без флага USE_MAXP_LIMIT информация не будет действительной.

Share this post


Link to post

Если элемент машины после её взрыва, остается и имеет тип "vehicle", то прицепить можно, насколько это будет "играбельно", вопрос отдельный.

Также можно атачить просто почти любые элементы или же сделать модель взорванного авто, если это нужно.

Share this post


Link to post
Можно ли в качестве трейлера прицепить взорванную машину?

Ну так возьми да попробуй, в чём проблема? Есть функция, есть руки.

Вопрос из серии, "можно ли вызвать функцию"..

Share this post


Link to post
Ну так возьми да попробуй, в чём проблема? Есть функция, есть руки.

Уже пробовал. Дело том, что функция

attachTrailerToVehicle(veh, trailer) 

какая-то нестабильная. Когда я прицепляю взорванную, то она либо перемещается на позицию прицепа, но не прицепляется, либо прицепляется, загорается, взрывается снова и отцепляется. Я думал может уже кто-то колдовал с setElementHealth и setVehicleDamageProof - у меня ничего не вышло. А обычные машины тоже не всегда прицепляются.

Share this post


Link to post

Зачем нужны функции textDisplay? Это же по сути тот же dxDraw только серверный или я не прав?

Share this post


Link to post
Зачем нужны функции textDisplay? Это же по сути тот же dxDraw только серверный или я не прав?

Их можно вызывать с сервера. Например, до загрузки каких-нибудь ресурсов. Других применений не знаю.

Share this post


Link to post

Как создать вид от первого лица из машины? ресурс cockpit делает это криво и + нельзя двигать камеру. Пробовал приаттачить камеру к позиции лица, но результат, как будто ничего не произошло.

Share this post


Link to post
Как создать вид от первого лица из машины? ресурс cockpit делает это криво и + нельзя двигать камеру. Пробовал приаттачить камеру к позиции лица, но результат, как будто ничего не произошло.

Возможно Kernell что-то посоветует. Он делал то, чем вы интересуетесь.

Share this post


Link to post
Пробовал приаттачить камеру к позиции лица, но результат, как будто ничего не произошло.

Код покажите.

Ранее я делал подобное с setCameraMatrix, но так как с математикой у меня не очень, были мелкие баги. Но как появилась getCamera() на стороне клиента - я быстренько всё это переписал.

Собственно тут всё просто, получаете элемент камеры, атачите её к чему нужно и всё. Если нужно реализовать вращение - то есть setElementAttachedOffsets.

Share this post


Link to post
Пробовал приаттачить камеру к позиции лица, но результат, как будто ничего не произошло.

Код покажите.

Ранее я делал подобное с setCameraMatrix, но так как с математикой у меня не очень, были мелкие баги. Но как появилась getCamera() на стороне клиента - я быстренько всё это переписал.

Собственно тут всё просто, получаете элемент камеры, атачите её к чему нужно и всё. Если нужно реализовать вращение - то есть setElementAttachedOffsets.

Сначала попробовал примерно так (код не помню написал по-быстрому, поэтому не тестился)

local player = getLocalPlayer() 
local r_root = getRootElement() 
local camera 
  
addEventHandler( 'onClientVehicleEnter', r_root, 
    function ( thePlayer, theSeat ) 
        if thePlayer == player and theSeat == 0 then 
            if isElement( camera ) then 
                destroyElement( camera ) 
            end 
            local x, y, z = getPedBonePosition( thePlayer, 8 ) 
            camera = createObject( 3803, x, y, z ) 
            setElementAlpha( camera, 0 ) 
            attachElements( thePlayer, camera ) 
            setCameraTarget( camera ) 
        end 
    end) 
addEventHandler( 'onClientVehicleStartExit', r_root, 
    function ( thePlayer ) 
        if thePlayer == player then 
            if isElement( camera ) then 
                destroyElement( camera ) 
            end 
            setCameraTarget( thePlayer ) 
        end 
    end) 

И в нем была проблема в том, что attachElements и setCameraTarget возвращали false. Потом попробовал как в ресурсе cockpit, но камера стала показывать внутренности машины (я так и не понял куда направлялась камера). Потом решил через getCamera()

local player = getLocalPlayer() 
local r_root = getRootElement() 
local camera = getCamera() 
  
addEventHandler( 'onClientVehicleEnter', r_root, 
    function ( thePlayer, theSeat ) 
        if thePlayer == player and theSeat == 0 then 
            local x, y, z = getPedBonePosition( thePlayer, 8 ) 
            setCameraTarget( x, y, z ) 
            setCameraClip( true, false ) 
        end 
    end) 
addEventHandler( 'onClientVehicleStartExit', r_root, 
    function ( thePlayer ) 
        if thePlayer == player then 
            setCameraTarget( thePlayer ) 
            setCameraClip( true, true ) 
        end 
    end) 

Получилось как-будто я и не писал код вообще. Хотелось все таки как-то покрасивей и попроще, в итоге ничего не получилось.

Share this post


Link to post

Первый код у тебя как бы правильный, за исключением пару моментов - setCameraTarget отцепляет камеру от аттача (хотя МТА всё равно считает её приатаченой).

Второй момент - ты пытаешься игрока приатачить к "камере" (я так понял у тебя там объект для теста?), а надо наоборот. attachElements( %что%, %к чему% )

P.S. зачем getLocalPlayer и getRootElement? Уже давно есть глобальные переменные root и localPlayer

Share this post


Link to post

localPlayer не нравится как пишется) А root думал только серверный.

Второй момент - ты пытаешься игрока приатачить к "камере" (я так понял у тебя там объект для теста?), а надо наоборот. attachElements( %что%, %к чему% )
А какая собственно разница?

Share this post


Link to post
localPlayer не нравится как пишется) А root думал только серверный.
Второй момент - ты пытаешься игрока приатачить к "камере" (я так понял у тебя там объект для теста?), а надо наоборот. attachElements( %что%, %к чему% )
А какая собственно разница?

Да действительно, какая разница, надеть часы на руку или руку на часы? Так и у тебя.

Share this post


Link to post

Подскажите пожалуйста, почему этот код не работает:

local x, y, sizeX, sizeY = 2498.6914, -1685.4102, 50, 50 
local area = createRadarArea(x, y, sizeX, sizeY) 
local col = createColRectangle(x, y, sizeX, sizeY) 
setElementParent(col, area) 

Поправка: код работает, но почему-то после установления родителя colshape'у, при применении команды showcol он не обозначается, т.е. границы не показывает колшейпа.

Share this post


Link to post

Добрый день, форумчане, решил мигрировать на МТА с САМПа, все бы ничего, все вроде бы понятно, но не понятно одно - клиент-серверные скрипты, не понятно как происходит общение и их работа. Создал простое окно на gui в клиентском скрипте, прописал его в meta.xml, создание окна засунул в событие onResourceStart, но при запуске ничего не происходит, пытался понатыкать функций outputConsole в код, чтобы удостовериться, запускается ли событие. В серверном скрипте только спавн, помогите разобраться, пожалуйста

Share this post


Link to post
Добрый день, форумчане, решил мигрировать на МТА с САМПа, все бы ничего, все вроде бы понятно, но не понятно одно - клиент-серверные скрипты, не понятно как происходит общение и их работа. Создал простое окно на gui в клиентском скрипте, прописал его в meta.xml, создание окна засунул в событие onResourceStart, но при запуске ничего не происходит, пытался понатыкать функций outputConsole в код, чтобы удостовериться, запускается ли событие. В серверном скрипте только спавн, помогите разобраться, пожалуйста

Даю подсказку: для клиентской стороны свои события. Заходишь на wiki и в разделе Client Events ищешь нужное

Share this post


Link to post
Добрый день, форумчане, решил мигрировать на МТА с САМПа, все бы ничего, все вроде бы понятно, но не понятно одно - клиент-серверные скрипты, не понятно как происходит общение и их работа. Создал простое окно на gui в клиентском скрипте, прописал его в meta.xml, создание окна засунул в событие onResourceStart, но при запуске ничего не происходит, пытался понатыкать функций outputConsole в код, чтобы удостовериться, запускается ли событие. В серверном скрипте только спавн, помогите разобраться, пожалуйста

Даю подсказку: для клиентской стороны свои события. Заходишь на wiki и в разделе Client Events ищешь нужное

Если я размещу в клиент-скрипте только одно событие onClientPlayerJoin, а в функции выполню outputConsole("Hello world") - сообщение будет отправлено в консоль?

Share this post


Link to post

Если я размещу в клиент-скрипте только одно событие onClientPlayerJoin, а в функции выполню outputConsole("Hello world") - сообщение будет отправлено в консоль?

Событие onClientPlayerJoin вызывается для всех игроков, кроме локального, так как клиентская часть ресурса запускается уже после подключения игрока. Если ты прикрепишь обработчик этого события к локальному игроку, то сообщение никогда не будет отправлено в консоль.

Используй событие onClientResourceStart и прикрепляй его к resourceRoot, чтобы оно вызвалось только один раз при запуске этого ресурса на стороне клиента.

Share this post


Link to post

В клиентском скрипте участвует только один игрок? То есть можно спокойно в начале скрипта написать playerid = getLocalPlayer();

И спокойно пользоваться им далее по скрипту? Если мои вопросы глупы, то извините, я пытаюсь учиться

Share this post


Link to post
getLocalPlayer() 

Можно вообще не использовать, т.к данная переменная предопределенна и называется localPlayer. И localPlayer- это не id, а userdata локального игрока. Почитайте документацию на wiki. В МТА изначально нет системы id и все игроки являются userdat'ой. Изучите доскональнее эвенты на стороне клиента. Там нет события onResourceStart, там есть событие: onClientResourceStart.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.