1
  ```  local xpNeed = 100; -- E.g. 100 * lvl = XP you need to rank up!
    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); -- added calculation for the exp that may remains after level up.
            outputChatBox("[Level-Up] Congratulations! New level "..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 ]

4

3 回答 3

0

首先,请不要table用作变量名。我还没有为 Multi Theft Auto 写过文章,但我猜它有 Lua 内置表库,你会覆盖它。

如果该元素的数据不存在,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-09T14:13:24.550 回答
0

getElementData如果您要求的元素不存在,则可以返回 false。我假设您希望将其视为 0,因此请替换getElementData(player, table[i]) + 1(getElementData(player, table[i]) or 0) + 1.

此外,看起来你player那里没有变量,所以它使用 nil 全局变量,所以你总是会得到 nil。要解决这个问题,请local player = source在处理程序的开头执行onPlayerSpawn

于 2020-05-06T23:54:35.310 回答
0

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

   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”bcs prnt.sc/sc9hk1 我得到但仍然无法工作,现在我有这个错误:https ://prnt.sc/scajbc

于 2020-05-07T00:56:13.863 回答