Kategorien
Benutzer:Count Ypsilon/Skript:mapcolor.pl
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 sub trim{ my $s = shift; $s =~ s/^\s+|\s+$//g; return $s; } open(NPC, "npclist.out"); while(<NPC>) { chomp; my ($name, $atk, $lp, $xp, $gm) = split(/;/); $name = trim($name); $npc{$name}->{"atk"}=$atk; $npc{$name}->{"lp"}=$lp; $npc{$name}->{"xp"}=$xp; $npc{$name}->{"gm"}=$gm; # print "name=$name, atk=$atk, lp=$lp, xp=$xp, gm=$gm\n"; } close(NPC); # Liste der Kartenfelder einlesen # Format: # Gebietsname,X,Y,NPC-Name open(MAP, "maplist.out"); while(<MAP>) { chomp; my ($mapname, $begehbar, $x, $y, $npcname) = split(/;/); $npcname = trim($npcname); $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; if (!defined($npc{$tmpname})) { $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 printf STDERR "$tmpname nicht definiert\n" unless $tmpname eq ""; } 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; }