Portal SAMP
[Ajuda] SendClientMessage enviando opções novamente - 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] SendClientMessage enviando opções novamente (/showthread.php?tid=3631)



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 Sad

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;
}

[Imagem: xb2Ixde.png]


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  Heart 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  Big Grin

[Imagem: w2co99x.png] 

Deixando aqui o print como feedback desta belezinha  Heart s2 haha