X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_minelayer.qc;h=225fa5ebab22df27b768b26a0feacfb01ba25bfd;hp=7342d1e2bb4a9c8c1fd6fb80bf869038d02faca2;hb=ac46eb66c927d1d4c0c61f1ada5efe7fc847ac63;hpb=392daf627bb137aadf4c156dc8dfc4906475840e diff --git a/qcsrc/server/w_minelayer.qc b/qcsrc/server/w_minelayer.qc index 7342d1e2bb..225fa5ebab 100644 --- a/qcsrc/server/w_minelayer.qc +++ b/qcsrc/server/w_minelayer.qc @@ -2,6 +2,7 @@ REGISTER_WEAPON(MINE_LAYER, w_minelayer, IT_ROCKETS, 4, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_HIGH, "minelayer", "minelayer", "Mine Layer"); #else #ifdef SVQC +void W_Mine_Think (void); .float minelayer_detonate, minelayer_mines; .float mine_time; @@ -16,7 +17,7 @@ void W_Mine_Stick () // in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile - local entity newmine; + entity newmine; newmine = spawn(); newmine.classname = self.classname; @@ -33,6 +34,7 @@ void W_Mine_Stick () newmine.damageforcescale = self.damageforcescale; newmine.health = self.health; newmine.event_damage = self.event_damage; + newmine.spawnshieldtime = self.spawnshieldtime; newmine.movetype = MOVETYPE_NONE; // lock the mine in place newmine.projectiledeathtype = self.projectiledeathtype; @@ -40,7 +42,7 @@ void W_Mine_Stick () newmine.mine_time = self.mine_time; newmine.touch = SUB_Null; - newmine.think = self.think; + newmine.think = W_Mine_Think; newmine.nextthink = time; newmine.cnt = self.cnt; newmine.flags = self.flags; @@ -98,7 +100,7 @@ void W_Mine_RemoteExplode () if(self.owner.deadflag == DEAD_NO) if((self.spawnshieldtime >= 0) ? (time >= self.spawnshieldtime) // timer - : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_minelayer_radius")) // safety device + : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_minelayer_remote_radius")) // safety device ) { W_Mine_DoRemoteExplode(); @@ -170,9 +172,6 @@ void W_Mine_Think (void) if (self.owner.deadflag == DEAD_NO) if (self.minelayer_detonate) W_Mine_RemoteExplode(); - - if(self.csqcprojectile_clientanimate == 0) - UpdateCSQCProjectile(self); } void W_Mine_Touch (void) @@ -196,8 +195,8 @@ void W_Mine_Damage (entity inflictor, entity attacker, float damage, float death void W_Mine_Attack (void) { - local entity mine; - local entity flash; + entity mine; + entity flash; // scan how many mines we placed, and return if we reached our limit if(cvar("g_balance_minelayer_limit")) @@ -218,7 +217,7 @@ void W_Mine_Attack (void) if not(self.items & IT_UNLIMITED_WEAPON_AMMO) self.ammo_rockets = self.ammo_rockets - cvar("g_balance_minelayer_ammo"); - W_SetupShot_ProjectileSize (self, '-4 -4 -4', '4 4 4', FALSE, 5, "weapons/mine_fire.wav", cvar("g_balance_minelayer_damage")); + W_SetupShot_ProjectileSize (self, '-4 -4 -4', '4 4 4', FALSE, 5, "weapons/mine_fire.wav", CHAN_WEAPON, cvar("g_balance_minelayer_damage")); pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); mine = WarpZone_RefSys_SpawnSameRefSys(self); @@ -251,7 +250,7 @@ void W_Mine_Attack (void) mine.cnt = time + cvar("g_balance_minelayer_lifetime"); mine.flags = FL_PROJECTILE; - CSQCProjectile(mine, FALSE, PROJECTILE_MINE, TRUE); + CSQCProjectile(mine, TRUE, PROJECTILE_MINE, TRUE); // muzzle flash for 1st person view flash = spawn (); @@ -261,6 +260,8 @@ void W_Mine_Attack (void) W_AttachToShotorg(flash, '5 0 0'); // common properties + + other = mine; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_minelayer (void); // defined in t_items.qc @@ -276,9 +277,9 @@ float w_minelayer(float req) if(skill >= 2) // skill 0 and 1 bots won't detonate mines! { // decide whether to detonate mines - local entity mine, targetlist, targ; - local float edgedamage, coredamage, edgeradius, recipricoledgeradius, d; - local float selfdamage, teamdamage, enemydamage; + entity targetlist, targ; + float edgedamage, coredamage, edgeradius, recipricoledgeradius, d; + float selfdamage, teamdamage, enemydamage; edgedamage = cvar("g_balance_minelayer_edgedamage"); coredamage = cvar("g_balance_minelayer_damage"); edgeradius = cvar("g_balance_minelayer_radius"); @@ -311,11 +312,11 @@ float w_minelayer(float req) } mine = find(mine, classname, "mine"); } - local float desirabledamage; + float desirabledamage; desirabledamage = enemydamage; - if (teamplay != 1 && time > self.invincible_finished && time > self.spawnshieldtime) + if (time > self.invincible_finished && time > self.spawnshieldtime) desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent"); - if (self.team && teamplay != 1) + if (teams_matter && self.team) desirabledamage = desirabledamage - teamdamage; mine = find(world, classname, "mine"); @@ -340,7 +341,7 @@ float w_minelayer(float req) targ = targ.chain; } }else{ - local float distance; distance= bound(300,vlen(self.origin-self.enemy.origin),30000); + float distance; distance= bound(300,vlen(self.origin-self.enemy.origin),30000); //As the distance gets larger, a correct detonation gets near imposible //Bots are assumed to use the mine spawnfunc_light to see if the mine gets near a player if(v_forward * normalize(mine.origin - self.enemy.origin)< 0.1)