PHP код:
#define MAX_DAMAGE_STRING_LEN 500
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart) {
if(issuerid != INVALID_PLAYER_ID) {
static
hora,
minuto,
segundo,
Float: colete,
weaponName[24],
infoString[128],
attackerName[MAX_PLAYER_NAME],
damageString[MAX_DAMAGE_STRING_LEN];
gettime(hora, minuto, segundo);
GetPlayerArmour(playerid, colete);
GetPlayerName(issuerid, attackerName, sizeof (attackerName));
GetWeaponName(weaponid, weaponName, sizeof (weaponName));
format(infoString, sizeof(infoString), "%s - %.2f dmg de uma %s na(o) %s (Colete: %s) - %02d:%02d:%02d \n", attackerName, amount, weaponName, GetBodyPartName(bodypart), colete > 0 ? ("Sim") : ("Nгo"), hora, minuto, segundo);
GetPVarString(playerid, "damageInfo", damageString, MAX_DAMAGE_STRING_LEN);
strcat(damageString, infoString);
SetPVarString(playerid, "damageInfo", damageString);
}
return 1;
}
GetBodyPartName(bodypart) {
static data[20];
switch ( bodypart ) {
case 3: data = "Torso";
case 4: data = "Peito";
case 5: data = "Braзo Esquerdo";
case 6: data = "Braзo Direito";
case 7: data = "Perna Esquerda";
case 8: data = "Perna Direita";
case 9: data = "Cabeзa";
default: data = "Indefinido";
}
return data;
}
public OnPlayerSpawn(playerid) {
DeletePVar(playerid, "damageInfo"); // quando o jogador "spawnar" as informaзхes serгo resetadas
return 1;
}
CMD:checarferimentos(playerid) {
static damageString[MAX_DAMAGE_STRING_LEN];
GetPVarString(playerid, "damageInfo", damageString, MAX_DAMAGE_STRING_LEN);
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, "Informaзхes de dano sofrido", damageString, "Fechar", "");
return 1;
}
Fiz de uma maneira mais geral, mostra o dano sofrido por qualquer jogador, й possнvel aprimorar, usando /checarferimentos [id do jogador], nгo й algo muito trabalhoso.
#edit
Abaixo o mesmo sistema porйm um pouco mais completo, agora й possнvel ver o histуrico indivнdual:
PHP код:
#define MAX_DAMAGE_STRING_LEN 500
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart) {
if(issuerid != INVALID_PLAYER_ID) {
static
hora,
minuto,
segundo,
Float: colete,
weaponName[24],
infoString[128],
attackerName[MAX_PLAYER_NAME],
damageString[MAX_DAMAGE_STRING_LEN];
gettime(hora, minuto, segundo);
GetPlayerArmour(playerid, colete);
GetPlayerName(issuerid, attackerName, sizeof (attackerName));
GetWeaponName(weaponid, weaponName, sizeof (weaponName));
format(infoString, sizeof(infoString), "%.2f dmg de uma %s na(o) %s (Colete: %s) - %02d:%02d:%02d \n", amount, weaponName, GetBodyPartName(bodypart), colete > 0 ? ("Sim") : ("Nгo"), hora, minuto, segundo);
GetPVarString(playerid, attackerName, damageString, MAX_DAMAGE_STRING_LEN);
strcat(damageString, infoString);
SetPVarString(playerid, attackerName, damageString);
}
return 1;
}
GetBodyPartName(bodypart) {
static data[15];
switch ( bodypart ) {
case 3: data = "Torso";
case 4: data = "Peito";
case 5: data = "Braзo Esquerdo";
case 6: data = "Braзo Direito";
case 7: data = "Perna Esquerda";
case 8: data = "Perna Direita";
case 9: data = "Cabeзa";
default: data = "Indefinido";
}
return data;
}
ResetDamageInfo(playerid) {
static i, name[24];
for ( i = GetPlayerPoolSize(); i >= 0; --i ) {
if ( IsPlayerConnected(i) ) {
GetPlayerName(i, name, 24);
DeletePVar(playerid, name);
}
}
return 1;
}
CMD:checarferimentos(playerid, params[]) {
if ( isnull(params) )
return SendClientMessage(playerid, -1, "Use /checarferimentos [id]");
static id, name[24], damageString[MAX_DAMAGE_STRING_LEN];
id = strval(params);
if ( id == playerid )
return SendClientMessage(playerid, -1, "Vocк nгo pode informar seu prуprio ID!");
if ( GetPlayerName(id, name, 24) == 0 )
return SendClientMessage(playerid, -1, "Jogador invбlido!");
GetPVarString(playerid, name, damageString, MAX_DAMAGE_STRING_LEN);
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, name, damageString, "Fechar", "");
return 1;
}
Diferente do primeiro exemplo, no segundo criei uma funзгo que reseta todas essas estatнsticas
ResetDamageInfo(), cabe vocк decidir o melhor uso para ela, seja quando ele morrer, dar spawn, etc.