ThresholdSAMP

Weapon Damage Counter - Remake

Jan 19th, 2015
1,529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 KB | None | 0 0
  1. /* CREDITS TO PAULDINAM
  2. EDITED BY THRESHOLD
  3. Original Filterscript: http://pastebin.com/kAsb33BW */
  4.  
  5. #include <a_samp>
  6. #include <zcmd>
  7. #include <sscanf2>
  8.  
  9. #define DEATH_RESET true
  10. //DEATH_RESET indicates whether damages should be reset when a player dies. Can be set to 'true' or 'false'.
  11.  
  12. #define MAX_BODY_PARTS 7
  13. #define MAX_WEAPONS 55
  14.  
  15. // DIALOGS
  16. #define D_DAMAGES 1
  17.  
  18. // BODY PARTS
  19. #define BODY_PART_TORSO 3
  20. #define BODY_PART_GROIN 4
  21. #define BODY_PART_RIGHT_ARM 5
  22. #define BODY_PART_LEFT_ARM 6
  23. #define BODY_PART_RIGHT_LEG 7
  24. #define BODY_PART_LEFT_LEG 8
  25. #define BODY_PART_HEAD 9
  26.  
  27. new Damage[MAX_PLAYERS][MAX_BODY_PARTS][MAX_WEAPONS];
  28.  
  29. // CALLBACKS
  30. public OnFilterScriptInit()
  31. {
  32. print("\nDamage tracer successfully loaded.\n");
  33. return 1;
  34. }
  35.  
  36. public OnFilterScriptExit()
  37. {
  38. return 1;
  39. }
  40.  
  41. public OnPlayerConnect(playerid)
  42. {
  43. ResetDamages(playerid);
  44. return 1;
  45. }
  46.  
  47. public OnPlayerDeath(playerid, killerid, reason)
  48. {
  49. #if DEATH_RESET == true
  50. ResetDamages(playerid);
  51. #endif
  52. return 1;
  53. }
  54.  
  55. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  56. {
  57. if((0 <= weaponid <= 46) || weaponid == 54)
  58. {
  59. if(BODY_PART_TORSO <= bodypart <= BODY_PART_HEAD) Damage[playerid][(bodypart - 3)][weaponid]++;
  60. }
  61. return 1;
  62. }
  63.  
  64. // COMMANDS
  65. CMD:damages(playerid, params[])
  66. {
  67. new id;
  68. if(sscanf(params, "u", id)) return SendClientMessage(playerid, 0xFFFF0000, "USAGE: {FFFFFF}/damages [playerid/PartOfName]");
  69. if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "This player is not connected.");
  70. DisplayDamages(playerid, id);
  71. return 1;
  72. }
  73.  
  74. // FUNCTIONS
  75. ResetDamages(playerid)
  76. {
  77. for(new i = 0; i < MAX_BODY_PARTS; i++)
  78. {
  79. for(new z = 0; z < MAX_WEAPONS; z++) Damage[playerid][i][z] = 0;
  80. }
  81. return 1;
  82. }
  83.  
  84. CountDamages(playerid)
  85. {
  86. new count = 0;
  87. for(new i = 0; i < MAX_BODY_PARTS; i++)
  88. {
  89. for(new z = 0; z < MAX_WEAPONS; z++)
  90. {
  91. if(Damage[playerid][i][z]) count += Damage[playerid][i][z];
  92. }
  93. }
  94. return count;
  95. }
  96.  
  97. GetBodyPartName(bodypart)
  98. {
  99. new part[11];
  100. switch(bodypart)
  101. {
  102. case BODY_PART_TORSO: part = "TORSO";
  103. case BODY_PART_GROIN: part = "GROIN";
  104. case BODY_PART_LEFT_ARM: part = "LEFT ARM";
  105. case BODY_PART_RIGHT_ARM: part = "RIGHT ARM";
  106. case BODY_PART_LEFT_LEG: part = "LEFT LEG";
  107. case BODY_PART_RIGHT_LEG: part = "RIGHT LEG";
  108. case BODY_PART_HEAD: part = "HEAD";
  109. default: part = "NONE";
  110. }
  111. return part;
  112. }
  113.  
  114. stock GetWeaponNameEx(weaponid)
  115. {
  116. new weapon[22];
  117. switch(weaponid)
  118. {
  119. case 0: weapon = "Fist";
  120. case 18: weapon = "Molotov Cocktail";
  121. case 44: weapon = "Night Vision Goggles";
  122. case 45: weapon = "Thermal Goggles";
  123. case 54: weapon = "Fall";
  124. default: GetWeaponName(weaponid, weapon, sizeof(weapon));
  125. }
  126. return weapon;
  127. }
  128.  
  129. DisplayDamages(toplayer, playerid)
  130. {
  131. new playername[MAX_PLAYER_NAME], title[45];
  132. GetPlayerName(playerid, playername, sizeof(playername));
  133. format(title, sizeof(title), "%s's weapon damages", playername);
  134. if(!CountDamages(playerid)) return ShowPlayerDialog(toplayer, D_DAMAGES, DIALOG_STYLE_LIST, title, "There are no damages to display...", ">>>", "");
  135. new gText[1000], fstr[45];
  136. for(new i = 0; i < MAX_BODY_PARTS; i++)
  137. {
  138. for(new z = 0; z < MAX_WEAPONS; z++)
  139. {
  140. if(!Damage[playerid][i][z]) continue;
  141. switch(i)
  142. {
  143. case 0 .. 15: format(fstr, sizeof(fstr), "%d hits from %s to the %s\n", Damage[playerid][i][z], GetWeaponNameEx(z), GetBodyPartName(i + 3));
  144. case 54: format(fstr, sizeof(fstr), "%d falls to the %s\n", Damage[playerid][i][z], GetBodyPartName(i));
  145. default: format(fstr, sizeof(fstr), "%d bullets from %s to the %s\n", Damage[playerid][i][z], GetWeaponNameEx(z), GetBodyPartName(i + 3));
  146. }
  147. strcat(gText, fstr);
  148. }
  149. }
  150. ShowPlayerDialog(toplayer, D_DAMAGES, DIALOG_STYLE_LIST, title, gText, "Close", "");
  151. return 1;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment