Kilfwan Posted August 31, 2015 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?
alex17 Posted August 31, 2015 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
Kilfwan Posted August 31, 2015 Author 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.
Kilfwan Posted September 5, 2015 Author 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 .
Enargy, Posted September 5, 2015 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
Tomas Posted September 5, 2015 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.
Kilfwan Posted September 5, 2015 Author 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]
Tomas Posted September 5, 2015 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 )
Kilfwan Posted September 5, 2015 Author 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 .
Sensacion Posted September 5, 2015 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
Kilfwan Posted September 6, 2015 Author 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?
Sensacion Posted September 6, 2015 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í.
UserToDelete Posted September 6, 2015 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
Recommended Posts