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

Aus DarkfleetWiki
Wechseln zu: Navigation, Suche
(die sonderfälle sind nun erstmal raus, tragen wir dann später nach, für dinge wo es sinnvoll ist)
(bleibt doch drin, wenn auch für fw....ich vergessen am ende nur wieder den code überall anzupassen xD)
Zeile 47: Zeile 47:
 
   { "name" => "Wurmloch-Reisewissen", "gw" => 7000, "mx" => 25 },
 
   { "name" => "Wurmloch-Reisewissen", "gw" => 7000, "mx" => 25 },
 
];
 
];
 +
 +
 +
 +
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]]",
 +
        "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ä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 (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)",
 +
    },
 +
 +
    "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)",
 +
    },
 +
};
  
  

Version vom 9. November 2010, 10:10 Uhr

#!/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" => "Angriffsstärkewissen", "gw" => 7500, "mx" => 100 },
   { "name" => "Antimateriewissen", "gw" => 600000, "mx" => 4 },
   { "name" => "Armadaorganisation", "gw" => 432000, "mx" => 10 },
   { "name" => "Astrogeologie", "gw" => 600000, "mx" => 2 },
   { "name" => "Basiswissen", "gw" => 12000, "mx" => 60 },
   { "name" => "Batterietechnologie", "gw" => 600000, "mx" => 4 },
   { "name" => "EMP-Technologie", "gw" => 600000, "mx" => 2 },
   { "name" => "Glück", "gw" => 40000, "mx" => 15 },
   { "name" => "Großhandelswissen", "gw" => 7000, "mx" => 40 },
   { "name" => "Handelstransmission", "gw" => 600000, "mx" => 3 },
   { "name" => "Holographieaufzeichnung", "gw" => 600000, "mx" => 3 },
   { "name" => "Kampftaktik", "gw" => 11000, "mx" => 40 },
   { "name" => "Laderaumtechnik", "gw" => 600000, "mx" => 6 },
   { "name" => "Marktwirtschaft", "gw" => 5000, "mx" => 30 },
   { "name" => "Modulmontage", "gw" => 450000, "mx" => 4 },
   { "name" => "NPC-Scannerwissen", "gw" => 600000, "mx" => 3 },
   { "name" => "Nanorobotik", "gw" => 600000, "mx" => 4 },
   { "name" => "Pech", "gw" => 120000, "mx" => 5 },
   { "name" => "Planetenmanagement", "gw" => 3000, "mx" => 100 },
   { "name" => "Reparaturwissen", "gw" => 10000, "mx" => 50 },
   { "name" => "Ribium-Einspeisung", "gw" => 600000, "mx" => 4 },
   { "name" => "Rüstungsdetektion", "gw" => 600000, "mx" => 3 },
   { "name" => "Schiffsrüstungswissen", "gw" => 9000, "mx" => 100 },
   { "name" => "Schildwissen", "gw" => 8000, "mx" => 100 },
   { "name" => "Signatur-Scannertechnik", "gw" => 600000, "mx" => 2 },
   { "name" => "Signaturstörung", "gw" => 600000, "mx" => 2 },
   { "name" => "Spionagetechnologie", "gw" => 800000, "mx" => 10 },
   { "name" => "Sprungtechnologie", "gw" => 600000, "mx" => 2 },
   { "name" => "Tarntechnik", "gw" => 120000, "mx" => 20 },
   { "name" => "Tiefenscannertechnologie", "gw" => 43210, "mx" => 40 },
   { "name" => "Traktorstrahltechnik", "gw" => 600000, "mx" => 3 },
   { "name" => "Waffensystemtechnik", "gw" => 600000, "mx" => 3 },
   { "name" => "Wurmloch-Reisewissen", "gw" => 7000, "mx" => 25 },
];



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]]",
        "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ä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 (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)",
    },

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


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 "Basiswissen") ? 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ängig vom Basiswissen: '''
|-
|
|colspan="$colspan" align="center" bgcolor=#$bgcolor_general |'''[[Basiswissen]]'''
|-
!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ängig vom Basiswissen: '''
|-
|
|colspan="$colspan" align="center" bgcolor=#$bgcolor_general |'''[[Basiswissen]]'''
|-
!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;

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

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