[APORTE]Comandos de rol /b - /me - /do [IZCMD] [UP]

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
Omaretot
Aprendiz
Aprendiz
Mensajes: 95
Registrado: 07 Dic 2015 18:46
Reputación: 7

08 Dic 2016 08:47

Omaretot Pawno

Este es un mini aporte para aquellos que no sepan mucho de pawno, esta mini guia para hacer los comandos básicos de rol.

Version vieja - Inestable
Spoiler:
Primero que nada tenemos que descargar el incluide zcmd
http://www.solidfiles.com/d/d20f/
Creditos a: Zeex

Una vez ya descargado el incluide zcmd debemos pegarlo en [Carpeta contenedora de tu servidor -> pawno -> incluides]
  • En lo más alto de la GM, ponemos el incluide de zcmd (Omitir este paso si ya lo tienes instalado en tu GM)
 Codigo Pawno:
1

#include zcmd
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Pasamos a definir los colores que vamos a utilizar
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC         0xAFAFAFAA
#define     COLOR_PINKLIGHT        0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Ahora proseguimos a poner el siguiente stock debajo de los defines
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z; 
    GetPlayerPos(sourceid, x, y, z); 
    for (new ii = 0; ii < MAX_PLAYERS; ii++) { 
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Una vez realizado esto proseguimos con los comandos:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:me(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "%s %s", name, params);
    SendRangedMessage(playerid, COLOR_PURPLE, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Explicación:
En GetPlayerName estamos agarrando el nombre del sujeto
en "format" ponemos lo que vayamos a poner, el string, los operadores %s que uno, es el nombre del sujeto, y el otro son los parametros que ha puesto.
Mas abajo en SendRangedMessage, está enviando el mensaje a un radio de 50m con el color morado, y el mismo procedimientos con los otros comandos.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:do(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[IC] - %s ((%s))", params, name);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:b(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[OOC] %s: %s", name, params);
    SendRangedMessage(playerid, COLOR_OOC, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Es mi primer aporte en pawno, así que si hay un error o falta de optimización hazmelo hacer.

Gracias por leer.

PROXIMAMENTE /ame
Bienvenidos a la guía, esta en una actualización de mi vieja guía des actualizada en la cual ensenaba a realizar los comandos básicos de rol, ahora vengo a actualizarla y hacer aportar 2 comandos nuevos a la guía (/ame y /ado)

Descargaremos la ultima version de IZCMD
https://github.com/YashasSamaga/I-ZCMD
Creditos:YashasSamaga

La instalaremos dentro de nuestra carpeta contenedora de nuestro servidor [carpeta/pawno/include] y en la gamemode pondremos debajo de los include.
 Codigo Pawno:
1

#include <izcmd>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora descargaremos sscanf2
https://github.com/maddinat0r/sscanf/releases
Creditos: Maddinat0r

Lo instalaremos dentro de nuestra carpeta contenedora de nuestro servidor [carpeta/plugins] y [carpeta/pawno/include]

Abriremos nuestro archivo server.cfg y colocaremos en plugins el respectivo nombre (sscanf) y guardaremos.

Luego instalaremos en nuestra gamemode debajo de los include
 Codigo Pawno:
1

#include <sscanf2>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Bien, primero que nada procederemos a crear UNA SOLA variable en el top de la GameMode en vez de crear una en cada comando, la variable normalmente se llamaria string pero como los include ya tienen en en uso ese nombre utilizaremos el nombre de szString
 Codigo Pawno:
1

new szString[128]; // Asignamos 128 que son los maximos caracteres permitidos en el chat de SA-MP
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Luego procederemos a definir los colores que utilizaremos, en este caso utilizaremos los mismos comandos de la version vieja.
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC            0xAFAFAFAA
#define     COLOR_PINKLIGHT      0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Comando:
 Codigo Pawno:
1
2
3
4
5
6
7

CMD:b(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); // Verificamos si lo que escribio es una string o no, o sea si escribio algo
    format(szString, sizeof(szString), "[OOC] %s: %s", GetName(playerid), szString); // El formato que utilizara y su orden.
    SendRangedMessage(playerid, COLOR_OOC, szString, 50); // Enviara el mensaje en un radio de 50 metros en un color gris
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Procederemos a realizar lo mismo con los demas comandos, solo que cambio unas cosas en el texto para diferenciarlos y colocando diferentes colores.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

CMD:do(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /do [TEXTO]");
    format(szString, sizeof(szString), "[IC] %s (( %s ))", GetName(playerid), szString);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, szString, 50);
    return 1;
}

CMD:me(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]");
    format(szString, sizeof(szString), "* %s %s", GetName(playerid), szString);
    SendRangedMessage(playerid, COLOR_PURPLE, szString, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 15
Ahora en los nuevos comandos que implemento en esta version /ame y /ado tienen un procedimiento algo diferente.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:ame(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /ame [TEXTO]"); // Verifica si escribio algo o no
	format(szString, sizeof(szString), ">> %s %s", GetName(playerid), szString); // El formato que utilizara y su orden
	SetPlayerChatBubble(playerid, szString, COLOR_PURPLE, 50.0, 10000); // Se colocara el texto encima de su cabeza y sera visible solo a 50 metros
	SendClientMessage(playerid, COLOR_PURPLE, szString); // Le enviamos el texto al jugador que mando el mensaje ya que a el no le saldra en su cabeza el texto.
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Realizamos lo mismo para el /ado.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:ado(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /ado [TEXTO]");
	format(szString, sizeof(szString), ">> %s (( %s ))", GetName(playerid), szString);
	SetPlayerChatBubble(playerid, szString, COLOR_PINKLIGHT, 50.0, 10000);
	SendClientMessage(playerid, COLOR_PINKLIGHT, szString);
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Y ahora colocaremos las funciones que haran que nuestros comandos funciones correctamente, primero colocaremos la funcion de enviar de mensaje a cierta distancia
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z;
    GetPlayerPos(sourceid, x, y, z);
    for (new ii = 0; ii < MAX_PLAYERS; ii++) {
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Y la funcion que recoge el nombre del jugador.
 Codigo Pawno:
1
2
3
4
5
6

stock GetName(playerid)
{
    new szName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, szName, sizeof(szName));
    return szName;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Lo intente explicar lo mas detallado posible y de la forma mas sencilla y optimizada posible, para evitar estar creando variables innecesarias o entre otras cosas, espero que lo valoren. UP
Última edición por Omaretot el 18 Abr 2018 21:11, editado 2 veces en total.
KeiberJS
Aprendiz
Aprendiz
Mensajes: 120
Registrado: 18 Feb 2016 21:39
Ubicación: Venezuela Estado Apure
Reputación: 3

08 Dic 2016 09:11

Ohhh Gracias.. Buen Aporte.
APORTES (VER):
Progresos:
┌──────────────────────────────────┐
⊙▂⊙ KeiberJS ⊙▂⊙
└──────────────────────────────────┘

Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

08 Dic 2016 11:01

Omaretot escribió:Omaretot Pawno

Este es un mini aporte para aquellos que no sepan mucho de pawno, esta mini guia para hacer los comandos básicos de rol.

Primero que nada tenemos que descargar el incluide zcmd
http://www.solidfiles.com/d/d20f/
Creditos a: Zeex

Una vez ya descargado el incluide zcmd debemos pegarlo en [Carpeta contenedora de tu servidor -> pawno -> incluides]
  • En lo más alto de la GM, ponemos el incluide de zcmd (Omitir este paso si ya lo tienes instalado en tu GM)
 Codigo Pawno:
1

#include zcmd
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Pasamos a definir los colores que vamos a utilizar
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC             0xAFAFAFAA
#define     COLOR_PINKLIGHT        0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Ahora proseguimos a poner el siguiente stock debajo de los defines
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z; 
    GetPlayerPos(sourceid, x, y, z); 
    for (new ii = 0; ii < MAX_PLAYERS; ii++) { 
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Una vez realizado esto proseguimos con los comandos:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:me(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "%s %s", name, params);
    SendRangedMessage(playerid, COLOR_PURPLE, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Explicación:
En GetPlayerName estamos agarrando el nombre del sujeto
en "format" ponemos lo que vayamos a poner, el string, los operadores %s que uno, es el nombre del sujeto, y el otro son los parametros que ha puesto.
Mas abajo en SendRangedMessage, está enviando el mensaje a un radio de 50m con el color morado, y el mismo procedimientos con los otros comandos.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:do(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[IC] - %s ((%s))", params, name);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:b(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[OOC] %s: %s", name, params);
    SendRangedMessage(playerid, COLOR_OOC, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Es mi primer aporte en pawno, así que si hay un error o falta de optimización hazmelo hacer.

Gracias por leer.

PROXIMAMENTE /ame

A nivel personal, yo hubiera hecho lo mismo pero con otro procesador de comandos. La mayoría de personas que usan zcmd ya lo tienen a los comandos. O al menos le hubiera agregado doble linea, para que sea un poco menos común...

Buen aporte de todas formas.
GOM3Z
Aprendiz
Aprendiz
Mensajes: 159
Registrado: 19 Dic 2016 14:40
Reputación: 0

20 Dic 2016 04:34

Lo puse como dijistes y mira los fallos
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(28) : error 010: invalid function or declaration
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(30) : error 021: symbol already defined: "GetPlayerPos"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(31) : error 010: invalid function or declaration
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(32) : error 010: invalid function or declaration
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(33) : error 010: invalid function or declaration
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(525) : error 017: undefined symbol "SendRangedMessage"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(533) : error 017: undefined symbol "SendRangedMessage"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(541) : error 017: undefined symbol "SendRangedMessage"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(558) : warning 203: symbol is never used: "x"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(558) : warning 203: symbol is never used: "y"
F:\New Gothan Servidor\Nueva carpeta\gamemodes\NGrol.pwn(558) : warning 203: symbol is never used: "z"
Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase


8 Errors.
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 15
GOM3Z

[/u][/b]
--------| Aportes |--------

Gamemodes
Marcoss_Lannister
Aprendiz
Aprendiz
Mensajes: 44
Registrado: 30 Ago 2015 03:57
Reputación: 2

21 Nov 2017 16:08

Omaretot escribió:
08 Dic 2016 08:47
Omaretot Pawno

Este es un mini aporte para aquellos que no sepan mucho de pawno, esta mini guia para hacer los comandos básicos de rol.

Primero que nada tenemos que descargar el incluide zcmd
http://www.solidfiles.com/d/d20f/
Creditos a: Zeex

Una vez ya descargado el incluide zcmd debemos pegarlo en [Carpeta contenedora de tu servidor -> pawno -> incluides]
  • En lo más alto de la GM, ponemos el incluide de zcmd (Omitir este paso si ya lo tienes instalado en tu GM)
 Codigo Pawno:
1

#include zcmd
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Pasamos a definir los colores que vamos a utilizar
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC             0xAFAFAFAA
#define     COLOR_PINKLIGHT        0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Ahora proseguimos a poner el siguiente stock debajo de los defines
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z; 
    GetPlayerPos(sourceid, x, y, z); 
    for (new ii = 0; ii < MAX_PLAYERS; ii++) { 
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Una vez realizado esto proseguimos con los comandos:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:me(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "%s %s", name, params);
    SendRangedMessage(playerid, COLOR_PURPLE, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Explicación:
En GetPlayerName estamos agarrando el nombre del sujeto
en "format" ponemos lo que vayamos a poner, el string, los operadores %s que uno, es el nombre del sujeto, y el otro son los parametros que ha puesto.
Mas abajo en SendRangedMessage, está enviando el mensaje a un radio de 50m con el color morado, y el mismo procedimientos con los otros comandos.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:do(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[IC] - %s ((%s))", params, name);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:b(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[OOC] %s: %s", name, params);
    SendRangedMessage(playerid, COLOR_OOC, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Es mi primer aporte en pawno, así que si hay un error o falta de optimización hazmelo hacer.

Gracias por leer.

PROXIMAMENTE /ame
A mi me da este error..... ojala pududieras tener una solucion

C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_utils.inc(334) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_utils.inc(488) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_utils.inc(520) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_utils.inc(538) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\internal\y_dohooks.inc(213) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_inline.inc(249) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_inline.inc(508) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(834) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(954) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1027) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1048) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1067) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1089) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1121) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1157) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1185) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase - copia\pawno\include\YSI\y_ini.inc(1341) : warning 219: local variable "name" shadows a variable at a preceding level
../include/gl_common.inc(79) : warning 219: local variable "string" shadows a variable at a preceding level
../include/gl_common.inc(100) : warning 219: local variable "string" shadows a variable at a preceding level
../include/gl_common.inc(123) : warning 219: local variable "string" shadows a variable at a preceding level
../include/gl_common.inc(138) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(34) : error 020: invalid symbol name ""
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(37) : error 021: symbol already defined: "GetPlayerName"
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(39) : error 021: symbol already defined: "SendRangedMessage"
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(40) : error 010: invalid function or declaration
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(99) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(152) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(170) : warning 219: local variable "name" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(194) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(200) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(358) : warning 203: symbol is never used: "b"
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(358) : warning 203: symbol is never used: "me"
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(358) : warning 203: symbol is never used: "name"
C:\Users\Administrador\Desktop\Gamebase\gamemodes\GeimodeBase.pwn(358) : warning 203: symbol is never used: "string"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
Sem Players Juego de Rol


Proximamente...



APORTES: MarcosCDK#3519 Discord
fredbear281
Aprendiz
Aprendiz
Mensajes: 4
Registrado: 23 Ene 2018 08:24
Reputación: 0

08 Mar 2018 23:16

gracias vato +1 apenas empiezo en el pawn y gracias men
Omaretot
Aprendiz
Aprendiz
Mensajes: 95
Registrado: 07 Dic 2015 18:46
Reputación: 7

18 Abr 2018 21:13

UP

Guia actualizada, agregando comandos nuevos como /ame y /ado y se optimizo de manera completa los comandos, asi tambien mejorando la explicación de cada linea de los comandos.
`Sailendorck
Baneado
Baneado
Mensajes: 3
Registrado: 18 Abr 2018 19:29
Reputación: 4

19 Abr 2018 10:10

Omaretot escribió:
08 Dic 2016 08:47
Omaretot Pawno

Este es un mini aporte para aquellos que no sepan mucho de pawno, esta mini guia para hacer los comandos básicos de rol.

Version vieja - Inestable
Spoiler:
Primero que nada tenemos que descargar el incluide zcmd
http://www.solidfiles.com/d/d20f/
Creditos a: Zeex

Una vez ya descargado el incluide zcmd debemos pegarlo en [Carpeta contenedora de tu servidor -> pawno -> incluides]
  • En lo más alto de la GM, ponemos el incluide de zcmd (Omitir este paso si ya lo tienes instalado en tu GM)
 Codigo Pawno:
1

#include zcmd
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Pasamos a definir los colores que vamos a utilizar
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC         0xAFAFAFAA
#define     COLOR_PINKLIGHT        0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Ahora proseguimos a poner el siguiente stock debajo de los defines
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z; 
    GetPlayerPos(sourceid, x, y, z); 
    for (new ii = 0; ii < MAX_PLAYERS; ii++) { 
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Una vez realizado esto proseguimos con los comandos:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:me(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "%s %s", name, params);
    SendRangedMessage(playerid, COLOR_PURPLE, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Explicación:
En GetPlayerName estamos agarrando el nombre del sujeto
en "format" ponemos lo que vayamos a poner, el string, los operadores %s que uno, es el nombre del sujeto, y el otro son los parametros que ha puesto.
Mas abajo en SendRangedMessage, está enviando el mensaje a un radio de 50m con el color morado, y el mismo procedimientos con los otros comandos.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:do(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[IC] - %s ((%s))", params, name);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:b(playerid, params[])
{
    new string[64], name[24];
    GetPlayerName(playerid, name, 24);
    format(string, 64, "[OOC] %s: %s", name, params);
    SendRangedMessage(playerid, COLOR_OOC, string, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Es mi primer aporte en pawno, así que si hay un error o falta de optimización hazmelo hacer.

Gracias por leer.

PROXIMAMENTE /ame
Bienvenidos a la guía, esta en una actualización de mi vieja guía des actualizada en la cual ensenaba a realizar los comandos básicos de rol, ahora vengo a actualizarla y hacer aportar 2 comandos nuevos a la guía (/ame y /ado)

Descargaremos la ultima version de IZCMD
https://github.com/YashasSamaga/I-ZCMD
Creditos:YashasSamaga

La instalaremos dentro de nuestra carpeta contenedora de nuestro servidor [carpeta/pawno/include] y en la gamemode pondremos debajo de los include.
 Codigo Pawno:
1

#include <izcmd>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora descargaremos sscanf2
https://github.com/maddinat0r/sscanf/releases
Creditos: Maddinat0r

Lo instalaremos dentro de nuestra carpeta contenedora de nuestro servidor [carpeta/plugins] y [carpeta/pawno/include]

Abriremos nuestro archivo server.cfg y colocaremos en plugins el respectivo nombre (sscanf) y guardaremos.

Luego instalaremos en nuestra gamemode debajo de los include
 Codigo Pawno:
1

#include <sscanf2>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Bien, primero que nada procederemos a crear UNA SOLA variable en el top de la GameMode en vez de crear una en cada comando, la variable normalmente se llamaria string pero como los include ya tienen en en uso ese nombre utilizaremos el nombre de szString
 Codigo Pawno:
1

new szString[128]; // Asignamos 128 que son los maximos caracteres permitidos en el chat de SA-MP
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Luego procederemos a definir los colores que utilizaremos, en este caso utilizaremos los mismos comandos de la version vieja.
 Codigo Pawno:
1
2
3

#define     COLOR_PURPLE         0xC2A2DAAA
#define     COLOR_OOC            0xAFAFAFAA
#define     COLOR_PINKLIGHT      0xFF9B6AFF
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Comando:
 Codigo Pawno:
1
2
3
4
5
6
7

CMD:b(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); // Verificamos si lo que escribio es una string o no, o sea si escribio algo
    format(szString, sizeof(szString), "[OOC] %s: %s", GetName(playerid), szString); // El formato que utilizara y su orden.
    SendRangedMessage(playerid, COLOR_OOC, szString, 50); // Enviara el mensaje en un radio de 50 metros en un color gris
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Procederemos a realizar lo mismo con los demas comandos, solo que cambio unas cosas en el texto para diferenciarlos y colocando diferentes colores.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

CMD:do(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /do [TEXTO]");
    format(szString, sizeof(szString), "[IC] %s (( %s ))", GetName(playerid), szString);
    SendRangedMessage(playerid, COLOR_PINKLIGHT, szString, 50);
    return 1;
}

CMD:me(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]");
    format(szString, sizeof(szString), "* %s %s", GetName(playerid), szString);
    SendRangedMessage(playerid, COLOR_PURPLE, szString, 50);
    return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 15
Ahora en los nuevos comandos que implemento en esta version /ame y /ado tienen un procedimiento algo diferente.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:ame(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /ame [TEXTO]"); // Verifica si escribio algo o no
	format(szString, sizeof(szString), ">> %s %s", GetName(playerid), szString); // El formato que utilizara y su orden
	SetPlayerChatBubble(playerid, szString, COLOR_PURPLE, 50.0, 10000); // Se colocara el texto encima de su cabeza y sera visible solo a 50 metros
	SendClientMessage(playerid, COLOR_PURPLE, szString); // Le enviamos el texto al jugador que mando el mensaje ya que a el no le saldra en su cabeza el texto.
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Realizamos lo mismo para el /ado.
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:ado(playerid, params[])
{
	if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /ado [TEXTO]");
	format(szString, sizeof(szString), ">> %s (( %s ))", GetName(playerid), szString);
	SetPlayerChatBubble(playerid, szString, COLOR_PINKLIGHT, 50.0, 10000);
	SendClientMessage(playerid, COLOR_PINKLIGHT, szString);
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Y ahora colocaremos las funciones que haran que nuestros comandos funciones correctamente, primero colocaremos la funcion de enviar de mensaje a cierta distancia
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock SendRangedMessage(sourceid, color, message[], Float:range) {
    new Float:x, Float:y, Float: z;
    GetPlayerPos(sourceid, x, y, z);
    for (new ii = 0; ii < MAX_PLAYERS; ii++) {
            if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(ii)) {
                if(IsPlayerInRangeOfPoint(ii, range, x, y, z)) {
                    SendClientMessage(ii, color, message);
                }
            }
        }
    }
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 11
Y la funcion que recoge el nombre del jugador.
 Codigo Pawno:
1
2
3
4
5
6

stock GetName(playerid)
{
    new szName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, szName, sizeof(szName));
    return szName;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Lo intente explicar lo mas detallado posible y de la forma mas sencilla y optimizada posible, para evitar estar creando variables innecesarias o entre otras cosas, espero que lo valoren. UP
Buen aporte hermano.
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1049
Registrado: 05 Oct 2017 12:13
Reputación: 113

19 Abr 2018 12:34

Buen aporte.
Sólo que en vez de esto:
 Codigo Pawno:
1

for (new ii = 0; ii < MAX_PLAYERS; ii++)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Sería mejor así:
 Codigo Pawno:
1

for (new ii = 0, gg = GetPlayerPoolSize(); ii <= gg; ii++)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
O también de esta manera estaría más optimizado:
 Codigo Pawno:
1

foreach(new ii : Player) //Usando la librería y_foreach de Y_Less
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Así se evita efectuar iteraciones innecesarias.

También no es necesario llamar tantas veces la misma función dentro de un "loop".
 Codigo Pawno:
1
2
3
4
5
6

for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(i))
	{
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 6
La función "GetPlayerVirtualWorld(sourceid)" se estará invocando 1000 veces sí no se hizo una modificación a "MAX_PLAYERS".
Así sería más óptimo:
 Codigo Pawno:
1
2
3
4
5
6
7

new world = GetPlayerVirtualWorld(sourceid);
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(world == GetPlayerVirtualWorld(i))
	{
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 7
Última edición por MrDave el 19 Abr 2018 12:41, editado 1 vez en total.

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1049
Registrado: 05 Oct 2017 12:13
Reputación: 113

19 Abr 2018 12:36

Borren este comentario, se me fue dos veces (falla de conexión).

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Omaretot
Aprendiz
Aprendiz
Mensajes: 95
Registrado: 07 Dic 2015 18:46
Reputación: 7

19 Abr 2018 13:34

Spoiler:
MrDave escribió:
19 Abr 2018 12:34
Buen aporte.
Sólo que en vez de esto:
 Codigo Pawno:
1

for (new ii = 0; ii < MAX_PLAYERS; ii++)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Sería mejor así:
 Codigo Pawno:
1

for (new ii = 0, gg = GetPlayerPoolSize(); ii <= gg; ii++)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
O también de esta manera estaría más optimizado:
 Codigo Pawno:
1

foreach(new ii : Player) //Usando la librería y_foreach de Y_Less
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Así se evita efectuar iteraciones innecesarias.

También no es necesario llamar tantas veces la misma función dentro de un "loop".
 Codigo Pawno:
1
2
3
4
5
6

for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(GetPlayerVirtualWorld(sourceid) == GetPlayerVirtualWorld(i))
	{
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 6
La función "GetPlayerVirtualWorld(sourceid)" se estará invocando 1000 veces sí no se hizo una modificación a "MAX_PLAYERS".
Así sería más óptimo:
 Codigo Pawno:
1
2
3
4
5
6
7

new world = GetPlayerVirtualWorld(sourceid);
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(world == GetPlayerVirtualWorld(i))
	{
	}
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 7
Efectivamente amigo, pero como es una función ajena, que no realiza yo decidí no tocarla, se aprecia tu opinión
Qarper
Aprendiz
Aprendiz
Mensajes: 9
Registrado: 25 Dic 2015 22:52
Ubicación: Viviendo en Argentina
Reputación: 0

07 May 2018 20:17

Pequeños detalles:
if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); NO.
if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); SÍ.

new szName[MAX_PLAYER_NAME]; NO.
new szName[MAX_PLAYER_NAME + 1]; SÍ.

Podría optimizarse aún más usando otro procesador de comandos y en loops Foreach o GetPlayerPoolSize que detectan la cantidad de usuarios en línea y no tu máximo (MAX_PLAYERS), buen aporte de todas formas.
Omaretot
Aprendiz
Aprendiz
Mensajes: 95
Registrado: 07 Dic 2015 18:46
Reputación: 7

07 May 2018 21:01

Qarper escribió:
07 May 2018 20:17
Pequeños detalles:
if(sscanf(params, "s[128]", szString)) SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); NO.
if(sscanf(params, "s[128]", szString)) return SendClientMessage(playerid, -1, "USO: /b [TEXTO]"); SÍ.

new szName[MAX_PLAYER_NAME]; NO.
new szName[MAX_PLAYER_NAME + 1]; SÍ.

Podría optimizarse aún más usando otro procesador de comandos y en loops Foreach o GetPlayerPoolSize que detectan la cantidad de usuarios en línea y no tu máximo (MAX_PLAYERS), buen aporte de todas formas.
Lo del return siempre lo pongo, no se que me paso que no lo note y no lo puse, como le dije a los demás campaneros, los stocks no los quise tocar ya que me iba a volver un fraile ya que no era un código propio y preferí dejarlo así (Y si, puedes resultar fácil pero en cuando hice la guía no lo sabia), en cuanto al procesador de comando puedes pasarlo a PawnCMD, pero el procesador IZCMD sigue siendo un buen procesador pero si quieres todo bien deberian pasarlo a PawnCMD
Responder