Jump to content

-Rex-

Members
  • Posts

    206
  • Joined

  • Last visited

Posts posted by -Rex-

  1. Hace 2 años no hago ningún script ni nada relacionado a Lua. ¿Alguien podría decirme que se ha implementado de nuevo en MTA? Hace poco vi que ya se pueden poner animaciones personalizadas pero me queda duda si existen muchas otras cosas nuevas más.

  2. On 07/04/2020 at 06:27, aka Blue said:

    Yo más que verme tutoriales donde hasta ellos mismos se equivocan creando scripts, aprendí a base de prueba y error. Lo que te puedo aconsejar es que te leas la Wiki que ofrece MTA (no toda pero sí la base para empezar a crear scripts, por ejemplo, ¿qué es localplayer? ¿qué es el rootElement?) e ir practicando por tu cuenta y marcándote retos "personales" para ir superándote poco a poco.

    Si realmente te acaba aburriendo es que no es para ti y te lo digo por experiencia con algunos lenguajes.

    La wiki solo es una referencial de todas las funciones y eventos con las que cuenta MTA, no sirve mucho empezar aprendiendo de allí.

     

    On 06/04/2020 at 16:00, sthprk said:

     

     estoy siguiendo unos tutoriales en videos de python y no me va tan bien no me salen la mayoria de los ejercicios soy un asco xd , me entero en teoria nadamas , por eso lo de 'no me va tan bien' ,aparte que me aburro , despues por otro lado edito algunos script Lua del mta , o puedo hacer uno pequeño como , crear un marker, al entrar al marker hace un sonido, abre una ventana, y hace una animacion , crea un objeto en la mano, al salir del marker tal cosa y asi... no se si gano mas viendo los tutoriales o creando editando scripts ?‍♂️

    porque tambien me lleva tiempo ponerme a hacer scripts xd

     

     

     

     

     

    Deberías empezar con lógica de programación (es tedioso aprender pero beneficioso), aprende lo más que puedas sobre ello y también con PseInt. De paso, te digo que aprender a programar no es fácil ni lleva poco tiempo. Puedes tardar años, pero de eso se trata el aprendizaje.

    Una vez creas que domines un poco la lógica de programación, descarga scripts de la comunidad y examinalos. Observa su código, qué hace, para qué sirve y a partir de eso puedes crear tus propios scripts. Así sea que hayas copiado un trozo de código, lo que cuenta es que sepas como funciona. Ya luego no necesitarás consultar scripts para hacer algo.

  3. Llevo alrededor de 3 años o más retirado del MTA. He dejado algunos de mis proyectos en la comunidad, entre ellos el que más destaco y estuvo en muchísimos servidores, el panel de grupos. Desconozco ahora si se expandió dentro de más servidores. Pero me siento muy bien al saber que todo mi trabajo lo compartí gratis.

    En efecto, el valor que las personas le fijan a los scripts o a los gamemodes en MTA, realmente es muy bajo y no representa en ocasiones ni el 10% del valor real de un trabajo. He visto -y yo también lo hice- como algunos venden sus scripts por miserables cinco dólares. Incluso el script más caro, no sobrepasa los $20. Durante este tiempo he estado inmerso en la programación de aplicaciones de escritorio (y ahora en web) y hasta el más minímo sistema tiene costes de hasta $1000 dólares.

    Creo, que todos los scripters de la comunidad hispana deberían tomar conciencia y dejar de ofrecer su trabajo por casi nada. Ofrezcan sobre todo valor y calidad, pero no se olviden de cobrar lo justo y lo que es.

     

    Ahora, finalizando el tema. Si tendrías que ponerle precio a tu hora de trabajo... ¿Cuánto crees que sería el precio de cada uno de tus scripts considerando el tiempo que tardaste en hacerlos?

  4. 
    function removeTent(object)
      
      // 
      local x, y, z = getElementPosition(source)
      local item, itemString = getItemTablePosition("Tienda de Campaña")
      local itemPickup = createItemPickup(item, x, y, z + 1, itemString)
      destroyElement(getElementData(object, "parent"))
      destroyElement(object)
    end
    addEvent("removeTent", true)
    addEventHandler("removeTent", getRootElement(), removeTent)

     

  5. Yo en lo general, empece con lua. Creando varios servidores y scripts ( los cuales he liberado varios ), y terminé abandonando MTA hace 1 año. Después de esto me incursione en la programación, es decir, algo que implique cosas más complejas y que en un futuro, podría trabajar de ello.

    Actualmente estoy formandome como desarrollador Junior ( web y aplicaciones .NET ) y me preguntaba de igual forma, si de los tantos antiguos e inactivos que existen... ¿Quiénes empezaron con LUA y luego pasaron a la programación?

  6. On 5/11/2018 at 11:48, ManuelPopeye said:

    Buenas a todos venga a presentar mi nuevo proyecto que voy a llevar a cabo tengo dos programadores fijos y necesito algo de ayuda mas y yo por aqui ire pidiendo ayudas por que ellos no estan siempre y necesito ayuda para avanzar  si algunos programadores pueden ponerse por este tema en contacto para ir ayudandome os lo agradezco..

    Yo se hacer algo pero de configuración y demás no mucho, estoy aprendiendo poco a poco a programar.

    El servidor se va abrir en una comunidad gamer de 103.026 personas.

    Entonces necesito ayuda para que destaque.

    Puedes preguntarle a alguno de los 103.026 miembros  de tu comunidad si te pueden ayudar gratis v:

  7. En esta nueva versión la mayoria de bugs fueron corregidos, además de eso hubo mejoras en la interfaz. El codigo fue simplificado para que sea lo mas editable posible.

    Entre lo que destaca es que en la mayoria de acciones se implemento un sistema de ventanas de dialogo, además de haberse creando un sistema de eventos propio para el script. Puedes cambiar el nombre de tu grupo las veces que quieras. Las acciones que haga cada jugador ( por ejemplo cuando se expulse un jugador ) será mostrada en el chat para todos los miembros del grupo, asi como cada mensaje que se registra en el sistema de logs. Fueron muchísimos cambios que se dieron en esta versión por lo que no podre mencionarlas todas.

    Espero que les guste esta nueva versión, lo he subido a github con la intención de que si algún dia abandono su desarrollo, la comunidad lo siga manteniendo.

    Link: https://github.com/xNout/gpsystem

    GALERIA DE IMAGENES

    Spoiler

    LpsbZsN.png

    cshIleJ.png

    rWvHxtH.png

     

     

     

  8. function Parada_58_a_1 (DispPasajeros)
    
    	if (PasajENP_a_1 > 0) and (DispPasajeros > 0) then
    		
    		DispPasajeros = DispPasajeros -1 
    		PasajENP_a_1 = PasajENP_a_1 -1 
    		PasajSuben = PasajSuben +1
    		outputChatBox ("Pasajeros que suben: " .. PasajSuben, source)
    		outputChatBox ("Pasajeros Disponibles: " .. DispPasajeros, source)	
    	
    		setTimer ( Parada_58_a_1, 1000, 1, source, DispPasajeros)
    		
    		
    		else 
    		
    		outputChatBox ("Pasajeros Nuevos Disponibles: " .. DispPasajeros, source)
    		timer = setTimer (greetingCommand, 500, 1, PasajSuben) --Pasa a la otra func, para realizar el Trigger Client
    		
    		
    end end 
    addEvent( "onGreeting", true )
    addEventHandler( "onGreeting", resourceRoot, Parada_58_a_1 ) 
    
    function greetingCommand ( playerSource, PasajSuben )
    	local playerSource = getPlayerName( playerSource )
        triggerClientEvent ( playerSource, "onGreeting2", playerSource, PasajSuben ) --Aca es el dato que se pasa a Cliente
    	outputChatBox ("Pasajeros que suben: " .. PasajSuben, playerSource) 
    	
    end 

     

    • Confused 1
  9. ¿Qué es un callback?

    Como la palabra en inglés lo indica un callback es una “llamada de vuelta”. Es simple: llamo a una funcion y le envío por parámetro otra función (un callback) esperando que la función que llamé se encargue de ejecutar esa función callback. Concepto de google.

    Siendo más explicito, es una funcion a la cual le vamos a pasar como parametro otra función, esperando que esta se encargue de ejecutarla.

    ¿Cuando es necesario usar un callback?

    Desde mis inicios en MTA hasta en la actualidad no he visto ningún Scripter que haya empleado el uso de un callback, yo me familiarize con este concepto cuando empeze a trabajar con C# y realmente es muy útil para muchas situaciones. Por ejemplo un uso que yo le di en MTA, fue cuando desarrolle un sistema de Ventanas de dialogo para mi sistema de grupos ( basado en el MessageBox de C# ), como parametros a esta funcion para las ventanas de dialogo, fueron 2:

    • Tipo de ventana ( SI/NO, OK, SI/NO/CANCELAR )
    • Funcion de callback

    En el primer argumento enviaba el tipo de ventana y en el segundo argumento la funcion a ejecutar como callback, esta funcion iba a ser empleada de tal forma que cuando un jugador de click al boton SI la funcion de callback seria ejecutada enviando parametros adicionales indicando que boton fue clickeado.

    Ahora les daré un pequeño ejemplo:

    Crearemos una funcion que se encargará de insertar productos en una Base de datos, la cual queremos que después de ejecutar la sentencia SQL, ejecute otra funcion que imprima un mensaje.

    local data_base = dbConnect( "sqlite", "sql.db" )
    
    dbFree( dbQuery( data_base, "CREATE TABLE IF NOT EXISTS producto ( codigo STRING, producto STRING, precio INT )" ) );
    
    -- funcion que sera usada para el callback
    function mensajeDB( text )
    	outputServerLog(text)
    end
    
    function insertarDatos( cmd, funcion_mensaje )
     	-- Ejecutamos el código SQL
    	dbExec( data_base, cmd )
      	-- Luego de esto vamos a ejecutar la funcion enviada para imprimir el mensaje indicando que los datos fueron insertados correctamente
    	funcion_mensaje( "Datos insertados" );
    end
    
    -- Aqui estamos enviando como primer argumento un codigo SQL para que se inserte en la base de datos
    -- Como segundo argumento estamos enviado a la funcion mensajeDB que será ejecutada una vez se inserten los datos en la DB.
    insertarDatos( "INSERT INTO producto( codigo, producto, precio ) VALUES( '00001', 'Computadora', 276.89 )", mensajeDB )

     

    Bien, en la funcion de insertarDatos estamos enviando como primer parametro una sentencia SQL, en el segundo estamos enviando la funcion mensajeDB que se encargaria de imprimir un mensaje en la consola. Cuando usamos esta funcion lo primero que se hizo fue ejecutar la sentencia SQL y luego de esto la funcion que se encargaría de imprimir el mensaje, pero como nos fijamos el segundo argumento de insertarDatos se llama 'funcion_mensaje', la cual estamos ejecutando como una función normal mandando una Cadena de texto como argumento, Esto no afectara en absoluto la función original mensajeDB.

     

    Espero haber sido lo más especifico posible intentando explicar el concepto de los callbacks en Lua, puede ser usado en muchos ambitos.. Aparte de yo hacer uso de la misma en un sistema de Ventanas de dialogo, tambien la emplee creando mi propio sistema de eventos el cual dejare como aporte a continuación:

    --[[
     *	*******************************************	*
     * Developed by:	-Rex-						*
     * Last modified:	-		 					*
     * Description:									*
     *	*******************************************	*
     ]]--
    
    events = {}
    events.handled = {};
    events.callbacks = { };
    
    function exec_event( event_name, ... )
    	local arguments = { ... };
    	arguments.lenght = #arguments;
    	local event_callback = function( event_name, arguments )
    		for i, _function in ipairs(events.callbacks) do
    			_function( event_name, arguments);		
    		end
    	end
    	
    	if( events.handled[event_name] ~= nil ) then
    		event_callback( event_name, arguments );
    		for i, _functions in ipairs(events.handled[event_name] or { }) do
    			_functions( arguments );
    		end
    	end
    end
    
    function handle_event( _function, event )
    	
    	if ( not events.handled[event] ) then
    		events.handled[event] = { };
    	end
    	local result = false;
    
    	if not exists_in_table( events.handled[event] ) then
    		table.insert( events.handled[event], _function ) 
    		result = true; 
    	end
    
    	if( not result ) then
    		outputDebugString( 
    			"Event: [ ".. event .." ] already handled", 
    			3, 
    			255, 
    			0, 
    			0 
    		);
    		return;
    	end
    	outputDebugString( 
    			"Event: [ ".. event .." ] handled", 
    			0, 
    			0, 
    			255, 
    			0 
    		);
    end
    --	//Este funcion se ejecuta cada que sucede un evento y retorna los argumentos del mismo ( En pocas palabras, un delegado )
    function add_ecallback( _function )
    
    	if not exists_in_table( _function, events.callbacks) then
    		table.insert( events.callbacks, _function );
    		outputDebugString(  debug.getinfo(1,"n").name .." was added to events callback" );
    	else
    		outputDebugString(  debug.getinfo(1,"n").name .." was already been added" )
    	end
    
    end

    Funciones

    
    -- Esta funcion se encarga de añadir un evento.
    handle_event( _function, event_name )
    
    -- Con esta funcion ejecutaremos un evento y podremos mandar parametros.
    exec_event ( event_name, ... arguments )
    
    -- Esta funcion se ejecutara cuando cualquier evento añadido se ejecute, enviando a la funcion del callback el nombre del evento y sus argumentos.
    add_ecallback( _function )

    Ejemplo de uso:

     

    -- Por ejemplo creamos un evento que notifique cuando se cree un grupo.
    function create_gp( creador, nombre_grupo, fecha_creacion )
     	outputChatBox( "El jugador: "..getPlayerName( creador ) .." fundo el grupo: "..nombre_grupo.." a la fecha: "..fecha_creacion, root, 255, 255, 255, true )
    end
    handle_event( "on_player_create_group", create_gp )
    
    
    -- Aquí ejecutaremos el evento enviando siertos argumentos, por ejemplo:
    -- El jugador X creo el grupo xNout a la fecha 18/04/2018 15:45
    exec_event("on_player_create_group", player, "xNout", "18/04/2018 15:45" )
    
    -- Resultado:
    
    -->  El jugador: X fundo el grupo: xNout a la fecha: 18/04/2018 15:45
    
    -- Cada vez que se cree un grupo el evento será ejecutado enviando todos los parametros que se le den.

     

  10. 22 hours ago, aka Blue said:

    Resumen: página de facebook repleta de niños ratas que se creen "hackers" y roban recursos a servidores para venderlos o postearlos.

    Podrá ser lo más activa que quieras la página pero estas cosas no están bien.

    Niños rata hay cualquier cantidad, al igual que personas muy toxicas.. la mayoria de publicaciones que ves allí son de: "Solicito un scripter, pago con rango" o niños presumiendo el robo de un script. Además que venden Gamemodes de DayZ filtradas. Para NADA hay publicaciones de ayuda, existen muy pocas.

  11. Hola (:

    Para explicarlo sin tanto bla bla, vengo a presentar un sistema de ventanas de dialogo que esta basado en el de Windows Forms ( C# ).

    Por ahora el sistema posee 3 tipos de ventanas de dialogo

    • Si/No/Cancelar
    • OK
    • Aceptar/Cancelar
    Spoiler

    Este sistema lo desarrolle para la nueva versión de mi sistema de grupos

    Pdsta: Liberare este sistema junto con el de grupos.

    CFQsdAv.jpg

     

    Cualquier critica pueden comentarla(:

×
×
  • Create New...