FreewarWiki:Artikel zu Charakterfähigkeiten

aus FreewarWiki, der Referenz für Freewar
Version vom 27. Mai 2006, 23:57 Uhr von Count Ypsilon (Diskussion | Beiträge) (rausmigriert aus meiner disku-seite für eventuelle spätere nutzung)
(Unterschied) ← Nächstältere Version | ↑ Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Unsere Artikel zu den Charakterfähigkeiten sind wie folgt aufgebaut:

  1. Standard-Beschreibungsblock (nach Vorlage:Charakterfähigkeit/Layout)
  2. Tabelle mit Ausbaustufen (in Planung)
  3. Tabelle mit Lernzeiten

Die bestehenden Artikel sind hoffentlich vollständig und korrekt, aber man weiss ja nie, wann weitere Charakterfähigkeiten hinzukommen - daher hier ein paar Hinweise zur Erstellung eines solchen Artikels.

(Halbautomatische) Erstellung der Lernzeiten-Tabellen

Grundwerte

Die gesamte Lernzeit-Tabelle einer Charakterfähigkeit errechnet sich aus einer einzigen Zahl, die ich hier mal "Grundwert" nenne. Dieser Grundwert ist die Dauer in Sekunden, die man bei Lerntechnik 0 braucht, um von Stufe 1 der Fähigkeit auf Stufe 2 zu kommen.

Für eine beliebige Stufe S und Lerntechnik-Stufe L gilt dann immer: Die nächste Stufe dauert Grundwert * S * 0,95L Sekunden.

Um die Tabelle für eine Charakterfähigkeit erzeugen zu können, benötigen wir diesen Grundwert. Die folgenden Grundwerte gelten für die bekannten Charakterfähigkeiten:

Charakterfähigkeit Grundwert
Angriffsenergie 200000
Auftragsplanung 17200
Diebstahlschutzwissen 70000
Getreideverarbeitung 40000
Gewebeforschung 29000
Goldabbau 110000
Innere Macht 90000
Jagd 58000
Kochkunst 55000
Lebensenergie 65000
Lebenstraining 85000
Lerntechnik 35000
Magieverlängerung 120000
Marktwirtschaft 25000
Ölverwaltung 65000
Plünderung 93000
Reparaturwissen 30000
Schusswaffen 160000
Selbstheilung 80000
Stärketraining 75000
Überzeugungskraft 85000
Waffenkunst 65000

Achtung: Solltest Du in dieser Tabelle einen Fehler finden, so muss nicht nur oben der Wert angepasst werden, sondern die Lernzeit-Tabelle der entspr. Charakterfähigkeit ist dann auch falsch und muss verbessert werden. Ferner ist zu beachten, dass die Werte in dieser Tabelle zum Teil nicht mit dem übereinstimmen, was im Umlauf befindliche Berechnungstools auswerfen - wir sind aber der Ansicht, dass unsere Werte stimmen.

Grundwert für eine Charakterfähigkeit bestimmen

Nicht immer hat man einen Account zur Verfügung, der Lerntechnik Stufe 0 und die gesuchte Charakterfähigkeit auf Stufe 1 hat (so dass man den Grundwert direkt ablesen kann).

Um den Grundwert für eine Charakterfähigkeit "C" selbst zu ermitteln, geht man wie folgt vor:

  1. Notiere Deine aktuelle Stufe dieser Charakterfaehigkeit: "S"
  2. Notiere Deine aktuelle Stufe Lerntechnik: "L"
  3. Gehe ins Charakter-Menue und lasse Dir anzeigen, wie lang das Trainieren der naechsten Stufe von "C" dauert. Rechne diesen Wert in Sekunden um; diese Dauer in Sekunden nennen wir "D".
    Beispiel:
    Fähigkeit auf Stufe 6 trainieren
    Dauer: 1 Tage 21 Stunden
    -> D = 86400 * 1 + 3600 * 21 = 162000
  4. Der Grundwert G errechnet sich nun wie folgt: G = D / S / 0,95 L
  5. Aufgrund von Rundungs-Ungenauigkeiten besonders bei jenen Fähigkeiten, die knapp über einen Tag dauern, kann der Grundwert auch bis zu G = (D+3599) / S / 0,95 L betragen.
    Beispiel:
    Wenn Du Lernfähigkeit auf Stufe 16 hast und wie oben gezeigt für das Training von Stufe 6 die 162000 Sekunden errechnet hast, so ergibt sich als Grundwert G:
    162000 / 5 / 0.44012 = 73616
    bis maximal
    (162000 + 3599) / 5 / 0.44012 = 75433
    - es ist also sehr wahrscheinlich, dass der Grundwert hier 75000 betraegt.

Skript zur Tabellen-Berechnung

Hier ist das Skript, mit dem die Tabellen in ihrer jetztigen Form erstellt wurden. Ganz oben sind Grundwert und maximale Stufe einzutragen.

#!/usr/bin/perl

use strict;
my $grundwert = 58000;;
my $maxstufe = 50;
my $name = "Jagd";

# hier nichts mehr zu ändern

print <<EOF;
'''Lernzeit pro Stufe, abhängig von der Lerntechnik: ''' ''(Angaben in Tagen:Stunden:Minuten)''
{| {{Prettytable}}
|
|colspan="11" align="center" bgcolor=#FFFFCC |'''[[Lerntechnik]]'''
|-
!bgcolor=#FFEECB|Stufe
!bgcolor=#FFFFCC|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

for(my $stufe=1; $stufe<=$maxstufe; $stufe++)
{
    print "|-\n";
    print "|bgcolor=#FFFFCC|'''$stufe'''\n";
    my $blockfarbe = (($stufe-1)/5)%2;
    for (my $lerntech = 0; $lerntech <= 50; $lerntech += 5)
    {
        my $lernfaktor = 0.95 ** $lerntech;
        my $sekunden = ($stufe-1) * $grundwert * $lernfaktor;
        printf "|bgcolor=#%s|%02d:%02d:%02d\n", 
            (($lerntech + $blockfarbe) % 2) ? "" : "FFEECB",
            $sekunden / 86400,
            ($sekunden % 86400) / 3600, 
            ($sekunden % 3600) / 60;
    }
}


print <<EOF;
|}


'''Gesamtlernzeit bis zur jeweiligen Stufe, abhängig von der Lerntechnik: ''' ''(Angaben in Tagen:Stunden:Minuten)''
{| {{Prettytable}}
|
|colspan="11" align="center" bgcolor=#FFFFCC |'''[[Lerntechnik]]'''
|-
!bgcolor=#FFEECB|Stufe
!bgcolor=#FFFFCC|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

my $step = 1;
$step = 5 if ($maxstufe > 10);
my $zeile = 1;

for(my $stufe=$step; $stufe<=$maxstufe; $stufe+=$step)
{
    print "|-\n";
    print "|bgcolor=#FFFFCC|'''$stufe'''\n";
    my $blockfarbe = (($zeile-1)/5)%2;
    for (my $lerntech = 0; $lerntech <= 50; $lerntech += 5)
    {
        my $lernfaktor = 0.95 ** $lerntech;
        my $sekunden = reihe($stufe-1) * $grundwert * $lernfaktor;
        printf "|bgcolor=#%s|%02d:%02d:%02d\n", 
            (($lerntech + $blockfarbe) % 2) ? "FFEECB" : $blockfarbe,
            $sekunden / 86400,
            ($sekunden % 86400) / 3600, 
            ($sekunden % 3600) / 60;
    }
    $zeile++;
}

print "|}\n";

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