Jump to content

Общий мини "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 

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

Link to comment
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 

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

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

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

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

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

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

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

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

Link to comment

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

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

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

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

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

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

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

attachTrailerToVehicle(veh, trailer) 

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

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

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

Link to comment

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

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

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

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

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

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

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

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

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

Ранее я делал подобное с 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) 

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

Link to comment

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

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

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

Link to comment

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

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

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

Link to comment
  • 3 weeks later...

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

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 он не обозначается, т.е. границы не показывает колшейпа.

Link to comment
  • 2 weeks later...

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

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

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

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

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

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

Link to comment

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

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

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

Link to comment

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

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

Link to comment
getLocalPlayer() 

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

Link to comment

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.
×
×
  • Create New...