Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
06.11.2000, 17:09
Duffy



Hi alle zusammen

ich hab da mal ne frage

Ich bin dabei ein entity zu coden das unsterblich macht.

(Bin zwar noch nicht fertig) Aber ich würde dann doch für immer
unsterblich sein oder nicht? Und das find ich nihct so toll.
Also muss man einen counter proggen der das entity nach einer bestimmten zeit wieder deaktiviert.

aber wie macht man das??

Ich danke allen schon mal im voraus die mir helfen können

--

zum Seitenanfang zum Seitenende Profil || Suche
001
06.11.2000, 17:20
user3427



Du musst bei Aktivierung des Entitys einfach die Zeit der Beendigung in eine Variable schreiben:
flNichtmehrunverwundbar=gpGlobals->time + x;
und dann in der PreThink (player.cpp) abfregen, ob die Zeit abgelaufen ist:

--

zum Seitenanfang zum Seitenende Profil || Suche
002
06.11.2000, 17:22
user3427



Sorry, hab' versehentlichabgeschickt...
z.B.
if (bUnverwundbar && flNichtmehrunverwundbar < gpGlobals->time )
{
bUnverwundbar= false;
//vielleicht benachrichtigst du den Spieler auch irgenwie (Sprite auf dem Hud wäre da wohl cool).
};

--

zum Seitenanfang zum Seitenende Profil || Suche
003
18.11.2000, 18:21
Duffy



Hi

Sorry das ich dich nochmal nerve aber ich krieg das irendwie nicht gebacken.
er will immer eine deklartion des bezichners so und geb ich ihm dann die bezichnung und ich bin trotzdem noch unsterblich oder das entity funzt
nicht.

Ich würde es echt supi finden wenn du mir das vielleicht erklären könntest.

hier ist mein Code veilleicht kannst du ja was mit anfangen

#include "extdll.h"
#include "decals.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "soundent.h"
#include "items.h"
#include "gamerules.h"
#include "shake.h"

class CPent : public CBaseEntity
{
public:
void KeyValue(KeyValueData *pkvd); //funktion zum abruf
void Spawn();
void Precache();
void EXPORT MFETouch( CBaseEntity *pOther );
int mfe_model;
int mfe_animation;
int mfe_bildrate;
int mfe_sound;
int mfe_bewegungstyp;
int mfe_solidtyp;

};

LINK_ENTITY_TO_CLASS( item_artifac_invulnerability, CPent );

void CPent::KeyValue(KeyValueData *pkvd)
{

if (FStrEq(pkvd->szKeyName, "model"))
{
mfe_sound = ALLOC_STRING( pkvd->szValue ); //soundname holen
pkvd->fHandled = TRUE;
}

else if (FStrEq(pkvd->szKeyName, "animation"))
{
mfe_animation = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}

else if (FStrEq(pkvd->szKeyName, "bildrate"))
{
mfe_bildrate = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}

else if (FStrEq(pkvd->szKeyName, "sound" ))
{
mfe_sound = ALLOC_STRING( pkvd->szValue );
pkvd->fHandled = TRUE;
}

else if (FStrEq(pkvd->szKeyName, "bewegungstyp"))
{
mfe_bewegungstyp = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}



else if (FStrEq(pkvd->szKeyName, "styp"))
{
mfe_solidtyp = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else
CBaseEntity::KeyValue( pkvd );//Ende der abfrage
}

void CPent :: Spawn()
{
Precache();
SET_MODEL( ENT(pev),STRING(pev->model)); //Model setzen
UTIL_SetOrigin( pev, pev->origin );
UTIL_SetSize( pev, Vector(-16,-16,0), Vector (16,16,64) );
pev->movetype = mfe_bewegungstyp;
pev->solid = mfe_solidtyp;//solidtyp einstellen
pev->sequence = mfe_animation;
pev->framerate = mfe_bildrate;
SetTouch( MFETouch );
}

void CPent :: Precache()
{

PRECACHE_MODEL((char*)STRING(pev->model) );//Model setzen
PRECACHE_SOUND((char*)STRING(mfe_sound) );// Sound holen

}


void CPent :: MFETouch( CBaseEntity* Player)
{

EMIT_SOUND_DYN( ENT(Player->pev),CHAN_ITEM,STRING(mfe_sound),1,ATTN_NORM,0,100 );
( Player ->pev->flags |= FL_GODMODE);
flnichtunverwundbar = gpGlobals->time + 5;



}

Ich danke dir sehr und allen anderen die mir helfen können

Viele Grüße Duffy

--

zum Seitenanfang zum Seitenende Profil || Suche
004
18.11.2000, 22:08
user3427



Du must in einer Funktion, die regelmäßg abgefragt wird, prüfen, ob die Zeit abgelaufen ist.
Schreib' zum Beispiel in die PreThink - Funktion der Player - Klasse:
If (bUnverwundbar && (flNIchtmehrunverwundbar < gpGloabals->time ))
{
bUnverwundbar=false;
};

Irgendwie hat der in meinem letzten Post die Zeichen falsch dargestellt.
In der TakeDamge - Funktion der Spielerklasse fragst du dann ab, ob der Spieler unverwundbar ist und setzt flDamage auf 0 , wenn dem so ist.

--

zum Seitenanfang zum Seitenende Profil || Suche