X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_onslaught.qc;h=f9f0efb060f0106e6df6e6f727785ee1131c2001;hb=9cac2e30b0456afcfd02b4cfb5de949193f4cca7;hp=8373ab49a01d521dfa9129e1e5b69c32b42d72ab;hpb=3cce6543c675327132d69b0f06995dc9c14292aa;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_onslaught.qc b/qcsrc/server/mutators/gamemode_onslaught.qc index 8373ab49a..f9f0efb06 100644 --- a/qcsrc/server/mutators/gamemode_onslaught.qc +++ b/qcsrc/server/mutators/gamemode_onslaught.qc @@ -397,7 +397,7 @@ void onslaught_generator_think() } // self.max_health / 300 gives 5 minutes of overtime. // control points reduce the overtime duration. - sound(self, CH_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTEN_NORM); d = 1; e = findchain(classname, "onslaught_controlpoint"); while (e) @@ -426,7 +426,7 @@ void onslaught_generator_think() if(e.team == self.team) { centerprint(e, "^1Your generator is NOT shielded!\n^7Re-capture controlpoints to shield it!"); - soundto(MSG_ONE, e, CHAN_AUTO, "kh/alarm.wav", VOL_BASE, ATTN_NONE); // FIXME: Uniqe sound? + soundto(MSG_ONE, e, CHAN_AUTO, "kh/alarm.wav", VOL_BASE, ATTEN_NONE); // FIXME: Uniqe sound? } } } @@ -488,7 +488,7 @@ void onslaught_generator_damage_think() if(random() < 0.01) { pointparticles(particleeffectnum("electro_ballexplode"), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1); - sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM); } else pointparticles(particleeffectnum("torch_small"), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1); @@ -517,7 +517,7 @@ void onslaught_generator_deaththink() if(self.count==40||self.count==20) { onslaught_generator_ring_spawn(self.origin); - sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM); } // Throw some gibs @@ -543,7 +543,7 @@ void onslaught_generator_deaththink() if(random() < 0.25) { te_explosion(self.origin); - sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTEN_NORM); } // Particles @@ -563,7 +563,7 @@ void onslaught_generator_deaththink() te_explosion(org); onslaught_generator_shockwave_spawn(org); pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1); - sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); } else self.nextthink = time + 0.05; @@ -576,7 +576,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, float i; if (damage <= 0) return; - if(inWarmupStage) + if(warmup_stage) return; if (attacker != self) { @@ -584,7 +584,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, { // this is protected by a shield, so ignore the damage if (time > self.pain_finished) - if (attacker.classname == "player") + if (IS_PLAYER(attacker)) { play2(attacker, "onslaught/damageblockedbyshield.wav"); self.pain_finished = time + 1; @@ -614,7 +614,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, #endif self.lasthealth = self.health; } - else if not(inWarmupStage) + else if not(warmup_stage) { if (attacker == self) bprint(Team_ColoredFullName(self.team), " generator spontaneously exploded due to overtime!\n"); @@ -659,12 +659,12 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, setmodel(self, "models/onslaught/generator_dmg2.md3"); else if(self.health < self.max_health * 0.90) setmodel(self, "models/onslaught/generator_dmg1.md3"); - setsize(self, GENERATOR_MIN, GENERATOR_MAX); + setsize(self, '-52 -52 -14', '52 52 75'); // Throw some flaming gibs on damage, more damage = more chance for gib if(random() < damage/220) { - sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); i = random(); if(i < 0.3) ons_throwgib(hitloc + '0 0 20', force * -1, "models/onslaught/gen_gib1.md3", 5, TRUE); @@ -680,17 +680,15 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTEN_NORM); else - sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); } //throw some gibs on damage if(random() < damage/200+0.2) if(random() < 0.5) ons_throwgib(hitloc + '0 0 20', randomvec()*360, "models/onslaught/gen_gib1.md3", 5, FALSE); - - self.SendFlags |= GSF_STATUS; } // update links after a delay @@ -698,9 +696,8 @@ void onslaught_generator_delayed() { onslaught_updatelinks(); // now begin normal thinking - generator_link(onslaught_generator_think); - - self.SendFlags = GSF_SETUP; + self.think = onslaught_generator_think; + self.nextthink = time; } string onslaught_generator_waypointsprite_for_team(entity e, float t) @@ -926,7 +923,7 @@ void spawnfunc_onslaught_generator() self.movetype = MOVETYPE_NONE; self.lasthealth = self.max_health = self.health = autocvar_g_onslaught_gen_health; setmodel(self, "models/onslaught/generator.md3"); - setsize(self, GENERATOR_MIN, GENERATOR_MAX); + setsize(self, '-52 -52 -14', '52 52 75'); setorigin(self, self.origin); self.takedamage = DAMAGE_AIM; self.bot_attack = TRUE; @@ -981,7 +978,7 @@ void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float { // this is protected by a shield, so ignore the damage if (time > self.pain_finished) - if (attacker.classname == "player") + if (IS_PLAYER(attacker)) { play2(attacker, "onslaught/damageblockedbyshield.wav"); self.pain_finished = time + 1; @@ -989,7 +986,7 @@ void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float return; } - if (attacker.classname == "player") + if (IS_PLAYER(attacker)) { nag = FALSE; if(self.team == NUM_TEAM_1) @@ -1029,13 +1026,13 @@ void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float pointparticles(particleeffectnum("sparks"), hitloc, force*-1, 1); //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTEN_NORM); else - sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTEN_NORM); if (self.health < 0) { - sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1); { string t; @@ -1212,9 +1209,9 @@ void onslaught_controlpoint_icon_think() pointparticles(particleeffectnum("electricity_sparks"), self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1); if(random() > 0.8) - sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTEN_NORM); else if (random() > 0.5) - sound(self, CH_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTEN_NORM); } } @@ -1237,7 +1234,7 @@ void onslaught_controlpoint_icon_buildthink() self.health = self.max_health; self.count = autocvar_g_onslaught_cp_regen * sys_frametime; // slow repair rate from now on self.think = onslaught_controlpoint_icon_think; - sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTEN_NORM); bprint(Team_ColoredFullName(self.team), " captured ", self.owner.message, " control point\n"); self.owner.iscaptured = TRUE; @@ -1274,7 +1271,7 @@ void onslaught_controlpoint_touch() { entity e; float a; - if (other.classname != "player") + if not(IS_PLAYER(other)) return; a = onslaught_controlpoint_attackable(self, other.team); if(a != 2 && a != 4) @@ -1300,7 +1297,7 @@ void onslaught_controlpoint_touch() e.think = onslaught_controlpoint_icon_buildthink; e.nextthink = time + sys_frametime; e.count = (e.max_health - e.health) * sys_frametime / autocvar_g_onslaught_cp_buildtime; // how long it takes to build - sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM); + sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTEN_NORM); self.team = e.team; self.colormap = e.colormap; WaypointSprite_UpdateBuildFinished(self.sprite, time + (e.max_health - e.health) / (e.count / sys_frametime)); @@ -1647,11 +1644,45 @@ MUTATOR_HOOKFUNCTION(ons_PlayerSpawn) return 0; } +MUTATOR_HOOKFUNCTION(ons_MonsterThink) +{ + entity e = find(world, targetname, self.target); + if (e != world) + self.team = e.team; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(ons_MonsterSpawn) +{ + entity e, ee = world; + + if(self.targetname) + { + e = find(world,target,self.targetname); + if(e != world) + { + self.team = e.team; + ee = e; + } + } + + if(ee) + { + activator = ee; + self.use(); + } + + return FALSE; +} + MUTATOR_DEFINITION(gamemode_onslaught) { MUTATOR_HOOK(BuildMutatorsPrettyString, ons_BuildMutatorsPrettyString, CBC_ORDER_ANY); MUTATOR_HOOK(BuildMutatorsString, ons_BuildMutatorsString, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerSpawn, ons_PlayerSpawn, CBC_ORDER_ANY); + MUTATOR_HOOK(MonsterMove, ons_MonsterThink, CBC_ORDER_ANY); + MUTATOR_HOOK(MonsterSpawn, ons_MonsterSpawn, CBC_ORDER_ANY); //MUTATOR_HOOK(Spawn_Score, ons_Spawn_Score, CBC_ORDER_ANY); MUTATOR_ONADD