Jump to content

Export Object


Bc#

Recommended Posts

Explico.

Pasa que hace unos días comencé a investigar sobre como hacer objects en lua, pasa que en la wiki no encuentro toda la info que necesito.

Problema.

Hice unos objects globales, pero quiero saber si puedo usarlo tanto en client como en server usando exports. También si puedo definir un lua sin tipo en el meta.

Ejemplo.

exports.lua

function object(tipo,model,pX,pY,pZ,rX,xY,rZ,interior,collisions,alpha,scale) 
    local self = {tipo=tipo, model=model, pX=pX, pY=pY, pZ=pZ, rX=rX, rY=rY, rZ=rZ,  
                interior=interior, collisions=collisions, alpha=alpha, scale=scale} 
  
    local getTipo = function () return self.tipo end 
    local getModelo = function () return self.modelo end 
    local getPosX = function () return self.pX end 
    local getPosY = function () return self.pY end 
    local getPosZ = function () return self.pZ end 
    local getRotX = function () return self.rX end 
    local getRotY = function () return self.rY end 
    local getRotZ = function () return self.rZ end 
    local getInterior = function () return self.interior end 
    local getCollisions = function () return self.collisions end 
    local getAlpha = function () return self.alpha end 
    local getScale = function () return self.scale end 
  
    return { 
        getTipo = getTipo, 
        getModelo = getModelo, 
        getPosX = getPosX, 
        getPosY = getPosY, 
        getPosZ = getPosZ, 
        getRotX = getRotX, 
        getRotY = getRotY, 
        getRotZ = getRotZ, 
        getInterior = getInterior, 
        getCollisions = getCollisions, 
        getAlpha = getAlpha, 
        getScale = getScale 
    } 
end 

meta.xml

"Bc" type="gamemode" version="2.0.0" /> 
client="1.3.1-9.04123" /> 
  

PD: Estoy creando la base para un Multi Gamemode, si alguien gusta prestarme apoyo bienvenido sea.

PD2: Si, volví a hacer scripts.

Link to comment

Si lo que quieres hacer es un lector de mapas, el gamemode Paradise mismo tiene uno bastante mejorable desde mi punto de vista pero que lee los archivos sin estar metidos en el meta.xml mediante XML Functions, vamos.

PD: No estoy seguro si entendí tu duda, pero ahí te lo dejo xD.

Link to comment

Estoy tratando de hacer algo propio, estoy recurriendo a esta usefull para evitarme los exports. Pero no me resulta T.T

CallServerFunction

Edit: Comprobé la usefull, pero el problema es que no retorna nada.

Edit 2: Solucionado. No tenia idea que si en un script tengo 2 archivos server-side, las funciones se exportan automaticamente.

Link to comment
Estoy tratando de hacer algo propio, estoy recurriendo a esta usefull para evitarme los exports. Pero no me resulta T.T

CallServerFunction

Edit: Comprobé la usefull, pero el problema es que no retorna nada.

Edit 2: Solucionado. No tenia idea que si en un script tengo 2 archivos server-side, las funciones se exportan automaticamente.

Las funciones (a menos que las definas localmente) están compartidas entre todos los archivos del mismo tipo (cliente/servidor).

Si no especificas el tipo de script en el meta este será de tipo servidor.

Link to comment

Me surgio otro problema dejo el codigo y explico:

Server-Side

local dmMaps = {} 
local ddMaps = {} 
local hunterMaps = {} 
  
function loadMaps() 
    local mapa 
    for k,v in ipairs(getResources()) do 
        if (getResourceInfo(v,"type") == "map") and (getResourceInfo(v,"gamemodes") == "race") and getResourceInfo(v,"name") then 
            mapa = maps(v) 
            if mapa.getType() == "DM" then 
                table.insert(dmMaps,mapa) 
            elseif mapa.getType() == "DD" then 
                table.insert(ddMaps,mapa) 
            elseif mapa.getType() == "Hunter" then 
                table.insert(hunterMaps,mapa) 
            end 
        end 
    end 
    outputDebugString("Mapas Cargados!") 
    triggerClientEvent(playerSource,"onServerSendMaps",playerSource,mapa); 
end 
addCommandHandler ( "smg", loadMaps ) 
  
function maps (map) 
    local self = { 
                name = getResourceInfo(map,"name"),  
                resName = getResourceName(map),  
                mapType = setMapType(getResourceInfo(map,"name"))} 
  
     
    local getName = function () return self.name end 
    local getResName = function () return self.resName end 
    local getMapType = function () return self.mapType end 
     
    return { 
        getName = getName, 
        getResName = getResName, 
        getType = getMapType 
    } 
end 

Client-Side

addEvent("onServerSendMaps",true) 
addEventHandler("onServerSendMaps",root, 
function (mapa) 
    outputChatBox("Mapa: "..mapa.getName())  
end) 

Pasa que en el cliente me reconoce mapa como tabla, pero no me reconoce los elementos..

Link to comment
outputChatBox("Mapa: "..mapa.getName()) 

No entendí por que la columna es una función, Debería quedarte outputChatBox("Mapa: "..mapa.getName)

Es lenguaje orientado a objetos, todas las funciones que están dentro de una función pertenecen a la variable. Si tu lo usas en server-side funciona perfecto pero en client-side no retorna nada, pues es una función enviada desde el servidor.

Ya encontré la solución, como no pude exportar la función con retorno desde server a client lo que hice fue definirla no como una función sino como una variable.

--Pase de esto 
local getName = function () return self.name end 
  
--A esto 
local getName = self.name 

Link to comment
  • Recently Browsing   0 members

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