Extending Truckingmissions.inc
#1

Hey guys.

I was trying to upgrade the mission system on my server with more classes. But sadly i have no idea how to upgrade Truckingmissions.inc to have more than just a trucking class. If anybody could write me a simple demonstration script of let's say a Pilot class, that would be awesome!

Thanks in advance,

Excelize.

Truckingmissions.inc code:

Код:
/* CREDITS:
** Blabla93 A.K.A [TGG]Bill | Coding the include
** [HiC]TheKiller, Kwarde & RealCop228 for the suggestion of adding a race checkpoints
** Mauzen for having the idea to add (playerid) call back!
*/

/* CHANGE LOG
*** VERSION 2.0
** You can now cancel a players mission but using CancelPlayersCurrentMission(playerid);
** You can now add custom stuff to when the player finishs the mission using public OnPlayerFinishMission(playerid)
** If you un comment "#define USE_RACE_CHECKPOINT" the Include will use race checkpoints instead of regulare checkpoints!
** You can adjust the amount a player looses when they loose there trailer for 30 seconds if TrailerCheck is enabled using "#define COST_OF_LOST_GOODS"
** You can change the size of the checkpoints using "#define CHECKPOINT_SIZE"
*/

#include <a_samp>
#define COST_OF_LOST_GOODS 4500
#define CHECKPOINT_SIZE 7
//#define USE_RACE_CHECKPOINT   // Un comment this line to enable Race Checkoints!

/* Only change this if USE_RACE_CHECKPOINT is enabled! */
#define RACE_CHECKPOINT_TYPE 0
/* KEY
** 0-Normal
** 1-Finish
** 2-Nothing(Only the checkpoint without anything on it)
** 3-Air normal
** 4-Air finish
*/

enum missioninfo
{
//    MissionText[200],  For Future Versions
	Pay,
	Checkpoint,
	CheckpointID,
	Float:Lastx,
	Float:Lasty,
	Float:Lastz,
 	TrailerID,
 	bool:AllowTrailerCheck,
 	TrailerCheckCount
}
new minfo[MAX_PLAYERS][missioninfo];

new LTimer[MAX_PLAYERS];
new ULTimer[MAX_PLAYERS];
new TrailerCheckTimer[MAX_PLAYERS];
new s[250];

stock CreatePlayerMission(playerid, bool:TrailerCheck, MissionPay, Float:Startx, Float:Starty, Float:Startz, Float:Endx, Float:Endy, Float:Endz)
{
    if (TrailerCheck == true)
	{
		new pvehiclemodel = GetVehicleModel(GetPlayerVehicleID(playerid));
		if (pvehiclemodel == 403 || pvehiclemodel == 514 || pvehiclemodel == 515)
		{
		    minfo[playerid][AllowTrailerCheck] = true;
		}
		else return 1;
	}
	
/*	format(s, sizeof(s), "You are doing mission: %s", Mission);
	SendClientMessage(playerid, 0x00FF00FF, s);*/
	minfo[playerid][Pay] = MissionPay;
	minfo[playerid][Lastx] = Endx;
	minfo[playerid][Lasty] = Endy;
	minfo[playerid][Lastz] = Endz;
	minfo[playerid][CheckpointID] = 1;
//	minfo[playerid][MissionText] = Mission;
	#if defined USE_RACE_CHECKPOINT
        minfo[playerid][Checkpoint] = SetPlayerRaceCheckpoint(playerid, RACE_CHECKPOINT_TYPE, Startx, Starty, Startz, Endx, Endy, Endz, CHECKPOINT_SIZE);
	#else
        minfo[playerid][Checkpoint] = SetPlayerCheckpoint(playerid, Startx, Starty, Startz, CHECKPOINT_SIZE);
	#endif
  	return 1;
}

stock CancelPlayersCurrentMission(playerid)
{
	if (minfo[playerid][AllowTrailerCheck] == true)
	{
        KillTimer(TrailerCheckTimer[playerid]);
	    minfo[playerid][TrailerCheckCount] = 0;
	    minfo[playerid][AllowTrailerCheck] = false;
	}
    format(s, sizeof(s), "You payed $%d for lost goods", COST_OF_LOST_GOODS);
    SendClientMessage(playerid, 0xFF0000AA, s);
    GivePlayerMoney(playerid, -COST_OF_LOST_GOODS);
    SetPlayerScore(playerid, GetPlayerScore(playerid) -1);
    #if defined USE_RACE_CHECKPOINT
    	DisablePlayerRaceCheckpoint(playerid);
	#else
	    DisablePlayerCheckpoint(playerid);
	#endif
	return 1;
}

forward M_OnPlayerConnect(playerid);
public M_OnPlayerConnect(playerid)
{
	minfo[playerid][Pay] = 0;
	minfo[playerid][Lastx] = 0;
	minfo[playerid][Lasty] = 0;
	minfo[playerid][Lastz] = 0;
	minfo[playerid][Checkpoint] = 0;
	minfo[playerid][CheckpointID] = 0;
	minfo[playerid][AllowTrailerCheck] = false;
	minfo[playerid][TrailerCheckCount] = 0;
//	minfo[playerid][MissionText] = "";
}


forward M_OnPlayerDisconnect(playerid);
public M_OnPlayerDisconnect(playerid)
{
	if (minfo[playerid][CheckpointID] == 1)
	{
	    KillTimer(LTimer[playerid]);
	}
	if (minfo[playerid][CheckpointID] == 2)
	{
	    KillTimer(ULTimer[playerid]);
	    if (minfo[playerid][AllowTrailerCheck] == true)
		{
		    KillTimer(TrailerCheckTimer[playerid]);
		}
	}
	return 1;
}


forward M_OnPlayerEnterCheckpoint(playerid);
public M_OnPlayerEnterCheckpoint(playerid)
{
	if (minfo[playerid][CheckpointID] == 1)
	{
		if (minfo[playerid][AllowTrailerCheck] == true)
		{
			if (IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
			{
				minfo[playerid][TrailerID] = GetVehicleTrailer(GetPlayerVehicleID(playerid));
				TrailerCheckTimer[playerid] = SetTimerEx("TrailerCheck", 1000, true, "d" , playerid);
			}
			else return SendClientMessage(playerid, 0xFF0000AA, "You need a trailer to load!");

		}
        GameTextForPlayer(playerid, "~r~Loading... ~w~Please Wait", 5000, 5);
        TogglePlayerControllable(playerid, 0);
        LTimer[playerid] = SetTimerEx("Loading", 5000, false, "d" , playerid);
	}
	else if (minfo[playerid][CheckpointID] == 2)
	{
	    if (minfo[playerid][AllowTrailerCheck] == true)
		{
		    if (IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
			{
			    if (minfo[playerid][TrailerID] == GetVehicleTrailer(GetPlayerVehicleID(playerid)))
			    {
			        KillTimer(TrailerCheckTimer[playerid]);
			        minfo[playerid][AllowTrailerCheck] = false;
				}
				else
				{
				    SendClientMessage(playerid, 0xFF0000AA, "You need the trailer you loaded with to un-load!");
				}
	        }
			else return SendClientMessage(playerid, 0xFF0000AA, "You need a trailer to un-load!");
		}
	    GameTextForPlayer(playerid, "~r~Un-Loading... ~w~Please Wait", 5000, 5);
        TogglePlayerControllable(playerid, 0);
        ULTimer[playerid] = SetTimerEx("UnLoading", 5000, false, "d" , playerid);
	}
	return 1;
}

forward M_OnPlayerEnterRaceCheckpoint(playerid);
public M_OnPlayerEnterRaceCheckpoint(playerid)
{
    if (minfo[playerid][CheckpointID] == 1)
	{
		if (minfo[playerid][AllowTrailerCheck] == true)
		{
			if (IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
			{
				minfo[playerid][TrailerID] = GetVehicleTrailer(GetPlayerVehicleID(playerid));
				TrailerCheckTimer[playerid] = SetTimerEx("TrailerCheck", 1000, true, "d" , playerid);
			}
			else return SendClientMessage(playerid, 0xFF0000AA, "You need a trailer to load!");
		}
	    GameTextForPlayer(playerid, "~r~Loading... ~w~Please Wait", 5000, 5);
	    TogglePlayerControllable(playerid, 0);
	    LTimer[playerid] = SetTimerEx("Loading", 5000, false, "d" , playerid);
	}
	else if (minfo[playerid][CheckpointID] == 2)
	{
	    if (minfo[playerid][AllowTrailerCheck] == true)
		{
		    if (IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
			{
			    if (minfo[playerid][TrailerID] == GetVehicleTrailer(GetPlayerVehicleID(playerid)))
			    {
			        KillTimer(TrailerCheckTimer[playerid]);
			        minfo[playerid][AllowTrailerCheck] = false;
				}
				else
				{
				    SendClientMessage(playerid, 0xFF0000AA, "You need the trailer you loaded with to un-load!");
				}
	        }
			else return SendClientMessage(playerid, 0xFF0000AA, "You need a trailer to un-load!");
		}
	    GameTextForPlayer(playerid, "~r~Un-Loading... ~w~Please Wait", 5000, 5);
        TogglePlayerControllable(playerid, 0);
        ULTimer[playerid] = SetTimerEx("UnLoading", 5000, false, "d" , playerid);
	}
    return 1;
}

forward Loading(playerid);
public Loading(playerid)
{
    minfo[playerid][CheckpointID] = 2;
	TogglePlayerControllable(playerid, 1);
	#if defined USE_RACE_CHECKPOINT
	    DisablePlayerRaceCheckpoint(playerid);
        minfo[playerid][Checkpoint] = SetPlayerRaceCheckpoint(playerid, RACE_CHECKPOINT_TYPE, minfo[playerid][Lastx], minfo[playerid][Lasty], minfo[playerid][Lastz], minfo[playerid][Lastx], minfo[playerid][Lasty], minfo[playerid][Lastz], CHECKPOINT_SIZE);
	#else
	    DisablePlayerCheckpoint(playerid);
        minfo[playerid][Checkpoint] = SetPlayerCheckpoint(playerid, minfo[playerid][Lastx], minfo[playerid][Lasty], minfo[playerid][Lastz], CHECKPOINT_SIZE);
	#endif
    return 1;
}

forward UnLoading(playerid);
public UnLoading(playerid)
{
    minfo[playerid][CheckpointID] = 0;
	TogglePlayerControllable(playerid, 1);
	format(s, sizeof(s), "You have earned: $%d", minfo[playerid][Pay]);
	SendClientMessage(playerid, 0x33CCFFAA, s);
	GivePlayerMoney(playerid, minfo[playerid][Pay]);
	SetPlayerScore(playerid, GetPlayerScore(playerid) +1);
    OnPlayerFinishMission(playerid);
	#if defined USE_RACE_CHECKPOINT
	    DisablePlayerRaceCheckpoint(playerid);
	#else
	    DisablePlayerCheckpoint(playerid);
	#endif
    return 1;
}

forward TrailerCheck(playerid);
public TrailerCheck(playerid)
{
    if (minfo[playerid][TrailerID] == GetVehicleTrailer(GetPlayerVehicleID(playerid)))
    {
        if (minfo[playerid][TrailerCheckCount] >= 1)
        {
	        new TimeRemaining;
	        TimeRemaining = 30 - minfo[playerid][TrailerCheckCount];
	        SendClientMessage(playerid, 0x00FF00FF, s);
	        format(s, sizeof(s), "You recoverd your trailer with %d seconds to spare!", TimeRemaining);
		}
		minfo[playerid][TrailerCheckCount] = 0;
        return 1;
	}
	if (minfo[playerid][TrailerCheckCount] == 0)
	{
		SendClientMessage(playerid, 0xFF0000AA, "You lost your load, you have 30 seconds to recover it!");
    	minfo[playerid][TrailerCheckCount]++;
	}
	minfo[playerid][TrailerCheckCount]++;
	if (minfo[playerid][TrailerCheckCount] >= 30)
	{
	    format(s, sizeof(s), "You payed $%d for lost goods", COST_OF_LOST_GOODS);
	    SendClientMessage(playerid, 0xFF0000AA, s);
	    GivePlayerMoney(playerid, -COST_OF_LOST_GOODS);
        KillTimer(TrailerCheckTimer[playerid]);
	    minfo[playerid][TrailerCheckCount] = 0;
	    minfo[playerid][AllowTrailerCheck] = false;
	    #if defined USE_RACE_CHECKPOINT
	    	DisablePlayerRaceCheckpoint(playerid);
		#else
		    DisablePlayerCheckpoint(playerid);
		#endif
	}
	return 1;
}

forward OnPlayerFinishMission(playerid);
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)