-Rex- Posted April 21, 2016 Share Posted April 21, 2016 (edited) Hola, a todos, He decidido liberar mi sistema de guardado de tiendas y vehiculos para tu DayZ, Este funciona a través de una base de datos SQLite. ¿Como lo uso? Pues simple al iniciar el recurso este restaura todas las Tiendas y Autos que se hayan guardado, Pero para guardar las tiendas y vehiculos solo basta con parar el recurso y este comenzara a guardar Todas las Tiendas y Vehiculos de tu servidor ( Destruye cada tienda y auto que va guardando ) en la base de datos y esto Dara solo unos segundos de network trouble.. En pocas palabras, Al iniciar el recurso restaura lo que se haya guardado y al parar el recurso guarda las tiendas y vehiculos. ¿Lo puedo Editar? Claro, Pero no remover los creditos. ¿Necesita permisos ACL? No necesariamente, Solo necesitaria permisos ACL si la base de datos esta en una carpeta externa. Debes agregar en el meta esto, Por que hay algunas funciones que usan OOP. true Aquí el codigo --///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// --Proyecto: N/A. // --Desarrolladores: -Rex- // --Testers: "N/A". // / --Informacion: Sistema de guardado de Tiendas y Vehiculos para tu DayZ A través de una base de datos SQLite. --Version: 1.0 BETA // --Derechos: Tu tienes derecho a editar 100% el codigo, Pero NO tienes derecho a vender o quitar los creditos del mismo, Sin permisos del autor. // --///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// local inventoryItems = { --Aqui pegas la tabla del inventory.lua {"AK-74", 3}, {"AKM", 3}, {"AKS-74 Kobra", 3}, {"PKP", 3 }, {"PKM", 3 }, {"L85A2 Holo", 3}, {"L85A2 SUSAT", 3}, {"M16A2", 3}, {"M16A2 M203", 3}, {"M16A4 ACOG", 3}, {"M4A1", 3}, {"M4A1 CCO", 3}, {"M4A1 CCO SD", 3}, {"M4A1 Holo", 3}, {"M4A3 CCO", 3}, {"SA-58 CCO", 3}, {"SA-58P", 3}, {"SA-58V", 3}, {"SA-58V ACOG", 3}, {"M240", 3}, {"MAX_Slots"}, } --El directorio de tu base de datos ( Usa SQLitebrowser para crear una ) local db = dbConnect( "sqlite", ":sqlitedb/dbData.db" ) local cache = {} local objeto = {} local vehis = {} local actual = 0 local totaltents = 0 local totalveh = 0 function onStart( ) local qh = db:query( "CREATE TABLE IF NOT EXISTS tents_backups ( tent_n INTEGER, dato STRING, cantidad INTEGER, posx FLOAT, posy FLOAT, posz FLOAT ) ") local qh2 = db:query( "CREATE TABLE IF NOT EXISTS vehiculos_backups ( modelo INTEGER, maxslots INTEGER, fuel INTEGER, maxfuel INTEGER, ruedas INTEGER, motor INTEGER, deposito INTEGER, posx FLOAT, posy FLOAT, posz FLOAT, rotx FLOAT, roty FLOAT, rotz FLOAT ) ") dbFree( qh ) dbFree( qh2 ) outputServerLog( "Se restauro los datos del servidor") outputChatBox("Atencion! Se esta Restaurando todos los datos del servidor, Por favor no desconectarse!",getRootElement( )) local qee = db:query("SELECT tent_n, posx, posy, posz FROM tents_backups") for ide, valor in pairs( dbPoll( qee, -1 ) ) do if actual ~= valor["tent_n"] then actual = valor["tent_n"] totaltents = totaltents +1 local x, y, z = valor["posx"], valor["posy"], valor["posz"]; objeto.tent = createObject(3243, x,y,z) setObjectScale(objeto.tent,1) objeto.tentCol = createColSphere(x,y,z,10) attachElements ( objeto.tentCol, objeto.tent, 0, 0, 0 ) setElementData(objeto.tentCol,"parent",objeto.tent) setElementData(objeto.tent,"parent",objeto.tentCol) setElementData(objeto.tentCol,"tent",true) setElementData(objeto.tentCol,"vehicle",true) setElementData(objeto.tentCol, "MAX_Slots", 100) local qeee = db:query("SELECT dato, cantidad FROM tents_backups WHERE tent_n=?", valor["tent_n"] ) for _, v in pairs( dbPoll( qeee, -1 ) ) do setElementData(objeto.tentCol, v["dato"], tonumber( v["cantidad"] ) ) end end end local qhj = db:query( "SELECT * FROM vehiculos_backups") local vehiclesTable = dbPoll( qhj, -1 ) for t, columna in ipairs( vehiclesTable ) do totalveh = totalveh + 1 local modelo, maxsl, fuel, maxfue = columna["modelo"],columna["maxslots"],columna["fuel"],columna["maxfuel"]; local rueda, motor = columna["ruedas"], columna["motor"] local deposito, vehx = columna["deposito"],columna["posx"] local vehy, vehz, vehrx = columna["posy"],columna["posz"],columna["rotx"]; local vehry, vehrz = columna["roty"],columna["rotz"]; vehis.vehic = createVehicle( modelo, vehx, vehy, vehz ) setElementRotation( vehis.vehic, vehrx, vehry, vehrz ) vehis.colS = createColSphere( vehx, vehy, vehz, 4 ) attachElements ( vehis.colS, vehis.vehic, 0, 0, 0 ) setElementData(vehis.colS,"parent",vehis.vehic) setElementData(vehis.vehic,"parent",vehis.colS) setElementData(vehis.colS,"vehicle",true) setElementData(vehis.colS,"MAX_Slots",maxsl) setElementData(vehis.colS,"maxfuel",maxfue) setElementData(vehis.colS,"Tire_inVehicle",rueda) setElementData(vehis.colS,"Engine_inVehicle",motor) setElementData(vehis.colS,"Parts_inVehicle",deposito) setElementData(vehis.colS,"fuel",fuel) end outputChatBox("Se han restaurado "..totaltents.." Tiendas y "..tostring( totalveh ).." Vehiculos!") end addEventHandler("onResourceStart", getResourceRootElement( getThisResource()), onStart) local tentNum = 0 function startBackup( ) local qhr = db:query( "DROP TABLE tents_backups" ) dbFree( qhr ) local qhrE = db:query( "DROP TABLE vehiculos_backups" ) dbFree( qhrE ) local qh3 = db:query( "CREATE TABLE IF NOT EXISTS tents_backups ( tent_n INTEGER, dato STRING, cantidad INTEGER, posx FLOAT, posy FLOAT, posz FLOAT ) ") dbFree( qh3 ) local qh2 = db:query( "CREATE TABLE IF NOT EXISTS vehiculos_backups ( modelo INTEGER, maxslots INTEGER, fuel INTEGER, maxfuel INTEGER, ruedas INTEGER, motor INTEGER, deposito INTEGER, bateria INTEGER, rotor INTEGER, posx FLOAT, posy FLOAT, posz FLOAT, rotx FLOAT, roty FLOAT, rotz FLOAT ) ") dbFree( qh2 ) outputChatBox("Atencion! Se esta llevando a cabo una copia de seguridad del servidor, Por favor no desconectarse",getRootElement( )) --Guardado de tents En la base de datos for i, col in ipairs( getElementsByType("colshape") ) do if col:getData("tent") == true then local x,y,z = getElementPosition( col ) local ta = db:query("SELECT * FROM tents_backups WHERE posx=? AND posy=? AND posz=?", x,y,z ) if #dbPoll( ta, -1 ) == 0 then tentNum = tentNum + 1 db:exec("INSERT INTO tents_backups ( tent_n, dato, cantidad, posx, posy, posz ) VALUES ( ?, ?, ?, ?, ?, ? )", tentNum, "",1, x,y,z ) end for _, datot in ipairs( inventoryItems ) do local qh = db:query("SELECT * FROM tents_backups WHERE posx=? AND posy=? AND posz=?", x,y,z ) for _, columna in ipairs( dbPoll( qh, - 1 )) do local ntent = columna["tent_n"] if cache["tentguardada_"..tostring(ntent)] then if cache["tentguardada_"..tostring(ntent)] == true then break end end local itemD = datot[1]; local dat = col:getData( itemD ) or 0 if dat and dat >= 1 then local q = db:query("SELECT * FROM tents_backups WHERE dato=? AND tent_n=?", itemD, tentNum) local h = #dbPoll( q, -1 ) if h == 0 then db:exec("INSERT INTO tents_backups ( tent_n, dato, cantidad, posx, posy, posz ) VALUES ( ?, ?, ?, ?, ?,? )", ntent, itemD, dat, 0,0,0 ) end end end end destroyElement(getElementData(col,"parent")) destroyElement(col) cache["tentguardada_"..tostring(tentNum)] = true --Guardando la id de la tent en una variable logica, Se evita que se vuelva a repetir el loop end end --Vehiculos for _, vehiculo in ipairs( getElementsByType("vehicle") ) do local veh = getElementData( vehiculo,"parent" ) local modelID = getElementModel( vehiculo ) local vehx, vehy, vehz = getElementPosition( vehiculo) local rx, ry, rz = getElementRotation( vehiculo ) if getElementData( veh, "vehicle" ) then totalveh = totalveh + 1 local maxSl = getElementData( veh, "MAX_Slots" ) local maxFuel = getElementData( veh, "maxfuel" ) local fuel = getElementData( veh, "fuel" ) local ruedas = getElementData( veh, "Tire_inVehicle" ) local motor = getElementData( veh, "Engine_inVehicle" ) local deposito = getElementData( veh, "Parts_inVehicle" ) db:exec( "INSERT INTO vehiculos_backups ( modelo, maxslots, fuel, maxfuel, ruedas, motor, deposito, posx, posy, posz, rotx, roty, rotz ) VALUES ( ?, ?, ?,?,?, ?, ?, ?,?, ?, ?, ?, ? )", modelID, maxSl, fuel, maxFuel, ruedas, motor, deposito, vehx, vehy, vehz, rx, ry, rz) destroyElement( getElementData( veh,"parent" ) ) destroyElement( veh ) end end outputChatBox("Copia de seguridad Guardada!",getRootElement( )) end addEventHandler("onResourceStop", getResourceRootElement( getThisResource()), startBackup) Cualquier bug o error no dudes en avisarme. Edited April 21, 2016 by Guest Link to comment
aka Blue Posted April 21, 2016 Share Posted April 21, 2016 Buen aporte. No he usado nunca MTA DAYZ pero la verdad es que se ve bastante interesante. Link to comment
-Rex- Posted April 21, 2016 Author Share Posted April 21, 2016 Buen aporte. No he usado nunca MTA DAYZ pero la verdad es que se ve bastante interesante. Gracias, Seguire haciendo aportes 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