X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ft_items.qc;h=7dccf97a2ef57a2bdada54cc07580e2fccd60794;hp=d9bd7bdc9606d8b1399bc89efabede0f952d0c78;hb=b0cf4c6dd97724dabf844d02e0e3252e9bf86655;hpb=4ce7f4166796e49e2ee2d0f46a21e99536e846ef diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index d9bd7bdc9..7dccf97a2 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -23,6 +23,7 @@ #include #include + #include #include "../lib/warpzone/util_server.qh" #elif defined(CSQC) @@ -1618,28 +1619,36 @@ float GiveWeapon(entity e, float wpn, float op, float val) bool GiveBuff(entity e, Buff thebuff, int op, int val) { bool had_buff = (STAT(BUFFS, e) & thebuff.m_itemid); + float new_buff_time = ((had_buff) ? STAT(BUFF_TIME, e) : 0); switch (op) { case OP_SET: - STAT(BUFF_TIME, e) = val; + new_buff_time = val; break; case OP_MIN: - STAT(BUFF_TIME, e) = max(STAT(BUFF_TIME, e), val); + new_buff_time = max(new_buff_time, val); break; case OP_MAX: - STAT(BUFF_TIME, e) = min(STAT(BUFF_TIME, e), val); + new_buff_time = min(new_buff_time, val); break; case OP_PLUS: - STAT(BUFF_TIME, e) += val; + new_buff_time += val; break; case OP_MINUS: - STAT(BUFF_TIME, e) -= val; + new_buff_time -= val; break; } - if(STAT(BUFF_TIME, e) <= 0) + if(new_buff_time <= 0) + { + if(had_buff) + STAT(BUFF_TIME, e) = new_buff_time; STAT(BUFFS, e) &= ~thebuff.m_itemid; + } else + { + STAT(BUFF_TIME, e) = new_buff_time; STAT(BUFFS, e) = thebuff.m_itemid; // NOTE: replaces any existing buffs on the player! + } bool have_buff = (STAT(BUFFS, e) & thebuff.m_itemid); return (had_buff != have_buff); } @@ -1827,7 +1836,7 @@ float GiveItems(entity e, float beginarg, float endarg) got += GiveResourceValue(e, RES_FUEL, op, val); break; default: - FOREACH(Buffs, it != BUFF_Null && Buff_UndeprecateName(cmd) == it.netname, + FOREACH(Buffs, it != BUFF_Null && buff_Available(it) && Buff_UndeprecateName(cmd) == it.netname, { got += GiveBuff(e, it, op, val); break;