Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///================Trucker Job ==============================
- /*
- by XStormeist
- This system contains an unique approach, instead of making the points for the job myself, I wanted to give this oportunity.
- So what's all about? You can create the points where you need to go. Wich are saved in a SQL Database.
- You can also delete one if you don't like it.
- It's a trucker job, but: you are the one that can choose where the player can starts the job from, what are the random points,
- that the player can go to.. all those things in-game, without even a single line of code, isn't that convienient?
- */
- ///===== Includes =============
- #include <a_samp>
- #include <sscanf2>
- #include <a_npc>
- #include <zcmd>
- #include <a_npc>
- //===== Defines ===============
- #define MAX_DELIVERY 100
- #define DATABASE_NAME "JobPoints.db" // name of the database
- #define JOB_GETJOBMESSAGE "Congratiolations, %s you obtained the job. Use /delivery and choose a path." // the message you receive when you get the job
- #define JOB_QUITJOBMESSAGE "We're sorry for this missunderstanding, maybe you will come back, thanks for working with us %s" // the message you receive when you quit the job
- #define DELIV_AV_TIME 1 // how longer it takes for a delivery to become avaiable again!
- #define DIALOG_DELIVERY 0
- #define DIALOG_DELIVERY_I 1
- //Where to get the trailers from!
- #define TRAILER_GET_X 2033.7379
- #define TRAILER_GET_Y 1339.8678
- #define TRAILER_GET_Z 10.8203
- // Where to get the job from
- #define JOB_GET_X 2033.7379
- #define JOB_GET_Y 1339.8678
- #define JOB_GET_Z 10.8203
- //==>
- //Delivery Cars
- // Customize the locations to your liking.
- #define CAR1_X 2040.3250
- #define CAR1_Y 1325.5275
- #define CAR1_Z 10.6719
- #define CAR1_A 269.1425
- #define CAR2_X -1
- #define CAR2_Y -1
- #define CAR2_Z -1
- #define CAR2_A -1
- #define CAR3_X -1
- #define CAR3_Y -1
- #define CAR3_Z -1
- #define CAR3_A -1
- #define CAR4_X -1
- #define CAR4_Y -1
- #define CAR4_Z -1
- #define CAR4_A -1
- #define CAR5_X -1
- #define CAR5_Y -1
- #define CAR5_Z -1
- #define CAR5_A -1
- #define CAR6_X -1
- #define CAR6_Y -1
- #define CAR6_Z -1
- #define CAR6_A -1
- #define CAR7_X -1
- #define CAR7_Y -1
- #define CAR7_Z -1
- #define CAR7_A -1
- #define CAR8_X -1
- #define CAR8_Y -1
- #define CAR8_Z -1
- #define CAR8_A -1
- #define CAR9_X -1
- #define CAR9_Y -1
- #define CAR9_Z -1
- #define CAR9_A -1
- #define CAR10_X -1
- #define CAR10_Y -1
- #define CAR10_Z -1
- #define CAR10_A -1
- //====== Colors ===============
- #define COLOR_GREEN 0x0AFF26FF
- #define COLOR_RED 0xFF0000FF
- //======Variables =============
- enum truckpoint
- {
- DeliveryName[40],
- DeliveryObjective[256],
- DeliveryType,
- Float:FPositionX,
- Float:FPositionY,
- Float:FPositionZ,
- CashReward,
- Exists
- }
- new P_Info[MAX_DELIVERY][truckpoint]; // I have no clue whatsover why I have called this P_Info..
- new DB: truckpoints;
- new GetJob[MAX_PLAYERS] = {0, 0, ...};
- new CarJob[10];
- new Accepted[MAX_PLAYERS] = {0, 0, ...};
- new Trailer[MAX_PLAYERS] = {0, 0, ...};
- new points[MAX_PLAYERS][MAX_DELIVERY];
- new Available[MAX_PLAYERS][MAX_DELIVERY];
- new getTrailer[MAX_PLAYERS] = {0, 0, ...};
- //======Functions=============
- stock randomEx(minnum = cellmin, maxnum = cellmax) return random(maxnum - minnum + 1) + minnum; // Credits to Y_Less
- stock CreateJobInfoGet()
- {
- CreatePickup(1239, 0, JOB_GET_X, JOB_GET_Y, JOB_GET_Z, 0);
- Create3DTextLabel("Use /gettruckerjob to get the Trucker Job, use /helptruckerjob for commands", COLOR_GREEN, JOB_GET_X, JOB_GET_Y, JOB_GET_Z, 50.0, 0, 0);
- }
- stock IsPlayerInRangeOfJobPoint(playerid)
- {
- if( IsPlayerInRangeOfPoint(playerid, 5.0, JOB_GET_X, JOB_GET_Y, JOB_GET_Z ) )
- return true;
- return false;
- }
- stock IsJobCar(vehicleid)
- {
- for(new i = 0; i < sizeof(CarJob); i++)
- if(vehicleid == CarJob[i])
- return true;
- return false;
- }
- stock ReturnJobCar(playerid)
- {
- new vehicleid = GetPlayerVehicleID(playerid);
- for(new i = 0; i < sizeof(CarJob); i++)
- if(vehicleid == CarJob[i])
- return i;
- return false;
- }
- stock TrailerType(deliverytype)
- {
- if(deliverytype == 0)
- return 435;
- if(deliverytype == 1)
- return 591;
- if(deliverytype == 2)
- return 584;
- if(deliverytype == 3)
- return 450;
- return 591;
- }
- stock CreateJobCars(modelid)
- {
- CarJob[0] = CreateVehicle(modelid, CAR1_X, CAR1_Y, CAR1_Z, CAR1_A, random(255), random(255), 60*5, 0);
- CarJob[1] = CreateVehicle(modelid, CAR2_X, CAR2_Y, CAR2_Z, CAR2_A, random(255), random(255), 60*5, 0);
- CarJob[2] = CreateVehicle(modelid, CAR3_X, CAR3_Y, CAR3_Z, CAR3_A, random(255), random(255), 60*5, 0);
- CarJob[3] = CreateVehicle(modelid, CAR4_X, CAR4_Y, CAR4_Z, CAR4_A, random(255), random(255), 60*5, 0);
- CarJob[4] = CreateVehicle(modelid, CAR5_X, CAR5_Y, CAR5_Z, CAR5_A, random(255), random(255), 60*5, 0);
- CarJob[5] = CreateVehicle(modelid, CAR6_X, CAR6_Y, CAR6_Z, CAR6_A, random(255), random(255), 60*5, 0);
- CarJob[6] = CreateVehicle(modelid, CAR7_X, CAR7_Y, CAR7_Z, CAR7_A, random(255), random(255), 60*5, 0);
- CarJob[7] = CreateVehicle(modelid, CAR8_X, CAR8_Y, CAR8_Z, CAR8_A, random(255), random(255), 60*5, 0);
- CarJob[8] = CreateVehicle(modelid, CAR9_X, CAR9_Y, CAR9_Z, CAR9_A, random(255), random(255), 60*5, 0);
- CarJob[9] = CreateVehicle(modelid, CAR10_X, CAR10_Y, CAR10_Z, CAR10_A, random(255), random(255), 60*5, 0);
- }
- stock CreateTruckPoint(delivID,delivType ,delivName[], delivObj[], cashreward = 0, Float:posx = -1.0, Float:posy = -1.0, Float:posz = -1.0)
- {
- new DBResult: dresult;
- new query1[256];
- format(query1, sizeof(query1), "SELECT * FROM `TruckPoints` WHERE `DeliveryID` = '%i'", delivID, delivName);
- dresult = db_query(truckpoints, query1);
- new query[1024];
- format(query, sizeof(query), "INSERT INTO `TruckPoints` (`DeliveryID`, `DeliveryType`, `DeliveryObjective`, `DeliveryName`, `CashReward`, `FinalPositionX`, `FinalPositionY`, `FinalPositionZ`) VALUES('%d', '%d', '%s', '%s', '%d', '%f', '%f', '%f')", delivID, delivType, delivObj, delivName, cashreward, posx, posy, posz);
- if( !db_num_rows(dresult) )
- db_query(truckpoints, query);
- P_Info[delivID][DeliveryType] = delivType;
- P_Info[delivID][CashReward] = cashreward;
- P_Info[delivID][FPositionX] = posx;
- P_Info[delivID][FPositionY] = posy;
- P_Info[delivID][FPositionZ] = posz;
- strmid(P_Info[delivID][DeliveryObjective], delivObj, 0, 9999, 9999);
- strmid(P_Info[delivID][DeliveryName], delivName, 0, 9999, 9999);
- P_Info[delivID][Exists] = 1;
- return 1;
- }
- stock LoadTruckPoints()
- {
- new Field[1000], query[256];
- new DBResult: tResult;
- for(new i = 1; i <= MAX_DELIVERY; i++)
- {
- format(query, sizeof(query), "SELECT * FROM `TruckPoints` WHERE `DeliveryID` = '%i'", i);
- tResult = db_query(truckpoints, query);
- if( db_num_rows(tResult) )
- {
- db_get_field_assoc(tResult, "DeliveryType" , Field, 1000);
- P_Info[i][DeliveryType] = strval(Field);
- db_get_field_assoc(tResult, "DeliveryObjective" , Field, 1000);
- strmid(P_Info[i][DeliveryObjective], Field, 0, sizeof(Field),9999);
- db_get_field_assoc(tResult, "DeliveryName" , Field, 1000);
- strmid(P_Info[i][DeliveryName], Field, 0, sizeof(Field), 9999);
- db_get_field_assoc(tResult, "CashReward" , Field, 1000);
- P_Info[i][CashReward] = strval(Field);
- db_get_field_assoc(tResult, "FinalPositionX" , Field, 1000);
- P_Info[i][FPositionX] = floatstr(Field);
- db_get_field_assoc(tResult, "FinalPositionY" , Field, 1000);
- P_Info[i][FPositionY] = floatstr(Field);
- db_get_field_assoc(tResult, "FinalPositionZ" , Field, 1000);
- P_Info[i][FPositionZ] = floatstr(Field);
- P_Info[i][Exists] = 1;
- }
- else P_Info[i][Exists] = 0;
- }
- return 1;
- }
- stock CountExistingPoints()
- {
- new count = 0;
- for(new i = 0; i < MAX_DELIVERY; i++)
- if(P_Info[i][Exists] == 1)
- count++;
- return count;
- }
- stock GetDistanceToPoint(playerid, Float:posx, Float:posy, Float:posz, &Float:distance)
- {
- new Float: X, Float: Y, Float: Z;
- GetPlayerPos(playerid, X, Y, Z);
- distance = floatsqroot( (posx-X)*(posx-X)+(posy-Y)*(posy-Y)+(posz-Z)*(posz-Z) );
- return 1;
- }
- //======Publics/Callbacks and Timers ==========
- forward DelivAgain(playerid);
- public DelivAgain(playerid)
- {
- new deliv = GetPVarInt(playerid, "delivery_id");
- new string[256];
- format(string, sizeof(string), "Delivery ID %d is available again! you can take it again!", deliv);
- SendClientMessage(playerid, COLOR_GREEN, string);
- Available[playerid][deliv] = 1;
- return 1;
- }
- //====== Filterscript =========
- public OnFilterScriptInit()
- {
- CreateJobInfoGet();
- CreateJobCars(515);
- //Creating database
- truckpoints = db_open(DATABASE_NAME);
- db_query(truckpoints, "CREATE TABLE IF NOT EXISTS `TruckPoints` (`DeliveryID`,`DeliveryType`, `DeliveryObjective`, `DeliveryName` , `CashReward`, `FinalPositionX`, `FinalPositionY`, `FinalPositionZ`)");
- db_query(truckpoints, "CREATE TABLE IF NOT EXISTS `Truckers` (`TruckerName`)");
- //others
- LoadTruckPoints();
- return 1;
- }
- public OnFilterScriptExit()
- {
- db_close(truckpoints);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- for(new i = 0; i < MAX_DELIVERY; i++)
- Available[playerid][i] = 1;
- GetJob[playerid] = 0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- getTrailer[playerid] = 0;
- for(new i = 0; i < MAX_DELIVERY; i++)
- Available[playerid][i] = 1;
- GetJob[playerid] = 0;
- return 1;
- }
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- if(Accepted[playerid] == 1)
- {
- Accepted[playerid] = 0;
- DisablePlayerCheckpoint(playerid);
- SendClientMessage(playerid, COLOR_RED, "You abandoned the job!");
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(Accepted[playerid] == 1)
- {
- Accepted[playerid] = 0;
- DisablePlayerCheckpoint(playerid);
- SendClientMessage(playerid, COLOR_RED, "Mission failed!");
- }
- return 1;
- }
- public OnPlayerEnterCheckpoint(playerid)
- {
- if(GetJob[playerid] == 1)
- {
- GetJob[playerid] = 0;
- DisablePlayerCheckpoint(playerid);
- }
- if(Accepted[playerid] == 1)
- {
- new deliv = GetPVarInt(playerid, "delivery_id");
- new vehicleid = GetPlayerVehicleID(playerid);
- new trailer = GetVehicleTrailer(vehicleid);
- if(IsPlayerInAnyVehicle(playerid))
- {
- if(IsJobCar(vehicleid))
- {
- if(IsTrailerAttachedToVehicle(vehicleid) && trailer == Trailer[playerid])
- {
- Accepted[playerid] = 0;
- new string[512];
- new money = randomEx( P_Info[deliv][CashReward]/4, P_Info[deliv][CashReward] );
- format(string, sizeof(string), "You have received $%d for completing %s delivery !", money);
- SendClientMessage(playerid, COLOR_GREEN, string);
- DisablePlayerCheckpoint(playerid);
- DestroyVehicle(Trailer[playerid]);
- GivePlayerMoney(playerid, money);
- Available[playerid][deliv] = 0;
- SetTimerEx("DelivAgain", 1000*60*DELIV_AV_TIME, false, "i", playerid);
- format(string, sizeof(string), "Delivery ID %i is no longer available, please wait %d min(s) to take it again", deliv, DELIV_AV_TIME);
- SendClientMessage(playerid, COLOR_GREEN, string);
- }
- }
- }
- }
- if(getTrailer[playerid] == 1)
- {
- new deliv = GetPVarInt(playerid, "delivery_id");
- new vehicleid = GetPlayerVehicleID(playerid);
- if(IsPlayerInAnyVehicle(playerid))
- {
- if(IsJobCar(vehicleid))
- {
- new Float: X, Float: Y, Float: Z;
- GetVehiclePos(vehicleid, X, Y, Z);
- TogglePlayerControllable(playerid, false);
- Trailer[playerid] = CreateVehicle(TrailerType(P_Info[deliv][DeliveryType]), X-1, Y, Z, 0, random(255), random(255), 1000*60*2);
- AttachTrailerToVehicle(Trailer[playerid], CarJob[ReturnJobCar(vehicleid)]);
- TogglePlayerControllable(playerid, true);
- Accepted[playerid] = 1;
- getTrailer[playerid] = 0;
- SendClientMessage(playerid, COLOR_GREEN, "Now, go to the point marked on the radar and make the delivery!");
- SetPlayerCheckpoint(playerid, P_Info[deliv][FPositionX], P_Info[deliv][FPositionY], P_Info[deliv][FPositionZ], 5);
- }
- }
- }
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- if(newstate == PLAYER_STATE_DRIVER)
- {
- new vehicle = GetPlayerVehicleID(playerid);
- if(IsJobCar(vehicle))
- {
- new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name));
- new DBResult: dquery; new query[256];
- format(query, sizeof(query), "SELECT * FROM `Truckers` WHERE `TruckerName` = '%s'", name);
- dquery = db_query(truckpoints, query);
- if(!db_num_rows(dquery))
- {
- SendClientMessage(playerid, COLOR_RED, "You are not allowed to use this vehicle!, only truckers can use this vehicle!");
- RemovePlayerFromVehicle(playerid);
- }
- }
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if( dialogid == DIALOG_DELIVERY )
- {
- if(response)
- {
- new deliv = SetPVarInt(playerid, "delivery_id", listitem*0 + points[playerid][listitem]);
- new string[256], str[1024];
- format(string, sizeof(string), "Delivery Name: %s\n", P_Info[deliv][DeliveryName]);
- strcat(str, string);
- format(string, sizeof(string), "Delivery Objective: %s\n", P_Info[deliv][DeliveryObjective]);
- strcat(str, string);
- format(string, sizeof(string), "Delivery Reward: up to %d$\n", P_Info[deliv][CashReward] );
- strcat(str, string);
- new Float: X, Float: Y, Float: Z, Float: distance;
- GetPlayerPos(playerid, X, Y, Z);
- GetDistanceToPoint(playerid, P_Info[deliv][FPositionX], P_Info[deliv][FPositionY], P_Info[deliv][FPositionZ], distance);
- format(string, sizeof(string), "Delivery Distance: %.0f\n", distance);
- strcat(str, string);
- ShowPlayerDialog(playerid, DIALOG_DELIVERY_I, DIALOG_STYLE_MSGBOX, "Delivery", str, "Accept", "Back");
- }
- }
- if(dialogid == DIALOG_DELIVERY_I)
- {
- if(response)
- {
- new vehicleid = GetPlayerVehicleID(playerid);
- if(IsPlayerInAnyVehicle(playerid))
- {
- if(IsJobCar(vehicleid))
- {
- new deliv = GetPVarInt(playerid, "delivery_id");
- new Float: X, Float: Y, Float: Z, Float: distance;
- GetPlayerPos(playerid, X, Y, Z);
- GetDistanceToPoint(playerid, P_Info[deliv][FPositionX], P_Info[deliv][FPositionY], P_Info[deliv][FPositionZ], distance);
- if(distance > 1000)
- {
- getTrailer[playerid] = 1;
- SetPlayerCheckpoint(playerid, TRAILER_GET_X, TRAILER_GET_Y, TRAILER_GET_Z, 5);
- SendClientMessage(playerid, COLOR_GREEN, "Go to the checkpoint marked on the radar to get the trailer!");
- }
- else SendClientMessage(playerid, COLOR_RED, "Distance too short, take something that's at least 1 km long!");
- }
- else SendClientMessage(playerid, COLOR_RED, "You can't do that if you're not in a Trucker car");
- }
- else SendClientMessage(playerid, COLOR_RED, "You can't do that while on-foot!");
- }
- }
- return 0;
- }
- /// Commands
- CMD:gettruckerjob(playerid, params[])
- {
- if(IsPlayerInRangeOfJobPoint(playerid))
- {
- new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name));
- new string[256];
- new DBResult: dquery; new query[256];
- format(query, sizeof(query), "SELECT * FROM `Truckers` WHERE `TruckerName` = '%s'", name);
- dquery = db_query(truckpoints, query);
- if(!db_num_rows(dquery))
- {
- format(string, sizeof(string), JOB_GETJOBMESSAGE, name);
- SendClientMessage(playerid, COLOR_GREEN, string);
- format(query, sizeof(query), "INSERT INTO `Truckers` (`TruckerName` ) VALUES('%s')", name);
- db_query(truckpoints, query);
- }
- else
- {
- SendClientMessage(playerid, COLOR_RED, "Sorry, but you already have this job.");
- }
- }
- else
- {
- SendClientMessage(playerid, COLOR_RED, "You need to be at the Trucker Job point to take the job!");
- SetPlayerCheckpoint(playerid, JOB_GET_X, JOB_GET_Y, JOB_GET_Z, 10);
- GetJob[playerid] = 1;
- }
- return 1;
- }
- CMD:quittruckerjob(playerid,params[])
- {
- new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name));
- new string[256];
- new DBResult: dquery; new query[256];
- format(query, sizeof(query), "SELECT * FROM `Truckers` WHERE `TruckerName` = '%s'", name);
- dquery = db_query(truckpoints, query);
- if(!db_num_rows(dquery))
- {
- SendClientMessage(playerid, COLOR_RED, "We're sorry, but you don't have this job in order to quit!");
- }
- else
- {
- format(string, sizeof(string), JOB_QUITJOBMESSAGE, name);
- SendClientMessage(playerid, COLOR_GREEN, string);
- format(query, sizeof(query), "DELETE FROM `Truckers` WHERE `TruckerName` = '%s'", name);
- db_query(truckpoints, query);
- }
- return 1;
- }
- CMD:delivery(playerid, params[])
- {
- if(Accepted[playerid] == 1)
- return SendClientMessage(playerid, COLOR_RED, "You already accepted a Delivery, use /canceldelivery to take another one!");
- new take = 0;
- new vehicleid = GetPlayerVehicleID(playerid);
- if(!IsPlayerInAnyVehicle(playerid))
- return SendClientMessage(playerid, COLOR_RED, "You can't use this command on-foot!");
- if(!IsJobCar(vehicleid))
- return SendClientMessage(playerid, COLOR_RED, "You must be in a Trucker car to use this command!");
- if(CountExistingPoints() == 0)
- return SendClientMessage(playerid, COLOR_RED, "Sorry, but there are no available routes for delivery!");
- new str[1024], string[1024];
- strcat(str, "Delivery IDs\n");
- for(new i = 0; i < MAX_DELIVERY; i++)
- {
- if(P_Info[i][Exists] && Available[playerid][i])
- {
- points[playerid][take] = i;
- take++;
- format(string, sizeof(string), "%d\n", i);
- strcat(str, string);
- }
- }
- if(take > 0)
- ShowPlayerDialog(playerid, DIALOG_DELIVERY, DIALOG_STYLE_TABLIST_HEADERS, "Deliveries", str, "Select", "Cancel");
- else
- SendClientMessage(playerid, COLOR_RED, "Sorry but there are no available routes for delivery!");
- return 1;
- }
- CMD:canceldelivery(playerid, params[])
- {
- if(Accepted[playerid] == 1)
- {
- new vehicleid = GetPlayerVehicleID(playerid);
- DisablePlayerCheckpoint(playerid);
- if(IsTrailerAttachedToVehicle(vehicleid))
- DestroyVehicle(Trailer[playerid]);
- SendClientMessage(playerid, COLOR_RED, "You have abandoned your delivery!");
- }
- return 1;
- }
- CMD:helptruckerjob(playerid, params[])
- {
- SendClientMessage(playerid, COLOR_RED, "=======Commands======");
- SendClientMessage(playerid, COLOR_GREEN, "/quittruckerjob, /gettruckerjob, /delivery, /canceldelivery");
- if(IsPlayerAdmin(playerid)) SendClientMessage(playerid, COLOR_RED, "RCON Admins only: /createtruckpoint");
- SendClientMessage(playerid, COLOR_RED, "====================");
- return 1;
- }
- //admin only
- CMD:createtruckpoint(playerid, params[])
- {
- new deliveryname[256], deliverytype ,deliveryobjective[512], cashreward;
- new Float: X, Float: Y, Float: Z;
- GetPlayerPos(playerid, X, Y, Z);
- if(!IsPlayerAdmin(playerid))
- return SendClientMessage(playerid, COLOR_RED, "Only RCON Admins can use this command!");
- if(sscanf(params, "s[256]s[256]D(1000)D(1)", deliveryname, deliveryobjective, cashreward, deliverytype))
- return SendClientMessage(playerid, COLOR_RED, "Use: /createtruckpoint [deliveryname] [deliveryobjective] [cashreward] [deliverytype]");
- CreateTruckPoint(1+CountExistingPoints(), deliverytype, deliveryobjective, deliveryname, cashreward, X, Y, Z);
- SendClientMessage(playerid, COLOR_GREEN, "You have created a truck point!");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment