Jump to content

Вопрос по функционалу МТА


Recommended Posts

  • Replies 96
  • Created
  • Last Reply

Top Posters In This Topic

  • Other Languages Moderators

это типа OnPlayerUpdate?

onClientRender срабатывает, когда GTA делает новый кадр. А OnPlayerUpdate при обновлении информации клиента. Все просто :D

Link to comment

Так, с этой штукой я разобрался. Ещё несколько вопросов.

1) В старых версиях MTA (1.0.3 или даже меньше) Мап Эдитор не был таким обновленным (по моему даже без GUI был, где в ручную объекты вводить), и вместо прицела был простой свет. Не знаете ID такого-же света, только белого (там, если я правильно помню - был оранжевый).

2) Повторюсь с вопросом в постах ранее - можно ли забиндить команду по клавише? Подобие CallRemoteFunction из SA-MP, например чтобы не вводить команду /saveplayer, а можно было нажать F7, и была выполнена команда. Так как я копировать данные ресурса в мод не хочу, но забиндить кнопку хочу через мод.

Link to comment
  • Other Languages Moderators
"я написал команду, но мне хотелось бы увидеть, чтобы она исполнялась с помощью какой-либо клавиши"

bindKey или onClientKey

Писал же уже я.

Link to comment

Спасибо. Если будут ещё вопросы - буду задавать их в данную тему.

PS -

bindKey(source, "f7", "up", "/saveplayer") 

так чтоле?

И ещё - чё ознают значения up, down, both в (un)bindKey? Почитав, я подумал, что up - это просто нажать, down - зажать, а both - любое из этого. Я точно не понял.

Link to comment
Спасибо. Если будут ещё вопросы - буду задавать их в данную тему.

PS -

bindKey(source, "f7", "up", "/saveplayer") 

так чтоле?

И ещё - чё ознают значения up, down, both в (un)bindKey? Почитав, я подумал, что up - это просто нажать, down - зажать, а both - любое из этого. Я точно не понял.

Сами названия же говорят за себя :o

up - кнопка была отжата

down - кнопка нажата, но не отпущена

both - срабатывает при любом состоянии, нажал или отпустил.

Link to comment

Понятно. Прописал в моде данный код

    unbindKey(source, "fire", "both") 
    unbindKey(source, "mouse1", "both") 
    unbindKey(source, "space", "both") 
    unbindKey(source, "lshift", "both") 
    unbindKey(source, "rshift", "both") 
    unbindKey(source, "mouse3", "both") 

выполняться должен при onPlayerJoin, но кнопки всё равно работают.

Link to comment

Так делать нельзя.

unbindKey работает только после bindKey. Т.е. в bindKey привязывается функция или команда, но не стандартные настройки.

Если ты хочешь отключить стандартные действия, то используй toggleControl

Link to comment

Ещё вопрос.

Вот забиндил я кнопку lshift для бега (бег - ускорение игры), но когда отпускаю игра продолжает быть ускореной, но хотелось бы чтобы когда я отпустил кнопку, скорость игры была стандартной (обычный бег)

  
function Speed() 
    setGameSpeed(1.3) 
end 
  
addEventHandler("onClientResourceStart", getRootElement(getThisResource()), 
    function() 
        bindKey("lshift", "down", Speed)     
    end 
) 

Link to comment

Благодарю. Появился ещё вопрос.

lamp = {} 
local lampo = 0 
function StartLamp(source) 
    bindKey(source, "mouse1", "down", 
        function(source) 
            if getPedWeapon(source) == 22 then 
                if lampo == 0 then 
                    lampo = 1 
                    lamp[source] = createObject(1215, 0, 0, 0) 
                    attachElements(lamp[source], source, 0.3, 0.04, -0.7) 
                    setElementCollisionsEnabled(lamp[source], false) 
                    setObjectScale(lamp[source], 0) 
                end 
                if lampo == 1 then 
                    lampo = 0 
                    destroyElement(lamp[source]) 
                end 
            end 
            if getPedWeapon(source) ~= 22 then  
                outputChatBox("У вас в руках нет фонарика", source) 
            end 
        end 
    )  
end 
addEventHandler("onPlayerJoin", getRootElement(), StartLamp) 

вот написан выше код (написанный мной). Данный код должен по нажатию левой кнопки выдавать свет (если выбран пистолет кольт), и если не кольт - то высветилось что нет фонарика. Ранее данный код работал, но свет не отображал, а теперь он вообще выдаёт варн и кнопка не работает (Bad argument на строку bindKey)

Link to comment

Так, с этой штукой разобрался. Теперь такой вопрос - как сделать мигание изображения? Ну типа появилось, через секунду исчезло, через секунду опять появилось, и т.д, как бы бесконечный цикл. Я слышал, что нужно альфу менять, через tocolor, но я не додумался, само изображение - dxDrawImage

Link to comment

source - является глобальной переменной, создаваемой при вызове события. В твоем коде source передается как аргумент, что просто переписывает ее. Убери source из аргументов функции StartLamp. Кроме того, переключение состояния предназначено для нескольких игроков, поэтому хранить статус следует в соответствующей таблице, в которой роль ключа будет играть плеер. В качестве такой таблице можно использовать уже созданную lamp, а локальную переменную lampo ликвидировать.

Реализовать мигание изображения можно при помощь таймера, или же при помощи getTickCount(). Что то вроде того:

local startTime = getTickCount ( ) 
local duration = 3000 
local popDown 
  
function onRender ( ) 
    local now = getTickCount ( ) 
    local elapsedTime = now - startTime 
    local progress = elapsedTime / duration 
  
    if progress > 1 then 
        startTime = now 
        if popDown then 
            popDown = false             
            progress = 0 
        else 
            popDown = true             
            progress = 1 
        end 
    else 
        if popDown then 
            progress = 1 - progress 
        end 
    end 
     
    dxDrawImage ( x, y, width, height, "img", 0, 0, 0, tocolor ( 255, 255, 255, 255 * progress ) ) 
end 
addEventHandler ( "onClientRender", root, onRender, false ) 

Здесь показан алгоритм плавного появления и исчезания изображения img. Не проверял, но должен работать.

Link to comment

Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило.

Link to comment
Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило.
  
local tick, show = getTickCount, true 
addEventHandler ( "onClientRender", root 
    function() 
        if(getTickCount()-tick >= 1000) then  
            show = not show 
            tick = getTickCount() 
        end 
        if(show) then 
            dxDrawImage(...) 
        end 
    end 
) 

Секунду показывается изображение, секунду нет.

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...