Guía básica de SA-MP y Pawn - Printable Version +- Burgershot (https://www.burgershot.gg) +-- Forum: Other languages (https://www.burgershot.gg/forumdisplay.php?fid=23) +--- Forum: Spanish/Español (https://www.burgershot.gg/forumdisplay.php?fid=24) +---- Forum: Programación (https://www.burgershot.gg/forumdisplay.php?fid=51) +---- Thread: Guía básica de SA-MP y Pawn (/showthread.php?tid=739) |
Guía básica de SA-MP y Pawn - Ygzeb - 2019-08-02 GUÍA BÁSICA DE SA-MP Y PAWN
![]() INTRO: Esta guía esta basada en diversas guías y en mi propia experiencia. Guía creada especialmente para nuevos scripters y usuarios a los que les gustaría aprender sobre el lenguaje Pawn en SA-MP; explicando solo lo básico y cómo empezar. * Nota: es importante que el usuario tenga el mayor conocimiento posible del idioma inglés, dado que el lenguaje de programación Pawn está basado en este idioma. Esta guía está basada en una publicación que hice para el foro SA-MP a inicios del año 2015, si usted lee esto en otro tiempo es probable que algunos elementos hayan cambiado y/o actualizado. Basado en: Nicholas tutorial Kwarde tutorial Wiki SA-MP Conocimiento propio. ÍNDICE: INICIANDO Explicando cada archivo y carpeta (solo los básicos) scriptfiles plugins pawno npcmodes include gamemodes filterscripts announce.exe samp-npc.exe samp-server.exe server.cfg CONFIGURACIÓN PAWN SCRIPTING Publics public OnGameModeInit() public OnGameModeExit() public OnPlayerRequestClass(playerid, classid) public OnPlayerConnect(playerid) public OnPlayerSpawn(playerid) public OnPlayerDeath(playerid) public OnPlayerDisconnect(playerid, reason) public OnPlayerText(playerid) public OnPlayerUpdate(playerid) Funciones SetPlayerPos(playerid, X, Y, Z); TextDrawCreate(X, Y, text[]) Dialogs (menús & otros) ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]); Dialog de cuadro (envía un mensaje al jugador) Dialog de texto (permite a los jugadores colocar texto en el dialog) Dialog de lista (menú, muestra a los jugadores una lista de opciones) Dialog de contraseña (permite a los jugadores colocar texto en el dialog, sin revelar el texto) CREANDO Y REMOVIENDO OBJETOS Map editor (1 & 2) Empezando Creando objectos Removiendo objectos MTA editor Empezando Delux GTA Map Converter v2 Creando Objectos Instalar Streamer EMPIECE A PRACTICAR INICIANDO: Primero debe descargar el archivo SA-MP Windows Server desde SA-MP.com Después de descargarlo y descomprimirlo, veremos estos archivos... Archivos y carpetas básicos: scriptfiles, plugins, pawno, npcmodes, include, gamemodes, filterscripts, announce.exe, samp-npc.exe, samp-server.exe & server.cfg Otros archivos: Textos que incluyen términos de servicio y una guía de configuración (samp-license.txt & server-readme.txt respectivamente). Explicando cada archivo y carpeta (solo los básicos): scriptfiles: esta carpeta contiene información llamada dentro del script o logs producidos por el script. Normalmente es usada como base de datos. plugins: esta carpeta contiene códigos adicionales que dan más opciones en la programación, usualmente programados en otros lenguajes de programación. Esta guía no dará información detallada sobre plugins debido a que es más avanzado. pawno: contiene el programa básico para empezar a programar en SA-MP; también tiene la carpeta include que contiene los includes básicos de SA-MP para empezar nuestro script (funciones básicas de SA-MP). También podemos crear nuestros propios includes y añadirlos al script. npcmodes: contiene información sobre NPCs (script & rec); esta guía no dará información detallada sobre NPCs debido a que es más avanzado. include: contiene códigos que pueden ser incluidos en el script. gamemodes: contiene los modos de juego básicos y si creamos uno debemos colocar aquí también. filterscripts: contiene códigos adicionales, separados del gamemode, no están incluidos dentro de él y pueden ser llamados al usar comandos rcon. announce.exe: este archivo nos permitirá mostrar nuestro servidor en la lista de Internet. samp-npc.exe: nos permitirá usar NPCs. samp-server.exe: con este archivo iniciamos el servidor. server.cfg: configuración del servidor. CONFIGURACIÓN: Primero debemos abrir el archivo "server.cfg" y editar la configuración del servidor. Al abrirlo encontraremos: Code: echo Executing Server Config... Puede editar la configuración basado en esto: Code: echo Executing Server Config... También puede leer más sobre el archivo server.cfg y su configuración. Ejemplo de configuración (la guía está basada en esta configuración): Code: echo Executing Server Config... PAWN SCRIPTING: Después de editar la configuración empezaremos a programar el modo de juego. En este caso usaremos un gamemode básico que pueden descargar aquí. Deben colocarlo dentro de la carpeta gamemodes. Después de hacer esto deben abrir la carpeta pawno, dentro de su servidor, y abrir el archivo "pawno.exe". Presione "File/Open" (o simplemente CTRL + O) y abra su gamemode, colocado dentro de la carpeta gamemodes. Dentro tenemos esto: Code: #include <a_samp> Este es el include básico de SA-MP, debe estar incluido en cada script que usted cree en el ámbito de SA-MP. Este es el mensaje que será mostrado en consola al abrir el archivo samp-server.exe: Code: main() El texto azul es el mensaje que será mostrado. Puede editar el texto que será mostrado en consola al encender su servidor, simplemente cambiando el texto azul; por ejemplo: Code: main() * Nota: Todos los códigos deben tener llaves abiertas y cerradas al empezar y terminar la función. Ejemplo: Llaves abiertas = Rojo Llaves cerradas = Verde main() { print("¡Mi primer script!"); } * Nota: ¡Es muy importante que después de realizar un cambio en el script presione F5! Esto actualizará el archivo AMX y los cambios realizados quedarán guardados ("si no hay error alguno", aunque en casos especiales hay errores de programación que no figurarán y afectarán al servidor internamente). Si todo anda bien verá algo parecido a esto: ![]() De lo contrario significa que el script tiene errores, hizo algo mal y debe corregirlo. Publics: Los publics son funciones básicas que son llamadas mientras su servidor está encendido, en momentos precisos. SA-MP cuenta con publics básicos que son llamados en la mayoría de servidores. Normalmente el nombre de un public describe cuándo se ejecuta el public. Algunos publics son llamados en momentos especiales, por ejemplo al spawnear; puede añadir una función a ese momento en específico. Por ejemplo, si queremos cambiar la vida de los jugadores a 50 al spawnear, usaríamos algo como: Code: public OnPlayerSpawn(playerid) * Nota: no podemos usar publics idénticos en un mismo script; por ejemplo dos publics OnPlayerSpawn. Si queremos añadir una función adicional debemos agregarla en el mismo public o en un filterscript. Basándonos en el ejemplo anterior, añadiremos un mensaje al spawnear: Code: public OnPlayerSpawn(playerid) Algunos publics que son usados comúnmente: public OnGameModeInit() - Llamado al iniciar el gamemode. Información adicional: https://sampwiki.blast.hk/wiki/OnGameModeInit Estructura básica: Code: public OnGameModeInit() Ejemplo: Code: public OnGameModeInit() AddPlayerClass es una función que permite añadir personajes en la selección de personaje; por ejemplo si queremos añadir el personaje de Sweet, debemos añadir esto en nuestro gamemode: Code: AddPlayerClass(270, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); El número "270" el ID del personaje de Sweet. public OnGameModeExit() - Llamado al finalizar el gamemode; no es obligatorio en el script (opcional en la mayoría de casos). Información adicional: https://sampwiki.blast.hk/wiki/OnGameModeExit Estructura básica: Code: public OnGameModeExit() Ejemplo: Code: public OnGameModeExit() public OnPlayerRequestClass(playerid, classid) - Llamado en la selección de personaje. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerRequestClass Estructura básica: Code: public OnPlayerRequestClass(playerid, classid) Ejemplo: Code: public OnPlayerRequestClass(playerid, classid) SetPlayerFacingAngle cambia el ángulo hacia donde el personaje observa; su estructura es: Code: playerid = ID del jugador Mayor información sobre SetPlayerFacingAngle. public OnPlayerConnect(playerid) - Llamado cuando un jugador se conecta. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerConnect Estructura básica: Code: public OnPlayerConnect(playerid) Ejemplo: Code: public OnPlayerConnect(playerid) PlayAudioStreamForPlayer es una función que reproduce un sonido externo al jugador. Su estructura es: Code: playerid = ID del jugador * Nota: el audio debe estar en un formato en específico para funcionar, por ejemplo este link. Puede encontrar música en muchas páginas. Por ejemplo en esta web. public OnPlayerSpawn(playerid) - Llamado después de seleccionar personaje, al spawnear. Estas funciones afectarán al jugador al spawnear. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerSpawn Estructura básica: Code: public OnPlayerSpawn(playerid) Ejemplo: Code: public OnPlayerSpawn(playerid) SendClientMessage es una función que envía un mensaje al jugador; su estructura es: Code: playerid = ID del jugador Mayor información sobre SendClientMessage. public OnPlayerDeath(playerid) - Llamado al morir. Esta función afectará al jugador al morir. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerDeath Estructura básica: Code: public OnPlayerDeath(playerid) Ejemplo: Code: public OnPlayerDeath(playerid) GameTextForPlayer envía un mensaje en pantalla al jugador; su estructura es: Code: playerid = ID del jugador Mayor información sobre GameTextForPlayer. public OnPlayerDisconnect(playerid, reason) - Llamado al desconectarse el jugador. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerDisconnect Estructura básica: Code: public OnPlayerDisconnect(playerid, reason) Ejemplo: Code: public OnPlayerDisconnect(playerid, reason) public OnPlayerText(playerid) - Llamado cuando el jugador envía un mensaje (chat). Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerText Estructura básica: Code: public OnPlayerText(playerid, text[]) Ejemplo: Code: public OnPlayerText(playerid, text[]) Esta función es el formato aplicado a SendClientMessageToAll. Cuando sea enviado seguirá el formato: Code: format(String, sizeof(String), "%s [%d]: {FFFFFF}%s", Name, playerid, text); Code: %s y %d son valores asignados dependiendo del jugador. Code: format(String, sizeof(String), "%s [%d]: {FFFFFF}%s", Name, playerid, text); Nombre, ID & texto son los valores asignados a %s, %d y %s. public OnPlayerUpdate(playerid) - Llamado cada vez que el usuario envía su estado al servidor. Información adicional: https://sampwiki.blast.hk/wiki/OnPlayerUpdate Estructura básica: Code: public OnPlayerUpdate(playerid) Ejemplo: Code: public OnPlayerUpdate(playerid) "if" para detectar si una situación en especial está ocurriendo; en caso de ser así el servidor ejecutará una función determinada. Traduciendo esto a nuestro idioma, sería algo como: ¡Si está usando minigun, expúlsalo! * Nota: usar "if" en OnPlayerUpdate puede causar lag, esto es solo un ejemplo. Usar la función return con "Kick(playerid);" significa que la función termina ahí. Si tiene otro código bajo esta función, no será ejecutado si esta función es llamada. Por ejemplo: Code: public OnPlayerUpdate(playerid) Funciones: Básicamente, la mayoría de funciones (funciones nativas/básicas de SA-MP) describen lo que hacen en su nombre; puede encontrar muchas de ellas aquí. Algunas funciones básicas que son usadas mayormente: SetPlayerPos(playerid, X, Y, Z); - Cambia la posición del jugador (X, Y & Z son los puntos donde moverá al jugador). Información adicional: https://sampwiki.blast.hk/wiki/SetPlayerPos Ejemplo: Code: SetPlayerPos(playerid, 0.0, 0.0, 3.0); // Cambia la posición del jugador al campo. Puede guardar su posición actual usando /Save dentro del juego (comando por defecto de SA-MP). Después de esto debe ir a "\GTA San Andreas User Files\SAMP" y abrir el archivo "savedpositions.txt". Dentro encontrará algo parecido a: Code: AddPlayerClass(270, 700, 700, 5, 0, 0, 0, 0, 0, 0, 0); Luego simplemente copie los valores en rojo: Code: AddPlayerClass(270, 700, 700, 5, 0, 0, 0, 0, 0, 0, 0); * Nota: obviamente los valores no son rojos, solo es un ejemplo. Luego pegue los valores dentro de la función SetPlayerPos; así: Code: SetPlayerPos(playerid, 700, 700, 5); También puede usar este sistema que lo programará por usted. TextDrawCreate(X, Y, text[]) - Crea un textdraw (X & Y son las coordenadas de la pantalla y "text" es el texto que mostrará). Información adicional: https://sampwiki.blast.hk/wiki/TextDrawCreate Ejemplo de textdraw: Code: new Text:Textdraw0; Una forma sencilla de usar esta función es con un Editor de Textdraw. Para mostrar un textdraw al jugador debe usar la función TextDrawShowForPlayer. Ejemplo de uso (basado en el ejemplo anterior): Code: public OnPlayerConnect(playerid) Para esconder el textdraw del jugador debe usar la función TextDrawHideForPlayer. Ejemplo: Code: public OnPlayerDisconnect(playerid, reason) Y para destruir el textdraw debe usar TextDrawDestroy. Ejemplo: Code: public OnGameModeInit() Dialogs (menús & otros): ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]); - Muestra al jugador un dialog. Información adicional: https://sampwiki.blast.hk/wiki/ShowPlayerDialog * Nota: Todo dialog necesita un ID único (dialogid); a no ser que no use dicho ID en el public OnDialogResponse (los dialogs de filterscripts e includes debe usar también un ID único). Hay cuatro tipos de dialogs: Dialog de cuadro (envía un mensaje al jugador): ![]() Ejemplo (con el botón de cancelar): Code: if(!strcmp(cmdtext, "/Ayuda", true)) Cada línea tiene caracteres; la primera línea tiene 73 caracteres así que ponemos 73 al final. En la segunda y todas las líneas posteriores debemos contar los caracteres de dicha línea sumado con los caracteres de las otras líneas. En el caso de la segunda línea es 137 por lo que pondremos eso al final. Ejemplo (sin el botón de cancelar): Code: if(!strcmp(cmdtext, "/Ayuda", true)) La función strcat junta el string de Menu, sumado con el string del texto. * Nota: Puede usar páginas para contar caracteres. Cuando cuenta los caracteres solo debe tomar en cuenta los que están entre ""; por ejemplo: Code: if(!strcmp(cmdtext, "/Ayuda", true)) La \n también cuenta. También podemos añadir una función al presionar "Aceptar" o "Cancelar" dentro del public OnDialogResponse. Por ejemplo: Code: if(!strcmp(cmdtext, "/Ayuda", true)) Añadimos un mensaje (la función) dentro del public OnDialogResponse: Code: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) * Nota: Al usar OnDialogResponse cada dialog debe tener un número. En este caso usamos el número 1: Code: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", ""); Dialog de texto (permite a los jugadores colocar texto en el dialog) ![]() Ejemplo: Code: ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Texto", "¡Escriba un texto a todos los jugadores", "Aceptar", "Cancelar"); Después de crear nuestro código debemos crear una función al código; para ello usaremos public OnDialogResponse: Ejemplo: Code: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) Dialog de lista (menú, muestra a los jugadores una lista de opciones): ![]() Ejemplo (creando un menú de armas): Code: if(!strcmp(cmdtext, "/Weapon", true)) Code: "Armas" = Título de la lista El símbolo \n es usado para separar los elementos de la lista (en filas). Para dar el arma usamos public OnDialogResponse: Code: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) Estructura de la función GivePlayerWeapon: Code: GivePlayerWeapon(playerid, weaponid, ammo); Información adicional sobre la función: https://sampwiki.blast.hk/wiki/GivePlayerWeapon Dialog de contraseña (permite a los jugadores colocar texto en el dialog, sin revelar el texto): ![]() Tiene la misma estructura que "Dialog de contraseña"; mayormente usado en sistemas de registro (lo cual es ligeramente avanzado para ser explicado en esta guía). Si quiere ver cómo crear sistemas de registro puede visitar: TheChaoz, cómo crear un sistema de registro. Kush account system guide (Y_INI). Lorenc_ account system guide (SQLite using rBits). CREANDO Y REMOVIENDO OBJETOS: Hay muchos programas para modificar el mapa del servidor; los más conocidos son: Map editor 1 (inglés) Map editor 2 (inglés) MTA editor Lista de objetos: https://sampwiki.blast.hk/wiki/Model_ID Map editor (1 & 2): Ambos tienen una estructura parecida; esta es una explicación para ambos casos. Empezando: - Después de descargarlo, debe abrir el archivo "editor.exe" y presionar el botón "LOAD". - Cargará el mapa del juego (GTA-SA); puede mover la cámara moviendo el mouse mientras presiona clic derecho. Puede mover por el mapa con el scroll o usando las teclas "W, A, S y D" mientras presiona clic derecho. Creando objetos: - Muévase al lugar donde quiere añadir el mapa, presione el botón "Objects" dentro del menú (el menú al lado derecho de la ventana). - Presione "+Add" y busque el objeto que quiere añadir (ID o nombre); luego haga doble clic en él y presione el botón "Add". - Después de hacerlo presione en el objeto mostrado en el lado derecho de la venta, luego presione "insert". - Puede mover el objeto usando el panel "Movement". - Después de mapear puede obtener el código y añadirlo a su GM presionando "Show Code". Copa el código y lo pega en OnGameModeInit. Ejemplo: Code: public OnGameModeInit() Información adicional: https://sampwiki.blast.hk/wiki/CreateObject Removiendo objetos: - Muévase alrededor del mapa y busque el objeto que desea borrar. - Haga clic en él y presione la tecla "Supr". - Después de borrarlo presione "Show Code". Debe pegar el código en public OnPlayerConnect. Ejemplo: Code: public OnPlayerConnect(playerid) Información adicional: https://sampwiki.blast.hk/wiki/RemoveBuildingForPlayer MTA editor: Este programa es más sencillo de usar (para los nuevos) que el otro editor. Puede descargarlo aquí. * Nota: El programa puede crear objetos pero no eliminarlos. Empezando: - Después de descargarlo, abra el archivo MTA.exe - Haga clic en el editor de mapas. - Muévase por el mapa, use la cámara y las teclas "W, A, S y D". - Para crear objetos presione "F" y haga clic en el cubo (parte inferior): ![]() - Busque el objeto y colóquelo en el mapa. * Nota: Puede mover arriba y abajo haciendo clic en el objecto y usando las teclas "Avpag" y "Repag" (o también conocidas como "Page Down (pg dn)" y "Page Up (pg up)"). Para rotarlo use "Shift + Scroll". Para cambiar el ángulo use "CTRL + Avpag/Repag" o "CTRL + Flechas". - Para guardar el mapa use el botón de guardado: ![]() - Para obtener el código use un convertidor de mapas MTA: Delux GTA Map Converter v2 (2015) Delux GTA Map Converter v2: - En vez de IPL file format escoja PAWN Code for SA-MP. Busque el mapa dentro de la carpeta MTA; usualmente se encuentra dentro de \mods\deathmatch\resources. - Copie el código. Creando Objetos: Después de obtener el código de objeto, debe añadirlo dentro de public OnGameModeInit o OnFilterScriptInit. Ejemplo: Code: public OnGameModeInit() Sin embargo, SA-MP tiene un límite de 1000 objetos. Si quiere optimizar el script o hacerlo más rápido, debe usar el plugin Streamer. Instalación de Streamer: - Puede descargarlo desde el tema del plugin. - Después de descargarlo, pegue el archivo "streamer.so" o "streamer.dll" dentro de la carpeta plugins (o simplemente pegue la carpeta plugins contenida en la descarga dentro de la carpeta del servidor). - Copie el include "streamer.inc" dentro de la carpeta includes, dentro de la carpeta pawno. - Edite el archivo "server.cfg" dentro de la carpeta de su servidor y agregue esta línea si está usando Windows: Code: plugins streamer.dll Si usa Linux agregue: Code: plugins streamer.so - Copie este código dentro debajo de todos los includes (ejemplo de include: #include <a_samp>) de cada script que use el plugin streamer: Code: #include <streamer> * Nota: Este código está basado en la actualización del plugin Streamer, 2015 (v2.7.4). - Después de hacerlo edite el código del objeto que desea añadir. En vez de usar "CreateObject" use "CreateDynamicObject". Ejemplo: En vez de usar un código normal... Code: public OnGameModeInit() Use: Code: public OnGameModeInit() * Nota: Puede editar más rápido el código "CreateObject" usando un bloc de notas (.txt). Pegue el código dentro; y presione "CTRL + R", busque "CreateObject" y lo reemplaza por "CreateDynamicObject" (use esto si el mapa es muy grande). - Después de hacer esto abra el archivo PWN donde quiere añadir los objetos (usualmente dentro del gamemode) y pegue su código. Ejemplo: Code: public OnGameModeInit() Información adicional sobre Streamer. EMPIECE A PRACTICAR: Ahora que sabe esto, usted puede practicar editando otros script o puede intentar crear su propio script. ¡Una buena forma de empezar es editando otros gamemodes! Si hay algún error en esta guía o algo debería ser añadido, simplemente comente. * Nota: esta es una pequeña guía comparada con toda la información básica de SA-MP que un nuevo scripter debe conocer; este tema será actualizado de acuerdo a las sugerencias de los usuarios y sus comentarios. Créditos de esta guía: Ygzeb (David Talledo) Agradecimientos especiales a: Kwarde que ayudó a actualizar algunos enlaces que estaban rotos (2021) :) Complemento (2021) .- Es posible que algunos enlaces o imágenes simplemente no funcionen ahora o en el futuro; igualmente, es posible que sean reparados en el futuro o no. Sin embargo, espero que esta guía aún sea de ayuda. RE: Guía básica de SA-MP y Pawn - Botato - 2019-08-08 Buenaaaaaaaaa, será útil RE: Guía básica de SA-MP y Pawn - Tyshad - 2020-12-07 Gracias por traducirlo, me sirvió para ir empezando a aprender, lo único malo es que la mayoría de los links que hay en el post, son de la wiki samp, que lamentablemente ya no existe más :c RE: Guía básica de SA-MP y Pawn - Drazox - 2021-01-18 ¡Buen aporte :)! RE: Guía básica de SA-MP y Pawn - Rocko Schultz - 2021-03-18 (2020-12-07, 01:17 PM)Tyshad Wrote: Gracias por traducirlo, me sirvió para ir empezando a aprender, lo único malo es que la mayoría de los links que hay en el post, son de la wiki samp, que lamentablemente ya no existe más :c Lo bueno es que la wiki de Open.mp contiene todo o casi todo lo que tenia la antigua Wiki Samp, desde ahi pueden revisarlo todo https://open.mp/docs RE: Guía básica de SA-MP y Pawn - Gotsh - 2021-03-22 Buena guia hermano! Respuesta - Guía básica de SA-MP y Pawn - Ygzeb - 2021-11-05 (2019-08-08, 04:32 AM)Botato Wrote: Buenaaaaaaaaa, será útil (2021-01-18, 06:30 AM)Drazox Wrote: ¡Buen aporte :)! (2021-03-22, 12:37 AM)Gotsh Wrote: Buena guia hermano! Muchas gracias a todos por su apoyo, me alegra que les haya sido de ayuda ^^ (2020-12-07, 01:17 PM)Tyshad Wrote: Gracias por traducirlo, me sirvió para ir empezando a aprender, lo único malo es que la mayoría de los links que hay en el post, son de la wiki samp, que lamentablemente ya no existe más :c Muchas gracias amigo, me alegra que te haya servido; sobre los links desactualizados, los acabo de modificar a una nueva wiki que hicieron (https://sampwiki.blast.hk/wiki/) (2021-03-18, 10:17 PM)Rocko Schultz Wrote:(2020-12-07, 01:17 PM)Tyshad Wrote: Gracias por traducirlo, me sirvió para ir empezando a aprender, lo único malo es que la mayoría de los links que hay en el post, son de la wiki samp, que lamentablemente ya no existe más :c Gracias por el aporte amigo :) |