Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* CREDITS TO PAULDINAM
- EDITED BY THRESHOLD
- Original Filterscript: http://pastebin.com/kAsb33BW */
- #include <a_samp>
- #include <zcmd>
- #include <sscanf2>
- #define DEATH_RESET true
- //DEATH_RESET indicates whether damages should be reset when a player dies. Can be set to 'true' or 'false'.
- #define MAX_BODY_PARTS 7
- #define MAX_WEAPONS 55
- // DIALOGS
- #define D_DAMAGES 1
- // BODY PARTS
- #define BODY_PART_TORSO 3
- #define BODY_PART_GROIN 4
- #define BODY_PART_RIGHT_ARM 5
- #define BODY_PART_LEFT_ARM 6
- #define BODY_PART_RIGHT_LEG 7
- #define BODY_PART_LEFT_LEG 8
- #define BODY_PART_HEAD 9
- new Damage[MAX_PLAYERS][MAX_BODY_PARTS][MAX_WEAPONS];
- // CALLBACKS
- public OnFilterScriptInit()
- {
- print("\nDamage tracer successfully loaded.\n");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- ResetDamages(playerid);
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- #if DEATH_RESET == true
- ResetDamages(playerid);
- #endif
- return 1;
- }
- public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
- {
- if((0 <= weaponid <= 46) || weaponid == 54)
- {
- if(BODY_PART_TORSO <= bodypart <= BODY_PART_HEAD) Damage[playerid][(bodypart - 3)][weaponid]++;
- }
- return 1;
- }
- // COMMANDS
- CMD:damages(playerid, params[])
- {
- new id;
- if(sscanf(params, "u", id)) return SendClientMessage(playerid, 0xFFFF0000, "USAGE: {FFFFFF}/damages [playerid/PartOfName]");
- if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "This player is not connected.");
- DisplayDamages(playerid, id);
- return 1;
- }
- // FUNCTIONS
- ResetDamages(playerid)
- {
- for(new i = 0; i < MAX_BODY_PARTS; i++)
- {
- for(new z = 0; z < MAX_WEAPONS; z++) Damage[playerid][i][z] = 0;
- }
- return 1;
- }
- CountDamages(playerid)
- {
- new count = 0;
- for(new i = 0; i < MAX_BODY_PARTS; i++)
- {
- for(new z = 0; z < MAX_WEAPONS; z++)
- {
- if(Damage[playerid][i][z]) count += Damage[playerid][i][z];
- }
- }
- return count;
- }
- GetBodyPartName(bodypart)
- {
- new part[11];
- switch(bodypart)
- {
- case BODY_PART_TORSO: part = "TORSO";
- case BODY_PART_GROIN: part = "GROIN";
- case BODY_PART_LEFT_ARM: part = "LEFT ARM";
- case BODY_PART_RIGHT_ARM: part = "RIGHT ARM";
- case BODY_PART_LEFT_LEG: part = "LEFT LEG";
- case BODY_PART_RIGHT_LEG: part = "RIGHT LEG";
- case BODY_PART_HEAD: part = "HEAD";
- default: part = "NONE";
- }
- return part;
- }
- stock GetWeaponNameEx(weaponid)
- {
- new weapon[22];
- switch(weaponid)
- {
- case 0: weapon = "Fist";
- case 18: weapon = "Molotov Cocktail";
- case 44: weapon = "Night Vision Goggles";
- case 45: weapon = "Thermal Goggles";
- case 54: weapon = "Fall";
- default: GetWeaponName(weaponid, weapon, sizeof(weapon));
- }
- return weapon;
- }
- DisplayDamages(toplayer, playerid)
- {
- new playername[MAX_PLAYER_NAME], title[45];
- GetPlayerName(playerid, playername, sizeof(playername));
- format(title, sizeof(title), "%s's weapon damages", playername);
- if(!CountDamages(playerid)) return ShowPlayerDialog(toplayer, D_DAMAGES, DIALOG_STYLE_LIST, title, "There are no damages to display...", ">>>", "");
- new gText[1000], fstr[45];
- for(new i = 0; i < MAX_BODY_PARTS; i++)
- {
- for(new z = 0; z < MAX_WEAPONS; z++)
- {
- if(!Damage[playerid][i][z]) continue;
- switch(i)
- {
- case 0 .. 15: format(fstr, sizeof(fstr), "%d hits from %s to the %s\n", Damage[playerid][i][z], GetWeaponNameEx(z), GetBodyPartName(i + 3));
- case 54: format(fstr, sizeof(fstr), "%d falls to the %s\n", Damage[playerid][i][z], GetBodyPartName(i));
- default: format(fstr, sizeof(fstr), "%d bullets from %s to the %s\n", Damage[playerid][i][z], GetWeaponNameEx(z), GetBodyPartName(i + 3));
- }
- strcat(gText, fstr);
- }
- }
- ShowPlayerDialog(toplayer, D_DAMAGES, DIALOG_STYLE_LIST, title, gText, "Close", "");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment