[Ajuda] Conflito
#1

Boa noite pessoal, estava programando e me deparei com um problema ...

Sinceramente buguei em como posso arrumar kkk ...

Bom, meu registro possui 3 Stocks elas sгo

CarregarPlayer ( Quando o player loga, carrega os dados dele )

SalvarPlayer ( Quando o player termina o registro, й salvo os dados dele jah pela primeira vez, isso й para evitar ele perde algum dado caso o servidor esteja caindo ! )

UltimaPosicao ( A UltimaPosicao eh quando o player loga serve para mandar ele pra ultima posiзгo que ele deslogou )

Essa stock ira ficar assim ...
PHP код:
public OnPlayerSpawn(playerid)
{
UltimaPosicao(playerid);
return 
1;

isso chama a seguinte stock que й esta ...

PHP код:
stock UltimaPosicao(playerid)
{
      
      if(
DOF2_FileExists(ContaPlayer(playerid)))
{
        
pPosX[playerid] = DOF2_GetFloat(ContaPlayer(playerid), "PosX"); //Busca dentro do Arquivo a "PosX" e transforma em "pPosX"
        
pPosY[playerid] = DOF2_GetFloat(ContaPlayer(playerid), "PosY"); //Busca dentro do Arquivo a "PosY" e transforma em "pPosY"
        
pPosZ[playerid] = DOF2_GetFloat(ContaPlayer(playerid), "PosZ"); //Busca dentro do Arquivo a "PosZ" e transforma em "pPosZ"
        
pPosA[playerid] = DOF2_GetFloat(ContaPlayer(playerid), "PosA"); //Busca dentro do Arquivo a "PosA" e transforma em "pPosA"
        
pInterior[playerid] = DOF2_GetInt(ContaPlayer(playerid), "Interior"); //Busca dentro do Arquivo "Interior" e transforma em "pInterior"
        
SetPlayerPos(playeridpPosX[playerid],  pPosY[playerid], pPosZ[playerid]); // Seta a posiзгo do Player para a que estava no Arquivo
        
SetPlayerInterior(playeridpInterior[playerid]);
        
SetPlayerFacingAngle(playeridpPosA[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."); 
        
SpawnarInPos[playerid] = 0// Define que o mesmo nгo deve mais ser Spawnado na posiзгo que estб no Arquivo atй Relogar.
        
SetPlayerSkin(playeridDOF2_GetInt(ContaPlayer(playerid),"Skin"));
}

Sу que quando o player se registra, й para ele spawnar nessa coordenada >>
PHP код:
SetSpawnInfo(playerid00388.0107,-1525.8547,32.2734,237.9921000000); 
porem em public OnPlayerSpawn(playerid) й chamado a stock >> UltimaPosicao e acaba dando conflito e o player nгo tem nenhuma posiзгo ainda salva, pois acabou de criar a acc, e eh spawnado no meio do nada, pois buga as coordenadas e spawna no lugar de onde toda GM do 0 comeзa ... aqui >> https://imgur.com/a/rcV3dX4
sendo que era pra ele ir na HQ de novato ...

Como posso estar resolvendo isso? Jб tentei por level tipo

Se o player for level inferior a 1 nгo й chamado a UltimaPosiзгo e ele sempre spawnara no Spawn de novato, se ele for level maior que 1 chamara a UltimaPosiзгo mais provavelmente por burrice minha o cуdigo deu uns erros, e quando n deu erro, n deu certo ... mas foi essa a maneira que achei atй no momento ... Alguйm poderia ajudar?
Reply
#2

Eu já fiz isso uma vez e sempre deu certo colocando no Login. Eu acho que eu colocava SetSpawnInfo mesmo.

@ Edit

Veja também se no seu SalvarConta(playerid) ta pegando as posições dele e setando com DOF2

PHP код:
//    Login:
if(dialogid == LOGIN)
{
    if(
response)
    {
        
//    ...
        
Player[playerid][pX] = DOF2::GetFloat(Conta(playerid), "X");
        
Player[playerid][pY] = DOF2::GetFloat(Conta(playerid), "Y");
        
Player[playerid][pZ] = DOF2::GetFloat(Conta(playerid), "Z");
        
Player[playerid][pA] = DOF2::GetFloat(Conta(playerid), "A");
        
SetSpawnInfo(playerid0Player[playerid][Skin], Player[playerid][pX], Player[playerid][pY], Player[playerid][pZ], Player[playerid][pA], 000000);
    }
    return 
1;
}
//    Savando conta (posição no caso abaixo) apos disconectar:
SalvarConta(playerid)
{
    
GetPlayerPos(playeridPlayer[playerid][pX], Player[playerid][pY], Player[playerid][pZ]);
    
GetPlayerFacingleAngle(playeridPlayer[playerid][pA]);
    if(
Player[playerid][Logado] == true)
    {
        
DOF2::SetFloat(File"PosX"Player[playerid][pX]);
        
DOF2::SetFloat(File"PosY"Player[playerid][pY]);
        
DOF2::SetFloat(File"PosZ"Player[playerid][pZ]);
        
DOF2::SetFloat(File"PosA"Player[playerid][pA]);
        
DOF2::SaveFile();
    }
    return 
1;

So colocar o interior no meio ae '-'
Reply
#3

Quote:
Originally Posted by AutoMatic2
Посмотреть сообщение
Eu jб fiz isso uma vez e sempre deu certo colocando no Login. Eu acho que eu colocava SetSpawnInfo mesmo.

@ Edit

Veja tambйm se no seu SalvarConta(playerid) ta pegando as posiзхes dele e setando com DOF2

PHP код:
SalvarConta(playerid)
{
    new 
Float:Pos[4];
    
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]);
    
GetPlayerFacingleAngle(playeridPos[3]);
    if(
Player[playerid][Logado] == true)
    {
        
DOF2::SetFloat(File"PosX"Pos[0]);
        
DOF2::SetFloat(File"PosY"Pos[1]);
        
DOF2::SetFloat(File"PosZ"Pos[2]);
        
DOF2::SetFloat(File"PosA"Pos[3]);
        
DOF2::SaveFile();
    }
    return 
1;

Opa, muito obrigado pela a resposta, mas consegui resolver o problema agorinha do conflito fazendo uma verificaзгo por level

aqui esta o cуdigo ...

PHP код:
public OnPlayerSpawn(playerid)
{
  if(
GetPlayerScore(playerid) > 1)
  {
  
UltimaPosicao(playerid);
  return 
1;
  }
  else if(
GetPlayerScore(playerid) < 1) return SendClientMessage(playerid, -1"Bem Vindo ao servidor");
  return 
1;

Reply
#4

Quote:

Opa, muito obrigado pela a resposta, mas consegui resolver o problema agorinha do conflito fazendo uma verificaзгo por level

aqui esta o cуdigo ...

Boa!

Eu uso no Login mesmo e nunca tive problemas não sei se no OnPlayerSpawn vai certo sem "bugs" :v

@ :/

Meu forum ta em russo ta uma mrd fica traduzindo e algumas vezes fica cortando. Então se tiver algo importante foi mal!
Reply
#5

Quote:
Originally Posted by AutoMatic2
Посмотреть сообщение
Boa!

Eu uso no Login mesmo e nunca tive problemas nгo sei se no OnPlayerSpawn vai certo sem "bugs" :v

@ :/

Meu forum ta em russo ta uma mrd fica traduzindo e algumas vezes fica cortando. Entгo se tiver algo importante foi mal!
Bom, eu sempre abaixo umas GM Mйdia/Grande em questхes de linhas para estudar e jб vi que algumas pessoas que colocaram as coisas para setar como level prof grana etc no OnPlayerSpawn ... creio eu que nгo de bugs ...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)