Camara de jugador al iniciar y OnPlayerRequestClass
#1

Hola estoy haciendo un registro mediante dialogos y mysql pero no logro que me funcione como quiero.

El problema que tengo es que al mostrar el dialogo de ingreso no me muestra la camara que yo le puse, pero si le doy enter (campo vacio o clave erronea) si me muestra la camara. Tambien me muestra la seleccion de personaje.

El otro problema es que al morir se me queda en OnPlayerRequestClass.

Dejo un video para que vean que sucede y se entienda un poco mejor.

https://www.youtube.com/watch?v=HI7dP-HH6OE

OnPlayerConnect
pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid, COLOR_INVISIBLE);
    TextDrawShowForPlayer(playerid, Box1);
    TextDrawShowForPlayer(playerid, Box2);
    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
    mysql_tquery(MySQL, Query, "ComprobarUsuario", "i", playerid);
    return 1;
}
ComprobarUsuario
pawn Код:
public ComprobarUsuario(playerid)
{
    new fila, campo, string[256];
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        CargarJugadorInfo(playerid);
        format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
        ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
    }
    else if (!fila) {
        if (!NombreValido(playerid))
        {
            LimpiarChat(playerid);
            SendClientMessage(playerid, COLOR_BLANCO, "Tu nombre no cumple con el formato 'Nombre_Apellido'.");
            SendClientMessage(playerid, COLOR_BLANCO, "Has sido kickeado automбticamente.");
            KickJugador(playerid);
            return 1;
        }
        format(string, sizeof(string), "{EEEEEE}Antes que nada, deberбs registrar tu nombre de usuario. Para ello,\ndeberбs escoger una contraseсa y recordarla. Sin ella no tendrбs\nacceso a tu cuenta en el futuro.\nIntroduce la contraseсa a continuaciуn:");
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_PASSWORD, "{00C6FF}› Registrarse", string, "Continuar", "");
    }
    return 1;
}
El dialogo "DIALOGO_INGRESO" y setea JugadorLogueado en 1 (ademas de hacer las comprobaciones de clave, etc) y llama a la funcion JugadorSpawn.

JugadorSpawn
pawn Код:
public JugadorSpawn(playerid)
{
    if (JugadorLogueado[playerid] == 1)
    {
        new string[100];
        TextDrawHideForPlayer(playerid, Box1);
        TextDrawHideForPlayer(playerid, Box2);
        SetPlayerScore(playerid, JugadorInfo[playerid][Nivel]);
        SetPlayerVirtualWorld(playerid, JugadorInfo[playerid][Interior]);
        SetPlayerInterior(playerid, JugadorInfo[playerid][Mundo]);
        SetearDinero(playerid, JugadorInfo[playerid][Dinero]);
        SetPlayerHealth(playerid, JugadorInfo[playerid][Vida]);
        SetPlayerArmour(playerid, JugadorInfo[playerid][Armadura]);
        SetCameraBehindPlayer(playerid);
        TogglePlayerControllable(playerid, 1);
        format(string, sizeof(string), "SERVIDOR: Bienvenido %s.", NombreLimpio(playerid));
        SendClientMessage(playerid, COLOR_BLANCO, string);

        SetSpawnInfo(playerid, 0, JugadorInfo[playerid][Skin], JugadorInfo[playerid][PosX], JugadorInfo[playerid][PosY], JugadorInfo[playerid][PosZ], JugadorInfo[playerid][Angulo], 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
        return 1;
    }

    SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
    SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
    SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
    TogglePlayerControllable(playerid, 0);
    return 1;
}
OnPlayerRequestClass
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    if(IsPlayerNPC(playerid)) return 1;
    SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
    SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
    SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
    TogglePlayerControllable(playerid, 0);
    return 0;
}
OnPlayerSpawn
pawn Код:
public OnPlayerSpawn(playerid)
{
    return 1;
}
OnPlayerSpawn
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);
    if(killerid != INVALID_PLAYER_ID)
    {
        SetPlayerSkin(playerid, JugadorInfo[playerid][Skin]);
        SetPlayerPos(playerid, JugadorInfo[playerid][PosX], JugadorInfo[playerid][PosY], JugadorInfo[playerid][PosZ]);
        SetPlayerFacingAngle(playerid, JugadorInfo[playerid][Angulo]);
    }
    return 1;
}
Reply
#2

Saca la condiciуn en OnPlayerDeath y deja las variables que tenes ahн.

Empeza a comprobar el usuario en OnPlayerRequestClass, entonces estarнas dando tiempo a que conecte bien al servidor, y no dejarнas que pase a la selecciуn de skin.

Las cбmaras colocalas dentro de la funciуn donde abrнs el dialog.

pawn Код:
public ComprobarUsuario(playerid)
{
    new fila, campo, string[256];
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        CargarJugadorInfo(playerid);
        format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
        ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
        //Cбmaras para iniciar la sesiуn
    }
    else if (!fila) {
        if (!NombreValido(playerid))
        {
            LimpiarChat(playerid);
            SendClientMessage(playerid, COLOR_BLANCO, "Tu nombre no cumple con el formato 'Nombre_Apellido'.");
            SendClientMessage(playerid, COLOR_BLANCO, "Has sido kickeado automбticamente.");
            KickJugador(playerid);
            return 1;
        }
        format(string, sizeof(string), "{EEEEEE}Antes que nada, deberбs registrar tu nombre de usuario. Para ello,\ndeberбs escoger una contraseсa y recordarla. Sin ella no tendrбs\nacceso a tu cuenta en el futuro.\nIntroduce la contraseсa a continuaciуn:");
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_PASSWORD, "{00C6FF}› Registrarse", string, "Continuar", "");
       //Cбmaras para registrar al jugador.
    }
    return 1;
}
Reply
#3

La camara ahora si funciona como quisiera, pero aun tengo algunos inconvenientes.

Al ingresar una clave incorrecta aparecen los botones para seleccionar el personaje y al morir me pide que me loguee nuevamente.
pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid, COLOR_INVISIBLE);
    TextDrawShowForPlayer(playerid, Box1);
    TextDrawShowForPlayer(playerid, Box2);
    return 1;
}
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    if(IsPlayerNPC(playerid)) return 1;
    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
    mysql_tquery(MySQL, Query, "ComprobarUsuario", "i", playerid);
    return 0;
}
pawn Код:
public ComprobarUsuario(playerid)
{
    new fila, campo, string[256];
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        CargarJugadorInfo(playerid);
        format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
        ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    else if (!fila) {
        if (!NombreValido(playerid))
        {
            LimpiarChat(playerid);
            SendClientMessage(playerid, COLOR_BLANCO, "Tu nombre no cumple con el formato 'Nombre_Apellido'.");
            SendClientMessage(playerid, COLOR_BLANCO, "Has sido kickeado automбticamente.");
            KickJugador(playerid);
            return 1;
        }
        format(string, sizeof(string), "{EEEEEE}Antes que nada, deberбs registrar tu nombre de usuario. Para ello,\ndeberбs escoger una contraseсa y recordarla. Sin ella no tendrбs\nacceso a tu cuenta en el futuro.\nIntroduce la contraseсa a continuaciуn:");
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_PASSWORD, "{00C6FF}› Registrarse", string, "Continuar", "");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    return 1;
}
Reply
#4

Cuando la contraseсa es incorrecta, ponele TogglePlayerSpectating

pawn Код:
TogglePlayerSpectating(playerid, 1);
y al spawnear sacaselo.

En OnPlayerDeath mandale que..

pawn Код:
SpawnPlayer(playerid);
Reply
#5

El tema de OnPlayerDeath esta solucionado, pero ahora al ingresar la clave incorrecta me lleva a otra camara la default de samp.

pawn Код:
case DIALOGO_INGRESAR:
        {
            new string[256];
            new CifrarClave[145];
            WP_Hash(CifrarClave, sizeof (CifrarClave), inputtext);

            if (!response) return Kick(playerid);
            if (strlen(inputtext) == 0)
            {
                format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
                ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
                return 1;
            }
            if (!strcmp(CifrarClave, JugadorInfo[playerid][Clave]))
            {
                if (JugadorInfo[playerid][Baneado] == 1)
                {
                    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `bans` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
                    mysql_tquery(MySQL, Query, "CargarJugadorBan", "i", playerid);
                    return 1;
                }
                if (JugadorInfo[playerid][Admin] == 1)
                {
                    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `administradores` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
                    mysql_tquery(MySQL, Query, "CargarJugadorAdmin", "i", playerid);
                    return 1;
                }
                CambiarEstadoJugador(playerid);
                JugadorSpawn(playerid);
            }
            else // Clave incorrecta
            {
                TogglePlayerSpectating(playerid, 1);
                SetPVarInt(playerid, "DIALOGO_INGRESAR", GetPVarInt(playerid, "DIALOGO_INGRESAR") +1 );
                format(string, sizeof(string), " La contraseсa introducida es incorrecta. (%d/%d)", GetPVarInt(playerid, "DIALOGO_INGRESAR"), LIMITE_DIALOGO_INGRESAR);
                SendClientMessage(playerid, COLOR_GRIS, string);
                if (GetPVarInt(playerid, "DIALOGO_INGRESAR") == LIMITE_DIALOGO_INGRESAR)
                {
                    SendClientMessage(playerid, COLOR_NARANJA, "Has sido kickeado automбticamente. (Razуn: Lнmite de intentos de ingreso)");
                    KickJugador(playerid);
                    return 1;
                }

                format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
                ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
            }

        }
Reply
#6

El TogglePlayerSpectating te llevarб a la cбmara por defecto cuando conectas.

Hace esto:

pawn Код:
case DIALOGO_INGRESAR:
        {
            new string[256];
            new CifrarClave[145];
            WP_Hash(CifrarClave, sizeof (CifrarClave), inputtext);

            if (!response) return Kick(playerid);
            if (strlen(inputtext) == 0)
            {
                format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
                ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
                return 1;
            }
            if (!strcmp(CifrarClave, JugadorInfo[playerid][Clave]))
            {
                if (JugadorInfo[playerid][Baneado] == 1)
                {
                    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `bans` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
                    mysql_tquery(MySQL, Query, "CargarJugadorBan", "i", playerid);
                    return 1;
                }
                if (JugadorInfo[playerid][Admin] == 1)
                {
                    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `administradores` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
                    mysql_tquery(MySQL, Query, "CargarJugadorAdmin", "i", playerid);
                    return 1;
                }
                CambiarEstadoJugador(playerid);
                JugadorSpawn(playerid);
            }
            else // Clave incorrecta
            {
                //Aсadн acб alguna cбmara.
                SetPVarInt(playerid, "DIALOGO_INGRESAR", GetPVarInt(playerid, "DIALOGO_INGRESAR") +1 );
                format(string, sizeof(string), " La contraseсa introducida es incorrecta. (%d/%d)", GetPVarInt(playerid, "DIALOGO_INGRESAR"), LIMITE_DIALOGO_INGRESAR);
                SendClientMessage(playerid, COLOR_GRIS, string);
                if (GetPVarInt(playerid, "DIALOGO_INGRESAR") == LIMITE_DIALOGO_INGRESAR)
                {
                    SendClientMessage(playerid, COLOR_NARANJA, "Has sido kickeado automбticamente. (Razуn: Lнmite de intentos de ingreso)");
                    KickJugador(playerid);
                    return 1;
                }

                format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
                ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
            }

        }
Reply
#7

Ahora al cargar el servidor me aparece bien la camara, pero aun aparecen los botones para seleccionar personaje.

Intente poniendo TogglePlayerSpectating 1 la comprobacion de la cuenta (donde indica que dialogo cargar) pero me cambia la camara por la default.
Reply
#8

Perfecto.

En OnPlayerConnect chequeб al jugador, coloca la funciуn esa del mysql. Y en OnPlayerRequestClass mostrб los dialogos, si estб registrado o no.

Pero a la comprobaciуn hacela en OnPlayerConnect.
Reply
#9

No entendi muy bien, decime si era esto. Ya lo probe y no funciona, los dialogos los carga mal.
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    if(IsPlayerNPC(playerid)) return 1;

    new fila, campo, string[256];
    cache_get_data(fila, campo, MySQL);
   
    if (fila)
    {
        CargarJugadorInfo(playerid);
        format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
        ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    else if (!fila) {
        if (!NombreValido(playerid))
        {
            LimpiarChat(playerid);
            SendClientMessage(playerid, COLOR_BLANCO, "Tu nombre no cumple con el formato 'Nombre_Apellido'.");
            SendClientMessage(playerid, COLOR_BLANCO, "Has sido kickeado automбticamente.");
            KickJugador(playerid);
            return 1;
        }
        format(string, sizeof(string), "{EEEEEE}Antes que nada, deberбs registrar tu nombre de usuario. Para ello,\ndeberбs escoger una contraseсa y recordarla. Sin ella no tendrбs\nacceso a tu cuenta en el futuro.\nIntroduce la contraseсa a continuaciуn:");
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_PASSWORD, "{00C6FF}› Registrarse", string, "Continuar", "");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    return 1;
}

public OnPlayerConnect(playerid)
{
    /* Iconos */
    SetPlayerMapIcon(playerid, 1, 1554.4443, -1675.6135, 16.1953, 30, 0, MAPICON_LOCAL); // DPLS
    SetPlayerMapIcon(playerid, 2, 1172.7277, -1323.3209, 15.4015, 22, 0, MAPICON_LOCAL); // CMLS

    /* Otros */
    SetPlayerColor(playerid, COLOR_INVISIBLE);
    TextDrawShowForPlayer(playerid, Box1);
    TextDrawShowForPlayer(playerid, Box2);
   

    mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
    mysql_tquery(MySQL, Query, "OnPlayerRequestClass", "i", playerid);
    return 1;
}
Reply
#10

Nop, asн no.

Proba asн:

En OnConnect

pawn Код:
mysql_format(MySQL, Query, sizeof(Query), "SELECT * FROM `usuarios` WHERE `Nombre` = '%e' LIMIT 1", NombreJugador(playerid));
    mysql_tquery(MySQL, Query, "ComprobarUsuario", "i", playerid);
Abajo del todo:

pawn Код:
stock ComprobarUsuario(playerid)
{
    new fila, campo, string[256];
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        CargarJugadorInfo(playerid);
        format(string, sizeof(string), "{FFFFFF}Hola, %s!\n\nBienvenido de nuevo a {D69929}Servidor Roleplay{FFFFFF}.\nPor favor ingrese su clave para ingresar.", NombreLimpio(playerid));
        ShowPlayerDialog(playerid, DIALOGO_INGRESAR, DIALOG_STYLE_PASSWORD, "{00C6FF}› Bienvenido, ingrese su clave", string, "Ingresar", "Cancelar");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    else if (!fila) {
        if (!NombreValido(playerid))
        {
            LimpiarChat(playerid);
            SendClientMessage(playerid, COLOR_BLANCO, "Tu nombre no cumple con el formato 'Nombre_Apellido'.");
            SendClientMessage(playerid, COLOR_BLANCO, "Has sido kickeado automбticamente.");
            KickJugador(playerid);
            return 1;
        }
        format(string, sizeof(string), "{EEEEEE}Antes que nada, deberбs registrar tu nombre de usuario. Para ello,\ndeberбs escoger una contraseсa y recordarla. Sin ella no tendrбs\nacceso a tu cuenta en el futuro.\nIntroduce la contraseсa a continuaciуn:");
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_PASSWORD, "{00C6FF}› Registrarse", string, "Continuar", "");
        SetPlayerCameraPos(playerid, 1597.3928, -1699.5081, 55.9331);
        SetPlayerCameraLookAt(playerid, 1596.5624, -1700.0829, 55.7230);
        SetPlayerPos(playerid, -316.776245, 1053.410400, 15.265959);
        TogglePlayerControllable(playerid, 0);
    }
    return 1;
}
En RequestClass

pawn Код:
ComprobarUsuario(playerid);
El requestclass retornalo a 0 , lo tenes 1.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)