From: Rudolf Polzer Date: Sat, 23 Oct 2010 07:43:43 +0000 (+0200) Subject: mutator system: add an EditProjectile hook X-Git-Tag: xonotic-v0.1.0preview~251 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=5903038441cb706ec52bc89e136c5d7b5c83cc16;p=xonotic%2Fxonotic-data.pk3dir.git mutator system: add an EditProjectile hook --- diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 73c16a9cd..cdc28f76b 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -112,3 +112,9 @@ MUTATOR_HOOKABLE(GetCvars); // INPUT: float get_cvars_f; string get_cvars_s; + +MUTATOR_HOOKABLE(EditProjectile); + // can edit any "just fired" projectile + // INPUT: + entity self; + entity other; diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index 99df7041b..0b405ba77 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -371,6 +371,8 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f proj.oldvelocity = proj.velocity; + other = proj; MUTATOR_CALLHOOK(EditProjectile); + if(cvar("g_antilag_bullets")) if(pSpeed >= cvar("g_antilag_bullets")) { diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 5d1721f78..44e3967b5 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -206,6 +206,8 @@ void W_Crylink_Attack (void) CSQCProjectile(proj, TRUE, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), TRUE); + other = proj; MUTATOR_CALLHOOK(EditProjectile); + counter = counter + 1; } } @@ -279,6 +281,8 @@ void W_Crylink_Attack2 (void) CSQCProjectile(proj, TRUE, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), TRUE); + other = proj; MUTATOR_CALLHOOK(EditProjectile); + counter = counter + 1; } } diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index 2268ca7cb..6634837db 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -136,6 +136,8 @@ void W_Electro_Attack() //sounds bad CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE); + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } void W_Electro_Attack2() @@ -182,6 +184,8 @@ void W_Electro_Attack2() #endif CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } .vector hook_start, hook_end; diff --git a/qcsrc/server/w_fireball.qc b/qcsrc/server/w_fireball.qc index 6b98d37cd..e78bb2bbc 100644 --- a/qcsrc/server/w_fireball.qc +++ b/qcsrc/server/w_fireball.qc @@ -155,6 +155,8 @@ void W_Fireball_Attack1() proj.flags = FL_PROJECTILE; CSQCProjectile(proj, TRUE, PROJECTILE_FIREBALL, TRUE); + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } void W_Fireball_AttackEffect(float i, vector f_diff) @@ -289,6 +291,8 @@ void W_Fireball_Attack2() proj.flags = FL_PROJECTILE; CSQCProjectile(proj, TRUE, PROJECTILE_FIREMINE, TRUE); + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_fireball (void) diff --git a/qcsrc/server/w_grenadelauncher.qc b/qcsrc/server/w_grenadelauncher.qc index 0bc08b8de..e92b2b260 100644 --- a/qcsrc/server/w_grenadelauncher.qc +++ b/qcsrc/server/w_grenadelauncher.qc @@ -200,6 +200,8 @@ void W_Grenade_Attack (void) CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE); else CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING, TRUE); + + other = gren; MUTATOR_CALLHOOK(EditProjectile); } void W_Grenade_Attack2 (void) @@ -244,6 +246,8 @@ void W_Grenade_Attack2 (void) CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE); else CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING, TRUE); + + other = gren; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_grenadelauncher (void) diff --git a/qcsrc/server/w_hagar.qc b/qcsrc/server/w_hagar.qc index 1d9e9e698..587c9fccc 100644 --- a/qcsrc/server/w_hagar.qc +++ b/qcsrc/server/w_hagar.qc @@ -71,6 +71,8 @@ void W_Hagar_Attack (void) missile.flags = FL_PROJECTILE; CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void W_Hagar_Attack2 (void) @@ -106,6 +108,8 @@ void W_Hagar_Attack2 (void) missile.flags = FL_PROJECTILE; CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR_BOUNCING, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_hagar (void) diff --git a/qcsrc/server/w_hlac.qc b/qcsrc/server/w_hlac.qc index 9abb8a7a0..6aaf17414 100644 --- a/qcsrc/server/w_hlac.qc +++ b/qcsrc/server/w_hlac.qc @@ -74,6 +74,8 @@ void W_HLAC_Attack (void) missile.projectiledeathtype = WEP_HLAC; CSQCProjectile(missile, TRUE, PROJECTILE_HLAC, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void W_HLAC_Attack2f (void) @@ -116,6 +118,8 @@ void W_HLAC_Attack2f (void) missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY; CSQCProjectile(missile, TRUE, PROJECTILE_HLAC, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void W_HLAC_Attack2 (void) diff --git a/qcsrc/server/w_hook.qc b/qcsrc/server/w_hook.qc index 70fe77814..334e434c8 100644 --- a/qcsrc/server/w_hook.qc +++ b/qcsrc/server/w_hook.qc @@ -93,6 +93,8 @@ void W_Hook_Attack2() gren.flags = FL_PROJECTILE; CSQCProjectile(gren, TRUE, PROJECTILE_HOOKBOMB, TRUE); + + other = gren; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_hook (void) diff --git a/qcsrc/server/w_laser.qc b/qcsrc/server/w_laser.qc index 18715a9b4..db11eb395 100644 --- a/qcsrc/server/w_laser.qc +++ b/qcsrc/server/w_laser.qc @@ -77,6 +77,9 @@ void W_Laser_Attack (float issecondary) missile.think = W_Laser_Think; missile.nextthink = time + cvar("g_balance_laser_primary_delay"); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); + if(time >= missile.nextthink) { entity oldself; diff --git a/qcsrc/server/w_minelayer.qc b/qcsrc/server/w_minelayer.qc index 8c81d89f7..dc4f48152 100644 --- a/qcsrc/server/w_minelayer.qc +++ b/qcsrc/server/w_minelayer.qc @@ -262,6 +262,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 diff --git a/qcsrc/server/w_porto.qc b/qcsrc/server/w_porto.qc index 010a0f8b3..65442b21b 100644 --- a/qcsrc/server/w_porto.qc +++ b/qcsrc/server/w_porto.qc @@ -200,6 +200,8 @@ void W_Porto_Attack (void) gren.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP; CSQCProjectile(gren, TRUE, PROJECTILE_PORTO_RED, TRUE); + + other = gren; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_porto (void) diff --git a/qcsrc/server/w_rocketlauncher.qc b/qcsrc/server/w_rocketlauncher.qc index 12f7647e5..c109fc796 100644 --- a/qcsrc/server/w_rocketlauncher.qc +++ b/qcsrc/server/w_rocketlauncher.qc @@ -367,6 +367,7 @@ void W_Rocket_Attack (void) W_AttachToShotorg(flash, '5 0 0'); // common properties + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_rocketlauncher (void); // defined in t_items.qc diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index c91e4f408..08b1a6782 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -212,6 +212,8 @@ void Seeker_Fire_Missile(vector f_diff) missile.angles = vectoangles (missile.velocity); CSQCProjectile(missile, FALSE, PROJECTILE_SEEKER, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void Seeker_Vollycontroler_Think() @@ -351,6 +353,8 @@ void Seeker_Fire_Tag() missile.angles = vectoangles (missile.velocity); CSQCProjectile(missile, TRUE, PROJECTILE_TAG, FALSE); // has sound + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } @@ -424,6 +428,8 @@ void Seeker_Fire_Flac() missile.flags = FL_PROJECTILE; CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE); + + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_seeker (void)