Kilfwan Posted August 31, 2015 Share Posted August 31, 2015 Hola, Tengo esta duda hace dias, Quisiera mandar un texto o dato desde una tabla a server side por ejemplo asi: tabla = { {"ITEM",500}, } Yo quiero hacer que el segundo valor o tercera o quinta como yo lo organice, lo pueda mandar a server side, ya que esto lo meto a una gridlist y quisiera saber como usar los datos de la tabla sin necesidad de añadir otra columna para ese segundo valor, si no que usar directamente lo de la tabla, uso esto en una columna: function seleccion() seleccionado = guiGridListGetSelectedItem(shopp) item = guiGridListGetItemText ( shopp, seleccionado, columna) precios = guiGridListGetItemText ( shopp, seleccionado, precio) triggerServerEvent("textoBoton", getLocalPlayer(), item, precios) end addEventHandler("onClientGUIClick", shopp, seleccion, false) y esto seria en server side: addEvent ("comprarItems", true) addEventHandler ("comprarItems", root, function ( item, precio, monto ) local money = getPlayerMoney( source ) if ( money >= tonumber(precio) ) then name = getPlayerName(source) outputChatBox(" "..name..": Compro "..item .." por "..precio.." !", getRootElement(), 0, 255, 0, true) takePlayerMoney( source, precio) else outputChatBox("No tienes dinero", source, 200, 0,0, true) end end ) Pero yo no quiero usar la gridlist, sino solo la tabla para textos o precios, ¿Como tendría que hacerlo? ¿Me podrían dar un ejemplo? Link to comment
alex17 Posted August 31, 2015 Share Posted August 31, 2015 tabla = { {item = "ITEM", precio = 500}, } function seleccion () for k,data in pairs(tabla) do local intem = data.item local precio = data.precio triggerServerEvent("textoBoton", getLocalPlayer(), item, precio) end end Link to comment
Kilfwan Posted August 31, 2015 Author Share Posted August 31, 2015 tabla = { {item = "ITEM", precio = 500}, } function seleccion () for k,data in pairs(tabla) do local intem = data.item local precio = data.precio triggerServerEvent("textoBoton", getLocalPlayer(), item, precio) end end Yo me refería a no usar el for .--. , Pero una cosa, ipairs es para agregar todos los valores no? Y pairs para hacer lo que hiciste arriba? Si es así gracias entonces. Link to comment
Kilfwan Posted September 5, 2015 Author Share Posted September 5, 2015 Revivo, Estaba practicando un rato con el exp_system pero al crear un solo marker anda todo perfecto, Pero si pongo mas cosas en la tabla me sale todo junto, por ejemplo si en el primer marker puse solo apto para nivel 3 y yo soy nivel 3 da el mensaje y si en el segundo marker esta en nivel 4 me tira el mensaje de error junto con el primero que es el del nivel 3. Con esto estaba practicando: Server tabla = { {nivel = "3", x = -701.599609375, y = 987.353515625, z =12.375272750854, r = 0, g = 255, b = 0}, {nivel = "4", x = -710.3603515625, y = 988.5927734375, z = 12.379697799683,r = 0, g = 0, b = 255} } for k, s in ipairs(tabla) do local x = s.x local y = s.y local z = s.z local r = s.r local g = s.g local b = s.b createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ) end function entras (hitElement) for valor, item in pairs (tabla) do local numerito = item.nivel triggerClientEvent(hitElement, "abrenivel", hitElement, numerito) end end addEventHandler("onMarkerHit", resourceRoot, entras) Client .- function asdadsasd (numerito) local nivel = exports.exp_system:getPlayerLevel( source ) if nivel >= tonumber(numerito) then outputChatBox("Eres apto para usar el marker") else outputChatBox("No tienes el nivel suficiente para entrar a este Marker") end end addEvent("abrenivel", true) addEventHandler("abrenivel", localPlayer, asdadsasd) Aca la print que sale el doble mensaje: En debugscript no tira ningún error. Este seria casi la ultima cosa que me falta aprender de las tablas, Pero mi duda es ¿Por que me sale doble? Ayuden me con eso . Link to comment
Enargy, Posted September 5, 2015 Share Posted September 5, 2015 Aun no perfecciono mi conocimientoven tablas, pero puedes usar getPlayerLever como indice, por que ' numerito ' no estas especificando a cual indice quieres exportar. Prueba usando 'numerito = item[getPlayerLevel]' No estoy en pc, se me hace dificil explicarte si no testeo. Sry Link to comment
Tomas Posted September 5, 2015 Share Posted September 5, 2015 Revivo, Estaba practicando un rato con el exp_system pero al crear un solo marker anda todo perfecto, Pero si pongo mas cosas en la tabla me sale todo junto, por ejemplo si en el primer marker puse solo apto para nivel 3 y yo soy nivel 3 da el mensaje y si en el segundo marker esta en nivel 4 me tira el mensaje de error junto con el primero que es el del nivel 3.Con esto estaba practicando: Server tabla = { {nivel = "3", x = -701.599609375, y = 987.353515625, z =12.375272750854, r = 0, g = 255, b = 0}, {nivel = "4", x = -710.3603515625, y = 988.5927734375, z = 12.379697799683,r = 0, g = 0, b = 255} } for k, s in ipairs(tabla) do local x = s.x local y = s.y local z = s.z local r = s.r local g = s.g local b = s.b createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ) end function entras (hitElement) for valor, item in pairs (tabla) do local numerito = item.nivel triggerClientEvent(hitElement, "abrenivel", hitElement, numerito) end end addEventHandler("onMarkerHit", resourceRoot, entras) Client .- function asdadsasd (numerito) local nivel = exports.exp_system:getPlayerLevel( source ) if nivel >= tonumber(numerito) then outputChatBox("Eres apto para usar el marker") else outputChatBox("No tienes el nivel suficiente para entrar a este Marker") end end addEvent("abrenivel", true) addEventHandler("abrenivel", localPlayer, asdadsasd) Aca la print que sale el doble mensaje: En debugscript no tira ningún error. Este seria casi la ultima cosa que me falta aprender de las tablas, Pero mi duda es ¿Por que me sale doble? Ayuden me con eso . Es porque estás triggeando todos los valores para luego chequearlos y comparar si el valor es igual o mayor, si quieres obtener el mayor valor segun su nivel puedes utilizar esto: tabla = { {nivel = "3", x = -701.599609375, y = 987.353515625, z =12.375272750854, r = 0, g = 255, b = 0}, {nivel = "4", x = -710.3603515625, y = 988.5927734375, z = 12.379697799683,r = 0, g = 0, b = 255} } for k, s in ipairs(tabla) do local x, y, z, r, g, b = s.x, s.y, s.z, s.r, s.g, s.b addEventHandler("onMarkerHit", createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ), entras) end function entras (hitElement) current = 0 for valor, item in ipairs (tabla) do if ( tostring(exports.exp_system:getPlayerLevel(hitElement)) > item.nivel ) then current = exports.exp_system:getPlayerLevel(hitElement) end end if ( current ~= 0 ) then outputChatBox("El marcador del maximo nivel que puedes utilizar es: "..current, hitElement) end end Debes ordenar los valores segun el nivel. Link to comment
Kilfwan Posted September 5, 2015 Author Share Posted September 5, 2015 Revivo, Estaba practicando un rato con el exp_system pero al crear un solo marker anda todo perfecto, Pero si pongo mas cosas en la tabla me sale todo junto, por ejemplo si en el primer marker puse solo apto para nivel 3 y yo soy nivel 3 da el mensaje y si en el segundo marker esta en nivel 4 me tira el mensaje de error junto con el primero que es el del nivel 3.Con esto estaba practicando: Server tabla = { {nivel = "3", x = -701.599609375, y = 987.353515625, z =12.375272750854, r = 0, g = 255, b = 0}, {nivel = "4", x = -710.3603515625, y = 988.5927734375, z = 12.379697799683,r = 0, g = 0, b = 255} } for k, s in ipairs(tabla) do local x = s.x local y = s.y local z = s.z local r = s.r local g = s.g local b = s.b createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ) end function entras (hitElement) for valor, item in pairs (tabla) do local numerito = item.nivel triggerClientEvent(hitElement, "abrenivel", hitElement, numerito) end end addEventHandler("onMarkerHit", resourceRoot, entras) Client .- function asdadsasd (numerito) local nivel = exports.exp_system:getPlayerLevel( source ) if nivel >= tonumber(numerito) then outputChatBox("Eres apto para usar el marker") else outputChatBox("No tienes el nivel suficiente para entrar a este Marker") end end addEvent("abrenivel", true) addEventHandler("abrenivel", localPlayer, asdadsasd) Aca la print que sale el doble mensaje: En debugscript no tira ningún error. Este seria casi la ultima cosa que me falta aprender de las tablas, Pero mi duda es ¿Por que me sale doble? Ayuden me con eso . Es porque estás triggeando todos los valores para luego chequearlos y comparar si el valor es igual o mayor, si quieres obtener el mayor valor segun su nivel puedes utilizar esto: tabla = { {nivel = "3", x = -701.599609375, y = 987.353515625, z =12.375272750854, r = 0, g = 255, b = 0}, {nivel = "4", x = -710.3603515625, y = 988.5927734375, z = 12.379697799683,r = 0, g = 0, b = 255} } for k, s in ipairs(tabla) do local x, y, z, r, g, b = s.x, s.y, s.z, s.r, s.g, s.b addEventHandler("onMarkerHit", createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ), entras) end function entras (hitElement) current = 0 for valor, item in ipairs (tabla) do if ( tostring(exports.exp_system:getPlayerLevel(hitElement)) > item.nivel ) then current = exports.exp_system:getPlayerLevel(hitElement) end end if ( current ~= 0 ) then outputChatBox("El marcador del maximo nivel que puedes utilizar es: "..current, hitElement) end end Debes ordenar los valores segun el nivel. Dice este error en debugscript cuando paso sobre el marker. WARNING: sistemanivel\server.lua:10: Bad argument @ 'addEventHandler' [Expected function at argument 3, got nil] Link to comment
Tomas Posted September 5, 2015 Share Posted September 5, 2015 addEventHandler("onResourceStart", resourceRoot, function () for k, s in ipairs(tabla) do local x, y, z, r, g, b = s.x, s.y, s.z, s.r, s.g, s.b addEventHandler("onMarkerHit", createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ), entras) end end ) Link to comment
Kilfwan Posted September 5, 2015 Author Share Posted September 5, 2015 addEventHandler("onResourceStart", resourceRoot, function () for k, s in ipairs(tabla) do local x, y, z, r, g, b = s.x, s.y, s.z, s.r, s.g, s.b addEventHandler("onMarkerHit", createMarker ( x, y, z -1, "cylinder", 1.5, r, g, b, 170 ), entras) end end ) Ahora no sale ningún mensaje ni en el chat ni en debugscript . Link to comment
Sensacion Posted September 5, 2015 Share Posted September 5, 2015 En tu código te sale doble porque el loop está trigeando tantas veces como cantidad de valores tiene la tabla Link to comment
Kilfwan Posted September 6, 2015 Author Share Posted September 6, 2015 En tu código te sale doble porque el loop está trigeando tantas veces como cantidad de valores tiene la tabla Como lo haria entonces? Link to comment
Sensacion Posted September 6, 2015 Share Posted September 6, 2015 Uhmmm así como lo tienes asignandole un setelementdata al marker con el nivel bastaria, o podrias insertar en una nueva tabla los marker y al ocurrir el evento tomar el valor de ahí. Link to comment
UserToDelete Posted September 6, 2015 Share Posted September 6, 2015 o simplemente que haga una variable para checkear eso, y al salir del elemento, que esa variable vuelva a false, que se yo, hace mucho que no hago este tipo de cosas Link to comment
Recommended Posts