Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Sistema de Heridas

Iniciado por Swarlog, Ene 30, 2023, 11:06 PM

Tema anterior - Siguiente tema

Swarlog

Información Adicional:

Este script es de Krx17, con el cuando nos ataquen nos aparecerá cada 10 segundos una pantalla roja y nos quitaa algo de vida, como si estubiesemos sangrando. Esta bastante bueno el efecto.

Código:

#include <a_samp>

#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#define MAX_PLAYERS 50 //Change 50 to the max slots your server has.
#endif

enum pInfo
{
Float:lHP,
bool:Wounded,
SecondTick
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new Text:BloodScreen;

forward HealthCheck();

public OnFilterScriptInit()
{
print("\n [     Wounds System by Krx17 Loaded     ]");

LoadBloodScreen();
SetupPlayerVariables();
SetTimer("HealthCheck", 1000, 1);
return 1;
}

public OnFilterScriptExit()
{
UnloadBloodScreen();
return 1;
}

public OnPlayerConnect(playerid)
{
ResetPlayerVariable(playerid);
}

stock LoadBloodScreen()
{
BloodScreen = TextDrawCreate(0.0, 1.0, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~");
TextDrawBackgroundColor(BloodScreen, 0x000000FF);
TextDrawFont(BloodScreen, 1);
TextDrawLetterSize(BloodScreen, 1.24, 5.0);
TextDrawColor(BloodScreen, 0xFFFFFFFF);
TextDrawSetOutline(BloodScreen, 0);
TextDrawSetProportional(BloodScreen, true);
TextDrawSetShadow(BloodScreen, 1);
TextDrawUseBox(BloodScreen, true);
TextDrawBoxColor(BloodScreen, 0xFF000044);
TextDrawTextSize(BloodScreen, 642.0, 0.0);
}

stock UnloadBloodScreen()
{
TextDrawDestroy(BloodScreen);
}

stock SetupPlayerVariables()
{
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
    GetPlayerHealth(i, PlayerInfo[i][lHP]);
}
}

stock ResetPlayerVariable(playerid)
{
PlayerInfo[playerid][lHP] = 100;
PlayerInfo[playerid][Wounded] = false;
PlayerInfo[playerid][SecondTick] = 0;
}

stock OnPlayerHurt(playerid, Float:damage, Float:newHP)
{
if(newHP > 0)
{
    if(damage > 10 && PlayerInfo[playerid][Wounded] == false)
    {
        PlayerInfo[playerid][Wounded] = true;
        SendClientMessage(playerid, 0xFF0000AA, ">> Wounded!");
PlayerInfo[playerid][SecondTick] = 0;
CallRemoteFunction("OnPlayerWoundUpdate", "ii", playerid, 1);
    }
}
}

public HealthCheck()
{
new Float:HP;
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
GetPlayerHealth(i, HP);
if(PlayerInfo[i][lHP] > HP)
{
    OnPlayerHurt(i, PlayerInfo[i][lHP]-HP, HP);
}
if(PlayerInfo[i][Wounded] == true)
{
    PlayerInfo[i][SecondTick]++;
    if(PlayerInfo[i][SecondTick] % 10 == 0)
    {
        if(PlayerInfo[i][SecondTick] >= 40)
{
        PlayerInfo[i][Wounded] = false;
PlayerInfo[i][SecondTick] = 0;
        TextDrawHideForPlayer(i, BloodScreen);
CallRemoteFunction("OnPlayerWoundUpdate", "ii", i, 0);
SendClientMessage(i, 0x00FF00AA, ">> Wounds healed");
        continue;
        }
        TextDrawShowForPlayer(i, BloodScreen);
        SetPlayerHealth(i, HP-3);
    }
    else if(PlayerInfo[i][SecondTick] % 11 == 0)
    {
        TextDrawHideForPlayer(i, BloodScreen);
    }
}
PlayerInfo[i][lHP] = HP;
}
}