X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_minelayer.qc;h=aeefbcd0b7dac1a6162726367a65fe2a52b4bf48;hp=4c8b20e972f5a762f8bf11330433fa7bd4414948;hb=98b778e3efdd3f118d3e9bc463d4250e31f083d2;hpb=605915f0c2e5909d71e4d9ec211f4ad9361b9ce6 diff --git a/qcsrc/server/w_minelayer.qc b/qcsrc/server/w_minelayer.qc index 4c8b20e972..aeefbcd0b7 100644 --- a/qcsrc/server/w_minelayer.qc +++ b/qcsrc/server/w_minelayer.qc @@ -2,8 +2,9 @@ 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 -.float minelayer_detonate; -.float mine_number, mine_time; +void W_Mine_Think (void); +.float minelayer_detonate, minelayer_mines; +.float mine_time; void spawnfunc_weapon_minelayer (void) { @@ -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; @@ -37,11 +38,10 @@ void W_Mine_Stick () newmine.movetype = MOVETYPE_NONE; // lock the mine in place newmine.projectiledeathtype = self.projectiledeathtype; - newmine.mine_number = self.mine_number; 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; @@ -99,7 +99,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(); @@ -171,9 +171,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) @@ -197,17 +194,17 @@ 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")) { - self.mine_number = 0; + self.minelayer_mines = 0; for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self) - self.mine_number += 1; + self.minelayer_mines += 1; - if(self.mine_number >= cvar("g_balance_minelayer_limit")) + if(self.minelayer_mines >= cvar("g_balance_minelayer_limit")) { // the refire delay keeps this message from being spammed sprint(self, strcat("You cannot place more than ^2", cvar_string("g_balance_minelayer_limit"), " ^7mines at a time\n") ); @@ -252,7 +249,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 (); @@ -262,6 +259,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 @@ -277,9 +276,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"); @@ -312,7 +311,7 @@ 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) desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent"); @@ -341,7 +340,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)