猪猪侠 发表于 2024-5-24 23:41:09

翻译


Print(('Converting %s user inventories to new data format'):format(total))

    for i = 1, total do
      count += 1
      local inventory, slot = {}, 0
      local items = users[i].inventory and json.decode(users[i].inventory) or {}
      local accounts = users[i].accounts and json.decode(users[i].accounts) or {}
      local loadout = users[i].loadout and json.decode(users[i].loadout) or {}

      for k, v in pairs(accounts) do
            if type(v) == 'table' then break end
            if server.accounts[k] and Items(k) and v > 0 then
                slot += 1
                inventory[slot] = {slot=slot, name=k, count=v}
            end
      end

      for k in pairs(loadout) do
            local item = Items(k)
            if item then
                slot += 1
                inventory[slot] = {slot=slot, name=k, count=1, metadata = {durability=100}}
                if item.ammoname then
                  inventory[slot].metadata.ammo = 0
                  inventory[slot].metadata.components = {}
                  inventory[slot].metadata.serial = GenerateSerial()
                end
            end
      end

      for k, v in pairs(items) do
            if type(v) == 'table' then break end
            if Items(k) and v > 0 then
                slot += 1
                inventory[slot] = {slot=slot, name=k, count=v}
            end
      end

      parameters[count] = {json.encode(inventory), users[i].identifier}
    end

    MySQL.prepare.await('UPDATE users SET inventory = ? WHERE identifier = ?', parameters)
    Print('Successfully converted user inventories')
    started = false
end

local function ConvertQB()
    if started then
      return warn('Data is already being converted, please wait..')
    end

    started = true
    local users = MySQL.query.await('SELECT citizenid, inventory, money FROM players')
    if not users then return end
    local count = 0
    local parameters = {}

    for i = 1, #users do
      local inventory, slot = {}, 0
      local user = users[i]
      local items = user.inventory and json.decode(user.inventory) or {}
      local accounts = user.money and json.decode(user.money) or {}

      for k, v in pairs(accounts) do
            if type(v) == 'table' then break end
            if k == 'cash' then k = 'money' end

            if server.accounts[k] and Items(k) and v > 0 then
                slot += 1
                inventory[slot] = {slot=slot, name=k, count=v}
            end
      end

      local shouldConvert = false

      for _, v in pairs(items) do
            if Items(v?.name) then
                slot += 1
                inventory[slot] = {slot=slot, name=v.name, count=v.amount, metadata = type(v.info) == 'table' and v.info or {}}
                if v.type == "weapon" then
                  inventory[slot].metadata.durability = v.info.quality or 100
                  inventory[slot].metadata.ammo = v.info.ammo or 0
                  inventory[slot].metadata.components = {}
                  inventory[slot].metadata.serial = v.info.serie or GenerateSerial()
                  inventory[slot].metadata.quality = nil
                end
            end

            shouldConvert = v.amount and true
      end


ChatGPT 发表于 2024-5-24 23:41:19

这段代码主要是将用户的物品以及账户信息从旧的数据格式转换为新的数据格式。代码中涉及了JSON解析、循环遍历等操作。

该代码应该放在服务器端的脚本文件(server.lua)中,因为涉及到与数据库的交互和更新操作。同时,代码中还使用了MySQL数据库相关的操作,所以需要在服务器端进行处理。

如果需要对代码进行进一步的说明或修改,请提供更多细节或需求。
页: [1]
查看完整版本: 翻译