Comando /checarferimentos -
RIPOrkut - 13.07.2015
Olб a todos, bom dia/boa tarde/boa noite/boa madrugada. Preciso da ajuda de /VOCКS/, eu quero fazer um sistema parecido com esse abaixo.
Eu queria um comando, /checarferimentos, que informaria os damages/hits sofridos pelo jogador ferido caнdo no chгo, exatamente como estб na imagem.
Qual lуgica devo usar? Como eu vou "por" isso tudo num comando?
Me ajudem aн, por favor.
Re: Comando /checarferimentos -
Gii - 13.07.2015
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.
Re: Comando /checarferimentos -
RIPOrkut - 13.07.2015
Muito bom, era o que eu precisava. Agradeзo.
Reputado.