PHP код:
//=====================INCLUDES=====================
#include <a_samp>
#include <zcmd>
#include <sscanf2>
//=====================DIALOGS======================
#define DIALOG_UNUSED;
enum
{
DIALOG_UNUSED,
DIALOG_DAMAGE
};
enum Corpo
{
BODY_PART_TORSO,
BODY_PART_GROIN,
BODY_PART_RIGHT_ARM,
BODY_PART_LEFT_ARM,
BODY_PART_RIGHT_LEG,
BODY_PART_LEFT_LEG,
BODY_PART_HEAD
};
#define BODY_PART_TORSO 3
#define BODY_PART_GROIN 4
#define BODY_PART_RIGHT_ARM 5
#define BODY_PART_LEFT_ARM 6
#define BODY_PART_RIGHT_LEG 7
#define BODY_PART_LEFT_LEG 8
#define BODY_PART_HEAD 9
//==================CONTROL PANEL===================
#define FILTERSCRIPT
#define MAX_DAMAGES 1000
#define SCM SendClientMessage
#define FORMAT:%0(%1) format(%0, sizeof(%0), %1)
//===================ENUMERATORS====================
enum dmgInfo
{
dmgDamage,
dmgWeapon,
dmgBodypart,
dmgKevlarhit,
dmgSeconds,
}
new DamageInfo[MAX_PLAYERS][MAX_DAMAGES][dmgInfo];
public OnFilterScriptInit()
{
print("\n ==================================");
print(" | |");
print(" | Damage System |");
print(" | By Hreesang |");
print(" | |");
print(" ==================================\n");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
stock ResetPlayerDamages(playerid)
{
for(new id = 0; id < MAX_DAMAGES; id++)
{
if(DamageInfo[playerid][id][dmgDamage] != 0)
{
DamageInfo[playerid][id][dmgDamage] = 0;
DamageInfo[playerid][id][dmgWeapon] = 0;
DamageInfo[playerid][id][dmgBodypart] = 0;
DamageInfo[playerid][id][dmgKevlarhit] = 0;
DamageInfo[playerid][id][dmgSeconds] = 0;
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
ResetPlayerDamages(playerid);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
ResetPlayerDamages(playerid);
return 1;
}
stock ShowPlayerDamages(playerid, toid)
{
new
str[1000], str1[500], count = 0, name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
for(new id = 0; id < MAX_DAMAGES; id++)
{
if(DamageInfo[playerid][id][dmgDamage] != 0) count++;
}
if(count == 0) return ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, "Non hai subito nessun danno...", "Chiudi", "");
else if(count > 0)
{
for(new id = 0; id < MAX_DAMAGES; id++)
{
if(DamageInfo[playerid][id][dmgDamage] != 0)
{
FORMAT:str1("%d danno da %s al %s (Kevlarhit: %d) %d s fa\n", DamageInfo[playerid][id][dmgDamage], GetWeaponNameEx(DamageInfo[playerid][id][dmgWeapon]), GetBodypartName(DamageInfo[playerid][id][dmgBodypart]), DamageInfo[playerid][id][dmgKevlarhit], gettime() - DamageInfo[playerid][id][dmgSeconds]);
strcat(str, str1);
}
}
ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, str, "Chiudi", "");
}
return 1;
}
stock GetName(playerid)
{
new name;
GetPlayerName(playerid, name, sizeof(name));
return name;
}
CMD:danni(playerid, params[])
{
new
id, Float: pPos[3];
if(sscanf(params, "u", id)) return SCM(playerid, 0xFF6347FF, "UTILIZZA: {FFFFFF}/danni [playerid/Nome]");
if(!IsPlayerConnected(id)) return SCM(playerid, 0xFF6347FF, "L'ID specificato non и stato trovato.");
GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, pPos[0], pPos[1], pPos[2]))
{
ShowPlayerDamages(id, playerid);
}
else return SCM(playerid, 0xB8BAC6FF, "Sei troppo lontano.");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch (dialogid)
{
case DIALOG_UNUSED: return 1;
case DIALOG_DAMAGE: return 1;
}
return 1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(IsPlayerConnected(playerid))
{
new
id, Float: pHP, Float: pArm;
GetPlayerHealth(playerid, pHP);
GetPlayerArmour(playerid, pArm);
for(new i = 0; i < MAX_DAMAGES; i++)
{
if(!DamageInfo[playerid][i][dmgDamage])
{
id = i;
break;
}
}
DamageInfo[playerid][id][dmgDamage] = floatround(amount, floatround_round);
DamageInfo[playerid][id][dmgWeapon] = weaponid;
DamageInfo[playerid][id][dmgBodypart] = bodypart;
if(pArm > 0) DamageInfo[playerid][id][dmgKevlarhit] = 1;
else if(pArm < 1) DamageInfo[playerid][id][dmgKevlarhit] = 0;
DamageInfo[playerid][id][dmgSeconds] = gettime();
}
return 1;
}
stock GetWeaponNameEx(weaponid)
{
new weaponname[60];
GetWeaponName(weaponid, weaponname, sizeof(weaponname));
return weaponname;
}
stock GetBodypartName(bodypart)
{
new bodyname[60];
switch(bodypart)
{
case BODY_PART_TORSO: FORMAT:bodyname("TORSO");
case BODY_PART_GROIN: FORMAT:bodyname("INGUINE");
case BODY_PART_RIGHT_ARM: FORMAT:bodyname("BRACCIO DESTRO");
case BODY_PART_LEFT_ARM: FORMAT:bodyname("BRACCIO SINISTRO");
case BODY_PART_RIGHT_LEG: FORMAT:bodyname("GAMBA DESTRA");
case BODY_PART_LEFT_LEG: FORMAT:bodyname("GAMBA SINISTRA");
case BODY_PART_HEAD: FORMAT:bodyname("TESTA");
}
return bodyname;
}