PHP код:
/*
About: custom health system
Author: ziggi
*/
/*
Defines
*/
#define MAX_PLAYER_HEALTH 1000.0
/*
Vars
*/
static
Float:gPlayerHealth[MAX_PLAYERS];
/*
SetPlayerHealth(playerid, Float:health)
*/
stock CustomHealth_SetPlayerHealth(playerid, Float:health)
{
if (!IsPlayerConnected(playerid)) {
return 0;
}
if (health > MAX_PLAYER_HEALTH) {
health = MAX_PLAYER_HEALTH;
} else if (health < 0.0) {
health = 0.0;
}
gPlayerHealth[playerid] = health;
return SetPlayerHealth(playerid, health / MAX_PLAYER_HEALTH * 100.0);
}
#if defined _ALS_SetPlayerHealth
#undef SetPlayerHealth
#else
#define _ALS_SetPlayerHealth
#endif
#define SetPlayerHealth CustomHealth_SetPlayerHealth
/*
GetPlayerHealth(playerid, &Float:health)
*/
stock CustomHealth_GetPlayerHealth(playerid, &Float:health)
{
if (!IsPlayerConnected(playerid)) {
return 0;
}
health = gPlayerHealth[playerid];
return 1;
}
#if defined _ALS_GetPlayerHealth
#undef GetPlayerHealth
#else
#define _ALS_GetPlayerHealth
#endif
#define GetPlayerHealth CustomHealth_GetPlayerHealth
/*
OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
*/
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if (issuerid == INVALID_PLAYER_ID) {
SetPlayerHealth(damagedid, gPlayerHealth[playerid] - amount);
}
#if defined CustomHealth_OnPlayerTakeDamage
return CustomHealth_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerTakeDamage
#undef OnPlayerTakeDamage
#else
#define _ALS_OnPlayerTakeDamage
#endif
#define OnPlayerTakeDamage CustomHealth_OnPlayerTakeDamage
#if defined CustomHealth_OnPlayerTakeDamage
forward CustomHealth_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
#endif
/*
OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
*/
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
if (damagedid != INVALID_PLAYER_ID) {
new
Float:armour,
Float:difference;
GetPlayerArmour(damagedid, armour);
difference = armour - amount;
if (difference > 0.0) {
SetPlayerArmour(damagedid, difference);
} else {
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, gPlayerHealth[playerid] + difference);
}
}
#if defined CustomHealth_OnPlayerGiveDamage
return CustomHealth_OnPlayerGiveDamage(playerid, damagedid, amount, weaponid, bodypart);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerGiveDamage
#undef OnPlayerGiveDamage
#else
#define _ALS_OnPlayerGiveDamage
#endif
#define OnPlayerGiveDamage CustomHealth_OnPlayerGiveDamage
#if defined CustomHealth_OnPlayerGiveDamage
forward CustomHealth_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
#endif
/*
OnPlayerSpawn(playerid)
*/
public OnPlayerSpawn(playerid)
{
SetPlayerTeam(playerid, 0);
#if defined CustomHealth_OnPlayerSpawn
return CustomHealth_OnPlayerSpawn(playerid);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn CustomHealth_OnPlayerSpawn
#if defined CustomHealth_OnPlayerSpawn
forward CustomHealth_OnPlayerSpawn(playerid);
#endif
Но в идеале нужно ещё реализовать собственную team систему.