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; }