SendClientMessage enviando opções novamente - Niko_BellicSA - 16/05/2023
Olá, boa tarde! gostaria de pedir ajuda de vocês em um código que eu fiz uma SendClientMessage para exibir as opções do uso do comando /SERVICO (caso o player apenas digite o comando para ver as opções disponiveis)
Porém ao digitar uma das opções, "taxi, medico, mecanico, etc.." exibe novamente a mensagem das opções disponíveis
Código: CMD:servico(playerid, params[])
{
new item[32];
if(IsPlayerConnected(playerid))
SCM(playerid, COLOR_WHITE, "SERVICOS: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15} /servico mecanico");
{
if(strcmp(item, "medico",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(item,"reboque",true) ==0)
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(item,"taxi",true) == 0)
{
if(LlamadaTaxi[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(item,"mecanico",true) == 0)
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
}
return 1;
}
O que eu fiz de errado? alguém pode me ajudar pfv??
RE: SendClientMessage enviando opções novamente - xbruno1000x - 16/05/2023
Obviamente a mensagem irá ser enviada para todos, visto que a única condicional para tal é verificar se o player está conectado.
O erro:
Código: new item[32];
if(IsPlayerConnected(playerid))
SCM(playerid, COLOR_WHITE, "SERVICOS: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15} /servico mecanico");
Se estiver conectado -> recebe mensagem
Código corrigido:
Código: CMD:servico(playerid, params[])
{
new item[32];
if(strcmp(item, "medico",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(item,"reboque",true) ==0)
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(item,"taxi",true) == 0)
{
if(LlamadaTaxi[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(item,"mecanico",true) == 0)
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
else
SCM(playerid, COLOR_WHITE, "SERVICOS: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15} /servico mecanico");
return 1;
}
Se eu não tiver cometido nenhum erro, isso deverá funcionar. Coloquei uma else no final do código, dessa forma ele irá primeiro verificar se o jogador digitou alguma das opções válidas, e caso não tenha, serão exibidas as opções.
Caso eu tenha cometido algum erro, envie os erros na próxima resposta. Espero tê-lo ajudado!
RE: SendClientMessage enviando opções novamente - Niko_BellicSA - 18/05/2023
(16/05/2023 18:23)xbruno1000x Escreveu: Obviamente a mensagem irá ser enviada para todos, visto que a única condicional para tal é verificar se o player está conectado.
O erro:
Código: new item[32];
if(IsPlayerConnected(playerid))
SCM(playerid, COLOR_WHITE, "SERVICOS: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15} /servico mecanico");
Se estiver conectado -> recebe mensagem
Código corrigido:
Código: CMD:servico(playerid, params[])
{
new item[32];
if(strcmp(item, "medico",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(item,"reboque",true) ==0)
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(item,"taxi",true) == 0)
{
if(LlamadaTaxi[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(item,"mecanico",true) == 0)
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
else
SCM(playerid, COLOR_WHITE, "SERVICOS: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15} /servico mecanico");
return 1;
}
Se eu não tiver cometido nenhum erro, isso deverá funcionar. Coloquei uma else no final do código, dessa forma ele irá primeiro verificar se o jogador digitou alguma das opções válidas, e caso não tenha, serão exibidas as opções.
Caso eu tenha cometido algum erro, envie os erros na próxima resposta. Espero tê-lo ajudado!
Bom dia Bruno, muito obrigado! porém o codigo não funcionou, ao utilizar o cmd /servico não aparece a caixa de opções em SCM
EDIT
Fiz algumas adaptações por conta própria e consegui fazer uma SCM que exibe "Opção inválida. Utilize /servico seguido de: taxi, medico ou mecanico." ao colocar uma opção inexistente exemplo "shshsd" porém neste comando ainda continua aparecendo a mensagem de opções caso utilize uma opção existente
Código: CMD:servico(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
SCM(playerid, COLOR_WHITE, "Opções: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15}/servico mecanico");
}
else
{
return 0;
}
new item[32];
if(sscanf(params, "s[32]", item) != EOF)
{
if(strcmp(item, "medico",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(item,"reboque",true) ==0)
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(item,"taxi",true) == 0)
{
if(LlamadaTaxi[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(item,"mecanico",true) == 0)
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] == 0)
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
else
{
SCM(playerid, -1, "Opção inválida. Utilize /servico seguido de: taxi, medico ou mecanico.");
}
}
return 1;
}
RE: SendClientMessage enviando opções novamente - xbruno1000x - 18/05/2023
Código: CMD:servico(playerid, params[])
{
if(!strlen(params))
return SCM(playerid, COLOR_WHITE, "Opções: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15}/servico mecanico");
if(strcmp(params,"medico",true))
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid])
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(params,"reboque",true))
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(params,"taxi",true))
{
if(LlamadaTaxi[playerid])
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(params,"mecanico",true))
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] )
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
return 1;
}
Acredito que dessa forma irá funcionar sem problemas.
RE: SendClientMessage enviando opções novamente - Niko_BellicSA - 18/05/2023
(18/05/2023 15:20)xbruno1000x Escreveu: Código: CMD:servico(playerid, params[])
{
if(!strlen(params))
return SCM(playerid, COLOR_WHITE, "Opções: {DBED15}/servico taxi {FFFFFF}| {DBED15} /servico medico {FFFFFF}|{DBED15}/servico mecanico");
if(strcmp(params,"medico",true))
{
if(IsPlayerInRangeOfPoint(playerid,1.0,1147.9966,-1322.4128,-10.7922))
{
if(PlayerInfo[playerid][pCama] > 0) return 1;
new Float:Vida,Float:calculo,string[256];
GetPlayerHealth(playerid,Vida);
if(Vida > 99) return SCM(playerid,-1,"Você não precisa deste serviço no momento");
calculo = 100-Vida;
HCalculo[playerid] = floatround(calculo, floatround_round);
format(string,256,"Bem-vindo ao Hospital Central de Los Santos\n\nVocê precisa de um check-up médico\n\nCusto da revisão: {00CC00}R$ %d",HCalculo[playerid]*10);
ShowPlayerDialog(playerid,DHOSPITAL,DIALOG_STYLE_MSGBOX,"Servicio Médico",string,"Aceitar","Cancelar");
}
else if(PlayerInfo[playerid][Agonizando] == 1 && LlamadaMedicos[playerid])
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMedi[i] == 1 && PlayerInfo[i][jJob] == 1 || PlayerInfo[i][vipjob] == 1 && RopaMedi[i] == 1)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "{FFFFFF}Há um novo paciente solicitando {FFFF00}/servico medico{FFFFFF}, para que ele saiba que você vai atendê-lo, usa {FFFF00}/responder medico", pName, playerid);
SendClientMessage(i, 0x00C600FF, string);
SetTimerEx("CancelarMedi",minutos(5),false,"d",playerid);
ResponderMedi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você chamou o serviço médico, uma ambulância estará aqui o mais rápido possível.");
MarcadoMedicos[playerid] = 1;
LlamadaMedicos[playerid] = 1;
}
}
else if(strcmp(params,"reboque",true))
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 1819.1549,-1284.6589,109.3594))
{
ShowPlayerDialog(playerid,SERVICOREBOQUE1 , DIALOG_STYLE_MSGBOX, "Informações sobre o serviço de reboque", "O serviço de reboque é usado para recuperar o veículo, no caso de você ter\npermaneceu em um lugar inacessível.\nPPor exemplo: na água, no estacionamento de uma propriedade, em uma piscina, etc.\n\nVocê quer usar o serviço?", "Sim","Não");
}
}
else if(strcmp(params,"taxi",true))
{
if(LlamadaTaxi[playerid])
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(PlayerInfo[i][jJob] == 7 || PlayerInfo[i][vipjob] == 7)
{
new string[256],pName[50],autoid;
autoid = GetPlayerVehicleID(i);
if(!TAXI(autoid)) return 1;
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AMARILLO);
format(string, 256, "Há um novo cliente{FFFFFF} chamando {FFFF00}/servico taxi{FFFFFF}, para avisar que vá buscá-lo, usa {FFFF00}/responder taxi", pName, playerid);
SendClientMessage(i, 0xFFFF00FF, string);
SetTimerEx("CancelarTaxi",minutos(5),false,"d",playerid);
ResponderTaxi[i] = 1;
}
}
SendClientMessage(playerid, -1,"Você solicitou um táxi, eles virão buscá-lo o mais rápido possível.");
LlamadaTaxi[playerid] = 1;
}
else return SCM(playerid,-1,"Você já pediu um táxi");
}
else if(strcmp(params,"mecanico",true))
{
new Float:vida, autoid = GetPlayerVehicleID(playerid);
GetVehicleHealth(autoid, vida);
if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(vida > 375.0) return SCM(playerid,-1,"Seu motor não está avariado para solicitar um mecânico.");
if(LlamadaMeca[playerid] )
{
for(new i=0; i<MAX_PLAYERS;i++)
{
if(RopaMeca[i] == 1 && PlayerInfo[i][jJob] == 8 || PlayerInfo[i][vipjob] == 8)
{
new string[256],pName[50];
GetPlayerName(playerid, pName, 50);
SetPlayerMarkerForPlayer(i, playerid, COLOR_AZUL);
format(string, 256, "{FFFFFF}Há um novo cliente chamando {FFFF00}/servico mecanico{FFFFFF}, para confimar usa {FFFF00}/responder mecanico", pName);
SendClientMessage(i, 0x33CCFFAA, string);
ResponderMeca[i] = 1;
SetTimerEx("CancelarMeca",minutos(5),false,"d",playerid);
}
}
SendClientMessage(playerid, -1,"Você solicitou um mecânico, espere até que ele chegue ao seu local.");
LlamadaMeca[playerid] = 1;
}
else return SCM(playerid,-1,"Você já solicitou um mecânico");
}
else return SCM(playerid,-1,"Você deve estar em um veículo para solicitar um mecânico.");
}
return 1;
}
Acredito que dessa forma irá funcionar sem problemas.
Muito obrigado irmão, de verdade mesmo agora sim está funcionando perfeitamente do jeitinho que eu queria, agora a mensagem é informada apenas quando usar o comando vazio sem selecionar uma das opções
Deixando aqui o print como feedback desta belezinha s2 haha
|