SA-MP Forums

SA-MP Forums (https://forum.sa-mp.com/index.php)
-   Includes (https://forum.sa-mp.com/forumdisplay.php?f=83)
-   -   [Include] Missile Launcher (https://forum.sa-mp.com/showthread.php?t=608018)

AbyssMorgan 26/05/2016 06:42 PM

Missile Launcher
 
Hi I would like to present include for Missile Launcher.

Video:
1. Sniper Missile
2. Vehicle Missile (MapAndreas Version)
3. Vehicle Missile (ColAndreas Update)
4. Marica Mortar V1
5. Heavy Marica Mortar
6. Missile Launcher Aim Player
7. Congreve Rocket
8. Marica Mortar V2
9. New Vehicle Missile
10. Flares

Functions:
PHP Code:

Missile::Launch(type,Float:detection_range,Float:explode_radius,Float:speed,Float:x,Float:y,Float:z,worldid,interiorid,playerid,
Float:streamdistance,missile_object,Float:tx,Float:ty,Float:tz,byplayerid=INVALID_PLAYER_ID,teamid=ANY_TEAM,
bool:remote=false,remote_count=MAX_MISSILE_REMOTE_TARGET,remote_height=1.0,Float:arc_roll=0.0,Float:damage=-1.0,
Float:vehicle_damage=-1.0);

type explosion type //https://wiki.sa-mp.com/wiki/Explosion_List
Float:detection_range detection range player/vehicle
Float
:explode_radius the explosion range (the same as in CreateExplosion)
Float:speed projectile speed
Float
:xFloat:yFloat:Starting position
worldid
interioridplayeridFloat:streamdistance the same as in CreateDynamicObject
missile_object
MISSILE_OBJECT_NORMAL MISSILE_OBJECT_BIG MISSILE_OBJECT_HYDRA MISSILE_OBJECT_BOMB MISSILE_OBJECT_BOMB_STATIC MISSILE_OBJECT_FLARE
Float
:txFloat:tyFloat:tz Target position
byplayerid 
selected player will be immune to detection range
teamid 
player team will be immune to detection range
remote 
enable remote targeting (for Vehicle Missile Mortar)
remote_count number of remote targeting 1 32
remote_height 
arc height
arc_roll 
rotation Y axis
Float
:damage player damage on explosion created
Float
:vehicle_damage vehicle damage on explosion created

Rotation
Auto!

MissileLaunchAimPlayer(targetid,type,Float:detection_range,Float:explode_radius,Float:speed,Float:x,Float:y,Float:z,
worldid,interiorid,playerid,Float:streamdistance,missile_object,Float:tx,Float:ty,Float:tz,
byplayerid=INVALID_PLAYER_ID,teamid=ANY_TEAM,Float:damage=-1.0,Float:vehicle_damage=-1.0);

MissileRemoteTarget(mobid,Float:tx,Float:ty,Float:tz,Float:speed 0.0); 

Missile::Destroy(mobid);
mobid id returned by Missile::Launch

Missile
::StopAimPlayer(mobid);
Missile::GetExplodeVisibility();
Missile::SetExplodeVisibility(Float:explode_stream);
Missile::DisableAllAim(playerid); 

Callbacks:
PHP Code:

OnMissileDestroy(mobid,Float:x,Float:y,Float:z,type,killerid,byplayerid);

types:
MISSILE_DESTROY_TYPE_TARGET  //When rocket reaches its destination (always killerid=INVALID_PLAYER_ID)
MISSILE_DESTROY_TYPE_DETECT  //When rocket has been destroyed by detection range
MISSILE_DESTROY_TYPE_KILL    //When rocket has been destroyed by player

OnMissileDetectPlayer(playerid,killerid); //called when a player is within range of detection range

OnMissileRequestLaunch(Float:x,Float:y,Float:z,playerid,targetid); 

Example Code:
PHP Code:

public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ){
    if(
weaponid == 34){
        new 
Float:xFloat:yFloat:z,
            
Float:txFloat:tyFloat:tz,
            
Float:rxFloat:rz,
            
vwintFloat:dist;

        
GetPlayerPos(playerid,x,y,z);
        
GetRotationFor2Point3D(x,y,z,fX,fY,fZ,rx,rz);

        
dist GetDistanceBetweenPoints3D(x,y,z,fX,fY,fZ);
        
vw GetPlayerVirtualWorld(playerid);
        
int GetPlayerInterior(playerid);

        
GetPointInFront3D(x,y,z,rx,rz,4.0,tx,ty,tz);
        
Missile::Launch(MISSILE_TYPE_EXPLODE_HUGE,4.0,25.0,35.0,tx,ty,tz,vw,int,-1,300.0,MISSILE_OBJECT_HYDRA,fX,fY,fZ,playerid,.damage=100.0,.vehicle_damage=1000.0);

        
GetPointInFront3D(x,y,z,rx,rz,3.0,tx,ty,tz);
        
Missile::Launch(MISSILE_TYPE_EXPLODE_HUGE,4.0,25.0,35.0,tx,ty,tz+3.0,vw,int,-1,300.0,MISSILE_OBJECT_HYDRA,fX,fY,fZ+3.0,playerid,.damage=100.0,.vehicle_damage=1000.0);
        
Missile::Launch(MISSILE_TYPE_EXPLODE_HUGE,4.0,25.0,35.0,tx,ty,tz-3.0,vw,int,-1,300.0,MISSILE_OBJECT_HYDRA,fX,fY,fZ-3.0,playerid,.damage=100.0,.vehicle_damage=1000.0);

        
GetPointInFront3D(tx,ty,tz,rx,rz+90.0,3.0,x,y,z);
        
GetPointInFront3D(x,y,z,rx,rz,dist,fX,fY,fZ);
        
Missile::Launch(MISSILE_TYPE_EXPLODE_HUGE,4.0,25.0,35.0,x,y,z,vw,int,-1,300.0,MISSILE_OBJECT_HYDRA,fX,fY,fZ,playerid,.damage=100.0,.vehicle_damage=1000.0);
        
GetPointInFront3D(tx,ty,tz,rx,rz-90.0,3.0,x,y,z);
        
GetPointInFront3D(x,y,z,rx,rz,dist,fX,fY,fZ);
        
Missile::Launch(MISSILE_TYPE_EXPLODE_HUGE,4.0,25.0,35.0,x,y,z,vw,int,-1,300.0,MISSILE_OBJECT_HYDRA,fX,fY,fZ,playerid,.damage=100.0,.vehicle_damage=1000.0);

    }
    return 
1;


Bullet example:
PHP Code:

Missile::Launch(MISSILE_TYPE_EXPLODE_NONE,1.0,1.0,20.0,Float:x,Float:y,Float:z,worldid,interiorid,playerid,Float:streamdistance,MISSILE_OBJECT_BULLET,Float:tx,Float:ty,Float:tz,byplayerid=INVALID_PLAYER_ID,teamid=ANY_TEAM,.damage=5.0,.vehicle_damage=25.0); 

How to check is player kill by missile (this is not required if you using custom missile damage):
PHP Code:

enums:
last_missile_shot
last_missile_player

public OnMissileDestroy(mobid,Float:x,Float:y,Float:z,type,killerid,byplayerid){
    if(
type == MISSILE_DESTROY_TYPE_DETECT && killerid != INVALID_PLAYER_ID){
        
PlayerInfo[killerid][last_missile_shot] = GetTickCount();
        
PlayerInfo[killerid][last_missile_player] = byplayerid;
    }
    return 
1;
}

public 
OnMissileDetectPlayer(playerid,killerid){
    if(
killerid != INVALID_PLAYER_ID){
        
PlayerInfo[playerid][last_missile_shot] = GetTickCount();
        
PlayerInfo[playerid][last_missile_player] = killerid;
    }
    return 
1;
}

public 
OnPlayerDeath(playeridkilleridreason){
    if(
PlayerInfo[playerid][last_missile_player] != INVALID_PLAYER_ID && reason 46 && playerid != killerid){
        if(
GetTickCount()-PlayerInfo[playerid][last_missile_shot] < 2000){
            
killerid PlayerInfo[playerid][last_missile_player];
            
reason 51;
        }
    }
    
    
//your code
    
return 1;


Download:
Missile.inc
3DTryg.inc Thread
ColAndreas Plugin

See also Vehicle Missile Launcher


Non-Registered Users:
Bug Report

Ivan_Ino 26/05/2016 07:57 PM

Re: Missile Launcher
 
Good work.. I made this before long time for my server, xD
rep+ for 3DTryg and all this aswell :D

Amunra 27/05/2016 06:08 AM

Re: Missile Launcher
 
Wow.. Amazing ...
I Like your Job Man ...

AbyssMorgan 16/06/2016 02:41 PM

Re: Missile Launcher
 
Update 1.2:
Added additional parameters:

Code:

MissileLaunch(type,Float:detection_range,Float:explode_radius,Float:speed,Float:x,Float:y,Float:z,
worldid,interiorid,playerid,Float:streamdistance,missile_object,
Float:tx,Float:ty,Float:tz,byplayerid=INVALID_PLAYER_ID,teamid=ANY_TEAM);

byplayerid - selected player will be immune to detection range
teamid - player team will be immune to detection range


AbyssMorgan 18/06/2016 08:00 PM

Re: Missile Launcher
 
Update v1.3:

Added callback:
PHP Code:

OnMissileDestroy(mobid,Float:x,Float:y,Float:z,type,killerid); 

Fix auto rotation for MISSILE_OBJECT_HYDRA

AbyssMorgan 19/06/2016 09:37 PM

Re: Missile Launcher
 
Update v1.4:
- Added extended functions:
PHP Code:

Float:GetMissileExplodeVisibility();
SetMissileExplodeVisibility(Float:explode_stream); 

- Added version number

AbyssMorgan 22/06/2016 07:30 PM

Re: Missile Launcher
 
Update v1.5B:
- Added callback:
PHP Code:

OnMissileDetectPlayer(playerid,killerid); 

- Fixed exploding rockets by passengers when they were fired from a vehicle @VehicleMissile.inc

AbyssMorgan 23/06/2016 01:07 PM

Re: Missile Launcher
 
Update v1.6:
- Again fix rotation for MISSILE_OBJECT_HYDRA
- Fixed identification missile between scripts
- Changed value INVALID_MISSILE_ID from -1 to 0

AbyssMorgan 16/07/2016 08:53 AM

Re: Missile Launcher
 
Update v1.6.4

- Added new params for MissileLaunch
Code:

MissileLaunch(type,Float:detection_range,Float:explode_radius,Float:speed,Float:x,Float:y,Float:z,worldid,interiorid,playerid,
Float:streamdistance,missile_object,Float:tx,Float:ty,Float:tz,byplayerid=INVALID_PLAYER_ID,teamid=ANY_TEAM,
bool:remote=false,remote_count=MAX_MISSILE_REMOTE_TARGET,remote_height=1.0);

- Added function:
PHP Code:

MissileRemoteTarget(mobid,Float:tx,Float:ty,Float:tz,Float:speed 0.0); 

- Added Definitions:
PHP Code:

MAX_MISSILE_REMOTE_TARGET 

- Timers removed, replaced OnDynamicObjectMoved

Freaksken 16/07/2016 03:37 PM

Re: Missile Launcher
 
Not anything I would use, but good job nonetheless! :)


All times are GMT. The time now is 11:43 PM.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.