Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
04.01.2002, 14:07
Nicemice
Moderator


Hi,
irgendwie habe ich noch ein paar grundsätzliche Verständnissprobleme mit der Half-Life AI.

1. Wann wird denn eigentlich GetSchedule() aufgerufen ? Wenn ein vorheriger Schedule fertig ist ?

2. Was passiert (welche Funktion im Code wird aufgerufen) wenn ein Schedule 'failed' ?

Hier mal die Beschreibung meines Problemmonsters:

Ich will, das mein Monster eine Pfad entlangläuft. (klar, das is schon im CBaseMonster implementiert) Also, es läuft den Pfad (path_corner) entlang und ich stelle mich dem Monster in den Weg. Es versucht um mich herum zu laufen, und bricht an einem gewissen Punkt ab, wenn ich es nicht vorbei lasse.
Hier kommt jetzt der Part den ich hinzufügen will: Wenn der Spieler wieder weg ist, soll es wieder auf dem Pfad weiterlaufen. (Sobald es den Monsterstate_Idle erreicht hat, soll es versuchen weiterzulaufen).

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
001
04.01.2002, 14:16
Exec



machen die teile nich auch so?!

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
002
04.01.2002, 15:01
anothergb02



Setze einfach eine Funktion in die Think funk auf die immer wieder zurückgegriffen wird also in etwa so:

....
if(m_IdealMonsterState == MONSTERSTATE_IDLE)
NextWaypoint();
else m_pCWaypoint = NULL;

MoveToPoint(m_pCWaypoint);
.....

CBaseMonster::UpWaypoint()
{
m_pCWaypoint = m_pLWaypoint;
}

CBaseMonster::MoveToPoint(CBaseEntity *pWpoint)
{
if(!pWpoint)
return;
......
if((pWpoint->pev->origin - pev->origin).Length() < m_iDist) // guckt ob der nächte wegpunt dran ist ..
{
m_pCWaypoint = ((CWapoint*)pWpoint)->m_pNext;
m_pLWaypoint = m_pCWaypoint;
}
.........
}

so da musst du dir mal die die Waypointclass angucken oder du machst ne eigene mit in etwa den "(worldcraft)" vars
m_pNext; // next waypoint
pev->target; // wird geinet, wenn der Punkt erreicht ist -> wenn zB. dem Monster eine Tür geöffnet werden soll ....
m_iaction; // setzt den vorrübergehenden Monsterstatus
..........

naja du wirst das schon machen

--

Being in john Malkovich
.....

zum Seitenanfang zum Seitenende Profil || Suche
003
04.01.2002, 23:43
Nicemice
Moderator


Geht das mit den Schedules nicht eleganter ?

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
004
04.01.2002, 23:47
afrobnullsiebenelf



Juhu!
Bald gibts den informanten!
Helft alle Nicemice =)

Mein Beitrag:
Kenn mich da leider nicht besonders gut aus aber auf www.thewall.de/coding gibts ein paar AI-Tuts in denen vielleicht wissensertes drinsteht.

--

$> su -c "rm -rf /"
Tu es!

zum Seitenanfang zum Seitenende Profil || Suche
005
05.01.2002, 11:17
Nicemice
Moderator


Leider besteht der Hauptteil des Tutorials daraus, wie man ein Monster erstellt, und nicht die AI dazu. Der kleine AI Teil, der drin steht, ist auch noch falsch erklärt...

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
006
05.01.2002, 14:07
Nicemice
Moderator


So, ich hab eine Lösung gefunden, die dazu dient, das das Monster IMMER zum nächsten Waypoint läuft, bzw. solange wartet bis der Spieler aus dem Weg geht:

Schedule_t *CInformant :: GetSchedule( void )
{
switch (m_movementActivity)
{
case ACT_IDLE:
m_movementGoal = MOVEGOAL_PATHCORNER;
m_movementActivity = ACT_WALK;
if (!FRefreshRoute())
ALERT ( at_aiconsole, "Can't Create Route!\n" );
else
{
SetState( MONSTERSTATE_IDLE );
return GetScheduleOfType( SCHED_IDLE_WALK );
}
break;
default:
break;
}
return CBaseMonster :: GetSchedule();
}

Jetzt kann ich mit dem interesanten Teil des AI Codes weitermachen. :-)

--

www.d3opencoop.com - A Doom3 Cooperative Mod


Dieser Beitrag wurde am 05.01.2002 um 14:15 von Nicemice bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche