diff --git a/dlls/triggers.cpp b/dlls/triggers.cpp index 96a4744e..5bd8b956 100644 --- a/dlls/triggers.cpp +++ b/dlls/triggers.cpp @@ -1313,6 +1313,7 @@ public: void EXPORT TriggerChangeLevel( void ); void EXPORT ExecuteChangeLevel( void ); void EXPORT TouchChangeLevel( CBaseEntity *pOther ); + void EXPORT UpdateColor(); void ChangeLevelNow( CBaseEntity *pActivator ); static edict_t *FindLandmark( const char *pLandmarkName ); @@ -1406,32 +1407,45 @@ void CChangeLevel::Spawn( void ) SetTouch( &CChangeLevel::TouchChangeLevel ); if( mp_coop_changelevel.value ) { - Vector origin = VecBModelOrigin(pev); - Vector point, angles; - CBaseEntity *pPlayer; if( gpGlobals->startspot && STRING(gpGlobals->startspot) && !strcmp(STRING(gpGlobals->startspot), m_szLandmarkName) ) m_fIsBack = true; - if( !m_fIsBack && CoopGetSpawnPoint( &point, &angles ) ) - if( (origin - point).Length() < 500 ) - m_fIsBack = true; - if( !m_fIsBack && (pPlayer = UTIL_FindEntityByClassname( NULL, "info_player_start" )) ) - if( (origin - pPlayer->pev->origin).Length() < 1000 ) - m_fIsBack = true; - // set color (got from XDM) - pev->effects &= ~EF_NODRAW; - pev->rendermode = kRenderTransColor; - if( m_fIsBack) + if( m_fIsBack ) pev->rendercolor.z = 255; else pev->rendercolor.y = 255; pev->renderamt = 127; - pev->renderfx = kRenderFxPulseFast; + + pev->effects &= ~EF_NODRAW; + pev->rendermode = kRenderTransColor; + SetThink( &CChangeLevel::UpdateColor ); + pev->nextthink = gpGlobals->time + 2; } } //ALERT( at_console, "TRANSITION: %s (%s)\n", m_szMapName, m_szLandmarkName ); } +void CChangeLevel::UpdateColor( void ) +{ + Vector origin = VecBModelOrigin(pev); + Vector point, angles; + CBaseEntity *pPlayer; + pev->nextthink = gpGlobals->time + 30; + + if( !m_fIsBack && (pPlayer = UTIL_FindEntityByClassname( NULL, "info_player_start" )) ) + if( (origin - pPlayer->pev->origin).Length() < 500 ) + m_fIsBack = true; + if( !m_fIsBack && CoopGetSpawnPoint( &point, &angles ) ) + if( (origin - point).Length() < 500 ) + m_fIsBack = true; + pev->rendercolor.x = 0; + if( m_fIsBack ) + pev->rendercolor.z = 255; + else + pev->rendercolor.y = 255; + +} + void CChangeLevel::ExecuteChangeLevel( void ) { MESSAGE_BEGIN( MSG_ALL, SVC_CDTRACK ); @@ -1508,7 +1522,7 @@ static void validateoffset( void ) if(landmark) g_SavedCoords.offset = landmark->v.origin - g_SavedCoords.offset; else - g_SavedCoords.offset = g_vecZero; + g_SavedCoords.offset = g_vecZero - g_SavedCoords.offset; g_SavedCoords.validoffset = true; } } @@ -1637,7 +1651,10 @@ void CChangeLevel::ChangeLevelNow( CBaseEntity *pActivator ) } // forget touch by some fool if( gpGlobals->time - pev->dmgtime > 30) + { m_uTouchCount = 0; + pev->nextthink = gpGlobals->time + 30; + } if(mp_coop_changelevel.value) {