Jump to content

TABLE,ошибка


Recommended Posts

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

ipairs перебирает таблицы, а вы дали ему randomID, который есть число.

p.s. он печатает не все, а работает как раз-таки рандом. некотрые повторяются.

если подставить перебор именно таблицы: for k,settable in ipairs ( servertable ) do

то цикл пройдет шесть раз (собственно, столько в таблице у вас строк: он пройдет ВСЮ таблицу, один проход - одна строка, по очереди). то есть шесть раз (по одному разу за каждый проход) генерируется случайное число, и для него сразу после срабатывает соответствующий if (по одному разу за один проход - получается, что разные if'ы в сумме срабатывают тоже шесть раз). кстати, по-моему, вам следует задуматься об использовании elseif.

Link to comment
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

В данном куске кода все выглядит более-менее логично.

Добавляется новое событие, потом - его обработчик с функцией.

Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а.

Получается, что событие вызывается несколько раз? Ищите проблему в вызове события.

Link to comment
В данном куске кода все выглядит более-менее логично.

Добавляется новое событие, потом - его обработчик с функцией.

Цикла нет, следовательно, один раз генерируется рандомное число, а потом один раз, в зависимости от этого числа, выполняется соответствующая ему часть if'а.

Получается, что событие вызывается несколько раз? Ищите проблему в вызове события.

Дело в том,что событие вызывается 1 раз,но исполняются не 1 рандомное,а сразу все 6...как быть?

Link to comment

Ну не может же randomID одновременно принимать шесть значений...

Добавляйте вывод в чат или в дебаг тех значений, от которых зависит выполнение.

Может, наведет на какие-нибудь мысли.

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