#include #undef MAX_PLAYERS #define MAX_PLAYERS 31 #define BLEED_OUT_TIME 15 // Bleed out time in seconds #define REVIVE_HEALTH 5 // How much health to add on revival timer #define REVIVE_TIMER 333 // Time in MS for revival timer (to add health defined above) #define FLOAT_INFINITY (Float:0x7F800000) new PlayerText:BleedOutTD[MAX_PLAYERS]; new Text:BleedOutReviveTD[MAX_PLAYERS]; new BleedOutTime[MAX_PLAYERS]; new BleedOutTimer[MAX_PLAYERS]; new RevivalTimer[MAX_PLAYERS]; new BleedingPlayers[MAX_PLAYERS]; new BleedingPlayerCount; new pRevive[MAX_PLAYERS] = {-1, ...}; public OnPlayerGiveDamage(playerid, damagedid, Float:amount) { SendClientMessageToAll(-1, "DAMAGE"); if((GetPlayerVirtualWorld(playerid) == 0 || GetPVarInt(playerid, "pTeam") == GetPVarInt(damagedid, "pTeam")) || GetPVarInt(damagedid, "godmode") == 1 || GetPVarInt(damagedid, "godmode") == 3) return 1; // No damage new Float:health, Float:armour; GetPlayerHealth(damagedid, health); GetPlayerArmour(damagedid, armour); if(armour == 0.0) // No armour, just take health { health -= amount; if(health < 0.0) health = 0; } else // There is armour, take what is needed { if(armour-amount < 0.0) // Health needs to be taken { health -= (amount - armour); armour = 0; } else armour -= amount; } SetPlayerArmour(damagedid, armour); if(health < 1) { if(BleedOutTime[damagedid] == 0) { ApplyAnimation(damagedid, "CRACK", "crckidle1",4.1,1,0,0,1,0); SetPlayerHealth(damagedid, 1); SendClientMessage(damagedid, 0xFF0000FF, "YOU ARE BLEEDING OUT."); SendClientMessage(damagedid, 0xFF0000FF, "Type {FFFFFF}/die or /kill{FF0000} for the coward's way out."); BleedOutTimer[damagedid] = SetTimerEx("bleed_out", 900, true, "i", damagedid); BleedOutTime[damagedid] = BLEED_OUT_TIME; // Create textdraw BleedOutTD[damagedid] = CreatePlayerTextDraw(damagedid, 320.000000, 200.000000, "~N~~R~BLEEDING OUT..~N~"#BLEED_OUT_TIME"~N~"); PlayerTextDrawAlignment(damagedid, BleedOutTD[damagedid], 2); PlayerTextDrawBackgroundColor(damagedid, BleedOutTD[damagedid], 1768516095); PlayerTextDrawFont(damagedid, BleedOutTD[damagedid], 2); PlayerTextDrawLetterSize(damagedid, BleedOutTD[damagedid], 0.519999, 2.000000); PlayerTextDrawColor(damagedid, BleedOutTD[damagedid], -1); PlayerTextDrawSetOutline(damagedid, BleedOutTD[damagedid], 0); PlayerTextDrawSetProportional(damagedid, BleedOutTD[damagedid], 1); PlayerTextDrawSetShadow(damagedid, BleedOutTD[damagedid], 0); PlayerTextDrawUseBox(damagedid, BleedOutTD[damagedid], 1); PlayerTextDrawBoxColor(damagedid, BleedOutTD[damagedid], 255); PlayerTextDrawTextSize(damagedid, BleedOutTD[damagedid], 0.000000, 180.000000); PlayerTextDrawShow(damagedid, BleedOutTD[damagedid]); SetPlayerChatBubble(damagedid, "BLEEDING OUT", 0xFF0000FF, 100, 2000); // Create revival prompt new tdstring[64], pname[MAX_PLAYER_NAME]; GetPlayerName(damagedid, pname, MAX_PLAYER_NAME); format(tdstring, sizeof(tdstring), "Hold ~Y~~k~~PED_SPRINT~ ~W~to revive ~P~%s", pname); BleedOutReviveTD[damagedid] = TextDrawCreate(320.000000, 354.000000, tdstring); TextDrawAlignment(BleedOutReviveTD[damagedid], 2); TextDrawBackgroundColor(BleedOutReviveTD[damagedid], 255); TextDrawFont(BleedOutReviveTD[damagedid], 1); TextDrawLetterSize(BleedOutReviveTD[damagedid], 0.400000, 1.399999); TextDrawColor(BleedOutReviveTD[damagedid], -1); TextDrawSetOutline(BleedOutReviveTD[damagedid], 1); TextDrawSetProportional(BleedOutReviveTD[damagedid], 1); BleedingPlayers[BleedingPlayerCount] = damagedid; BleedingPlayerCount++; } return 1; } SetPlayerHealth(damagedid, health); return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(BleedOutTime[playerid] != 0) { BleedingPlayerCount--; KillTimer(BleedOutTimer[playerid]); PlayerTextDrawDestroy(playerid, BleedOutTD[playerid]); TextDrawDestroy(BleedOutReviveTD[playerid]); } return 1; } public OnPlayerSpawn(playerid) { BleedOutTime[playerid] = 0; pRevive[playerid] = -1; return 1; } public OnPlayerUpdate(playerid) { if(BleedOutTime[playerid] != 0 || pRevive[playerid] != -1) return 1; new Float:x, Float:y, Float:z; for(new i=0; i 99) { SetPlayerHealth(reviveid, 100); GameTextForPlayer(reviveid, "~G~REVIVED", 3000, 3); new string[64], pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); format(string, sizeof(string), "Revived by %s", pname); SendClientMessage(reviveid, 0x00FF00FF, string); GetPlayerName(reviveid, pname, MAX_PLAYER_NAME); format(string, sizeof(string), "Revived %s", pname); SendClientMessage(playerid, 0x00FF00FF, string); KillTimer(BleedOutTimer[reviveid]); PlayerTextDrawDestroy(reviveid, BleedOutTD[reviveid]); TextDrawDestroy(BleedOutReviveTD[reviveid]); BleedingPlayerCount--; BleedOutTime[reviveid] = 0; ClearAnimations(reviveid); KillTimer(RevivalTimer[reviveid]); pRevive[playerid] = -1; return 1; } SetPlayerHealth(reviveid, pHealth+REVIVE_HEALTH); } return 1; }