injuries.inc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include <YSI_Coding\y_hooks>
  2. #define MAX_INJURIES 30
  3. enum E_INJURY_DATA
  4. {
  5. E_INJURY_HITS,
  6. E_INJURY_WEAPON,
  7. E_INJURY_BODYPART,
  8. E_INJURY_SECONDS,
  9. }
  10. new InjuryInfo[MAX_PLAYERS][MAX_INJURIES][E_INJURY_DATA];
  11. hook OnPlayerConnect(playerid)
  12. {
  13. ResetPlayerInjuries(playerid);
  14. }
  15. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  16. {
  17. if(issuerid != INVALID_PLAYER_ID)
  18. {
  19. for(new i; i < MAX_INJURIES; i++)
  20. {
  21. if(InjuryInfo[playerid][i][E_INJURY_WEAPON] == weaponid && InjuryInfo[playerid][i][E_INJURY_BODYPART] == bodypart)
  22. {
  23. InjuryInfo[playerid][i][E_INJURY_HITS] ++;
  24. InjuryInfo[playerid][i][E_INJURY_SECONDS] = gettime();
  25. break;
  26. }
  27. else if(!InjuryInfo[playerid][i][E_INJURY_HITS])
  28. {
  29. InjuryInfo[playerid][i][E_INJURY_HITS] ++;
  30. InjuryInfo[playerid][i][E_INJURY_WEAPON] = weaponid;
  31. InjuryInfo[playerid][i][E_INJURY_BODYPART] = bodypart;
  32. InjuryInfo[playerid][i][E_INJURY_SECONDS] = gettime();
  33. break;
  34. }
  35. }
  36. }
  37. return 1;
  38. }
  39. ResetPlayerInjuries(playerid)
  40. {
  41. for(new i; i < MAX_INJURIES; i++)
  42. {
  43. InjuryInfo[playerid][i][E_INJURY_HITS] = 0;
  44. InjuryInfo[playerid][i][E_INJURY_WEAPON] = 0;
  45. InjuryInfo[playerid][i][E_INJURY_BODYPART] = 0;
  46. InjuryInfo[playerid][i][E_INJURY_SECONDS] = 0;
  47. }
  48. return 1;
  49. }
  50. GetBodypartName(bodypart)
  51. {
  52. new bodyname[11];
  53. switch(bodypart)
  54. {
  55. case BODY_PART_TORSO: bodyname = "torso";
  56. case BODY_PART_GROIN: bodyname = "groin";
  57. case BODY_PART_RIGHT_ARM: bodyname = "right arm";
  58. case BODY_PART_LEFT_ARM: bodyname = "left arm";
  59. case BODY_PART_RIGHT_LEG: bodyname = "right arm";
  60. case BODY_PART_LEFT_LEG: bodyname = "left leg";
  61. case BODY_PART_HEAD: bodyname = "head";
  62. default: bodyname = "(unknown)";
  63. }
  64. return bodyname;
  65. }
  66. ShowPlayerInjuries(playerid, targetid)
  67. {
  68. new string[112 * MAX_INJURIES];
  69. new weaponName[36];
  70. new count = 0;
  71. for(new i; i < MAX_INJURIES; i++)
  72. {
  73. if(InjuryInfo[targetid][i][E_INJURY_HITS] != 0)
  74. {
  75. count++;
  76. GetWeaponName(InjuryInfo[targetid][i][E_INJURY_WEAPON], weaponName, sizeof(weaponName));
  77. strcat(string, va_return("{b3b3b3}%d hits from a %s to the %s, %ds ago\n", InjuryInfo[targetid][i][E_INJURY_HITS], weaponName,
  78. GetBodypartName(InjuryInfo[targetid][i][E_INJURY_BODYPART]),gettime() - InjuryInfo[targetid][i][E_INJURY_SECONDS]));
  79. }
  80. }
  81. if(count > 0) Dialog_Show(playerid, DIALOG_STYLE_LIST, va_return("%s's injuries", ReturnPlayerRPName(targetid)), string, "Close");
  82. else
  83. {
  84. SendErrorMessage(playerid, "There is no damage to display.");
  85. }
  86. return 1;
  87. }
  88. CMD:injuries(playerid, params[])
  89. {
  90. new targetid;
  91. if(sscanf(params, "u", targetid)) return SendSyntaxMessage(playerid, "/injuries (playerid)");
  92. if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
  93. if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player.");
  94. ShowPlayerInjuries(playerid, targetid);
  95. return 1;
  96. }