Registrierung - oder - Hineingehen
Gutter RunnersGutter Runners

Многопользовательский мод, где предстоит играть одну и команд: большие крысы и люди....

16/01/2007

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


  • Beschreibung
  • Einstellung

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

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


Der Durchsichten : 700 ( +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. Добавление ножа из Op4 - Добавление ножа из Op4
2. Каждой пушке - спрайт - Итак вы создали новое оружие. А в меню выбора вместо рисунка непонятные спрайты, да и прицела нет.
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
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.
    Chunli Wonder Woman Cosplay
    Street Fighter VChunli Wonder Woman Cosplay
    Juri Beach Costume
    Street Fighter X TekkenJuri Beach Costume
    Poke646 Remod
    Half-LifePoke646 Remod
    TexMod Beta Version (v.0.9.b)
    Mass Effect 3TexMod Beta Version (v.0.9.b)