X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fbuffs%2Fsv_buffs.qc;h=b63349e86a34b1965896b9e30955b20443226706;hb=9f1b7db1e3034be3219e9a2d2f5189951a48b73d;hp=4df42406d064fd9f737f0947efa522aa79aecd26;hpb=0d34650737898101ccba01d77bfa6ab52fc37619;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc b/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc index 4df42406d..b63349e86 100644 --- a/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc +++ b/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc @@ -160,6 +160,7 @@ void buff_Touch(entity this, entity toucher) if((this.team && DIFF_TEAM(toucher, this)) || (STAT(FROZEN, toucher)) || (toucher.vehicle) + || (time < toucher.buff_shield) || (!this.buff_active) ) { @@ -257,7 +258,7 @@ void buff_Think(entity this) } if(!this.buff_active && !this.buff_activetime) - if(!this.owner || STAT(FROZEN, this.owner) || IS_DEAD(this.owner) || !this.owner.iscreature || !(this.owner.buffs & this.buffs)) + if(!this.owner || STAT(FROZEN, this.owner) || IS_DEAD(this.owner) || !this.owner.iscreature || !(this.owner.buffs & this.buffs) || this.pickup_anyway > 0 || (this.pickup_anyway >= 0 && autocvar_g_buffs_pickup_anyway)) { buff_SetCooldown(this, autocvar_g_buffs_cooldown_respawn + frametime); this.owner = NULL; @@ -343,7 +344,7 @@ void buff_Init(entity this) entity buff = buff_FirstFromFlags(this.buffs); - if(!this.buffs || buff_Available(buff)) + if(!this.buffs || !buff_Available(buff)) buff_NewType(this, 0); this.classname = "item_buff"; @@ -628,7 +629,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDies) MUTATOR_HOOKFUNCTION(buffs, PlayerUseKey, CBC_ORDER_FIRST) { - if(MUTATOR_RETURNVALUE || game_stopped) return; + if(MUTATOR_RETURNVALUE || game_stopped || !autocvar_g_buffs_drop) return; entity player = M_ARGV(0, entity); @@ -639,7 +640,8 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerUseKey, CBC_ORDER_FIRST) Send_Notification(NOTIF_ALL_EXCEPT, player, MSG_INFO, INFO_ITEM_BUFF_LOST, player.netname, buffid); player.buffs = 0; - player.buff_time = 0; // already notified + player.buff_shield = time + max(0, autocvar_g_buffs_pickup_delay); + //player.buff_time = 0; // already notified sound(player, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM); return true; } @@ -840,6 +842,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) else Send_Notification(NOTIF_ALL_EXCEPT, player, MSG_INFO, INFO_ITEM_BUFF_LOST, player.netname, buffid); player.buffs = 0; + player.buff_shield = time + max(0, autocvar_g_buffs_pickup_delay); // always put in a delay, even if small } } @@ -872,8 +875,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) } if((player.buffs & BUFF_INVISIBLE.m_itemid) && (player.oldbuffs & BUFF_INVISIBLE.m_itemid)) - if(player.alpha != autocvar_g_buffs_invisible_alpha) - player.alpha = autocvar_g_buffs_invisible_alpha; // powerups reset alpha, so we must enforce this (TODO) + player.alpha = ((autocvar_g_buffs_invisible_alpha) ? autocvar_g_buffs_invisible_alpha : -1); // powerups reset alpha, so we must enforce this (TODO) if(player.buffs & BUFF_MEDIC.m_itemid) if(time >= player.buff_medic_healtime) @@ -930,14 +932,19 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) BUFF_ONADD(BUFF_INVISIBLE) { if(time < player.strength_finished && g_instagib) - player.alpha = autocvar_g_instagib_invis_alpha; + player.buff_invisible_prev_alpha = default_player_alpha; // we don't want to save the powerup's alpha, as player may lose the powerup while holding the buff else - player.alpha = player.buff_invisible_prev_alpha; + player.buff_invisible_prev_alpha = player.alpha; player.alpha = autocvar_g_buffs_invisible_alpha; } BUFF_ONREM(BUFF_INVISIBLE) - player.alpha = player.buff_invisible_prev_alpha; + { + if(time < player.strength_finished && g_instagib) + player.alpha = autocvar_g_instagib_invis_alpha; + else + player.alpha = player.buff_invisible_prev_alpha; + } BUFF_ONADD(BUFF_FLIGHT) { @@ -963,7 +970,8 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) } else { - delete(player.buff_model); + if(player.buff_model) + delete(player.buff_model); player.buff_model = NULL; player.effects &= ~(EF_NOSHADOW);