[Tutorial] Como Criar Sistema Salvamento + PlayerInfo
#1

Bom, galera

Eu sou dos velho aqui do SAMP....
talvez tem ai alguem que me conheзa, nao sei....



Tava aqui sem nd para fazer, dai decidi ajudar aqui a comunidade do SAMP

Vou ensinar, neste tutorial, a criar um sistema de salvamento e de PlayerInfo....
E' aquele mesmo que tem la no The GodFather e em outros GM's...

Pode parecer mt complicado, mas na verdade e' bem simples:


Vamos la entao

Primeiramente, vai pensar no que no's queremos salvar. Neste tudo vai ser o seguinte:

:: AdminLevel -> pAdmin
:: Organizaзao -> pOrg
:: Lider -> pLider
:: Dinheiro -> pDinheiro
:: Skin -> pSkin
:: Nome -> pNome
:: Posicao de Spawn -> pCord X
-> pCord Y
-> pCord Z


Depois, vamos la no pawno, e no topo do GM, colocamos:


pawn Код:
enum pInfo
{
     pAdmin,
     pOrg,
     pLider,
     pDinheiro,
     pSkin,
     pNome[MAX_PLAYER_NAME],
     Float: pX,
     Float: pY,
     Float: pZ,
}

new PlayerInfo[MAX_PLAYERS][pInfo];


Agora na public OnPlayerConnect:


temos que ver se o ficheiro existe, e caso nao exista, tem que ser criado um...:


pawn Код:
new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname)); //pega o nome do player
   
        new file[256];
        new string[256];
        format(file, sizeof(file), "%s.ini", pname); //pena no nome e "converte" em nome de ficheiro
        if(dini_Exists(file)) // verifica se o ficheiro existe
                {
        SendClientMessage(playerid, 0xFFC800FF, "Vocк estб Registado"); //envia a informacao que esta' registrado
            format(string, sizeof(string), "Bem-Vindo de Volta %s", pname);
            SendClientMessage(playerid, 0xAF0000FF, string);//envia mensagem de boas vindas
           
            PlayerInfo[playerid][pAdmin] = dini_Int(file, "pAdmin");
            PlayerInfo[playerid][pOrg]  = dini_Int(file, "pOrg");
            PlayerInfo[playerid][pLider]  = dini_Int(file, "pLider");
            PlayerInfo[playerid][pDinheiro] = dini_Int(file, "pDinheiro");
            PlayerInfo[playerid][pSkin] = dini_Int(file, "pSkin");
                        PlayerInfo[playerid][pNome] = dini_Int(file, "pNome");
            PlayerInfo[playerid][pX] = dini_Int(file, "pX");
            PlayerInfo[playerid][pY] = dini_Int(file, "pY");
            PlayerInfo[playerid][pZ] = dini_Int(file, "pZ");
                 }
             else //se o player nao estб registado
            {
            dini_Create(file);//Cria Ficheiro
            dini_IntSet(file, "pAdmin", 0); //Admin Nivel 0
            dini_IntSet(file, "pOrg",  0); //Sem ORG
            dini_IntSet(file, "pLider",  0);//Nao e' lider
            dini_IntSet(file, "pDinheiro", 1000); //coloca 1000$ de dinheiro
            dini_IntSet(file, "pSkin", 299); //Seleciona e salva com a skin 299
            dini_Set(file, "pNome", "Cristiano Ronaldo"); //Salva Nome como "Cristiano Ronaldo"
            dini_FloatSet(file, "pX", -1964.5994); //Cord x
            dini_FloatSet(file, "pY", 541.0098);// Cord Y
            dini_FloatSet(file, "pZ", 35.1719); // Cord Z
            SendClientMessage(playerid, 0x0069FFFF, "Conta em seu nome Criada");
            OnPlayerConnect(playerid);//Chama a public novamente
                    }

Agora em OnPlayerDisconect, para salvar tudo que o player fez e conquistou quando ele sair do servidor:


pawn Код:
new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));//pega o nome do player

        new file[256];
        format(file, sizeof(file), "%s.ini", pname);//transforma o nome e ficheiro

            new Float: X, Float: Y, Float: Z;
            GetPlayerPos(playerid, X, Y, Z);//pega a posicao do player
           
            dini_IntSet(file,   "pAdmin", PlayerInfo[playerid][pAdmin]);//salca o Admin Nivel
            dini_IntSet(file,   "pOrg",  PlayerInfo[playerid][pOrg]); //salva a org do player
            dini_IntSet(file,   "pLider",  PlayerInfo[playerid][pLider]); //salva se e lider e qual
            dini_IntSet(file,   "pDinheiro", GetPlayerMoney(playerid)); // salva o dinheiro que o player tem
            dini_IntSet(file,   "pSkin",  GetPlayerSkin(playerid)    ); //salva a skin que o player esta a usar
            dini_Set(    file,   "pNome", PlayerInfo[playerid][pLevel]); //salva a nota "Nome" (neste caso: "Cristiano Ronaldo")
            dini_FloatSet(file, "pX", X);//cordenada X
            dini_FloatSet(file, "pY", Y);//Cordenada Y
            dini_FloatSet(file, "pZ", Z);//Cordenada Z
    return 1;
}

agora na public OnPlayerSpawn:


pawn Код:
ResetPlayerMoney(playerid);//reseta o dinheiro do player
            GivePlayerMoney(playerid, PlayerInfo[playerid][pDinheiro]);//da o dinheiro ao player
                        SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);//Seta a Skin do player
                        SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);


e e' isso, galera
dps e' so vcs estudar, compreender e desenvolver isso ai


Espero ter ajudado
Reply
#2

Se os usuбrios novos do Fуrum SAMP, soubessem usar o search e o ******, ajudaria bastante. Mas como existe pessoas que sabem procurar, irб ajudar, pois podemos postar o link no tуpico de ajuda dos novatos '-'
Ficou meio confuso o que eu falei, mas acho que dб pra entender.
Bom tutorial, parabйns.
Nota 9/10 - Tem um pequeno problema, tб meio desorganizado o code, mas pode ser que o fуrum desorganizou, jб aconteceu isso comigo vбrias vezes :S
Reply
#3

Bom Andmeida,o Tutorial em si tem uma boa funзгo,porem como os que iram ler isto serгo os mais novatos,seria melhor explicar partes por partes(apenas uma dica)

@Seja Bem vindo novamente
Reply
#4

bom tuto andmeida
Reply
#5

Quote:
Originally Posted by Gustavo_Araujo
Посмотреть сообщение
Bom Andmeida,o Tutorial em si tem uma boa funзгo,porem como os que iram ler isto serгo os mais novatos,seria melhor explicar partes por partes(apenas uma dica)

@Seja Bem vindo novamente
Quem Comeзa pelo topo, ao topo nunca ha'-de chegar

Se eles querem se apressar e aprender este tipo de coisas sem ter os conhecimentos mais b'asicos isso j'a e' problema deles.....
Reply
#6

And, consegui resolver aquele probleminha que lhe falei, eu nгo gosto de postar no forum pq gosto de matar a cabeзa atй aprender, como fiz husahusahuasuhas, seu tuto estб bem legal, vai abrir muitas portas.Abraзos e parabйns u.u.
Reply
#7

Parabens Otimo Tuto Vai Ajuda Muito Mesmo

Continue assim ...

Fui-me
Reply
#8

Gostei manin '-'
Reply
#9

mas tipo, e se eu quiser utilizar esse sistema, e por para salvar na conta do player?
Como fica Oo

pawn Код:
if(strcmp(cmd, "/xxx", true) == 0)
    {
        if(!PlayerToPoint(1.0, playerid, 418.5448,-75.0928,1001.8047))
        {
            SendClientMessage(playerid, COR_VERMELHO, "(ERRO) Vocк nгo estб no xxx.");
            return 1;
        }
        new skin = GetPlayerSkin(playerid);
        tmp = strtok1(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, 0xFF4040AA, "Uso: /xxx 1 - 2");
        SetTimerEx("Hide", 1500, false, "d", playerid);//19077 18975
        GivePlayerMoneyEx(playerid, -8);
        SendClientMessage(playerid, 0xFFFF00AA, "Vocк fez um xxx e pagou 8 reais!");
        switch(strval(tmp))
        {
            case 1: SetPlayerAttachedObject(playerid, GetSlot(playerid), 19077, 2, SkinOffSet[skin][0], SkinOffSet[skin][1], SkinOffSet[skin][2], SkinOffSet[skin][3], SkinOffSet[skin][4], SkinOffSet[skin][5], SkinOffSet[skin][8], SkinOffSet[skin][8], SkinOffSet[skin][8]);
            case 2: SetPlayerAttachedObject(playerid, GetSlot(playerid), 18975, 2, SkinOffSet[skin][0], SkinOffSet[skin][1], SkinOffSet[skin][2], SkinOffSet[skin][3], SkinOffSet[skin][4], SkinOffSet[skin][5], SkinOffSet[skin][8], SkinOffSet[skin][8], SkinOffSet[skin][8]);
            default: SendClientMessage(playerid, 0xFF4040AA, "Uso: /xxx");
        }
        return 1;
    }
Eu tentei utilizar aqui mas nem deu certo
Reply
#10

Quote:
Originally Posted by andmeida10
Посмотреть сообщение
Eu sou dos velho aqui do SAMP....
talvez tem ai alguem que me conheзa, nao sei....
Velho nгo quer dizer nada, vocк como velho deveria saber explicar melhor, alias hoje em dia jб nem se usa Dini, existe coisas bem mais rбpidas, acho que devia ter em atenзгo isso, enfim, bom tutorial.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)