Detect vehicle X.Y.Z angle
#1

Hello!
Firs of all, ALL credits to Backwardsman97 who made this!

I have no knowledge about vehicle angels so i dont know how to make this.
This is a include that make you able to shoot rockets with vehicles, but the rockets only fly straight and not in the same angle as the vehicle (like if your in a plane), how to make that possible in this include?
CODE:
pawn Код:
//Backwardsman97

#include <a_samp>

/*------------------------------------
native AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
native RemoveVehicleMissiles(vehicleid)
native IsVehicleHot(vehicleid)
-------------------------------------*/


#define MISSILE_DETONATE_TIME 500   //milliseconds
#define MISSILE_EXPLODE_TYPE 10
#define MISSILE_EXPLODE_RADIUS 10.0
#define MISSILE_SPEED 200.0
#define MISSILE_FIRE_KEY 1

new VehicleFire[MAX_VEHICLES];
new VehicleBomb[MAX_VEHICLES][2];
new VehicleSmok[MAX_VEHICLES][2];
new Float:VehicleOffsetX[MAX_VEHICLES];
new Float:VehicleOffsetZ[MAX_VEHICLES];

forward VM_OnPlayerKeyStateChange(playerid,newkeys);
forward VM_Explode(vehicleid,mode);
forward VM_OnVehicleFire(vehicleid,slot);

stock AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
{
    if(!VehicleFire[vehicleid])
    {
        new Float:x,Float:u;
        GetVehiclePos(vehicleid,x,u,u);
        if(x != 0)
        {
            if(!IsValidObject(VehicleBomb[vehicleid][1]))
            {
               
                VehicleBomb[vehicleid][0] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);
                VehicleBomb[vehicleid][1] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);

                AttachObjectToVehicle(VehicleBomb[vehicleid][0],vehicleid,offsetx,0,offsetz,0,0,270);
                AttachObjectToVehicle(VehicleBomb[vehicleid][1],vehicleid,-offsetx,0,offsetz,0,0,270);

                VehicleOffsetX[vehicleid] = offsetx;
                VehicleOffsetZ[vehicleid] = offsetz;
                return 1;
            }
        }
    }
    return 0;
}

stock RemoveVehicleMissiles(vehicleid)
{
    if(!VehicleFire[vehicleid])
    {
        if(IsValidObject(VehicleBomb[vehicleid][1]))
        {
            if(VehicleBomb[vehicleid][0])
            {
                DestroyObject(VehicleBomb[vehicleid][0]);
                DestroyObject(VehicleBomb[vehicleid][1]);
                return 1;
            }
            return DestroyObject(VehicleBomb[vehicleid][1]),1;
        }
    }
    return 0;
}

stock IsVehicleHot(vehicleid)
{
    if(IsValidObject(VehicleBomb[vehicleid][1]))
        return 1;

    return 0;
}


public VM_OnPlayerKeyStateChange(playerid,newkeys)
{
    if((newkeys & MISSILE_FIRE_KEY) == (MISSILE_FIRE_KEY))
    {
        new id = GetPlayerVehicleID(playerid);
        if(!VehicleFire[id])
        {
            if(id)
            {
                if(IsValidObject(VehicleBomb[id][1]))
                {
                    new
                    Float:x,
                    Float:y,
                    Float:z,
                    Float:a;


                    VehicleFire[id] = 1;

                    if(IsValidObject(VehicleBomb[id][0]))
                    {
                        DestroyObject(VehicleBomb[id][0]);

                        GetVehiclePos(id,x,y,z);
                        GetVehicleZAngle(id,a);

                        a += 270;
                        z += VehicleOffsetZ[id];

                        x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                        y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                        VehicleBomb[id][0] = CreateObject(3790,x,y,z,0,0,a,300.0);
                        VehicleSmok[id][0] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                        a += 90;

                        x += (200 * floatsin(-a, degrees));
                        y += (200 * floatcos(-a, degrees));

                        MoveObject(VehicleBomb[id][0],x,y,z,MISSILE_SPEED);
                        MoveObject(VehicleSmok[id][0],x,y,z-1.3,MISSILE_SPEED);

                        SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,0);
                        VM_OnVehicleFire(id,0);
                        return 1;
                    }
                    DestroyObject(VehicleBomb[id][1]);

                    GetVehiclePos(id,x,y,z);
                    GetVehicleZAngle(id,a);

                    a += 90;
                    z += VehicleOffsetZ[id];

                    x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                    y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                    VehicleBomb[id][1] = CreateObject(3790,x,y,z,0,0,a+180,300.0);
                    VehicleSmok[id][1] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                    a += 270;

                    x += (200 * floatsin(-a, degrees));
                    y += (200 * floatcos(-a, degrees));

                    MoveObject(VehicleBomb[id][1],x,y,z,MISSILE_SPEED);
                    MoveObject(VehicleSmok[id][1],x,y,z-1.3,MISSILE_SPEED);

                    SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,1);
                    VM_OnVehicleFire(id,1);
                    return 1;
                }
            }
            return 1;
        }
    }
    return 1;
}

public VM_Explode(vehicleid,mode)
{
    if(IsValidObject(VehicleBomb[vehicleid][mode]))
    {
        new
        Float:x,
        Float:y,
        Float:z;

        GetObjectPos(VehicleBomb[vehicleid][mode],x,y,z);
        CreateExplosion(x,y,z,MISSILE_EXPLODE_TYPE,MISSILE_EXPLODE_RADIUS);

        DestroyObject(VehicleBomb[vehicleid][mode]);
        DestroyObject(VehicleSmok[vehicleid][mode]);

        VehicleFire[vehicleid] = 0;
        return 1;
    }
    return 1;
}
Reply
#2

Did i ask a to hard question for everyone? ^^
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)