SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 03/03/2018, 04:43 PM   #1
FilipiMelo
Big Clucker
 
FilipiMelo's Avatar
 
Join Date: Nov 2016
Location: Vila do Sr. Barriga
Posts: 66
Reputation: 0
Default Sistema de salvar armas

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.

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;
}
FilipiMelo is offline   Reply With Quote
Old 03/03/2018, 05:42 PM   #2
GuiKommander
Gangsta
 
GuiKommander's Avatar
 
Join Date: Dec 2016
Posts: 827
Reputation: 25
Default Re: Sistema de salvar armas

Uma das Maneiras é essa..
PHP Code:
#include <a_samp>
#include <DOF2>

enum PlayerInfo
{
    
Slot_1,
    
Balas_Slot1
}
new 
pInfo[MAX_PLAYERS][PlayerInfo];

public 
OnPlayerConnect(playerid)
{
    
SetSpawnInfo(playerid0pInfo[playerid][Skin], XYZTpInfo[playerid][Slot_1], pInfo[playerid][Balas_Slot1], pInfo[playerid][Slot_2], pInfo[playerid][Balas_Slot2], pInfo[playerid][Slot_3], pInfo[playerid][Balas_Slot3]); // Uma das Maneiras é essa.
    
SpawnPlayer(playerid);
    return 
1;

http://wiki.sa-mp.com/wiki/SetSpawnInfo
GuiKommander is offline   Reply With Quote
Old 03/03/2018, 06:36 PM   #3
FilipiMelo
Big Clucker
 
FilipiMelo's Avatar
 
Join Date: Nov 2016
Location: Vila do Sr. Barriga
Posts: 66
Reputation: 0
Default Re: Sistema de salvar armas

Ai complica porque tenho um sistema de salvar as coordenadas e skin, quero apenas acrescentar nesse sistema o salvamento dos armamentos...
FilipiMelo is offline   Reply With Quote
Old 03/03/2018, 07:43 PM   #4
InsaneBR
Big Clucker
 
InsaneBR's Avatar
 
Join Date: Feb 2018
Posts: 104
Reputation: 8
Default Re: Sistema de salvar armas

Dê uma olhada neste tópico:

http://forum.sa-mp.com/showthread.php?t=167857
InsaneBR is offline   Reply With Quote
Old 06/03/2018, 01:18 AM   #5
FilipiMelo
Big Clucker
 
FilipiMelo's Avatar
 
Join Date: Nov 2016
Location: Vila do Sr. Barriga
Posts: 66
Reputation: 0
Default Re: Sistema de salvar armas

Desculpe, mas, precisava mesmo, é entender esse sistema, e não dar Ctrl+C e Ctrl+V de um FS...
FilipiMelo is offline   Reply With Quote
Old 06/03/2018, 01:22 AM   #6
InsaneBR
Big Clucker
 
InsaneBR's Avatar
 
Join Date: Feb 2018
Posts: 104
Reputation: 8
Default Re: Sistema de salvar armas

Quote:
Originally Posted by FilipiMelo View Post
Desculpe, mas, precisava mesmo, é entender esse sistema, e não dar Ctrl+C e Ctrl+V de um FS...
Estude-o e entenderá a lógica usada no mesmo, essa foi a minha intenção em fornecer o link para você.
InsaneBR is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Pedido] FS de Salvar Armas Agamaster Português/Portuguese 0 09/12/2013 04:57 PM
[Pedido] Alguem passa um sistema de armas por comando /armas ? Obrigado! alexandrepr9 Português/Portuguese 4 14/08/2012 02:35 AM
[AJUDA]Sistema de Salvar Armas e Munições Nake01 Português/Portuguese 9 25/07/2011 04:35 PM
[FilterScript] [FS]Sistema de salvar armas ::Caio:: Lançamentos/Releases 23 15/03/2011 12:20 AM
[Ajuda] Sistema de salvar armas! Krypton Português/Portuguese 5 07/02/2010 04:17 PM


All times are GMT. The time now is 11:16 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.