[Pedido] Comando /checarferimentos
#1

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.
Reply
#2

PHP код:
#define MAX_DAMAGE_STRING_LEN 500
public OnPlayerTakeDamage(playeridissueridFloatamountweaponidbodypart) {
    if(
issuerid != INVALID_PLAYER_ID) {
        static
            
hora,
            
minuto,
            
segundo,
            
Floatcolete,
            
weaponName[24],
            
infoString[128],
            
attackerName[MAX_PLAYER_NAME],
            
damageString[MAX_DAMAGE_STRING_LEN];
        
gettime(horaminutosegundo);
        
GetPlayerArmour(playeridcolete);
        
GetPlayerName(issueridattackerNamesizeof (attackerName));
        
GetWeaponName(weaponidweaponNamesizeof (weaponName));
        
format(infoStringsizeof(infoString), "%s - %.2f dmg de uma %s na(o) %s (Colete: %s) - %02d:%02d:%02d \n"attackerNameamountweaponNameGetBodyPartName(bodypart), colete ? ("Sim") : ("Nгo"), horaminutosegundo);
        
GetPVarString(playerid"damageInfo"damageStringMAX_DAMAGE_STRING_LEN);
        
strcat(damageStringinfoString);
        
SetPVarString(playerid"damageInfo"damageString);
    }
    return 
1;
}
GetBodyPartName(bodypart) {
    static 
data[20];
    switch ( 
bodypart ) {
        case 
3data "Torso";
        case 
4data "Peito";
        case 
5data "Braзo Esquerdo";
        case 
6data "Braзo Direito";
        case 
7data "Perna Esquerda";
        case 
8data "Perna Direita";
        case 
9data "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"damageStringMAX_DAMAGE_STRING_LEN);
    
ShowPlayerDialog(playerid9999DIALOG_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(playeridissueridFloatamountweaponidbodypart) {
    if(
issuerid != INVALID_PLAYER_ID) {
        static
            
hora,
            
minuto,
            
segundo,
            
Floatcolete,
            
weaponName[24],
            
infoString[128],
            
attackerName[MAX_PLAYER_NAME],
            
damageString[MAX_DAMAGE_STRING_LEN];
        
gettime(horaminutosegundo);
        
GetPlayerArmour(playeridcolete);
        
GetPlayerName(issueridattackerNamesizeof (attackerName));
        
GetWeaponName(weaponidweaponNamesizeof (weaponName));
        
format(infoStringsizeof(infoString), "%.2f dmg de uma %s na(o) %s (Colete: %s) - %02d:%02d:%02d \n"amountweaponNameGetBodyPartName(bodypart), colete ? ("Sim") : ("Nгo"), horaminutosegundo);
        
GetPVarString(playeridattackerNamedamageStringMAX_DAMAGE_STRING_LEN);
        
strcat(damageStringinfoString);
        
SetPVarString(playeridattackerNamedamageString);
    }
    return 
1;
}
GetBodyPartName(bodypart) {
    static 
data[15];
    switch ( 
bodypart ) {
        case 
3data "Torso";
        case 
4data "Peito";
        case 
5data "Braзo Esquerdo";
        case 
6data "Braзo Direito";
        case 
7data "Perna Esquerda";
        case 
8data "Perna Direita";
        case 
9data "Cabeзa";
        default: 
data "Indefinido";
    }
    return 
data;
}
ResetDamageInfo(playerid) {
    static 
iname[24];
    for ( 
GetPlayerPoolSize(); >= 0; --) {
        if ( 
IsPlayerConnected(i) ) {
            
GetPlayerName(iname24);
            
DeletePVar(playeridname);
        }
    }
    return 
1;
}
CMD:checarferimentos(playeridparams[]) {
    if ( 
isnull(params) )
        return 
SendClientMessage(playerid, -1"Use /checarferimentos [id]");
    static 
idname[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(idname24) == )
        return 
SendClientMessage(playerid, -1"Jogador invбlido!");
    
GetPVarString(playeridnamedamageStringMAX_DAMAGE_STRING_LEN);
    
ShowPlayerDialog(playerid9999DIALOG_STYLE_MSGBOXnamedamageString"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.
Reply
#3

Muito bom, era o que eu precisava. Agradeзo.

Reputado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)