Всем привет. Недавно Salvacore выкладывал скрипт, суть которого соответствует названию темы. Я немного решил "усовершенствовать" его.
Сравнения с прошлой версией:
- Гранаты летят плавно и взрываются тогда, когда достигнут своего падения.
- Никаких таймеров, задействован только стандартный паблик OnObjectMoved.
Ко всем глобальным переменным ( ко всем new ):
PHP код:
new
grenade_obj[MAX_PLAYERS] = { INVALID_OBJECT_ID, ... };
В public OnPlayerKeyStateChange:
PHP код:
if((newkeys & KEY_FIRE) != 0 && IsPlayerInAnyVehicle(playerid) && grenade_obj[playerid] == INVALID_OBJECT_ID)
{
new
p_weaponid,
p_ammo;
GetPlayerWeaponData(playerid, 8, p_weaponid, p_ammo);
if(p_weaponid == 16 && p_ammo != 0)
{
new
veh_id = GetPlayerVehicleID(playerid),
Float: veh_pos_x,
Float: veh_pos_y,
Float: veh_pos_z,
Float: veh_pos_a;
GetVehiclePos(veh_id, veh_pos_x, veh_pos_y, veh_pos_z);
GetVehicleZAngle(veh_id, veh_pos_a);
veh_pos_x -= 1.0 * floatsin(-(veh_pos_a + 90.0), degrees);
veh_pos_y -= 1.0 * floatcos(-(veh_pos_a + 90.0), degrees);
grenade_obj[playerid] = CreateObject(342, veh_pos_x, veh_pos_y, veh_pos_z + 1.0, 0.0, 0.0, 0.0);
veh_pos_x += 3.0 * floatsin(-(veh_pos_a - 270.0), degrees);
veh_pos_y += 3.0 * floatcos(-(veh_pos_a - 270.0), degrees);
ApplyAnimation(playerid, "PED", "CAR_closedoor_LHS", 4.1, 0, 0, 0, 0, 0, 1);
MoveObject(grenade_obj[playerid], veh_pos_x, veh_pos_y, veh_pos_z - 1.0, 5.0);
GivePlayerWeapon(playerid, 16, -1);
}
}
В public OnObjectMoved:
PHP код:
new
i = GetMaxPlayers();
do
{
if(objectid == grenade_obj[--i])
{
new
Float: obj_pos_x,
Float: obj_pos_y,
Float: obj_pos_z;
GetObjectPos(grenade_obj[i], obj_pos_x, obj_pos_y, obj_pos_z);
DestroyObject(grenade_obj[i]);
CreateExplosion(obj_pos_x, obj_pos_y, obj_pos_z, 0, 10.0);
grenade_obj[i] = INVALID_OBJECT_ID;
break;
}
}
while(i);
Видео
Автор: Londlem
Специально для: Pro-Pawn.Ru
Копирование данной статьи без разрешения автора запрещено!