diff --git a/src/gs-entbase/server/func_door.qc b/src/gs-entbase/server/func_door.qc index 84353a2d..11b9c0ea 100644 --- a/src/gs-entbase/server/func_door.qc +++ b/src/gs-entbase/server/func_door.qc @@ -88,6 +88,7 @@ class func_door:NSRenderableEntity int m_iLocked; int m_iPortalState; int m_iForceClosed; + bool m_iCanTouch; float m_flSoundWait; string m_strLockedSfx; @@ -214,10 +215,6 @@ func_door::MoveBack(void) if (m_strSndMove) Sound_Play(this, CHAN_WEAPON, m_strSndMove); - if (!HasSpawnFlags(SF_MOV_USE)) { - touch = __NULL__; - } - m_iValue = 0; m_iState = DOORSTATE_DOWN; MoveToDestination(m_vecPos1, Returned); @@ -286,6 +283,9 @@ func_door::Trigger(entity act, int state) void func_door::Touch(entity eToucher) { + if (m_iCanTouch == false) + return; + if (HasSpawnFlags(SF_MOV_USE)) return; @@ -426,6 +426,11 @@ func_door::Respawn(void) m_vecPos1 = GetSpawnOrigin(); m_vecPos2 = (m_vecPos1 + m_vecMoveDir * (fabs(m_vecMoveDir * size) - m_flLip)); + if (spawnflags & SF_MOV_TOGGLE || spawnflags & SF_MOV_USE) + m_iCanTouch = false; + else + m_iCanTouch = true; + if (HasSpawnFlags(SF_MOV_OPEN)) { SetOrigin(m_vecPos2); m_vecPos2 = m_vecPos1; diff --git a/src/gs-entbase/server/func_door_rotating.qc b/src/gs-entbase/server/func_door_rotating.qc index 1b5f17cd..9ac809ea 100644 --- a/src/gs-entbase/server/func_door_rotating.qc +++ b/src/gs-entbase/server/func_door_rotating.qc @@ -237,20 +237,18 @@ func_door_rotating::Away(void) if (!HasSpawnFlags(SF_ROT_ONEWAY)) { /* One way doors only work on the Y axis */ if (!HasSpawnFlags(SF_ROT_ZAXIS) || HasSpawnFlags(SF_ROT_XAXIS)) { - vector vDifference = (eActivator.origin - eActivator.view_ofs) - origin; - vector vAngles = eActivator.angles; - vAngles[0] = vAngles[2] = 0; + /* get the door facing dir */ + vector door_dir = vectoangles(WorldSpaceCenter() - origin); + makevectors(door_dir); + float flDir = dotproduct(origin - eActivator.origin, v_right); - makevectors(vAngles); - vAngles = (eActivator.origin + (v_forward * 10)) - origin; - - if (((vDifference[0] * vAngles[1]) - (vDifference[1] * vAngles[0])) < 0) { + if (flDir > 0) { fDirection = -1.0f; } } } - RotToDest(m_vecPos2 * fDirection, Arrived); + RotToDest(m_vecPos2 * fDirection, Arrived); PortalOpen(); }