SA-MP Forums Archive
Checkpoints mixing. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Checkpoints mixing. (/showthread.php?tid=345562)



Checkpoints mixing. - ricardo178 - 25.05.2012

Hey guys. Well, i made 2 jobs. Street sweeping, and Trucking, but trucking is sending me to sweeping checkpoints..
Here is the code, thanks.

pawn Код:
new Float:BCP[][3] =
{
    {-2231.5911,-2456.8728,30.4688},
    {-2130.9924,-2532.9590,30.4688},
    {-1982.1638,-2538.2822,36.8082},
    {-2259.3906,-2561.3916,31.9347}
};

new Float:TCP[][3] =
{
    {-1565.1646,-2811.4785,46.6490},
    {-2130.9924,-2532.9590,30.4688},
    {-199.8498,-2335.5718,28.4854},
    {-56.6326,-1136.9395,1.0781}
};

new sCP[MAX_PLAYERS];
new tCP[MAX_PLAYERS];

CMD:startsweep(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 1)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 574)
        {
            SetPlayerCheckpoint(playerid, -2106.6787,-2361.6228,30.4688, 5.0);
            sCP[playerid] = 0;
            SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoints.");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any sweeping vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a sweeper.");
}
CMD:starttruck(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 2)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 514)
        {
            if(IsTrailerAttachedToVehicle(vehicleid))
            {
                SetPlayerCheckpoint(playerid, -2051.4927,-2488.2144,30.1957, 5.0);
                tCP[playerid] = 0;
                SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoint.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_LIGHTRED, "No trailler is attached.");
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any Trucking vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a trucker.");
}

public OnPlayerEnterCheckpoint(playerid)
{
    if(sCP[playerid] != -1)
    {
        GivePlayerMoney(playerid, 40);
        if(sCP[playerid] < (sizeof(BCP) - 1))
        {
            sCP[playerid]++;
            SetPlayerCheckpoint(playerid, BCP[sCP[playerid]][0], BCP[sCP[playerid]][1], BCP[sCP[playerid]][2], 5.0);
        }
        else
        {
            SendClientMessage(playerid, 0x999999AA, "Route finished");
            DisablePlayerCheckpoint(playerid);
            sCP[playerid] = -1;
        }
    }
    if(tCP[playerid] != -1)
    {
        GivePlayerMoney(playerid, 250);
        if(tCP[playerid] < (sizeof(TCP) - 1))
        {
            tCP[playerid]++;
            SetPlayerCheckpoint(playerid, TCP[tCP[playerid]][0], TCP[tCP[playerid]][1], TCP[tCP[playerid]][2], 5.0);
        }
        else
        {
            SendClientMessage(playerid, 0x999999AA, "Route finished");
            DisablePlayerCheckpoint(playerid);
            tCP[playerid] = -1;
        }
    }
}



Re: Checkpoints mixing. - ricardo178 - 25.05.2012

Anyone? I know we shouldn't bump, but all know that second page threads are forgetten and i really need this to continue with other jobs.


Re: Checkpoints mixing. - faff - 25.05.2012

Dont doublepost.


Re: Checkpoints mixing. - ricardo178 - 25.05.2012

Quote:
Originally Posted by faff
Посмотреть сообщение
Dont doublepost.
Serious? I know it, and said sorry... But i really need this fixed, no idea why it is happening. xD


Re: Checkpoints mixing. - milanosie - 25.05.2012

Make sure only one variable is 0 or higher, and ALL others are set to -1.
If thats not the case it will pick the upper variable in the script, which is probably happening.


And I see you used my trick with the if(sCP[playerid] != -1) I once told you:P

EXAMPLE:

this is part of my OnPlayerConnect:

oCP[playerid] = -1;
pCP[playerid] = -1;
lCP[playerid] = -1;
CarTest[playerid] = -1;
qCP[playerid] = -1;
wCP[playerid] = -1;
kCP[playerid] = -1;
rCP[playerid] = -1;


Re: Checkpoints mixing. - ricardo178 - 25.05.2012

What you mean? What variables i have to change to -1? I am so tired of trying to figure this out that my head is blowing..


Re: Checkpoints mixing. - milanosie - 25.05.2012

Well you check if a variable is set to 0.

But what if both jobs are set to 0?

It will try to set two checkpoints at the same time, but since this is impossible it will only set one, and sometimes the wrong one.


Re: Checkpoints mixing. - ricardo178 - 25.05.2012

Changed that.. Will it be solved?

pawn Код:
CMD:starttruck(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 2)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 514)
        {
            if(IsTrailerAttachedToVehicle(vehicleid))
            {
                SetPlayerCheckpoint(playerid, -2051.4927,-2488.2144,30.1957, 5.0);
                tCP[playerid] = -1;
                SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoint.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_LIGHTRED, "No trailler is attached.");
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any Trucking vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a trucker.");
}



Re: Checkpoints mixing. - milanosie - 25.05.2012

I guess it is. let me show you one of my jobs:

like /startsweep

pawn Код:
CMD:startsweep(playerid, params[])
{
    if(vjob[GetPlayerVehicleID(playerid)] == 5)
    {
        if(PlayerInfo[playerid][pJob] == pJob_5)
        {
            if(isjob[playerid] == 1) return error(playerid,"You are already on a job!");
            isjob[playerid] = 1;
            SetPlayerCheckpoint(playerid, 2089.6030,-2038.8513,13.5469, 4.0);
            SendClientMessage(playerid, 0xFFFF00, "You can start sweeping..");
            qCP[playerid] = -1;
            pCP[playerid] = -1;
            lCP[playerid] = 0;
            oCP[playerid] = -1;
            CarTest[playerid] = -1;
            ontaxi[playerid] = -1;
            wCP[playerid] = -1;
            kCP[playerid] = -1;
            return 1;
        }
        else return SendClientMessage(playerid, 0xFFFF00, "You are not street sweeper.");
    }
    else return SendClientMessage(playerid, 0xFFFF00, "You need to be in a sweeper car to Start.");
}
Notice how I set all other jobs to -1?


Re: Checkpoints mixing. - ricardo178 - 25.05.2012

Hmm, so is this bettr like that:
pawn Код:
CMD:startsweep(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 1)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 574)
        {
            SetPlayerCheckpoint(playerid, -2106.6787,-2361.6228,30.4688, 5.0);
            sCP[playerid] = -1;
            SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoints.");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any sweeping vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a sweeper.");
}
CMD:starttruck(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 2)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 514)
        {
            if(IsTrailerAttachedToVehicle(vehicleid))
            {
                SetPlayerCheckpoint(playerid, -2051.4927,-2488.2144,30.1957, 5.0);
                tCP[playerid] = -1;
                SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoint.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_LIGHTRED, "No trailler is attached.");
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any Trucking vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a trucker.");
}
Or like that?

pawn Код:
CMD:startsweep(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 1)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 574)
        {
            SetPlayerCheckpoint(playerid, -2106.6787,-2361.6228,30.4688, 5.0);
            sCP[playerid] = 0;
                tCP[playerid] = -1;
            SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoints.");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any sweeping vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a sweeper.");
}
CMD:starttruck(playerid, params[])
{
    if(PlayerInfo[playerid][Job] == 2)
    {
        new vehicleid;
        vehicleid = GetPlayerVehicleID(playerid);
        if(GetVehicleModel(vehicleid) == 514)
        {
            if(IsTrailerAttachedToVehicle(vehicleid))
            {
                SetPlayerCheckpoint(playerid, -2051.4927,-2488.2144,30.1957, 5.0);
                tCP[playerid] = 0;
                        sCP[playerid] = -1;
                SendClientMessage(playerid, COLOR_LIGHTRED, "You started your job. Follow the checkpoint.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_LIGHTRED, "No trailler is attached.");
        }
        else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not inside any Trucking vehicle.");
    }
    else return SendClientMessage(playerid, COLOR_LIGHTRED, "You are not a trucker.");
}
Like, On the first job, it's street sweeper, and sweeper variable is sCP[playerid].
On OnPlayerEnterCheckpoint, it checks this:

pawn Код:
public OnPlayerEnterCheckpoint(playerid)
{
    if(sCP[playerid] != -1)
    {
        GivePlayerMoney(playerid, 40);
        if(sCP[playerid] < (sizeof(BCP) - 1))
        {
            sCP[playerid]++;
            SetPlayerCheckpoint(playerid, BCP[sCP[playerid]][0], BCP[sCP[playerid]][1], BCP[sCP[playerid]][2], 5.0);
        }
        else
        {
            SendClientMessage(playerid, 0x999999AA, "Route finished");
            DisablePlayerCheckpoint(playerid);
            sCP[playerid] = -1;
        }
    }
    if(tCP[playerid] != -1)
    {
        GivePlayerMoney(playerid, 250);
        if(tCP[playerid] < (sizeof(TCP) - 1))
        {
            tCP[playerid]++;
            SetPlayerCheckpoint(playerid, TCP[tCP[playerid]][0], TCP[tCP[playerid]][1], TCP[tCP[playerid]][2], 5.0);
        }
        else
        {
            SendClientMessage(playerid, 0x999999AA, "Route finished");
            DisablePlayerCheckpoint(playerid);
            tCP[playerid] = -1;
        }
    }
}
I am so damn confused.