Need help with the engine
#1

Hello, Whenever a player is in a vehicle that have engine off he is freezed and must turn on the engine before he can look around etc, I want the players to be able to look around with the mouse but not be able to drive even tho the engine is off. here is the public
pawn Код:
public Startup(playerid, vehicleid)
{
    new pveh = GetVehicleModel(GetPlayerVehicleID(playerid));
    new newcar = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER || engineOn[vehicleid])
    {
        //I do nothing!
    }
    else if(PlayerInfo[playerid][pAdminDuty] == 1)
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
        TogglePlayerControllable(playerid, true);
    }
    else if(IsModelAPlane(vehicleid) || IsModelAHeli(vehicleid))
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
        TogglePlayerControllable(playerid, true);
    }
    else if(IsPlayerInAnyVehicle(playerid) && !vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar) && !IsASalesVehicle(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        TogglePlayerControllable(playerid, false);
        vehicleEntered[playerid][vehicleid] = true;
        gEngine[playerid] = 0;
        new vid = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
        SetVehicleParamsEx(vid,0,lights,alarm,doors,bonnet,boot,objective);
        if(PlayerInfo[playerid][pSpeedo] == 1)
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        }
        if(IsModelABike(GetPlayerVehicleID(playerid)))
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Helmet or Else you can get Ticked! (/helmet)");
        }
        else
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seat Belt or Else you can get Ticked! (/belt)");
        }
    }
    else if(IsPlayerInAnyVehicle(playerid) && !engineOn[vehicleid] && vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        TogglePlayerControllable(playerid, false);
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seatbelt/Helmet or Else you can get Ticked! (/belt)");
    }
}
Reply
#2

pawn Код:
public Startup(playerid, vehicleid)
{
    new pveh = GetVehicleModel(GetPlayerVehicleID(playerid));
    new newcar = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER || engineOn[vehicleid])
    {
        //I do nothing!
    }
    else if(PlayerInfo[playerid][pAdminDuty] == 1)
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
    }
    else if(IsModelAPlane(vehicleid) || IsModelAHeli(vehicleid))
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
    }
    else if(IsPlayerInAnyVehicle(playerid) && !vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar) && !IsASalesVehicle(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        vehicleEntered[playerid][vehicleid] = true;
        gEngine[playerid] = 0;
        new vid = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
        SetVehicleParamsEx(vid,0,lights,alarm,doors,bonnet,boot,objective);
        if(PlayerInfo[playerid][pSpeedo] == 1)
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        }
        if(IsModelABike(GetPlayerVehicleID(playerid)))
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Helmet or Else you can get Ticked! (/helmet)");
        }
        else
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seat Belt or Else you can get Ticked! (/belt)");
        }
    }
    else if(IsPlayerInAnyVehicle(playerid) && !engineOn[vehicleid] && vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seatbelt/Helmet or Else you can get Ticked! (/belt)");
    }
}
Don't know why you had toggleplayercontrollable in an engine command.
Reply
#3

When I press 's' and go to reverse the engine starts and you can drive again.. Also when I turn off the engine I get freezed.
pawn Код:
public Startup(playerid, vehicleid)
{
    new pveh = GetVehicleModel(GetPlayerVehicleID(playerid));
    new newcar = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER || engineOn[vehicleid])
    {
        //I do nothing!
    }
    else if(PlayerInfo[playerid][pAdminDuty] == 1)
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
    }
    else if(IsModelAPlane(vehicleid) || IsModelAHeli(vehicleid))
    {
        if(engineOn[vehicleid] == 0)
        {
            engineOn[vehicleid] = 1;
        }
    }
    else if(IsPlayerInAnyVehicle(playerid) && !vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar) && !IsASalesVehicle(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        vehicleEntered[playerid][vehicleid] = true;
        gEngine[playerid] = 0;
        new vid = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
        SetVehicleParamsEx(vid,0,lights,alarm,doors,bonnet,boot,objective);
        if(PlayerInfo[playerid][pSpeedo] == 1)
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        }
        if(IsModelABike(GetPlayerVehicleID(playerid)))
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Helmet or Else you can get Ticked! (/helmet)");
        }
        else
        {
            SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seat Belt or Else you can get Ticked! (/belt)");
        }
    }
    else if(IsPlayerInAnyVehicle(playerid) && !engineOn[vehicleid] && vehicleEntered[playerid][vehicleid] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && pveh != 510 && pveh != 462 && newcar != 59 && newcar != 60 && !IsAHarvest(newcar) && !IsADrugHarvest(newcar) && !IsASweeper(newcar))
    {
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Attention! Type /engine to start your engine!");
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "You Can Type /speedo To Enable/Disable The Speedometer!");
        SendClientMessage(playerid, COLOR_LIGHT_BLUE, "Remember: Use your Seatbelt/Helmet or Else you can get Ticked! (/belt)");
    }
}
and here is the command
pawn Код:
if(!strcmp(cmd, "/engine", true))
    {
        if(IsPlayerInAnyVehicle(playerid))
        {
            if(IsPlayerConnected(playerid))
            {
                if(!engineOn[GetPlayerVehicleID(playerid)])
                {
                    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return 1;
                    if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) return 1;
                    if(IsARentableCar(idcar))
                    {
                        if(HireCar[playerid] != idcar) return 1;
                    }
                    if(IsAHarvest(idcar)) return 1;
                    if(IsADrugHarvest(idcar)) return 1;
                    if(IsASweeper(idcar)) return 1;
                    if(IsASalesVehicle(idcar)) return 1;

                    if(CanTurnEngine[playerid] != idcar && CanTurnEngine[playerid] == 9999)
                        return SendClientMessage(playerid, COLOR_GREY,"* You cannot turn this car's engine!");

                    new plname[MAX_PLAYER_NAME];
                    GetPlayerName(playerid, plname, sizeof(plname));

                    format(string, sizeof(string), "*{FFFFFF} %s spins a key and Turns his car Engine {00FF00}ON.", plname);
                    ProxDetector(30.0, playerid, string, COLOR_CHAT1,COLOR_CHAT2,COLOR_CHAT3,COLOR_CHAT4,COLOR_CHAT5);
                    if(PlayerInfo[playerid][pAdmin] < 1337 && PlayerInfo[playerid][pAdminDuty] == 1)
                    {
                        SetTimerEx("StartingTheVehicle",0,0,"i",playerid);
                    }
                    else
                    {
                        SetTimerEx("StartingTheVehicle",0,0,"i",playerid);
                    }
                    gEngine[playerid] = 1;
                    new vid = GetPlayerVehicleID(playerid);
                    new engine,lights,alarm,doors,bonnet,boot,objective;
                    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
                    SetVehicleParamsEx(vid,1,lights,alarm,doors,bonnet,boot,objective);
                //  engineOn[GetPlayerVehicleID(playerid)] = true;
                    new y, m, d;
                    new h,mi,s;
                    getdate(y,m,d);
                    gettime(h,mi,s);
                    format(string,sizeof(string), "(%d/%d/%d)[%d:%d:%d] %s [CMD] -> /engine",d,m,y,h,mi,s,sendername);
                    CommandLog(string);
                    return 1;
                }
                else if(engineOn[GetPlayerVehicleID(playerid)])
                {
                    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return 1;
                    if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) return 1;
                    if(IsARentableCar(idcar))
                    if(IsASalesVehicle(idcar))
                    {
                        if(HireCar[playerid] != idcar) return 1;
                    }
                    if(IsAHarvest(idcar)) return 1;
                    if(IsADrugHarvest(idcar)) return 1;
                    if(IsASweeper(idcar)) return 1;

                    if(CanTurnEngine[playerid] != idcar && CanTurnEngine[playerid] == 9999)
                        return SendClientMessage(playerid, COLOR_GREY,"* You cannot turn this car's engine!");

                    format(string, sizeof(string), "*{FFFFFF} %s Spins His key And turns {FF0000}Off {FFFFFF}the Engine  ", sendername);
                    ProxDetector(30.0, playerid, string, COLOR_CHAT1,COLOR_CHAT2,COLOR_CHAT3,COLOR_CHAT4,COLOR_CHAT5);
                    gEngine[playerid] = 0;
                    new vid = GetPlayerVehicleID(playerid);
                    new engine,lights,alarm,doors,bonnet,boot,objective;
                    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
                    SetVehicleParamsEx(vid,0,lights,alarm,doors,bonnet,boot,objective);
                    engineOn[GetPlayerVehicleID(playerid)] = false;
                    TogglePlayerControllable(playerid, 0);//// ath the dealship's in the game, you can go there and try to get a car, buy when you do /v it spawns you a car, but you can take it away, idk how you can buy it,can you fix it where they cant leave with the car, they have to buy it first?
                    new y, m, d;
                    new h,mi,s;
                    getdate(y,m,d);
                    gettime(h,mi,s);
                    format(string,sizeof(string), "(%d/%d/%d)[%d:%d:%d] %s [CMD] -> /engine",d,m,y,h,mi,s,sendername);
                    CommandLog(string);
                    return 1;
                }
            }
        }
        return 1;
    }
Reply
#4

bump
Reply
#5

bump
Reply
#6

Use only GetVehicleParamsEx to turn the engine off and don't use this function (TogglePlayerControllable) to freeze/unfreeze player either in the callback or in the command.
Reply
#7

I dont know what those are so could you show an example?
Reply
#8

bump
Reply
#9

https://sampwiki.blast.hk/wiki/GetVehicleParamsEx
https://sampwiki.blast.hk/wiki/SetVehicleParamsEx

^^ those two functions will give you the ability toggle the vehicle's engine

https://sampwiki.blast.hk/wiki/TogglePlayerControllable - you have this function somewhere in your "engine system" that is causing players to be frozen so they can't look around
Reply
#10

I still dont get it :/
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)