Benutzer:Count Ypsilon/Skript:cf.pl

aus FreewarWiki, der Referenz für Freewar
Version vom 3. Oktober 2006, 21:54 Uhr von Count Ypsilon (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | ↑ Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Dieses Skript erzeugt für jede im anfangs definierten Array erwähnte Charakterfähigkeit eine Datei, in der sich die Lernzeit- und die Gesamtlernzeit-Tabellen befinden. Grundwert ("gw") und maximale Ausbaustufe ("mx") sind geeignet zu wählen.

Über das Array "extra" kann bei bestimmten Charakterfähigkeiten eine zusätzliche Spalte an die Tabelle angehängt werden.

 #!/usr/bin/perl
 
 use strict;
 
 my $cfs = [
    { "name" => "Schusswaffen", "gw" => 160000, "mx" => 12 },
    { "name" => "Gruppenheilung", "gw" => 18000, "mx" => 150 },
    { "name" => "Angriffsenergie", "gw" => 200000, "mx" => 10 },
    { "name" => "Auftragsplanung", "gw" => 17200, "mx" => 70 },
    { "name" => "Diebstahlschutzwissen", "gw" => 70000, "mx" => 50 },
    { "name" => "Getreideverarbeitung", "gw" => 40000, "mx" => 30 },
    { "name" => "Gewebeforschung", "gw" => 29000, "mx" => 50 },
    { "name" => "Goldabbau", "gw" => 110000, "mx" => 30 },
    { "name" => "Glück", "gw" => 40000, "mx" => 15 },
    { "name" => "Innere Macht", "gw" => 90000, "mx" => 50 },
    { "name" => "Jagd", "gw" => 58000, "mx" => 50 },
    { "name" => "Kochkunst", "gw" => 55000, "mx" => 80 },
    { "name" => "Lebensenergie", "gw" => 65000, "mx" => 30 },
    { "name" => "Lebenstraining", "gw" => 85000, "mx" => 50 },
    { "name" => "Lerntechnik", "gw" => 35000, "mx" => 50 },
    { "name" => "Magieverlängerung", "gw" => 120000, "mx" => 30 },
    { "name" => "Marktwirtschaft", "gw" => 25000, "mx" => 50 },
    { "name" => "Ölverwaltung", "gw" => 65000, "mx" => 60 },
    { "name" => "Plünderung", "gw" => 93000, "mx" => 30 },
    { "name" => "Reparaturwissen", "gw" => 30000, "mx" => 30 },
    { "name" => "Selbstheilung", "gw" => 80000, "mx" => 80 },
    { "name" => "Stärketraining", "gw" => 75000, "mx" => 50 },
    { "name" => "Überzeugungskraft", "gw" => 85000, "mx" => 50 },
    { "name" => "Waffenkunst", "gw" => 65000, "mx" => 30 },
    { "name" => "Zauberkunst", "gw" => 600000, "mx" => 3 }
 ];
 
 my $extra = {
     "Schusswaffen" => {
         "head" => "Anwendbarer Bogen",
         "1" => "[[Einfacher Holzbogen]]",
         "2" => "[[Einfacher Eisenbogen]]",
         "3" => "[[Holzarmbrust der Erfahrung]]",
         "4" => "[[Kleine Armbrust des Lebens]]",
         "5" => "[[Armbrust der Seelen]]",
         "6" => "[[Armbrust der Schutzauflösung]]",
         "7" => "[[Armbrust des Donners]]",
         "8" => "[[Armbrust der Präzision]]",
         "9" => "[[Bogen des Lebens]]",
         "10" => "[[Durchschlagende Armbrust]]",
         "11" => "[[Armbrust der starken Schutzauflösung]]",
         "12" => "[[Bogen des starken Lebens]]"
     },
 
     "Zauberkunst" => {
         "head" => "Anwendbarer Zauber",
         "1" => "-",
         "2" => "[[Effektiver Jerodar-Diebstahlzauber]]",
         "3" => "[[Starker Jerodar-Diebstahlzauber]]"
     },
 
 };
 
 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 = (defined($ex) ? 12 : 11);
 
     open(FILE, ">".lc($cf->{"name"}).".txt");
 
 print FILE <<EOF;
 <!-- gw=$grundwert mx=$maxstufe -->
 '''Lernzeit pro Stufe, abhängig von der Lerntechnik: ''' ''(Angaben in Tagen:Stunden:Minuten)''
 {| {{Prettytable}}
 |
 |colspan="$colspan" align="center" bgcolor=#FFFFCC |'''[[Lerntechnik]]'''
 |-
 !bgcolor=#FFEECB|Stufe
 !bgcolor=#FFFFCC|0
 EOF
 
 print FILE <<EOF if ($maxlt>0);
 !bgcolor=#FFFFCC|5
 !bgcolor=#FFFFCC|10
 !bgcolor=#FFFFCC|15
 !bgcolor=#FFFFCC|20
 !bgcolor=#FFFFCC|25
 !bgcolor=#FFFFCC|30
 !bgcolor=#FFFFCC|35
 !bgcolor=#FFFFCC|40
 !bgcolor=#FFFFCC|45
 !bgcolor=#FFFFCC|50
 EOF
 
 print FILE "!bgcolor=#FFEECB|".$ex->{"head"}."\n" if (defined($ex));
 
 for(my $stufe=1; $stufe<=$maxstufe; $stufe++)
 {
     print FILE "|-\n";
     print FILE "|bgcolor=#FFFFCC|'''$stufe'''\n";
     my $blockfarbe = (($stufe-1)/5)%2;
     for (my $lerntech = 0; $lerntech <= $maxlt; $lerntech += 5)
     {
         my $lernfaktor = 0.95 ** $lerntech;
         my $sekunden = ($stufe-1) * $grundwert * $lernfaktor;
         printf FILE "|bgcolor=#%s|%02d:%02d:%02d\n", 
             (($lerntech + $blockfarbe) % 2) ? "" : "FFEECB",
             $sekunden / 86400,
             ($sekunden % 86400) / 3600, 
             ($sekunden % 3600) / 60;
     }
     print FILE "|bgcolor=#FFFFCC|".$ex->{$stufe}."\n" if (defined($ex));
 }
 
 
 print FILE <<EOF;
 |}
 
 
 '''Gesamtlernzeit bis zur jeweiligen Stufe, abhängig von der Lerntechnik: ''' ''(Angaben in Tagen:Stunden:Minuten)''
 {| {{Prettytable}}
 |
 |colspan="$colspan" align="center" bgcolor=#FFFFCC |'''[[Lerntechnik]]'''
 |-
 !bgcolor=#FFEECB|Stufe
 !bgcolor=#FFFFCC|0
 EOF
 
 print FILE <<EOF if ($maxlt>0);
 !bgcolor=#FFFFCC|5
 !bgcolor=#FFFFCC|10
 !bgcolor=#FFFFCC|15
 !bgcolor=#FFFFCC|20
 !bgcolor=#FFFFCC|25
 !bgcolor=#FFFFCC|30
 !bgcolor=#FFFFCC|35
 !bgcolor=#FFFFCC|40
 !bgcolor=#FFFFCC|45
 !bgcolor=#FFFFCC|50
 EOF
 print FILE "!bgcolor=#FFEECB|".$ex->{"head"}."\n" if (defined($ex));
 
 my $step = 1;
 $step = 5 if ($maxstufe > 14);
 my $zeile = 1;
 
 for(my $stufe=$step; $stufe<=$maxstufe; $stufe+=$step)
 {
     print FILE "|-\n";
     print FILE "|bgcolor=#FFFFCC|'''$stufe'''\n";
     my $blockfarbe = (($zeile-1)/5)%2;
     for (my $lerntech = 0; $lerntech <= $maxlt; $lerntech += 5)
     {
         my $lernfaktor = 0.95 ** $lerntech;
         my $sekunden = reihe($stufe-1) * $grundwert * $lernfaktor;
         printf FILE "|bgcolor=#%s|%02d:%02d:%02d\n", 
             (($lerntech + $blockfarbe) % 2) ? "FFEECB" : $blockfarbe,
             $sekunden / 86400,
             ($sekunden % 86400) / 3600, 
             ($sekunden % 3600) / 60;
     }
     print FILE "|bgcolor=#FFFFCC|".$ex->{$stufe}."\n" if (defined($ex));
     $zeile++;
 }
 
 print FILE "|}\n";
 
 close FILE;
 }
 
 sub reihe
 {
     my $z = shift;
     return ($z * ($z + 1) / 2);
 }