15/12/2024 13:45 
	
	
	
		Eae pessoal estou usando o sistema do rootcause e está ocorrendo um erro que quando solta a mercadoria em cima do checkpoint fala que 'O pacote não caiu na área marcada'. tentei aumentar a distancia e nada.
	
	
	
	
Código:
#define     FILTERSCRIPT
#include     <a_samp>
#include    <mapandreas>     // http://forum.sa-mp.com/showthread.php?t=273263
#define     PACKAGE_MODEL   (2912)
#define     MAPICON_INDEX   (69)
#define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
enum    e_droplocations
{
    dropLocation[32],
    Float: dropX,
    Float: dropY,
    Float: dropZ
};
enum    e_dropobjects
{
    OBJECT_PACKAGE,
    OBJECT_ZONE
};
new
    DropLocations[][e_droplocations] = {
    // example locations
        {"Farm", 22.3, 17.4, 5.0},
        {"Area 51", 302.2160, 1955.8740, 17.6406},
        {"Flying School", 415.5471, 2503.8643, 16.9425},
        {"NSA HQ", -317.4946, 1523.1005, 75.3594}
    };
new
    bool: InDelivery[MAX_PLAYERS] = {false, ...},
    PackageCount[MAX_PLAYERS] = {5, ...},
    TraffickingObjects[MAX_PLAYERS][2];
stock IsATraffickingPlane(modelid)
{
    new planes[] = {593, 511, 460};
    for(new i; i < sizeof(planes); ++i)
    {
        if(planes[i] == modelid) return 1;
    }
    return 0;
}
stock ResetDelivery(playerid)
{
    if(!IsPlayerConnected(playerid)) return 0;
    InDelivery[playerid] = false;
    PackageCount[playerid] = 5;
    RemovePlayerMapIcon(playerid, MAPICON_INDEX);
    SetPVarInt(playerid, "DeliveryCooldown", tickcount()+120000);
    
    if(IsValidObject(TraffickingObjects[playerid][OBJECT_PACKAGE]))
    {
        DestroyObject(TraffickingObjects[playerid][OBJECT_PACKAGE]);
        TraffickingObjects[playerid][OBJECT_PACKAGE] = INVALID_OBJECT_ID;
    }
    if(IsValidPlayerObject(playerid, TraffickingObjects[playerid][OBJECT_ZONE]))
    {
        DestroyPlayerObject(playerid, TraffickingObjects[playerid][OBJECT_ZONE]);
        TraffickingObjects[playerid][OBJECT_ZONE] = INVALID_OBJECT_ID;
    }
    
    return 1;
}
stock Float:Distance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) // http://forum.sa-mp.com/showpost.php?p=2919962&postcount=2
    return floatsqroot((((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))+((z1-z2)*(z1-z2))));
stock RandomEx(min, max)
    return random(max - min) + min;
public OnPlayerConnect(playerid)
{
    InDelivery[playerid] = false;
    PackageCount[playerid] = 5;
    TraffickingObjects[playerid][OBJECT_PACKAGE] = INVALID_OBJECT_ID;
    TraffickingObjects[playerid][OBJECT_ZONE] = INVALID_OBJECT_ID;
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    ResetDelivery(playerid);
    return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
    if(InDelivery[playerid])
    {
        SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY FAILED: {FFFFFF}You died.");
        ResetDelivery(playerid);
    }
    
    return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER && IsATraffickingPlane(GetVehicleModel(GetPlayerVehicleID(playerid))) && GetPVarInt(playerid, "DeliveryCooldown") < tickcount())
    {
        GameTextForPlayer(playerid, "~n~~n~~n~~w~Air Trafficking Available~n~Press ~y~~k~~TOGGLE_SUBMISSIONS~ ~w~to start", 3000, 3);
    }
    
    return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
    if(InDelivery[playerid])
    {
        SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY FAILED: {FFFFFF}You left your plane.");
        ResetDelivery(playerid);
    }
    
    return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(IsATraffickingPlane(GetVehicleModel(GetPlayerVehicleID(playerid))) && PRESSED(KEY_SUBMISSION))
    {
        if(!InDelivery[playerid]) {
            if(GetPVarInt(playerid, "DeliveryCooldown") > tickcount()) return SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY: {FFFFFF}Please wait to start another delivery mission again.");
            new id = random(sizeof(DropLocations)), string[144];
            TraffickingObjects[playerid][OBJECT_ZONE] = CreatePlayerObject(playerid, 19946, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 0.0, 0.0, 0.0, 1200.0);
            
            SetPlayerMapIcon(playerid, MAPICON_INDEX, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 24, 0, MAPICON_GLOBAL);
            SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You've started a delivery mission.");
            format(string, sizeof(string), "DELIVERY: {FFFFFF}Drop the package in the marked area at {3498DB}%s {FFFFFF}and you'll get your money.", DropLocations[id][dropLocation]);
            SendClientMessage(playerid, 0x2ECC71FF, string);
            SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You can drop a crate using H/CAPS LOCK.");
            SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You can cancel the delivery mission using 2 or by leaving your plane.");
            InDelivery[playerid] = true;
            PackageCount[playerid] = 5;
        }else{
            SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY CANCELLED: {FFFFFF}You've cancelled the delivery mission.");
            ResetDelivery(playerid);
        }
    }
    
    if(InDelivery[playerid] && PRESSED(KEY_CROUCH))
    {
        if(IsValidObject(TraffickingObjects[playerid][OBJECT_PACKAGE])) return 1;
        if(PackageCount[playerid] == 0) return SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY: {FFFFFF}You don't have any more packages.");
        new Float: x, Float: y, Float: z, Float: z2;
        GetPlayerPos(playerid, x, y, z);
        GetPointZPos(x, y, z2);
        TraffickingObjects[playerid][OBJECT_PACKAGE] = CreateObject(PACKAGE_MODEL, x, y, z-1.5, 0.0, 0.0, 0.0);
        MoveObject(TraffickingObjects[playerid][OBJECT_PACKAGE], x, y, z2, 20.0);
        PackageCount[playerid]--;
    }
    
    return 1;
}
public OnObjectMoved(objectid)
{
    if(GetObjectModel(objectid) == PACKAGE_MODEL)
    {
        new owner = INVALID_PLAYER_ID;
        for(new i, p = GetPlayerPoolSize(); i <= p; ++i)
        {
            if(objectid == TraffickingObjects[i][OBJECT_PACKAGE])
            {
                owner = i;
                break;
            }
        }
        
        new Float: objx, Float: objy, Float: objz, Float: zonex, Float: zoney, Float: zonez, money;
        GetObjectPos(objectid, objx, objy, objz);
        GetPlayerObjectPos(owner, TraffickingObjects[owner][OBJECT_ZONE], zonex, zoney, zonez);
        new Float: dist = Distance(objx, objy, objz, zonex, zoney, zonez);
        if(dist < 8.0) {
            money = 1500 + floatround(-100 * dist, floatround_floor);
            if(money < 250) money = 250;
            GivePlayerMoney(owner, money);
            new id = random(sizeof(DropLocations)), string[144];
            format(string, sizeof(string), "DELIVERY: {FFFFFF}You've delivered a package and earned {2ECC71}$%d{FFFFFF}.", money);
            SendClientMessage(owner, 0x2ECC71FF, string);
            
            DestroyPlayerObject(owner, TraffickingObjects[owner][OBJECT_ZONE]);
            TraffickingObjects[owner][OBJECT_ZONE] = CreatePlayerObject(owner, 19946, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 0.0, 0.0, 0.0, 1200.0);
            SetPlayerMapIcon(owner, 69, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 24, 0, MAPICON_GLOBAL);
            format(string, sizeof(string), "DELIVERY: {FFFFFF}Drop the package in the marked area at {3498DB}%s{FFFFFF}.", DropLocations[id][dropLocation]);
            SendClientMessage(owner, 0x2ECC71FF, string);
            format(string, sizeof(string), "DELIVERY: {FFFFFF}Packages left: {3498DB}%d{FFFFFF}.", PackageCount[owner]);
            SendClientMessage(owner, 0x2ECC71FF, string);
        }else{
            SendClientMessage(owner, 0xE74C3CFF, "DELIVERY: {FFFFFF}Package didn't land in the marked area, better luck next time.");
        }
        
        DestroyObject(TraffickingObjects[owner][OBJECT_PACKAGE]);
        TraffickingObjects[owner][OBJECT_PACKAGE] = INVALID_OBJECT_ID;
        if(PackageCount[owner] == 0)
        {
            SendClientMessage(owner, 0x2ECC71FF, "DELIVERY: {FFFFFF}You're out of packages.");
            ResetDelivery(owner);
        }
    }
    
    return 1;
}