It's not working
#1

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/engine", true) == 0)
    {
        new vehicle = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to start engine.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twist the key, and wait 4 seconds.");
        //if(Eng[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You already turned engine on.");
        SetTimerEx("EngStart", 4000, false, "d", playerid);
        if(engine == 1)
        {
            SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
            return 1;
        }
        return 1;
    }
Well above is my code.. this code works only to turn on engine, but I want to detect if engine is already turned on it will shut it down...

I tried with
pawn Код:
if(engine[vehicle] == 1)
but I get these errors if I use this if statement above..
nvalid subscript (not an array or too many subscripts): "engine"
expression has no effect
expected token: ";", but found "]"
invalid expression, assumed zero
too many error messages on one line[/pawn]

if you need more code let me know thanks for help in advance
Reply
#2

Here you go, you just have to check the value of the engine parameter and do an else statement.

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[]) {
    if(strcmp(cmdtext, "/engine", true) == 0) {
        new vehicle = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to start engine.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twist the key, and wait 4 seconds.");
        //if(Eng[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You already turned engine on.");
        SetTimerEx("EngStart", 4000, false, "d", playerid);
        if(engine == 1) {
            SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
            return 1;
        } else {
            //It's turned off, turn it on
            SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned on.");
            return 1;
        }
        return 1;
    }
}
Reply
#3

Almost finished but am I missing return 1; ?
If I place it between last brackets I get warning "unreachable code"
This is my current cmd now
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/engine", true) == 0) {
        new vehicle = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to start engine.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twist the key, and wait 4 seconds.");
        //if(Eng[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You already turned engine on.");
        SetTimerEx("EngStart", 4000, false, "d", playerid);
        if(engine == 1) {
            SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
            return 1;
        } else {
            SetTimerEx("EngStart", 4000, false, "d", playerid);
            return 1;
        }
    }
    return 0;
}
Reply
#4

I haven't been using OnPlayerCommandText for a long time but I guess it should be this way:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/engine", true) == 0) {
        new vehicle = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to start engine.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twist the key, and wait 4 seconds.");
        //if(Eng[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You already turned engine on.");
        SetTimerEx("EngStart", 4000, false, "d", playerid);
        if(engine == 1) {
            SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
        } else {
            SetTimerEx("EngStart", 4000, false, "d", playerid);
        }
        return 1; //Here's where the return 1 should go.
    }
    return 0;
}

//A tip I will give you is to only use return 1; if you really need to use it and at the end of functions because carelessly using return 1 will make your code halt (pause) when it reaches a return. It's like setting a break point in a debugger, well sort of... It's not really the same but you get the point.
//Using a return 1 for an if statement is absolutely correct but using it for no reason at all is just wrong and the compiler will complain.

// Pseudo
if(something == 1) {
    printf("Hey there");
    return 1; //Code will halt here because you used a return 1 and because we "assume" the condition is being met right now..
}
//Otherwise it will continue here..
//Execute something else here if something isn't 1.
Reply
#5

Nah I made some mistakes.. it's okay now thanks for help +rep for you
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)