From cd1de3ba157aa2c2e2c80e1d8eaba7feff9b065d Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 24 Oct 2008 09:06:45 +0000 Subject: [PATCH] more fixes - now we can have a companion cube :P git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4860 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/g_hook.qc | 2 +- data/qcsrc/server/miscfunctions.qc | 6 ++++++ data/qcsrc/server/portals.qc | 6 ++++++ data/qcsrc/server/sv_main.qc | 2 +- data/qcsrc/server/target_spawn.qc | 13 ++++++++++++- data/qcsrc/server/w_porto.qc | 2 +- data/scripts/entities.def | 1 + 7 files changed, 28 insertions(+), 4 deletions(-) diff --git a/data/qcsrc/server/g_hook.qc b/data/qcsrc/server/g_hook.qc index 27b25371e..ab2241644 100644 --- a/data/qcsrc/server/g_hook.qc +++ b/data/qcsrc/server/g_hook.qc @@ -222,7 +222,7 @@ void GrapplingHookThink() dv = ((self.owner.velocity - v0) * dir) * dir; if(cvar("g_grappling_hook_tarzan") >= 2) { - if(self.aiment.movetype == MOVETYPE_WALK || self.aiment.movetype == MOVETYPE_TOSS) + if(self.aiment.movetype == MOVETYPE_WALK) { self.owner.velocity = self.owner.velocity - dv * 0.5; self.aiment.velocity = self.aiment.velocity - dv * 0.5; diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 2cef26d3a..cb9214863 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -1292,6 +1292,12 @@ void objerror(string s) objerror_builtin(s); } +void remove_unsafely(entity e) +{ + e.classname = ""; + remove_builtin(e); +} + void remove_safely(entity e) { make_safe_for_remove(e); diff --git a/data/qcsrc/server/portals.qc b/data/qcsrc/server/portals.qc index 1a9cb57d5..e7f0e0a70 100644 --- a/data/qcsrc/server/portals.qc +++ b/data/qcsrc/server/portals.qc @@ -239,6 +239,9 @@ void Portal_Touch() return; // only handle TouchAreaGrid ones (only these can teleport) // for some unknown reason, this also gets collisions from SV_Impact sometimes + if(other.classname == "grapplinghook") + return; + if(other.classname == "porto") { if(other.portal_id == self.portal_id) @@ -261,12 +264,15 @@ void Portal_Touch() fixedmakevectors(self.angles); if((other.origin - self.origin) * v_forward < 0) return; + + /* if(other.mins_x < PL_MIN_x || other.mins_y < PL_MIN_y || other.mins_z < PL_MIN_z || other.maxs_x > PL_MAX_x || other.maxs_y > PL_MAX_y || other.maxs_z > PL_MAX_z) { // can't teleport this return; } + */ if(Portal_TeleportPlayer(self, other)) if(other.classname == "porto") diff --git a/data/qcsrc/server/sv_main.qc b/data/qcsrc/server/sv_main.qc index d0272fc13..3334de683 100644 --- a/data/qcsrc/server/sv_main.qc +++ b/data/qcsrc/server/sv_main.qc @@ -133,7 +133,7 @@ float RedirectionThink(); entity SelectSpawnPoint (float anypoint); void StartFrame (void) { - remove = remove_builtin; // not during spawning! + remove = remove_unsafely; // not during spawning! dprint_load(); // load dprint status from cvar diff --git a/data/qcsrc/server/target_spawn.qc b/data/qcsrc/server/target_spawn.qc index cb8f9c8c9..efb6494bd 100644 --- a/data/qcsrc/server/target_spawn.qc +++ b/data/qcsrc/server/target_spawn.qc @@ -12,6 +12,16 @@ float target_spawn_spawnfunc_field; .float target_spawn_id; float target_spawn_count; +void target_spawn_helper_setmodel() +{ + setmodel(self, self.model); +} + +void target_spawn_helper_setsize() +{ + setsize(self, self.mins, self.maxs); +} + void target_spawn_useon(entity e) { float i, n, valuefieldpos; @@ -172,6 +182,8 @@ void target_spawn_useon(entity e) } if(key == "$") { + if(substring(value, 0, 1) == "_") + value = strcat("target_spawn_helper", value); putentityfieldstring(target_spawn_spawnfunc_field, e, value); oldself = self; @@ -320,4 +332,3 @@ void spawnfunc_trigger_relay_if() { self.use = trigger_relay_if_use; }; - diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index c17e26cec..dc9fbb210 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -78,7 +78,7 @@ void W_Porto_Touch (void) norm = trace_plane_normal; if(trace_ent.iscreature) { - traceline(trace_ent.origin, trace_ent.origin + '0 0 2' * PL_MIN_z, MOVE_NORMAL, self); + traceline(trace_ent.origin, trace_ent.origin + '0 0 2' * PL_MIN_z, MOVE_WORLDONLY, self); if(trace_fraction >= 1) return; if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP) diff --git a/data/scripts/entities.def b/data/scripts/entities.def index b6b108304..1e5827268 100644 --- a/data/scripts/entities.def +++ b/data/scripts/entities.def @@ -1086,6 +1086,7 @@ Spawns or modifies an entity when triggered. The entity field list is a single string of the form: 'field' 'value' 'field' 'value' ... 'classname' 'item_bullets' ... 'field' 'value' The special "field" name $ calls a void(void) function, for example a spawn function. +Special function names available are _setmodel and _setsize. Field values can use various variable replacements: $E $E.field -- 2.39.2