X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_plats.qc;h=6ca7aee30428ba864403a079e62c7154707e0041;hb=cd69940bb9c1aa5a98bf0653702b77d730419dde;hp=6b85d209c2edab8efea30a28d17b60bc809a9b41;hpb=534459c2ae3b244e8e4f0ac8413cba60c560a76a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_plats.qc b/qcsrc/server/t_plats.qc index 6b85d209c..6ca7aee30 100644 --- a/qcsrc/server/t_plats.qc +++ b/qcsrc/server/t_plats.qc @@ -57,7 +57,17 @@ void plat_spawn_inside_trigger() tmax_y = tmin_y + 1; } - setsize (trigger, tmin, tmax); + if(tmin_x < tmax_x) + if(tmin_y < tmax_y) + if(tmin_z < tmax_z) + { + setsize (trigger, tmin, tmax); + return; + } + + // otherwise, something is fishy... + remove(trigger); + objerror("plat_spawn_inside_trigger: platform has odd size or lip, can't spawn"); } void plat_hit_top() @@ -175,11 +185,6 @@ void plat_reset() void spawnfunc_path_corner() { } void spawnfunc_func_plat() { - if (!self.t_length) - self.t_length = 80; - if (!self.t_width) - self.t_width = 10; - if (self.sounds == 0) self.sounds = 2; @@ -231,15 +236,19 @@ void spawnfunc_func_plat() if (!self.speed) self.speed = 150; + if (!self.lip) + self.lip = 16; + if (!self.height) + self.height = self.size_z - self.lip; self.pos1 = self.origin; self.pos2 = self.origin; - self.pos2_z = self.origin_z - self.size_z + 8; - - plat_spawn_inside_trigger (); // the "start moving" trigger + self.pos2_z = self.origin_z - self.height; self.reset = plat_reset; plat_reset(); + + plat_spawn_inside_trigger (); // the "start moving" trigger } @@ -2068,23 +2077,34 @@ void conveyor_think() { for(e = findradius((self.absmin + self.absmax) * 0.5, vlen(self.absmax - self.absmin) * 0.5); e; e = e.chain) if(!e.conveyor.state) - { - vector emin = e.absmin - '1 1 1'; - vector emax = e.absmax + '1 1 1'; - if(boxesoverlap(emin, emax, self.absmin, self.absmax)) // quick - if(WarpZoneLib_BoxTouchesBrush(emin, emax, self, e)) // accurate - e.conveyor = self; - } + if(isPushable(e)) + { + vector emin = e.absmin; + vector emax = e.absmax; + if(self.solid == SOLID_BSP) + { + emin -= '1 1 1'; + emax += '1 1 1'; + } + if(boxesoverlap(emin, emax, self.absmin, self.absmax)) // quick + if(WarpZoneLib_BoxTouchesBrush(emin, emax, self, e)) // accurate + e.conveyor = self; + } for(e = world; (e = findentity(e, conveyor, self)); ) { if(e.flags & FL_CLIENT) // doing it via velocity has quite some advantages continue; // done in SV_PlayerPhysics + setorigin(e, e.origin + self.movedir * sys_frametime); + move_out_of_solid(e); + UpdateCSQCProjectile(e); + /* // stupid conveyor code tracebox(e.origin, e.mins, e.maxs, e.origin + self.movedir * sys_frametime, MOVE_NORMAL, e); if(trace_fraction > 0) setorigin(e, trace_endpos); + */ } } @@ -2120,6 +2140,7 @@ void conveyor_init() void spawnfunc_trigger_conveyor() { + SetMovedir(); EXACTTRIGGER_INIT; conveyor_init(); }