Sencillo sistema de dudas.

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
Juance
Aprendiz
Aprendiz
Mensajes: 196
Registrado: 13 Jun 2014 08:35
Reputación: 0

13 Jun 2014 11:10

Buenas a toda la comunidad. Tengo muchas ganas de aportar mis ideas y mi trabajo, así que empezaré a hacerlo.

Hoy les traigo un sistema de dudas sencillo. El sistema consiste en usar el comando /duda [texto] que enviaría el mensaje a los administradores, luego los administradores recibirán la duda de x usuario y tendrán la posibilidad de responder esa misma duda con el comando /rduda . El comando /rduda funciona solo si el usuario envió una duda, de lo contrario no permitirá enviar la respuesta a otro usuario. El comando /rduda utiliza la ID del usuario para responder, cuando reciben la duda de X usuario, abajo les aparece un mensaje que para responder la duda utilicen el comando /rudad 0 (0 es el ID del jugador que envió la duda) . También tendrán la posibilidad de bloquear el canal con un comando administrativo. El canal de dudas no es un chat el cual es visible para todos los usuarios, sino que el mensaje es entre el usuario y los administradores. ¿Por qué la restricción al usar el /rduda? para que el canal no sea un medio de Wispher donde puedas enviar mensajes a todos los jugadores, además, al responder esa duda otro administrador no podrá responderle, ya que un admin atendió esa duda, eso evita confusiones y des-organización entre los administradores.

Bien, empecemos.

Primero definimos los includes que usaremos.
 Codigo Pawno:
1
2
3

#include <zcmd>
#include <sscanf2>
#include <foreach>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Recuerden que estos includes pueden encontrarlo en la página oficial de samp o en Google.

Más abajo definimos una variable para bloquear o desbloquear el canal.
 Codigo Pawno:
1

new CanalBloqueado;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Luego también definimos la variable para cada jugador que detecta si el usuario envió o no la duda.
 Codigo Pawno:
1

new DudaEnviada[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
En cualquier parte del GM agregamos el comando:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CMD:duda(playerid,params[])
{
	new mensaje[256];
	if(sscanf(params,"s[256]",mensaje)) return SendClientMessage(playerid,-1,"USO: /duda [TEXTO]");
	if(CanalBloqueado == 0)
	{
	format(mensaje,sizeof(mensaje),"Duda de %s[ID:%d]: %s",pName(playerid),playerid,mensaje);
	ABroadCast(-1,mensaje,1);
	format(mensaje,sizeof(mensaje),"Para responderle /rduda %d",playerid);
	ABroadCast(-1,mensaje,1);
	SendClientMessage(playerid,-1,"Has enviado tu duda a los adminsitradores. Espera su respuesta");
	DudaEnviada[playerid] = 1;
	}
	else SendClientMessage(playerid,-1,"El canal de dudas está desactivado");
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 16
Ahí detectamos si el canal está o no bloqueado, en caso de que no, la adminsitración recibe la duda del usuario e indica abajo el comando a usar para responder. Luego da un aviso al usuario que su duda fue enviada y activamos la variable DudaEnviada. En caso de que el canal esté bloqueado, mostraría el mensaje de restricción antes de que la función sea procesada.

Más abajo, o abajo del comando que ingresamos, añadimos el otro comando administrativo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CMD:rduda(playerid,params[])
{
	if(PlayerInfo[playerid][Admin] !=1) return SendClientMessage(playerid,-1,"No estás autorizado para usar este comando");
	new jugador,mensaje[256];
	if(sscanf(params,"us[256]",jugador,mensaje)) return SendClientMessage(playerid,-1,"USO: /rduda [PlayerID/ParteDelNombre] [MENSAJE]");
	if(DudaEnviada[jugador] == 1)
	{
		format(mensaje,sizeof(mensaje),"Respuesta de %s: %s",pName(playerid),mensaje);
		SendClientMessage(jugador,-1,mensaje);
		format(mensaje,sizeof(mensaje),"Respuesta enviada al jugador %s",pName(jugador));
		SendClientMessage(playerid,-1,mensaje);
        DudaEnviada[jugador] = 0;
	}
	else SendClientMessage(playerid,-1,"Ese jugador no ha enviado ninguna duda");
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 16
Detectamos si el usuario tiene como nivel de administrativo el 1, entonces la función se procesa, de lo contrario envía el mensaje de restricción.
Detectamos también si la variable DudaEnviada es 1, la que anteriormente activamos enviando la duda, entonces si es correcto, envia al jugador la respuesta del adminsitrador, avisa al administrador a qué jugador se respondió y activa la variabla DudaEnviada a 0, para que ya no se puedan hacer más respuesta a ese jugador, a no ser que el mismo haga otra duda. Si la variable DudaEnviada es 0, envía el mensaje de restricción que podemos ver arriba del return. Cambiar la variable PlayerInfo[playerid][Admin] por la que utilicen y los -1 por los colores que gusten

y el comando para bloquear el canal:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

CMD:dudasoff(playeris,params[])
{
        new string[128];
	if(PlayerInfo[playerid][Admin] !=1) return SendClientMessage(playerid,-1,"No estás autorizado para usar este comando");
	CanalBloqueado =1;
	format(string,sizeof(string),"El administrador %s ha bloqueado el canal de dudas",pName(playerid));
	ABroadCast(-1,string,1);
	SendClientMessage(playerid,-1,"Has cerrado el canal de dudas");
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 10

Luego abajo del todo, definimos los stocks: "pName,ABroadCast"
 Codigo Pawno:
1
2
3
4
5
6

stock pName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock ABroadCast(color,const stringe[],level)
{
    foreach(new i : Player)
    {
        if(PlayerInfo[i][Admin] >= level) // Cambiar esto por SU variable de admin y jugador que utilicen
        {
            SendClientMessage(i, color, stringe);
        }
    }
    return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 11
Y eso es todo. Cualquier duda o problema que tengan, los atenderé por acá mismo. Saludos.
Última edición por Juance el 13 Jun 2014 15:43, editado 1 vez en total.
[Y]96carp
Baneado
Baneado
Mensajes: 193
Registrado: 10 Abr 2014 22:54
Contactar:
Reputación: -10

13 Jun 2014 13:51

Es el de Cp?
Juance
Aprendiz
Aprendiz
Mensajes: 196
Registrado: 13 Jun 2014 08:35
Reputación: 0

13 Jun 2014 15:37

Este sistema no es de ningún gamemode, está hecho a base de dedos e imaginación mia.

#TheMasterNico ¿por qué lo decis? si es por el bbcode "pawn" no me funciona.
Juance
Aprendiz
Aprendiz
Mensajes: 196
Registrado: 13 Jun 2014 08:35
Reputación: 0

13 Jun 2014 15:44

Ah, perfecto. Ahora si, gracias.
Avatar de Usuario
scriptnoob
Junior
Junior
Mensajes: 646
Registrado: 21 Feb 2014 10:41
Ubicación: Argentina - Santa Fe - Rosario
Contactar:
Reputación: 22

13 Jun 2014 16:36

Otra forma en vez de utilizar sscanf puedes utilizar isnull que utilizará los parámetros , por que aveces el sscanf se buguea.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CMD:duda(playerid,params[])
{
	new mensaje[256];
        if(isnull(params)) return SendClientMessage(playerid, COLOR_BLANCO,"CMD:/duda [Pregunta]");
	if(CanalBloqueado == 0)
	{
	format(mensaje,sizeof(mensaje),"Duda de %s[ID:%d]: %s",pName(playerid),playerid,params);
	ABroadCast(-1,mensaje,1);
	format(mensaje,sizeof(mensaje),"Para responderle /rduda %d",playerid);
	ABroadCast(-1,mensaje,1);
	SendClientMessage(playerid,-1,"Has enviado tu duda a los adminsitradores. Espera su respuesta");
	DudaEnviada[playerid] = 1;
	}
	else SendClientMessage(playerid,-1,"El canal de dudas está desactivado");
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 16
Portfolio: Youtube.

Medio retirado de la programación pawn.
Estudiante de Ingenieria en Sistemas de Información.

Juance
Aprendiz
Aprendiz
Mensajes: 196
Registrado: 13 Jun 2014 08:35
Reputación: 0

13 Jun 2014 18:54

scriptnoob escribió:Otra forma en vez de utilizar sscanf puedes utilizar isnull que utilizará los parámetros , por que aveces el sscanf se buguea.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CMD:duda(playerid,params[])
{
	new mensaje[256];
        if(isnull(params)) return SendClientMessage(playerid, COLOR_BLANCO,"CMD:/duda [Pregunta]");
	if(CanalBloqueado == 0)
	{
	format(mensaje,sizeof(mensaje),"Duda de %s[ID:%d]: %s",pName(playerid),playerid,params);
	ABroadCast(-1,mensaje,1);
	format(mensaje,sizeof(mensaje),"Para responderle /rduda %d",playerid);
	ABroadCast(-1,mensaje,1);
	SendClientMessage(playerid,-1,"Has enviado tu duda a los adminsitradores. Espera su respuesta");
	DudaEnviada[playerid] = 1;
	}
	else SendClientMessage(playerid,-1,"El canal de dudas está desactivado");
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 16

A mi nunca se me bugeó, así que no sé.
Avatar de Usuario
SlenderLAN
Aprendiz
Aprendiz
Mensajes: 24
Registrado: 20 Sep 2018 14:03
Ubicación: Corea del norte
Contactar:
Reputación: 1

24 Sep 2018 00:46

Hola que tal...
Ayuda! me aparece esto al compilar pero en el juego es todo normal no se a que se deba

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8150) : warning 203: symbol is never used: "level"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
En el proyecto de Unlimited Zombie Roleplay

Gazzy Garcia
Aprendiz
Aprendiz
Mensajes: 40
Registrado: 12 Oct 2016 19:01
Reputación: 1

24 Sep 2018 00:53

SlenderLAN escribió:
24 Sep 2018 00:46
Hola que tal...
Ayuda! me aparece esto al compilar pero en el juego es todo normal no se a que se deba

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8150) : warning 203: symbol is never used: "level"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
Te ayudo,
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= level) 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Donde dice Level en el Pawno No lo cambiaste, Tienes que cambiar su valor al del admin que quieras, tambien tienes que tener en cuenta si tiene las misma variables que tenga tu GM De admin, Te pongo la solución un poco resumida
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= 2)//por ejemplo aquí puse 2 pero tu pones el Valor que tenga el nivel de admin 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Si dejas mas 1+ te agradecería -hi
Spoiler:
Proyecto en Curso:
Arcadia Roleplay

Aprende del Maestro y Vendrás a hacer Diestro.
Avatar de Usuario
SlenderLAN
Aprendiz
Aprendiz
Mensajes: 24
Registrado: 20 Sep 2018 14:03
Ubicación: Corea del norte
Contactar:
Reputación: 1

24 Sep 2018 20:55

Jose05021 escribió:
24 Sep 2018 00:53
SlenderLAN escribió:
24 Sep 2018 00:46
Hola que tal...
Ayuda! me aparece esto al compilar pero en el juego es todo normal no se a que se deba

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8150) : warning 203: symbol is never used: "level"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
Te ayudo,
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= level) 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Donde dice Level en el Pawno No lo cambiaste, Tienes que cambiar su valor al del admin que quieras, tambien tienes que tener en cuenta si tiene las misma variables que tenga tu GM De admin, Te pongo la solución un poco resumida
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= 2)//por ejemplo aquí puse 2 pero tu pones el Valor que tenga el nivel de admin 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Si dejas mas 1+ te agradecería -hi
coloque eso y ahora me aparece

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8149) : warning 219: local variable "pAdmin" shadows a variable at a preceding level
C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8149) : warning 203: symbol is never used: "pAdmin"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Warnings.
En el proyecto de Unlimited Zombie Roleplay

Gazzy Garcia
Aprendiz
Aprendiz
Mensajes: 40
Registrado: 12 Oct 2016 19:01
Reputación: 1

24 Sep 2018 21:01

SlenderLAN escribió:
24 Sep 2018 20:55
Jose05021 escribió:
24 Sep 2018 00:53
SlenderLAN escribió:
24 Sep 2018 00:46
Hola que tal...
Ayuda! me aparece esto al compilar pero en el juego es todo normal no se a que se deba

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8150) : warning 203: symbol is never used: "level"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
Te ayudo,
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= level) 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Donde dice Level en el Pawno No lo cambiaste, Tienes que cambiar su valor al del admin que quieras, tambien tienes que tener en cuenta si tiene las misma variables que tenga tu GM De admin, Te pongo la solución un poco resumida
 Codigo Pawno:
1

if(PlayerInfo[i][Admin] >= 2)//por ejemplo aquí puse 2 pero tu pones el Valor que tenga el nivel de admin 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Si dejas mas 1+ te agradecería -hi
coloque eso y ahora me aparece

Código: Seleccionar todo

C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8149) : warning 219: local variable "pAdmin" shadows a variable at a preceding level
C:\Users\SlenderLAN\Desktop\Last Z\gamemodes\lastz.pwn(8149) : warning 203: symbol is never used: "pAdmin"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Warnings.
No vas a entender rapido, si quieres enviame un MP Y te ayudo para no hacer este tema tan largo :b
(Como te dije tienes que adaptarlo a tus variables de admin, lo que hago yo es que busco comandos de admin y le saco las variables y le pongo el nivel de admin, Si no sabes que es una variable ni nada de eso enviame un MP Y te ayudo)
Spoiler:
Proyecto en Curso:
Arcadia Roleplay

Aprende del Maestro y Vendrás a hacer Diestro.
Responder