Jump to content

Rose

Members
  • Posts

    189
  • Joined

  • Last visited

Everything posted by Rose

  1. El problema era que usabas triggerClientEvent en client cuando esa función es solo para server. Y si, si puedes usar más sonidos con comandos sin hacer otro recurso, pero te recomiendo que los enumeres (si quieres) para que solo tengas que usar /empezar [number] (esto solo si planeas hacer un recurso para elegir distintos sonidos por medio de un comando). Un ejemplo: -- // Server local tick = getTickCount() addCommandHandler( "empezar", function( player, _, id ) if getTickCount() - tick > 5000 then -- solo podrá usar el comando cada 5 segundos local id = tonumber(id) if (id) then triggerClientEvent( player, "sound:startSound", player, player, id) end tick = getTickCount() end end ) -- // Client addEvent( "sound:startSound", true ) addEventHandler( "sound:startSound", getRootElement( ), function( player, id) local x, y, z = getElementPosition( player ) local sound = playSound3D( "sound"..id..".mp3", x, y, z ) setSoundVolume( sound, 1 ) setSoundMinDistance( sound, 1 ) setSoundMaxDistance( sound, 100 ) attachElements( sound, player, 0, 0, 0 ) end )
  2. ¿Seguro que no sirve? a mi me funciona. Prueba cambiando player por localPlayer, aunque será lo mismo. Ahí vi que daba error el triggerClientEvent en el client.lua, ¿no estarás usando esa función en client, verdad?
  3. @Tomas Tu función me da error en 'name'
  4. Pues con elementData es mucho más fácil, si me da problemas como lo tengo ahora mismo lo cambió por elementData y no me saco tantos problemas. Ahora, por qué dices que no es bueno que se guarde al disparar? no se guardará siempre que el jugador dispare, se guardará cuando el jugador dispare con las granadas
  5. Creo que por onPlayerQuit no es posible así que lo tengo hecho para que se guarde cada vez que el jugador dispare. Además onClientPlayerQuit no me guardaría el valor de la variable a mi, creo.
  6. Creo que se refiere a que uses algo como: if not inside then inside = true end para que solo se ejecute una vez
  7. Y alguien sabe cómo podría hacerlo? no me ha funcionado todavía xd.
  8. Entonces, si puedo guardar el valor de una variable con setAccountData y onPlayerQuit o no?
  9. @aka Blue ¿Esto te sirve? function disableColorCode(name) return type(name) == "string" and string.gsub(name, "#%x%x%x%x%x%x", "") or name end
  10. Hola, estaba intentando guardar el valor de una variable al usar /save y para recuperar ese valor /load. Me funciona, pero quisiera que esos datos se guardaran automáticamente al yo salir del servidor y se cargaran de nuevo al logearme. Con comandos no me da error pero con "onPlayerLogin" si me está dando errores, ya intente de varias formas pero no sé que podrá ser, les dejo lo que tengo hecho y dónde da error: Server function ko() triggerClientEvent("probando", source) end addEventHandler("onPlayerQuit", root, ko) addEvent("variable", true) addEventHandler("variable", root, function(saveElement) setAccountData(getPlayerAccount(source),"launcherBullet", tonumber(saveElement)) end) function onLoginLoadBullets() triggerClientEvent(root,"latin:loadLauncher",source,getAccountData(getPlayerAccount(source),"launcherBullet")) end addEventHandler("onPlayerLogin", root, onLoginLoadBullets) Client addEvent("probando", true) addEventHandler("probando", root, function() local saveElement = maxBullets triggerServerEvent("variable", getLocalPlayer(), saveElement) end) addEvent("latin:loadLauncher", true) addEventHandler("latin:loadLauncher", root, function(saveElement) maxBullets = tonumber(saveElement) end) function mainRender() local state = not grenadeLauncher dxDrawRectangle(items['pos']['x'][2], screenH * 0.7051, screenW * 0.0172, screenH * 0.0381, tocolor(231, 209, 23, 255), false) dxDrawText(items['texts'][1], items['pos']['x'][1], screenH * 0.7148, screenW * 0.0133, screenH * 0.7324, tocolor(0, 0, 0, 255), 1.40*fontSize, "default-bold", "left", "top", false, false, false, false, false) dxDrawRectangle(screenW * 0.0000, screenH * 0.7051, items['pos']['width'][2], screenH * 0.0381, tocolor(0, 0, 0, 120), false) --dx if (getElementData(localPlayer, "Nivel") < 35) then dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock"), items['pos']['x'][4] - 1, (screenH * 0.7139) - 1, (screenW * 0.1852) - 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock"), items['pos']['x'][4] + 1, (screenH * 0.7139) - 1, (screenW * 0.1852) + 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock "), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) - 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock "), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) + 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: #ff0000Nivel 35 unlock", items['pos']['x'][4], screenH * 0.7139, screenW * 0.1852, screenH * 0.7373, tocolor(255, 255, 255, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, true, false) else -- Desde aquí me da error en "maxBullets" dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) - 1, (screenW * 0.1852) - 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] + 1, (screenH * 0.7139) - 1, (screenW * 0.1852) + 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) - 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) + 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4], screenH * 0.7139, screenW * 0.1852, screenH * 0.7373, tocolor(255, 255, 255, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, true, false) end end addEventHandler("onClientRender", root, mainRender) Me da error en la variable 'maxBullets', la variable maxBullets al activar el recurso ya tiene un valor, que es 3... Un ejemplo: Al empezar tengo 3 balas, gasto 1, me quedan 2, me salgo del servidor y el número 2 se me guarda en mi cuenta, y, al logearme, si tengo 3+ balas o menos, me aparezca el número 2 para las balas ya que fue como quedó al salirme. Como ya dije al principio lo hice primeramente con comandos y luego intente con onPlayerQuit y OnPlayerLogin, los errores están en las lineas que vienen después del "else" de la función main.
  11. Rose

    Login panel bug

    ¿Te da error el showCursor o el panel?
  12. Rose

    Login panel bug

    Si lo que quieres es crear scripts para MTA (por ahora) te recomiendo que primero aprendas cómo funciona Lua y su sintaxis, la wiki o tutoriales sobre cómo crear scripts para MTA no te ayudarán en nada si eres nuevo, solo te confundirán. Te recomiendo que busques por internet qué son los operadores lógicos, aritméticos, qué son variables, qué son las tablas en Lua, bucles y entre otras cosas. Algo que si te digo es que para mi no hay manera de aprender a programar (o mejorar) mejor, porque para hacer grandes cosas primero tienes que tener errores, porque de los errores salen los profesionales, de los errores, nada más. Sin embargo ten siempre en cuenta el orden de tu código para que se te haga más fácil a ti y a los que lean tu código entenderlo. Otra cosa... Eres nuevo, ¿cierto?, ¿cómo piensas tirarte a hacer un panel de login de una vez ? tampoco es que sea tan complicado pero estoy seguro que no entiendes nada de lo que está en ese código. Primero empieza por cosas más básicas... Yo cometí el mismo error que tu (cuando comencé), solo que yo quería hacer un panel en DirectX (algo imposible para mi en ese tiempo).
  13. Rose

    Login panel bug

    1. Según sé la diferencia entre esos dos es que, addEvent es para crear un evento personalizado por ti, o sea, no puedes usar addEvent("onClientGUIClick", true) porque por obvias razones dará error, primero porque onClientGUIClick es un evento de "fábrica" por lo que no te recomiendo usarlo si algún día haces un evento personalizado. A personalizado solo me refiero a que puedes crear tus propios eventos como: "onPlayerJump", pero claro, para ejecutar éste evento tienes que hacer una función a parte. Aunque el addEvent lo usaras más que todo para triggers de client a server o viceversa. Y pues con eso ya te debes dar una idea de lo que sería addEventHandler... Si aún tienes dudas, puedes leer la wiki o mandarme un mp para explicarte mejor (si quieres). 2.Veré si más tarde lo reviso 3. No, no hay diferencias. Pero ni se te ocurra poner un espacio en el nombre asignado a la variable o en alguna función, en un string si puedes (creo que ya lo sabes) . Y sobre las variables no existentes(más bien no definidas) me refiero a que vi em ciertas partes variables como: GUIEDITOR.label[1] pero GUIEDITOR jamás le diste un valor, o, en este caso, jamás creaste la tabla. El otro caso es que usabas: guiGetText(pass) pero pass tampoco la habías definido, no estaba en tu script. Por eso inexistente.
  14. Rose

    Login panel bug

    El problema es que tu script tiene muchos errores... Usas addEvent para detectar el click en vez de addEventHandler, funciones sin cerrar, entre otros... Edite tu script para que se pudiera abrir el panel, sin embargo creo que ese login no funcionará en la parte para logearte y registrarte. Si necesitas ayuda para eso me dices y te ayudo. Client local screenM, screenH = guiGetScreenSize() function reg() winRegister = guiCreateWindow(387, 256, 414, 313, "Register panel by Seyer", false) guiWindowSetSizable(winRegister, false) usuario = guiCreateEdit(236, 24, 167, 43, "", false, winRegister) labelUsuario = guiCreateLabel(17, 23, 159, 44, "Usuario:", false, winRegister) guiSetFont( labelUsuario, "sa-header") guiLabelSetColor( labelUsuario, 15, 239, 253) labelPassword = guiCreateLabel(19, 92, 217, 44, "Contraseña:", false, winRegister) guiSetFont(labelPassword, "sa-header") guiLabelSetColor(labelPassword, 15, 239, 253) labelPassword2 = guiCreateLabel(19, 160, 217, 44, "Contraseña:", false, winRegister) guiSetFont(labelPassword2, "sa-header") guiLabelSetColor( labelPassword2, 15, 239, 253) contrasena1 = guiCreateEdit(236, 94, 167, 42, "", false, winRegister) guiEditSetMasked(contrasena1,true) contrasena2 = guiCreateEdit(236, 160, 167, 44, "", false, winRegister) guiEditSetMasked(contrasena2,true) brtRegistrar = guiCreateButton(9, 234, 394, 69, "Register", false, winRegister) guiSetFont(brtRegistrar, "sa-header") guiSetProperty(brtRegistrar, "NormalTextColour", "FF0FEFFD") max5 = guiCreateLabel(27, 205, 56, 19, "(máx. 25)", false, winRegister) guiSetFont(max5, "default-bold-small") guiLabelSetColor(max5, 254, 254, 254) max25 = guiCreateLabel(27, 136, 56, 19, "(máx. 25)", false, winRegister) guiSetFont(max25, "default-bold-small") guiLabelSetColor(max25, 254, 254, 254) max26 = guiCreateLabel(27, 67, 56, 19, "(máx. 25)", false, winRegister) guiSetFont(max26, "default-bold-small") guiLabelSetColor(max26, 254, 254, 254) addEventHandler("onClientGUIClick",brtRegistrar,function() user=guiGetText(usuario) c=guiGetText(contrasena1) c1=guiGetText(contrasena2) end) if(c==c1)then triggerServerEvent("rg",getLocalPlayer(),user,c) outputChatBox("Las contraseñas coinciden.") else outputChatBox("Las contraseñas no coinciden.") end end addEvent("cerrar",true) addEventHandler("cerrar",getLocalPlayer(),function() guiSetVisible(winRegister,false) showCursor(false) end) addEvent("cerrar2",true) addEventHandler("cerrar",getLocalPlayer(),function() guiSetVisible(winLogin,false) showCursor(false) end) function login() winLogin = guiCreateWindow(387, 256, 414, 316, "Log-in panel by Seyer", false) guiWindowSetSizable(winLogin, false) usuario = guiCreateEdit(236, 24, 167, 43, "", false, winLogin) label1 = guiCreateLabel(17, 23, 159, 44, "Usuario:", false, winLogin) guiSetFont(label1, "sa-header") guiLabelSetColor(label1, 15, 239, 253) label2 = guiCreateLabel(19, 92, 217, 44, "Contraseña:", false, winLogin) guiSetFont(label2, "sa-header") guiLabelSetColor(label2, 15, 239, 253) contrasena1 = guiCreateEdit(236, 94, 167, 42, "", false, winLogin) btrLoggearse = guiCreateButton(10, 165, 394, 68, "Login", false, winLogin) guiSetFont(btrLoggearse, "sa-header") guiSetProperty(btrLoggearse, "NormalTextColour", "FF0FEFFD") label3 = guiCreateLabel(27, 136, 56, 19, "(máx. 25)", false, winLogin) guiSetFont(label3, "default-bold-small") guiLabelSetColor(label3, 254, 254, 254) label4 = guiCreateLabel(27, 67, 56, 19, "(máx. 25)", false, winLogin) guiSetFont(label4, "default-bold-small") guiLabelSetColor(label4, 254, 254, 254) registro = guiCreateButton(11, 240, 393, 66, "Register", false, winLogin) guiSetFont(registro, "sa-header") guiSetProperty(registro, "NormalTextColour", "FF0FEFFD") showCursor(true) addEventHandler("onClientGUIClick",registro,function() guiSetVisible(winLogin, false) reg() end) addEventHandler("onClientGUIClick",btrLoggearse,function() user = guiGetText(usuario) clave = guiGetText(contrasena1) end) triggerServerEvent("lg",getLocalPlayer(),user,clave) end addCommandHandler("log",login) addEvent("abrirlogin",true) addEventHandler("abrirlogin",getLocalPlayer(),login) Server function rg(user,clave) if(addAccount(user,clave))then outputChatBox("Regristado correctamente.") triggerClientEvent(source,"cerrar",source) logIn(source,getAccount(user,clave),clave) else outputChatBox("La cuenta ya existe.") end end addEvent("rg",true) addEventHandler("rg", getRootElement(),rg) function lg(user,clave) cuenta = getAccount(user,clave) if(cuenta)then logIn(source,getAccount(user,clave),clave) triggerClientEvent(source,"cerrar2",source) else outputChatBox("La cuenta no existe o usuario y/o contraseña incorrectos.") end end addEvent("lg",true) addEventHandler("lg", getRootElement(),lg) addEventHandler("onPlayerJoin",getRootElement(),function() triggerClientEvent(source,"abrirlogin",source) end) Si quieres saber tus errores, éstos son: Usabas 'addEvent' para usar onClientGUIClick como evento, tenías que usar addEventHandler. Habían unas dos funciones sin cerrar, es decir, te faltaba ponerles un 'end'. Usabas la letra 'ñ' para las variables. Sólo puedes usar la ñ y tildes en cadenas de texto (strings) o sino dará error Mezclabas variables del GUIEDITOR no existentes en tu script, ese es otro error más. Te recomiendo que cada gui-element que crees con el guieditor le pongas una variable enseguida, o puedes hacerlo al final, como gustes. Había una variable inexistente (pass) que realmente era contraseña1, la cambie por contrasena1.
  15. Creo que lo dejaré así por el momento, pero gracias por el dato. Lo que si creo que intentaré hacer es para que explote al tacto, pero eso después. Otra pregunta para no crear otro tema (no tiene nada que ver con los projectiles), si quiero usar ésta función tanto en server-side como en client-side, ¿cómo tendría que hacerlo? ya la puse como función exportada pero aún así me sigue diciendo que esa función no existe, también la intente pasar a client con un trigger pero nada, el output siempre me manda "No existe". A esto me refiero: function isPlayerPickingUpTheBag( player ) -- Pasar esta función a client y poder usarla como el ejemplo de abajo... if player then if dataPlayer[ player ] == nil then return false else if dataPlayer[ player ] == true then return true end end end end function aa(player) if isPlayerPickingUpTheBag(player) == true) then outputChatBox("existe", player) else outputChatBox("no existe", player) end end Eso en server obviamente funciona, pero en client siempre me marca "no existe" aunque la variable la sea verdadera. La variable se actualiza al entrar en una colshape, lo que quiero es que el jugador pueda precionar tal tecla al estar dataPlayer activa, sino, no podrá usar la tecla. ¿Más fácil usar elementData para esto o seguir haciéndolo así? según sé si se sincroniza una tabla de server > client hace lo mismo que un elementData y consume lo mismo, pero quiero ver qué podría hacer si quiero hacerlo con una función export... Gracias.
  16. Copy this script (server) function died(_, killer) if (killer and getElementType(killer) == "player" and getElementType(source) == "ped") then givePlayerMoney(killer, 500) end end addEventHandler("onPedWasted", root, died) --Add the Event when ped1 dies
  17. Quiero hacer algo como las granadas predeterminadas de MTA, mientras dejas precionado el click derecho la lanza más fuerte. Lo que quiero hacer yo es algo similar, solo que quiero que, por ejemplo: si estoy mirando hacia el projectil salga y rebote contra el suelo, y si estoy mirando un poco más arriba pues que salga el projectil con un poco más de fuerza. En pocas palabras lo que quiero es calcular la fuerza dirección del projectil según donde esté apuntando con el arma; estoy usando gerPedWeaponMuzzlePosition para hacer que el projectil 16(la granada) salga por donde dispara las balas. Y la otra, ¿cómo puedo calcular (o saber) cuando un projectil hace contacto con un jugador, ped, vehículo u objeto? la idea es que explote al hacer contacto con algún elemento. El projectil que uso es la granada, ID 16.
  18. Wiki: a colshape created on the client does not collide with elements already existing at that location until they first move.
  19. Use something like that this to specify that the player's money is greater than or equal to money's variable: local mymoney = getPlayerMoney(player) if (mymoney >= money) then -- givePlayerMoney(player2, tonumber(money)) -- takePlayerMoney(player, tonumber(money)) end
  20. Hay varias maneras, o lo haces tú, descargas un recurso de contador de zombies y te guías cómo lo hizo, ó, buscas un post en el foro sobre eso, que debe de haber muchos (creo). Aunque si eres nuevo en esto del scripting puedes mirar este tutorial (no sé si esté completo): Y para el rango es más simple, puedes descargar el recurso de rangos que esta en la comunidad y editarlo para que aparezca un label o dxDrawText (preferiblemente) el rango en el que estás.
  21. Table created at client-side?
  22. Post in spanish section: https://forum.multitheftauto.com/forum/99-spanish-español/ Postea en la sección español: https://forum.multitheftauto.com/forum/99-spanish-español/ The solution to your problem / la solución a tu problema: objeto = createObject ( 975, -2469.1000976563, -616.70001220703, 133.19999694824, 0, 0, 271.99951171875 ) Zona = createColCircle ( -2469.1000976563,-616.70001220703, 5, 5 ) function Funcion (source) moveObject ( objeto, 6000, -2469.3000488281, -616.70001220703, 133.19999694824, 0, 0, 271.99951171875 ) outputChatBox ( "Bienvenido", source, 0, 255, 0, true ) end addEventHandler ( "onColShapeHit", Zona, Funcion ) function Funcion2 () moveObject ( objeto, 6000, -2469.1000976563, -616.70001220703, 133.19999694824, 0, 0, 0 ) outputChatBox ( "Abandonando Base!", source, 0, 255, 0, true ) end addEventHandler ( "onColShapeLeave", Zona, Funcion2 )
  23. Sorry, i can't edit my post. However, why you don't use this? function settheweather() typee = math.random(0, 19) setWeather (tonumber(typee)) outputChatBox("[Weather] Weather"..tonumber(typee), getRootElement(), 255, 255, 20, true) end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), function () settheweather() setTimer(settheweather, 1000, 0) -- test line end)
  24. ... local oldRand = 1 function settheweather(weather) repeat typee = math.random(0, 12) until oldRand ~= typee if typee == 0 then weather = "Weather1" elseif typee == 1 then weather = "Weather2" elseif typee == 2 then weather = "Weather3" elseif typee == 3 then weather = "Weather4" elseif typee == 4 then weather = "Weather5" elseif typee == 5 then weather = "Weather6" elseif typee == 6 then weather = "Weather7" elseif typee == 7 then weather = "Weather8" elseif typee == 8 then weather = "Weather9" elseif typee == 9 then weather = "Weather10" elseif typee == 10 then weather = "Weather11" elseif typee == 22 then weather = "Weather12" end setWeather (tonumber(typee)) outputChatBox("[Weather] " .. weather .. " ", getRootElement(), 255, 255, 20, true) end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), function () settheweather() setTimer(settheweather, 7800, 0) -- test end )
  25. Introducción Voy a enseñar a hacer un lanzagranadas simple para las armas: MP5, M4 y AK47 ( si quieres puedes poner más ); con máximo de balas 3 y un delay para disparar de nuevo la bala de 2 segundos. Contenido Introducción Contenido Creación de variables Creación de un dxText con información sobre balas, activado/desactivado. Creación del lanzagranadas Función para comprar más balas Función para evitar lanzagranadas en armas no disponibles Código completo & Resource Creación de variables Creación de un dxText con información sobre balas, activado/desactivado. Creación del lanzagranadas Función para comprar más balas Función para evitar lanzagranadas en armas no disponibles. Código completo: Resource: https://community.multitheftauto.com/index.php?p=resources&s=details&id=13899 (Voy a tratar de mejorarlo) Si tienen dudas o saben alguna forma de hacerlo más eficiente (o algún error que hayan visto) pueden decirlas, gracias.
×
×
  • Create New...