Anzo Posted October 25, 2016 Share Posted October 25, 2016 Quisiera saber cómo puedo hacer que este script funcione sin necesidad de usar elementData, porque digamos que ya tengo varios y quisiera ver si puedo quitarle los elementData a este recurso para abrir/cerrar las puertas del auto. Client ------------------------------------ -- QUANTUMZ - QUANTUMZ - QUANTUMZ -- ------------------------------------ -- 2011 - Romania -- ------------------------------------ -- You can modify this file but -- -- don't change the credits. -- ------------------------------------ ------------------------------------ -- VEHICLECONTROL v1.0 for MTA -- ------------------------------------ GUIEditor_Window = {} GUIEditor_Button = {} GUIEditor_Label = {} GUIEditor_Scrollbar = {} GUIEditor_Window[1] = guiCreateWindow(709,236,272,288,"Vehicle Control - QuantumZ",false) GUIEditor_Scrollbar[1] = guiCreateScrollBar(24,49,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Label[1] = guiCreateLabel(86,30,135,15,"Hood Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[1],"default-bold-small") GUIEditor_Label[2] = guiCreateLabel(74,72,135,15,"First Door Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[2],"default-bold-small") GUIEditor_Scrollbar[2] = guiCreateScrollBar(24,91,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Label[3] = guiCreateLabel(68,112,135,15,"Second Door Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[3],"default-bold-small") GUIEditor_Scrollbar[3] = guiCreateScrollBar(24,130,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Label[4] = guiCreateLabel(71,151,135,15,"Third Door Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[4],"default-bold-small") GUIEditor_Scrollbar[4] = guiCreateScrollBar(24,168,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Label[5] = guiCreateLabel(68,189,135,15,"Fourth Door Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[5],"default-bold-small") GUIEditor_Scrollbar[5] = guiCreateScrollBar(24,206,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Label[6] = guiCreateLabel(83,226,135,15,"Trunk Open Ratio",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Label[6],"default-bold-small") GUIEditor_Scrollbar[6] = guiCreateScrollBar(24,243,225,17,true,false,GUIEditor_Window[1]) GUIEditor_Button[1] = guiCreateButton(23,265,230,14,"close window",false,GUIEditor_Window[1]) guiSetFont(GUIEditor_Button[1],"default-small") guiWindowSetSizable ( GUIEditor_Window[1], false ) setElementData(GUIEditor_Scrollbar[1], "Type", 0) setElementData(GUIEditor_Scrollbar[2], "Type", 2) setElementData(GUIEditor_Scrollbar[3], "Type", 3) setElementData(GUIEditor_Scrollbar[4], "Type", 4) setElementData(GUIEditor_Scrollbar[5], "Type", 5) setElementData(GUIEditor_Scrollbar[6], "Type", 1) guiSetVisible(GUIEditor_Window[1], false) showCursor(false) function enableVehicleControl() if guiGetVisible(GUIEditor_Window[1]) == false then guiSetVisible(GUIEditor_Window[1], true) showCursor(true) else guiSetVisible(GUIEditor_Window[1], false) showCursor(false) end end addCommandHandler("cveh", enableVehicleControl) function closeButton() guiSetVisible(GUIEditor_Window[1], false) showCursor(false) end addEventHandler ( "onClientGUIClick", GUIEditor_Button[1], closeButton, false ) function updateRatio(Scrolled) local position = guiScrollBarGetScrollPosition(Scrolled) local door = getElementData(Scrolled, "Type") triggerServerEvent("moveThis:~", getLocalPlayer(), door, position) end addEventHandler("onClientGUIScroll", getRootElement(), updateRatio) Server ------------------------------------ -- QUANTUMZ - QUANTUMZ - QUANTUMZ -- ------------------------------------ -- 2011 - Romania -- ------------------------------------ -- You can modify this file but -- -- don't change the credits. -- ------------------------------------ ------------------------------------ -- VEHICLECONTROL v1.0 for MTA -- ------------------------------------ function openDoor(door, position) local vehicle = getPedOccupiedVehicle(source) if getPedOccupiedVehicleSeat(source) == 0 then if door == 0 then if position==0 then setVehicleDoorOpenRatio(vehicle, 0, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 0, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 0, position/100, 0.5) end end if door == 1 then if position==0 then setVehicleDoorOpenRatio(vehicle, 1, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 1, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 1, position/100, 0.5) end end if door == 2 then if position==0 then setVehicleDoorOpenRatio(vehicle, 2, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 2, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 2, position/100, 0.5) end end if door == 3 then if position==0 then setVehicleDoorOpenRatio(vehicle, 3, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 3, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 3, position/100, 0.5) end end if door == 4 then if position==0 then setVehicleDoorOpenRatio(vehicle, 4, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 4, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 4, position/100, 0.5) end end if door == 5 then if position==0 then setVehicleDoorOpenRatio(vehicle, 5, 0, 0.5) end if position==100 then setVehicleDoorOpenRatio(vehicle, 5, 1, 0.5) end if position>0 and position<100 then setVehicleDoorOpenRatio(vehicle, 5, position/100, 0.5) end end end end addEvent("moveThis:~", true) addEventHandler("moveThis:~", getRootElement(), openDoor) function showCreditsToQuantumZ() outputChatBox ( "Write #FFFFFF/cveh #FF0000to use #FFFFFFQuantumZ's Vehicle Control#FF0000 resource!", source, 255, 0, 0, true ) end addEventHandler("onPlayerJoin", getRootElement(), showCreditsToQuantumZ) Lo que hace es abrir las puertas del auto por medio de un scroll, pero le asigna un tipo a cada scroll (1, 2, 3, 4) para saber que es la puerta que tiene que mover; mi pregunta es, si puedo remplazar los elementData por variables, y si es así, me podrían explicar cómo? Gracias. Link to comment
Tomas Posted October 25, 2016 Share Posted October 25, 2016 Cambia esto: setElementData(GUIEditor_Scrollbar[1], "Type", 0) setElementData(GUIEditor_Scrollbar[2], "Type", 2) setElementData(GUIEditor_Scrollbar[3], "Type", 3) setElementData(GUIEditor_Scrollbar[4], "Type", 4) setElementData(GUIEditor_Scrollbar[5], "Type", 5) setElementData(GUIEditor_Scrollbar[6], "Type", 1) por esto: local types = {} for i=2, 5 do types[GUIEditor_Scrollbar[i]] = i end types[GUIEditor_Scrollbar[1] = 0 types[GUIEditor_Scrollbar[6] = 1 y esto: local door = getElementData(Scrolled, "Type") por esto: local door = types[Scrolled] Link to comment
Anzo Posted October 25, 2016 Author Share Posted October 25, 2016 Muchas gracias Tomas, si funciona. Bueno, para aprovechar este post tengo dos preguntas: 1. Cómo puedo poner guis en una tabla?, lo que pasa es que tengo varios gui-element, y el código se hace muy extenso, quisiera saber si puedo hacer algo como esto: Spoiler for i,v in ipairs (botones) do guiSetVisible(v,false) end Y borrar todos los botones en la tabla "botones" ? Nota: Ya intente usando Botones = {} y crear los botones así: Botones[1] = ... Pero me da error 2. Puedo usar tablas de la forma que me pasaste para remplazar un elementData que solo tiene asignado un número (supongo que si, pero para asegurar nada más )? Link to comment
aka Blue Posted October 25, 2016 Share Posted October 25, 2016 Tampoco debes estar tan asustado con los elementData 1 Link to comment
Anzo Posted October 25, 2016 Author Share Posted October 25, 2016 23 minutes ago, aka Blue said: Tampoco debes estar tan asustado con los elementData Quién sabe (? pero prefiero dejar de usar elementData para cosas que se pueden hacer de otro método :'v, además de que en el script ya tengo varios elementData, no quiero poner más xd(son elementData de otro script, no el que pase, solo que quería unir eso de abrir puertas por scroll a un panel que estoy haciendo, pero en ese panel ya use varios elementData y no quierop usar más :v). También que ya me aburrí de que para cada script que haga tenga que usar elementData(porque por ahora no sé mucho de tablas u.u). Link to comment
Tomas Posted October 25, 2016 Share Posted October 25, 2016 Los gui-elements creados con el guieditor suelen ya estar en una tabla, a que te refieres? Link to comment
Anzo Posted October 25, 2016 Author Share Posted October 25, 2016 1 hour ago, Tomas said: Los gui-elements creados con el guieditor suelen ya estar en una tabla, a que te refieres? Tengo una gui y adentro una gridlist donde se creará el contenido, el panel digamos esta dividido en 5 partes: Autos, armas, skins, comida, nose; si elegiste Autos se crearán unos botones para elegir autos, y so quieres skins le das al botón se skins y se borran los botones de los autos y se crean el de los skins, lo que quiero es, poder borrar esos botones sin necesidad de usar un guiSetVisible para cada botón, sé que puedo hacer desaparecer la gridlist al precionar otro botón y que luego vuelva a aparecer, pero quisiera también saber si puedo borrar varios elementos con un: for n, nn in ipairs (table) do Y abajo de eso un guiSetVisible (v, false), y se borrarán los elementos que estén en esa tabla. El problema es que me da error al hacerlo y no sé porque, me dice algo como: "button[1] no existe" y no pasa nada, no se borra ni nada. Espero me hayan entendido Link to comment
Anzo Posted October 26, 2016 Author Share Posted October 26, 2016 49 minutes ago, Tomas said: Publica el codigo. No tengo código, era una pregunta para ver si se podia, además no puedo usar la pc ahora mismo, pero dare un ejemplo por el celular a ver si se entiende. local guis = { botones = {} } function test() window = guiCreateWindow(...) Contenido = guiCreateGridList(...) guis.botones[1]=guiCreateButton(...) guis.botones[2] = guiCreateButton (...) guis.botones[3] = guiCreateButton (...) --Se puede hacer esto sin desactivar toda la window, para borrar solo los elementos que puse en la tabla for i, v in ipairs(guis[botones] do guiSetVisible(v, false) end end addEventHandler("onClientResourceStart", root, test) Si no se entiende más tarde si puedo explico mejor... Pero lo que quiero es poder borrar gui element por medio de un for loop como se haría para destruir un coche, blip, etc. Link to comment
Tomas Posted October 26, 2016 Share Posted October 26, 2016 En ese caso podrias utilizar: for i = 1, #gui.botones do guiSetVisible(gui.botones[i], false) end Link to comment
MTA Team 0xCiBeR Posted October 26, 2016 MTA Team Share Posted October 26, 2016 2 hours ago, Tomas said: En ese caso podrias utilizar: for i = 1, #gui.botones do guiSetVisible(gui.botones[i], false)end for i = 1, #guis.botones do guiSetVisible(guis.botones[i], false) end Te falto una S Link to comment
Anzo Posted October 26, 2016 Author Share Posted October 26, 2016 Más tarde voy a probarlo y aviso cualquier cosa Link to comment
Anzo Posted October 28, 2016 Author Share Posted October 28, 2016 Muchas gracias Tomas, con esto me ayudaste mucho a hacer un código más "corto" xd. Link to comment
Recommended Posts