Low Health 20% > Injured. -
Uberanwar - 10.10.2013
Hi guys, how do I make if a players have 20% health (or lower) they will perform crack anim?? The injured player will perform this anim...
Quote:
PlayAnimEx(playerid, "CRACK", "crckdeth4", 4.0, 0, 1, 1, 1, 0, 1);
|
And how do I make a gametextforplayer for a player who is injured saying they are injured?
Sry for my bad english, but I hope you guys understand. I need tips or example script about this..
Re: Low Health 20% > Injured. -
xVIP3Rx - 10.10.2013
You could Set a timer to check every sec if the player's health under 20 and if yes apply the animation you like.
Edit: Use EiresJason's code, It's better.
Re: Low Health 20% > Injured. -
EiresJason - 10.10.2013
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
{
new Float:hp;
GetPlayerHealth(playerid,hp);
if(hp <= 20) ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1);
return 1;
}
Re: Low Health 20% > Injured. -
Uberanwar - 10.10.2013
Quote:
Originally Posted by EiresJason
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) { new Float:hp; GetPlayerHealth(playerid,hp); if(hp <= 20) ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1); return 1; }
|
I'm afraid they'll zombie walk, or shoot, is there any stuff that can disable them from shooting or walking? Only disable, not remove the weapons.
Oh and how do I make it they will be normal (they can walk) after they have more than 20 health?
EDIT: Can I use TogglePlayerControllable to disable them from walking if they have below than 20 health?
Re: Low Health 20% > Injured. -
EiresJason - 10.10.2013
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
{
new Float:hp;
GetPlayerHealth(playerid,hp);
if(hp <= 20)
{
TogglePlayerControllable (playerid,0);
ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1);
SetTimerEx("MoreThan20HP",1000,true,"i",playerid);
}
return 1;
}
forward MoreThan20HP(playerid);
public MoreThan20HP(playerid)
{
new Float:hp;
GetPlayerHealth(playerid,hp);
if(hp >= 21) TogglePlayerControllable (playerid,1);
}
Re: Low Health 20% > Injured. -
xVIP3Rx - 10.10.2013
TogglePlayerControllable To stop them from moving, I think you can't make them unable to shoot while they have an armed weapon, Either Set the armed weapon to 0 or make him unable to give damage to any other player, And about making them able to move again after they get more they 20 health, You'll need a timer..
Re: Low Health 20% > Injured. -
Sublime - 10.10.2013
@Elires, use ClearAnimations(playerid);, much better!
SetPlayerControllable is only to "un-freeze" players.
Re: Low Health 20% > Injured. -
EiresJason - 10.10.2013
Quote:
Originally Posted by Sublime
@Elires, use ClearAnimations(playerid);, much better!
SetPlayerControllable is only to "un-freeze" players.
|
I know XD
The thread starter wanted them frozen so they can't move.
Re: Low Health 20% > Injured. -
Uberanwar - 10.10.2013
Quote:
Originally Posted by EiresJason
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) { new Float:hp; GetPlayerHealth(playerid,hp); if(hp <= 20) { TogglePlayerControllable (playerid,0); ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1); SetTimerEx("MoreThan20HP",1000,true,"i",playerid); } return 1; }
forward MoreThan20HP(playerid); public MoreThan20HP(playerid) { new Float:hp; GetPlayerHealth(playerid,hp);
if(hp >= 21) TogglePlayerControllable (playerid,1);
}
|
How do I make injured player (below 20 health) keeps decreasing 1% health every 4 seconds?
Re: Low Health 20% > Injured. -
Pottus - 10.10.2013
Quote:
Originally Posted by EiresJason
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) { new Float:hp; GetPlayerHealth(playerid,hp); if(hp <= 20) { TogglePlayerControllable (playerid,0); ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1); SetTimerEx("MoreThan20HP",1000,true,"i",playerid); } return 1; }
forward MoreThan20HP(playerid); public MoreThan20HP(playerid) { new Float:hp; GetPlayerHealth(playerid,hp);
if(hp >= 21) TogglePlayerControllable (playerid,1);
}
|
That needs a slight modification since GetPlayerHealth() will return the HP before the player was damaged.
pawn Код:
new Float:hp;
GetPlayerHealth(playerid,hp);
hp -= amount;
There is also problems with the new code you provided, for instance the time is not killed from subsequent OnPlayerTakeDamage() which will cause multiple times to run.
I wouldn't use timers like you are instead I would create a timer which loops through all players instead of making a bunch of individual timers that is very sloppy and messy so you would get something like this.
pawn Код:
new Injured[MAX_PLAYERS];
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
{
if(!Injured[playerid])
{
new Float:hp;
GetPlayerHealth(playerid,hp);
hp -= amount;
if(hp <= 20)
{
TogglePlayerControllable (playerid,0);
ApplyAnimation(playerid,"CRACK","crckdeth2",4.1,0,1,1,1,1,1);
Injured[playerid] = 1;
}
}
return 1;
}
pawn Код:
public OnGameModeInit()
{
SetTimer("InjuredTimer", 4000, true);
return 1;
}
pawn Код:
forward InjuredTimer();
public InjuredTimer()
{
foreach(new i : Player)
{
if(Injured[i])
{
new Float:hp;
GetPlayerHealth(i, hp);
if(hp <= 20.0) SetPlayerHealth(i, hp-1.0);
else
{
TogglePlayerControllable(i,1);
Injured[i] = 0;
}
}
}
}
That is how I would do it (Untested but should work
)