SumRak24Rus Posted January 12, 2017 Share Posted January 12, 2017 Народ нужна помощь скриптера, есть рабочая система сохранения бд вещей позиций игроков при выходе и т.д.. Она работала на моей старой сборке. При команде "stop dayz" она сохраняла userdat'u игроков мест стояния палаток и авто, сейчас такая проблема поставил на другую сборку не получается настроить её, она не запускается, при старте сервера пишет что приконнектилась к sqlite базе, но стопаешь дайз папка пустая без новой базы, если стопаешь систему во время работы на сервере и запускаешь пишет в чат синим userdata:0x1 Как её настроить то? Нужно что-бы она сохраняла тенты сейфы и авто. Спасибо большое кто поможет. Хелпаните ребята кто понимает в бд. Link to comment
SumRak24Rus Posted January 12, 2017 Author Share Posted January 12, 2017 Вот сам скрипт: 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
LoveFist Posted January 13, 2017 Share Posted January 13, 2017 Безумный скрипт Зачем пересоздавать базу при каждом сохранении? Вряд ли у кого-то будет желание разбираться в этом. Смотрите логи, делайте отладку. Проверяйте на каком этапе выполнения скрипта происходит ошибка. Хотя вообще странно что это могло работать... Link to comment
SumRak24Rus Posted January 20, 2017 Author Share Posted January 20, 2017 On 14.01.2017 at 02:51, LoveFist said: Безумный скрипт Зачем пересоздавать базу при каждом сохранении? Вряд ли у кого-то будет желание разбираться в этом. Смотрите логи, делайте отладку. Проверяйте на каком этапе выполнения скрипта происходит ошибка. Хотя вообще странно что это могло работать... Она хорошо автоматически работала, при стопинге дайза, когда стартуешь серв этот скрипт сам загружал бд при старте, Но взял эту систему на другую сборку и там не пашет, при старте пишет ошибку в чат и всё, в дебагскрипте нет ошибок на неё когда стартуешь, только в чат пишет синим userdata:0x1 , и всё. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now