KruTolic_rus Posted July 28, 2013 Posted July 28, 2013 16 строка: bad argument #1 to ipairs (table expected,got number) ---===SERVER===--- servertable = { [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6 } function AllowRightKey () local randomID = math.random ( 1, #servertable ) for k,settable in ipairs ( randomID ) do if settable == 1 then giveWeapon ( source,31,math.random(10,150) ) outputChatBox ("You are won some guns",source) end if settable == 2 then outputChatBox ("You are not lucky ",source,255,0,0,false) end if settable == 3 then setPedSkin ( source ,math.random (1,210) ) outputChatBox ("You are won Skin!",source) end if settable == 4 then killPed ( source ) outputChatBox ("Oh...sorry guy ",source,0,255,0,false) end if settable == 5 then x,y,z = getElementPosition ( source ) createVehicle ( 411 , x + 3,y,z) outputChatBox ("Vehicle near you ;D",source) end if settable == 6 then setElementHealth ( source , 50 ) outputChatBox ("Nothing...only lower of your HP!",source,0,255,0,false) end end end addEvent( "donateallow",true) addEventHandler ("donateallow",getRootElement(),AllowRightKey)
_Vincent_ Posted July 28, 2013 Posted July 28, 2013 ipairs перебирает таблицы, а вы дали ему randomID, который есть число. p.s. он печатает не все, а работает как раз-таки рандом. некотрые повторяются. если подставить перебор именно таблицы: for k,settable in ipairs ( servertable ) do то цикл пройдет шесть раз (собственно, столько в таблице у вас строк: он пройдет ВСЮ таблицу, один проход - одна строка, по очереди). то есть шесть раз (по одному разу за каждый проход) генерируется случайное число, и для него сразу после срабатывает соответствующий if (по одному разу за один проход - получается, что разные if'ы в сумме срабатывают тоже шесть раз). кстати, по-моему, вам следует задуматься об использовании elseif.
KruTolic_rus Posted July 28, 2013 Author Posted July 28, 2013 ipairs перебирает таблицы, а вы дали ему randomID, который есть число.p.s. он печатает не все, а работает как раз-таки рандом. некотрые повторяются. если подставить перебор именно таблицы: for k,settable in ipairs ( servertable ) do то цикл пройдет шесть раз (собственно, столько в таблице у вас строк: он пройдет ВСЮ таблицу, один проход - одна строка, по очереди). то есть шесть раз (по одному разу за каждый проход) генерируется случайное число, и для него сразу после срабатывает соответствующий if (по одному разу за один проход - получается, что разные if'ы в сумме срабатывают тоже шесть раз). кстати, по-моему, вам следует задуматься об использовании elseif. Спасибо,я учту.Но как мне быть,то??? Допустим,будет у меня elseif но что делать с for k,settable in ipairs ( ) do ? P.S. > Получился вот такой код,но теперь вызывается сразу все: ---===SERVER===--- servertable = { [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6 } addEvent( "donateallow",true) addEventHandler ("donateallow",root, function() local randomID = math.random ( 1, #servertable ) if randomID == 1 then giveWeapon ( source,31,math.random(10,150) ) outputChatBox ("You are won some guns",source) elseif randomID == 2 then outputChatBox ("You are not lucky ",source,255,0,0,false) elseif randomID == 3 then setPedSkin ( source ,math.random (1,210) ) outputChatBox ("You are won Skin!",source) elseif randomID == 4 then killPed ( source ) outputChatBox ("Oh...sorry guy ",source,0,255,0,false) elseif randomID == 5 then x,y,z = getElementPosition ( source ) createVehicle ( 411 , x + 3,y,z) outputChatBox ("Vehicle near you ;D",source) elseif randomID == 6 then setElementHealth ( source , 50 ) outputChatBox ("Nothing...only lower of your HP!",source,0,255,0,false) end end )
_Vincent_ Posted July 29, 2013 Posted July 29, 2013 В данном куске кода все выглядит более-менее логично. Добавляется новое событие, потом - его обработчик с функцией. Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а. Получается, что событие вызывается несколько раз? Ищите проблему в вызове события.
KruTolic_rus Posted July 29, 2013 Author Posted July 29, 2013 В данном куске кода все выглядит более-менее логично.Добавляется новое событие, потом - его обработчик с функцией. Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а. Получается, что событие вызывается несколько раз? Ищите проблему в вызове события. Дело в том,что событие вызывается 1 раз,но исполняются не 1 рандомное,а сразу все 6...как быть?
_Vincent_ Posted July 29, 2013 Posted July 29, 2013 Ну не может же randomID одновременно принимать шесть значений... Добавляйте вывод в чат или в дебаг тех значений, от которых зависит выполнение. Может, наведет на какие-нибудь мысли.
Kenix Posted July 29, 2013 Posted July 29, 2013 viewtopic.php?f=141&t=40703 http://vk.com/the_kenix Вопросы задавайте на форуме, не пишите мне в личку. Please don't pm me.
Moderators Disinterpreter Posted July 29, 2013 Moderators Posted July 29, 2013 https://forum.multitheftauto.com/viewtopic.php?f=141&t=40703 Все из-за крутой табуляции? Developers, Developers, Developers, Developers.... © Steve Balmer http://www.lua.org/about.html Quote Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people. So, please, write "Lua" right!
Kenix Posted July 30, 2013 Posted July 30, 2013 https://forum.multitheftauto.com/viewtopic.php?f=141&t=40703 Все из-за крутой табуляции? Нет, там сказано про ручной дебаг. http://vk.com/the_kenix Вопросы задавайте на форуме, не пишите мне в личку. Please don't pm me.
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