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



Hi, ich bin grad dabei eine Funktion zu coden, die die Entities einer Map resetted. Jetzt brauche ich aber die Funktion, die die Entities in die Map setzt(hab CBaseEntity::Spawn() genommen). Deshalb hab ichs so gemacht:
Quellcode:
void CHalfLifeSI::RespawnEntities( char *EntityClassname )
{
ALERT( at_console, "Respawning Entities\n" );

edict_t *pentEntity = NULL;

pentEntity = FIND_ENTITY_BY_CLASSNAME(NULL, EntityClassname);
while (!FNullEnt(pentEntity))
{
CBaseEntity *pEntity = CBaseEntity::Instance(pentEntity);

pEntity->Spawn();
ALERT( at_console, "Respawning Entity\n");

pentEntity = FIND_ENTITY_BY_CLASSNAME(pentEntity, EntityClassname);
}
}

Wenn jetz die Runde um ist ... passiert nichts. Was mach ich falsch?

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 25.12.2001 um 22:11 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
25.12.2001, 23:02
thinktank



Hmm scheint eine Endlos-Schleife zu geben :
pentEntity wird ja nie NULL ...

mach :

edict_t *pStart = pentEntity = FIND_ENTITY_BY_CLASSNAME(NULL, EntityClassname);

do
{
CBaseEntity *pEntity = CBaseEntity::Instance(pentEntity);
pEntity->Spawn();
ALERT( at_console, "Respawning Entity\n");
pentEntity = FIND_ENTITY_BY_CLASSNAME(pentEntity, EntityClassname);
} while (pentEntity != pStart );

Vielleicht klappts ja so :)

--

zum Seitenanfang zum Seitenende Profil || Suche
002
26.12.2001, 02:17
Rockefeller



Gibt aber auch oft Probleme, weil die Spawn-Funktion eigentlich nur dafür konzipiert ist, die Entity einmal in die Welt zu spawnen, und nicht zu resetten.

Benutz am besten Respawn(). Die nimmst du in alle Entities auf, die du resetten willst, und schreibst dir da den entity-spezifischen Code rein. (nicht jede Entity muss resettet werden)

Denn den meisten Entities musst du es extra beibringen, wie sie sich zu verhalten haben im Falle eines Respawn (nur mal trains etc gedacht...).

und dann gehst du alle Entities durch (wie oben) nur dann halt mit
pEntity->Respawn();

Wenn du dann eine Entity erwischt, die nicht respawned werden brauchst, dann hast du für diese ja auch keinen zusätzlichen Code geschrieben, d.h. die Respawn()-Funktion ist die aus der allerobersten Klasse, also CBaseEntity, und die Respawn()-Funktion von CBaseEntity tut garnix.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
26.12.2001, 10:12
Bluthund



@thinktank: Also in ner Endlosschleife endets nich, obwohls logischerweise eigentlich müsste. Er spawned auch alle Enities. Nur verändern die sich nich. Liegt genau daran, was Rockefeller (Big THX) gesagt hat. Nämlich, dass die Spawn()-Funktion nur für das erste spawnen zuständig ist.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 26.12.2001 um 10:12 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche