FreewarWiki:Bot/Skripts/cf.pl

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
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: GalakBot — Zuletzt bearbeitet: 26.04.2016
#!/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" => 28000, "mx" => 10, "step_Gesamtlernzeit" => 1 },
   { "name" => "Auftragsbeziehung", "gw" => 28000, "mx" => 40, "step_Gesamtlernzeit" => 5 },
   { "name" => "Auftragsplanung", "gw" => 2380, "mx" => 70, "step_Gesamtlernzeit" => 10 },
   { "name" => "Ausgrabungswissen", "gw" => 10500, "mx" => 70, "step_Gesamtlernzeit" => 10 },
   { "name" => "Bankwesen", "gw" => 9800, "mx" => 80, "step_Gesamtlernzeit" => 10 },
   { "name" => "Bauwesen", "gw" => 8750, "mx" => 90, "step_Gesamtlernzeit" => 10 },
   { "name" => "Blutwissen", "gw" => 9100, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Chaosmagie", "gw" => 8750, "mx" => 90, "step_Gesamtlernzeit" => 10 },
   { "name" => "Diebstahlschutzwissen", "gw" => 9800, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Getreideverarbeitung", "gw" => 5600, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Gewebeforschung", "gw" => 4060, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Goldabbau", "gw" => 15400, "mx" => 30, "step_Gesamtlernzeit" => 10 },
   { "name" => "Goldraub", "gw" => 6000, "mx" => 100, "step_Gesamtlernzeit" => 10 },
   { "name" => "Gold-Inspiration", "gw" => 9000, "mx" => 100, "step_Gesamtlernzeit" => 10 },
   { "name" => "Glück", "gw" => 5600, "mx" => 15, "step_Gesamtlernzeit" => 1 },
   { "name" => "Gruppenheilung", "gw" => 2520, "mx" => 120, "step_Gesamtlernzeit" => 10 },
   { "name" => "Handwerkskunst", "gw" => 70000, "mx" => 17, "step_Gesamtlernzeit" => 1 },
   { "name" => "Innere Macht", "gw" => 12600, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Inspiration", "gw" => 9450, "mx" => 90, "step_Gesamtlernzeit" => 10 },
   { "name" => "Jagd", "gw" => 8120, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Kochkunst", "gw" => 7700, "mx" => 80, "step_Gesamtlernzeit" => 10 },
   { "name" => "Labortechnik", "gw" => 42000, "mx" => 30, "step_Gesamtlernzeit" => 1 },
   { "name" => "Lagerlogistik", "gw" => 8750, "mx" => 90, "step_Gesamtlernzeit" => 10 },
   { "name" => "Lebensenergie", "gw" => 9100, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Lebenstraining", "gw" => 11900, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Lerntechnik", "gw" => 12250, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Magieverlängerung", "gw" => 16800, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Marktwirtschaft", "gw" => 3500, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Ölverwaltung", "gw" => 9100, "mx" => 60, "step_Gesamtlernzeit" => 10 },
   { "name" => "Phasenenergieeffizienz", "gw" => 8050, "mx" => 70, "step_Gesamtlernzeit" => 10 },
   { "name" => "Phasenenergiemaximierung", "gw" => 8750, "mx" => 80, "step_Gesamtlernzeit" => 10 },
   { "name" => "Pflanzenkunde", "gw" => 14000, "mx" => 80, "step_Gesamtlernzeit" => 10 },
   { "name" => "Phasenverständnis", "gw" => 3500, "mx" => 70, "step_Gesamtlernzeit" => 10 },
   { "name" => "Plünderung", "gw" => 13020, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Rache", "gw" => 3500, "mx" => 80, "step_Gesamtlernzeit" => 10 },
   { "name" => "Reparaturwissen", "gw" => 4200, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Schusswaffen", "gw" => 22400, "mx" => 17, "step_Gesamtlernzeit" => 1 },
   { "name" => "Seelenverbindung", "gw" => 21000, "mx" => 60, "step_Gesamtlernzeit" => 10 },
   { "name" => "Selbstheilung", "gw" => 11200, "mx" => 60, "step_Gesamtlernzeit" => 10 },
   { "name" => "Stärketraining", "gw" => 10500, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Überzeugungskraft", "gw" => 11900, "mx" => 50, "step_Gesamtlernzeit" => 5 },
   { "name" => "Waffenkunst", "gw" => 9100, "mx" => 30, "step_Gesamtlernzeit" => 5 },
   { "name" => "Wissens-Inspration", "gw" => 1500, "mx" => 100, "step_Gesamtlernzeit" => 10 },
   { "name" => "Zauberkunst", "gw" => 84000, "mx" => 8, "step_Gesamtlernzeit" => 1 },
   { "name" => "Zaubertruhenwissen", "gw" => 35000, "mx" => 40, "step_Gesamtlernzeit" => 5 },
   { "name" => "Zeit-Inspiration", "gw" => 3000, "mx" => 100, "step_Gesamtlernzeit" => 10 }
];



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ö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]]",
        "15" => "[[Phasenstrahlkanone]]",
        "16" => "[[Itemschleuder]]",
        "17" => "[[Bogen der Erfahrung]]",

    },

    "Zauberkunst" => {
        "head" => "Anwendbarer Zauber",
        "1" => "-",
        "2" => "[[Effektiver Jerodar-Diebstahlzauber]]",
        "3" => "[[Starker Jerodar-Diebstahlzauber]]",
        "4" => "[[Scheibe der Kampfgebiete]]",
        "5" => "[[Effektiver Diebstahlzauber]]",
        "6" => "[[Kampfunfähigkeits-Schutz]], [[starker Hautbrand]]",
        "7" => "[[Mächtiger Wegzauber-Schutz]], [[Mächtiger Starreschutz-Zauber]], [[Zauber des langen Lebens]], [[Zauber der unbändigen Wut]]",
        "8" => "[[Mä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ö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äologie]] (10.500 XP)",
        "22" => "[[Phasentrank]] (11.000 XP)",
        "23" => "[[Zauber der Diener]] (11.500 XP)", 
        "24" => "[[Zauber der Tänzerinnen]] (12.000 XP)",
        "25" => "[[Schutzzauber: Leere]] (12.500 XP)",
        "26" => "[[hochenergetische Beschwörung]] (13.000 XP)",
        "27" => "[[scharfer Phasentrank]] (13.500 XP)",
        "28" => "[[Rückangriff: Schutzvernichtung]] (14.000 XP)",
        "29" => "[[Rü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ämonenblutfass]] (3.000 PE / 45.000 XP)",
        "10" => "[[rote Portalmaschine]] (30.000 PE / 50.000 XP)",
        "11" => "[[Portalstab (Item)|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)",
        "16" => "[[stabile Chaossense]] (25.000 PE / 80.000 XP)",
        "17" => "[[Bogen der Erfahrung]] (45.000 PE / 85.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;
    my $step = $cf->{"step_Gesamtlernzeit"};

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

print FILE <<EOF;
<div id="CFoptions"></div>
<div id="CFcalc">$grundwert</div>
<div id="CFlevel">
{| class="wikitable"
|+ 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.99 ** $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">
{| class="wikitable"
|+ 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 $zeile = 0;
my $LetzteStufe = $step;

for (my $stufe=$step; $stufe<=$maxstufe; $stufe+=$step) { 
  print_zeile($stufe, ++$zeile, $grundwert, $maxlt, $ex); 
  $LetzteStufe = $stufe;
  }
# falls step<>1 und maxstufe modulo step<>0, wurde die letzte stufe noch nicht behandelt:
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.99 ** $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));
}