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 ); /**/