Kashamir Posted October 16, 2016 Share Posted October 16, 2016 Всем привет! Читаю на данный момент 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
Kernell Posted October 16, 2016 Share Posted October 16, 2016 И что вам мешает сделать ту же самую проверку в Lua? Link to comment
Kashamir Posted October 16, 2016 Author Share Posted October 16, 2016 (edited) 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 October 16, 2016 by Kashamir Link to comment
LoveFist Posted October 17, 2016 Share Posted October 17, 2016 В чем ошибка? if(vehModel < 400 or vehModel > 611) then outputChatBox("ID транспортного средства: [400-611]", source) return false -- не хватает выхода из функции, без него мы просто выводим сообщение об ошибке end Должно работать. Если нет - приведите полный код функции и напишите в чем конкретно ошибка. Link to comment
Kernell Posted October 17, 2016 Share Posted October 17, 2016 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
Kashamir Posted October 17, 2016 Author Share Posted October 17, 2016 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
LoveFist Posted October 17, 2016 Share Posted October 17, 2016 Аргументы по-умолчанию приходят в виде строк. При попытке сравнить строку с числом появляется ошибка. Следовательно вначале нужно привести значение vehModel к числу, а затем уже выполнять сравнение. Также не хватает проверки на истинность значения vehModel. Ведь аргумент может быть не указан или указана какая-то белиберда, которая после приведения превратится в nil. Это также нужно учесть. Попробуйте самостоятельно исправить код, подсказки я Вам дал выше. PS: Много полезных ссылок по теме изучения Lua - PPS: Если с кодом не получается, вот исправленная версия (но советую разобраться самостоятельно ) - http://pastebin.com/HSLnkyqL 1 Link to comment
Kashamir Posted October 17, 2016 Author Share Posted October 17, 2016 (edited) 2 hours ago, LoveFist said: Аргументы по-умолчанию приходят в виде строк. При попытке сравнить строку с числом появляется ошибка. Следовательно вначале нужно привести значение vehModel к числу, а затем уже выполнять сравнение. Также не хватает проверки на истинность значения vehModel. Ведь аргумент может быть не указан или указана какая-то белиберда, которая после приведения превратится в nil. Это также нужно учесть. Попробуйте самостоятельно исправить код, подсказки я Вам дал выше. PS: Много полезных ссылок по теме изучения Lua - PPS: Если с кодом не получается, вот исправленная версия (но советую разобраться самостоятельно ) - http://pastebin.com/HSLnkyqL Точно! как я мог про эту вещь забыть... эхх... Ага спасибо. За ссылки и за код тоже, с завтрашнего дня начну читать изучать. а сейчас спать. Ах да + поставил вроде как... Этот, https://wiki.multitheftauto.com/wiki/SetVehicleColor только через RGB делается, а через id цвета можно как то установить машине цвета, если да киньте пожалуйста ссылку на функцию благодаря которой это становиться возможным ? Edited October 17, 2016 by Kashamir Link to comment
Fabervox Posted October 18, 2016 Share Posted October 18, 2016 @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
Kashamir Posted October 18, 2016 Author Share Posted October 18, 2016 Спасибо всем! Пока надобностей этим заниматься нету, я только на будущее узнать хотел можно или нет. Теперь понял что все нужно самому ручками создать скрипт, чтобы пользоваться с ним далее. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now