Taxi problem (with passenger leaving) still need help
#1

The idea of this script is that when a driver is in a driver vehicle (taxi etc), then every second it checks whether or not a passenger is inside it. The timer then stops when a passenger enters and then another timer starts which checks every 10 second whether they are still in the vehicle together. If they are not, the timer stops. This system works vice versa with a passenger entering first and then a driver entering afterward. The way to stop the timer which checks if they are still in there is if a player leaves...

I made client messages to tell me when any of these things happen, they are the "DEVELOPER MESSAGE". The problem I have is that if a driver enters a vehicle, and then a passenger enters the vehicle, and then the passenger leaves, the script detects the driver leaving...not the passenger. If I do this the other way around and have the passenger sit in the car first and the driver enter, then exit...it works fine

Here is the script, any help would be greatly appreciated:

If you're wondering about indentations, they are FINE on my screen...just look a bit funky on the forums

Код:
#include <a_samp>
#include <a_zones>

#define FILTERSCRIPT

//COLORS

#define COLOR_GREY 			0xAFAFAFAA
#define COLOR_GREEN 		0x33AA33AA
#define COLOR_LIME 			0x00FF00FF
#define COLOR_RED 			0xAA3333AA
#define COLOR_RED2 			0xFF0000FF
#define COLOR_YELLOW 		0xFFFF94FF
#define COLOR_YELLOW2 		0xFFFF00AA
#define COLOR_DARKYELLOW 	0xD5D57CFF
#define COLOR_DARKPURPLE 	0x500085FF
#define COLOR_PINK 			0xFF66FFAA
#define COLOR_BLUE 			0x0000BBAA
#define COLOR_BLUE2 		0x000DCFE
#define COLOR_BLUE4     0x33AAFFFF
#define COLOR_LIGHTBLUE   0x33CCFFAA
#define COLOR_PURPLE 		0x6600AAAA
#define COLOR_MINT 			0x55FF55FF
#define COLOR_CYAN 			0x99FFFFAA
#define COLOR_SKY 			0x00BFFFFF
#define COLOR_WHITE 		0xFFFFFFAA
#define COLOR_DARKRED 		0x660000AA
#define COLOR_ORANGE 		0xFF9900AA
#define COLOR_DARKORANGE 	0xD37E00FF
#define COLOR_BLACK 		0x000000FF
#define COLOR_DARKGREEN 	0x003200FF
#define COLOR_TAN 			0xEBC79EFF
#define COLOR_DARKTAN 		0x76644FFF
#define COLOR_BROWN 		0x5A4C3CFF
#define COLOR_YG 			0x99CC32FF

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
	if (!IsPlayerConnected(playerid))return 1;
	new Float:oldposx, Float:oldposy, Float:oldposz;
	new Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	tempposx = (oldposx -x);
	tempposy = (oldposy -y);
	tempposz = (oldposz -z);

 	if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) return 1;
	return 0;
}

stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
	new Float:a;
	GetPlayerPos(playerid, x, y, a);
	GetPlayerFacingAngle(playerid, a);
	if (GetPlayerVehicleID(playerid))
	{
	  GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
	}
	x += (distance * floatsin(-a, degrees));
	y += (distance * floatcos(-a, degrees));
}

new civilianskin;
new playerdriver[MAX_PLAYERS];
new playerpassenger[MAX_PLAYERS];
new civilianskinstore[MAX_PLAYERS];
new Menu:drivermenu;
new drivervehicle;
new passengervehicle;
new driverindrivervehicle[MAX_PLAYERS];
new passengerindrivervehicle[MAX_PLAYERS];
new driverid;
new passengerid;
new playerindrivervehicle[MAX_PLAYERS];

new drivernotwithpassengertimer;
new passengernotwithdrivertimer;
new driverwithpassengertimer;
forward drivernotwithpassenger();
forward passengernotwithdriver();
forward driverwithpassenger();

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print("Driver filterscript by David");
	print("--------------------------------------\n");


  drivermenu = CreateMenu("Uniforms", 1, 200.0, 100.0, 150.0, 150.0);
  AddMenuItem(drivermenu, 0, "Taxi Uniform");
	AddMenuItem(drivermenu, 0, "Limo Uniform");
	AddMenuItem(drivermenu, 0, "Pilot Uniform");
	AddMenuItem(drivermenu, 0, "Own Clothes");
	return 1;
}

#endif


public OnPlayerConnect(playerid)
{
	playerpassenger[playerid] = 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
 
	dcmd(driver,6,cmdtext);
	return 0;
}


dcmd_driver(playerid,params[])
{
  if(strlen(params))return SendClientMessage(playerid,COLOR_RED2,"USAGE: /driver");

	if(PlayerToPoint(10,playerid,1742.7712,-1861.4250,13.5775) ||
		PlayerToPoint(10,playerid,1757.3015,-1865.2704,13.5728) ||
		PlayerToPoint(10,playerid,1769.4180,-1865.0236,13.5731) ||
		PlayerToPoint(10,playerid,1782.3229,-1863.8545,13.5746) ||
		PlayerToPoint(10,playerid,824.0362,-1341.7242,13.5157) ||
		PlayerToPoint(10,playerid,-1982.8058,137.7680,27.6875) ||
		PlayerToPoint(10,playerid,-1422.1908,-288.3699,14.1484) ||
		PlayerToPoint(10,playerid,-1402.8641,-307.4414,14.1484) ||
		PlayerToPoint(10,playerid,-1386.7139,-333.6652,14.1544) ||
		PlayerToPoint(10,playerid,-1438.7676,-275.6929,14.1544) ||
		PlayerToPoint(10,playerid,-1464.1483,-266.1769,14.1544) ||
		PlayerToPoint(10,playerid,1703.1444,1364.0714,10.7475) ||
		PlayerToPoint(10,playerid,1680.5454,1385.6791,10.7319) ||
		PlayerToPoint(10,playerid,1664.2073,1423.2415,10.7884) ||
		PlayerToPoint(10,playerid,1674.8639,1447.7676,10.7891) ||
		PlayerToPoint(10,playerid,1664.9240,1472.4905,10.7761) ||
		PlayerToPoint(10,playerid,1675.4473,1499.0393,10.7709) ||
		PlayerToPoint(10,playerid,1703.3502,1528.4805,10.7578) ||
		PlayerToPoint(10,playerid,1432.9138,2618.3657,11.3926) ||
		PlayerToPoint(10,playerid,1433.7814,2653.6682,11.3926) ||
		PlayerToPoint(10,playerid,2848.4590,1290.5143,11.3906) ||
		PlayerToPoint(10,playerid,2790.9644,1252.8810,11.3125) ||
		PlayerToPoint(10,playerid,2806.1514,1252.6622,11.3125) ||
		PlayerToPoint(10,playerid,2774.7356,1253.3054,11.3125) ||
		PlayerToPoint(10,playerid,2840.3730,1263.4608,11.3906) ||
		PlayerToPoint(10,playerid,2840.0632,1318.1053,11.3906))
	{
	}
	else
	{
	  return SendClientMessage(playerid,COLOR_RED,"You need to be at a train station or airport to be a driver");
	}
	if(playerdriver[playerid] == 1)
	{
		SendClientMessage(playerid,COLOR_CYAN,"You have gone off driver duty");
		SetPlayerSkin(playerid,civilianskinstore[playerid]);
		SetPlayerColor(playerid,COLOR_WHITE);
		playerdriver[playerid] = 0;
		playerpassenger[playerid] = 1;
		return 1;
	}
	else
	{
	  SendClientMessage(playerid,COLOR_CYAN,"Welcome to the driver duty menu, please select a uniform");
 		ShowMenuForPlayer(drivermenu,playerid);
		civilianskin = GetPlayerSkin(playerid);
		civilianskinstore[playerid] = civilianskin;
		TogglePlayerControllable(playerid,0);
		return 1;
	}
}

public OnPlayerSelectedMenuRow(playerid,row)
{
  new Menu:currentmenu = GetPlayerMenu(playerid);
  if (currentmenu == drivermenu)
	{
 		switch(row)
  	{
    	case 0: // Taxi Uniform
    	{
				SetPlayerColor(playerid,COLOR_LIME);
        playerdriver[playerid] = 1;
				SetPlayerSkin(playerid,253);
        TogglePlayerControllable(playerid,1);
        playerpassenger[playerid] = 0;
			}
    	case 1: // Limo Uniform
    	{
        SetPlayerColor(playerid,COLOR_LIME);
        playerdriver[playerid] = 1;
        SetPlayerSkin(playerid,255);
        TogglePlayerControllable(playerid,1);
        playerpassenger[playerid] = 0;
			}
 		 	case 2: // Pilot Uniform
    	{
        SetPlayerColor(playerid,COLOR_LIME);
				playerdriver[playerid] = 1;
        SetPlayerSkin(playerid,61);
        TogglePlayerControllable(playerid,1);
        playerpassenger[playerid] = 0;
			}
    	case 3: // Own Clothes
    	{
        SetPlayerColor(playerid,COLOR_LIME);
				playerdriver[playerid] = 1;
        TogglePlayerControllable(playerid,1);
        playerpassenger[playerid] = 0;
			}
			
		}

	}
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	TogglePlayerControllable(playerid,1);
}

	
public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
	new Float:playerx;
	new Float:playery;
	new Float:playerz;
	if(GetVehicleModel(vehicleid) == 420 || GetVehicleModel(vehicleid) == 438 || GetVehicleModel(vehicleid) == 437 || GetVehicleModel(vehicleid) == 420 || GetVehicleModel(vehicleid) == 431) // Driver Vehicles
	{
		if(playerdriver[playerid] == 1)
		{
			driverindrivervehicle[driverid] = 1;
			drivervehicle = GetPlayerVehicleID(driverid);
			drivernotwithpassengertimer = SetTimerEx("drivernotwithpassenger",1000,true,"d",driverid);
      SendClientMessageToAll(COLOR_CYAN,"DEVELOPER MESSAGE - The driver should have entered the vehicle");
			playerindrivervehicle[driverid] = 1;
			return 1;
		}
		if(ispassenger != 1 && playerdriver[playerid] !=1)
		{
			SendClientMessage(playerid,COLOR_RED,"You need to be a driver to drive this");
			GetPlayerPos(playerid,playerx,playery,playerz);
			SetPlayerPos(playerid,playerx,playery,playerz+0.01);
			return 1;
		}
		if(playerpassenger[playerid] == 1)
		{
			passengerindrivervehicle[passengerid] = 1;
			passengervehicle = GetPlayerVehicleID(passengerid);
      passengernotwithdrivertimer = SetTimerEx("passengernotwithdriver",1000,true,"i",passengerid);
      SendClientMessageToAll(COLOR_CYAN,"DEVELOPER MESSAGE - The passenger should have entered the vehicle");
      playerindrivervehicle[passengerid] = 1;
			return 1;
		}
	}

	return 1;
}

public drivernotwithpassenger()
{
	if(passengerindrivervehicle[passengerid] == 0)return 1;
	if(passengervehicle != drivervehicle)return 1;
	KillTimer(drivernotwithpassengertimer);
	KillTimer(passengernotwithdrivertimer);
	driverwithpassengertimer = SetTimerEx("driverwithpassenger",10000,true,"d","d",driverid,passengerid);
	return 1;
}

public passengernotwithdriver()
{
  if(driverindrivervehicle[driverid] == 0)return 1;
	if(passengervehicle != drivervehicle)return 1;
	KillTimer(passengernotwithdrivertimer);
 	KillTimer(drivernotwithpassengertimer);
	driverwithpassengertimer = SetTimerEx("driverwithpassenger",10000,true,"d","d",driverid,passengerid);
	return 1;
}
	
	
public driverwithpassenger()
{
	SendClientMessageToAll(COLOR_LIME,"DEVELOPER MESSAGE - There should be both driver and passenger in a driver vehicle");

	// FEE will be placed here - automatic transfers from passenger(s) to driver at a constant rate based on /setfee which will be added later


}
	

public OnPlayerExitVehicle(playerid, vehicleid)
{
	if(!playerindrivervehicle[playerid])return 1;

	if(playerid == driverid)
  {
		driverindrivervehicle[driverid] = 0;
		SendClientMessageToAll(COLOR_CYAN,"DEVELOPER MESSAGE - The driver should have left the vehicle");
		KillTimer(driverwithpassengertimer);
		KillTimer(drivernotwithpassengertimer);
		playerindrivervehicle[driverid] = 0;
		return 1;
	}
	else
	{
		passengerindrivervehicle[passengerid] = 0;
    SendClientMessageToAll(COLOR_CYAN,"DEVELOPER MESSAGE - The passenger should have left the vehicle");
    KillTimer(driverwithpassengertimer);
		KillTimer(passengernotwithdrivertimer);
		playerindrivervehicle[passengerid] = 0;
		return 1;
	}
	
}
Reply
#2

Anyone? Sorry for bumping but I really need help with this
Reply
#3

Seriously, can anyone help me?
Reply
#4

Stop spamming your own topics or you will never get help. Post big codes at pastebin next time and try to search a bit.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)