X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_onslaught.qc;h=c31d53efca3f4f98c9b73d637f4189023b548d46;hb=10d5434becc8bb7bdbced64619272bdc31c8056d;hp=3801de302d9c80fa2ab8cb0e7e3215d01dbf0ff4;hpb=94579b4c440f739c1203ea5e546d3fcadb884c51;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_onslaught.qc b/qcsrc/server/mutators/gamemode_onslaught.qc index 3801de302..c31d53efc 100644 --- a/qcsrc/server/mutators/gamemode_onslaught.qc +++ b/qcsrc/server/mutators/gamemode_onslaught.qc @@ -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; @@ -639,28 +639,6 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, onslaught_updatelinks(); } - if(self.health <= 0) - setmodel(self, "models/onslaught/generator_dead.md3"); - else if(self.health < self.max_health * 0.10) - setmodel(self, "models/onslaught/generator_dmg9.md3"); - else if(self.health < self.max_health * 0.20) - setmodel(self, "models/onslaught/generator_dmg8.md3"); - else if(self.health < self.max_health * 0.30) - setmodel(self, "models/onslaught/generator_dmg7.md3"); - else if(self.health < self.max_health * 0.40) - setmodel(self, "models/onslaught/generator_dmg6.md3"); - else if(self.health < self.max_health * 0.50) - setmodel(self, "models/onslaught/generator_dmg5.md3"); - else if(self.health < self.max_health * 0.60) - setmodel(self, "models/onslaught/generator_dmg4.md3"); - else if(self.health < self.max_health * 0.70) - setmodel(self, "models/onslaught/generator_dmg3.md3"); - else if(self.health < self.max_health * 0.80) - 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, '-52 -52 -14', '52 52 75'); - // Throw some flaming gibs on damage, more damage = more chance for gib if(random() < damage/220) { @@ -689,6 +667,8 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float 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 @@ -696,8 +676,9 @@ void onslaught_generator_delayed() { onslaught_updatelinks(); // now begin normal thinking - self.think = onslaught_generator_think; - self.nextthink = time; + generator_link(onslaught_generator_think); + + self.SendFlags = GSF_SETUP; } string onslaught_generator_waypointsprite_for_team(entity e, float t) @@ -852,7 +833,9 @@ void onslaught_generator_reset() self.think = onslaught_generator_delayed; self.nextthink = time + 0.2; setmodel(self, "models/onslaught/generator.md3"); - setsize(self, '-52 -52 -14', '52 52 75'); + setsize(self, GENERATOR_MIN, GENERATOR_MAX); + + self.SendFlags |= GSF_STATUS; if(!self.noalign) { @@ -884,16 +867,6 @@ void spawnfunc_onslaught_generator() //entity e; precache_model("models/onslaught/generator.md3"); precache_model("models/onslaught/generator_shield.md3"); - precache_model("models/onslaught/generator_dmg1.md3"); - precache_model("models/onslaught/generator_dmg2.md3"); - precache_model("models/onslaught/generator_dmg3.md3"); - precache_model("models/onslaught/generator_dmg4.md3"); - precache_model("models/onslaught/generator_dmg5.md3"); - precache_model("models/onslaught/generator_dmg6.md3"); - precache_model("models/onslaught/generator_dmg7.md3"); - precache_model("models/onslaught/generator_dmg8.md3"); - precache_model("models/onslaught/generator_dmg9.md3"); - precache_model("models/onslaught/generator_dead.md3"); precache_model("models/onslaught/shockwave.md3"); precache_model("models/onslaught/shockwavetransring.md3"); precache_model("models/onslaught/gen_gib1.md3"); @@ -908,6 +881,7 @@ void spawnfunc_onslaught_generator() precache_sound("onslaught/ons_hit1.wav"); precache_sound("onslaught/ons_hit2.wav"); precache_sound("onslaught/electricity_explode.wav"); + precache_sound("onslaught/generator_underattack.wav"); if (!self.team) objerror("team must be set"); @@ -923,7 +897,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, '-52 -52 -14', '52 52 75'); + setsize(self, GENERATOR_MIN, GENERATOR_MAX); setorigin(self, self.origin); self.takedamage = DAMAGE_AIM; self.bot_attack = TRUE; @@ -978,7 +952,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; @@ -986,7 +960,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) @@ -1271,7 +1245,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) @@ -1644,11 +1618,48 @@ MUTATOR_HOOKFUNCTION(ons_PlayerSpawn) return 0; } +MUTATOR_HOOKFUNCTION(ons_MonsterThink) +{ + entity e = find(world, targetname, self.target); + if (e != world) + self.team = e.team; + + self.SendFlags |= MSF_STATUS; // update 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; + self.SendFlags |= MSF_STATUS; + 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