Portal SAMP
[Ajuda] OnPlayerRequestClass - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] OnPlayerRequestClass (/showthread.php?tid=2924)

Páginas: 1 2


OnPlayerRequestClass - tylerthecreator - 24/10/2022

Estou tentando desativar a chamada da OnPlayerRequestClass, após a morte do jogador(OnPlayerDeath), quero acionar apenas a OnPlayerSpawn.

Sei que é possível, pois já vi, mas não estou encontrando o método. 
Já tentei utilizar o SetSpawnInfo, mas não adiantou...

Alguém tem alguma ideia?


RE: OnPlayerRequestClass - White_Blue - 24/10/2022

Código PHP:
new bool:Morreu[MAX_PLAYERS] = false;
public 
OnPlayerDeath(playeridkilleridreason) {
   if(
playerid != INVALID_PLAYER_ID) {
     
Morreu[playerid] = true;
   }
   return 
1;
}

public 
OnPlayerSpawn(playerid) {
   if(
Morreu[playerid] == true) {
      
SetSpawnInfo(playerid001958.331343.1215.36269.15000000);
      
Morreu[playerid] = false;
   }
   return 
1;

Tenta como no código acima.


RE: OnPlayerRequestClass - tylerthecreator - 24/10/2022

(24/10/2022 19:50)White_Blue Escreveu:
Código PHP:
new bool:Morreu[MAX_PLAYERS] = false;
public 
OnPlayerDeath(playeridkilleridreason) {
   if(playerid != INVALID_PLAYER_ID) {
     Morreu[playerid] = true;
   }
   return 1;
}

public 
OnPlayerSpawn(playerid) {
   if(Morreu[playerid] == true) {
      SetSpawnInfo(playerid001958.331343.1215.36269.15000000);
      Morreu[playerid] = false;
   }
   return 1;

Tenta como no código acima.
Obrigado pela resposta, White. Tentei, mas continua acionando a OnPlayerRequestClass após a morte.


RE: OnPlayerRequestClass - White_Blue - 24/10/2022

(24/10/2022 22:48)tylerthecreator Escreveu:
(24/10/2022 19:50)White_Blue Escreveu:
Código PHP:
new bool:Morreu[MAX_PLAYERS] = false;
public 
OnPlayerDeath(playeridkilleridreason) {
   if(playerid != INVALID_PLAYER_ID) {
     Morreu[playerid] = true;
   }
   return 1;
}

public 
OnPlayerSpawn(playerid) {
   if(Morreu[playerid] == true) {
      SetSpawnInfo(playerid001958.331343.1215.36269.15000000);
      Morreu[playerid] = false;
   }
   return 1;

Tenta como no código acima.
Obrigado pela resposta, White. Tentei, mas continua acionando a OnPlayerRequestClass após a morte.
Se você não quer que a callback seja acionada, suponho que assim resolverá.

Código PHP:
public OnPlayerRequestClass(playeridclassid) {
    if(
Morreu[playerid] == true) return 1;
    return 
1;




RE: OnPlayerRequestClass - tylerthecreator - 25/10/2022

(24/10/2022 23:04)White_Blue Escreveu:
(24/10/2022 22:48)tylerthecreator Escreveu:
(24/10/2022 19:50)White_Blue Escreveu:
Código PHP:
new bool:Morreu[MAX_PLAYERS] = false;
public 
OnPlayerDeath(playeridkilleridreason) {
   if(playerid != INVALID_PLAYER_ID) {
     Morreu[playerid] = true;
   }
   return 1;
}

public 
OnPlayerSpawn(playerid) {
   if(Morreu[playerid] == true) {
      SetSpawnInfo(playerid001958.331343.1215.36269.15000000);
      Morreu[playerid] = false;
   }
   return 1;

Tenta como no código acima.
Obrigado pela resposta, White. Tentei, mas continua acionando a OnPlayerRequestClass após a morte.
Se você não quer que a callback seja acionada, suponho que assim resolverá.

Código PHP:
public OnPlayerRequestClass(playeridclassid) {
    if(Morreu[playerid] == true) return 1;
    return 1;


Infelizmente não funcionou. 

O meu problema é exatamente esse aqui, que esse rapaz mencionou há alguns anos atrás:

https://sampforum.blast.hk/showthread.php?tid=645573&pid=3961370#pid3961370

https://sampforum.blast.hk/showthread.php?tid=645617&pid=3961633#pid3961633

A questão é a primeira morte, ela chama a OnPlayerRequest primeiro que a OnPlayerSpawn.
Já coloquei SpawnPlayer na callback, deu um jeito, mas ficou meio gambiarra, pois a callback OnPlayerSpawn é chamada duas vezes.

Existe uma forma pular a OnPlayerRequest após a morte, sem forçar o "SpawnPlayer", já vi numa GM, mas acabei perdendo e não soube como eles fizeram.


RE: OnPlayerRequestClass - xbruno1000x - 25/10/2022

Já tentou usar a include Weapon Config? Com ela a programação do SA-MP é burlada para criar um sistema de vida server-side, e consequentemente não chama a public OnPlayerDeath.

Acho que talvez valha a pena testar, pode ser que resolva.


RE: OnPlayerRequestClass - tylerthecreator - 25/10/2022

(25/10/2022 01:47)xbruno1000x Escreveu: Já tentou usar a include Weapon Config? Com ela a programação do SA-MP é burlada para criar um sistema de vida server-side, e consequentemente não chama a public OnPlayerDeath.

Acho que talvez valha a pena testar, pode ser que resolva.

Já sim, porém a mesma não me agradou, optei por criar um próprio sistema de dano mais simples.


RE: OnPlayerRequestClass - Carlos Victor - 25/10/2022

Código:
public OnPlayerRequestClass(playerid, classid) {
    if(IsPlayerLogged[playerid])
        return SpawnPlayer(playerid);

    return 1;
}
Tente isso, não sei se irá solucionar o problema, mas teoricamente caso o jogador estiver logado e essa callback ser chamada, ele deveria ser spawnado.


RE: OnPlayerRequestClass - Device-Black - 25/10/2022

OnPlayerRequestClass sendo chamada após OnPlayerDeath?
Procure por ForceClassSelection e desative-o

OnPlayerRequestClass só deve ser chamado uma vez ao entrar no servidor e se for forçado pela função ForceClassSelection


RE: OnPlayerRequestClass - tylerthecreator - 25/10/2022

(25/10/2022 07:34)Carlos Victor Escreveu:
Código:
public OnPlayerRequestClass(playerid, classid) {
    if(IsPlayerLogged[playerid])
        return SpawnPlayer(playerid);

    return 1;
}
Tente isso, não sei se irá solucionar o problema, mas teoricamente caso o jogador estiver logado e essa callback ser chamada, ele deveria ser spawnado.

Então, como mencionei num post acima, dessa forma funciona, estou usando assim por enquanto, mas não acho tão legal, pois é uma gambiarra e a OnPlayerSpawn é chamada duas vezes, podendo ocasionar crash's dependendo da circunstância.

(25/10/2022 09:15)Device-Black Escreveu: OnPlayerRequestClass sendo chamada após OnPlayerDeath?
Procure por ForceClassSelection e desative-o

OnPlayerRequestClass só deve ser chamado uma vez ao entrar no servidor e se for forçado pela função ForceClassSelection

Então, até pensei nisso, vasculhei em tudo e nada encontrado relacionado essa função. Sad