Bom, eu testei o script e funcionou. O dialog apenas nгo serб mostrado caso o jogador em questгo nгo tenha lhe causado dano. De qualquer forma adicionei essa exceзгo.
Como nгo tive ninguйm para testar comigo, criei um comando para simular a callback
OnPlayerTakeDamage()
Cуdigo utilizado:
PHP код:
#define MAX_DAMAGE_STRING_LEN 500
CMD:causardano(playerid) {
new issuerid = playerid, Float: amount = 5.0, weaponid = 27, bodypart = 5;
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);
print(infoString);
GetPVarString(playerid, attackerName, damageString, MAX_DAMAGE_STRING_LEN);
print(damageString);
strcat(damageString, infoString);
print(damageString);
SetPVarString(playerid, attackerName, damageString);
SendClientMessage(playerid, -1, "Dano causado");
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;
}
CMD:checarferimentos(playerid, params[]) {
static id;
if ( sscanf(params, "u", id ) )
return SendClientMessage(playerid, -1, "Use /checarferimentos [id]");
static name[24], damageString[MAX_DAMAGE_STRING_LEN];
/*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);
if ( strlen(damageString) < 10 )
SendClientMessage(playerid, -1, "Este jogador nгo lhe causou dano!");
else
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, name, damageString, "Fechar", "");
return 1;
}
Utilizei sscanf conforme vocк havia solicitado.
OBS:
PHP код:
/*if ( id == playerid )
return SendClientMessage(playerid, -1, "Vocк nгo pode informar seu prуprio ID!");*/
Esta parte do cуdigo ficou comentado devido ao fato de eu ter testado comigo mesmo.
Seria interessante fazer um
debug do sistema com mais de um jogador
online.
A unica mudanзa relativa no cуdigo foi adicionar esta exceзгo:
PHP код:
if ( strlen(damageString) < 10 )
SendClientMessage(playerid, -1, "Este jogador nгo lhe causou dano!");
Imagem do sistema:
http://i.imgur.com/Xa2vZup.jpg