Hola mundo con sampctl - aprender en 10 minutos

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
Kemula
Junior
Junior
Mensajes: 207
Registrado: 25 Ago 2015 09:36
Ubicación: España.
Reputación: 14

31 Ago 2018 11:11

Hola mundo en sampctl

En este tutorial vamos a aprender a cómo usar sampctl y adaptarnos a su flujo de trabajo. También aprenderemos a usar Visual Studio Code como nuestro IDE principal.

Si no sabes lo que es sampctl o sus comandos, pásate por este post antes.

Se va a asumir que estás usando Windows, ya que la mayoría de gente lo usa como sistema operativo de desarrollo (¡aunque las herramientas con las que vamos a trabajar funcionan en cualquiera!)

Preparando lo que necesitamos

sampctl

Lógicamente necesitamos tener instalado sampctl.

Imagen

Podemos usar dos opciones: Yo personalmente he probado ambos, y puedes usar la que prefieras. La primera opción es la más sencilla, aunque suele dar más fallos.

Por eso también explicaré como se instala la segunda forma. Antes que nada, vamos a abrir Powershell (el terminal por defecto de Windows)
  1. Ejecutamos

    Código: Seleccionar todo

    set-executionpolicy remotesigned -scope currentuser
  2. Ejecutamos

    Código: Seleccionar todo

    iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
  3. A continuación ya estará Scoop.sh instalado, ahora toca añadir el bucket de Sampctl (es el equivalente a un repositorio) usando el siguiente comando:

    Código: Seleccionar todo

    scoop bucket add southclaws https://github.com/Southclaws/scoops.git; scoop install sampctl
Ahora tenemos que cerrar todas las instancias que tengamos abiertas de la terminal para asegurarnos que se refresca el PATH del sistema. (Buscad por Google si queréis saber lo que es).

Visual Studio Code

Imagen

Este va a ser nuestro IDE a partir de ahora. Sois libres de cambiarlo, pero el tutorial será con VSC. Simplemente lo descargamos y lo ejecutamos, no tiene más historia.

Pawn Tools para VS Code

Nota: para instalar Pawn Tools puedes acceder al siguiente enlace: https://marketplace.visualstudio.com/it ... scode-pawn y pulsar Install allí.

Ahora que tenemos instalado nuestro IDE, tenemos que añadirle una extensión que nos permita trabajar con el lenguaje Pawn. Para ello pulsamos Control + Shift + X, o desde View -> Extensions.

Ahí escribimos Pawn Tools, y descargamos el paquete de Southclaws.
Imagen

Creando una carpeta para nuestro proyecto

Necesitamos crear una carpeta destinada a nuestro paquete. Una vez lo hayamos hecho, vamos a Visual Studio Code y abrimos la carpeta. (“Archivo” > “Abrir carpeta…”). Este podría ser un nuevo concepto para vosotros si veníais utilizando Pawn tradicionalmente. VSCode puede abrir una carpeta en vez de un archivo.

Esto es realmente útil ya que podemos tener nuestro proyecto de forma modular, o incluso tener varios proyectos dentro del proyecto. Además esto hace muy simple el cambio entre archivos y realmente sencillo el uso de la terminal gracias al terminal integrado en el IDE.

Creando nuestro primer paquete

Ya que tenemos todas nuestras herramientas instaladas, podemos crear nuestro paquete. Puedes leer más información sobre los paquetes Pawn en este enlace.

¿Cómo lo hacemos? Tenemos que abrir la terminal integrada de Visual Studio Code pulsando Control + ` o pulsando sobre "View" > "Integrated terminal" en el menú de arriba. (Depende de si tenéis VSCode en inglés o español. En mi caso está en inglés.)

Una vez habéis abierto el terminal, tenéis que escribir el siguiente comando:

Código: Seleccionar todo

sampctl package init
Y seguir los pasos que nos aparecen en la pantalla.
[ Imagen Externa ]

Nos preguntarán por el formato preferido (siempre selecciono JSON), por tu nombre de Github, el nombre del paquete y un par de cosas más.

Esto generará los siguientes archivos:
  • .gitattributes: le dice a Github que marque tu repositorio como lenguaje Pawn.
  • .gitignore: le dice a git que ignore algunos archivos.
  • .vscode: contiene información específica de los ajustes de VSCode.
  • README.md: plantilla para la documentación de tu paquete. (Esto deberíais de editarlo después)
  • pawn.json: es un archivo muy muy importante, el cuál trataremos después.

¡Escribiendo código!

Perfecto, hasta aquí todo bien, solamente que aún no hemos tocado nada de código. ¡Manos a la obra!.

(Este paquete "Hola mundo" no es un tutorial de Pawn, así que el código será muy muy simple)

Vamos a escribir y testear una librería que solamente manda un mensaje de Hola mundo a la consola y al jugador que se conecta.

Crea un archivo llamado helloworld.inc con el siguiente contenido:


PD: Si el código aparece sin formato, pulsa sobre el botón de sintaxis. Probablemente tengas "Plain text" o "Texto plano", hazle click y cámbialo por Pawn. (El botón se encuentra abajo a la derecha.)

Compilando el código

Ya tenemos el código fuente pero falta algo. Nosotros normalmente no compilamos archivos .inc (están hechos para ser incluidos). Lo que necesitamos es un archivo de entrada para compilar desde ahí.

¿Qué hace un archivo de entrada un archivo de entrada? Dos propiedades:
  • Tiene que tener una función main() en su código
  • Tiene que estar en el archivo pawn.json en el campo entry.
Abre el archivo pawn.json y deberías de ver algo como esto:

Código: Seleccionar todo

{ 
  "user": "Southclaws", 
  "repo": "hello-world", 
  "entry": "test.pwn", 
  "output": "test.amx", 
  "dependencies": ["sampctl/samp-stdlib"] 
}  
Como podemos ver, el comando para crear el paquete (sampctl package init) trae ya unos valores por defecto.

Es algo muy simple, el campo entry es el archivo que se le pasa al compilador, y output, el nombre del archivo .amx resultante.

Como ya está escrito el nombre test.pwn, vamos a crear el archivo llamado test.pwn desde nuestro espacio de trabajo haciendo click en el botón "New File" / "Nuevo archivo".

Imagen

En este archivo, escribiremos el siguiente código:



Ahora en la terminal integrada, escribiremos sampctl package build y si todo ha ido bien, ¡habremos compilado nuestro primer paquete!

Ejecutando el código

Ya tenemos compilado el paquete, genial. Ahora es momento de ejecutarlo.

Estarás pensando algo como: "esto es Pawn, tengo que abrir el archivo samp-server.exe, crear una carpeta gamemode, configurar el archivo server.cfg y observar lo que aparece en pantalla..."

No.

Simplemente escribe sampctl package run y se ejecutará tu paquete, ¡así de fácil!

Compilando el código de forma más elegante

Al igual que con Pawno puedes compilar el código usando una combinación de teclas, aquí también puedes. La magia se encuentra en nuestro tasks.json, que es un archivo de configuración de Visual Studio Code en el cuál definimos cómo responder ante ciertas tareas.

En nuestro caso, sampctl ya trae el suyo propio, así que vamos a probarlo. Abrimos la paleta de comandos (pulsando Control + Shift + P) y escribimos "run task" (sin comillas) y seleccionamos el build watcher.

Imagen

Eso significa que Visual Studio Code compilará nuestro código cada vez que guardemos el archivo, es decir, cada vez que hagamos cambios y te mostrará los errores si hay alguno.

Nota: también podemos usar run tests watcher en vez de build watcher, ya que este a parte de compilar el código, si no hay errores, lo ejecutará y veremos la salida en pantalla.

Créditos

Obviamente el que se lleva todos los méritos es Southclaws, un usuario del foro inglés de SAMP. Creador de esta herramienta y creador de este post.
También créditos a Kemula (yo) por traducir el post y hacer modificaciones en él.

Este tutorial se complementará con el de cómo pasar un gamemode a sampctl, pero eso ya será otro día.

Un saludo -hi
Última edición por Kemula el 31 Ago 2018 15:57, editado 1 vez en total.
Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3133
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

31 Ago 2018 12:22

Deberías explicar que es sampctl, y ademas algunos otros comandos básicos como "package install".

Por lo demás, era requerido esta guía.
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Avatar de Usuario
Kemula
Junior
Junior
Mensajes: 207
Registrado: 25 Ago 2015 09:36
Ubicación: España.
Reputación: 14

31 Ago 2018 13:03

#Fede escribió:
31 Ago 2018 12:22
Deberías explicar que es sampctl, y ademas algunos otros comandos básicos como "package install".

Por lo demás, era requerido esta guía.
Sí, voy a sacar 3 guías de sampctl. Esta es la primera, para una toma de contacto. La siguiente será una explicación de qué es sampctl, cómo funciona y comandos y la última será de implementar sampctl en un gamemode ya existente.

Un saludo -hi
JostinEduardo
Aprendiz
Aprendiz
Mensajes: 261
Registrado: 11 Jun 2014 16:02
Ubicación: Venezuela
Contactar:
Reputación: 2

31 Ago 2018 14:07

Estoy aprendiendo algo que deconozco, Concuerdo con fede ¿qué es sampctl?
— Tú creces, todos crecemos, estamos hechos para crecer. Tú o evolucionas o desapareces. —
Avatar de Usuario
Kemula
Junior
Junior
Mensajes: 207
Registrado: 25 Ago 2015 09:36
Ubicación: España.
Reputación: 14

31 Ago 2018 14:48

JostinEduardo escribió:
31 Ago 2018 14:07
Estoy aprendiendo algo que deconozco, Concuerdo con fede ¿qué es sampctl?
Kemula escribió:
#Fede escribió:
31 Ago 2018 12:22
Deberías explicar que es sampctl, y ademas algunos otros comandos básicos como "package install".

Por lo demás, era requerido esta guía.
Sí, voy a sacar 3 guías de sampctl. Esta es la primera, para una toma de contacto. La siguiente será una explicación de qué es sampctl, cómo funciona y comandos y la última será de implementar sampctl en un gamemode ya existente.

Un saludo -hi
EDIT: viewtopic.php?f=40&t=30246
Responder