Jump to content

Несколько вопросов по скриптингу


Recommended Posts

Скриптингом в MTA начал заниматься недавно (перебежал из SA-MP)

Появились несколько вопросиков

1. Что такое клиентские скрипты? Не совсем понятно. Расскажите, пожалуйста, о них или дайте ссылку, где можно о них почитать

P.S. Я надеюсь это не возможность игрокам создавать свои скрипты для получения денег, например?

2. Для чего нужна функция getRootElement? Читал на wiki и на английском, и на русском так ничего и не понял

3. Что использовать в MTA вместо массивов в SA-MP?

Заранее спасибо за ответы)

Link to comment

1. Клиентские скрипты работают на стороне клиента. В нём работают такие функции как прорисовка чего-то (dxDraw), gui, и многое другое. В их безопасности я уверен, на процентов 80.

2. Эта функция возвращает древо всех элементов.

3. Для этого есть таблица.

  
local ururu = 
{ 
    [1] = "ASDASD", 
    [2] = 221, 
    [3] = 212.1231, 
    [4] = true, 
    [5] =  
    { 
        [1] = ":DDD", 
        [2] = 2221, 
        [3] = 252.12225, 
        [4] = false, 
        [5] =  
        { 
            [1] = "SAasG", 
            [2] = 315, 
            [3] = 251.1225, 
            [4] = true 
        } 
    } 
} 
  
outputDebugString(ururu[5][5][1]) 
  

Edited by Guest
Link to comment
1. Клиентские скрипты работают на стороне клиента. В нём работают такие функции как прорисовка чего-то (dxDraw), gui, и многое другое. В их безопасности я уверен, на процентов 80.

2. Эта функция возвращает древо всех элементов.

Вот об этом можно поподробнее? :)

P.S. Я нуб - не понимаю

Link to comment
1. Что такое клиентские скрипты? Не совсем понятно. Расскажите, пожалуйста, о них или дайте ссылку, где можно о них почитать

P.S. Я надеюсь это не возможность игрокам создавать свои скрипты для получения денег, например?

Клиентский скрипт это код который выполнятется на компьютере у игрока. http://ru.wikipedia.org/wiki/Клиент_(информатика)

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

Такое мало вероятно.

2. Для чего нужна функция getRootElement? Читал на wiki и на английском, и на русском так ничего и не понял

Функция getRootElement или root возвращает дерево всех элементов.

Т.е к примеру есть событие

onClientGUIClick

Если мы аттачим к обработчику события элемент ( например гуи-кнопку ) то событие будет срабатывать именно когда мы жмём на эту гуи-кнопку , а если мы будем использовать root( getRootElement ) то при нажатие например на любые гуи элементы событие будет срабатывать.

3. Что использовать в MTA вместо массивов в SA-MP?

Таблицы

P.S Я не мастер объяснять что-либо. :)

Link to comment

Клиентский скрипт, МТА скачивает с сервера, и код который находится внутри работает на компьютере у игрока.

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

Link to comment

С этим более менее понятно, спасибо за ответы, если будут дополнения, пишите

Вот на WIKI функцию нашел addEventHandler. Я так понимаю, это чтобы создать что-то на подобие автовызываемых функций в samp?

Если да, то что будет если сделать в одном ресурсе так:

function onPlayerSpawnHandler ( thePlayer ) 
    local playerName = getPlayerName( thePlayer ) 
    outputChatBox ( playerName .. " заспавнился!" ) 
end 
 addEventHandler( "onPlayerSpawn", getRootElement(), onPlayerSpawnHandler ) 

А в другом так:

function onPlayerSpawnHandler ( thePlayer ) 
    local playerName = getPlayerName( thePlayer ) 
    outputChatBox ( playerName .. " присоединился к нам!" ) 
end 
 addEventHandler( "onPlayerSpawn", getRootElement(), onPlayerSpawnHandler ) 

Это будет работать?

Что сработает раньше?

P.S. Для тех, кто хочет спросить - зачем это мне?

Отвечу - я собираюсь писать мод со стандартного Deathmatch. Там 150 ресурсов. Мне лень бегать по ним и искать нужный ивент. Я просто хочу создать свой ресурс и туда добавить

И еще вопросик - как мне можно быстро найти ресурс, в котором описана нужная мне функция?

Link to comment

Просто в сампе уже каллбеки забиндены, а МТА даётся возможность самому их забиндить и причём в большом кол-ве на одно событие. Вызываться они будут по порядку добавления.

Link to comment
  • Other Languages Moderators
И еще вопросик - как мне можно быстро найти ресурс, в котором описана нужная мне функция?

Не знаю я основываюсь только на английский язык и на ctrl+f в браузере.

Link to comment

автовызываемая функция = callback function = event handler

колбэк = callback = event

В сампе сделано примерно так

function OnPlayerConnect ( playerid ) 
    -- твой код 
end 
addEventHandler( 'onPlayerConnect', root, OnPlayerConnect ) 

просто строку с addEventHandler там не надо писать.

это сделано, чтобы нельзя было добавить другие функции для

обработки колбэков. С одной стороны это упрощает вид кода.

но в МТА больше свободы, там можно сделать так

function OnPlayerConnect_1 ( playerid ) 
    -- твой код 
end 
function OnPlayerConnect_2 ( playerid ) 
    -- твой код 
end 
addEventHandler( 'onPlayerConnect', root, OnPlayerConnect_1 ) 
addEventHandler( 'onPlayerConnect', root, OnPlayerConnect_2 ) 

это дает возможность не пихать весь код в одну функцию,

а более разумно распределить разные части кода по разных

функциям. Затем указать с помощью addEventHandler, что

эти функции тоже являются автовызываемыми функциями.

  • PS: я самп вики переводил на русский, и название "автовызываемые функции", это я так перевёл, раньше там было везде написано "колбэк"

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