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" => 160000, "mx" => 14 },
   { "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" => 6 },
   { "name" => "Zaubertruhenwissen", "gw" => 250000, "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" => "[[Armbrust des großen Donners]]",
        "14" => "[[Stark durchschlagende Armbrust]]"
    },

    "Zauberkunst" => {
        "head" => "Anwendbarer Zauber",
        "1" => "-",
        "2" => "[[Effektiver Jerodar-Diebstahlzauber]]",
        "3" => "[[Starker Jerodar-Diebstahlzauber]]",
        "4" => "[[Effektiver Diebstahlzauber]]",
        "5" => "[[Starker Hautbrand]], [[Kampfunfähigkeits-Schutz]]",
    },

};

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);
}