KruTolic_rus Posted July 28, 2013 Share 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) Link to comment
_Vincent_ Posted July 28, 2013 Share Posted July 28, 2013 ipairs перебирает таблицы, а вы дали ему randomID, который есть число. p.s. он печатает не все, а работает как раз-таки рандом. некотрые повторяются. если подставить перебор именно таблицы: for k,settable in ipairs ( servertable ) do то цикл пройдет шесть раз (собственно, столько в таблице у вас строк: он пройдет ВСЮ таблицу, один проход - одна строка, по очереди). то есть шесть раз (по одному разу за каждый проход) генерируется случайное число, и для него сразу после срабатывает соответствующий if (по одному разу за один проход - получается, что разные if'ы в сумме срабатывают тоже шесть раз). кстати, по-моему, вам следует задуматься об использовании elseif. Link to comment
KruTolic_rus Posted July 28, 2013 Author Share 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 ) Link to comment
_Vincent_ Posted July 29, 2013 Share Posted July 29, 2013 В данном куске кода все выглядит более-менее логично. Добавляется новое событие, потом - его обработчик с функцией. Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а. Получается, что событие вызывается несколько раз? Ищите проблему в вызове события. Link to comment
KruTolic_rus Posted July 29, 2013 Author Share Posted July 29, 2013 В данном куске кода все выглядит более-менее логично.Добавляется новое событие, потом - его обработчик с функцией. Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а. Получается, что событие вызывается несколько раз? Ищите проблему в вызове события. Дело в том,что событие вызывается 1 раз,но исполняются не 1 рандомное,а сразу все 6...как быть? Link to comment
_Vincent_ Posted July 29, 2013 Share Posted July 29, 2013 Ну не может же randomID одновременно принимать шесть значений... Добавляйте вывод в чат или в дебаг тех значений, от которых зависит выполнение. Может, наведет на какие-нибудь мысли. Link to comment
Other Languages Moderators Disinterpreter Posted July 29, 2013 Other Languages Moderators Share Posted July 29, 2013 https://forum.multitheftauto.com/viewtopic.php?f=141&t=40703 Все из-за крутой табуляции? Link to comment
Kenix Posted July 30, 2013 Share Posted July 30, 2013 https://forum.multitheftauto.com/viewtopic.php?f=141&t=40703 Все из-за крутой табуляции? Нет, там сказано про ручной дебаг. 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