Eine Funktion, die sich selbst aufruft, ist eine Rekursion. Dabei muß man beachten, dass die Funktion sich nicht endlos weiter selbst aufruft, sondern dass es eine Abbruchbedingung gibt, die nach ein paar Rekursionsstufen erfüllt wird. Damit kann man z.b. Schleifen nachahmen:
func int Npc_GetTalentSkillSum( var C_Npc npc )
{
// Lokale Variablen behalten in Daedalus ihren Wert
// ( vergleichbar mit 'static' Variablen in C/C++ )
var int tal;
var int sum;
// Start - Summe initialisieren
if ( 0 == tal )
{
sum = 0;
};
// Berechnung - Talentstufe addieren
sum += Npc_GetTalentSkill( npc, tal );
// Schrittweite - Index inkrementieren
tal += 1;
// Rekursion - Abbruchbedingung
if ( tal < NPC_TALENT_MAX )
{
Npc_GetTalentSkillSum( npc );
};
// Ende - Index reinitialisieren
tal = 0;
return sum;
};
/** /
// Beispielaufruf
var int sum;
sum = Npc_GetTalentSkillSum( hero );
var string text;
text = ConcatStrings( "Gelernte Talentstufen: ", IntToString( sum ) );
PrintScreen ( text, -1, -1, FONT_Screen, 5 );
/**/