PDA

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



punkochel
24.12.2022, 18:37
Описание:

Вызывается когда игрок стреляет из оружия. Срабатывает только на оружие, которое стреляет пулями. Так же срабатывает на стрельбу с пассажирского места в транспорте.

Параметры:

playerid - ID игрока, который выстрелил из оружия;
weaponid - ID оружия (https://wiki.pro-pawn.ru/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F), из которого выстрелил игрок;
hittype - Тип предмета (https://www.open.mp/docs/scripting/resources/bullethittypes), в который попала пуля (неизвестно, игрок, транспорт или объект);
hitid - ID предмета, в который попала пуля (игрок, транспорт, объект);
fX - Координата X попадания пули;
fY - Координата Y попадания пули;
fZ - Координата Z попадания пули.

Возвращаемое значение:

0 - Предотвращает нанесение урона пулями;
1 - Разрешает нанесение урона пулями.


В фильтрскриптах, при возврате 0 функция не будет вызвана в других фильтрскриптах.

Примечания:

Эта автовызываемая функция вызывается только тогда, когда включена компенсация задержки (lagcompmode в server.cfg);
Если параметр hittype равен BULLET_HIT_TYPE_NONE, то параметры fX, fY и fZ являются нормальными координатами, но если пуля никуда не попала (к примеру дальний объект, которого не может достичь пуля), то они будут иметь значения 0.0;
Параметры fX, fY и fZ являются смещениями относительно hitid;
GetPlayerLastShotVectors можно использовать в этой автовызываемой функции для получения более подробной информации о векторе пули.
Известные баги:

Не вызывается при стрельбе с водительского места, а так же при стрельбе из оружия установленного на транспорт (Hunter, Hydra, Seasparrow и др.).
При стрельбе в игрока, который находится в транспорте параметр hittype будет иметь значение BULLET_HIT_TYPE_VEHICLE, а hitid ID транспорта.
Если злоумышленник отправляет поддельные данные об оружии, у других игроков может происходить краш клиента. Чтобы предотвратить это: проверьте, действительно ли оружие стреляет пулями.

Пример использования:
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
static Float:object_hp[MAX_OBJECTS] = {100.0, ...};
if(hittype == BULLET_HIT_TYPE_OBJECT) {
object_hp[hitid] -= 10.0;
if(object_hp[hitid] <= 0.0) {
DestroyObject(hitid);
SendClientMessage(playerid, -1, "Вы разрушили объект");
}
else {
static const fmt_string[] = "Вы нанесли урон объекту. Прочность: %.1f ед.";
new string;
format(string, sizeof(string), fmt_string, object_hp[hitid]);
SendClientMessage(playerid, -1, string);
}
}
return 1;
}

Статью подготовил: punkochel (https://pro-pawn.ru/member.php?9227-punkochel)
Источники: https://www.open.mp/docs/scripting/callbacks/OnPlayerWeaponShot



*[SIZE=1]Исключительно для pro-pawn.ru (https://pro-pawn.ru/)
Копирование данной статьи на других ресурсах без разрешения автора или Daniel_Cortez (https://pro-pawn.ru/member.php?100-Daniel_Cortez) запрещено!