FreewarWiki:Bot/Skripts/cf.pl: Unterschied zwischen den Versionen

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
K (handwerkskunst aktualisiert)
(analog, erzwingung von unicode um plattformunabhängig korrekte darstellung zu gewährleisten)
Zeile 26: Zeile 26:
   { "name" => "Gewebeforschung", "gw" => 11600, "mx" => 50 },
   { "name" => "Gewebeforschung", "gw" => 11600, "mx" => 50 },
   { "name" => "Goldabbau", "gw" => 44000, "mx" => 30 },
   { "name" => "Goldabbau", "gw" => 44000, "mx" => 30 },
   { "name" => "Glück", "gw" => 16000, "mx" => 15 },
   { "name" => "Gl\N{U+00FC}ck", "gw" => 16000, "mx" => 15 },
   { "name" => "Gruppenheilung", "gw" => 7200, "mx" => 120 },
   { "name" => "Gruppenheilung", "gw" => 7200, "mx" => 120 },
   { "name" => "Handwerkskunst", "gw" => 200000, "mx" => 15 },
   { "name" => "Handwerkskunst", "gw" => 200000, "mx" => 15 },
Zeile 38: Zeile 38:
   { "name" => "Lebenstraining", "gw" => 34000, "mx" => 50 },
   { "name" => "Lebenstraining", "gw" => 34000, "mx" => 50 },
   { "name" => "Lerntechnik", "gw" => 35000, "mx" => 50 },
   { "name" => "Lerntechnik", "gw" => 35000, "mx" => 50 },
   { "name" => "Magieverlängerung", "gw" => 48000, "mx" => 30 },
   { "name" => "Magieverl\N{U+00E4}ngerung", "gw" => 48000, "mx" => 30 },
   { "name" => "Marktwirtschaft", "gw" => 10000, "mx" => 50 },
   { "name" => "Marktwirtschaft", "gw" => 10000, "mx" => 50 },
   { "name" => "Ölverwaltung", "gw" => 26000, "mx" => 60 },
   { "name" => "\N{U+00D6}lverwaltung", "gw" => 26000, "mx" => 60 },
   { "name" => "Phasenenergieeffizienz", "gw" => 23000, "mx" => 70 },
   { "name" => "Phasenenergieeffizienz", "gw" => 23000, "mx" => 70 },
   { "name" => "Phasenenergiemaximierung", "gw" => 25000, "mx" => 80 },
   { "name" => "Phasenenergiemaximierung", "gw" => 25000, "mx" => 80 },
   { "name" => "Pflanzenkunde", "gw" => 40000, "mx" => 80 },
   { "name" => "Pflanzenkunde", "gw" => 40000, "mx" => 80 },
   { "name" => "Phasenverständnis", "gw" => 10000, "mx" => 70 },
   { "name" => "Phasenverst\N{U+00E4}ndnis", "gw" => 10000, "mx" => 70 },
   { "name" => "Plünderung", "gw" => 37200, "mx" => 30 },
   { "name" => "Pl\N{U+00FC}nderung", "gw" => 37200, "mx" => 30 },
   { "name" => "Rache", "gw" => 10000, "mx" => 80 },
   { "name" => "Rache", "gw" => 10000, "mx" => 80 },
   { "name" => "Reparaturwissen", "gw" => 12000, "mx" => 30 },
   { "name" => "Reparaturwissen", "gw" => 12000, "mx" => 30 },
Zeile 51: Zeile 51:
   { "name" => "Seelenverbindung", "gw" => 60000, "mx" => 60 },
   { "name" => "Seelenverbindung", "gw" => 60000, "mx" => 60 },
   { "name" => "Selbstheilung", "gw" => 32000, "mx" => 60 },
   { "name" => "Selbstheilung", "gw" => 32000, "mx" => 60 },
   { "name" => "Stärketraining", "gw" => 30000, "mx" => 50 },
   { "name" => "St\N{U+00E4}rketraining", "gw" => 30000, "mx" => 50 },
   { "name" => "Überzeugungskraft", "gw" => 34000, "mx" => 50 },
   { "name" => "\N{U+00DC}berzeugungskraft", "gw" => 34000, "mx" => 50 },
   { "name" => "Waffenkunst", "gw" => 26000, "mx" => 30 },
   { "name" => "Waffenkunst", "gw" => 26000, "mx" => 30 },
   { "name" => "Zauberkunst", "gw" => 240000, "mx" => 8 },
   { "name" => "Zauberkunst", "gw" => 240000, "mx" => 8 },
Zeile 68: Zeile 68:
         "4" => "[[Kleine Armbrust des Lebens]]",
         "4" => "[[Kleine Armbrust des Lebens]]",
         "5" => "[[Armbrust der Seelen]]",
         "5" => "[[Armbrust der Seelen]]",
         "6" => "[[Armbrust der Schutzauflösung]]",
         "6" => "[[Armbrust der Schutzaufl\N{U+00F6}sung]]",
         "7" => "[[Armbrust des Donners]]",
         "7" => "[[Armbrust des Donners]]",
         "8" => "[[Armbrust der Präzision]]",
         "8" => "[[Armbrust der Pr\N{U+00E4}zision]]",
         "9" => "[[Bogen des Lebens]]",
         "9" => "[[Bogen des Lebens]]",
         "10" => "[[Durchschlagende Armbrust]]",
         "10" => "[[Durchschlagende Armbrust]]",
         "11" => "[[Armbrust der starken Schutzauflösung]]",
         "11" => "[[Armbrust der starken Schutzaufl\N{U+00F6}sung]]",
         "12" => "[[Bogen des starken Lebens]]",
         "12" => "[[Bogen des starken Lebens]]",
         "13" => "[[Armbrust des großen Donners]]",
         "13" => "[[Armbrust des großen Donners]]",
Zeile 89: Zeile 89:
         "4" => "[[Scheibe der Kampfgebiete]]",
         "4" => "[[Scheibe der Kampfgebiete]]",
         "5" => "[[Effektiver Diebstahlzauber]]",
         "5" => "[[Effektiver Diebstahlzauber]]",
         "6" => "[[Kampfunfähigkeits-Schutz]], [[starker Hautbrand]]",
         "6" => "[[Kampfunf\N{U+00E4}higkeits-Schutz]], [[starker Hautbrand]]",
         "7" => "[[Mächtiger Wegzauber-Schutz]], [[Mächtiger Starreschutz-Zauber]], [[Zauber des langen Lebens]], [[Zauber der unbändigen Wut]]",
         "7" => "[[M\N{U+00E4}chtiger Wegzauber-Schutz]], [[M\N{U+00E4}chtiger Starreschutz-Zauber]], [[Zauber des langen Lebens]], [[Zauber der unb\N{U+00E4}ndigen Wut]]",
         "8" => "[[Mächtige Sicht der Diebesopfer]], [[Sicht der Diebesopfer]], [[Phasenenergie]]",
         "8" => "[[M\N{U+00E4}chtige Sicht der Diebesopfer]], [[Sicht der Diebesopfer]], [[Phasenenergie]]",
     },
     },


Zeile 104: Zeile 104:
         "7" => "[[schwache Lebenserweiterung]] (3.500 XP)",
         "7" => "[[schwache Lebenserweiterung]] (3.500 XP)",
         "8" => "[[Gegenzauber: Starre]] (4.000 XP)",
         "8" => "[[Gegenzauber: Starre]] (4.000 XP)",
         "9" => "[[Gegenzauber: Auflösung des Schutzes]] (4.500 XP)",
         "9" => "[[Gegenzauber: Aufl\N{U+00F6}sung des Schutzes]] (4.500 XP)",
         "10" => "[[falsche Erfahrung]] (5.000 XP)",
         "10" => "[[falsche Erfahrung]] (5.000 XP)",
         "11" => "[[strategischer Hinzauber]] (5.500 XP)",
         "11" => "[[strategischer Hinzauber]] (5.500 XP)",
Zeile 116: Zeile 116:
         "19" => "[[Lebenserweiterung]] (9.500 XP)",
         "19" => "[[Lebenserweiterung]] (9.500 XP)",
         "20" => "[[Zauber der Wettererzeugung]] (10.000 XP)",
         "20" => "[[Zauber der Wettererzeugung]] (10.000 XP)",
         "21" => "[[Zauber der Archäologie]] (10.500 XP)",
         "21" => "[[Zauber der Arch\N{U+00E4}ologie]] (10.500 XP)",
         "22" => "[[Phasentrank]] (11.000 XP)",
         "22" => "[[Phasentrank]] (11.000 XP)",
         "23" => "[[Zauber der Diener]] (11.500 XP)",  
         "23" => "[[Zauber der Diener]] (11.500 XP)",  
         "24" => "[[Zauber der Tänzerinnen]] (12.000 XP)",
         "24" => "[[Zauber der T\N{U+00E4}nzerinnen]] (12.000 XP)",
         "25" => "[[Schutzzauber: Leere]] (12.500 XP)",
         "25" => "[[Schutzzauber: Leere]] (12.500 XP)",
         "26" => "[[hochenergetische Beschwörung]] (13.000 XP)",
         "26" => "[[hochenergetische Beschw\N{U+00F6}rung]] (13.000 XP)",
         "27" => "[[scharfer Phasentrank]] (13.500 XP)",
         "27" => "[[scharfer Phasentrank]] (13.500 XP)",
         "28" => "[[Rückangriff: Schutzvernichtung]] (14.000 XP)",
         "28" => "[[R\N{U+00FC}ckangriff: Schutzvernichtung]] (14.000 XP)",
         "29" => "[[Rückangriff: Blitzschlag]] (14.500 XP)",
         "29" => "[[R\N{U+00FC}ckangriff: Blitzschlag]] (14.500 XP)",
         "30" => "[[Zauber der Wetterkontrolle]] (15.000 XP)",
         "30" => "[[Zauber der Wetterkontrolle]] (15.000 XP)",
     },
     },
Zeile 138: Zeile 138:
         "7" => "[[eiserne Schmerzschwinge]] (5.000 PE / 35.000 XP)",
         "7" => "[[eiserne Schmerzschwinge]] (5.000 PE / 35.000 XP)",
         "8" => "[[Ausgrabungsspaten]] (55.000 PE / 40.000 XP)",
         "8" => "[[Ausgrabungsspaten]] (55.000 PE / 40.000 XP)",
         "9" => "[[Dämonenblutfass]] (3.000 PE / 45.000 XP)",
         "9" => "[[D\N{U+00E4}monenblutfass]] (3.000 PE / 45.000 XP)",
         "10" => "[[rote Portalmaschine]] (30.000 PE / 50.000 XP)",
         "10" => "[[rote Portalmaschine]] (30.000 PE / 50.000 XP)",
         "11" => "[[Portalstab]] (2.000 PE / 55.000 XP)",
         "11" => "[[Portalstab]] (2.000 PE / 55.000 XP)",
Zeile 169: Zeile 169:
<div id="CFlevel">
<div id="CFlevel">
{| {{Prettytable}}
{| {{Prettytable}}
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Lernzeit pro Stufe, abhängig von der Lerntechnik: '''
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Lernzeit pro Stufe, abh\N{U+00E4}ngig von der Lerntechnik: '''
|-
|-
|
|
Zeile 218: Zeile 218:
<div id="CFtotal">
<div id="CFtotal">
{| {{Prettytable}}
{| {{Prettytable}}
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Gesamtlernzeit bis zur jeweiligen Stufe, abhängig von der Lerntechnik: '''
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Gesamtlernzeit bis zur jeweiligen Stufe, abh\N{U+00E4}ngig von der Lerntechnik: '''
|-
|-
|
|

Version vom 20. März 2012, 16:46 Uhr

Dieses Script ist hier lediglich archiviert und nicht direkt lauffähig. Wenn Du es benutzen möchtest, musst Du es lokal abspeichern und mit einem geeigneten Interpreter ausführen lassen. Zum Übernehmen solltest Du nicht den unten angezeigten Text verwenden, sondern den Quelltext des Wiki-Artikels: Dazu wählst Du Bearbeiten und kopierst den (meist zwischen PRE-Tags eingefassten) Scripttext.

Sofern Du die Scripte dauerhaft lokal abgespeichert hältst, solltest Du sie vor der nächsten Ausführung darauf prüfen, ob sie noch aktuell sind.

Letzter Bearbeiter: Zabuza — Zuletzt bearbeitet: 20.03.2012
#!/usr/bin/perl

use strict;

# Erstelle Ausgabe-Verzeichnis
my $cache_dir = "./cf/";
if (!-e $cache_dir)
{
    my $made_dir = mkdir($cache_dir, 0777);
    die("unable to create $cache_dir") if ($made_dir != 1);
}

my $cfs = [
   { "name" => "Angriffsenergie", "gw" => 80000, "mx" => 10 },
   { "name" => "Auftragsbeziehung", "gw" => 80000, "mx" => 40 },
   { "name" => "Auftragsplanung", "gw" => 6800, "mx" => 70 },
   { "name" => "Ausgrabungswissen", "gw" => 30000, "mx" => 70 },
   { "name" => "Bankwesen", "gw" => 28000, "mx" => 80 },
   { "name" => "Bauwesen", "gw" => 25000, "mx" => 70 },
   { "name" => "Blutwissen", "gw" => 26000, "mx" => 50 },
   { "name" => "Chaosmagie", "gw" => 25000, "mx" => 90 },
   { "name" => "Diebstahlschutzwissen", "gw" => 28000, "mx" => 50 },
   { "name" => "Getreideverarbeitung", "gw" => 16000, "mx" => 30 },
   { "name" => "Gewebeforschung", "gw" => 11600, "mx" => 50 },
   { "name" => "Goldabbau", "gw" => 44000, "mx" => 30 },
   { "name" => "Gl\N{U+00FC}ck", "gw" => 16000, "mx" => 15 },
   { "name" => "Gruppenheilung", "gw" => 7200, "mx" => 120 },
   { "name" => "Handwerkskunst", "gw" => 200000, "mx" => 15 },
   { "name" => "Innere Macht", "gw" => 36000, "mx" => 50 },
   { "name" => "Inspiration", "gw" => 27000, "mx" => 90 },
   { "name" => "Jagd", "gw" => 23200, "mx" => 50 },
   { "name" => "Kochkunst", "gw" => 22000, "mx" => 80 },
   { "name" => "Labortechnik", "gw" => 120000, "mx" => 30 },
   { "name" => "Lagerlogistik", "gw" => 25000, "mx" => 90 },
   { "name" => "Lebensenergie", "gw" => 26000, "mx" => 30 },
   { "name" => "Lebenstraining", "gw" => 34000, "mx" => 50 },
   { "name" => "Lerntechnik", "gw" => 35000, "mx" => 50 },
   { "name" => "Magieverl\N{U+00E4}ngerung", "gw" => 48000, "mx" => 30 },
   { "name" => "Marktwirtschaft", "gw" => 10000, "mx" => 50 },
   { "name" => "\N{U+00D6}lverwaltung", "gw" => 26000, "mx" => 60 },
   { "name" => "Phasenenergieeffizienz", "gw" => 23000, "mx" => 70 },
   { "name" => "Phasenenergiemaximierung", "gw" => 25000, "mx" => 80 },
   { "name" => "Pflanzenkunde", "gw" => 40000, "mx" => 80 },
   { "name" => "Phasenverst\N{U+00E4}ndnis", "gw" => 10000, "mx" => 70 },
   { "name" => "Pl\N{U+00FC}nderung", "gw" => 37200, "mx" => 30 },
   { "name" => "Rache", "gw" => 10000, "mx" => 80 },
   { "name" => "Reparaturwissen", "gw" => 12000, "mx" => 30 },
   { "name" => "Schusswaffen", "gw" => 64000, "mx" => 16 },
   { "name" => "Seelenverbindung", "gw" => 60000, "mx" => 60 },
   { "name" => "Selbstheilung", "gw" => 32000, "mx" => 60 },
   { "name" => "St\N{U+00E4}rketraining", "gw" => 30000, "mx" => 50 },
   { "name" => "\N{U+00DC}berzeugungskraft", "gw" => 34000, "mx" => 50 },
   { "name" => "Waffenkunst", "gw" => 26000, "mx" => 30 },
   { "name" => "Zauberkunst", "gw" => 240000, "mx" => 8 },
   { "name" => "Zaubertruhenwissen", "gw" => 100000, "mx" => 40 }
];



my $extra = {
    "Schusswaffen" => {
        "head" => "Anwendbare Schusswaffe",
        "1" => "[[Einfacher Holzbogen]]",
        "2" => "[[Einfacher Eisenbogen]]",
        "3" => "[[Holzarmbrust der Erfahrung]]",
        "4" => "[[Kleine Armbrust des Lebens]]",
        "5" => "[[Armbrust der Seelen]]",
        "6" => "[[Armbrust der Schutzaufl\N{U+00F6}sung]]",
        "7" => "[[Armbrust des Donners]]",
        "8" => "[[Armbrust der Pr\N{U+00E4}zision]]",
        "9" => "[[Bogen des Lebens]]",
        "10" => "[[Durchschlagende Armbrust]]",
        "11" => "[[Armbrust der starken Schutzaufl\N{U+00F6}sung]]",
        "12" => "[[Bogen des starken Lebens]]",
        "13" => "[[Armbrust des großen Donners]]",
        "14" => "[[stark durchschlagende Armbrust]]",
        "15" => "[[Phasenstrahlkanone]]",
        "16" => "[[Itemschleuder]]",

    },

    "Zauberkunst" => {
        "head" => "Anwendbarer Zauber",
        "1" => "-",
        "2" => "[[Effektiver Jerodar-Diebstahlzauber]]",
        "3" => "[[Starker Jerodar-Diebstahlzauber]]",
        "4" => "[[Scheibe der Kampfgebiete]]",
        "5" => "[[Effektiver Diebstahlzauber]]",
        "6" => "[[Kampfunf\N{U+00E4}higkeits-Schutz]], [[starker Hautbrand]]",
        "7" => "[[M\N{U+00E4}chtiger Wegzauber-Schutz]], [[M\N{U+00E4}chtiger Starreschutz-Zauber]], [[Zauber des langen Lebens]], [[Zauber der unb\N{U+00E4}ndigen Wut]]",
        "8" => "[[M\N{U+00E4}chtige Sicht der Diebesopfer]], [[Sicht der Diebesopfer]], [[Phasenenergie]]",
    },

    "Labortechnik" => {
        "head" => "Herstellbare Zauber im Zauberlabor (Mindest-XP zur Herstellung)",
        "1" => "[[Heimzauber]] (500 XP)",
        "2" => "[[großer Heiltrank]] (1.000 XP)",
        "3" => "[[Zauber der Stille]] (1.500 XP)",
        "4" => "[[Zauber der Starre]] (2.000 XP)",
        "5" => "[[Zauber der Vergiftung]] (2.500 XP)",
        "6" => "[[Zauber der Versteinerung]] (3.000 XP)",
        "7" => "[[schwache Lebenserweiterung]] (3.500 XP)",
        "8" => "[[Gegenzauber: Starre]] (4.000 XP)",
        "9" => "[[Gegenzauber: Aufl\N{U+00F6}sung des Schutzes]] (4.500 XP)",
        "10" => "[[falsche Erfahrung]] (5.000 XP)",
        "11" => "[[strategischer Hinzauber]] (5.500 XP)",
        "12" => "[[Druckwelle]] (6.000 XP)",
        "13" => "[[schwache Kontrolle der Zeit]] (6.500 XP)",
        "14" => "[[Wolkenstoff]] (7.000 XP)",
        "15" => "[[gigantische Seelenkapsel]] (7.500 XP)",
        "16" => "[[Elixier der Bewegung]] (8.000 XP)",
        "17" => "[[Zauber der unsichtbaren Explosion]] (8.500 XP)",
        "18" => "[[Sicht der Schutzlosen]] (9.000 XP)",
        "19" => "[[Lebenserweiterung]] (9.500 XP)",
        "20" => "[[Zauber der Wettererzeugung]] (10.000 XP)",
        "21" => "[[Zauber der Arch\N{U+00E4}ologie]] (10.500 XP)",
        "22" => "[[Phasentrank]] (11.000 XP)",
        "23" => "[[Zauber der Diener]] (11.500 XP)", 
        "24" => "[[Zauber der T\N{U+00E4}nzerinnen]] (12.000 XP)",
        "25" => "[[Schutzzauber: Leere]] (12.500 XP)",
        "26" => "[[hochenergetische Beschw\N{U+00F6}rung]] (13.000 XP)",
        "27" => "[[scharfer Phasentrank]] (13.500 XP)",
        "28" => "[[R\N{U+00FC}ckangriff: Schutzvernichtung]] (14.000 XP)",
        "29" => "[[R\N{U+00FC}ckangriff: Blitzschlag]] (14.500 XP)",
        "30" => "[[Zauber der Wetterkontrolle]] (15.000 XP)",
    },

    "Handwerkskunst" => {
        "head" => "Herstellbare Items (Phasenenergie (PE) / Mindest-XP zur Herstellung)",
        "1" => "[[Pfeil]] (200 PE / 5.000 XP)",
        "2" => "[[geschliffener Hartplattenstein]] (14.500 PE / 10.000 XP)",
        "3" => "[[Giftfalle]] (1.200 PE / 15.000 XP)",
        "4" => "[[Schleuderfalle]] (2.000 PE / 20.000 XP)",
        "5" => "[[Amulett der Phasenenergie]] (15.000 PE / 25.000 XP)",
        "6" => "[[Starrfalle]] (3.500 PE / 30.000 XP)",
        "7" => "[[eiserne Schmerzschwinge]] (5.000 PE / 35.000 XP)",
        "8" => "[[Ausgrabungsspaten]] (55.000 PE / 40.000 XP)",
        "9" => "[[D\N{U+00E4}monenblutfass]] (3.000 PE / 45.000 XP)",
        "10" => "[[rote Portalmaschine]] (30.000 PE / 50.000 XP)",
        "11" => "[[Portalstab]] (2.000 PE / 55.000 XP)",
        "12" => "[[Weltenspalter]] (30.000 PE / 60.000 XP)",
        "13" => "[[Knorpel-Monster aus Draht]] (4.000 PE / 65.000 XP)",
        "14" => "[[Amulett der Phasenschwemme]] (80.000 PE / 70.000 XP)",
        "15" => "[[Foliant der seltsamen Wesen]] (5.555 PE / 75.000 XP)",
    },
};


my $bgcolor_general = "FFFFCC"; # Hintergrundfarbe, falls nichts anderes definiert ist (gelb)
my $bgcolor_block   = "FFEECB"; # Hintergrundfarbe fuer den 5er-Block (orange)



foreach my $cf(@{$cfs})
{
    my $grundwert = $cf->{"gw"};
    my $maxstufe = $cf->{"mx"};
    my $maxlt = ($cf->{"name"} eq "Lerntechnik") ? 0 : 50;
    my $ex = $extra->{$cf->{"name"}};
    my $colspan = 11;

    open(FILE, ">".$cache_dir.lc($cf->{"name"}).".txt");

print FILE <<EOF;
<div id="CFoptions"></div>
<div id="CFcalc">$grundwert</div>
<div id="CFlevel">
{| {{Prettytable}}
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Lernzeit pro Stufe, abh\N{U+00E4}ngig von der Lerntechnik: '''
|-
|
|colspan="$colspan" align="center" bgcolor=#$bgcolor_general |'''[[Lerntechnik]]'''
|-
!bgcolor=#$bgcolor_block|Stufe
!bgcolor=#$bgcolor_general|0
EOF

print FILE <<EOF if ($maxlt>0);
!bgcolor=#$bgcolor_general|5
!bgcolor=#$bgcolor_general|10
!bgcolor=#$bgcolor_general|15
!bgcolor=#$bgcolor_general|20
!bgcolor=#$bgcolor_general|25
!bgcolor=#$bgcolor_general|30
!bgcolor=#$bgcolor_general|35
!bgcolor=#$bgcolor_general|40
!bgcolor=#$bgcolor_general|45
!bgcolor=#$bgcolor_general|50
EOF

print FILE "!bgcolor=#$bgcolor_block|".$ex->{"head"}."\n" if (defined($ex));


for(my $stufe=1; $stufe<=$maxstufe; $stufe++)
{
    print FILE "|-\n";
    print FILE "|bgcolor=#$bgcolor_general|'''$stufe'''\n";
    my $blockfarbe = (($stufe-1)/5)%2;
    for (my $lerntech = 0; $lerntech <= $maxlt; $lerntech += 5)
    {
        my $lernfaktor = 0.97 ** $lerntech;
        my $sekunden = ($stufe-1) * $grundwert * $lernfaktor;
        printf FILE "|bgcolor=#%s|%02d:%02d:%02d\n",
            (($lerntech + $blockfarbe) % 2) ? "$bgcolor_general" : "$bgcolor_block",
            $sekunden / 86400,
            ($sekunden % 86400) / 3600,
            ($sekunden % 3600) / 60;
    }
    print FILE "|bgcolor=#$bgcolor_general|".$ex->{$stufe}."\n" if (defined($ex));
}


print FILE <<EOF;
|}
</div>
<div id="CFtotal">
{| {{Prettytable}}
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Gesamtlernzeit bis zur jeweiligen Stufe, abh\N{U+00E4}ngig von der Lerntechnik: '''
|-
|
|colspan="$colspan" align="center" bgcolor=#$bgcolor_general |'''[[Lerntechnik]]'''
|-
!bgcolor=#$bgcolor_block|Stufe
!bgcolor=#$bgcolor_general|0
EOF

print FILE <<EOF if ($maxlt>0);
!bgcolor=#$bgcolor_general|5
!bgcolor=#$bgcolor_general|10
!bgcolor=#$bgcolor_general|15
!bgcolor=#$bgcolor_general|20
!bgcolor=#$bgcolor_general|25
!bgcolor=#$bgcolor_general|30
!bgcolor=#$bgcolor_general|35
!bgcolor=#$bgcolor_general|40
!bgcolor=#$bgcolor_general|45
!bgcolor=#$bgcolor_general|50
EOF
print FILE "!bgcolor=#$bgcolor_block|".$ex->{"head"}."\n" if (defined($ex));

my $step = 1;
$step = 5 if ($maxstufe > 14);
my $zeile = 0;
my $LetzteStufe = $step;

for (my $stufe=$step; $stufe<=$maxstufe; $stufe+=$step) { 
  print_zeile($stufe, ++$zeile, $grundwert, $maxlt, $ex); 
  $LetzteStufe = $stufe;
  }
if ( $LetzteStufe < $maxstufe) {
  print_zeile($maxstufe, ++$zeile, $grundwert, $maxlt, $ex);
  }

print FILE "|}\n</div>\n";

close FILE;
}

sub reihe
{
    my $z = shift;
    return ($z * ($z + 1) / 2);
}

sub print_zeile
{
    my ($stufe, $zeile, $grundwert, $maxlt, $ex) = @_;
    print FILE "|-\n";
    print FILE "|bgcolor=#$bgcolor_general|'''$stufe'''\n";
    my $blockfarbe = (($zeile-1)/5)%2;
    for (my $lerntech = 0; $lerntech <= $maxlt; $lerntech += 5)
    {
        my $lernfaktor = 0.97 ** $lerntech;
        my $sekunden = reihe($stufe-1) * $grundwert * $lernfaktor;
        printf FILE "|bgcolor=#%s|%02d:%02d:%02d\n",
            (($lerntech + $blockfarbe) % 2) ? "$bgcolor_block" : $bgcolor_general,
            $sekunden / 86400,
            ($sekunden % 86400) / 3600,
            ($sekunden % 3600) / 60;
    }
    print FILE "|bgcolor=#$bgcolor_general|".$ex->{$stufe}."\n" if (defined($ex));
}