Portal SAMP
[Ajuda] Sistema de respawn - 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] Sistema de respawn (/showthread.php?tid=4241)

Páginas: 1 2


Sistema de respawn - Whaispe - 27/11/2023

public OnPlayerDeath(playerid, killerid, reason)
{
    if(g_InArena[playerid])
    {
        SCM(playerid, -1, "Respawnando");
        }
        if(g_ArenaType[playerid] == M4_ARENA)
        {
            new spawn = random(sizeof(SRandom));
               SetPlayerPos(playerid, SRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2]);
               SetPlayerArmour(playerid, 100.0);
            SetPlayerHealth(playerid, 100.0);
        }
        if(g_ArenaType[playerid] == DESERT_ARENA)
        {
            new spawn = random(sizeof(SRandomDESERT));
               SetPlayerPos(playerid, SRandomDESERT[spawn][0], SRandomDESERT[spawn][1], SRandomDESERT[spawn][2]);
               SetPlayerArmour(playerid, 100.0);
            SetPlayerHealth(playerid, 100.0);
    }
    return 1;
}

Eu coloquei este sistema de quando vc morrer renascer na arena, não está dando nenhum Erro apenas dentro do jogo, quando vc morre aparece a mensagem tal soque invés de vc ser respawn pra arena vc é Respawnado para o spawn principal


RE: Sistema de respawn - MarcosBrazz - 27/11/2023

OnPlayerDeath é chamado enquanto ainda está morto, logo não é possivel setar a posição do player. Coloque o código na OnPlayerSpawn e faça os testes. Lembre-se de se certificar de que apenas esse código seja chamado (Usando return 1), para não houver outros códigos por cima e teleporte o jogador para outros lugares.


RE: Sistema de respawn - xbruno1000x - 27/11/2023

MarcosBrazz já deu a solução pro seu problema, colocando esse código na OnPlayerSpawn deve funcionar.


RE: Sistema de respawn - Whaispe - 27/11/2023

(27/11/2023 20:23)MarcosBrazz Escreveu: OnPlayerDeath é chamado enquanto ainda está morto, logo não é possivel setar a posição do player. Coloque o código na OnPlayerSpawn e faça os testes. Lembre-se de se certificar de que apenas esse código seja chamado (Usando return 1), para não houver outros códigos por cima e teleporte o jogador para outros lugares.

Não funcionou infelizmente


RE: Sistema de respawn - White_Blue - 27/11/2023

Use a função SetSpawnInfo ao invés da função SetPlayerPos.

Código PHP:
public OnPlayerDeath(playeridkilleridreason) {
    if(g_InArena[playerid]) {
        SendClientMessage(playerid, -1"Respawnando");
    }
    else if(g_ArenaType[playerid] == M4_ARENA) {
        new spawn random(sizeof(SRandom));
        SetSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    else if(g_ArenaType[playerid] == DESERT_ARENA) {
        new spawn random(sizeof(SRandomDESERT));
        SetSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    return 1;




RE: Sistema de respawn - Whaispe - 27/11/2023

(27/11/2023 21:49)White_Blue Escreveu: Use a função SetSpawnInfo ao invés da função SetPlayerPos.

Código PHP:
public OnPlayerDeath(playeridkilleridreason) {
    if(g_InArena[playerid]) {
        SendClientMessage(playerid, -1"Respawnando");
    }
    else if(g_ArenaType[playerid] == M4_ARENA) {
        new spawn random(sizeof(SRandom));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    else if(g_ArenaType[playerid] == DESERT_ARENA) {
        new spawn random(sizeof(SRandomDESERT));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    return 1;


Vix mano eu tentei tbm soque tive que mudar o SetPlayerSpawnInfo pois estava dando error


RE: Sistema de respawn - Cifra Modder - 27/11/2023

(27/11/2023 22:00)Whaispe Escreveu:
(27/11/2023 21:49)White_Blue Escreveu: Use a função SetSpawnInfo ao invés da função SetPlayerPos.

Código PHP:
public OnPlayerDeath(playeridkilleridreason) {
    if(g_InArena[playerid]) {
        SendClientMessage(playerid, -1"Respawnando");
    }
    else if(g_ArenaType[playerid] == M4_ARENA) {
        new spawn random(sizeof(SRandom));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    else if(g_ArenaType[playerid] == DESERT_ARENA) {
        new spawn random(sizeof(SRandomDESERT));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    return 1;


Vix mano eu tentei tbm soque tive que mudar o SetPlayerSpawnInfo pois estava dando error

 o jeito recomendado mesmo e por na callback OnPlayerSpawn, pos quando o player morrer, se eu nao me engano a callback OnPlayerSpawn e chamada para setar um spawn para o jogador. verifique se as variaveis estao corretas tambem.


RE: Sistema de respawn - zBreno - 27/11/2023

set player pos não funciona no evento de morte do jogador, você só pode usar isso quando o jogador ainda ta vivo pra mudar a posição dele, isso que você ta fazendo é a mesma coisa que as pessoas fazem pra mandar o jogador pro hospital de acordo com o local onde o jogador morreu, use o plugin streamer pra pegar a área onde o jogador morreu e o set spawn info pra mandar ele pra onde você quer

https://bitbucket.org/Grimrandomer/samp-zone-editor/downloads/SAMP_Zone_Editor_1.0.0.6.exe


RE: Sistema de respawn - Whaispe - 27/11/2023

(27/11/2023 22:18)zBreno Escreveu: set player pos não funciona no evento de morte do jogador, você só pode usar isso quando o jogador ainda ta vivo pra mudar a posição dele, isso que você ta fazendo é a mesma coisa que as pessoas fazem pra mandar o jogador pro hospital de acordo com o local onde o jogador morreu, use o plugin streamer pra pegar a área onde o jogador morreu e o set spawn info pra mandar ele pra onde você quer

https://bitbucket.org/Grimrandomer/samp-zone-editor/downloads/SAMP_Zone_Editor_1.0.0.6.exe

Dei um jeito aki botei setspawninfo e não foi, testei na public PlayerDeath e PlayerSpawn tbm

(27/11/2023 22:16)Cifra Modder Escreveu:
(27/11/2023 22:00)Whaispe Escreveu:
(27/11/2023 21:49)White_Blue Escreveu: Use a função SetSpawnInfo ao invés da função SetPlayerPos.

Código PHP:
public OnPlayerDeath(playeridkilleridreason) {
    if(g_InArena[playerid]) {
        SendClientMessage(playerid, -1"Respawnando");
    }
    else if(g_ArenaType[playerid] == M4_ARENA) {
        new spawn random(sizeof(SRandom));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    else if(g_ArenaType[playerid] == DESERT_ARENA) {
        new spawn random(sizeof(SRandomDESERT));
        SetPlayerSpawnInfo(playeridSRandom[spawn][0], SRandom[spawn][1], SRandom[spawn][2], 0.0000000);
        SetPlayerArmour(playerid100.0);
        SetPlayerHealth(playerid100.0);
    }
    return 1;


Vix mano eu tentei tbm soque tive que mudar o SetPlayerSpawnInfo pois estava dando error

 o jeito recomendado mesmo e por na callback OnPlayerSpawn, pos quando o player morrer, se eu nao me engano a callback OnPlayerSpawn e chamada para setar um spawn para o jogador. verifique se as variaveis estao corretas tambem.

enum ArenaType
{
    DESERT_ARENA,
    M4_ARENA
};

new Float:SRandom[][3] =
{
    {268.4812, 185.2742, 1008.1719},
    {288.7050, 169.1827, 1007.1719},
    {246.2589, 196.5596, 1008.1719},
    {231.1914, 144.5740, 1003.0234},
    {205.4314, 175.3142, 1003.0326},
    {205.4314, 175.3142, 1003.0326}
};

As variável acho que estão certa


RE: Sistema de respawn - Aranha - 28/11/2023

esta setando o player quando entra na arena?

Código:
new Float:SRandom[6][3] =
{
    {268.4812, 185.2742, 1008.1719},
    {288.7050, 169.1827, 1007.1719},
    {246.2589, 196.5596, 1008.1719},
    {231.1914, 144.5740, 1003.0234},
    {205.4314, 175.3142, 1003.0326},
    {205.4314, 175.3142, 1003.0326}
};


g_ArenaType[playerid] = M4_ARENA;