]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/t_plats.qc
Also send ent_DamageInfo for hitscan weapons when they hit a player, not only when...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / t_plats.qc
index 6b85d209c2edab8efea30a28d17b60bc809a9b41..a556d6d0bb192dd72d9417d2535a7eafa3e82aac 100644 (file)
@@ -175,11 +175,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,10 +226,14 @@ 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;
+       self.pos2_z = self.origin_z - self.height;
 
        plat_spawn_inside_trigger ();   // the "start moving" trigger
 
@@ -2068,23 +2067,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 +2130,7 @@ void conveyor_init()
 
 void spawnfunc_trigger_conveyor()
 {
+       SetMovedir();
        EXACTTRIGGER_INIT;
        conveyor_init();
 }