LUA错误:尝试对布尔值进行算术运算

  ```  local xpNeed = 100; -- 例如,100 * 等级 = 你需要晋升所需的经验值!
    addEvent("onPlayerLevelUp", true);

    function addPlayerXp(player, xp)
        local acc = getPlayerAccount(player);
        local oldexp = getAccountData(acc, "exp") or 0;
        local oldlvl = getAccountData(acc, "lvl") or 1;
        local newlevel = oldlvl + 1;
        local newexp = oldexp + xp;
        lvl = getAccountData(acc, "lvl") or 0;
        if getElementData(player,'lvl') > 9 then return end
        setAccountData(acc, "exp", newexp);
        setElementData(player, "exp", newexp);
        --if getAccountData(acc,'lvl') > 9 then return end
            if (newexp >= (oldlvl * xpNeed)) then
            local expleft = newexp - (oldlvl * xpNeed); -- 添加升级后可能仍存在的经验值计算。
            outputChatBox("[升级] 恭喜!新等级 "..newlevel.."!", player, 66, 134, 244);
            setAccountData(acc, "lvl", newlevel);
            setAccountData(acc, "exp", expleft);
            setElementData(player, "exp", expleft);
            setElementData(player, "lvl", newlevel);
            triggerEvent("onPlayerLevelUp", player, newlevel, oldlvl, oldexp, newexp);
        end
    end
    addEventHandler("onPlayerLogin", root, function()
        local acc = getPlayerAccount(source);
        if acc then
            setElementData(source, "lvl", getAccountData(acc, "lvl") or 0);
            setElementData(source, "exp", getAccountData(acc, "exp") or 0);
        end
    end);

    addEventHandler("onZombieGetsKilled", root, function(killer)
        if killer and getElementType(killer) == "player" then
            addPlayerXp(killer, 50);
        end
    end);

    addEventHandler("kilLDayZPlayer", root, function(killer)
        if (killer and killer ~= source and getElementType(killer) == "player") then
            addPlayerXp(killer, 50);
        end
    end);

    --[[
    addEventHandler("onPlayerSpawn", root, function(newlvl)
        if newlvl then
        if (lvl) > 1 then
                setElementData(player, "MP5A5", 1)
            elseif lvl > 2 then
                setElementData(player, "Tent", 1)
            elseif lvl > 3 then
                setElementData(player, "Milk", 1)
            elseif lvl > 4 then
                setElementData(player, "Medic Kit", 1)
            elseif lvl > 5 then
                setElementData(player, "Shovel", 1)
            end
        end
    end);

    ]]

    table = {"Milk","MP5A5","M4A1-S","AK-47","Soda Bottle","Pizza","AS50","Tent","Medium Tent","ACR","AR-15","M107","Pasta Can","Beans Can","Golf Club"}

    addEventHandler("onPlayerSpawn", root, function(lvl)
        if not lvl then lvl = getElementData(player, "lvl") or 0; end
        if lvl > 1 then
            for i = 1, lvl do
                setElementData(player, table[i], getElementData(player, table[i]) + 1);
            end
        end
    end);
```

你好,这是我在这里的第一篇帖子,所以我想问你好。所以,作为一个初学者程序员,我正在尝试为我的mta服务器实现一个级别系统,但是,我遇到了标题中所述的障碍。这个布尔值在哪里?我应该怎么办才能使它起作用?如果这个问题看起来很琐碎(因为它确实是),但我真的想往前走。任何帮助都将不胜感激。先感谢您的帮助!

在setElementData(player, table[i], getElementData(player, table[i]) + 1);中出现错误,我能做什么来使它工作?任何帮助都将不胜感激

错误行70:尝试对布尔值进行算术运算 和警告相同行

getElementData中的错误参数[在第1个参数中期望元素,而得到nil]

点赞
用户7509065
用户7509065

getElementData 如果你请求的元素不存在,则返回 false。我假设你想将其视为 0 处理,因此用 (getElementData(player, table[i]) or 0) + 1 替换 getElementData(player, table[i]) + 1

此外,看起来你没有一个 player 变量,所以它使用了一个空的全局变量,所以你总是会得到 nil。为了修复这个问题,在你的 onPlayerSpawn 处理程序的开头添加 local player = source

2020-05-06 23:54:35
用户13486501
用户13486501

所以我使用你的函数,我的代码看起来像这样:

   table = {"Milk","MP5A5","M4A1-S","AK-47","Soda Bottle","Pizza","AS50","Tent","Medium Tent","ACR","AR-15","M107","Pasta Can","Beans Can","Golf Club"}

addEventHandler("onPlayerSpawn", root, function(lvl)
local player = source
    if not lvl then lvl = getElementData(player, "lvl") or 0; end
    if lvl >= 1 then
        for i = 1, lvl do
            setElementData(player, "lvl", table[i], (getElementData(player,"lvl", table[i]) or 0) + 1);
        end
    end
end);

我添加了 "lvl",因为我得到了 prnt.sc/sc9hk1,但仍然不起作用,现在我有这个错误:https://prnt.sc/scajbc

2020-05-07 00:56:13
用户3498218
用户3498218

首先,请不要使用 table 作为变量名称。我没有为多盗车手写过程序,但我猜它有 Lua 内置的 table 库,你会覆盖它。

如果数据不存在于该元素中,getElementData 将返回 false,因此您需要检查以确保它存在。

你的代码在每次玩家生成时都会增加该物品的数量,我假设你实际想要做的只是给玩家一个这个物品?

不管怎样,像这样:

 addEventHandler("onPlayerSpawn", root, function(lvl)
        if not lvl then lvl = getElementData(player, "lvl") or 0; end
        if lvl >= 1 then
            for i = 1, lvl do
                local itemCount = getElementData(player, table[i]) or 0
                setElementData(player, table[i], itemCount + 1);
            end
        end
    end);

如果你只是想在每次生成时添加一个单个物品而不是增加它1个,则执行此操作

setElementData(player, table[i], 1);

2020-06-09 14:13:24