Como Criar Sistema Salvamento + PlayerInfo

23 de dez. de 2012.
Bom, galera

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 Code:
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 Code:
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 Code:
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 Code:
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

5 comentários:

Kezz disse...

erro nos dini.

error 017: undefined symbol "dini_Exists"
E:\GM\gamemodes\GM.pwn(131) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(132) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(133) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(134) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(135) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(136) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(137) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(138) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(139) : error 017: undefined symbol "dini_Int"
E:\GM\gamemodes\GM.pwn(143) : error 017: undefined symbol "dini_Create"
E:\GM\gamemodes\GM.pwn(144) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(145) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(146) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(147) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(148) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(149) : error 017: undefined symbol "dini_Set"
E:\GM\gamemodes\GM.pwn(150) : error 017: undefined symbol "dini_FloatSet"
E:\GM\gamemodes\GM.pwn(151) : error 017: undefined symbol "dini_FloatSet"
E:\GM\gamemodes\GM.pwn(152) : error 017: undefined symbol "dini_FloatSet"
E:\GM\gamemodes\GM.pwn(172) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(173) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(174) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(175) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(176) : error 017: undefined symbol "dini_IntSet"
E:\GM\gamemodes\GM.pwn(177) : error 017: undefined symbol "dini_Set"

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

Unknown disse...

problema com o file :/

Unknown disse...

C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1051) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1052) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1054) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1060) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1068) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1069) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1088) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1094) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1095) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1097) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1100) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1108) : error 017: undefined symbol "pLevel"
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1112) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1118) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1119) : warning 217: loose indentation
C:\Users\banan\OneDrive\Documentos\BCRP-M.F.R\ELRP\gamemodes\WBRP.pwn(1121) : warning 217: loose indentation
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Unknown disse...

Alinhamento e estar usando uma variável que não existe no caso do "pLevel"

MateusRosaDeAbreu disse...

E pq VC precisa da include dine

Postar um comentário