Maintenant, j'ai heurté un barrage routier obtenant cette erreur pour le code suivant

box.lua:31 : tentative d'indexation du champ '?' (une valeur nulle)

J'ai essayé de corriger cette erreur, mais j'ai échoué.

Ci-dessous tout le code complet

    function ChatSystem(event, player, msg, Type, lang)
        local Guid = player:GetGUIDLow()
        if flag[Guid] ~= 0 then
            local daan = quiz["box"][flag[Guid]][2];
            local t = msg;
            if (t+1 == daan+1) then
                player:SendBroadcastMessage("[Notice]correct")
                SetPlayerFlag(player, 0)
                SetPlayererror(player, 0)
            else
                cuowu[Guid] = error[Guid] + 1;
                if cuowu[Guid] >= quiz["frequency"] then
                    SetPlayererror(player, 0)
                    Kick( player )
                else
                    player:SendBroadcastMessage("[Notice]  error"..cuowu[Guid].."   "..quiz["box"][flag[Guid]][1].."");
                end
            end
        end
    end
    
    
    function Start (event, player, item, count)
        local datigailv = math.random(1, 100)
        if (datigailv <= quiz["Chance"])then
            local select = math.random(1, 5)
            local Guid = player:GetGUIDLow()
            SetPlayerFlag(player, select)
            SetPlayererror(player, 0)
            player:SendBroadcastMessage("[Notice]answer my question:"..quiz["box"][flag[Guid]][1].."");
        end
    end
    
    RegisterPlayerEvent(32, Start) 
    RegisterPlayerEvent(18, ChatSystem);
lua
0
ECC YY 17 nov. 2020 à 16:58

1 réponse

Meilleure réponse

Comme l'erreur de tableau dans un tableau est difficile à suivre, si cela est possible, essayez de l'éviter ou ajoutez des assertions comme assert(quiz["box"][flag[Guid]]) pour vérifier si vous avez une telle valeur de tableau.

Dans lua, vous pouvez supprimer la valeur avec flag[Guid] = nil au lieu de flag[Guid] = 0.

Ma version sans tableaux et génération de question dynamique :

local quiz = {
  chance = 2,
  frequency = 3
}

local quiz_flags = {}

function ChatSystem(event, player, msg, Type, lang)
  local quiz_info = quiz_flags[player:GetGUIDLow()]
  if quiz_info then
    if tonumber(msg) == quiz_info.answer then
      player:SendBroadcastMessage('[Notice] correct')
      quiz_flags[player:GetGUIDLow()] = nil -- remove flag info
    elseif quiz_info.count >= quiz.frequency then
      quiz_flags[player:GetGUIDLow()] = nil -- remove flag info
      Kick(player)
    else
      player:SendBroadcastMessage('[Notice] error '..quiz_info.count..',   '..quiz_info.question..'=?')
      quiz_info.count = quiz_info.count + 1
    end
  end
end
    
function Start(event, player, item, count)
  if math.random(1, 100) <= quiz.chance then
    -- generate math expression
    local q = math.random(1,3)..(math.random(1,2) == 1 and '+' or '*')..math.random(1,3) 
    quiz_flags[player:GetGUIDLow()] = {
      count = 1,
      question = q,
      answer = load('return '..q)() -- calculate answer
    }
    player:SendBroadcastMessage('[Notice] answer my question: '..q)
  end
end
    
RegisterPlayerEvent(32, Start)
RegisterPlayerEvent(18, ChatSystem)

0
Darius 17 nov. 2020 à 18:55