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

Война гангстеров...

26/06/2009

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


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

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

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


Просмотров : 782 ( +2 )
Прислал / (а) : Streit
Дата создания : 07.04.2011 18: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. weapon_flamethrower - Играя в Халф-Лайф, вы не задумывались над тем, что в нем чего-то не хватает? Чего-то очень близкого, родного, горячего...
2. Исходный код снайперки - weapon_sniperrifle с оптическим прицелом
3. Новый монстр - В общем-то это самый лёгкий тутор который можно придумать.
4. учёные не отставали - Как сделать так, чтобы учёные не отставали на каждом препятствии
5. Летающие бочки и trigger_push - Все, кто хотя бы один раз прошел Hl1 наверняка знает, что на карте c2a5 (там где плотина) есть такие прикольные бочки, которые подскакивают вверх и там взрываются.
6. Динамическое освещение - этой статье будет описан способ добавления динамических вспышек света, которые можно использовать для еффекта молнии
7. Наследование классов в С++ - В этом туторе я попытаюсь кратко рассказать про наследование классов в С++
8. Создание кооперативного прохождения - Данный тутор покажет как сделать в вашем моде кооператив.
9. Как перекрасить пули в ХЛ - Здесь я вам расскажу, как можно перекрасить пули в Half-Life1 и приведу свой пример
Yo Den 02.02.2015, 12:00:58 пишет :
#1
Какой раз глаза мозолит, "Неработающие", слитно!)
Вы не можете комментировать, т.к. вы не зарегистрированы.
    Half-Life: Gold
    Half-LifeHalf-Life: Gold
    Momiji as Gloria DMC4
    Dead Or Alive 5 Last RoundMomiji as Gloria DMC4
    Rachel as Trish DMC4
    Dead Or Alive 5 Last RoundRachel as Trish DMC4
    Lady DMC4 Mod Pack
    Dead Or Alive 5 Last RoundLady DMC4 Mod Pack

Время --------- ___ALL___ --------- : 1.09314 секунд