/*
    SA-MP "GetVehicleColor v2.1" Include
    Copyright © 2011 RyDeR`
*/

#if defined _Included_GetVehicleColor
    #endinput
#endif

#define _Included_GetVehicleColor

#define PROPERTY_OFFSET(%0) \
    ((((%0) * ((%0) << 1)) << 2) + 65536)

stock n_AddStaticVehicle(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2)
{
    if(color1 < 0 || color2 < 0)
    {
        color1 = random(127);
        color2 = random(127);
    }
    modelID = AddStaticVehicle(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2);
    
    new
        colorStr[24]
    ;    
    format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
    setproperty(_, "", PROPERTY_OFFSET(modelID), colorStr);
    
    return modelID;
}

stock n_AddStaticVehicleEx(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2, respawn_Delay)
{
    if(color1 < 0 || color2 < 0)
    {
        color1 = random(127);
        color2 = random(127);
    }
    modelID = AddStaticVehicleEx(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2, respawn_Delay);
    
    new
        colorStr[24]
    ;    
    format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
    setproperty(_, "", PROPERTY_OFFSET(modelID), colorStr);
    
    return modelID;
}

stock n_CreateVehicle(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2, respawn_Delay)
{
    if(color1 < 0 || color2 < 0)
    {
        color1 = random(127);
        color2 = random(127);
    }
    modelID = CreateVehicle(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2, respawn_Delay);
    
    new
        colorStr[24]
    ;    
    format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
    setproperty(_, "", PROPERTY_OFFSET(modelID), colorStr);
    
    return modelID;
}

stock n_DestroyVehicle(vehicleID)
{
    deleteproperty(_, "", PROPERTY_OFFSET(vehicleID));
    
    return DestroyVehicle(vehicleID);
}

stock n_ChangeVehicleColor(vehicleID, color1, color2)
{
    new
        colorStr[24]
    ;    
    format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
    setproperty(_, "", PROPERTY_OFFSET(vehicleID), colorStr);
    
    return ChangeVehicleColor(vehicleID, color1, color2);
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    new
        colorStr[24]
    ;    
    format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
    setproperty(_, "", PROPERTY_OFFSET(vehicleid), colorStr);
    
    if(funcidx("n_OnVehicleRespray") != -1)
    {
        return CallLocalFunction("n_OnVehicleRespray", "iiii", playerid, vehicleid, color1, color2);
    }
    return 1;
}

stock GetVehicleColor(vehicleID, &color1, &color2)
{
    vehicleID = PROPERTY_OFFSET(vehicleID);
    
    if(existproperty(_, "", vehicleID))
    {
        new
            colorStr[24],
            strPos
        ;
        getproperty(_, "", vehicleID, colorStr);
        strunpack(colorStr, colorStr);
        
        if((strPos = strfind(colorStr, "-")) != -1)
        {
            color1 = strval(colorStr);
            color2 = strval(colorStr[strPos + 1]);
            return 1;
        }
    }
    return 0;
}

#define AddStaticVehicle n_AddStaticVehicle
#define AddStaticVehicleEx n_AddStaticVehicleEx
#define CreateVehicle n_CreateVehicle
#define DestroyVehicle n_DestroyVehicle
#define ChangeVehicleColor n_ChangeVehicleColor

#if defined _ALS_OnVehicleRespray
    #undef OnVehicleRespray
#else
    #define _ALS_OnVehicleRespray
#endif

#define OnVehicleRespray n_OnVehicleRespray

forward n_OnVehicleRespray(playerid, vehicleid, color1, color2); 