警告
回调是在SA-MP 0.3d中添加的,在早期版本中不起作用!

描述

当玩家受到伤害时会调用此回调。
姓名 描述
playerid 受到伤害的玩家的 ID。
issuerid 造成伤害的玩家的 ID。如果是自己造成的,则为 INVALID_PLAYER_ID。
amount 玩家受到的伤害量(生命值和护甲值之和)。
weaponid 武器的 ID/损坏原因。
bodypart 身体被击中的部位。
(注意:此参数是在 0.3z 中添加的。如果使用旧版本,请忽略它!)

返回

1 - 回调不会在其他过滤器脚本中调用。 0 - 允许在其他过滤器脚本中调用此回调。 它总是在过滤器脚本中首先被调用,因此返回 1 会阻止其他过滤器脚本看到它。

例子

  1. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  2. {
  3. if (issuerid != INVALID_PLAYER_ID) // If not self-inflicted
  4. {
  5. new
  6. infoString[128],
  7. weaponName[24],
  8. victimName[MAX_PLAYER_NAME],
  9. attackerName[MAX_PLAYER_NAME];
  10. GetPlayerName(playerid, victimName, sizeof (victimName));
  11. GetPlayerName(issuerid, attackerName, sizeof (attackerName));
  12. GetWeaponName(weaponid, weaponName, sizeof (weaponName));
  13. format(infoString, sizeof(infoString), "%s has made %.0f damage to %s, weapon: %s, bodypart: %d", attackerName, amount, victimName, weaponName, bodypart);
  14. SendClientMessageToAll(-1, infoString);
  15. }
  16. return 1;
  17. }
  18. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  19. {
  20. if (issuerid != INVALID_PLAYER_ID && weaponid == 34 && bodypart == 9)
  21. {
  22. // One shot to the head to kill with sniper rifle
  23. SetPlayerHealth(playerid, 0.0);
  24. }
  25. return 1;
  26. }

笔记

提示
Weaponid 将从任何火源(例如莫洛托夫、18)返回 37(火焰喷射器)。任何产生爆炸的武器(例如RPG、手榴弹)的 Weaponid 都会返回 51。playerid 是唯一可以调用回调的人。该金额始终是 Weaponid 可以造成的最大伤害,即使剩余生命值小于该最大伤害。因此,当一名玩家的生命值为 100.0 并被伤害值为 46.2 的沙漠之鹰击中时,需要 3 次射击才能杀死该玩家。所有 3 次射击都会显示 46.2,尽管最后一次射击命中时,玩家只剩下 7.6 生命值。
警告
GetPlayerHealth 和 GetPlayerArmour 将返回此回调之前玩家的旧数量。在将 issuesrid 用作数组索引之前,请务必检查它是否有效。