#include #define MAX_INJURIES 30 enum E_INJURY_DATA { E_INJURY_HITS, E_INJURY_WEAPON, E_INJURY_BODYPART, E_INJURY_SECONDS, } new InjuryInfo[MAX_PLAYERS][MAX_INJURIES][E_INJURY_DATA]; hook OnPlayerConnect(playerid) { ResetPlayerInjuries(playerid); } public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) { if(issuerid != INVALID_PLAYER_ID) { for(new i; i < MAX_INJURIES; i++) { if(InjuryInfo[playerid][i][E_INJURY_WEAPON] == weaponid && InjuryInfo[playerid][i][E_INJURY_BODYPART] == bodypart) { InjuryInfo[playerid][i][E_INJURY_HITS] ++; InjuryInfo[playerid][i][E_INJURY_SECONDS] = gettime(); break; } else if(!InjuryInfo[playerid][i][E_INJURY_HITS]) { InjuryInfo[playerid][i][E_INJURY_HITS] ++; InjuryInfo[playerid][i][E_INJURY_WEAPON] = weaponid; InjuryInfo[playerid][i][E_INJURY_BODYPART] = bodypart; InjuryInfo[playerid][i][E_INJURY_SECONDS] = gettime(); break; } } } return 1; } ResetPlayerInjuries(playerid) { for(new i; i < MAX_INJURIES; i++) { InjuryInfo[playerid][i][E_INJURY_HITS] = 0; InjuryInfo[playerid][i][E_INJURY_WEAPON] = 0; InjuryInfo[playerid][i][E_INJURY_BODYPART] = 0; InjuryInfo[playerid][i][E_INJURY_SECONDS] = 0; } return 1; } GetBodypartName(bodypart) { new bodyname[11]; switch(bodypart) { case BODY_PART_TORSO: bodyname = "torso"; case BODY_PART_GROIN: bodyname = "groin"; case BODY_PART_RIGHT_ARM: bodyname = "right arm"; case BODY_PART_LEFT_ARM: bodyname = "left arm"; case BODY_PART_RIGHT_LEG: bodyname = "right arm"; case BODY_PART_LEFT_LEG: bodyname = "left leg"; case BODY_PART_HEAD: bodyname = "head"; default: bodyname = "(unknown)"; } return bodyname; } ShowPlayerInjuries(playerid, targetid) { new string[112 * MAX_INJURIES]; new weaponName[36]; new count = 0; for(new i; i < MAX_INJURIES; i++) { if(InjuryInfo[targetid][i][E_INJURY_HITS] != 0) { count++; GetWeaponName(InjuryInfo[targetid][i][E_INJURY_WEAPON], weaponName, sizeof(weaponName)); strcat(string, va_return("{b3b3b3}%d hits from a %s to the %s, %ds ago\n", InjuryInfo[targetid][i][E_INJURY_HITS], weaponName, GetBodypartName(InjuryInfo[targetid][i][E_INJURY_BODYPART]),gettime() - InjuryInfo[targetid][i][E_INJURY_SECONDS])); } } if(count > 0) Dialog_Show(playerid, DIALOG_STYLE_LIST, va_return("%s's injuries", ReturnPlayerRPName(targetid)), string, "Close"); else { SendErrorMessage(playerid, "There is no damage to display."); } return 1; } CMD:injuries(playerid, params[]) { new targetid; if(sscanf(params, "u", targetid)) return SendSyntaxMessage(playerid, "/injuries (playerid)"); if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player."); if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player."); ShowPlayerInjuries(playerid, targetid); return 1; }