DarkfleetWiki:Bot/Skripts/cf.pl

Aus DarkfleetWiki
Wechseln zu: Navigation, Suche
#!/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" => "Waffentechnologie", "gw" => 15000, "mx" => 50 },
   { "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 : 60;
    my $ex = $extra->{$cf->{"name"}};
    my $colspan = 13;

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

print FILE <<EOF;
<div id="CFoptions"></div>
<div id="CFcalc">$grundwert</div>
<div id="CFlevel">
{| class="prettytable"
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Forschungszeit 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
!bgcolor=#$bgcolor_general|55
!bgcolor=#$bgcolor_general|60
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.98 ** $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="prettytable"
|+ style="text-align: left;" | <small style="float:right;">''(Angaben in Tagen:Stunden:Minuten)''</small>'''Gesamtforschungszeit 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
!bgcolor=#$bgcolor_general|55
!bgcolor=#$bgcolor_general|60
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.98 ** $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));
}