OnPlayerWeaponShot
توضیحات
این کالبک زمانی فراخوانده میشود که یک بازیکن با اسلحه تیراندازی کند. فقط اسلحههای آتشین پشتیبانی میشوند.
نام | توضیحات |
---|---|
playerid | شناسه بازیکنی که اسلحه را شلیک کرده است. |
WEAPON:weaponid | شناسه اسلحه شلیک شده توسط بازیکن. |
BULLET_HIT_TYPE:hittype | نوع هدف اصابت شده توسط شلیک. |
hitid | شناسه بازیکن، وسیله نقلیه، یا آبجکتی که مورد اصابت قرار گرفته است. |
Float:fX | مختصات X جایی که شلیک برخورد کرده است. |
Float:fY | مختصات Y جایی که شلیک برخورد کرده است. |
Float:fZ | مختصات Z جایی که شلیک برخورد کرده است. |
مقادیر برگشتی
0 - جلوگیری از آسیب زدن گلوله.
1 - اجازه آسیب زدن گلوله.
همیشه اول در filterscript ها فراخوانده میشود بنابراین برگرداندن 0 در آنجا سایر اسکریپتها را نیز از پردازش آن مسدود میکند.
مثالها
public OnPlayerWeaponShot(playerid, WEAPON:weaponid, BULLET_HIT_TYPE:hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
new string[144];
format(string, sizeof(string), "Weapon %i fired. hittype: %i hitid: %i pos: %f, %f, %f", weaponid, hittype, hitid, fX, fY, fZ);
SendClientMessage(playerid, -1, string);
return 1;
}
نکتهها
این کالبک فقط زمانی فراخوانده میشود که lag compensation فعال باشد. اگر hittype برابر باشد با:
- BULLET_HIT_TYPE_NONE: پارامترهای fX، fY، و fZ مختصات مطلق هستند. اگر چیزی اصابت نشده باشد (مثل آبجکت دوری که گلوله نمیتواند به آن برسد) مقدار 0.0 برخواهند گرداند.
- سایر مقادیر: مقادیر fX، fY، و fZ آفستهایی نسبت به hitid هستند.
میتوان از GetPlayerLastShotVectors در این کالبک برای اطلاعات دقیقتر بردار گلوله استفاده کرد.
باگها و مسائل شناخته شده
این کالبک هنگام شلیک از وسیله نقلیه به عنوان راننده یا هنگام تیراندازی در حالی که با aim فعال به عقب نگاه میکنید (تیراندازی به هوا) فراخوانده نمیشود.
هنگام تیراندازی به بازیکن داخل وسیله نقلیه، این کالبک به عنوان BULLET_HIT_TYPE_VEHICLE با hitid صحیح (vehicleid بازیکن اصابتزده) فعال خواهد شد. به عنوان BULLET_HIT_TYPE_PLAYER فعال نخواهد شد.
تا حدی در SA-MP 0.3.7 رفع شده: اگر داده اسلحه جعلی توسط کلاینت مخرب ارسال شود، کلاینتهای سایر بازیکنان ممکن است منجمد یا crash شوند. برای جلوگیری از این، بررسی کنید که weaponid گزارش شده واقعاً میتواند پرتابه شلیک کند.
این کالبک هنگام drive-by به عنوان راننده، تیراندازی با توپ Seasparrow، Hunter، یا هر وسیله مسلح دیگری فراخوانده نمیشود.
کالبکهای مرتبط
کالبکهای زیر ممکن است مفید باشند، زیرا به نوعی با این کالبک مرتبط هستند.
- OnPlayerGiveDamage: این کالبک زمانی فراخوانده میشود که بازیکن آسیب وارد کند.
توابع مرتبط
توابع زیر ممکن است مفید باشند، زیرا به نوعی با این کالبک مرتبط هستند.
- GetPlayerLastShotVectors: دریافت بردار آخرین شلیک بازیکن.