SA-MP Forums Archive
[Ajuda] Double Mensagem - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Double Mensagem (/showthread.php?tid=526674)



Double Mensagem - Gabriel10101 - 18.07.2014

Fiz um sistema de hospital,porйm quando o player morre ele recebe 2x as mensagens:
Код:
Vocк nгo possui um plano de saъde,aguarde 25 segundos.
Vocк recebeu alta do Hospital, e estб completamente recuperado.
public SetPlayerSpawn(playerid)
pawn Код:
if(PlayerInfo[playerid][pHospital] == 1)
        {
        SetPlayerVirtualWorld(playerid, 0);
        SetPlayerInterior(playerid, 10);
        TogglePlayerControllable(playerid, 0);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        rand = random(sizeof(HospitalizadoSpawns));
        SetPlayerPos(playerid, HospitalizadoSpawns[rand][0], HospitalizadoSpawns[rand][1], HospitalizadoSpawns[rand][2]);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        if(PlayerInfo[playerid][pPlano] == 3 || PlayerInfo[playerid][pSocio] == 1)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 3 de saъde,aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 2)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 2 de saъde,aguarde 15 segundos.");
        SetTimer("Tirarhospital", 15000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 1 || PlayerInfo[playerid][pVIP] >= 1)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 1 de saъde,aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 0)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк nгo possui um plano de saъde,aguarde 25 segundos.");
        SetTimer("Tirarhospital", 25000, false);
        }
         return true;
      }
pawn Код:
forward Tirarhopsital(playerid);
public Tirarhopsital(playerid)
{
    PlayerInfo[playerid][pHospital] = 0;
    TogglePlayerControllable(playerid, 1);
    ClearAnimations(playerid, 1);
    SetPlayerSpawn(playerid);
    SendClientMessage(playerid, -1, "Vocк recebeu alta do Hospital, e estб completamente recuperado.");
    return 1;
}
O que poderia estar causando isso?


Re: Double Mensagem - MultiKill - 18.07.2014

Ele envia uma mensagem quando vocк morre e depois ele tem que esperar, um tempo para dar respawn, e quando ele da respawn, o server envia a mensagem que estб na callback chamada.


Re: Double Mensagem - Gabriel10101 - 18.07.2014

Quando ele morre nгo envia nenhuma mensagem,apenas й setado Playerinfo[playerid][pHospital] = 1;


Re: Double Mensagem - MultiKill - 18.07.2014

Ele envia, ele verifica qual valor estб setado na variбvel Plano e pVip.
pawn Код:
if(PlayerInfo[playerid][pPlano] == 3 || PlayerInfo[playerid][pSocio] == 1)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 3 de saъde,aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 2)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 2 de saъde,aguarde 15 segundos.");
        SetTimer("Tirarhospital", 15000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 1 || PlayerInfo[playerid][pVIP] >= 1)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 1 de saъde,aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        }
        else if(PlayerInfo[playerid][pPlano] == 0)
        {
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк nгo possui um plano de saъde,aguarde 25 segundos.");
        SetTimer("Tirarhospital", 25000, false);
Mesmo se tiver setado 0 ele vai enviar a mensagem.


Re: Double Mensagem - PT - 18.07.2014

coloca um return no final de cada condiзгo que nao ficara mais a mensagem duplicada.


Re: Double Mensagem - Gabriel10101 - 18.07.2014

@PT
Nгo funcionou colocar return no final de cada condiзгo

@MultiKill
Ainda nгo consegui entender

Fiz umas loucuras e nгo deu ainda.
pawn Код:
if(PlayerInfo[playerid][pHospital] == 1)
        {
        SetPlayerVirtualWorld(playerid, 0);
        SetPlayerInterior(playerid, 10);
        TogglePlayerControllable(playerid, 0);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        rand = random(sizeof(HospitalizadoSpawns));
        SetPlayerPos(playerid, HospitalizadoSpawns[rand][0], HospitalizadoSpawns[rand][1], HospitalizadoSpawns[rand][2]);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        if(PlayerInfo[playerid][pSocio] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui o plano SOCIO aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        return true;
        }
        if(PlayerInfo[playerid][pVIP] >= 1 && PlayerInfo[playerid][pPlano] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui o plano VIP aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 0){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк nгo possui nenhum plano,aguarde 25 segundos.");
        SetTimer("Tirarhospital", 25000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] >= 1){
        PlayerInfo[playerid][pHnumero] -= 1;
        if(PlayerInfo[playerid][pPlano] == 3){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 3 de saъde,aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 2){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 2 de saъde,aguarde 15 segundos.");
        SetTimer("Tirarhospital", 15000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 1 de saъde,aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        return true;
        }
        return true;
       }
         return true;
      }



Re: Double Mensagem - Gabriel10101 - 19.07.2014

Desculpe o double post,mas alguйm pode me ajudar?


Re: Double Mensagem - ViniBorn - 19.07.2014

SA:MP possui um bug que faz com que alguns jogadores morram ou sofram spawn 2 ou mais vezes.

Pra corrigir, basta criar uma variбvel booleana e verificar se й a primeira vez que o jogador morreu.
Caso sim, o cуdigo continua. Caso nгo, return.


Re: Double Mensagem - Gabriel10101 - 19.07.2014

Vini tentei mais nгo deu certo,agora ele nгo chama mais o settimer,so envia as mensagens,olha como ficou.
Topo
pawn Код:
new bool:mhospital[MAX_PLAYERS];
public OnPlayerDeath
pawn Код:
mhospital[playerid] = true;
PlayerInfo[playerid][pHospital] = 1;
public SetPlayerSpawn(playerid)
pawn Код:
if(mhospital[playerid]){
        if(PlayerInfo[playerid][pHospital] == 1)
        {
        SetPlayerVirtualWorld(playerid, 0);
        SetPlayerInterior(playerid, 10);
        TogglePlayerControllable(playerid, 0);
        rand = random(sizeof(HospitalizadoSpawns));
        SetPlayerPos(playerid, HospitalizadoSpawns[rand][0], HospitalizadoSpawns[rand][1], HospitalizadoSpawns[rand][2]);
        ClearAnimations(playerid);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        if(PlayerInfo[playerid][pSocio] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui o plano SOCIO aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        return true;
        }
        if(PlayerInfo[playerid][pVIP] >= 1 && PlayerInfo[playerid][pPlano] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui o plano VIP aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 0){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк nгo possui nenhum plano,aguarde 25 segundos.");
        SetTimer("Tirarhospital", 25000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] >= 1){
        PlayerInfo[playerid][pHnumero] -= 1;
        if(PlayerInfo[playerid][pPlano] == 3){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 3 de saъde,aguarde 10 segundos.");
        SetTimer("Tirarhospital", 10000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 2){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 2 de saъde,aguarde 15 segundos.");
        SetTimer("Tirarhospital", 15000, false);
        return true;
        }
        if(PlayerInfo[playerid][pPlano] == 1){
        SendClientMessage(playerid, COLOR_GRAD2, "Vocк possui plano 1 de saъde,aguarde 20 segundos.");
        SetTimer("Tirarhospital", 20000, false);
        return true;
        }
       }
       }
         return true;
      }



Re: Double Mensagem - MultiKill - 19.07.2014

pawn Код:
if(mhospital[playerid] == true){