Jump to content

Ошибка db userdata: 0x1


Recommended Posts

Народ нужна помощь скриптера, есть рабочая система сохранения бд вещей позиций игроков при выходе и т.д.. Она работала на моей старой сборке. При команде "stop dayz" она сохраняла userdat'u игроков мест стояния палаток и авто, сейчас такая проблема поставил на другую сборку не получается настроить её, она не запускается, при старте сервера пишет что приконнектилась к  sqlite базе, но стопаешь дайз папка пустая без новой базы, если стопаешь систему во время работы на сервере и запускаешь пишет в чат синим

userdata:0x1

Как её настроить то? Нужно что-бы она сохраняла тенты сейфы и авто. Спасибо большое кто поможет. Хелпаните ребята кто понимает в бд.

Link to comment

Вот сам скрипт:

Spoiler

database = dbConnect( "sqlite", "database.db" )
if database then
    outputChatBox(tostring(getRootElement()    ) , getRootElement(), 35, 35, 255)
end

function clearChatBox()
    for i = 1, 20 do
        outputChatBox(" " , getRootElement(), 35, 255, 0)
    end
end

function dataBaseBackup()
    local real_time = getRealTime()
    local hours = real_time.hour
    local minutes = real_time.minute
    local month = real_time.month + 1
    local day = real_time.monthday
    local year = (real_time.year-100) + 2000
    local data = day.."."..month.."."..year
    clearChatBox()
    
    copyDB = fileCopy("/database.db",    "/backups/database ("..data..").db",true)
    
    if copyDB then
        outputChatBox("[Backup] Старая база данных сохранена." , getRootElement(), 35, 255, 0)
        outputChatBox("[Backup] Подготовка новой базы данных." , getRootElement(), 35, 255, 0)
    else
        outputChatBox("[Backup] Ну удалось сохранить старую базу данных!", getRootElement(), 255, 0, 0)
        outputChatBox("[Backup] Подготовка новой базы данных." , getRootElement(), 35, 255, 0)
    end
end

function dataBaseDelete()
    local qh = dbQuery(database, "DELETE FROM vehicles")
    local result = dbPoll( qh, -1 )
    dbFree(qh)
    
    local qh = dbQuery(database, "DELETE FROM tents")
    local result = dbPoll( qh, -1 )
    dbFree(qh)
    
    local qh = dbQuery(database, "DELETE FROM tents1")
    local result = dbPoll( qh, -1 )
    dbFree(qh)
    
    local qh = dbQuery(database, "DELETE FROM safe")
    local result = dbPoll( qh, -1 )
    dbFree(qh)
    
    outputChatBox("[Backup] База данных очищена и готова к сохранению." , getRootElement(), 35, 255, 0)
end

function getVehicleData(vehicle)
        local data_table = {}
        local data = getAllElementData(vehicle)
        for k, v in pairs ( data ) do
            if type(v) ~= "userdata" then
                table.insert(data_table,{k,v})
            end
        end
        return toJSON(data_table)
end

function getTentData(tent)
    local data_table = {}
    local data = getAllElementData(tent)
    for k, v in pairs ( data ) do
        if type(v) ~= "userdata" then
            table.insert(data_table,{k,v})
        end
    end
    return toJSON(data_table)
end

function getTentData(tent1)
    local data_table = {}
    local data = getAllElementData(tent1)
    for k, v in pairs ( data ) do
        if type(v) ~= "userdata" then
            table.insert(data_table,{k,v})
        end
    end
    return toJSON(data_table)
end

function getTentData(safe)
    local data_table = {}
    local data = getAllElementData(safe)
    for k, v in pairs ( data ) do
        if type(v) ~= "userdata" then
            table.insert(data_table,{k,v})
        end
    end
    return toJSON(data_table)
end

function createNewVehicle(row)
    local model = tonumber(row['model'])
    local data = fromJSON(row['data'])
    local x = tonumber(row['x'])
    local y = tonumber(row['y'])
    local z = tonumber(row['z'])
    local r = tonumber(row['r'])
    
    if model and data and x and y and z and r then
        veh = createVehicle(model,x,y,z,0,0,r)
        vehCol = createColSphere(x,y,z,3)
        attachElements(vehCol,veh,0,0,1.5)
        setElementData(vehCol,"parent",veh)
        setElementData(veh,"parent",vehCol)
        setElementData(vehCol,"vehicle",true)
        
        for i,v in pairs(data) do
            setElementData(vehCol,v[1],v[2])
        end
    end
    
end

function createNewTent(row)

    local data = fromJSON(row['data'])
    local x = tonumber(row['x'])
    local y = tonumber(row['y'])
    local z = tonumber(row['z'])
    local r = tonumber(row['r'])
    if data and x and y and z and r then
        tent = createObject(3243,x,y,z,0,0,r)
        setObjectScale(tent,1.3)
        tentCol = createColSphere(x,y,z,4)
        attachElements(tentCol,tent,0,0,0)
        setElementData(tentCol,"parent",tent)
        setElementData(tent,"parent",tentCol)
        setElementData(tentCol,"tent",true)
        setElementData(tentCol,"vehicle",true)
        
        for i,v in pairs(data) do
            setElementData(tentCol,v[1],v[2])
        end
    end
    if data and x and y and z and r then
        tent = createObject(14581,x,y,z,0,0,r)
        setObjectScale(tent,1.3)
        tentCol = createColSphere(x,y,z,4)
        attachElements(tentCol,tent,0,0,0)
        setElementData(tentCol,"parent",tent)
        setElementData(tent,"parent",tentCol)
        setElementData(tentCol,"tent1",true)
        setElementData(tentCol,"vehicle",true)
        
        for i,v in pairs(data) do
            setElementData(tentCol,v[1],v[2])
        end
    end
    if data and x and y and z and r then
        tent = createObject(1832,x,y,z,0,0,r)
        setObjectScale(tent,1.3)
        tentCol = createColSphere(x,y,z,4)
        attachElements(tentCol,tent,0,0,0)
        setElementData(tentCol,"parent",tent)
        setElementData(tent,"parent",tentCol)
        setElementData(tentCol,"safe",true)
        setElementData(tentCol,"vehicle",true)
        
        for i,v in pairs(data) do
            setElementData(tentCol,v[1],v[2])
        end
    end
    
end

function loadVehicles(res)
    if getResourceName(res) == "DayZ" then
        setTimer(function()
            local qh = dbQuery(database, "SELECT * FROM vehicles")
            if qh then
                local result, num_affected_rows, errmsg = dbPoll ( qh, -1 )
                if num_affected_rows > 0 then
                    for result, row in pairs ( result ) do
                        createNewVehicle(row)
                    end
                end
            end
            local qh = dbQuery(database, "SELECT * FROM tents")
            if qh then
                local result, num_affected_rows, errmsg = dbPoll ( qh, -1 )
                if num_affected_rows > 0 then
                    for result, row in pairs ( result ) do
                        createNewTent(row)
                    end
                end
            end
            setTimer(saveVehicles,43200000,0,getResourceFromName("DayZ"),true) -- 43200000 | автоматическое сохранение каждые 12 часов
        end,2500,1)
    end

end
addEventHandler("onResourceStart",root, loadVehicles)


function saveVehicles(res,backup)
    if getResourceName(res) == "DayZ" then
        dataBaseBackup()
        dataBaseDelete()        
        outputChatBox("[Backup] Идет сохранение данных. Не выключайте сервер." , getRootElement(), 35, 35, 255)        
        for i, vehicle in ipairs(getElementsByType("colshape")) do
            local col = getElementData(vehicle,"vehicle") or false
            local tent = getElementData(vehicle,"tent") or false
            local object = getElementData(vehicle,"parent") or nil
            if col and object then
                if tent then
                    local data = getTentData(vehicle)
                    if data then
                            local x,y,z = getElementPosition(object)
                            local rotx,roty,r = getElementRotation(object)
                            local result = dbQuery(database,"INSERT INTO  `tents` VALUES ('"..x.."', '"..y.."', '"..z.."', '"..r.."', '"..data.."');")
                            dbFree(result)
                    end
                else
                    local data = getVehicleData(vehicle)
                    if data then
                        local model = getElementModel(object)
                        local x,y,z = getElementPosition(object)
                        local rotx,roty,r = getElementRotation(object)
                        local result = dbQuery(database,"INSERT INTO  `vehicles` VALUES ('"..model.."','"..x.."', '"..y.."', '"..z.."', '"..r.."','"..data.."');")
                        dbFree(result)
                    end
                end
            end
        end
        outputChatBox("[Backup] Данные успешно сохранены." , getRootElement(), 35, 35, 255)        
        if not backup then
            for i, vehicle in ipairs(getElementsByType("vehicle")) do
                local parent = getElementData(vehicle,"parent") or false
                if parent then
                    if isElement(parent) then
                        destroyElement(parent)
                    end
                end
                destroyElement(vehicle)
            end        
            for i, tent in ipairs(getElementsByType("colshape")) do
                if getElementData(tent,"tent") then
                    local parent = getElementData(tent,"parent") or false
                    if parent then
                        if isElement(parent) then
                            destroyElement(parent)
                        end
                    end
                    destroyElement(tent)
                end
            end            
        end        
    end
end
addEventHandler("onResourceStop",root, saveVehicles)

 

Так же создал таблицы в database.db:

tents

x

y

z

r

data

tents1

x

y

z

r

data
safe

x

y

z

r

data

и транспорту 

Link to comment

Безумный скрипт :) Зачем пересоздавать базу при каждом сохранении? Вряд ли у кого-то будет желание разбираться в этом.

Смотрите логи, делайте отладку. Проверяйте на каком этапе выполнения скрипта происходит ошибка. Хотя вообще странно что это могло работать...

Link to comment
On 14.01.2017 at 02:51, LoveFist said:

Безумный скрипт :) Зачем пересоздавать базу при каждом сохранении? Вряд ли у кого-то будет желание разбираться в этом.

Смотрите логи, делайте отладку. Проверяйте на каком этапе выполнения скрипта происходит ошибка. Хотя вообще странно что это могло работать...

Она хорошо автоматически работала, при стопинге дайза, когда стартуешь серв этот скрипт сам загружал бд при старте, Но взял эту систему на другую сборку и там не пашет, при старте пишет ошибку в чат и всё, в дебагскрипте нет ошибок на неё когда стартуешь, только в чат пишет синим  userdata:0x1 , и всё.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...