How to make this script to requre to be on duty to enter in the taxi ?
#1

pawn Код:
Script:
/*                                                      Taxi job script by Jari_Johnson
                                                                Keep the credits!
                                                                Version 1.0 bиta

When on foot, use /duty to go on duty as a taxi driver, when you have a customer, use /fare to start the fare.
If you need to spawn a taxi, use /spawntaxi (can be disabled).
                                                               
                                                                                                                                            */



#include <a_samp> //Credits to the SA-MP Team
#include <zcmd> //Credits to Zeex
#include <colors> //Credits to Oxside
#include <getvehicledriver> //Credits to Smeti

#define STARTAMOUNT 2.66 //This is the starting amount for the fare, remember, enter is as a float, ex. 1.23
#define MONEYPER100 100.00 //This is the amount of money the customer has to pay each 100 meters, remember, enter as a float, ex. 1.23
#define ScriptVersion "1.0b"//Do not change, this is for my reference.
#define AllowTaxiSpawn  //Comment this line if you don't want to allow the /spawntaxi command.

//===NEW'S====//
new Text:taxiblackbox[MAX_PLAYERS];
new Text:taxigreendisplay[MAX_PLAYERS];
new Text:taxitimedisplay[MAX_PLAYERS];
new Text:taxi100mfare[MAX_PLAYERS];
new Text:taxithisfare[MAX_PLAYERS];
new Text:taxilstlogo[MAX_PLAYERS];
new Text:taxistatus[MAX_PLAYERS];
new Text:startfare[MAX_PLAYERS];
new IsOnFare[MAX_PLAYERS];
new OnDuty[MAX_PLAYERS];
new clockupdate;
new faretimer[MAX_PLAYERS];

new Float:OldX[MAX_PLAYERS],Float:OldY[MAX_PLAYERS],Float:OldZ[MAX_PLAYERS],Float:NewX[MAX_PLAYERS],Float:NewY[MAX_PLAYERS],Float:NewZ[MAX_PLAYERS];
new Float:TotalFare[MAX_PLAYERS];

//
public OnFilterScriptInit()
{
CreateVehicle(420, -304.8741, 1582.2256, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -302.7424, 1579.9385, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -300.1150, 1577.4805, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -297.6367, 1574.8727, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -295.0744, 1572.3854, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -292.6953, 1570.1365, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -290.1047, 1567.6472, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -287.6207, 1565.0135, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -285.1460, 1562.5371, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -282.7310, 1560.1447, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -280.2410, 1557.3778, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -277.7827, 1555.0767, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -275.3917, 1552.3762, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -270.4198, 1547.5026, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -273.0469, 1549.8636, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -265.5028, 1542.3480, 75.0000, -45.0000, -1, -1, 100);
CreateVehicle(420, -268.0658, 1544.9388, 75.0000, -45.0000, -1, -1, 100);


    print("\n--------------------------------------");
    printf("    Jari_Johnson's Taxi Script\n          Version %s",ScriptVersion);
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}
public OnPlayerConnect(playerid)
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    KillTimer(faretimer[playerid]);
    OnDuty[playerid] = 0;
    IsOnFare[playerid] = 0;
   
    TotalFare[playerid] = 0.0;
   
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 420)
{
SendClientMessage(playerid, 0xFFFFFFF, "Use /duty ,then when a passenger enter in your taxi use /fare and drive him.");
}
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
   
    new driver = GetVehicleDriver(vehicleid);
    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && TotalFare[driver] > 0)
    {
    new money = floatround(TotalFare[driver]);
    new message[128];
    format(message,sizeof(message),"You must pay %d $ to the Taxi driver.Use /pay or police will arrest you !",money);
    GivePlayerMoney(playerid,-money);
    TotalFare[driver] = 0;
    TextDrawSetString(taxithisfare[driver],"Total Fare: N/A");
    GivePlayerMoney(driver,money);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,message);
    format(message,sizeof(message),"%s Must pay you %d $ for the ride.",GetPlayerNameEx(playerid),money);
    SendClientMessage(driver,COLOR_LIGHTBLUE,message);
    TotalFare[driver] = 0.00;
   
   
    IsOnFare[driver] = 0;
    KillTimer(faretimer[driver]);
    }
   

   
   

    for(new i=0; i < MAX_PLAYERS; i++)
    {
    TextDrawHideForPlayer(playerid, taxiblackbox[i]);
    TextDrawHideForPlayer(playerid, startfare[i]);
    TextDrawHideForPlayer(playerid, taxigreendisplay[i]);
    TextDrawHideForPlayer(playerid, taxitimedisplay[i]);
    TextDrawHideForPlayer(playerid, taxi100mfare[i]);
    TextDrawHideForPlayer(playerid, taxithisfare[i]);
    TextDrawHideForPlayer(playerid, taxilstlogo[i]);
    TextDrawHideForPlayer(playerid, taxistatus[i]);
    TextDrawHideForPlayer(playerid, startfare[i]);
    }
    TextDrawSetString(taxistatus[driver],"Taxi Status: Free");

    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    new driver = GetVehicleDriver(vehicleid);
    if(newstate == PLAYER_STATE_DRIVER)
    {
   
    if(OnDuty[playerid] == 1 && IsATaxi(vehicleid) == 1)
    {

    TextDrawShowForPlayer(playerid, taxiblackbox[playerid]);
    TextDrawShowForPlayer(playerid, taxigreendisplay[playerid]);
    TextDrawShowForPlayer(playerid, taxitimedisplay[playerid]);
    TextDrawShowForPlayer(playerid, taxi100mfare[playerid]);
    TextDrawShowForPlayer(playerid, startfare[playerid]);
    TextDrawShowForPlayer(playerid, taxithisfare[playerid]);
    TextDrawShowForPlayer(playerid, taxilstlogo[playerid]);
    TextDrawShowForPlayer(playerid, taxistatus[playerid]);
    }
    }
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    if(OnDuty[driver] == 1)
    {
   
    TextDrawShowForPlayer(playerid, taxiblackbox[driver]);
    TextDrawShowForPlayer(playerid, taxigreendisplay[driver]);
    TextDrawShowForPlayer(playerid, taxitimedisplay[driver]);
    TextDrawShowForPlayer(playerid, taxi100mfare[driver]);
    TextDrawShowForPlayer(playerid, taxithisfare[driver]);
    TextDrawShowForPlayer(playerid, taxilstlogo[driver]);
    TextDrawSetString(taxistatus[driver],"Taxi Status: Occupied");
    TextDrawShowForPlayer(playerid, taxistatus[driver]);
    TextDrawShowForPlayer(playerid, startfare[driver]);

    }
    }
    if(newstate == PLAYER_STATE_ONFOOT)
    {
   
    TextDrawHideForPlayer(playerid, taxiblackbox[playerid]);
    TextDrawHideForPlayer(playerid, taxigreendisplay[playerid]);
    TextDrawHideForPlayer(playerid, taxitimedisplay[playerid]);
    TextDrawHideForPlayer(playerid, taxi100mfare[playerid]);
    TextDrawHideForPlayer(playerid, taxithisfare[playerid]);
    TextDrawHideForPlayer(playerid, taxilstlogo[playerid]);
    TextDrawHideForPlayer(playerid, taxistatus[playerid]);
    TextDrawHideForPlayer(playerid, startfare[playerid]);
   
    if(IsOnFare[playerid] == 1)
    {
   

    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Taxi duty over - You exited the vehicle!");
    OnDuty[playerid] = 0;
    TotalFare[playerid] = 0.00;
    TextDrawSetString(taxithisfare[playerid],"N/A");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Fare stopped");
    IsOnFare[playerid] = 0;
    KillTimer(faretimer[playerid]);
    TextDrawDestroy(taxiblackbox[playerid]);
    TextDrawDestroy(taxigreendisplay[playerid]);
    TextDrawDestroy(taxitimedisplay[playerid]);
    TextDrawDestroy(taxi100mfare[playerid]);
    TextDrawDestroy(taxithisfare[playerid]);
    TextDrawDestroy(taxilstlogo[playerid]);
    TextDrawDestroy(taxistatus[playerid]);
    TextDrawDestroy(startfare[playerid]);
    TextDrawDestroy(taxiblackbox[driver]);
    TextDrawDestroy(taxigreendisplay[driver]);
    TextDrawDestroy(taxitimedisplay[driver]);
    TextDrawDestroy(taxi100mfare[driver]);
    TextDrawDestroy(taxithisfare[driver]);
    TextDrawDestroy(taxilstlogo[driver]);
    TextDrawDestroy(taxistatus[driver]);
    TextDrawDestroy(startfare[driver]);
   
   

    }
    }
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}
//==COMMANDS==//
CMD:fare(playerid,params[])
{
    if(OnDuty[playerid] == 0) return SendClientMessage(playerid,COLOR_RED,"You are not on duty");
    new vehicleid = GetPlayerVehicleID(playerid);
    if(!IsATaxi(vehicleid)) return SendClientMessage(playerid,COLOR_RED,"You need to be in a taxi to do this!");
    if(GetPlayerVehicleSeat(playerid) != 0) return SendClientMessage(playerid,COLOR_RED,"You need to be the driver to do this!");
    if(CheckPassengers(vehicleid) != 1) return SendClientMessage(playerid,COLOR_RED,"DO NOT ABUSE YOUR JOB! Wait for someone to get in the taxi!");
    if(IsOnFare[playerid] == 0)
    {
   
    if(IsOnFare[playerid] == 1) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"You are already on a fare");
    GetPlayerPos(playerid,Float:OldX[playerid],Float:OldY[playerid],Float:OldZ[playerid]);
    faretimer[playerid] = SetTimerEx("FareUpdate", 1000, true, "i", playerid);
    IsOnFare[playerid] = 1;
    TotalFare[playerid] = STARTAMOUNT;
    new formatted[128];
    format(formatted,128,"Total Fare: %.2f $",STARTAMOUNT);
    TextDrawSetString(taxithisfare[playerid],formatted);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"You are now on a fare, take your customer to his/her desired place!");
    return 1;
    }
    if(IsOnFare[playerid] == 1)
    {
    TotalFare[playerid] = 0.00;
    TextDrawSetString(taxithisfare[playerid],"Total Fare: N/A");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Fare stopped");
    IsOnFare[playerid] = 0;
    KillTimer(faretimer[playerid]);
    return 1;
    }
    return 1;
   
}
CMD:spawntaxi(playerid,params[])
{
    #if defined AllowTaxiSpawn
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateVehicle(420,x,y,z,0,0,0,10000);
    return 1;
    #else
    return SendClientMessage(playerid,COLOR_RED,"This command is disabled");

    #endif
   
}
CMD:duty(playerid,params[])
{
   
    if(IsOnFare[playerid] == 1) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"You are currently on a fare, you cant go off duty now!");
    if(OnDuty[playerid] == 0)
    {
    OnDuty[playerid] = 1;
   
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"You are now on duty!");



    taxiblackbox[playerid] = TextDrawCreate(497.000000, 302.000000, "              ");
    TextDrawBackgroundColor(taxiblackbox[playerid], 255);
    TextDrawFont(taxiblackbox[playerid], 1);
    TextDrawLetterSize(taxiblackbox[playerid], 0.500000, 1.000000);
    TextDrawColor(taxiblackbox[playerid], -1);
    TextDrawSetOutline(taxiblackbox[playerid], 0);
    TextDrawSetProportional(taxiblackbox[playerid], 1);
    TextDrawSetShadow(taxiblackbox[playerid], 1);
    TextDrawUseBox(taxiblackbox[playerid], 1);
    TextDrawBoxColor(taxiblackbox[playerid], 255);
    TextDrawTextSize(taxiblackbox[playerid], 140.000000, -1.000000);

    taxigreendisplay[playerid] = TextDrawCreate(484.000000, 318.000000, "          ");
    TextDrawBackgroundColor(taxigreendisplay[playerid], 255);
    TextDrawFont(taxigreendisplay[playerid], 1);
    TextDrawLetterSize(taxigreendisplay[playerid], 0.500000, 1.000000);
    TextDrawColor(taxigreendisplay[playerid], -1);
    TextDrawSetOutline(taxigreendisplay[playerid], 0);
    TextDrawSetProportional(taxigreendisplay[playerid], 1);
    TextDrawSetShadow(taxigreendisplay[playerid], 1);
    TextDrawUseBox(taxigreendisplay[playerid], 1);
    TextDrawBoxColor(taxigreendisplay[playerid], 576786175);
    TextDrawTextSize(taxigreendisplay[playerid], 154.000000, -1.000000);

    taxitimedisplay[playerid] = TextDrawCreate(160.000000, 340.000000, "Time:  Loading..");
    TextDrawBackgroundColor(taxitimedisplay[playerid], 255);
    TextDrawFont(taxitimedisplay[playerid], 2);
    TextDrawLetterSize(taxitimedisplay[playerid], 0.250000, 0.799999);
    TextDrawColor(taxitimedisplay[playerid], 835715327);
    TextDrawSetOutline(taxitimedisplay[playerid], 1);
    TextDrawSetProportional(taxitimedisplay[playerid], 1);
    new format100[128];
    format(format100,128,"Price per 100 meters: %.2f",MONEYPER100);
    taxi100mfare[playerid] = TextDrawCreate(160.000000, 360.000000, format100);
    TextDrawBackgroundColor(taxi100mfare[playerid], 255);
    TextDrawFont(taxi100mfare[playerid], 2);
    TextDrawLetterSize(taxi100mfare[playerid], 0.250000, 0.799999);
    TextDrawColor(taxi100mfare[playerid], 835715327);
    TextDrawSetOutline(taxi100mfare[playerid], 1);
    TextDrawSetProportional(taxi100mfare[playerid], 1);

    taxithisfare[playerid] = TextDrawCreate(160.000000, 380.000000, "This fare: N/A ");
    TextDrawBackgroundColor(taxithisfare[playerid], 255);
    TextDrawFont(taxithisfare[playerid], 2);
    TextDrawLetterSize(taxithisfare[playerid], 0.250000, 0.799999);
    TextDrawColor(taxithisfare[playerid], 835715327);
    TextDrawSetOutline(taxithisfare[playerid], 1);
    TextDrawSetProportional(taxithisfare[playerid], 1);

    taxilstlogo[playerid] = TextDrawCreate(220.000000, 317.000000, "Los Santos Transport");
    TextDrawBackgroundColor(taxilstlogo[playerid], 255);
    TextDrawFont(taxilstlogo[playerid], 3);
    TextDrawLetterSize(taxilstlogo[playerid], 0.550000, 1.799998);
    TextDrawColor(taxilstlogo[playerid], 835715327);
    TextDrawSetOutline(taxilstlogo[playerid], 1);
    TextDrawSetProportional(taxilstlogo[playerid], 1);

    taxistatus[playerid] = TextDrawCreate(320.000000, 390.000000, "Taxi Status: ");
    TextDrawBackgroundColor(taxistatus[playerid], 255);
    TextDrawFont(taxistatus[playerid], 2);
    TextDrawLetterSize(taxistatus[playerid], 0.250000, 0.799998);
    TextDrawColor(taxistatus[playerid], 835715327);
    TextDrawSetOutline(taxistatus[playerid], 1);
    TextDrawSetProportional(taxistatus[playerid], 1);
    new formatted[128];
    format(formatted,128,"Start fare: %.2f",STARTAMOUNT);

    startfare[playerid] = TextDrawCreate(380.000000, 340.000000, formatted);

    TextDrawBackgroundColor(startfare[playerid], 255);

    TextDrawFont(startfare[playerid], 2);

    TextDrawLetterSize(startfare[playerid], 0.250000, 0.799998);

    TextDrawColor(startfare[playerid], 835715327);

    TextDrawSetOutline(startfare[playerid], 1);

    TextDrawSetProportional(startfare[playerid], 1);

    TextDrawSetString(taxistatus[playerid],"Taxi Status: Free");
    Clock();

    return 1;
    }

    if(OnDuty[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"You are now Off-Duty");
    OnDuty[playerid] = 0;
 TextDrawDestroy(taxiblackbox[playerid]);
    TextDrawDestroy(taxigreendisplay[playerid]);
    TextDrawDestroy(taxitimedisplay[playerid]);
    TextDrawDestroy(taxi100mfare[playerid]);
    TextDrawDestroy(taxithisfare[playerid]);
    TextDrawDestroy(taxilstlogo[playerid]);
    TextDrawDestroy(taxistatus[playerid]);
    TextDrawDestroy(startfare[playerid]);

    return 1;
    }


    return 1;
}
//
forward Clock();
public Clock()
{
    new hour,minute;
    gettime(hour,minute);
    new string[128];
    if(minute < 10)
    {
    format(string,sizeof(string),"Time: %d : 0%d",hour,minute);
    }
    else
    {
    format(string,sizeof(string),"Time: %d : %d",hour,minute);
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(OnDuty[i] == 1)
    {
    TextDrawSetString(taxitimedisplay[i],string);
    }
    }
    }
    KillTimer(clockupdate);
    clockupdate = SetTimer("Clock",60000,0);
}
forward IsATaxi(vehicleid);
public IsATaxi(vehicleid)
{
    new vmodel = GetVehicleModel(vehicleid);
    if(vmodel == 420 || vmodel == 438)
    {
        return 1;
    }
    return 0;
}
forward FareUpdate(playerid);
public FareUpdate(playerid)
{

   
    new farestring[128];
    GetPlayerPos(playerid,NewX[playerid],NewY[playerid],NewZ[playerid]);
    new Float:totdistance = GetDistanceBetweenPoints(OldX[playerid],OldY[playerid],OldZ[playerid], NewX[playerid],NewY[playerid],NewZ[playerid]);
    if(totdistance > 100.0)
    {
    TotalFare[playerid] = TotalFare[playerid]+MONEYPER100;
    format(farestring,sizeof(farestring),"Total Fare: %.2f $",TotalFare[playerid]);
    TextDrawSetString(taxithisfare[playerid],farestring);
    GetPlayerPos(playerid,Float:OldX[playerid],Float:OldY[playerid],Float:OldZ[playerid]);
    }


    return 1;

}
forward Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2);
stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
    x1 -= x2;
    y1 -= y2;
    z1 -= z2;
    return floatsqroot((x1 * x1) + (y1 * y1) + (z1 * z1));
}
stock CheckPassengers(vehicleid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInAnyVehicle(i))
    {
    if(GetPlayerVehicleID(i) == vehicleid && i != GetVehicleDriver(vehicleid))
    {
   
    return 1;
   
    }
    }
    }
    return 0;
}
stock GetPlayerNameEx(playerid)
{
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof(pname));
    return pname;
}
Reply
#2

I think the easiest way would be to make a global bool for every player: set it to false by default, and when a player goes on duty set his bool to true. If a player trys to get into a taxi that is being driven check the driver's bool and if it is false disallow him to get into the vehicle.
Reply
#3

I didnt understand
Reply
#4

pawn Код:
new OnDuty[MAX_PLAYERS]=false;//global

OnDuty[playerid] =true; // under command for /onduty like..

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER) // Player entered a vehicle as a driver
    {
        if(OnDuty[playerid] == true || /*Vehicle id(s)*/)
        {
         // code
        }
    }
    return 1;
}
this is what i got...
Reply
#5

Doesnt work
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)