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){