[Ajuda] Score aumenta depois que o jogo й fechado.
#1

Olб
Tenho duas dъvidas:

1Є - Depois de ter visto um tutorial de um Sistema de Registro(em SII) no fуrum, decidi reproduzir um que funcione parecidamente. Tudo anda normalmente a nгo ser o level que aumenta a cada vez que o player desloga do server. Vocкs verгo que no cуdigo pedi ao gamemode que entregasse ao player o level 1, o player loga e ganha level 1 porйm na segunda vez que ele loga ele ganha level 49 sem eu pedir. O que estб ocorrendo?

2Є - Eu na hora de registrar uma senha no mesmo sistema de registro descobri que й possнvel criar uma senha apenas com espaзos jб que espaзos tambйm sгo considerados caracteres. Eu gostaria de saber se й possнvel e como fazer para que pessoas nгo criem senhas com somente espaзos.

Resolvi postar o gamemode pois vai que um comando estб atrapalhando o outro:
pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <SII>
//------------------------------------------------------------------------------
#define DIALOG_REGISTRO 1
#define DIALOG_LOGIN 2
//------------------------------------------------------------------------------
new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
enum pInfo
{
    pSenha,
    pScore,
    pDinheiro,
    pAdmin
}
new PlayerInfo[MAX_PLAYERS][pInfo];
main()
{
    print("\n----------------------------------");
    print(" Servidor Carregado com Sucesso! ");
    print("----------------------------------\n");
}

public OnGameModeInit()
{
    SetGameModeText("MC:BD V.1.0");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
}

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, gPlayerName[playerid], MAX_PLAYER_NAME);
    if(fexist(ObterINI(playerid)))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Digite sua senha abaixo para efetuar login.", "Login", "Sair");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Digite sua senha abaixo para registrar uma nova conta.", "Registrar", "Sair");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(INI_Open(ObterINI(playerid)))
    {
        INI_WriteInt("Score", PlayerInfo[playerid][pScore]);
        INI_WriteInt("Dinheiro", GetPlayerMoney(playerid));
        INI_WriteInt("Admin", PlayerInfo[playerid][pAdmin]);
        INI_Save();
        INI_Close();
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

//Comandos ---------------------------------------------------------------------
CMD:cv(playerid, params[])
{
    new veiculo, ID, c1, c2;
    if (sscanf(params, "ddd", ID, c1, c2))
    {
        SendClientMessage(playerid, -1, "Use: {FFFF00}/cv [ID] [Cor1] [Cor2].");
    }
    else
    {
        if (ID < 400 || ID > 611) return 1;
        if (c1 > 400 || c2 > 611) return 1;
        new Float: X, Float: Y, Float: Z, Float: A;
        GetPlayerPos(playerid, X, Y, Z);
        GetPlayerFacingAngle(playerid, A);
        veiculo = CreateVehicle(ID, X, Y, Z, A, c1, c2, -1);
        PutPlayerInVehicle(playerid, veiculo, 0);
    }
    return 1;
}
CMD:teste(playerid, params[])
{
    SetPlayerScore(playerid, 1008);
    GivePlayerMoney(playerid, 9632);
    SendClientMessage(playerid, -1, "Comando Efetuado!");
    return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTRO:
        {
            if (!response) return Kick(playerid);
            if (response)
            {
                if(!strlen(inputtext))
                {
                    ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Vocк digitou uma senha invбlida.\nDigite sua senha abaixo para registrar uma nova conta.", "Registro", "Quit");
                }
                if(INI_Open(ObterINI(playerid)))
                {
                    INI_WriteString("Senha", inputtext);
                    INI_WriteInt("Score", 1);
                    INI_WriteInt("Dinheiro", 5000);
                    INI_WriteInt("Admin", 0);
                    INI_Save();
                    INI_Close();
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Digite sua senha abaixo para efetuar login.", "Login", "Sair");
                }
            }
        }
        case DIALOG_LOGIN:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext))
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Vocк digitou uma senha invбlida.\nDigite sua senha abaixo para efetuar login.", "Login", "Sair");
                }

                if(INI_Open(ObterINI(playerid)))
                {
                    INI_ReadString(PlayerInfo[playerid][pSenha], "Senha", 20);
                    if(strcmp(inputtext,PlayerInfo[playerid][pSenha], false))
                    {
                        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","Vocк digitou uma senha incorreta.\nDigite sua senha abaixo para efetuar login.", "Login", "Sair");
                    }
                    SetPlayerScore(playerid, INI_ReadInt("Score"));
                    ResetPlayerMoney(playerid);
                    GivePlayerMoney(playerid, INI_ReadInt("Dinheiro"));
                    PlayerInfo[playerid][pAdmin] = INI_ReadInt("Admin");
                    INI_Close();
                    SpawnPlayer(playerid);
                }
            }
        }
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

stock ObterINI(playerid)
{
    new conta[64];
    format(conta, 30, "Contas/%s.ini", gPlayerName[playerid]);
    return conta;
}
Sim, hб muitas callbacks sem ser utilizadas, isso por conta do gamemode estar em construзгo.
Reply
#2

Pega o sistema do doege do ******* o sistema dele n tem bugs.
Reply
#3

1 - No seu cуdigo, sу achei a criaзгo da variбvel pScore e a seguinte instruзгo em OnPlayerDisconnect.
Nгo encontrei onde vocк seta o Score para 1.
pawn Код:
INI_WriteInt("Score", PlayerInfo[playerid][pScore]);
2 - Vocк pode usar strfind, ou fazer um loop para verificar cada caracter. Ex:
pawn Код:
new VBString = "Testando";
for(new v; v != sizeof VBString; v++)
    if(VBString[v] == 'o')
        //A letra o foi encontrada. Aqui vocк forзa o jogador e digitar outra senha.
Reply
#4

usa DOF2
Reply
#5

Man, tinha feito esse mesmo sistema de registro/login a um tempo atrбs na minha gm, ela realmente tem esse bug, eu estudei a usar o DOF2, й bem mais simples e sem bugs.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)