Benutzer:Count Ypsilon/Skript:cf.pl

aus Chaos FreewarWiki, der Referenz für Freewar
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" => 64000, "mx" => 13 },
   { "name" => "Gruppenheilung", "gw" => 7200, "mx" => 150 },
   { "name" => "Angriffsenergie", "gw" => 80000, "mx" => 10 },
   { "name" => "Auftragsplanung", "gw" => 6800, "mx" => 70 },
   { "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ück", "gw" => 16000, "mx" => 15 },
   { "name" => "Innere Macht", "gw" => 36000, "mx" => 50 },
   { "name" => "Jagd", "gw" => 23200, "mx" => 50 },
   { "name" => "Kochkunst", "gw" => 22000, "mx" => 80 },
   { "name" => "Lebensenergie", "gw" => 26000, "mx" => 30 },
   { "name" => "Lebenstraining", "gw" => 34000, "mx" => 50 },
   { "name" => "Lerntechnik", "gw" => 14000, "mx" => 50 },
   { "name" => "Magieverlängerung", "gw" => 48000, "mx" => 30 },
   { "name" => "Marktwirtschaft", "gw" => 10000, "mx" => 50 },
   { "name" => "Ölverwaltung", "gw" => 26000, "mx" => 60 },
   { "name" => "Plünderung", "gw" => 37200, "mx" => 30 },
   { "name" => "Reparaturwissen", "gw" => 12000, "mx" => 30 },
   { "name" => "Selbstheilung", "gw" => 32000, "mx" => 80 },
   { "name" => "Stärketraining", "gw" => 30000, "mx" => 50 },
   { "name" => "Überzeugungskraft", "gw" => 34000, "mx" => 50 },
   { "name" => "Waffenkunst", "gw" => 26000, "mx" => 30 },
   { "name" => "Zauberkunst", "gw" => 240000, "mx" => 5 },
   { "name" => "Zaubertruhenwissen", "gw" => 100000, "mx" => 70 }
];

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]]",
        "13" => "??"
    },

    "Zauberkunst" => {
        "head" => "Anwendbarer Zauber",
        "1" => "-",
        "2" => "[[Effektiver Jerodar-Diebstahlzauber]]",
        "3" => "[[Starker Jerodar-Diebstahlzauber]]",
        "4" => "[[Scheibe der Kampfgebiete]]",
        "5" => "[[Effektiver 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;
<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ängig von der Lerntechnik: ''' 
|-
|
|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.97 ** $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;
|}
</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ängig von der Lerntechnik:''' 
|-
|
|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.97 ** $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</div>\n";

close FILE;
}

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