Originally Posted by DesingMyCry
Utiliza esto, es bastante fбcil de configurar.
pawn Код:
#include <a_samp> /* #undef MAX_PLAYERS #define MAX_PLAYERS 1 */
/*|| Demas globales ||*/ forward callbackTutorial(jugadorid); forward callbackTutorialInicio(jugadorid); forward callbackTutorialTermino(jugadorid); #define TUTORIAL_TIEMPO 12000 //Milisegundos que demorarб en pasar al otro tutorial #define TUTORIAL_MAX_TAM 256 //Mбximo tamaсo de las cadenas que se mostrarбn
/*|| Variables ||*/ new bool:jTutorial[MAX_PLAYERS]; //Dice si el jugador esta en tutorial o nу new numeroTutorial[MAX_PLAYERS]; //El ID del tutorial en el que esta new tiempoTutorial[MAX_PLAYERS]; //Para usar con SetTimer y SetTimerEx enum EnumInfoTutorial { tut_id, tut_ms, tut_info[TUTORIAL_MAX_TAM], Float:tut_posCamara[3], Float:tut_posJugador[3] } new infoTutorial[][EnumInfoTutorial] = { { 0, TUTORIAL_TIEMPO, "Primera parte del tutorial", {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0} }, { 1, TUTORIAL_TIEMPO, "Segunda parte del tutorial", {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0} } };
/*|| Funciones principales ||*/ //Iniciar el tutorial stock iniciarTutorial(jugadorid, desdeID = 0) { //Si ya esta en el tutorial if(jTutorial[jugadorid] == true) return 2; //Dice que esta en el tutorial jTutorial[jugadorid] = true; //Congela al jugador TogglePlayerControllable(jugadorid, false); //Dice que inicia el tutorial desde el punto "desdeID" (por defecto, el principio) numeroTutorial[jugadorid] = desdeID; //Posiciona la cбmara del jugador SetPlayerCameraPos(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][0], infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][1], infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][2]); SetPlayerCameraLookAt(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][0], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][1], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][2]);
//Lleva al jugador a la posiciуn SetPlayerPos(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][0], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][1], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][2]);
//Envia el mensaje GameTextForPlayer(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_info], infoTutorial[numeroTutorial[jugadorid]][tut_ms], 3); //Crea el tiempo para pasar a la siguiente KillTimer(tiempoTutorial[jugadorid]); tiempoTutorial[jugadorid] = SetTimerEx("callbackTutorial", infoTutorial[numeroTutorial[jugadorid]][tut_ms], false, "i", jugadorid); //Llama a la callback CallLocalFunction("callbackTutorialInicio", "i", jugadorid); return 1; } //Saber si un jugador esta en el tutorial o nу stock bool:enTutorial(jugadorid) return jTutorial[jugadorid];
public callbackTutorial(jugadorid) { //Aumenta la informaciуn ++numeroTutorial[jugadorid];
if(numeroTutorial[jugadorid] >= sizeof(infoTutorial)) { //Terminу el tutorial //Descongela al jugador TogglePlayerControllable(jugadorid, true); //Cбmara SetCameraBehindPlayer(jugadorid); //Dice que no esta en el tutorial jTutorial[jugadorid] = false; //Llama a la callback CallLocalFunction("callbackTutorialTermino", "i", jugadorid); return 1; } else { //Aun no termina el tutorial //Posiciona la cбmara del jugador SetPlayerCameraPos(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][0], infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][1], infoTutorial[numeroTutorial[jugadorid]][tut_posCamara][2]); SetPlayerCameraLookAt(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][0], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][1], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][2]);
//Lleva al jugador a la posiciуn SetPlayerPos(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][0], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][1], infoTutorial[numeroTutorial[jugadorid]][tut_posJugador][2]);
//Envia el mensaje GameTextForPlayer(jugadorid, infoTutorial[numeroTutorial[jugadorid]][tut_info], infoTutorial[numeroTutorial[jugadorid]][tut_ms], 3);
//Crea el tiempo para pasar a la siguiente KillTimer(tiempoTutorial[jugadorid]); tiempoTutorial[jugadorid] = SetTimerEx("callbackTutorial", infoTutorial[numeroTutorial[jugadorid]][tut_ms], false, "i", jugadorid); return 1; } }
public OnPlayerConnect(playerid) { //Dice que esta en el principio del tutorial numeroTutorial[playerid] = 0; //Dice que no esta en el tutorial jTutorial[playerid] = false; return 1; }
public OnPlayerDisconnect(playerid, reason) { //Si esta en el tutorial y se desconecta, elimina el tiempo if(enTutorial(playerid)) KillTimer(tiempoTutorial[playerid]); return 1; }
Te explico basicamente como hacerlo.
pawn Код:
forward callbackTutorialInicio(jugadorid); forward callbackTutorialTermino(jugadorid);
Esas 2 callbacks tienen un nombre obvio no crees?
pawn Код:
#define TUTORIAL_TIEMPO 12000 //Milisegundos que demorarб en pasar al otro tutorial #define TUTORIAL_MAX_TAM 256 //Mбximo tamaсo de las cadenas que se mostrarбn
La primera linea es el tiempo por defecto de todas las informaciones, aunque cada una debe tener una propia.
La segunda es el tamaсo mбximo de la informaciуn que pondrбs, yo puse 256 para prevenir.
pawn Код:
new infoTutorial[][EnumInfoTutorial] = { { 0, TUTORIAL_TIEMPO, "Primera parte del tutorial", {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0} }, { 1, TUTORIAL_TIEMPO, "Segunda parte del tutorial", {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0} } };
1.- ID; te recomiendo que lo utilizes de buena forma, no afecta en nada el nъmero que uses ahн pero es mejor que mantengas un orden siempre.
2.- Milisegundos; este es el tiempo en milisegundos que demorarб o se mostrarб el mensaje en la pantalla.
3.- Mensaje; obviamente, el mensaje que se mostrarб.
4.- Camara; la posiciуn de la cбmara.
5.- MCamara; donde mirarб la cбmara, ademбs de la posiciуn donde estarб el jugador mientras esta en esta parte del tutorial.
Para agregar mas simplemente agrega mas lineas, como una simple variable.
pawn Код:
native iniciarTutorial(jugadorid, desdeID = 0); native bool:enTutorial(jugadorid);
La primera es para iniciar el tutorial, retornarб 2 si el jugador ya estaba en el tutorial y 1 si se iniciу correctamente.
La segunda es para saber si esta en el tutorial o nу.
|