PDA

Просмотр полной версии : [Include] Missile



AbyssMorgan
17.08.2021, 12:12
Привет, я хотел бы представить библиотекудля ракетной установки.

видео:
- Sniper Missile (https://www.youtube.com/watch?v=ZCThAi3FKyU)
- Vehicle Missile (MapAndreas Version) (https://www.youtube.com/watch?v=Pd5HmlL8uXw)
- Vehicle Missile (ColAndreas Update) (https://www.youtube.com/watch?v=HTHinI1IGhY)
- Marica Mortar V1 (https://www.youtube.com/watch?v=B4pfX39bIwM)
- Heavy Marica Mortar (https://www.youtube.com/watch?v=0FlZwi34wIA)
- Missile Launcher Aim Player (https://www.youtube.com/watch?v=bS6jnEebJR4)
- Congreve Rocket (https://www.youtube.com/watch?v=Fxp-BDCQ94U)
- Marica Mortar V2 (https://www.youtube.com/watch?v=lYS-ryk7n4E)
- New Vehicle Missile (https://www.youtube.com/watch?v=NDWkGCxCJuA)
- Flares (https://www.youtube.com/watch?v=qQ1T2NszDkc)

Функции:


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 - тип взрыва
Float:detection_range - дальность обнаружения игрок / транспортное средство
Float:explode_radius - диапазон взрыва (такой же, как в CreateExplosion)
Float:speed - скорость снаряда
Float:x, Float:y, Float:z - Начальная позиция
worldid, interiorid, playerid, Float:streamdistance - так же, как в CreateDynamicObject
missile_object: MISSILE_OBJECT_NORMAL / MISSILE_OBJECT_BIG / MISSILE_OBJECT_HYDRA / MISSILE_OBJECT_BOMB / MISSILE_OBJECT_BOMB_STATIC / MISSILE_OBJECT_FLARE
Float:tx, Float:ty, Float:tz - Целевая позиция
byplayerid - выбранный игрок будет невосприимчив к дальности обнаружения
teamid - команда игрока будет невосприимчива к дальности обнаружения
remote - enable remote targeting (for Vehicle Missile Mortar)
remote_count - количество удаленного наведения 1 - 32
remote_height - высота дуги
arc_roll - ось Y вращения
Float:damage - нанесен урон игроку при взрыве
Float:vehicle_damage - повреждение транспортного средства при взрыве нанесено

Вращение: Авто!

Missile::LaunchAimPlayer(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);

Missile::StopAimPlayer(mobid);
Missile::Destroy(mobid,type,playerid);
Missile::RemoteTarget(mobid,Float:tx,Float:ty,Float:tz,Float:speed = 0.0);
Missile::GetExplodeVisibility();
Missile::SetExplodeVisibility(Float:explode_stream);
Missile::DisableAllAim(playerid);

Misile::GetObject(mobid);
Misile::GetArea(mobid);
Misile::GetType(mobid);
Misile::GetExplode(mobid);
Misile::GetPlayer(mobid);
Misile::GetTeamID(mobid);
Misile::GetVehicle(mobid);
Misile::GetRemoteCount(mobid);
Misile::GetRemoteID(mobid);
Misile::GetSpeed(mobid);
Misile::GetTargetID(mobid);
Misile::GetDamage(mobid);
Misile::GetVehicleDamage(mobid);


Обратные вызовы:


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

types:
MISSILE_DESTROY_TYPE_TARGET //Когда ракета достигает пункта назначения (всегда killerid=INVALID_PLAYER_ID)
MISSILE_DESTROY_TYPE_DETECT //Когда ракета уничтожена дальностью обнаружения
MISSILE_DESTROY_TYPE_KILL //Когда ракета была уничтожена игроком

OnMissileDetectPlayer(playerid,killerid); //вызывается, когда игрок находится в пределах диапазона обнаружения

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


Example Code:


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ){
if(weaponid == 34){
new Float:x, Float:y, Float:z,
Float:tx, Float:ty, Float:tz,
Float:rx, Float:rz,
vw, int, Float: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;
}


Пример пули:


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);


Как проверить, убит ли игрок ракетой (это не требуется, если вы используете настраиваемый урон от ракет):


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(playerid, killerid, reason){
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;
}


Скачать:
Missile.inc (https://adm.ct8.pl/cloud/Libs/Missile/Missile.inc)
3DTryg.inc (https://adm.ct8.pl/cloud/Libs/3DTryg/3DTryg.inc)
ColAndreas Plugin (https://github.com/Pottus/ColAndreas)

Эта тема переведена, автор не может полностью помочь на русском языке.