Portal SAMP
[Ajuda] para o trem instantaneamente - 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] para o trem instantaneamente (/showthread.php?tid=5065)



para o trem instantaneamente - ANDREX - 02/08/2025

fiz um script um trabalho de maquinista então ao chegar ao check point queria saber se existe alguém meio de parar o trem instantaneamente pois ele e difícil de parar resolvi fazer assim mas não deu certo 
Código:
#define trem_included
forward parada(playerid);
new tremjob[256];
new timertrem[MAX_PLAYERS];
new rotatremjob[MAX_PLAYERS] = 0;
stock trem_Init(){
AddStaticVehicleEx(537,1700.0,-1950.0,13.0,0.0,1,1,60); // trem
AddStaticVehicleEx(569,1690.0,-1950.0,13.0,0.0,1,1,60);//vagao
return 1;
}
stock trem_OnPlayerConnect(playerid){
    rotatremjob[playerid] = 0;
    return 1;
}
CMD:tremjob(playerid){
 if(corridaativa)return SendClientMessage(playerid,0x00FFFFFF,"voce nao pode usar esse comando agora");
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 537){
        SendClientMessage(playerid, -1,"| INFO | Serviço iniciado com sucesso! Siga o ícone vermelho no mapa para chegar ao primeiro ponto de ônibus!");
        if(tremjob[playerid] == 0){
            tremjob[playerid] = 1;
            new vehicleid = GetPlayerVehicleID(playerid);
            SetPlayerCheckpoint(playerid,1742.7112,-1953.7690,15.0995, 3.0);
            SetVehicleVelocity(vehicleid, 0.0,0.0,0.0);
        }
    }
    SendClientMessage(playerid, -1,"| ERRO | Você tem que estar em uma ônibus para começar a rota!");
    return 1;
}
stock trem_OnPlayerEnterCheckpoint(playerid){
    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 537){
     if(tremjob[playerid] == 1){
            tremjob[playerid] = 2;
            TogglePlayerControllable(playerid,0);
            SetPlayerCheckpoint(playerid,2864.7500,1297.3916,12.3495,10);
            SendClientMessage(playerid, -1,"| INFO | 1/6 Aguarde...");
            SetVehicleVelocity(vehicleid,0.0,0.0,0.0);
            return 1;
        }
        if(tremjob[playerid] == 2){
            tremjob[playerid] = 3;
            TogglePlayerControllable(playerid,0);
            SetPlayerCheckpoint(playerid,1435.2920,2632.2500,12.3495,10);
            SendClientMessage(playerid, -1,"| INFO | 2/6 Aguarde...");
            SetVehicleVelocity(vehicleid,0.0,0.0,0.0);
            return 1;
        }
        if(tremjob[playerid] == 3){
            tremjob[playerid] = 4;
            TogglePlayerControllable(playerid,0);
            SetPlayerCheckpoint(playerid,574.0625,1268.7861,13.4983,10);
            SendClientMessage(playerid, -1,"| INFO | 3/6 Aguarde...");
            SetVehicleVelocity(vehicleid,0.0,0.0,0.0);
            timertrem[playerid] = SetTimerEx("parada", 10000, false, "i",playerid);
            return 1;
        }
        if(tremjob[playerid] == 4){
            tremjob[playerid] = 5;
            TogglePlayerControllable(playerid,0);
            SetPlayerCheckpoint(playerid,-1944.2625,124.2805,27.2245,10);
            SendClientMessage(playerid, -1,"| INFO | 4/6 Aguarde...");
            SetVehicleVelocity(vehicleid,0.0,0.0,0.0);
            timertrem[playerid] = SetTimerEx("parada", 10000, false, "i",playerid);
            return 1;
        }
        if(tremjob[playerid] == 5){
            tremjob[playerid] = 6;
            TogglePlayerControllable(playerid,0);
            SetPlayerCheckpoint(playerid,818.5896,-1369.9158,-0.0131,10);
            SendClientMessage(playerid, -1,"| INFO | 5/6 Aguarde...");
            SetVehicleVelocity(vehicleid,0.0,0.0,0.0);
            timertrem[playerid] = SetTimerEx("parada", 10000, false, "i",playerid);
            return 1;
        }
        if(tremjob[playerid] == 6){
            tremjob[playerid] = 0;
            DisablePlayerCheckpoint(playerid);
            SendClientMessage(playerid, -1,"| INFO | 6/6 Serviço finalizado! Você recebeu R$500 por ter completado todo o percurso!");
            SendClientMessage(playerid, -1,"| INFO | Volte ao spawn da profissão e inicie o serviço para fazer o percurso novamente use /tremjob!");
            CallRemoteFunction("dinheiro_GivePlayerMoney", "dd", playerid, 500);
        }
    }
    return 1;
}
stock trem_parada(playerid)
{
    timertrem[playerid] = SetTimerEx("MsgBus", 100, false, "i",playerid);
 TogglePlayerControllable(playerid,1);
 return 1;
}



RE: para o trem instantaneamente - xbruno1000x - 02/08/2025

Mesmo com comandos como SetVehicleVelocity ou TogglePlayerControllable, você não consegue parar ou controlar diretamente o trem como faz com carros normais, porque ela tem uma lógica própria dentro da engine do jogo. Talvez seja possível usando o plugin YSF com a função SetPlayerSyncTrainSpeed, mas não tenho certeza pois nunca testei isso.