×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • Guías y Tutoriales
  • /
  • [Tutorial] Comandos con complementos
[Tutorial] Comandos con complementos
Eliaseeg
« Citoyen »
1383471960000
    • Eliaseeg#0000
    • Profil
    • Derniers messages
#1
  0
Holoo \o/

Antes que nada, querría hacer 1 minuto de silencio por mi primer tutorial que hice en esta sección. Me da un poco de nostalgia ya que en el momento en el que empecé a hacer el tutorial, a penas tenía una idea de lo que era LUA; ahora miro este tema y comparo mi progreso, en fin, todo muy chachi.


Primero que nada, el método que utilizabamos antes podría decir que está muy anticuado. Si queremos hacer un código con una semántica que nosotros y los demás puedan entender debemos hacer el siguiente método, en caso de que quieras utilizar el método antiguo, complicarte un poco la vida y como los machos ibericos poder testearlo, eres bienvenido. Cabe decir que voy a explicar las dos formas y hacerlo mucho más sencillo que el tutorial pasado.



Forma 1: Utilizando string.gmatch y patterns.

¿A qué me refiero con "Utilizando string.gmatch y patterns"?
Utilizaremos string.gmatch y los patrones para detectar cuántos complementos tiene el comando. Dejaré el código fuente ahorita mismo y explicaré todo a continuación.

a dit :
function eventChatCommand(name, command)
      local args={} -- Definiendo la tabla que almacenará todos los datos.
      for arg in command:gmatch("[^%s]+") do -- Por cada vez que se encuentre el pattern %s en el comando.
            table.insert(args,arg:lower()) -- Insertarlo en la tabla args con su valor en minúscula.
      end
      print(table.concat(args, " ")) -- Esto es sólo opcional, aquí podemos ver cómo funciona esto.
end

Primero que nada, el eventChatCommand siempre deberá estar, pues esta es la función a la que nos referimos cuando queremos interactuar con los comandos. Después, hacemos una tabla nueva cada vez que alguien escribaalgo con ! para almacenar todo el comando que esa persona ejecute.

Ahora comprobamos y añadimos valores, es decir, por cada pattern %s que se encuentre en el comando, insertarlo en la tabla como un complemento del comando. Como vemos en el ejemplo, pedimos que nos imprima la tabla args después de accionar el comando. (Quiero recordar que no hay ningún hilo de patrones, por lo cual se me haría difícil explicar todo eso aquí, por lo cual voy a decir que %s son todos aquellos caracteres de texto). En todo caso si escribo !egg es el mejor; va a imprimir: egg es el mejor.

Ahora lo que resta es sencillo, podemos hacer una sentencia de que si el argumento 1 es 'x' y si argumento 2 es 'y' entonces hacemos esto y esto... Bueno, eso sería todo, aquí está un ejemplo mucho más claro en el que sólo tienes que escribir !queso nombre y le darás queso al usuario que quieras.

a dit :
function eventChatCommand(name, command)
      local args={}
      for arg in command:gmatch("[^%s]+") do
            table.insert(args,arg:lower())
      end
      if args[1] == "queso" then
            tfm.exec.giveCheese(args[2])
      end
end


Forma 2: Utilizando string.sub.

Llegamos a la zona donde los machos ibericos quieren llegar, esas personas que se quieren complicar la vida simplemente porque sí, porque la vida en sí ya es complicada. En esto, no hay mucha ciencia, aunque es algo difícil de explicar, así que intentaré ser lo más breve y lo más didáctico posible.

String.sub es el método en el que podemos agarrar cierta cantidad de un string u otra cosa, sirve para casos como este en el que queremos agarrar una parte y después agarrar la otra parte. Primero tenemos que empezar con la base, el eventChatCommand. Después tenemos que agregar una condición: "Si agarramos X parte del comando y es igual a Y y si agarramos otra parte del comando, hacer algo con esa otra parte".

Quiero recordar que string.sub funciona así: string.sub(principio, fin) donde principio es el valor que queremos que empiece a contar y fin es el final. Así que vamos a contar cuántas letras tiene nuestro comando, de ahí a eso, para agarrar la otra parte agarramos el número de letras que tenga nuestro comando y le agregamos 2. Te tiene que quedar algo como esto.

a dit :
function eventChatCommand(name, command)
      if command:sub(0,5) == "queso" then
            tfm.exec.giveCheese(command:sub(7))
      end
end

Como vemos, iniciamos desde 0 y terminamos hasta el 5, que es el número de letras que tiene queso. A queso le sumamos otras 2 y jugamos con el resultado que nos sale. Eso sería prácticamente todo explicado de una manera muuuuuuuuuuuuuuuuuuuuucho más fácil de lo que estaba antes.


Conclusión

Existen varios sistemas para jugar con los comandos, ahora que el server-side se actualizó, podemos usar metatablas para jugar con el chatCommand, al igual que las co-rutinas, las cuales ejecutan un pedazo de función cuando se llama a la función especial. Se puede hacer un sistema de comandos con complementos con string.split (función incluida en la "function library" de shamousey), pero llegaría a confundir, y no quiero eso.

Mucha suerte, espero que este tema ahora sea un poco más comprensible.

Dernière modification le 1429331760000
Zutto
« Citoyen »
1383480300000
    • Zutto#4451
    • Profil
    • Derniers messages
    • Tribu
#2
  0
Es bastante útil para las personas que no saben hacer !comando nombre

#pole
Thetroz
« Citoyen »
1383497460000
    • Thetroz#0000
    • Profil
    • Derniers messages
    • Tribu
#3
  0
Buen tutorial :D
Hfaundez
« Citoyen »
1383499380000
    • Hfaundez#0000
    • Profil
    • Derniers messages
    • Tribu
#4
  0
!Genial :3

#Hfa ;3
Agustinsupre
« Citoyen »
1383533400000
    • Agustinsupre#0000
    • Profil
    • Derniers messages
    • Tribu
#5
  0
aaaaaaaaaaaaaa NO ENTIENDO puse en el comando respawn puse tfm.exec.respawnPlayer y no sirve y el comando de queso no funciona
Mipmippp
« Citoyen »
1395504120000
    • Mipmippp#0000
    • Profil
    • Derniers messages
#6
  0
Está bueno
reviso un montón de veces este hilo para crear comandos ¬3¬
Jdkdffedogifk
« Citoyen »
1417481400000
    • Jdkdffedogifk#0839
    • Profil
    • Derniers messages
#7
  0
Y yo como tonto preguntandole todo a ustedes ñ~ñ sorry
Eliaseeg
« Citoyen »
1429331820000
    • Eliaseeg#0000
    • Profil
    • Derniers messages
#8
  0
Tema actualizado, un poco más de información y cosas más sencillas de lo que eran.
Toyfreddyman
« Citoyen »
1429829820000
    • Toyfreddyman#0000
    • Profil
    • Derniers messages
    • Tribu
#9
  0
¿Puedo traducir su tema para el Server , Brasil?
Eliaseeg
« Citoyen »
1430007180000
    • Eliaseeg#0000
    • Profil
    • Derniers messages
#10
  0
Como quieras, sólo espero que sea una traducción coherente
Niopigaa
« Censeur »
1433970060000
    • Niopigaa#0000
    • Profil
    • Derniers messages
    • Tribu
#11
  0
Esto seria lo mismo que
elseif command == X then
FUNCION. ?
Eliaseeg
« Citoyen »
1433976360000
    • Eliaseeg#0000
    • Profil
    • Derniers messages
#12
  0
No te entendí nada, pero te haré un resumen.

a dit :
function eventChatCommand(name, command) -- Llamamos al evento ChatCommand que se activa cuando alguien pone !
      if command == "comando" then -- Si el comando es comando
            tfm.exec.giveCheese(name) -- Dar queso al que puso el comando
      end -- Cerramos el if
end -- Cerramos el evento
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • Guías y Tutoriales
  • /
  • [Tutorial] Comandos con complementos
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27