Portal SAMP
[Ajuda] SetSpawnInfo com bugs - 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] SetSpawnInfo com bugs (/showthread.php?tid=4969)



SetSpawnInfo com bugs - fear - 02/02/2025

boa tarde. eu to com um problema que quando eu morro o player vai para outro spawn ao invez do spawn do mundo que ele morreu no caso

tipo tu morre no mundo academy como policial ao invez de nascer novamente no spawn policial nasce no spawn drift.. e assim esta nos outros mundos..

codigo:

Código PHP:
onPlayerSpawnEx(playerid) {
    
TogglePlayerSpectating(playerid0);
    
SetPlayerSkin(playeridPlayerInfo[playerid][skin]);
    
SendClientMessage(playeridVermelho"| ZONE - INFO | {FFFFFF}Desative o chat global {FFFF00}/Chatoff {FFFFFF}e ative usando o mesmo comando!");

    switch(
PlayerInfo[playerid][modo])
    {
        case 
0:
        {
            
SetSpawnInfo(playerid,0,PlayerInfo[playerid][skin],1550.8917,-1675.4390,15.6071,97.6708,0,0,0,0,0,0); //spawn policia
            
SetPlayerVirtualWorld(playerid,1001);
        }
        case 
1:
        {    
            
SetSpawnInfo(playerid0,PlayerInfo[playerid][skin],1158.3031,-2036.9834,69.0078,269.8741,0,0,0,0,0,0); //spawn bandido
            
SetPlayerVirtualWorld(playerid,1001);
        }
        case 
2:
        {
            
SetSpawnInfo(playerid0,PlayerInfo[playerid][skin],357.7206,2019.4861,22.6406,125.4410,0,0,0,0,0,0); //Spawn PVP
            
SetPlayerVirtualWorld(playerid,1002);
        }
        case 
3:
        {
            
SetSpawnInfo(playerid0,PlayerInfo[playerid][skin], -305.2488,1528.8973,75.3594,183.5718,0,0,0,0,0,0); //Spawn Drift
            
SetPlayerVirtualWorld(playerid,1003);
            new 
interior GetPlayerInterior(playerid);
            
LinkVehicleToInterior(PegarCarro[playerid],interior);
            
SetVehicleVirtualWorld(PegarCarro[playerid] ,GetPlayerVirtualWorld(playerid));
            
PutPlayerInVehicle(playerid,PegarCarro[playerid], 0);
            
OptDrift(playerid);
        }
        case 
4:SetSpawnInfo(playerid0,PlayerInfo[playerid][skin],384.5423,-2081.4946,7.83596.1472,0,0,0,0,0,0);
    }

Código PHP:
if(dialogid == DIALOG_PMVSLADRAO)
    {
        


        if(
response)
        {
            


            switch(
listitem)
            {
                


                case 
0:
                {
                    


                    
onPlayerSpawnEx(playerid);
                    switch(
PlayerInfo[playerid][modo])
                    {
                        


                        case 
1:academy-=1;
                        case 
2:pvp-=1;
                        case 
3:drift-=1;
                        case 
4:fuga-=1;
                    }
                    
fuga+=1;
                    
PlayerInfo[playerid][modo]=1;
                    
PlayerInfo[playerid][cargo]=1;

                    
SendClientMessageToAll(0x9ACD32FF,"| MUNDOS | %s[%d] entrou no Mundo Academy! {FFFFFF}- ( /Mundos )",pName[playerid],playerid);
                    
SetPVarInt(playerid,"FloodModos",gettime()+15);
                    
SendClientMessage(playerid,0x9ACD32FF,"| MUNDOS | {FFFFFF}Agora voce faz parte da Equipe de {1E90FF}Policiais {FFFFFF}do servidor!");


                    
TogglePlayerSpectating(playerid0);
                    
SetCameraBehindPlayer(playerid);
                    
SetPlayerPos(playerid,1550.8917,-1675.4390,15.6071);
                    
SetPlayerFacingAngle(playerid,97.6708);
                    
SetCameraBehindPlayer(playerid);

                    
SetPlayerHealth(playerid100);
                    
SetPlayerArmour(playerid100);

                    
RemovePlayerMapIcon(playerid55);
                    
RemovePlayerMapIcon(playerid55);

                    
SetPlayerInterior(playerid,0);
                    
SetPlayerVirtualWorld(playerid,1001);
                    
SetPlayerHealth(playerid100);
                    
PlayerInfo[playerid][Reparo] = false;
                    for(new 
gt 0gt 4gt++)TextDrawHideForPlayer(playerid,TextPVP[gt]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][0]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][1]);
                    
TextDrawHideForPlayer(playerid,InfoDeath);
                    
ResetPlayerWeapons(playerid);
                    
TogglePlayerSpectating(playerid0);
                }
                case 
1:
                {
                    


                    
onPlayerSpawnEx(playerid);
                    switch(
PlayerInfo[playerid][modo])
                    {
                        


                        case 
1:academy-=1;
                        case 
2:pvp-=1;
                        case 
3:drift-=1;
                        case 
4:fuga-=1;
                    }
                    
fuga+=1;
                    
PlayerInfo[playerid][modo]=1;
                    
PlayerInfo[playerid][cargo]=2;

                    
SendClientMessageToAll(0x9ACD32FF,"| MUNDOS | %s[%d] entrou no Mundo Academy! {FFFFFF}- ( /Mundos )",pName[playerid],playerid);
                    
SetPVarInt(playerid,"FloodModos",gettime()+15);
                    
PlayerInfo[playerid][Reparo] = false;

                    
SendClientMessage(playerid,0x9ACD32FF,"| MUNDOS | {FFFFFF}Agora voce faz parte da Equipe de {FF0000}Bandidos(as) {FFFFFF}do servidor!");
                    
SetPlayerPos(playerid,1158.3031,-2036.9834,69.0078);
                    
SetPlayerFacingAngle(playerid,269.8741);
                    
SetCameraBehindPlayer(playerid);

                    
//SetPlayerMapIcon(playerid, 12, 1985.0173,-1896.1637,13.2094, 55, 0, MAPICON_GLOBAL);
                    //SetPlayerMapIcon(playerid, 12, 2654.9780,-2117.1992,13.1094, 55, 0, MAPICON_GLOBAL);
                    
CreateDynamicMapIcon(1985.0173,-1896.1637,13.2094550xFFFFFFAA10010playerid, -1MAPICON_GLOBAL);
                    
CreateDynamicMapIcon(2654.9780,-2117.1992,13.1094550xFFFFFFAA10010playerid, -1MAPICON_GLOBAL);

                    
SetPlayerHealth(playerid100);
                    
SetPlayerArmour(playerid100);

                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid,1001);
                    
SetPlayerHealth(playerid100);
                    
PlayerInfo[playerid][Reparo] = false;
                    for(new 
gt 0gt 4gt++)TextDrawHideForPlayer(playerid,TextPVP[gt]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][0]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][1]);
                    
TextDrawHideForPlayer(playerid,InfoDeath);
                    
ResetPlayerWeapons(playerid);
                    
TogglePlayerSpectating(playerid0);
                }
            }
        }
    } 

Código PHP:
if(response)
        {
            

            switch(
listitem)
            {
                


                case 
0:
                {
                    
                    
ShowPlayerDialog(playerid,DIALOG_PMVSLADRAO,DIALOG_STYLE_LIST,"{FFF000}ESCOLHA A OPCAO DESEJADA:","Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n","Selecionar","Voltar");
                }
                case 
1:
                {
                    

                    
//SendClientMessage(playerid,Vermelho,"| ZONE - MUNDOS | {FFFFFF}Modo em Desenvolvimento");
                    
Opt(playerid);
                }
                case 
2:
                {
                    



                    
//SendClientMessage(playerid,Vermelho,"| ZONE - MUNDOS | {FFFFFF}Modo em Desenvolvimento");
                    
TogglePlayerSpectating(playerid0);
                    
OptDrift(playerid);
                }
                case 
3:
                {
                    



                    if(
PlayerInfo[playerid][modo] == 4)return SendClientMessage(playerid,Vermelho"[ ERRO ] Voce ja esta participando desse mundo!");
                    
onPlayerSpawnEx(playerid);

                    switch(
PlayerInfo[playerid][modo])
                    {

                        case 
1:academy-=1;
                        case 
2:pvp-=1;
                        case 
3:drift-=1;
                        case 
4:fuga-=1;
                    }
                    
livres+=1;
                    
PlayerInfo[playerid][modo]=4;
                    
PlayerInfo[playerid][cargo]=5;
                    
SendClientMessageToAll(0x9ACD32FF,"| MUNDOS | %s[%d] entrou no Mundo Fuga! {FFFFFF}- ( /Mundos )",pName[playerid],playerid);
                    
TextDrawHideForPlayer(playerid,InfoDeath);

                    new 
rrandom random(sizeof(VehicleColoursTableRGBA));
                    
SetPlayerColor(playeridVehicleColoursTableRGBA[rrandom]);
                    
SetPlayerPos(playerid,2500.8027,-1666.5984,13.3546);
                    
SetPlayerFacingAngle(playerid88.5091);
                    
SetPlayerInterior(playerid,0);
                    
SetPlayerVirtualWorld(playerid,1004);
                    
SetPlayerHealth(playerid999999999);
                    
PlayerInfo[playerid][Reparo] = true;
                    
SetPVarInt(playerid,"FloodModos",gettime()+15);


                    
RemovePlayerMapIcon(playerid55);
                    
RemovePlayerMapIcon(playerid55);


                    for(new 
gt 0gt 4gt++)TextDrawHideForPlayer(playerid,TextPVP[gt]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][0]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][1]);
                    
ResetPlayerWeapons(playerid);
                    
TogglePlayerSpectating(playerid0);
                }
            }
        }
    } 



RE: SetSpawnInfo com bugs - fear - 02/02/2025

Alguem pode me ajudar nisso... ja tentei de tudo e nada funciona...


RE: SetSpawnInfo com bugs - BitSain - 02/02/2025

A função SetSpawnInfo pode estar sendo sobrescrita na hora da morte, fazendo com que o jogador renasça no lugar errado.
Mas, alguma função está sobre-escrevendo a função. Como o SetPlayerPos após o spawn do player..
Por isso, atente-se a ordem dos fatos e barre outras possibilidades que possam evitar o comportamento esperado, que é o SetSpawnInfo.

Sobre a função: O SetSpawnInfo não faz o jogador renascer imediatamente; em vez disso, ele define informações que serão aplicadas sempre que o jogador reaparecer. Isso inclui posição, skin, armas e munição, garantindo que ele receba esses atributos automaticamente ao spawnar.
Então, você precisa usar o SpawnPlayer alguma vez depois que usar o SetSpawnInfo para que a função anterior funcione (ou então o spawn automático: como a morte do player).


RE: SetSpawnInfo com bugs - fear - 02/02/2025

(02/02/2025 17:49)BitSain Escreveu: A função SetSpawnInfo pode estar sendo sobrescrita na hora da morte, fazendo com que o jogador renasça no lugar errado.
Mas, alguma função está sobre-escrevendo a função. Como o SetPlayerPos após o spawn do player..
Por isso, atente-se a ordem dos fatos e barre outras possibilidades que possam evitar o comportamento esperado, que é o SetSpawnInfo.

Sobre a função: O SetSpawnInfo não faz o jogador renascer imediatamente; em vez disso, ele define informações que serão aplicadas sempre que o jogador reaparecer. Isso inclui posição, skin, armas e munição, garantindo que ele receba esses atributos automaticamente ao spawnar.
Então, você precisa usar o SpawnPlayer alguma vez depois que usar o SetSpawnInfo para que a função anterior funcione (ou então o spawn automático: como a morte do player).
Pior que ele estava spawnando mas consegui resolver. quando entrava no mundo e escolhia policial estava setado = 1 que e bandido e nao policial que e = 2 so coloquei na ordem certa que o setplayerinfo reconheceu qual era qual.. fiz um debug!

Obrigado pela explicacao.