[Tutorial] Salvar Posiзгo do Player quando ele deslogar.
#1

Olб a todos, venho fazer o meu segundo tutorial aqui no fуrum, o primeiro nгo deu muito certo, vamos ver se consigo mudar o rumo da coisa '-'.

Bom, no tutorial de hoje estarei ensinando como armazenar a Posiзгo do Player quando ele desconectar do Servidor e como setб-la novamente quando ele se conectar, o cуdigo completo (para melhor visualizaзгo) estб no fim do tutorial..

Antes de comeзar, gostaria de deixar claro que, buscando por este assunto no fуrum sу encontrei dъvidas a respeito e um FilterScript do rjjj, mas como o meu й tutorial e usa DOF2 e nгo dini decidi postar mesmo assim, espero que nгo tenha problema, se um tutorial assim jб existe, por favor, me avise nos comentбrios ou via MP, muito grato !

Vamos ao que interessa ? ^^

Includes Necessбrias

a_samp - Crйditos a SAMP Team

DOF2 - Nгo me lembro quem foi o autor, atй porque nгo encontrei o tуpico oficial, se alguйm puder me passar eu ficaria grato.

Lembrando que as Includes que eu disponibilizei sгo para a versгo 0.3x do SAMP, se vocк usa uma versгo diferente procure atualizб-las.



Cуdigo e Explicaзхes:

Topo do GameMode/FilterScript

pawn Code:
#include <a_samp>
#include <DOF2>
Abaixo das Includes e Defines:

pawn Code:
new Float:pPosX[MAX_PLAYERS], Float:pPosY[MAX_PLAYERS], Float:pPosZ[MAX_PLAYERS], Float:pPosA[MAX_PLAYERS], SpawnarInPos[MAX_PLAYERS], pInterior[MAX_PLAYERS];
Explicaзгo:

"Float:" - Float й usada para valores inteiros e nгo inteiros.
"pPosX", "pPosY", "pPosZ", "pPosA" - Armazenaram as coordenadas (A = Вngulo)
"pInterior" - Armazenarб o Interior do mesmo.
"SpawnarInPos" - Tem como traduзгo literal "Spawnar na Posiзгo". Dirб se й a Primeira vez que o Player Spawna (serve para que o Player sу seja colocado na posiзгo salva na primeira vez que Spawnar).



public OnPlayerConnect(playerid)

pawn Code:
SpawnarInPos[playerid] = 1;
Explicaзгo:

Colocarб o valor de "SpawnInPos" para 1, assim significando que sim, que o mesmo deverб Spawnar na posiзгo salva.



OnPlayerDisconnect

pawn Code:
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.
Explicaзгo:

Estб no prуprio cуdigo.



public OnFilterScriptExit()//OnGameModeExit()

pawn Code:
DOF2_Exit();
Explicaзгo:

"Saнda" do DOF2, se nгo colocar darб erro/warning.



public OnPlayerSpawn(playerid)

pawn Code:
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, pInterio[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
        SendClientMessage(playerid, -1, "Vocк foi teleportado para o local onde estava antes de sair do jogo pela ъltima vez."); // Manda a ele uma mensagem
        SpawnarInPos[playerid] = 0; // Define que o mesmo nгo deve mais ser Spawnado na posiзгo que estб no Arquivo atй Relogar.
    }
Explicaзгo:

Estб no prуprio cуdigo.



Observaзхes

› A Include "DOF2" foi usada somente no Salvamento dos Dados, porйm, sem ela o cуdigo nгo funcionarб
› Como eu jб disse, havia um FilterScript que fazia isso, mas o mesmo nгo continha nenhuma informaзгo de como faze-lo.



› Espero que todos tenham gostado do tutorial, e que o mesmo possa ser ъtil para alguйm ('0'), qualquer erro que eu tenha cometido, favor informar nos comentбrios ou via PM (MP). Ficou um cуdigo bem curto e simples, mas acredito que vб ser ъtil para alguйm (assim espero '-').



Cуdigo Completo:

PasteBin



Crйditos

› [THS]ShadoW ( ou Graf_Spee ) - Criaзгo e postagem do tutorial.

Forte abraзo a todos..

Att. [THS]ShadoW (Graf_Spee)

Direitos Autorais
Reply
#2

muito bom уtimo pra que estб iniciando
Reply
#3

Quote:
Originally Posted by Caio_Freeze
View Post
muito bom уtimo pra que estб iniciando
Obrigado, bom que gostou ^^
Reply
#4

Muito bom ! Andava a procura de um ! ++REP
Reply
#5

"You must spread some Reputation around before giving it to DarckWilly again." DD:

Mas obrigado mesmo assim
Reply
#6

Esqueceu o:

PHP Code:
DOF2_Save(); 
Reply
#7

Quote:
Originally Posted by JonathanFeitosa
View Post
Esqueceu o:

PHP Code:
DOF2_Save(); 
Sу um detalhe:
pawn Code:
DOF2_SaveFile();
Reply
#8

Quote:
Originally Posted by Schocc
View Post
Sу um detalhe:
pawn Code:
DOF2_SaveFile();
Valeu', ando esquecendo as funзхes ultimamente.
Reply
#9

Obrigado aos 2, @Arrumado
Reply
#10

Teria como por os cуdigos dentro de [pawn*][/pawn*] ou [*php] [/php*]

Parabйns , уtimo tutorial :]
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)