Advertisement
Guest User

DAMAGE SYSTEM

a guest
Jan 23rd, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. //=====================INCLUDES=====================
  2.  
  3. #include <a_samp>
  4. #include <zcmd>
  5. #include <sscanf2>
  6.  
  7. //=====================DIALOGS======================
  8.  
  9. #define DIALOG_DAMAGE 1927
  10.  
  11. //==================CONTROL PANEL===================
  12.  
  13. #define FILTERSCRIPT
  14. #define MAX_DAMAGES 1000
  15.  
  16. #define SCM SendClientMessage
  17. #define FORMAT:%0(%1) format(%0, sizeof(%0), %1)
  18.  
  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. //===================ENUMERATORS====================
  28.  
  29. enum dmgInfo
  30. {
  31. dmgDamage,
  32. dmgWeapon,
  33. dmgBodypart,
  34. dmgKevlarhit,
  35. dmgSeconds,
  36. }
  37. new DamageInfo[MAX_PLAYERS][MAX_DAMAGES][dmgInfo];
  38.  
  39. public OnFilterScriptInit()
  40. {
  41. print("\n ==================================");
  42. print(" | |");
  43. print(" | Damage System |");
  44. print(" | By Hreesang |");
  45. print(" | |");
  46. print(" ==================================\n");
  47. return 1;
  48. }
  49.  
  50. public OnFilterScriptExit()
  51. {
  52. return 1;
  53. }
  54.  
  55. stock ResetPlayerDamages(playerid)
  56. {
  57. for(new id = 0; id < MAX_DAMAGES; id++)
  58. {
  59. if(DamageInfo[playerid][id][dmgDamage] != 0)
  60. {
  61. DamageInfo[playerid][id][dmgDamage] = 0;
  62. DamageInfo[playerid][id][dmgWeapon] = 0;
  63. DamageInfo[playerid][id][dmgBodypart] = 0;
  64. DamageInfo[playerid][id][dmgKevlarhit] = 0;
  65. DamageInfo[playerid][id][dmgSeconds] = 0;
  66. }
  67. }
  68. return 1;
  69. }
  70.  
  71. public OnPlayerConnect(playerid)
  72. {
  73. ResetPlayerDamages(playerid);
  74. return 1;
  75. }
  76.  
  77. public OnPlayerDeath(playerid, killerid, reason)
  78. {
  79. ResetPlayerDamages(playerid);
  80. return 1;
  81. }
  82.  
  83. stock ShowPlayerDamages(playerid, toid)
  84. {
  85. new
  86. str[1000], str1[500], count = 0, name[MAX_PLAYER_NAME];
  87. GetPlayerName(playerid, name, sizeof(name));
  88. for(new id = 0; id < MAX_DAMAGES; id++)
  89. {
  90. if(DamageInfo[playerid][id][dmgDamage] != 0) count++;
  91. }
  92. if(count == 0) return ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, "There is no damage to display...", "Close", "");
  93. else if(count > 0)
  94. {
  95. for(new id = 0; id < MAX_DAMAGES; id++)
  96. {
  97. if(DamageInfo[playerid][id][dmgDamage] != 0)
  98. {
  99. FORMAT:str1("%d dmg from %s to %s (Kevlarhit: %d) %d s ago\n", DamageInfo[playerid][id][dmgDamage], GetWeaponNameEx(DamageInfo[playerid][id][dmgWeapon]), GetBodypartName(DamageInfo[playerid][id][dmgBodypart]), DamageInfo[playerid][id][dmgKevlarhit], gettime() - DamageInfo[playerid][id][dmgSeconds]);
  100. strcat(str, str1);
  101. }
  102. }
  103. ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, str, "Close", "");
  104. }
  105. return 1;
  106. }
  107.  
  108. stock GetName(playerid)
  109. {
  110. new name;
  111. GetPlayerName(playerid, name, sizeof(name));
  112. return name;
  113. }
  114. CMD:damages(playerid, params[])
  115. {
  116. new
  117. id, Float: pPos[3];
  118. if(sscanf(params, "u", id)) return SCM(playerid, 0xFF6347FF, "USAGE: {FFFFFF}/damages [playerid/PartOfName]");
  119. if(!IsPlayerConnected(id)) return SCM(playerid, 0xFF6347FF, "Playerid is not an active player.");
  120.  
  121. GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
  122. if(IsPlayerInRangeOfPoint(playerid, 7.0, pPos[0], pPos[1], pPos[2]))
  123. {
  124. ShowPlayerDamages(id, playerid);
  125. }
  126. else return SCM(playerid, 0xB8BAC6FF, "You're too far away.");
  127. return 1;
  128. }
  129.  
  130. public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
  131. {
  132. if(IsPlayerConnected(playerid))
  133. {
  134. new
  135. id, Float: pHP, Float: pArm;
  136. GetPlayerHealth(playerid, pHP);
  137. GetPlayerArmour(playerid, pArm);
  138. for(new i = 0; i < MAX_DAMAGES; i++)
  139. {
  140. if(!DamageInfo[playerid][i][dmgDamage])
  141. {
  142. id = i;
  143. break;
  144. }
  145. }
  146.  
  147. DamageInfo[playerid][id][dmgDamage] = floatround(amount, floatround_round);
  148. DamageInfo[playerid][id][dmgWeapon] = weaponid;
  149. DamageInfo[playerid][id][dmgBodypart] = bodypart;
  150. if(pArm > 0) DamageInfo[playerid][id][dmgKevlarhit] = 1;
  151. else if(pArm < 1) DamageInfo[playerid][id][dmgKevlarhit] = 0;
  152. DamageInfo[playerid][id][dmgSeconds] = gettime();
  153. }
  154. return 1;
  155. }
  156.  
  157. stock GetWeaponNameEx(weaponid)
  158. {
  159. new weaponname[60];
  160. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  161. return weaponname;
  162. }
  163.  
  164. stock GetBodypartName(bodypart)
  165. {
  166. new bodyname[60];
  167. switch(bodypart)
  168. {
  169. case BODY_PART_TORSO: FORMAT:bodyname("TORSO");
  170. case BODY_PART_GROIN: FORMAT:bodyname("GROIN");
  171. case BODY_PART_RIGHT_ARM: FORMAT:bodyname("RIGHT ARM");
  172. case BODY_PART_LEFT_ARM: FORMAT:bodyname("LEFT ARM");
  173. case BODY_PART_RIGHT_LEG: FORMAT:bodyname("RIGHT ARM");
  174. case BODY_PART_LEFT_LEG: FORMAT:bodyname("LEFT LEG");
  175. case BODY_PART_HEAD: FORMAT:bodyname("HEAD");
  176. }
  177. return bodyname;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement