OnPlayerUpdate - One Hit Kill
#1

I am trying to make a TDM arena, where player dies when shot. Here's my script:

Код:
public OnPlayerUpdate(playerid)
{
    new Float:health;
    new Float:CurrentHealth = GetPlayerHealth(playerid,health);
    if(CurrentHealth != GetPVarFloat(playerid,"CurrentHealthStatus"))
    {
        OnPlayerHealthChange(playerid,GetPVarFloat(playerid,"CurrentHealthStatus"),CurrentHealth);
        SetPVarFloat(playerid,"CurrentHealthStatus",CurrentHealth);
    }
    return 1;
}

stock OnPlayerHealthChange(playerid,Float:oldhealth,Float:newhealth)
{
    new str[32];
    GetPlayerHealth(playerid,oldhealth);
    GetPlayerHealth(playerid,newhealth);
    //format(str,sizeof(str),"HP: from %f to %f",oldhealth,newhealth);
    //SendClientMessage(playerid,COLOR_RED,str);
    SetPlayerHealth(playerid,0);
}
But it doesnt work, so I created that SCM to see, when is that stock used. It is used only when player spawns.
Reply
#2

i am not sure but try this..
Код:
public OnPlayerUpdate(playerid)
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
	    new Float:health;
	    new Float:CurrentHealth = GetPlayerHealth(i,health);
	    if(CurrentHealth != GetPVarFloat(i,"CurrentHealthStatus"))
	    {
	        OnPlayerHealthChange(i,GetPVarFloat(i,"CurrentHealthStatus"),CurrentHealth);
	        SetPVarFloat(i,"CurrentHealthStatus",CurrentHealth);
	    }
    }
    return 1;
}

stock OnPlayerHealthChange(playerid,Float:oldhealth,Float:newhealth)
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
    new str[32];
    GetPlayerHealth(i,oldhealth);
    GetPlayerHealth(i,newhealth);
    //format(str,sizeof(str),"HP: from %f to %f",oldhealth,newhealth);
    //SendClientMessage(i,COLOR_RED,str);
    SetPlayerHealth(i,0);
    }
}
Reply
#3

I believe GetPlayerHealth doesn't return the health, that is why we have a (playerid, Float: health) parameter, it stores the players health in that var.

pawn Код:
public OnPlayerUpdate(playerid)
{
    new Float:CurrentHealth;
    GetPlayerHealth(playerid,CurrentHealth);
    if(CurrentHealth != GetPVarFloat(playerid,"CurrentHealthStatus"))
    {
        OnPlayerHealthChange(playerid,GetPVarFloat(playerid,"CurrentHealthStatus"),CurrentHealth);
        SetPVarFloat(playerid,"CurrentHealthStatus",CurrentHealth);
    }
    return 1;
}

stock OnPlayerHealthChange(playerid,Float:oldhealth,Float:newhealth)
{
    new str[32];
    GetPlayerHealth(playerid,oldhealth);
    GetPlayerHealth(playerid,newhealth);
    //format(str,sizeof(str),"HP: from %f to %f",oldhealth,newhealth);
    //SendClientMessage(playerid,COLOR_RED,str);
    SetPlayerHealth(playerid,0);
}
Reply
#4

Even '-1' damaged kill player?
<pawn><code>
public OnPlayerUpdate(playerid);
{
new Float:OldHealth;
new Float:NewHealth;
GetPlayerHealth(playerid,OldHealth);
GetPlayerHealth(playerid,NewHealth);
if(OldHealth != NewHealth)
{
SetPlayerHealth(playerid, 0);
}
return 1;
}
</code></pawn>
Reply
#5

I've never seen a bullet take 1hp off, I'd also use a timer and not OnPlayerUpdate, even a 100ms timer would be called less than OnPlayerUpdate.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)