| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include <YSI_Coding\y_hooks>
- #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;
- }
|