r00k
Joined: 13 Nov 2004 Posts: 483
|
Posted: Tue Sep 09, 2008 5:42 am Post subject: MEGAHEALTH REDUX |
|
|
Megahealth fix redux... to preserve id's original intent...
a.> Health subtracts 1 per second
b.> respawns 125 seconds after u take
or
c.> respawn 20 seconds after u get below 100h (this part Maddes left out, and some hardcore DM players were pissed off about it )
if u have multiple megahealths then it wont multiply on the depletion AND if you die or your health drops below(or equals) 100 then it all megahealths that you had WILL respawn in 20 seconds.
ITEMS.QC:
Code: |
void(entity player, entity mega) MakeHealthRot =
{
local entity rot;
rot = spawn ();
rot.classname = "health_rot";
rot.nextthink = time + 5;
rot.think = item_megahealth_rot;
rot.owner = mega;
rot.enemy = player;
rot.enemy.rotthink = time + 5;//delay
};
void () health_touch =
{
local float donttake;
local string s;
if ((other.classname != "player"))
{
return;
}
if ((self.healtype == H_MEGA))
{
if ((other.health >= 250))
{
donttake = 1;
}
if (!T_Heal (other, self.healamount, H_ROTTEN))
{
donttake = 1;
}
}
else
{
if (!T_Heal (other, self.healamount, 0))
{
donttake = 1;
}
}
if (donttake == 0)
{
sprint (other, "You receive ");
s = ftos (self.healamount);
sprint (other, s);
sprint (other, " health\n");
sound (other, CHAN_ITEM, self.noise, H_ROTTEN, ATTN_NORM);
stuffcmd (other, "bf\n");
self.model = string_null;
self.solid = SOLID_NOT;
self.owner = other;
//MEGAHEALTH FIX
if (self.healtype == H_MEGA)
{
MakeHealthRot(other,self);// create rot entity R00k: fixed
other.items = other.items | IT_SUPERHEALTH;
//Set this megahealth's respawn to default 125 seconds.
if (deathmatch != 2) // deathmatch 2 is silly old rules
{
self.nextthink = time + self.healamount + 25; // delay (5) + health + respawn wait (20)
self.think = SUB_regen;
}
}
else
{
if ((deathmatch != 2))
{
self.nextthink = (time + 20);
self.think = SUB_regen;
}
}
}
activator = other;
SUB_UseTargets ();
};
void () item_megahealth_rot =
{
other = self.enemy;
if (other.health > other.max_health)
{
self.think = item_megahealth_rot;
self.nextthink = (time + 1);
return;
}
//R00k: must still respawn mega 20 seconds AFTER other.health < other.max_health
if (deathmatch != 2)
{
self.owner.nextthink = (time + 20);
self.owner.think = SUB_regen;
}
remove(self);
};
|
CLIENT.QC:
in
void () CheckPowerups =
Code: |
//Multiple megahealth rot fix
if ((self.items & IT_SUPERHEALTH) && (time > self.rotthink))
{
if (self.health > self.max_health)
{
if (self.invincible_finished < time)
{
self.health = (self.health - 1.00);
self.rotthink = (time + 1.00);
}
}
else
{
self.items = self.items - (self.items & IT_SUPERHEALTH);
}
}
|
|
|