X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fbuffs%2Fsv_buffs.qc;h=edd970126c5a8ec1c467b1f3a2850c70bb042ce8;hp=a5d3490a459186e0ff8fa71d9e57905dad91354d;hb=7ca1d66af4b7d36f2e036100ba6183fff7213829;hpb=f6a5832d12fbcf7fb4f44778063e2c251b9d0a38 diff --git a/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc b/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc index a5d3490a4..edd970126 100644 --- a/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc +++ b/qcsrc/common/mutators/mutator/buffs/sv_buffs.qc @@ -6,11 +6,14 @@ .float buff_time = _STAT(BUFF_TIME); void buffs_DelayedInit(entity this); -REGISTER_MUTATOR(buffs, cvar("g_buffs")) +AUTOCVAR(g_buffs, int, -1, "Enable buffs, -1: enabled but no auto location or replacing powerups, 1: enabled and can replace them"); + +REGISTER_MUTATOR(buffs, autocvar_g_buffs) { MUTATOR_ONADD { - InitializeEntity(NULL, buffs_DelayedInit, INITPRIO_FINDTARGET); + if(autocvar_g_buffs > 0) + InitializeEntity(NULL, buffs_DelayedInit, INITPRIO_FINDTARGET); } } @@ -111,7 +114,7 @@ void buff_SetCooldown(entity this, float cd) void buff_Respawn(entity this) { - if(gameover) { return; } + if(game_stopped) return; vector oldbufforigin = this.origin; this.velocity = '0 0 200'; @@ -146,7 +149,7 @@ void buff_Respawn(entity this) void buff_Touch(entity this, entity toucher) { - if(gameover) { return; } + if(game_stopped) return; if(ITEM_TOUCH_NEEDKILL()) { @@ -245,7 +248,7 @@ void buff_Think(entity this) this.oldbuffs = this.buffs; } - if(!gameover) + if(!game_stopped) if((round_handler_IsActive() && !round_handler_IsRoundStarted()) || time >= game_starttime) if(!this.buff_activetime_updated) { @@ -266,7 +269,7 @@ void buff_Think(entity this) } if(this.buff_activetime) - if(!gameover) + if(!game_stopped) if((round_handler_IsActive() && !round_handler_IsRoundStarted()) || time >= game_starttime) { this.buff_activetime = max(0, this.buff_activetime - frametime); @@ -340,14 +343,14 @@ 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"; this.solid = SOLID_TRIGGER; this.flags = FL_ITEM; this.bot_pickup = true; - this.bot_pickupevalfunc = commodity_pickupevalfunc; + this.bot_pickupevalfunc = generic_pickupevalfunc; this.bot_pickupbasevalue = 1000; IL_PUSH(g_items, this); setthink(this, buff_Think); @@ -447,7 +450,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_SplitHealthArmor) } } -MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_Calculate) +MUTATOR_HOOKFUNCTION(buffs, Damage_Calculate) { entity frag_attacker = M_ARGV(1, entity); entity frag_target = M_ARGV(2, entity); @@ -625,7 +628,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDies) MUTATOR_HOOKFUNCTION(buffs, PlayerUseKey, CBC_ORDER_FIRST) { - if(MUTATOR_RETURNVALUE || gameover) { return; } + if(MUTATOR_RETURNVALUE || game_stopped) return; entity player = M_ARGV(0, entity); @@ -644,7 +647,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerUseKey, CBC_ORDER_FIRST) MUTATOR_HOOKFUNCTION(buffs, ForbidThrowCurrentWeapon) { - if(MUTATOR_RETURNVALUE || gameover) { return; } + if(MUTATOR_RETURNVALUE || game_stopped) return; entity player = M_ARGV(0, entity); if(player.buffs & BUFF_SWAPPER.m_itemid) @@ -744,6 +747,9 @@ MUTATOR_HOOKFUNCTION(buffs, CustomizeWaypoint) MUTATOR_HOOKFUNCTION(buffs, OnEntityPreSpawn, CBC_ORDER_LAST) { + if(autocvar_g_buffs < 0) + return; // no auto replacing of entities in this mode + entity ent = M_ARGV(0, entity); if(autocvar_g_buffs_replace_powerups) @@ -781,11 +787,24 @@ MUTATOR_HOOKFUNCTION(buffs, WeaponSpeedFactor) M_ARGV(0, float) *= autocvar_g_buffs_disability_weaponspeed; } +.bool buff_flight_crouchheld; + MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) { entity player = M_ARGV(0, entity); - if(gameover || IS_DEAD(player)) { return; } + if(game_stopped || IS_DEAD(player)) return; + + if(player.buffs & BUFF_FLIGHT.m_itemid) + { + if(!PHYS_INPUT_BUTTON_CROUCH(player)) + player.buff_flight_crouchheld = false; + else if(!player.buff_flight_crouchheld) + { + player.buff_flight_crouchheld = true; + player.gravity *= -1; + } + } if(time < player.buff_disability_time) if(time >= player.buff_disability_effect_time) @@ -920,6 +939,16 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink) BUFF_ONREM(BUFF_INVISIBLE) player.alpha = player.buff_invisible_prev_alpha; + BUFF_ONADD(BUFF_FLIGHT) + { + player.buff_flight_oldgravity = player.gravity; + if(!player.gravity) + player.gravity = 1; + } + + BUFF_ONREM(BUFF_FLIGHT) + player.gravity = ((player.trigger_gravity_check) ? player.trigger_gravity_check.enemy.gravity : player.buff_flight_oldgravity); + player.oldbuffs = player.buffs; if(player.buffs) { @@ -1003,12 +1032,14 @@ REPLICATE(cvar_cl_buffs_autoreplace, bool, "cl_buffs_autoreplace"); MUTATOR_HOOKFUNCTION(buffs, BuildMutatorsString) { - M_ARGV(0, string) = strcat(M_ARGV(0, string), ":Buffs"); + if(autocvar_g_buffs > 0) // only report as a mutator if they're enabled + M_ARGV(0, string) = strcat(M_ARGV(0, string), ":Buffs"); } MUTATOR_HOOKFUNCTION(buffs, BuildMutatorsPrettyString) { - M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Buffs"); + if(autocvar_g_buffs > 0) + M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Buffs"); } void buffs_DelayedInit(entity this)