Skip to main content

a_samp

#include <a_samp>
#include <Pawn.CMD>
#include <streamer>

main(){}

#define POS_TEST1 2769.7803, 2605.3782, 10.8203

#define POS_TEST   2759.0171,2617.7261,10.8203
#define MAX_TRAILERS    10

enum missioninfo
{
    TrailerMissionStatus[25],
    TrailerMissionName[25],
    Float:TrailerMissionUnloadX,
    Float:TrailerMissionUnloadY,
    Float:TrailerMissionUnloadZ,
    TrailerMissionPayMoney,
    TrailerMissionPayScore
}
new Missions[][missioninfo] =
{
    {"Legal", "Dillimore Commissariat", POS_TEST, 100, 1},
    {"Illegal", "Hospital El Quebrados", POS_TEST, 200, 2},
    {"Legal", "Mission 2", POS_TEST, 200, 2},
    {"Legal", "Mission 3", POS_TEST, 300, 3},
    {"Legal", "Mission 4", POS_TEST, 400, 4},
    {"Illegal", "Mission 5", POS_TEST, 500, 5},
    {"Illegal", "Mission 6", POS_TEST, 600, 6},
    {"Illegal", "Mission 7", POS_TEST, 700, 7},
    {"Legal", "Mission 8", POS_TEST, 800, 8},
    {"Legal", "Mission 9", POS_TEST, 900, 9},
    {"Legal", "Mission 10", POS_TEST, 1000, 10},
    {"Illegal", "Mission 11", POS_TEST, 1100, 11}
};

enum trailerInfo
{
    TrailerID,
    MissionID,
    CheckpointID,
    Text3D:TrailerLabel // DEBUG
}
new Trailer[MAX_TRAILERS][trailerInfo];
new TrailerArrayID[sizeof(Trailer)] = {-1,...};

public OnGameModeInit()
{
    // Two trailers added and random mission assigned

    Trailer[0][TrailerID] = CreateVehicle(435, 2749.8076, 2628.5588, 11.4041, 206.2215, 1, 1, 60); // Trailer LV
    // Assign a random mission to the trailer, access the mission later through Trailer[TRAILER_ARRAY_ID][MissionID], e.g.CreateActor Missions[Trailer[TRAILER_ARRAY_ID][MissionID]][TrailerMissionName]
    new rand = random(sizeof(Missions));
    Trailer[0][MissionID] = rand;
    TrailerArrayID[Trailer[0][TrailerID]] = 0;
    Trailer[0][TrailerLabel] = Create3DTextLabel(Missions[Trailer[0][MissionID]][TrailerMissionName], -1, 30.0, 40.0, 50.0, 40.0, 0, 0);
    Attach3DTextLabelToVehicle(Trailer[0][TrailerLabel], Trailer[0][TrailerID], 0.0, 0.0, 0.0);

    Trailer[1][TrailerID] = CreateVehicle(435, 2756.3267, 2628.5952, 11.4061, 206.6927, 1, 1, 60); // Trailer LV
    rand = random(sizeof(Missions));
    Trailer[1][MissionID] = rand;
    TrailerArrayID[Trailer[1][TrailerID]] = 1;
    Trailer[1][TrailerLabel] = Create3DTextLabel(Missions[Trailer[1][MissionID]][TrailerMissionName], -1, 30.0, 40.0, 50.0, 40.0, 0, 0);
    Attach3DTextLabelToVehicle(Trailer[1][TrailerLabel], Trailer[1][TrailerID], 0.0, 0.0, 0.0);

    AddPlayerClass(29, POS_TEST1, 0.0, -1, -1, -1, -1, -1, -1);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

forward OnPlayerEnterDynamicCP(playerid, checkpointid);
public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
    if(IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)) && IsAMissionTrailer(GetVehicleTrailer(GetPlayerVehicleID(playerid))))
    {
        new trailerid = GetVehicleTrailer(GetPlayerVehicleID(playerid));
        new arrayid = TrailerArrayID[trailerid];
        new missionid = Trailer[arrayid][MissionID];

        if(checkpointid == Trailer[arrayid][CheckpointID])
        {
            new str[128];
            format(str, sizeof(str), "Trailer successfully delivered! Reward: %d Score, $%d Cash.", Missions[missionid][TrailerMissionPayScore], Missions[missionid][TrailerMissionPayMoney]);
            SendClientMessage(playerid, -1, str);

            // Respawn the trailer and assign a new mission to it
            SetPlayerScore(playerid, GetPlayerScore(playerid) + Missions[missionid][TrailerMissionPayScore]);
            GivePlayerMoney(playerid, Missions[missionid][TrailerMissionPayMoney]);
            DestroyDynamicCP(Trailer[arrayid][CheckpointID]);
            SetVehicleToRespawn(trailerid);

            Trailer[arrayid][MissionID] = random(sizeof(Missions));
            Update3DTextLabelText(Trailer[arrayid][TrailerLabel], -1, Missions[missionid][TrailerMissionName]);
        }
    }

    return 1;
}

COMMAND:startmission(playerid,params[]) // startmission
{
    if(!IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, -1, "You have no trailer attached to your vehicle!");
    if(!IsAMissionTrailer(GetVehicleTrailer(GetPlayerVehicleID(playerid)))) return SendClientMessage(playerid, -1, "This is not a mission trailer!");

    new trailerid = GetVehicleTrailer(GetPlayerVehicleID(playerid));
    new arrayid = TrailerArrayID[trailerid];
    new missionid = Trailer[arrayid][MissionID];

    Trailer[arrayid][CheckpointID] = CreateDynamicCP(Missions[missionid][TrailerMissionUnloadX], Missions[missionid][TrailerMissionUnloadY], Missions[missionid][TrailerMissionUnloadZ], 3.0);

    SendClientMessage(playerid, -1, "Trailer mission started...");
   
    return 1;
}

IsAMissionTrailer(vehicleid)
{
    for(new i = 0; i < sizeof(Trailer); i++)
    {
        if(vehicleid == Trailer[i][TrailerID]) return true;
    }
    return false;
}

stock GetNick(playerid)
{
    new PlayerNick[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PlayerNick, sizeof(PlayerNick));
    return PlayerNick;
}

CMD:truck1(playerid, params[])
{
    new truck, Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    truck = CreateVehicle(514, x, y, z, a, -1, -1, -1);
    PutPlayerInVehicle(playerid, (truck), 0);
    return 1;
}