Jump to content

TABLE,ошибка


Recommended Posts

Posted

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) 

Posted

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

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

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

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

Posted
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 
      ) 

Posted

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

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

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

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

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

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

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

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

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

Posted

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

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

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

  • Moderators
Posted

Все из-за крутой табуляции?

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!

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