Регистрация - или - Войти

Восстановить пароль
×

Для восстановления пароля необходимо ввести логин или почту, которую Вы вводили при регистрации. После это, на Ваш почтовый ящик будет отпрвлено письмо с кодом.

Логин или почта :

The Last BulletThe Last Bullet

Про русского агента, в тылу врага...

27/08/2017
Статистика ( общая по модам ), шт.

Как сделать, чтоб двери не открывались, когда нет света и рядом с ними был индикатор (красн. зел.)


  • Описание
  • КАК УСТАНОВИТЬ

Неработающие двери :)

Как сделать, чтоб двери не открывались, когда нет света и рядом с ними был индикатор (красн. зел.)


Просмотров : 1983 ( +1 )
Прислал / (а) : Streit
Дата создания : 07.04.2011 21:37:19
Рейтинг :
 ( 0 ) 
Поделиться :


Имеются следующие переводы : | русский |

Привет всем, вот походу разработки мода, столкнулся с проблемой , как сделать чтоб двери не открывались когда нет света и рядом с ними был индикатор (красн. зел.) .Кто играл в АШ1 знают…

и так приступим: Открываем hl.dsp Идём в buttons.cpp После: #define SF_BUTTON_TOUCH_ONLY 256

ставим: #define SF_DOORS_CAN_OPENED 512

Находим функцию CBaseButton::ButtonUse : в ней пишем :

if ( FBitSet(pev→spawnflags, SF_DOORS_CAN_OPENED) ) { CVAR_SET_FLOAT( "cl_canopen_door", 1 ); }

ок, далее: открываем doors.h После дефанов (#define) , вставляем: Код:

class CBaseDoor : public CBaseToggle { public: void Spawn( void ); void Precache( void ); virtual void KeyValue( KeyValueData *pkvd ); virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); virtual void Blocked( CBaseEntity *pOther );

virtual int     ObjectCaps( void )
{
        if (pev->spawnflags & SF_ITEM_USE_ONLY)
                return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_IMPULSE_USE;
        else
                return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
};
virtual int     Save( CSave &save );
virtual int     Restore( CRestore &restore );
static  TYPEDESCRIPTION m_SaveData[];
bool iCanOpened;
virtual void SetToggleState( int state );
// used to selectivly override defaults
void EXPORT DoorTouch( CBaseEntity *pOther );
// local functions
int DoorActivate( );
void EXPORT DoorGoUp( void );
void EXPORT DoorGoDown( void );
void EXPORT DoorHitTop( void );
void EXPORT DoorHitBottom( void );
BYTE    m_bHealthValue;// some doors are medi-kit doors, they give players health
BYTE    m_bMoveSnd;                     // sound a door makes while moving
BYTE    m_bStopSnd;                     // sound a door makes when it stops
locksound_t m_ls;                       // door lock sounds
        BYTE    m_bLockedSound;         // ordinals from entity selection
        BYTE    m_bLockedSentence;
        BYTE    m_bUnlockedSound;
        BYTE    m_bUnlockedSentence;
};

идем в doors.cpp (не в doors.h !!! ):

удаляем от туда класс двери (похоже на то что мы ставили , точнее оно и есть).

находим функцию: void CBaseDoor::DoorTouch( CBaseEntity *pOther ) , в её тело вставляем: Код:

int i;
i = CVAR_GET_FLOAT("cl_canopen_door");
if (i == 1)
{
        iCanOpened = true;
}
if (iCanOpened == false)
{
}

так.. вроде здесь всё. Идем в game.cpp

добавляем к аналогичным строкам: Код: cvar_t cl_canopen_door = {"cl_canopen_door","0", FCVAR_SERVER | FCVAR_ARCHIVE };

с дверьми всё :) . Индикатор:

создаём файл item_drpanel

Вставляем: Код:

#include "extdll.h" #include "util.h" #include "cbase.h" #include "effects.h" #include "doors.h"

#define SF_START_LIGHT 1

class CDRPanel : public CPointEntity { public: void Spawn( void ); void Create( int color ); void Precache( void ); void EXPORT ThinkDoor( void );

private: CSprite *m_pLight; };

LINK_ENTITY_TO_CLASS( item_drpanel, CDRPanel);

void CDRPanel::Spawn() { Precache();

SetThink(ThinkDoor);
pev->nextthink = gpGlobals->time + 2;
        SET_MODEL(ENT(pev),"models/special/panel.mdl");
//      if (FBitSet(pev->spawnflags,SF_START_LIGHT))
        Create(0);
}

void CDRPanel::Precache() { PRECACHE_MODEL("models/special/panel.mdl"); PRECACHE_MODEL("sprites/special/glow03.spr"); }

void CDRPanel::Create (int color) { if (color == 1) { m_pLight = CSprite::SpriteCreate("sprites/special/glow03.spr", pev→origin + Vector(0,0,5), FALSE ); m_pLight→SetTransparency( kRenderGlow, 0, 255, 0, 100,kRenderFxNone ); m_pLight→SetScale(0.25); } else if (color == 0) { m_pLight = CSprite::SpriteCreate("sprites/special/glow03.spr", pev→origin + Vector(0,0,5), FALSE ); m_pLight→SetTransparency( kRenderGlow, 255, 0, 0, 100,kRenderFxNone ); m_pLight→SetScale(0.25); } }

void CDRPanel::ThinkDoor() { int getfl; getfl = CVAR_GET_FLOAT("cl_canopen_door"); if (getfl == 1) { m_pLight→SetTransparency( kRenderGlow, 0, 255, 0, 255,kRenderFxNone ); } else { m_pLight→SetTransparency( kRenderGlow, 255, 0, 0, 255,kRenderFxNone ); }

        pev->nextthink = gpGlobals->time + 0.5;
}

Далее в fgd: в spawnflags у энтити func_button добавим:

512:"Врубить свет!":0

получиться что-то вроде

spawnflags(flags) [

512:"Врубить свет!":0
]

и добавим в конце fgd:


@PointClass size(-16 -16 -16, 16 16 16) = item_drpanel: "Door panel"
[
]

Вот и всё :) glow03.spr можно взять в папке sprites у valve.
Модельку - свою :)


Похожие1. учёные не отставали - Как сделать так, чтобы учёные не отставали на каждом препятствии
2. Подбираемый фонарик v 2.5 - Подбираемый фонарик v 2.5
3. Trigger_PlayerFreeez - Trigger_PlayerFreeez (остановка игрока)
4. Как сделать вортигонта из HL1 другом - Моя первая статья
5. Изменение цвета HUD'а (полное)! - Изменение цвета HUD'а (полное)! Но прицелы придётся переделывать вам самим! Сдесь я перевевёл туториал с twhl.info на русский язык!
JPEG 02.02.2015, 13:12:58 пишет :
#1
Какой раз глаза мозолит, "Неработающие", слитно!)
Вы не можете комментировать, т.к. вы не зарегистрированы.
    METLKR (версия 1.0.0.11082026)
    Mass Effect 2METLKR (версия 1.0.0.11082026)
    PawnHighLight v. 1.1
    Unreal Tournament 99PawnHighLight v. 1.1
    сейв с обновлением
    Half-Life 2сейв с обновлением
    сейв "турель 19 "отомщение""
    Half-Life 2сейв