Jump to content

[REL] Sistema de guardado de Tiendas & Vehiculos para DayZ


Recommended Posts

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 by Guest
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...