11.01.2015, 00:34
(
Последний раз редактировалось Ygzeb; 02.08.2016 в 04:45.
)
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 el estado de 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)CONFIGURACIУNscriptfiles
plugins
pawno
npcmodes
include
gamemodes
filterscripts
announce.exe
samp-npc.exe
samp-server.exe
server.cfg
PAWN SCRIPTING
PublicsCREANDO Y REMOVIENDO OBJETOSpublic OnGameModeInit()Funciones
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)SetPlayerPos(playerid, X, Y, Z);Dialogs (menъs & otros)
TextDrawCreate(X, Y, text[])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)
Map editor (1 & 2)EMPIECE A PRACTICAREmpezandoMTA editor
Creando objectos
Removiendo objectosEmpezandoCreando Objectos
Delux GTA Map Converter v2Instalar Streamer
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:
Код:
echo Executing Server Config... lanmode 0 rcon_password changeme maxplayers 50 port 7777 hostname SA-MP 0.3 Server gamemode0 grandlarc 1 filterscripts gl_actions gl_realtime gl_property gl_mapicon ls_mall ls_elevator attachments skinchanger vspawner announce 0 query 1 chatlogging 0 weburl www.sa-mp.com onfoot_rate 40 incar_rate 40 weapon_rate 40 stream_distance 300.0 stream_rate 1000 maxnpc 0 logtimeformat [%H:%M:%S]
Код:
echo Executing Server Config... lanmode 0 (lan mode activada "1" o desactivada "0") rcon_password changeme (la contraseсa que usarб al colocar "/Rcon login"; debe editar esto) maxplayers 50 (cantidad permitida de jugadores, slots) port 7777 (el puerto que usarб; por ejemplo: 127.0.0.1:7777) hostname SA-MP 0.3 Server (el nombre de su servidor) gamemode0 grandlarc 1 (el nombre del gamemode que usarб, puede aсadir un gamemode si usted crea o descarga uno) filterscripts gl_actions gl_realtime gl_property gl_mapicon ls_mall ls_elevator attachments skinchanger vspawner (los "filterscripts" que usarб) announce 0 (servidor visible en la lista de Internet; "1" para activar y "0" para desactivar) query 1 (informaciуn del servidor visible "1"; "0" no enviarб informaciуn del servidor a los jugadores externos) chatlogging 0 (guardar conversaciones en el archivo server_log.txt; para guardarlas use "1", para no guardarlas use "0") weburl www.sa-mp.com (pбgina web del servidor) onfoot_rate 40 (no se explicarб en esta guнa, es avanzado) incar_rate 40 (no se explicarб en esta guнa, es avanzado) weapon_rate 40 (no se explicarб en esta guнa, es avanzado) stream_distance 300.0 (no se explicarб en esta guнa, es avanzado) stream_rate 1000 (no se explicarб en esta guнa, es avanzado) maxnpc 0 (mбximo nъmero de NPCs que pueden entrar al servidor) logtimeformat [%H:%M:%S]
Ejemplo de configuraciуn (la guнa estб basada en esta configuraciуn):
Код:
echo Executing Server Config... lanmode 0 rcon_password Pawn maxplayers 100 port 7777 hostname SA-MP Server [0.3z] gamemode0 Basic 1 filterscripts gl_actions gl_realtime gl_property gl_mapicon ls_mall ls_elevator attachments skinchanger vspawner announce 1 query 1 chatlogging 1 weburl www.sa-mp.com onfoot_rate 40 incar_rate 40 weapon_rate 40 stream_distance 300.0 stream_rate 1000 maxnpc 0 logtimeformat [%H:%M:%S]
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:
pawn Код:
#include <a_samp>
Este es el mensaje que serб mostrado en consola al abrir el archivo samp-server.exe:
pawn Код:
main()
{
print("Script desarrollado por Ygzeb.");
}
Puede editar el texto que serб mostrado en consola al encender su servidor, simplemente cambiando el texto azul; por ejemplo:
pawn Код:
main()
{
print("ЎMi primer script!");
}
Ejemplo:
Llaves abiertas = Rojo
Llaves cerradas = Verde
Код:
main() { print("ЎMi primer script!"); }
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:
* 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:pawn Код:public OnPlayerSpawn(playerid)
{
SetPlayerHealth(playerid, 50);
return 1;
}
Algunos publics que son usados comъnmente:pawn Код:public OnPlayerSpawn(playerid)
{
SetPlayerHealth(playerid, 50);
SendClientMessage(playerid, -1, "ЎSpawneaste!"); // Funciуn aсadida.
return 1;
}
public OnGameModeInit() - Llamado al iniciar el gamemode.
Informaciуn adicional: https://sampwiki.blast.hk/wiki/OnGameModeInit
Estructura bбsica:
Ejemplo:pawn Код:public OnGameModeInit()
{
// Aquн va el cуdigo.
return 1;
}
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:pawn Код:public OnGameModeInit()
{
UsePlayerPedAnims(); // Permite a los jugadores correr como CJ.
SetGameModeText("Blank"); // Nombre del modo, serб mostrado en la lista de servidores.
AddPlayerClass(115, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
AddPlayerClass(122, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
AddPlayerClass(166, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
AddPlayerClass(270, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
El nъmero "270" el ID del personaje de Sweet.pawn Код:AddPlayerClass(270, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
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:
Ejemplo:pawn Код:public OnGameModeExit()
{
// Aquн va el cуdigo.
return 1;
}
public OnPlayerRequestClass(playerid, classid) - Llamado en la selecciуn de personaje.pawn Код:public OnGameModeExit()
{
print("Mode ended."); // Mensaje a la consola.
return 1;
}
Informaciуn adicional: https://sampwiki.blast.hk/wiki/OnPlayerRequestClass
Estructura bбsica:
Ejemplo:pawn Код:public OnPlayerRequestClass(playerid, classid)
{
// Aquн va el cуdigo.
return 1;
}
SetPlayerFacingAngle cambia el бngulo hacia donde el personaje observa; su estructura es:pawn Код:public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 2294.2810, 558.2053, 7.7813); // Posiciуn del personaje.
SetPlayerCameraPos(playerid, 2294.3071, 560.6948, 8.7324); // Posiciуn de la cбmara.
SetPlayerCameraLookAt(playerid, 2294.2810, 558.2053, 7.7813); // Lugar a donde la cбmara seсala.
SetPlayerFacingAngle(playerid, 0);
return 1;
}
Mayor informaciуn sobre SetPlayerFacingAngle.Код:playerid = ID del jugador 0 = бngulo (en este caso norte). norte (0) | (90) oeste- -este (270) | sur (180)
public OnPlayerConnect(playerid) - Llamado cuando un jugador se conecta.
Informaciуn adicional: https://sampwiki.blast.hk/wiki/OnPlayerConnect
Estructura bбsica:
Ejemplo:pawn Код:public OnPlayerConnect(playerid)
{
// Aquн va el cуdigo.
return 1;
}
PlayAudioStreamForPlayer es una funciуn que reproduce un sonido externo al jugador. Su estructura es:pawn Код:public OnPlayerConnect(playerid)
{
PlayAudioStreamForPlayer(playerid, "http://s1.radio.ge/Music/AcDc/1980_Back_In_Black/06_Back_In_Black.mp3"); // Iniciarб la canciуn Back in Black, AC/DC
return 1;
}
* Nota: el audio debe estar en un formato en especнfico para funcionar, por ejemplo este link.Код:playerid = ID del jugador "http://s1.radio.ge/Music/AcDc/1980_Back_In_Black/06_Back_In_Black.mp3" = link del audio
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:
Ejemplo:pawn Код:public OnPlayerSpawn(playerid)
{
// Aquн va el cуdigo.
return 1;
}
SendClientMessage es una funciуn que envнa un mensaje al jugador; su estructura es:pawn Код:public OnPlayerSpawn(playerid)
{
SendClientMessage(playerid, -1, "ЎSpawn!"); // Envнa un mensaje al jugador.
return 1;
}
Mayor informaciуn sobre SendClientMessage.Код:playerid = ID del jugador -1 = Color, -1 es blanco "ЎSpawn!" = mensaje
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:
Ejemplo:pawn Код:public OnPlayerDeath(playerid)
{
// Aquн va el cуdigo.
return 1;
}
GameTextForPlayer envнa un mensaje en pantalla al jugador; su estructura es:pawn Код:public OnPlayerDeath(playerid)
{
GameTextForPlayer(playerid, "Asesinado", 5000, 2); // Envнa un mensaje en pantalla al jugador.
return 1;
}
Mayor informaciуn sobre GameTextForPlayer.Код:playerid = ID del jugador "Asesinado" = mensaje 5000 = tiempo en mili-segundos; en este caso 5 segundos. 2 = tipo de mensaje
public OnPlayerDisconnect(playerid, reason) - Llamado al desconectarse el jugador.
Informaciуn adicional: https://sampwiki.blast.hk/wiki/OnPlayerDisconnect
Estructura bбsica:
Ejemplo:pawn Код:public OnPlayerDisconnect(playerid, reason)
{
// Aquн va el cуdigo.
return 1;
}
public OnPlayerText(playerid) - Llamado cuando el jugador envнa un mensaje (chat).pawn Код:public OnPlayerDisconnect(playerid, reason)
{
// Enviando un mensaje a todos que el jugador se desconectу.
new String[64], // Variable asignada al mensaje. 64 es el nъmero de caracteres que usarб el mensaje (tal vez mбs que el mensaje).
Nombre[MAX_PLAYER_NAME]; // Variable asignada al nombre del jugador; normalmente definida como MAX_PLAYER_NAME.
GetPlayerName(playerid, Nombre, MAX_PLAYER_NAME); // Obteniendo el nombre del jugador (Nombre) y el nъmero de caracteres que usa, normalmente definido como MAX_PLAYER_NAME (definido por SA-MP por defecto).
format(String, sizeof String, "%s saliу.", Nombre); // Aplicando un formato al mensaje.
SendClientMessageToAll(-1, String); // Enviando un mensaje a todos los jugadores; String es el formato que tendrб el mensaje.
return 1;
}
Informaciуn adicional: https://sampwiki.blast.hk/wiki/OnPlayerText
Estructura bбsica:
Ejemplo:pawn Код:public OnPlayerText(playerid, text[])
{
// Aquн va el cуdigo.
return 1;
}
Esta funciуn es el formato aplicado a SendClientMessageToAll. Cuando sea enviado seguirб el formato:pawn Код:public OnPlayerText(playerid, text[])
{
new Nombre[MAX_PLAYER_NAME], String[175];
GetPlayerName(playerid, Nombre, sizeof(Nombre));
format(String, sizeof(String), "%s [%d]: {FFFFFF}%s", Nombre, playerid, text); // Aplicando formato.
SendClientMessageToAll(GetPlayerColor(playerid), String); // Enviando el mensaje con GetPlayerColor, que es el color actual del jugador.
return 0; // Ignorando el texto por defecto, terminando la funciуn.
}
pawn Код:format(String, sizeof(String), "%s [%d]: {FFFFFF}%s", Name, playerid, text);Код:%s y %d son valores asignados dependiendo del jugador. %s es un valor textual (en este caso el nombre del jugador y el texto). %d es un valor numйrico (ID del jugador).Nombre, ID & texto son los valores asignados a %s, %d y %s.pawn Код:format(String, sizeof(String), "%s [%d]: {FFFFFF}%s", Name, playerid, text);
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:
Ejemplo:pawn Код:public OnPlayerUpdate(playerid)
{
// Aquн va el cуdigo.
return 1; // Si retorna 0, el cliente no serб actualizado para los demбs jugadores (como si estuviese pausado).
}
"if" para detectar si una situaciуn en especial estб ocurriendo; en caso de ser asн el servidor ejecutarб una funciуn determinada.pawn Код:public OnPlayerUpdate(playerid)
{
if(GetPlayerWeapon(playerid) == 38) return Kick(playerid); // Expulsarб al jugador si usa una minigun.
return 1;
}
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:
pawn Код:public OnPlayerUpdate(playerid)
{
if(GetPlayerWeapon(playerid) == 38) return Kick(playerid);
SendClientMessage(playerid, -1, "ЎActualizado!"); // Esta funciуn no serб ejecutada si el jugador estб usando minigun.
return 1;
}
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:
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:pawn Код:SetPlayerPos(playerid, 0.0, 0.0, 3.0); // Cambia la posiciуn del jugador al campo.
Luego simplemente copie los valores en rojo:pawn Код:AddPlayerClass(270, 700, 700, 5, 0, 0, 0, 0, 0, 0, 0);
* Nota: obviamente los valores no son rojos, solo es un ejemplo.Код:AddPlayerClass(270, 700, 700, 5, 0, 0, 0, 0, 0, 0, 0);
Luego pegue los valores dentro de la funciуn SetPlayerPos; asн:
Tambiйn puede usar este sistema que lo programarб por usted.Код:SetPlayerPos(playerid, 700, 700, 5);
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:
Una forma sencilla de usar esta funciуn es con un Editor de Textdraw.pawn Код:new Text:Textdraw0;
public OnGameModeInit()
{
Textdraw0 = TextDrawCreate(240.0, 580.0, "SA-MP 0.3z"); // Esto crea un textdraw sin modificar.
return 1;
}
Para mostrar un textdraw al jugador debe usar la funciуn TextDrawShowForPlayer.
Ejemplo de uso (basado en el ejemplo anterior):
Para esconder el textdraw del jugador debe usar la funciуn TextDrawHideForPlayer.pawn Код:public OnPlayerConnect(playerid)
{
TextDrawShowForPlayer(playerid, Textdraw0);
}
Ejemplo:
Y para destruir el textdraw debe usar TextDrawDestroy.pawn Код:public OnPlayerDisconnect(playerid, reason)
{
TextDrawHideForPlayer(playerid, Textdraw0);
return 1;
}
Ejemplo:
pawn Код:public OnGameModeInit()
{
TextDrawDestroy(Textdraw0);
return 1;
}
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):
Cada lнnea tiene caracteres; la primera lнnea tiene 73 caracteres asн que ponemos 73 al final.pawn Код:if(!strcmp(cmdtext, "/Ayuda", true))
{
new Menu[187]; // Nъmero de caracteres que usarб dentro del dialog (todos los caracteres).
Menu[0]='\0'; // Variable del dialog, definida antes.
strcat(Menu, "Este es el texto que serб mostrado dentro del dialog. Puede aсadir otra\n", 73); // 73 es el nъmero de caracteres en esta lнnea.
strcat(Menu, "lнnea usando el sнmbolo de la lнnea anterior (n). No necesita\n", 137); // 137 es el nъmero de caracteres en otras lнneas sumado a esta lнnea.
strcat(Menu, "colocar el sнmbolo en la ъltima lнnea del dialog.", 187); // Estos son todos los caracteres usados en el dialog.
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", "Cancelar");
return 1;
}
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):
La funciуn strcat junta el string de Menu, sumado con el string del texto.pawn Код:if(!strcmp(cmdtext, "/Ayuda", true))
{
new Menu[187]; // Nъmero de caracteres que usarб dentro del dialog (todos los caracteres).
Menu[0]='\0'; // Variable del dialog, definida antes.
strcat(Menu, "Este es el texto que serб mostrado dentro del dialog. Puede aсadir otra\n", 73); // strcat junta el string de Menu, sumado con el string del texto.
strcat(Menu, "lнnea usando el sнmbolo de la lнnea anterior (n). No necesita\n", 137); // Todas las lнneas usan strcat.
strcat(Menu, "colocar el sнmbolo en la ъltima lнnea del dialog.", 187);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", ""); // En lugar de cancelar, dejamos el segundo botуn solo con "".
return 1;
}
* Nota: Puede usar pбginas para contar caracteres.
Cuando cuenta los caracteres solo debe tomar en cuenta los que estбn entre ""; por ejemplo:
La \n tambiйn cuenta.Код:if(!strcmp(cmdtext, "/Ayuda", true)) { new Menu[187]; Menu[0]='\0'; strcat(Menu, "Este es el texto que serб mostrado dentro del dialog. Puede aсadir otra\n", 73); strcat(Menu, "lнnea usando el sнmbolo de la lнnea anterior (n). No necesita\n", 137); strcat(Menu, "colocar el sнmbolo en la ъltima lнnea del dialog.", 187); ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", ""); return 1; }
Tambiйn podemos aсadir una funciуn al presionar "Aceptar" o "Cancelar" dentro del public OnDialogResponse.
Por ejemplo:
Aсadimos un mensaje (la funciуn) dentro del public OnDialogResponse:pawn Код:if(!strcmp(cmdtext, "/Ayuda", true))
{
new Menu[187];
Menu[0]='\0';
strcat(Menu, "Este es el texto que serб mostrado dentro del dialog. Puede aсadir otra\n", 73);
strcat(Menu, "lнnea usando el sнmbolo de la lнnea anterior (n). No necesita\n", 137);
strcat(Menu, "colocar el sнmbolo en la ъltima lнnea del dialog.", 187);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", "");
return 1;
}
* Nota: Al usar OnDialogResponse cada dialog debe tener un nъmero. En este caso usamos el nъmero 1:pawn Код:public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1) // El nъmero 1 es el nъmero de nuestro dialog anterior.
{
if(response) // Si presionaron 'Aceptar'.
{
SendClientMessage(playerid, -1, "ЎGracias por leer!");
}
return 1; // Cerrando dialog response del dialog # 1!
}
return 1; // Cerrando public.
}
Dialog de texto (permite a los jugadores colocar texto en el dialog)Код:ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ayuda de dialog", Menu, "Aceptar", ""); return 1; }
Ejemplo:
Despuйs de crear nuestro cуdigo debemos crear una funciуn al cуdigo; para ello usaremos public OnDialogResponse:pawn Код:ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Texto", "ЎEscriba un texto a todos los jugadores", "Aceptar", "Cancelar");
Ejemplo:
Dialog de lista (menъ, muestra a los jugadores una lista de opciones):pawn Код:public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 2)
{
if(!response) // Si presionaron 'Cancelar'.
{
SendClientMessage(playerid, -1, "ЎMensaje cancelado!");
}
else // Si presionaron 'Aceptar'.
{
new String[200], Nombre[MAX_PLAYER_NAME]; // Definiendo variables.
GetPlayerName(playerid, Nombre, MAX_PLAYER_NAME); // Obteniendo el nombre del jugador (asignando un valor a la variable).
format(String, sizeof(String), "[<!>] Anuncio de %s: %s", Nombre, inputtext); // Usando un formato para el mensaje.
SendClientMessageToAll(-1, String);
}
return 1; // Cerrando respuesta del dialog # 2!
}
return 1; // Cerrando public.
}
Ejemplo (creando un menъ de armas):
pawn Код:if(!strcmp(cmdtext, "/Weapon", true))
{
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Armas", "Desert Eagle\n AK-47\n Combat Shotgun", "Seleccionar", "Cerrar");
return 1;
}El sнmbolo \n es usado para separar los elementos de la lista (en filas).Код:"Armas" = Tнtulo de la lista "Desert Eagle\n AK-47\n Combat Shotgun" = Lista. "Seleccionar" = Seleccionar un нtem (arma). "Cerrar" = Cerrar lista.
Para dar el arma usamos public OnDialogResponse:
Estructura de la funciуn GivePlayerWeapon:pawn Код:public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 3)
{
if(response) // Si presionaron 'Seleccionar' o dieron doble clic a un arma.
{
switch(listitem) // Creamos swith a todos los elementos de la lista; cada caso representa un elemento.
{
case 0:
{
GivePlayerWeapon(playerid, 24, 14); // Dar un arma Desert Eagle con 14 balas.
}
case 1:
{
GivePlayerWeapon(playerid, 30, 120); // Dar un arma AK-47 con 120 balas.
}
case 2:
{
GivePlayerWeapon(playerid, 27, 28); // Dar un arma Combat Shotgun con 28 balas.
}
}
}
return 1; // Cerrando dialog response del dialog # 3!
}
return 1; // Cerrando public.
}
Informaciуn adicional sobre la funciуn: https://sampwiki.blast.hk/wiki/GivePlayerWeaponpawn Код:GivePlayerWeapon(playerid, weaponid, ammo);
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:
Informaciуn adicional: https://sampwiki.blast.hk/wiki/CreateObjectpawn Код:public OnGameModeInit()
{
CreateObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0); // El objeto cargarб a su distancia por defecto (GTA-SA).
return 1;
}
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:
Informaciуn adicional: https://sampwiki.blast.hk/wiki/RemoveBuildingForPlayerpawn Код:public OnPlayerConnect(playerid)
{
RemoveBuildingForPlayer(playerid, 3782, 1803.0859, -1294.2031, 34.3438, 0.25);
return 1;
}
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:
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.pawn Код:public OnGameModeInit()
{
CreateObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0); // El objeto cargarб a su distancia original.
CreateObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0, 250.0); //El objeto serб visible a 250 unidades.
return 1;
}
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:
Si usa Linux agregue:Код:plugins streamer.dll
- Copie este cуdigo dentro debajo de todos los includes (ejemplo de include: #include <a_samp>) de cada script que use el plugin streamer:Код:plugins streamer.so
* Nota: Este cуdigo estб basado en la actualizaciуn del plugin Streamer, 2015 (v2.7.4).pawn Код:#include <streamer>
#define STREAMER_TYPE_OBJECT (0)
#define STREAMER_TYPE_PICKUP (1)
#define STREAMER_TYPE_CP (2)
#define STREAMER_TYPE_RACE_CP (3)
#define STREAMER_TYPE_MAP_ICON (4)
#define STREAMER_TYPE_3D_TEXT_LABEL (5)
#define STREAMER_TYPE_AREA (6)
#define STREAMER_AREA_TYPE_CIRCLE (0)
#define STREAMER_AREA_TYPE_CYLINDER (1)
#define STREAMER_AREA_TYPE_SPHERE (2)
#define STREAMER_AREA_TYPE_RECTANGLE (3)
#define STREAMER_AREA_TYPE_CUBOID (4)
#define STREAMER_AREA_TYPE_POLYGON (5)
#define STREAMER_OBJECT_TYPE_GLOBAL (0)
#define STREAMER_OBJECT_TYPE_PLAYER (1)
#define STREAMER_OBJECT_TYPE_DYNAMIC (2)
enum
{
E_STREAMER_ATTACHED_OBJECT,
E_STREAMER_ATTACHED_PLAYER,
E_STREAMER_ATTACHED_VEHICLE,
E_STREAMER_ATTACH_OFFSET_X,
E_STREAMER_ATTACH_OFFSET_Y,
E_STREAMER_ATTACH_OFFSET_Z,
E_STREAMER_ATTACH_R_X,
E_STREAMER_ATTACH_R_Y,
E_STREAMER_ATTACH_R_Z,
E_STREAMER_ATTACH_X,
E_STREAMER_ATTACH_Y,
E_STREAMER_ATTACH_Z,
E_STREAMER_COLOR,
E_STREAMER_DRAW_DISTANCE,
E_STREAMER_EXTRA_ID,
E_STREAMER_INTERIOR_ID,
E_STREAMER_MAX_X,
E_STREAMER_MAX_Y,
E_STREAMER_MAX_Z,
E_STREAMER_MIN_X,
E_STREAMER_MIN_Y,
E_STREAMER_MIN_Z,
E_STREAMER_MODEL_ID,
E_STREAMER_MOVE_R_X,
E_STREAMER_MOVE_R_Y,
E_STREAMER_MOVE_R_Z,
E_STREAMER_MOVE_SPEED,
E_STREAMER_MOVE_X,
E_STREAMER_MOVE_Y,
E_STREAMER_MOVE_Z,
E_STREAMER_NEXT_X,
E_STREAMER_NEXT_Y,
E_STREAMER_NEXT_Z,
E_STREAMER_PLAYER_ID,
E_STREAMER_R_X,
E_STREAMER_R_Y,
E_STREAMER_R_Z,
E_STREAMER_SIZE,
E_STREAMER_STREAM_DISTANCE,
E_STREAMER_STYLE,
E_STREAMER_TEST_LOS,
E_STREAMER_TYPE,
E_STREAMER_WORLD_ID,
E_STREAMER_X,
E_STREAMER_Y,
E_STREAMER_Z
}
- 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...
Use:pawn Код:public OnGameModeInit()
{
CreateObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0);
return 1;
}
* 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).pawn Код:public OnGameModeInit()
{
CreateDynamicObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0);
return 1;
}
- 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:
Informaciуn adicional sobre Streamer.pawn Код:public OnGameModeInit()
{
CreateDynamicObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0);
return 1;
}
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.