public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float:Colete;
new Float:Vida;
GetPlayerArmour(damagedid, Colete);
GetPlayerHealth(damagedid, Vida);
if(weaponid == 2)
{
if(Vida > 0)
{
Ssangramento[damagedid] = SetTimerEx("sangramento", 5000, false, "i", damagedid);
SetTimerEx("dsangramento", 30000, false, "i", damagedid);
}
}
return true;
}
forward sangramento(playerid);
public sangramento(playerid)
{
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,(health-0.2));
}
forward dsangramento(playerid);
public dsangramento(playerid)
{
KillTimer(Ssangramento[playerid]);
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float:Colete, Float:Vida;
GetPlayerArmour(damagedid, Colete);
GetPlayerHealth(damagedid, Vida);
if(weaponid == 2 && Vida > 0)
{
Ssangramento[damagedid] = SetTimerEx("sangramento", 800, true, "i", damagedid);
SetTimerEx("dsangramento", 10000, false, "i", damagedid);
}
return true;
}
forward sangramento(playerid);
public sangramento(playerid)
{
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,(health - 0.2));
return true; // nгo esqueзa de retornar numa callback/stock
}
forward dsangramento(playerid);
public dsangramento(playerid) return KillTimer(Ssangramento[playerid]);
new bool:Sangrando[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Sangrando[playerid] = false;
return 1;
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
if(Sangrando[playerid] == false)
{
new Float:Colete;
new Float:Vida;
GetPlayerArmour(damagedid, Colete);
GetPlayerHealth(damagedid, Vida);
if(weaponid == 2)
{
if(Vida > 0.0)
{
Sangrando[playerid] = true;
Ssangramento[damagedid] = SetTimerEx("sangramento", 5000, true, "i", damagedid);
SetTimerEx("dsangramento", 30000, false, "i", damagedid);
}
}
}
return true;
}
forward sangramento(playerid);
public sangramento(playerid)
{
if(Sangrando[playerid] == false)
{
KillTimer(Ssangramento[playerid]);
return 1;
}
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,(health-0.2));
return 1;
}
forward dsangramento(playerid);
public dsangramento(playerid)
{
if(Sangrando[playerid] == true)
{
Sangrando[playerid] = false;
KillTimer(Ssangramento[playerid]);
}
return 1;
}
@Artista
Repare q o timer 'sangramento' irб chamar suas funзхes apуs 5 segundos. Me explique pq vou querer perder vida depois de 5 segundos e ainda vou perder somente 0.2, nгo de forma contнnua, pois o timer й chamado uma vez sу, logo, cada hit da um dano de 0.2 depois de 5 segundos! @TOPIC Nгo sei se percebeu, mas utilizou FALSE no loop, ou seja, nгo irб repetir; Outro detalhe visto, foi que o timer de parar o "dsangramento" tem um delay maior que o de "sangramento", ou seja, vc utiliza um killtimer pra parar porr@ nenhuma; O timer sangramento termina antes de chamar o outro timer, sem ao menos repetir. Lуgica horrнvel! Nгo sei se estб 100% funcional, mas a lуgica й exatamente essa: PHP код:
|