03.03.2018, 16:43
Sou iniciante na linguagem pawn, e estou encontrando algumas dificuldades em criar um sistema de salvamento de armas em DOF2.
Problema: Nгo estб alterando (automaticamente) o arquivo "Arma" da pasta scriptfiles/Jogadores, ele sempre fica Arma = 0
Alterei manualmente o nъmero 0 para o id da ъltima arma que eu estava antes de desconectar do servidor e vi que o sistema funcionou, porйm quero que este numero altere automaticamente.
Problema: Nгo estб alterando (automaticamente) o arquivo "Arma" da pasta scriptfiles/Jogadores, ele sempre fica Arma = 0
Alterei manualmente o nъmero 0 para o id da ъltima arma que eu estava antes de desconectar do servidor e vi que o sistema funcionou, porйm quero que este numero altere automaticamente.
Code:
#include <a_samp>
#include <dini>
#include <Double-O-Files_2>
#include <zcmd>
#define DIALOG_LOGAR 1
#define DIALOG_REGISTRO 2
enum pInfo //criando o enum
{
pArma, //Variavel da arma
pSkin, // Variavel da skin
pSenha //Variavel da senha
};
new PlayerInfo[MAX_PLAYERS][pInfo];
new Erro[MAX_PLAYERS];
new Float:pPosX[MAX_PLAYERS], Float:pPosY[MAX_PLAYERS], Float:pPosZ[MAX_PLAYERS], Float:pPosA[MAX_PLAYERS], SpawnarInPos[MAX_PLAYERS], pInterior[MAX_PLAYERS];
new Logado[MAX_PLAYERS];
public OnGameModeExit()
{
DOF2_Exit();
return 1;
}
public OnPlayerConnect(playerid)
{
SpawnarInPos[playerid] = 1;
SetPlayerColor(playerid, 0xFFFFFFFF);
new name[MAX_PLAYER_NAME]; // Cria a variavel de nome
new arquivo[40]; // variavel arquivo
GetPlayerName(playerid, name, 32);//Pega o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // formata a string arquivo e cria um arquivo na pasta "Jogadores"
if(DOF2_FileExists(arquivo)) // se tiver registrado
{
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Login", "Status da conta : Registrada\n digite sua senha para logar!", "Logar", "Cancelar");
}
else // se nao tiver registrado
{
ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new arquivo[40], name[MAX_PLAYER_NAME]; // cria a variavel name com 40 celulas e a variavel Name
GetPlayerName(playerid, name, 32); // Pega o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // Formata o arquivo que existe na pasta Jogadores
if(DOF2_FileExists(arquivo)) // se o arquivo existir
{
DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha do player para o que ele digitou
DOF2_SetInt(arquivo, "Skin", PlayerInfo[playerid][pSkin]); // seta a skin para o id da skin atual
DOF2_SetInt(arquivo, "Arma", PlayerInfo[playerid][pArma]); // seta a 'arma salva' do player
DOF2_SaveFile(); // finalmente salvando o arquivo
}
new pName[MAX_PLAYER_NAME], File[56];
GetPlayerName(playerid, pName, sizeof(pName)); // Pega o Nome (nick) do Player e converte para "pName", assim "pName" = Nick
format(File, 56, "Posiзхes/%s.txt", pName); // Cria o "caminho" atй o local onde serб salvo o Arquivo com a posiзгo do Player
GetPlayerPos(playerid, pPosX[playerid], pPosY[playerid], pPosZ[playerid]); // Pega a Posiзгo do Player em X, Y e Z, e converte para "pPosX", "pPosY" e "pPosZ", respectivamente.
GetPlayerFacingAngle(playerid, pPosA[playerid]); // Pega o Вngulo do Player em A e converte para pPosA, logo pPosA = Вngulo do Player
pInterior[playerid] = GetPlayerInterior(playerid); // Pega o interior do Player, que fica armazenado em pInterior.
if(!DOF2_FileExists(File)) // Checa se a File existe
{
DOF2_CreateFile(File); // Se nгo existir, cria
}
DOF2_SetFloat(File, "PosX", pPosX[playerid]); // Escreve dentro do Arquivo: "PosX = pPosX (posiзгo que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosY", pPosY[playerid]); // Escreve dentro do Arquivo: "PosY = pPosY (posiзгo que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosZ", pPosZ[playerid]); // Escreve dentro do Arquivo: "PosZ = pPosZ (posiзгo que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosA", pPosA[playerid]); // Escreve dentro do Arquivo: "PosA = pPosA (posiзгo que pegamos antes, lembra ?)
DOF2_SetInt(File, "Interior", pInterior[playerid]); // Escreve dentro do Arquivo: "Interior = pInterior (interior que pegamos antes, lembra ?)
DOF2_SaveFile(); // Salva o arquivo.
return 1;
}
public OnPlayerSpawn(playerid)
{
GivePlayerWeapon(playerid, PlayerInfo[playerid][pArma], 999999999); //Dar a 'arma salva' do player quando ele conectar
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // Seta a skin do player quando ele spawnar para a skin salva
new pName[MAX_PLAYER_NAME], File[56];
GetPlayerName(playerid, pName, sizeof(pName)); // Pega o Nome (nick) do Player e converte para "pName", assim "pName" = Nick
format(File, sizeof(File), "Posiзхes/%s.txt", pName); // Cria o "caminho" atй o local onde estб salvo o Arquivo com a posiзгo do Player
if(DOF2_FileExists(File) && SpawnarInPos[playerid] == 1) // SE o Arquivo existir e SE o Player deve ser colocado nas Coordenadas que estava quando deixou o jogo
{
pPosX[playerid] = DOF2_GetFloat(File, "PosX"); //Busca dentro do Arquivo a "PosX" e transforma em "pPosX"
pPosY[playerid] = DOF2_GetFloat(File, "PosY"); //Busca dentro do Arquivo a "PosY" e transforma em "pPosY"
pPosZ[playerid] = DOF2_GetFloat(File, "PosZ"); //Busca dentro do Arquivo a "PosZ" e transforma em "pPosZ"
pPosA[playerid] = DOF2_GetFloat(File, "PosA"); //Busca dentro do Arquivo a "PosA" e transforma em "pPosA"
pInterior[playerid] = DOF2_GetInt(File, "Interior"); //Busca dentro do Arquivo "Interior" e transforma em "pInterior"
SetPlayerPos(playerid, pPosX[playerid], pPosY[playerid], pPosZ[playerid]); // Seta a posiзгo do Player para a que estava no Arquivo
SetPlayerInterior(playerid, pInterior[playerid]);
SetPlayerFacingAngle(playerid, pPosA[playerid]); // Seta o Вngulo do Player para o que estava no arquivo
SetCameraBehindPlayer(playerid); // Coloca a Cвmera atrбs da Skin
SpawnarInPos[playerid] = 0; // Define que o mesmo nгo deve mais ser Spawnado na posiзгo que estб no Arquivo atй Relogar.
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new arquivo[40], name[MAX_PLAYER_NAME]; // criando a string arquivo com 40 celulas e criando a variavel name
GetPlayerName(playerid, name, 32); // pegando o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // formatando o arquivo para a pasta Jogadores
if(dialogid == DIALOG_REGISTRO) // Dialog registro
{
if(!strval(inputtext)) // se ele nao digitar numeros da erro e volta no dialog de registro
{
ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
SendClientMessage(playerid, -1, "[BBS] Erro, Digite apenas nъmeros para se registrar.");
return 1;
}
if(!response) //se ele apertar o botao Cancelar, kicka ele !
{
Kick(playerid);
return 1;
}
else // se ele colocar a senha certa cria os arquivos
{
PlayerInfo[playerid][pSenha] = strval(inputtext); // pega a senha que ele digitou no campo do dialog
DOF2_CreateFile(arquivo); // cria o arquivo na pasta Jogadores
DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha para a que ele digitou no dialog
DOF2_SetInt(arquivo, "Skin", 170); // seta a skin dele para 170, podendo mudar para qualquer numero.
DOF2_SetInt(arquivo, "Arma", PlayerInfo[playerid][pArma]); // Dar as armas que ele tinha antes
DOF2_SaveFile(); // salva o arquivo
SendClientMessage(playerid, -1, "[BBS] Sua Conta foi Registrada, Agora digite sua senha novamente para logar!");
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Login", "Status da conta : Registrada\n digite sua senha para logar!", "Logar", "Cancelar");
}
}
if(dialogid == DIALOG_LOGAR)
{
if(!strval(inputtext)) // se ele nao digitar apenas numeros volta o dialog de login
{
SendClientMessage(playerid, -1, "Erro, Digite apenas nъmeros para se logar.");
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
return 1;
}
if(!response) // se ele clickar em Cancelar kicka ele !
{
Kick(playerid);
return 1;
}
else // Se ele colocar a senha certa
{
PlayerInfo[playerid][pSenha] = DOF2_GetInt(arquivo, "Senha"); // pega a senha salva dele
if(strval(inputtext) == PlayerInfo[playerid][pSenha]) // pega a senha que ele digitou
{
PlayerInfo[playerid][pArma] = DOF2_GetInt(arquivo, "Arma"); // pega a arma do player
PlayerInfo[playerid][pSkin] = DOF2_GetInt(arquivo, "Skin"); // pega a skin do player
GivePlayerWeapon(playerid, PlayerInfo[playerid][pArma],999999999); // Dar as 'armas salvas' do player
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // seta a skin do player para a skin salva
SetSpawnInfo (playerid, 0, 170, 2092.49609375, -1555.73583984, 13.10235691, 179.19059753, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid); // em seguida, spawna o player
}
else // se ele errar a senha mostra o dialog denovo
{
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
Erro[playerid]++; // e adiciona 1 erro
if(Erro[playerid] == 5) // se ele errar 5 vezes ele serб banido !
{
SendClientMessage(playerid, -1, "Sua conta estб banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
Ban(playerid);
return 1;
}
}
}
}
return 1;
}
stock ReturnPlayer(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}


