Jump to content

Помогите разобраться с командами в МТА


Recommended Posts

Всем привет! 

Читаю на данный момент wiki, возник такой вопрос:

 

Вот функция, сделал по примеру что в wiki. 

function createVehicleForPlayer(source, command, vehModel)
    -- body
    local x,y,z = getElementPosition(source) -- получаем позицию игрока
    x = x + 5 -- прибавляем число 5 к позиции по оси x
    
    local createdVehicle = createVehicle(tonumber(vehModel), x, y, z)
    
    if(createdVehicle == false) then
        outputChatBox("Произошла ошибка при создании транспорта.", source)
    end
end
addCommandHandler("veh", createVehicleForPlayer)


 

Не могу понять как проверить что игрок введет неверный id транспорта

в сампе это делаеться так:

if(vehModel < 400 || vehModel > 501) return 

 а как сделать проверку в MTA ?

Так же как к существующей функции createVehicleForPlayer добавить возможность игрока ввести первый цвет транспорта и второй ? 

 

 

 

 

 

 

Link to comment
48 minutes ago, Kernell said:

И что вам мешает сделать ту же самую проверку в Lua?

Делаю, ошибка только: 

 

    if(vehModel < 400 | vehModel > 611) then
        outputChatBox("ID транспортного средства: [400-611]", source)
    end    

и с двумя || тоже ошибку выдает...  

 

if (guess > 100) or (guess < 0) then

так тоже не получается...

Edited by Kashamir
Link to comment

В чем ошибка?

if(vehModel < 400 or vehModel > 611) then
	outputChatBox("ID транспортного средства: [400-611]", source)
	return false -- не хватает выхода из функции, без него мы просто выводим сообщение об ошибке
end

Должно работать. Если нет - приведите полный код функции и напишите в чем конкретно ошибка.

Link to comment
12 hours ago, Kashamir said:

Делаю, ошибка только: 

 


    if(vehModel < 400 | vehModel > 611) then
        outputChatBox("ID транспортного средства: [400-611]", source)
    end    

и с двумя || тоже ошибку выдает...  

 


if (guess > 100) or (guess < 0) then

так тоже не получается...

Первый день в программировании?

Прежде чем браться за новый язык, следует почитать о нём документацию, хотя бы о его синтаксисе. В Lua операторы "и" и "или" обозначаются как "and" и "or".

Операторы битовых операций (|, &, << и т.д.) в Lua 5.1 нет.

Link to comment
7 hours ago, LoveFist said:

В чем ошибка?


if(vehModel < 400 or vehModel > 611) then	outputChatBox("ID транспортного средства: [400-611]", source)	return false -- не хватает выхода из функции, без него мы просто выводим сообщение об ошибкеend

Должно работать. Если нет - приведите полный код функции и напишите в чем конкретно ошибка.

 

Вот функция:

function createVehicleForPlayer(source, command, vehModel)
    -- body
    local x,y,z = getElementPosition(source) -- получаем позицию игрока
    x = x + 5 -- прибавляем число 5 к позиции по оси x
    
    if(vehModel < 400 or vehModel > 611) then
        outputChatBox("ID транспортного средства: [400-611]", source)
        return false -- не хватает выхода из функции, без него мы просто выводим сообщение об ошибке
    end

    local createdVehicle = createVehicle(tonumber(vehModel), x, y, z)
    
    if(createdVehicle == false) then
        outputChatBox("Транспорт не создан!", source)
    end
end
addCommandHandler("veh", createVehicleForPlayer)

 

Вот ошибка в логе: 

1) Когда введу неверное значение ид транспорта (например 4512):

ERROR: myserver\script.lua:18: attempt to compare nil with number


2) Когда введу верное значение (например инфернус 411) : 

ERROR: myserver\script.lua:18: attempt to compare string with number

18 строчка содержит:

if(vehModel < 400 or vehModel > 611) then

ps: надеюсь написал все подробно... 

5 hours ago, Kernell said:

Первый день в программировании?

Прежде чем браться за новый язык, следует почитать о нём документацию, хотя бы о его синтаксисе. В Lua операторы "и" и "или" обозначаются как "and" и "or".

Операторы битовых операций (|, &, << и т.д.) в Lua 5.1 нет.

Я не правильно там написал. 

делал так:

if(vehModel < 400 or vehModel > 611) then

все равно не получилось. 

 

Посоветуйте пожалуйста, какие нибудь темы, ссылки на Lua основы, если можно... 

 

Link to comment

Аргументы по-умолчанию приходят в виде строк. При попытке сравнить строку с числом появляется ошибка. Следовательно вначале нужно привести значение vehModel к числу, а затем уже выполнять сравнение.

Также не хватает проверки на истинность значения vehModel. Ведь аргумент может быть не указан или указана какая-то белиберда, которая после приведения превратится в nil. Это также нужно учесть.

Попробуйте самостоятельно исправить код, подсказки я Вам дал выше.

PS: Много полезных ссылок по теме изучения Lua -

PPS: Если с кодом не получается, вот исправленная версия (но советую разобраться самостоятельно :)) - http://pastebin.com/HSLnkyqL

  • Like 1
Link to comment
2 hours ago, LoveFist said:

Аргументы по-умолчанию приходят в виде строк. При попытке сравнить строку с числом появляется ошибка. Следовательно вначале нужно привести значение vehModel к числу, а затем уже выполнять сравнение.

Также не хватает проверки на истинность значения vehModel. Ведь аргумент может быть не указан или указана какая-то белиберда, которая после приведения превратится в nil. Это также нужно учесть.

Попробуйте самостоятельно исправить код, подсказки я Вам дал выше.

PS: Много полезных ссылок по теме изучения Lua -

PPS: Если с кодом не получается, вот исправленная версия (но советую разобраться самостоятельно :)) - http://pastebin.com/HSLnkyqL

 

Точно! как я мог про эту вещь забыть... эхх... 

Ага спасибо. За ссылки и за код тоже, с завтрашнего дня начну читать изучать. а сейчас спать. Ах да + поставил вроде как...

Этот, https://wiki.multitheftauto.com/wiki/SetVehicleColor только через RGB делается, а через id цвета можно как то установить машине цвета, если да киньте пожалуйста ссылку на функцию благодаря которой это становиться возможным ?

 

 

Edited by Kashamir
Link to comment

@Kashamir, если речь идет о цветах на странице Vehicle Colors, то можно взять "исходный код страницы", выбрать там кусок с цветами, и спарсить их.

<td style="background: #000000; width:42px; height:42px; border:1px solid black;">0</td>

Выбери что на тебя смотрит в разделе Template:Utility_functions или сделай сам, ну и дальше в цикле ищешь "#", следующие 6 символов,ищешь ">", и до "<" ид цвета.

Ну а что касаемо вообще языка, Lua можно использовать и вне MTA, если лень разбираться, можешь взять примером SciTe, там без каких-либо настроек на f5 выполняется lua-код и выводится результат(ошибки и print() ). Ну или прямо на https://www.lua.org/demo.html .

Link to comment

Спасибо всем! Пока надобностей этим заниматься нету, я только на будущее узнать хотел можно или нет. 

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

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