Registrierung - oder - Hineingehen
Half-Life FX: Single DemoHalf-Life FX: Single Demo

Демоверсия мода на движке HLFX...

21/02/2007
TimefallTimefall

Небольшой мод с интересными головоломками...

21/02/2004

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


  • Beschreibung
  • Einstellung

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

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


Der Durchsichten : 712 ( +1 )
Hochgeladen von : Streit
Erstellt : 04/07/2011 6:37:19 PM
Wertung :
 ( 0 ) 
Aktie :


Es gibt die folgenden Sprachen : | russisch |

Привет всем, вот походу разработки мода, столкнулся с проблемой , как сделать чтоб двери не открывались когда нет света и рядом с ними был индикатор (красн. зел.) .Кто играл в АШ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.
Модельку - свою :)


Die Ähnlichen1. Создание нового ствола - Создание нового ствола с новыми патронами
2. Спрыгивающий Headcrab - Наверняка каждый, кто поиграл в Half-Life2 хотел, чтобы хедкрабы спрыгивали с зомбяков и в первом Half-Life
3. Динамическое освещение - этой статье будет описан способ добавления динамических вспышек света, которые можно использовать для еффекта молнии
4. Тряска игрока от наносимого урона - Вы хотите cделать чтобы игроков трясло от урона?
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
BB код ссылка:
BB код ссылка с картинкой :
BB код картинки :
HTML код ссылка:
HTML код ссылка с картинкой :
HTML код картинки :
Yo Den 02/02/2015, 12:00:58 PM schreibt :
#1
Какой раз глаза мозолит, "Неработающие", слитно!)
Sie können nicht kommentieren, da Sie sind nicht registriert.
    Z7 1911 (4 skins)
    The SpecialistsZ7 1911 (4 skins)
    Gold Colts M1911A1 SD
    The SpecialistsGold Colts M1911A1 SD
    SVI Infinity Match Black
    The SpecialistsSVI Infinity Match Black
    Colt Anaconda Akimbo (4 skins)
    The SpecialistsColt Anaconda Akimbo (4 skins)