Jump to content

Problema con elementData


Recommended Posts

Hola a todos,

Planteo un problema hoy, y resulta que estaba creando un script que tu le clicas a un player y te abre sus stats para reiniciar o cambiar alguna, todo bien, funciona perfecto, a excepcion, de que no cambia el valor del elementData, no tira error, ni nada. Quisiera saber yo por que :roll:

Server

Client

local adminmanag = {} 
addCommandHandler("data",  
    function (source) 
        if hasObjectPermissionTo(source, "command.ban") then 
        adminmanag[source] = true 
        showCursor(source, true) 
        end 
    end 
) 
addEventHandler("onPlayerClick", root, 
    function (_,_, element) 
        if adminmanag[source] then 
            if isElement(element) then 
                if getElementType(element) == 'player' then 
                showCursor(source, false) 
                triggerClientEvent(source, "data:view", source, element, getAllElementData(element)) 
                adminmanag[source] = nil 
                end 
            end 
        end 
    end 
) 
addEvent("data:mod", true) 
addEventHandler("data:mod", root, 
    function (element_tochango, data, value) 
    outputChatBox("RECIBIDO; "..tostring(data).." ; "..tostring(value).." ; "..tostring(element_tochango), root) 
        if isElement(element_tochango) then 
        setElementData(element_tochango, data, value) 
        else 
        outputChatBox("ERROR ELEMENT", root) 
        end 
    end 
) 

local playerin 
local function gui () 
local screenW, screenH = guiGetScreenSize() 
ventana = guiCreateWindow((screenW - 484) / 2, (screenH - 457) / 2, 484, 457, "", false) 
guiWindowSetSizable(ventana, false) 
guiSetAlpha(ventana, 1.00) 
showCursor(true) 
botonguardar = guiCreateButton(10, 181, 213, 34, "Guardar data", false, ventana) 
guiSetFont(botonguardar, "clear-normal") 
guiSetProperty(botonguardar, "NormalTextColour", "FFAAAAAA") 
botonsalir = guiCreateButton(262, 181, 213, 34, "Salir sin guardar nada", false, ventana) 
guiSetFont(botonsalir, "clear-normal") 
guiSetProperty(botonsalir, "NormalTextColour", "FFAAAAAA") 
dataname = guiCreateMemo(182, 26, 293, 31, "", false, ventana) 
labeldata = guiCreateLabel(19, 36, 163, 17, "Data string", false, ventana) 
guiLabelSetHorizontalAlign(labeldata, "center", true) 
valuename = guiCreateMemo(185, 67, 290, 31, "", false, ventana) 
valuelabel = guiCreateLabel(19, 77, 163, 17, "Valor string", false, ventana) 
guiLabelSetHorizontalAlign(valuelabel, "center", true) 
datagrid = guiCreateGridList(10, 225, 465, 222, false, ventana) 
guiGridListAddColumn(datagrid, "data", 0.5) 
guiGridListAddColumn(datagrid, "value", 0.5) 
addEventHandler("onClientGUIClick", botonsalir, 
    function () 
    destroyElement(ventana) 
    showCursor(false) 
    end 
) 
addEventHandler("onClientGUIClick", botonguardar, 
    function () 
    local data = guiGetText(dataname) 
    local value = guiGetText(valuename) 
    triggerServerEvent("data:mod", localPlayer, playerin, tostring(data), tostring(value)) 
    playerin = nil 
    showCursor(false) 
    destroyElement(ventana) 
    end 
) 
guiSetInputMode("no_binds_when_editing") 
end 
addEvent("data:view", true) 
addEventHandler("data:view", root, 
    function (element_clicked, tableElement) 
        if isElement(element_clicked) then 
        gui() 
        playerin = element_clicked 
            for k, v in pairs(tableElement) do 
            local row = guiGridListAddRow (datagrid) 
            guiGridListSetItemText(datagrid, row, 1, tostring(k), false, false) 
            guiGridListSetItemText(datagrid, row, 2, tostring(v), false, false) 
            end 
        end 
    end 
) 

Link to comment
Hidden

Según estuve mirando el script esta perfectamente y debería de funcionar, así que lo unos de los problemas pueden ser que tengas otro script que cambie estas elementData después a otro valor, revisaste si no tienes ningún script que se interponga?

Link to comment
Hidden

Por que no has seleccionado a ningún jugador de tu lista, por eso no funciona. guiGridListGetSelectedItem. Si éste no está seleccionado en la lista, entonces nunca va a realizar ningún cambio.

Te dejo un ejemplo, para que te guies.

function onClientVehicleBuy (button, state, absoluteX, absoluteYe) 
  if (source == VehicleButton) then guiSetVisible (shopWindowVehicle, false) showCursor (false) 
    if (guiGridListGetSelectedItem (VehicleGrid)) then 
      local itemName = guiGridListGetItemText (VehicleGrid, guiGridListGetSelectedItem (VehicleGrid), 1) 
      local itemID = getVehicleModelFromName (itemName) 
      local itemCost = guiGridListGetItemText (VehicleGrid, guiGridListGetSelectedItem (VehicleGrid), 2) 
      if itemName and itemID and itemCost then 
        triggerServerEvent ("VehicleBuy", getLocalPlayer(), itemID, itemCost, itemName) 
      end 
    end 
  end 
end 
addEventHandler ("onClientGUIClick", VehicleButton, onClientVehicleBuy) 

Link to comment
Por que no has seleccionado a ningún jugador de tu lista, por eso no funciona. guiGridListGetSelectedItem. Si éste no está seleccionado en la lista, entonces nunca va a realizar ningún cambio.

Te dejo un ejemplo, para que te guies.

function onClientVehicleBuy (button, state, absoluteX, absoluteYe) 
  if (source == VehicleButton) then guiSetVisible (shopWindowVehicle, false) showCursor (false) 
    if (guiGridListGetSelectedItem (VehicleGrid)) then 
      local itemName = guiGridListGetItemText (VehicleGrid, guiGridListGetSelectedItem (VehicleGrid), 1) 
      local itemID = getVehicleModelFromName (itemName) 
      local itemCost = guiGridListGetItemText (VehicleGrid, guiGridListGetSelectedItem (VehicleGrid), 2) 
      if itemName and itemID and itemCost then 
        triggerServerEvent ("VehicleBuy", getLocalPlayer(), itemID, itemCost, itemName) 
      end 
    end 
  end 
end 
addEventHandler ("onClientGUIClick", VehicleButton, onClientVehicleBuy) 

Eso no tiene nada que ver, en su gridlist no tiene elementos, solo strings. Y el jugador está almacenado en la variable 'playerin'.

Link to comment
Por otra parte, cuando se guarda el dato, no se actualiza automáticamente, sino hasta después de volver a seleccionar el elemento. Quizás eso sea el error.

Es decir, el dato se guarda, pero no se actualiza los datos en la lista.

Los datos de la lista son siempre los mismos, y ahí sólo se están usando como información estática, al cambiar la data el valor anterior es indiferente.

Link to comment
Hidden
Por otra parte, cuando se guarda el dato, no se actualiza automáticamente, sino hasta después de volver a seleccionar el elemento. Quizás eso sea el error.

Es decir, el dato se guarda, pero no se actualiza los datos en la lista.

Los datos de la lista son siempre los mismos, y ahí sólo se están usando como información estática, al cambiar la data el valor anterior es indiferente.

Tendria que hacer una función que actualice la gridlist.

Link to comment

llamame loco, pero a mi no me va, y usamos el mismo script, no cambia absolutamente nada. sin embargo, aparece cambiado cuando me hago un getAllElementData, pero para el servidor, no lo cambia, que coño?

Incluso reconecto usando un save system, y nada, que no me lo cambia realmente, desincronizacion?

debe ser cosa de mi servidor

Link to comment
  • Recently Browsing   0 members

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