搜索
查看: 207|回复: 5
收起左侧

[无意义] 这串代码的意思

[复制链接]

升级进度: 12%

BIG桃 发表于 2024-2-24 21:34:56 | 显示全部楼层 |阅读模式
服务器运行过程中会出现SCRIPT ERROR: error object is not a string
  • https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh

  • 这是咋引起的
    https://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y

    https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
  • https://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K

  • https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc

    https://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7


    https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8

    https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
    回复 论坛版权

    使用道具 举报

    ChatGPT 发表于 2024-2-24 21:35:08 | 显示全部楼层
    这个错误可能是由于在服务器脚本中使用了错误的数据类型导致的。服务器脚本中的错误对象应该是一个字符串,但是实际上传入的是其他类型的对象。

    你可以检查一下你的代码,确保在引发错误时使用的是字符串对象。另外,还可以尝试在引发错误之前对错误对象进行类型检查,以确保它是一个字符串。

    例如,在使用错误对象之前,你可以使用下面的代码进行类型检查:
    if type(errorObject) == "string" then
        -- 使用错误对象
    else
        -- 错误对象类型不正确,做出相应处理
        print("错误对象不是一个字符串")
    end

    此外,还需要注意脚本中可能存在其他引起该错误的问题,比如变量未定义或者使用了错误的函数等。如果以上方法没有解决问题,建议你提供更多的相关代码和错误信息,以便我们更好地帮助你定位问题。
    回复

    使用道具 举报

    升级进度: 12%

     楼主| BIG桃 发表于 2024-2-24 21:40:20 | 显示全部楼层
    本帖最后由 2609462116 于 2024-2-24 21:41 编辑

    看一下这个报错
    [script:AI-Doctor-EMS] SCRIPT ERROR: @AI-Doctor-EMS/server.lua:22: attempt to index a nil value (local 'xPlayer')[  script:es_extended] SCRIPT ERROR: error object is not a string


    ESX.RegisterServerCallback('pazzodoktor:doktorsOnline', function(source, cb)
            local xPlayer = ESX.GetPlayerFromId(source)
            local xPlayers = ESX.GetPlayers()
            local medicsOnline = 0
            local enoughMoney = false
            if xPlayer.getMoney() >= Config.Price then
                    enoughMoney = true
            else
                    if xPlayer.getAccount('bank').money >= Config.Price then
                        enoughMoney = true
                    end
            end

            for i=1, #xPlayers, 1 do
                    local xPlayer = ESX.GetPlayerFromId(xPlayers)
                    if xPlayer.job.name == 'ambulance' then
                            medicsOnline = medicsOnline + 1
                    end
            end

            cb(medicsOnline, enoughMoney)
    end)
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-24 21:40:32 | 显示全部楼层
    2609462116 发表于 2024-02-24 21:40
    看一下这个报错
    > handler (@es_extended/server/mod ...


    根据你提供的代码和报错信息,问题出现在 `ESX.RegisterServerCallback` 的回调函数中。

    首先需要确保你在服务器脚本中正确导入了 `ESX`,并且 `ESX.GetPlayerFromId` 和 `ESX.GetPlayers` 等函数是可用的。

    另外,报错信息提示 `error object is not a string`,这可能是由于回调函数中的 `cb` 参数被传递了一个错误的数据类型。请检查你在调用该回调函数时,传递给 `cb` 参数的值是否是字符串类型。

    如果以上方法没有解决问题,建议你提供完整的报错日志和相关代码,以便更好地帮助你定位问题。
    回复

    使用道具 举报

    升级进度: 12%

     楼主| BIG桃 发表于 2024-2-24 21:43:52 | 显示全部楼层
    看一下这个报错
    [script:AI-Doctor-EMS] SCRIPT ERROR: @AI-Doctor-EMS/server.lua:22: attempt to index a nil value (local 'xPlayer')[  script:es_extended] SCRIPT ERROR: error object is not a string


    ESX.RegisterServerCallback('pazzodoktor:doktorsOnline', function(source, cb)
            local xPlayer = ESX.GetPlayerFromId(source)
            local xPlayers = ESX.GetPlayers()
            local medicsOnline = 0
            local enoughMoney = false
            if xPlayer.getMoney() >= Config.Price then
                    enoughMoney = true
            else
                    if xPlayer.getAccount('bank').money >= Config.Price then
                        enoughMoney = true
                    end
            end

            for i=1, #xPlayers, 1 do
                    local xPlayer = ESX.GetPlayerFromId(xPlayers)
                    if xPlayer.job.name == 'ambulance' then
                            medicsOnline = medicsOnline + 1
                    end
            end

            cb(medicsOnline, enoughMoney)
    end)
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-24 21:44:11 | 显示全部楼层
    2609462116 发表于 2024-02-24 21:43
    看一下这个报错
    SCRIPT ERROR: @AI-Doctor-EMS/serve ...


    根据你提供的代码和报错信息,问题出现在第22行 `xPlayer` 的索引上。错误提示是尝试对一个空值(nil)进行索引操作。

    在你的代码中,有两个地方使用了 `xPlayer` 变量。首先是在第3行使用 `ESX.GetPlayerFromId(source)` 来获取玩家对象,并将其赋值给 `xPlayer`。然后在第19和20行,你又在条件判断中使用了 `xPlayer` 变量。

    然而,第19和20行的条件判断块是嵌套在第7到12行的条件判断块中的。这导致在第7到12行的条件判断中创建的 `xPlayer` 变量屏蔽了外部的 `xPlayer` 变量。在此之后,尝试在第19和20行对外部的 `xPlayer` 进行索引操作时,由于它的值为 `nil`,就会出现错误。

    为了解决这个问题,你可以考虑修改第19和20行的代码,使其使用外部的 `xPlayer` 变量。像这样:
    if xPlayer.getMoney() >= Config.Price then
        enoughMoney = true
    else
        if xPlayer.getAccount('bank').money >= Config.Price then
            enoughMoney = true
        end
    end

    这样,你就可以正确地访问来自玩家对象的数据并进行判断。

    请记住,在代码中避免重复定义同名变量,以避免混淆和错误。
    回复

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|首页 ( 冀ICP备2021005225号-1 ) |网站地图

    GMT+8, 2024-10-8 02:27 , Processed in 0.056461 second(s), 9 queries , Redis On.

    Powered by Discuz! X3.4

    © 2001-2013 ELITE论坛【技术无价-分享快乐】

    快速回复 返回顶部 返回列表