Portal SAMP
[Ajuda] Comando ligar e desligar motor - 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] Comando ligar e desligar motor (/showthread.php?tid=3177)



Comando ligar e desligar motor - Niko_BellicSA - 13/01/2023

Olá, boa tarde! eu gostaria de pedir ajuda sobre um comando que eu alterei recentemente, estou tentando aprender usando uma GM que baixei da net. Bom, eu editei os comandos /LIGAR e /DESLIGAR para ligar e desligar o motor usando /MOTOR e no caso do /DESLIGAR eu utilizei "else" para fazer a função do comando, ao compilar aparece a mensagem que foi COMPILADO COM SUCESSO, sem qualquer outras informações abaixo.. 

[Imagem: VbSWqkI.png]

Código:
CMD:motor(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<MAX_VEHICLES; i++)
if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
if(MotorAuto[vehicleid] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
SetTimerEx("EncenderMotor",1200, false, "d",playerid);
}
else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");
return 1;
    }
    else
    {
    new vehicleid = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(MotorAuto[vehicleid] == 1)
{

new carid,string[256],pName[32];
GetPlayerName(playerid, pName, 32);
carid = GetPlayerVehicleID(playerid);
format(string, 256, "%s desligou o motor de seu veículo.",pName);
GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
MotorAuto[carid] = 0;
}
else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
return 1;
}


Scripts Originais


Código:
CMD:ligar(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<MAX_VEHICLES; i++)
if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
if(MotorAuto[vehicleid] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
SetTimerEx("EncenderMotor",1200, false, "d",playerid);
}
else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");
return 1;
}


CMD:desligar(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(MotorAuto[vehicleid] == 1)
{

new carid,string[256],pName[32];
GetPlayerName(playerid, pName, 32);
carid = GetPlayerVehicleID(playerid);
format(string, 256, "%s desligou o motor de seu veículo.",pName);
GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
MotorAuto[carid] = 0;
}
else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
return 1;
}



Por aparecer "Compilado com sucesso" e não aparecer nenhum erro e warns para mim está tudo aparente normal, mas ao tentar ligar a GM aparece este erro que faz com que não reconheça o GameMode


[font="Proxima Nova Regular", "Helvetica Neue", Helvetica, Arial, sans-serif][Imagem: 0yAe0FA.png][/font]


RE: Comando ligar e desligar motor - ziiQz - 13/01/2023

Olha só amigo, todas as vezes que você utiliza um if(...) deve utilizar as bracks corretamente, o else corresponde a um if, o comando é para ligar e desligar o motor, mesmo que o gamemode liga-se o comando não iria funcionar corretamente identifiquei uns erros e vou tentar ajudar, estou pelo celular então fica meio complicado de identar o código, mas acredito que você conseguirá entender. 


Aqui é seu comando original, destaquei os erros, analise..


Citar:CMD:motor(playerid, params[])

{
    new vehicleid = GetPlayerVehicleID(playerid); <- Aqui você define uma variável com o id do veiculo, de nome vehicleid
    for(new i=0; i<MAX_VEHICLES; i++) <- Para que serve esse loop se você não usou em momento algum?
    if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!"); <- Se não estiver como motorista, não liga o carro
    if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
    if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
    if(MotorAuto[vehicleid] == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
        SetTimerEx("EncenderMotor",1200, false, "d",playerid);
    }
    else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");      <- Aqui você já utilizou if&else.
        return 1;
    }  <- Aqui você fechou seu comando, junto da brack lá de cima, em baixo de CMD:motor
    

    else <- Aqui já ficou bem crítico, pois, você achou estar usando o else para if(Motor mas você fechou o comando antes mesmo de chegar até aqui
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!"); <- Você já havia definido isso lá em cima
    if(MotorAuto[vehicleid] == 1)
    {
   
        new carid,string[256],pName[32];
        GetPlayerName(playerid, pName, 32);
        carid = GetPlayerVehicleID(playerid); <- vehicleid, lembra?
        format(string, 256, "%s desligou o motor de seu veículo.",pName);
        GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
        ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
        MotorAuto[carid] = 0;
    }
    else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
    return 1;
} <- Ja até me perdi no final kkkkk, mas, você está fechando seu else exatamente aqui '-'



Aqui está seu comando, não testei, fiz correndo, mas talvez funcione kkkkk
Código:
CMD:motor(playerid, params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Você não está em um veículo!");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Você não é o motorista deste veículo!");
    if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
    if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
    if(MotorAuto[vehicleid] == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
        SetTimerEx("EncenderMotor",1200, false, "d",playerid);
    }
    else
    {
        new string[128],pName[32];
        GetPlayerName(playerid, pName, 32);
        format(string, 128, "%s desligou o motor do seu veículo.",pName);
        GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(vehicleid, OFF, lights, alarm, doors, bonnet, boot, objective);
        ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
        MotorAuto[vehicleid] = 0;
    }
    return 1;
}



RE: Comando ligar e desligar motor - xbruno1000x - 13/01/2023

Esse tópico pode te ajudar:
https://portalsamp.com/thread-2316.html


RE: Comando ligar e desligar motor - Niko_BellicSA - 13/01/2023

(13/01/2023 16:04)Knox_VGS Escreveu: Olá, boa tarde! eu gostaria de pedir ajuda sobre um comando que eu alterei recentemente, estou tentando aprender usando uma GM que baixei da net. Bom, eu editei os comandos /LIGAR e /DESLIGAR para ligar e desligar o motor usando /MOTOR e no caso do /DESLIGAR eu utilizei "else" para fazer a função do comando, ao compilar aparece a mensagem que foi COMPILADO COM SUCESSO, sem qualquer outras informações abaixo.. 

[Imagem: VbSWqkI.png]

Código:
CMD:motor(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<MAX_VEHICLES; i++)
if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
if(MotorAuto[vehicleid] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
SetTimerEx("EncenderMotor",1200, false, "d",playerid);
}
else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");
return 1;
    }
    else
    {
    new vehicleid = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(MotorAuto[vehicleid] == 1)
{

new carid,string[256],pName[32];
GetPlayerName(playerid, pName, 32);
carid = GetPlayerVehicleID(playerid);
format(string, 256, "%s desligou o motor de seu veículo.",pName);
GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
MotorAuto[carid] = 0;
}
else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
return 1;
}


Scripts Originais


Código:
CMD:ligar(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<MAX_VEHICLES; i++)
if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
if(MotorAuto[vehicleid] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
SetTimerEx("EncenderMotor",1200, false, "d",playerid);
}
else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");
return 1;
}


CMD:desligar(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!");
if(MotorAuto[vehicleid] == 1)
{

new carid,string[256],pName[32];
GetPlayerName(playerid, pName, 32);
carid = GetPlayerVehicleID(playerid);
format(string, 256, "%s desligou o motor de seu veículo.",pName);
GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
MotorAuto[carid] = 0;
}
else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
return 1;
}



Por aparecer "Compilado com sucesso" e não aparecer nenhum erro e warns para mim está tudo aparente normal, mas ao tentar ligar a GM aparece este erro que faz com que não reconheça o GameMode


[font="Proxima Nova Regular", "Helvetica Neue", Helvetica, Arial, sans-serif][Imagem: 0yAe0FA.png][/font]

Valeu ziiQz, ficou perfeito ♥ do jeitinho que eu queria que ficasse.

(13/01/2023 16:54)ziiQz Escreveu: Olha só amigo, todas as vezes que você utiliza um if(...) deve utilizar as bracks corretamente, o else corresponde a um if, o comando é para ligar e desligar o motor, mesmo que o gamemode liga-se o comando não iria funcionar corretamente identifiquei uns erros e vou tentar ajudar, estou pelo celular então fica meio complicado de identar o código, mas acredito que você conseguirá entender. 


Aqui é seu comando original, destaquei os erros, analise..


Citar:CMD:motor(playerid, params[])

{
    new vehicleid = GetPlayerVehicleID(playerid); <- Aqui você define uma variável com o id do veiculo, de nome vehicleid
    for(new i=0; i<MAX_VEHICLES; i++) <- Para que serve esse loop se você não usou em momento algum?
    if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!"); <- Se não estiver como motorista, não liga o carro
    if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
    if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
    if(MotorAuto[vehicleid] == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
        SetTimerEx("EncenderMotor",1200, false, "d",playerid);
    }
    else SendClientMessage(playerid,-1,"O motor do veículo já se encontra ligado");      <- Aqui você já utilizou if&else.
        return 1;
    }  <- Aqui você fechou seu comando, junto da brack lá de cima, em baixo de CMD:motor
    

    else <- Aqui já ficou bem crítico, pois, você achou estar usando o else para if(Motor mas você fechou o comando antes mesmo de chegar até aqui
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Não está dentro do veículo!"); <- Você já havia definido isso lá em cima
    if(MotorAuto[vehicleid] == 1)
    {
   
        new carid,string[256],pName[32];
        GetPlayerName(playerid, pName, 32);
        carid = GetPlayerVehicleID(playerid); <- vehicleid, lembra?
        format(string, 256, "%s desligou o motor de seu veículo.",pName);
        GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(GetPlayerVehicleID(playerid), OFF, lights, alarm, doors, bonnet, boot, objective);
        ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
        MotorAuto[carid] = 0;
    }
    else SendClientMessage(playerid, COLOR_WHITE, "O veículo está desligado!");
    return 1;
} <- Ja até me perdi no final kkkkk, mas, você está fechando seu else exatamente aqui '-'



Aqui está seu comando, não testei, fiz correndo, mas talvez funcione kkkkk
Código:
CMD:motor(playerid, params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(VehiculosInfo[vehicleid][vcomprable] == 1) return 1;
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Você não está em um veículo!");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_WHITE, "Você não é o motorista deste veículo!");
    if(VehicleFuel[vehicleid] < 1) return SinGasolina(playerid);
    if(averiado[vehicleid] != 0) return MotorMalogrado(playerid);
    if(MotorAuto[vehicleid] == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "Ligando veículo...");
        SetTimerEx("EncenderMotor",1200, false, "d",playerid);
    }
    else
    {
        new string[128],pName[32];
        GetPlayerName(playerid, pName, 32);
        format(string, 128, "%s desligou o motor do seu veículo.",pName);
        GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(vehicleid, OFF, lights, alarm, doors, bonnet, boot, objective);
        ProxDetector(15.0, playerid, string, COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO,COLOR_VERDECLARO);
        MotorAuto[vehicleid] = 0;
    }
    return 1;
}

Citar:Esse tópico pode te ajudar:

https://portalsamp.com/thread-2316.html

Valeu @xbruno1000x, acabei de baixar este compilador e vou seguir as dicas que tu citou lá para aprender como lidar com essas situações ♥