Destroyer.- Posted July 23, 2016 Share Posted July 23, 2016 (edited) Hola tengo un problema con un "skin shop" es que, quiero que tenga una vista previa para ver el skin y ahi recien comprarlo, pero pasa que cuando quiero volver al skin anterior, osea al que tenia antes de q tome la vista previa, no me deja, aca dejo el : client skines = { {"CJ", 0}, {"Sweet", 270}, {"Ryder", 300}, {"Ryder 2", 301}, {"Big Smoke", 269}, {"Big Smoke 2", 311}, {"Truth", 1}, {"Wuzi Mu", 294}, {"Claude", 299}, {"Madd Dogg", 297}, {"Mike Toreno", 295}, {"Cesar", 292}, {"OG Loc", 293}, {"T-Bone", 307}, {"Joe Pesci", 258}, {"Pimp", 249}, {"White Dealer", 29}, {"Black Dealer", 28}, {"Hiker", 26}, {"Casino Bouncer 1", 163}, {"Casino Bouncer 2", 164}, {"Drug Worker 1", 144}, {"Drug Worker 2", 145}, {"Drug Worker 3", 146}, } function aceptar() -- Funcion para comprar skin if (source == button2) then local row, col = guiGridListGetSelectedItem(grid) if (row and col and row ~= -1 and col ~= -1) then local model = tonumber(guiGridListGetItemData(grid, row, 1)) if model ~= "" then triggerServerEvent("skins", localPlayer, model) --Trigger al tocar el boton Aceptar guiSetVisible(Windows,false) showCursor(false) end end end end addEventHandler("onClientGUIClick", button2, aceptar) function close1() -- Funcion para cerrar el panel if (source == button1) then triggerServerEvent("remover", localPlayer) -- Trigger al tocar el boton Cerrar guiSetVisible(Windows,false) showCursor(false) end end addEventHandler("onClientGUIClick", button1, close1) function MarkerSkines() -- Funcion al tocar el marker guiSetVisible(Windows,true) showCursor(true) guiGridListClear(grid) for i,sk in ipairs(skines) do row = guiGridListAddRow(grid) guiGridListSetItemText(grid, row, 1, tostring(sk[1]), false, false) guiGridListSetItemData(grid, row, 1, tostring(sk[2])) end end addEvent("marker_skines",true) addEventHandler("marker_skines", getRootElement(), MarkerSkines) function click1 () -- Funcion para tomar el skin seleccionado local item = guiGridListGetItemData( grid, guiGridListGetSelectedItem ( grid ), 1 ) if item then setElementModel ( localPlayer, item ) end end addEventHandler("onClientGUIClick", grid, click1) server function ComprarSkin(id) -- Al Comprar skin --> takePlayerMoney(source, 0) local account = getPlayerAccount(source) if ( not isGuestAccount( getPlayerAccount( source ) ) ) then skin = setElementModel(source, id) setAccountData(account,"Sking",id) outputChatBox("Skin Guardado Exitosamente.", source, 255, 20, 20, true) end end addEvent("skins",true) addEventHandler("skins", root, ComprarSkin) function removers() -- Al Cerrar Panel --> if not (isGuestAccount (getPlayerAccount (source))) then local acc = getPlayerAccount(source) local skinG = getAccountData (acc, "Sking") outputChatBox ( "Test", source, 170, 0, 0, false ) end end addEvent("remover",true) addEventHandler("remover", root, removers) Edited July 23, 2016 by Guest Link to comment
Bc# Posted July 23, 2016 Share Posted July 23, 2016 Esto es un consejo para todo scripter, hay que poner comentarios en el código para hacer mas facil su comprensión. Puedes entender tu código ya que usas tus variables, pero estas muchas veces no se entienden si otra persona lee tu codigo. Link to comment
Destroyer.- Posted July 23, 2016 Author Share Posted July 23, 2016 Esto es un consejo para todo scripter, hay que poner comentarios en el código para hacer mas facil su comprensión. Puedes entender tu código ya que usas tus variables, pero estas muchas veces no se entienden si otra persona lee tu codigo. Si perdoname. ahí actualice el post para que se entienda mas, generalmente en lua nunca eh puesto comentarios, los pondre si posteo asi me entienden Link to comment
Bc# Posted July 23, 2016 Share Posted July 23, 2016 En que momento haces un save del skin anterior? Link to comment
aka Blue Posted July 23, 2016 Share Posted July 23, 2016 Almacena el skin que tienes mostrado en una variable y ya después de eso al darle click sumas en la variable o restas, dependiendo de la función que estás realizando (siguiente o anterior). local pos = 0 -- Al darle a siguiente pos = pos + 1 -- Al darle a anterior pos = pos - 1 -- Al no haber más skins if pos == 1 then outputChatBox( "Ya no hay más skins para atrás", 255, 0, 0 ) end Link to comment
Destroyer.- Posted July 23, 2016 Author Share Posted July 23, 2016 emm function ComprarSkin(id) -- Al Comprar skin --> takePlayerMoney(source, 0) local account = getPlayerAccount(source) if ( not isGuestAccount( getPlayerAccount( source ) ) ) then skin = setElementModel(source, id) setAccountData(account,"Sking",id) outputChatBox("Skin Guardado Exitosamente.", source, 255, 20, 20, true) end end addEvent("skins",true) addEventHandler("skins", root, ComprarSkin) function removers() -- Al Cerrar Panel --> if not (isGuestAccount (getPlayerAccount (source))) then local acc = getPlayerAccount(source) local skinG = getAccountData (acc, "Sking") -- Cargar skin que habia seleccionado anteriormente outputChatBox ( "Test", source, 170, 0, 0, false ) setElementModel(source, skinG) -- setearle el skin anterior end end addEvent("remover",true) addEventHandler("remover", root, removers) Sking es un skin que uno elige al registrarse, o en el mismo skinshop, es como que al cambiar el skin en client , porque en realidad, si guarda el skin, pero no lo setea, si me cambio el skin con el panel de admin y me seteo el skin si guarda, pero el problema seria al setear el model en client, pero no se como repararlo , dejo el script completo, total es de la comunidad local marker = createMarker ( 2247.3356933594, -1664.8883056641, 14.4765625, "cylinder", 2, 0, 255, 0, 255 ) local marker2 = createMarker ( 1734.7803955078, -1861.1599121094, 12.577855110168, "cylinder", 2, 0, 255, 0, 255 ) blip = createBlip (2247.2526855469,-1664.8112792969,15.4765625, 45,2, 0, 0, 0,0,0,1000.0 ) function ComprarSkin(id) -- Al Comprar skin --> takePlayerMoney(source, 0) local account = getPlayerAccount(source) if ( not isGuestAccount( getPlayerAccount( source ) ) ) then skin = setElementModel(source, id) setAccountData(account,"Sking",id) outputChatBox("Skin Guardado Exitosamente.", source, 255, 20, 20, true) end end addEvent("skins",true) addEventHandler("skins", root, ComprarSkin) function removers() -- Al Cerrar Panel --> if not (isGuestAccount (getPlayerAccount (source))) then local acc = getPlayerAccount(source) local skinG = getAccountData (acc, "Sking") outputChatBox ( "Test", source, 170, 0, 0, false ) setElementModel(source, skinG) end end addEvent("remover",true) addEventHandler("remover", root, removers) function MarkerSkin(player) if (getElementType(player) =="player" and getPlayerTeam(player) and getTeamName (getPlayerTeam(player)) == "Criminal" or getTeamName (getPlayerTeam(player)) == "Desocupados") then triggerClientEvent (player,"marker_skines",getRootElement(),player) end end addEventHandler("onMarkerHit",marker,MarkerSkin) addEventHandler("onMarkerHit",marker2,MarkerSkin) Windows = guiCreateWindow ( 0.2, 0.2, 0.25, 0.5, "Skin Shop", true ) grid = guiCreateGridList(0.01, 0.2, 0.99, 0.5, true, Windows) guiGridListAddColumn(grid, "Skins", 0.85) guiSetAlpha( Windows, 1 ) button1 = guiCreateButton ( 0.5, 0.8, 0.45, 0.15, "Salir", true, Windows) button2 = guiCreateButton ( 0.02, 0.8, 0.45, 0.15, "Aceptar", true, Windows) label1 = guiCreateLabel ( 0.1, 0.1, 0.9, 0.1, "Skin PARA TODOS DE LA KRISTI", true, Windows ) showCursor(false) guiSetVisible( Windows, false ) guiWindowSetSizable( Windows, false ) guiWindowSetMovable( Windows, false ) skines = { {"CJ", 0}, {"Sweet", 270}, {"Ryder", 300}, {"Ryder 2", 301}, {"Big Smoke", 269}, {"Big Smoke 2", 311}, {"Truth", 1}, {"Wuzi Mu", 294}, {"Claude", 299}, {"Madd Dogg", 297}, {"Mike Toreno", 295}, {"Cesar", 292}, {"OG Loc", 293}, {"T-Bone", 307}, {"Joe Pesci", 258}, {"Pimp", 249}, {"White Dealer", 29}, {"Black Dealer", 28}, {"Hiker", 26}, {"Casino Bouncer 1", 163}, {"Casino Bouncer 2", 164}, {"Drug Worker 1", 144}, {"Drug Worker 2", 145}, {"Drug Worker 3", 146}, } function aceptar() -- Funcion para comprar skin if (source == button2) then local row, col = guiGridListGetSelectedItem(grid) if (row and col and row ~= -1 and col ~= -1) then local model = tonumber(guiGridListGetItemData(grid, row, 1)) if model ~= "" then triggerServerEvent("skins", localPlayer, model) --Trigger al tocar el boton Aceptar guiSetVisible(Windows,false) showCursor(false) end end end end addEventHandler("onClientGUIClick", button2, aceptar) function close1() -- Funcion para cerrar el panel if (source == button1) then triggerServerEvent("remover", localPlayer) -- Trigger al tocar el boton Cerrar guiSetVisible(Windows,false) showCursor(false) end end addEventHandler("onClientGUIClick", button1, close1) function MarkerSkines() -- Funcion al tocar el marker guiSetVisible(Windows,true) showCursor(true) guiGridListClear(grid) for i,sk in ipairs(skines) do row = guiGridListAddRow(grid) guiGridListSetItemText(grid, row, 1, tostring(sk[1]), false, false) guiGridListSetItemData(grid, row, 1, tostring(sk[2])) end end addEvent("marker_skines",true) addEventHandler("marker_skines", getRootElement(), MarkerSkines) function click1 () -- Funcion para tomar el skin seleccionado local item = guiGridListGetItemData( grid, guiGridListGetSelectedItem ( grid ), 1 ) if item then setElementModel ( localPlayer, item ) end end addEventHandler("onClientGUIClick", grid, click1) Link to comment
Bc# Posted July 25, 2016 Share Posted July 25, 2016 Mira, despues de leer un poco tu codigo, el error mas evidente que pude encontrar fue que estas seteando un string a una funcion que te pide un integer. local skinG = getAccountData (acc, "Sking") -- sking es una variable de tipo string setElementModel(source, skinG) -- aqui te pide en segundo argumento una variable de tipo integer La solucion. --Siemplemente transformar el string a numero setElementModel(source, tonumber(skinG)) PD: Si tienes mas errores intenta dejar en tu post lo que arroja el debug, este es un error que te lo detecta el debug. Link to comment
Destroyer.- Posted July 25, 2016 Author Share Posted July 25, 2016 Mira, despues de leer un poco tu codigo, el error mas evidente que pude encontrar fue que estas seteando un string a una funcion que te pide un integer. local skinG = getAccountData (acc, "Sking") -- sking es una variable de tipo string setElementModel(source, skinG) -- aqui te pide en segundo argumento una variable de tipo integer La solucion. --Siemplemente transformar el string a numero setElementModel(source, tonumber(skinG)) PD: Si tienes mas errores intenta dejar en tu post lo que arroja el debug, este es un error que te lo detecta el debug. Aún asi no funciona, y no arroja ningun debug Link to comment
aka Blue Posted July 25, 2016 Share Posted July 25, 2016 No tengo ni p**a idea de lo que viene siendo la función remover, pero prueba a ver si te funciona la de poner: function comprar_skin( id ) local id = tonumber( id ) if id then local account = getPlayerAccount( source ) if account then if isGuestAccount( account ) then return else setElementModel( source, id ) setAccountData( account, "Sking", id ) outputChatBox( "Skin actualizado y guardado.", source, 255, 20, 20, true ) end end end end addEvent( "skins", true ) addEventHandler( "skins", getRootElement( ), comprar_skin ) function remover_skins( ) local account = getPlayerAccount( source ) if isGuestAccount( account ) then return else local skinG = getAccountData( account, "Sking" ) end end addEvent( "remover", true ) addEventHandler( "remover", getRootElement( ), remover_skins ) PD: Te recomiendo tabular un poco tu código porque se ve bastante feo teniendo todo junto o con 1 o 2 espacios. Se trata solo de tenerlo un poco más ordenado Link to comment
Destroyer.- Posted July 25, 2016 Author Share Posted July 25, 2016 Lo que quiero es que me vuelva al skin que esta en la database, osea, cuando elijo, y cancelo, me queda el skin elegido, pero yo no puse aceptar, nose si me entiende, de ultima lo hago con un ped si no me entendieron Ejemplo: Yo tomo el skin ID 250, y pongo aceptar -> me lo pone BIEN Yo tomo el skin ID 250, y pongo Salir -> me queda el skin tomado, pero yo no quise cambiarlo PD: Solucionado gracias a los que me ayudaron Link to comment
Recommended Posts