Error:
Script:
addEventHandler("onResourceStart",resourceRoot,
function()
database = dbConnect("sqlite","database.db")
local name = getServerName()
if string.find (name,"Default MTA Serfer") then
if auto_load == true then
loadDataBase()
end
return true
end
cancelEvent()
end)
local FanboxDayZ = getResourceFromName "DayZ"
function onStart()
if getResourceState(FanboxDayZ) == "running"then
outputChatBox(" ",player,255,255,255,true)
outputChatBox("#FF0000Project Paradise #FFFFFFСервер ON...",player,255,255,255,true)
saveDataBased()
end
end
setTimer(onStart,backTime,0)
function loadDataBase()
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,"tent")
end
end
end
end
function saveDataBased()
outputChatBox(" ",getRootElement(),255,255,255,true)
outputChatBox("#FF0000Project Paradise:#FFFFFF Идет сохранение данных сервера...",getRootElement(),255,255,255,true)
destroyDataBase("tents")
destroyDataBase("vehicles")
for i,tent in ipairs(getElementsByType("colshape")) do
if getElementData(tent,"tent") then
local x,y,z = getElementPosition(tent)
local col = getElementData(tent,"parent")
local rotx,roty,rot = getElementRotation(getElementData(tent,"parent"))
local dataT = {}
local noDeleteTent = false
for i,v in ipairs(serverData["items"]) do
local data = getElementData(tent,v[1]) or 0
if data > 0 then
noDeleteTent = true
end
table.insert(dataT,{v[1],data})
end
if noDeleteTent == true then
local result = dbQuery( database,"INSERT INTO `tents` VALUES ('"..x.."', '"..y.."', '"..z.."', '"..rot.."','"..toJSON(dataT).."');")
dbFree (result)
else
destroyElement(tent)
destroyElement(col)
end
end
end
for index,element in ipairs(getElementsByType("vehicle")) do
local x,y,z = getElementPosition(element)
local col = getElementData(element,"parent")
local rotx,roty,rot = getElementRotation(element)
local model = getElementModel(element)
local health = getElementHealth(element)
local dataT = {}
for i,v in ipairs(serverData["items"]) do
if col ~= false then
local data = getElementData(col,v[1]) or 0
table.insert(dataT,{v[1],data})
end
end
for i,v in ipairs(serverData["vehicle"]) do
if col ~= false then
local data = getElementData(col,v[1]) or 0
table.insert(dataT,{v[1],data})
end
end
local result = dbQuery(database,"INSERT INTO `vehicles` VALUES ('"..model.."','"..x.."', '"..y.."', '"..z.."', '"..rot.."','"..health.."', '"..toJSON(dataT).."');")
dbFree(result)
end
outputChatBox("#FF0000Project Paradise:#FFFFFF Сохранение данных успешно завершено..",getRootElement(),255,255,255,true)
setTimer ( function()
baseCopy()
end,10000,1)
end
function autoStopSave()
if auto_save == true then
saveDataBased()
end
end
addEventHandler("onResourceStop",getResourceRootElement(getThisResource()),autoStopSave)
addCommandHandler("save",function(player)
if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup(adm_group)) then
saveDataBased()
end
end)
addCommandHandler("load",function(player)
if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup(adm_group)) then
if auto_load == true then
outputChatBox("Включена автоматическая загрузка данных, загружать в ручную нельзя.",player,255,0,0,true)
outputChatBox("Используйте собственную секретную команду для управления автозагрузкой.",player,255,0,0,true)
return true
end
loadDataBase()
outputChatBox("#00cc00Данные с базы загружены.",player,255,255,255,true)
end
end)
addCommandHandler("autoloadoff",function(player)
if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup(adm_group)) then
if auto_load == true then
auto_load = false
outputChatBox("Автозагрузка временно отключена!",player)
else
auto_load = true
outputChatBox("Автозагрузка временно включена!",player)
end
end
end)
addCommandHandler("autolsaveoff",function(player)
if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup(adm_group)) then
if auto_save == true then
auto_save = false
outputChatBox("Автоматическое сохранение временно отключено!",player)
else
auto_save = true
outputChatBox("Автоматическое сохранение временно включено!",player)
end
end
end)
function destroyDataBase(base)
if base == "vehicles" then
local qh = dbQuery(database,"DELETE FROM vehicles")
local result = dbPoll(qh,-1)
elseif base == "tents" then
local qh = dbQuery(database,"DELETE FROM tents")
local result = dbPoll(qh,-1)
end
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'])
local health = tonumber(row['health'])
veh = createVehicle(model,x,y,z,0,0,r)
vehCol = createColSphere(x,y,z,3)
attachElements(vehCol,veh,0,0,0)
setElementData(vehCol,"parent",veh)
setElementData(veh,"parent",vehCol)
setElementData(vehCol,"vehicle",true)
setElementData(vehCol,"ID",row)
setElementHealth(veh,health)
for i,v in pairs(data) do
setElementData(vehCol,v[1],v[2])
end
end
function createNewTent(row,class)
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 class == "tent" then
tent = createObject(2220,x,y,z,0,0,r)
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
if getElementData(tentCol,"MAX_Slots") == false or nil then
setElementData(tentCol,"MAX_Slots",200)
end
if getElementData(tentCol,"MAX_Slots") == 200 then
setElementModel(tent,2220)
elseif getElementData(tentCol,"MAX_Slots") == 300 then
setElementModel(tent,2218)
elseif getElementData(tentCol,"MAX_Slots") == 500 then
setElementModel(tent,2222)
end
end
end
function baseCopy()
local randomName = randomString(10)
local time = getRealTime()
local second = time.second
local minute = time.minute
local hour = time.hour
local monthday = time.monthday
local month = time.month
local year = time.year
local players = getPlayerCount()
fileCopy("database.db","database_backup/"..monthday.."."..month + 1 ..".".. year + 1900 .."_"..hour.."."..minute.."."..second.."_"..randomName.."_"..players..".db")
end
function randomString(sym_num)
symbols = {"A","a","B","b","C","c","D","d","I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q","R","r","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z"}
local pass = ""
for i = 1, sym_num do
if math.random (1,2) == 1 then
pass = pass..tostring(math.random(0,9))
else
pass = pass..symbols[math.random(1,#symbols)]
end
end
return pass
end
adm_group = "Admin"
backTime = 36000000
auto_load = false
auto_save = false
serverData = {
["vehicle"] = {
{"MAX_Slots"},
{"magaz"},
{"Колесо_inVehicle"},
{"Двигатель_inVehicle"},
{"Parts_inVehicle"},
{"receiver"},
{"vehicle:station"},
{"fuel"},
{"spawn"},
},
["items"] = {
{"murders_total"},
{"alivetime"},
{"alivetime_total"},
{"skin"},
{"MAX_Slots"},
{"blood"},
{"food"},
{"thirst"},
{"currentweapon_1"},
{"currentweapon_2"},
{"currentweapon_3"},
{"headshots"},
{"murders"},
{"zombieskilled"},
{"zombieskilled_total"},
{"Фляга"},
{"Банка макарон"},
{"Банка бобов"},
{"Гамбургер"},
{"Makarov.PM Mag"},
{"Балончик с краской(красн.)"},
{"Балончик с краской(синий.)"},
{"Балончик с краской(зеленый.)"},
{"Балончик с краской(желт.)"},
{"Балончик с краской(черный.)"},
{"Балончик с краской(розовый.)"},
{"M9 SD Mag"},
{".45ACP"},
{"Makarov.PM"},
{"Краска (красн.)"},
{"Краска (синий.)"},
{"Краска (зеленый.)"},
{"Краска (желт.)"},
{"Краска (черный.)"},
{"Краска (розовый.)"},
{"M9 SD"},
{"Remington 870"},
{"PDW"},
{"Нож"},
{"Топор"},
{"Пицца"},
{"Банка соды"},
{"Фаер"},
{"Молоко"},
{"PDW Mag"},
{"MP5A5 Mag"},
{"PKP Mag"},
{"STANAG"},
{"Магнитола"},
{"Слезаточивый газ"},
{"Осколочная граната"},
{"Magnum"},
{"Double Shotgun"},
{"Shotgun SPA (Элит)"},
{"MP5A5"},
{"Часы"},
{"Аптечка"},
{"Арбалет"},
{"PDW"},
{"PKP"},
{"Навигатор"},
{"Карта"},
{"Набор инструментов"},
{"Колючая проволока"},
{"DMR Mag"},
{"Сейф"},
{"Стрелы"},
{"M4A1"},
{"DMR"},
{"Инфракрасные очки"},
{"Прибор ночного видения"},
{"Палатка (Армейская)"},
{"Палатка (Туристическая)"},
{"Палатка (Автомобильная)"},
{"Курильщик (скин)"},
{"скин Розиты"},
{"Снайпер (скин)"},
{"Анархист (скин)"},
{"Боб Дортон (скин)"},
{"Призрак (скин)"},
{"Пилот (скин)"},
{"Солдат (скин)"},
{"скин Выжившей №1"},
{"Джон Уик (скин)"},
{"Полицейский (скин)"},
{"Выживший (скин)"},
{"Скин Мерла Диксона"},
{"Скин Дерила Диксона"},
{"Черный бандит (скин)"},
{"Админ Скин"},
{"Гражданский (скин)"},
{"Бинокль"},
{"Пустая фляга"},
{"Пустая банка соды"},
{"Деньги"},
{"Колесо"},
{"Двигатель"},
{"Пустая канистра"},
{"Полная канистра"},
{"Бензобак"},
{"Remington Pellet"},
{"2Rnd. Slug"},
{"Shotgun SPA Pellet"},
{"Рация"},
{"Молот"},
{"Лопата"},
{"Лом"},
{"Парашют"},
{"M240"},
{"MG 36 LT"},
{"M249 SAW"},
{"M24"},
{"AS50"},
{"M107"},
{"KVSK"},
{"M4A1 CCO SD"},
{"M16A2"},
{"AKM"},
{"M16A4 ACOG"},
{"AK-47"},
{"M240 Mag"},
{"MG 36 LT Mag"},
{"M249 Mag"},
{"M24 Mag"},
{"AS50 Mag"},
{"M107 Mag"},
{"KVSK Mag"},
{"AK Mag"},
{"M16A2 Mag"},
{"M16A4 Mag"},
{"AKM Mag"},
{"Рюкзак Assault[20]"},
{"Мешок[30]"},
{"Рюкзак Alice[40]"},
{"Чешский рюкзак[50]"},
{"Военный рюкзак[60]"},
{"Рюкзак Montain[70]"},
{"Рюкзак Vega[80]"},
{"Рюкзак Coyote[100]"},
{"Тактический рюкзак[150]"},
{"clothBody"},
{"clothHead"},
{"Шлем: juggernaut [защ. 97]"},
{"Шлем: Болотный [защ. 97]"},
{"Каска: Камуфляжная [защ. 70]"},
{"Шлем: Камуфляжный с повязкой [защ. 20]"},
{"Шлем: C.E.L.L [защ. 99]"},
{"Капюшон: Ghille (Лес) [защ. 0]"},
{"Гл.убор: Чёрный Берет [защ. 0]"},
{"Гл.убор: Красный Берет [защ. 0]"},
{"Гл.убор: Камуфляжная кепка [защ. 0]"},
{"Плащ: Ghille [защ. 0] (Лес)"},
{"Бронежилет: Противоударный [защ. 30]"},
{"Бронежилет: Баллистический [защ. 60]"},
{"Бронежилет: Тактический [защ. 50]"},
{"Бронежилет: Смерч [защ. 80]"},
},
}