Jump to content

Вопросы и ответы по MTA.


Recommended Posts

Доброго времени суток!

Судя по вики(как я понял) глобальная переменная root возвращает родитель всех элеменов. Функция getRootElement() выполняет тоже самое.

Вопрос 1: Зачем нужен getRootElement(), если есть переменная root? Или же я не правильно понял getRootElement()?

Вопрос 2: На вики в примерах создается локальная переменная root. Но ведь это имя зарезервировано для глобальной root.

Вообще сложновато разобраться в дереве элементов. Я это представляю на с++ в виде класса с методами (евентами), и его объектами (элементами).

Простите за такие глупые вопросы).

Link to comment

Видимо раньше root не была глобальной, а теперь сделали)) (Сам не знаю ответа, знаю точно, что теперь getRootElement можно спокойно заменить на root).

Кроме root есть ещё много других. Кстати getLocalPlayer тоже можно заменить на просто localPlayer.

Link to comment

На вики есть и старые примеры, при которых root не являлась глобальной переменной. Вот еще список глобальных переменных в МТА на текущий момент:

сервер

  • _G
    _VERSION
    coroutine
    debug
    exports
    math
    resource
    resourceRoot
    root
    string
    table

клиент

  • _G
    _VERSION
    coroutine
    debug
    exports
    guiRoot
    localPlayer
    math
    resource
    resourceRoot
    root
    string
    table

Link to comment
А string, math и table тут причем? Это же классы.

Это простые переменные с типом таблица, которые содержат в себе функции-методы. В Lua вообще как бы нет классов, есть только эмуляция с помощью мета-таблиц.

Кроме этих трёх ещё есть: coroutine, io, os и debug (Больше не помню).

Link to comment

Помимо этих глобальных переменных есть еще переменные которые задаются в событиях, как например client в любом эвенте который был вызван с помощью triggerServerEvent. Еще всякие httpUser в скриптах выполняющихся через http сервер.

Link to comment

А самое интересное, что эти списки предопределенных переменных нигде не афишируются. О них можно узнать из разных страниц вики, а единой страницы нет (или есть?). Лично я нашел все переменные, создав специальный ресурс по логическому разбиению глобальных переменных на группы. До сих пор им пользуюсь для обновления файла подсветки синтаксиса в своем редакторе.

Link to comment

У меня такой вопрос, думаю врядли поймёте, попробуй объяснить как-нибудь. Так вот, у меня есть массив

  
local text =  
{ 
    "Text", 
    root, 
    255, 
    255, 
    0, 
    false 
} 
  

Ну и далее можно делать так:

  
outputChatBox(text[1], text[2], text[3], text[4], text[5], text[6], text[7]) 
  

Ну а вот и вопрос: Можно ли сделать как-нибудь вот так?

  
outputChatBox(text[1] ... text[n]) 
  

То есть я не знаю кол-во аргументов, и то что указана в переменной "n", столько их и будет.

И такой вариант мне не подходит:

  
if n == 1 then 
    outputChatBox(text[1]) 
elseif n == 2 then 
    outputChatBox(text[1], text[2])     
elseif  
    ... 
end 
  

Надеюсь понтятно объяснил.

Link to comment
  
outputChatBox(unpack(text)) 
-- или c дефолтными вариантами для всех параметров: 
outputChatBox(text[1] or "Text", text[2] or root, text[3] or 255, text[4] or 255, text[5] or 255, text[6] or false) 
  

не?

Link to comment
  
outputChatBox(unpack(text)) 
-- или c дефолтными вариантами для всех параметров: 
outputChatBox(text[1] or "Text", text[2] or root, text[3] or 255, text[4] or 255, text[5] or 255, text[6] or false) 
  

не?

Спасибо. unpack - то что мне нужно. outputChatBox - это был просто пример. :)

Link to comment
  • Other Languages Moderators

Я нестал себя мучать писанием кода. Я вырезал его отуда-то из папки mods:

        myShader, tec = dxCreateShader ( "car_paint.fx" ) 
  
        if not myShader then 
            outputChatBox( "Could not create shader. Please use debugscript 3" ) 
        else 
--          outputChatBox( "Using technique " .. tec ) 
  
            -- Set textures 
            local textureVol = dxCreateTexture ( "images/smallnoise3d.dds" ); 
            local textureCube = dxCreateTexture ( "images/cube_env256.dds" ); 
            dxSetShaderValue ( myShader, "microflakeNMapVol_Tex", textureVol ); 
            dxSetShaderValue ( myShader, "showroomMapCube_Tex", textureCube ); 
  
            -- Apply to world texture 
--          engineApplyShaderToWorldTexture ( myShader, "vehiclegrunge256" ) 
             
            enabled = false 
             
            bindKey ( "F4", "down", toggleCarPaint ) 
        end 
    end 
) 

Link to comment

Мне нужно проверить каждый символ в имени пользователя и разрешить только буквы. Не подскажите как это сделать?(в pawn это легко сделать с case, как быть тут не знаю..)

Link to comment
Мне нужно проверить каждый символ в имени пользователя и разрешить только буквы. Не подскажите как это сделать?(в pawn это легко сделать с case, как быть тут не знаю..)

Это можно сделать через:

string.find 

Link to comment
Мне нужно проверить каждый символ в имени пользователя и разрешить только буквы. Не подскажите как это сделать?(в pawn это легко сделать с case, как быть тут не знаю..)

Это можно сделать через:

string.find 

перебирать все символы не хочется, думал может можно сделать что-то вроде

case 'a'..'z', 'A'..'Z' 

Link to comment
string.match(str,'[a-zA-Z]')

Запятая не нужна..

^ - это отрицание.. Зачем делать 2 раза отрицание?

а по-моему все правильно (кроме запятой):

  
string.match('test','[a-zA-Z]') --> "t" 
string.match('test2[notvalid]','[a-zA-Z]') --> "t" 
-- что не хорошо 
  
not string.match('test','[^a-zA-Z]') --> true 
not string.match('test2[notvalid]','[^a-zA-Z]') --> false 
-- а так хорошо 
  

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