Benutzer:Count Ypsilon/Skript:mapcolor.pl

aus FreewarWiki, der Referenz für Freewar
Version vom 25. August 2006, 01:52 Uhr von Count Ypsilon (Diskussion | Beiträge) (nur, falls jemand das mal benutzen will)
(Unterschied) ← Nächstältere Version | ↑ Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Dieses Perl-Skript erzeugt aus einer NPC-Liste (Benutzer:Count Ypsilon/Skript:npclist.pl) und einer Kartenfeld-Liste (Benutzer:Count Ypsilon/Skript:maplist.pl) eine Liste, die jedem Kartenfeld einen Farbcode zuordnet, der von der Stärke der vorhandenen NPCs abhängig ist.

 #!/usr/bin/perl
 
 # NPC-Liste einlesen
 # Format: 
 # NPC-Name,Angriff,LP,XP,GM
 
 open(NPC, "npclist.out");
 while(<NPC>)
 {
     chomp;
     my ($name, $atk, $lp, $xp, $gm) = split(/,/);
     $npc{$name}->{"atk"}=$atk;
     $npc{$name}->{"lp"}=$lp;
     $npc{$name}->{"xp"}=$xp;
     $npc{$name}->{"gm"}=$gm;
 }
 close(NPC);
 
 # Liste der Kartenfelder einlesen
 # Format:
 # Gebietsname,X,Y,NPC-Name
 
 open(MAP, "maplist.out");
 while(<MAP>)
 {
     chomp;
     my ($mapname, $x, $y, $npcname) = split(/,/);
     $fieldused->{$x}->{$y} = 1;
     # es folgt eine Bastelheuristik, die die in der Kartenliste
     # auftretenden NPC-Namen mit denen aus der NPC-Liste in Ein-
     # klang bringt (Worttrennung entfernen usw.)
     $tmpname = $npcname;
     $tmpname =~ s/- //g;
     if (!defined($npc{$tmpname}))
     {
         $tmpname = $npcname;
         $tmpname =~ s/- /-/g;
         if (!defined($npc{$tmpname}))
         {
             $tmpname = ucfirst($npcname);
             $tmpname =~ s/- //g;
             if (!defined($npc{$tmpname}))
             {
                 $tmpname = ucfirst($npcname);
                 $tmpname =~ s/- /-/g;
             }
         }
     }
     if (!defined($npc{$tmpname}))
     {
         # evtl. Warnung ausgeben
     }
     else
     {
         # Ausgabe: X,Y,Farbcode
         printf "$x,$y,%d\n", npclass($npc{$tmpname});
     }
 }
 
 # NPCs in eine Klasse von 1 (schwach) bis 9 (stark) einordnen.
 # Geschieht hier einfach durch eine Betrachtung des Produkts
 # aus LP und A.
 sub npclass
 {
     my ($npc)=@_;
     my $i = $npc->{"lp"}*$npc->{"atk"};
     return 1 if ($i<8);
     return 2 if ($i<18); 
     return 3 if ($i<31);
     return 4 if ($i<51); 
     return 5 if ($i<201);
     return 6 if ($i<2001); 
     return 7 if ($i<10001); 
     return 8 if ($i<100001);
     return 9;
 }