#!usr\bin\perl use warnings; use Encode qw/encode decode/; # Revision 2: 12/14/2006 ## Modify this for the Multiplayer path #$main_dir = 'C:/Documents and Settings/David/My Documents/My Games/Freelancer/Accts/MultiPlayer'; $main_dir = 'C:/Documents and Settings/Administrator/My Documents/My Games/Freelancer/Accts/MultiPlayer'; ## Nothing should be modified below this line. # Packed with: UTF-16BE $u = '[O]'; $v = '005b004f005d'; print decode("UTF-16BE",(pack "H*", $v)); print unpack "H*", (encode("UTF-16BE", $u)); opendir(MAINDIR, "$main_dir") || die "Can't open $main_dir: $!\n"; @folders = readdir(MAINDIR); foreach $folder (@folders) { if ((-d "$main_dir/$folder") and ($folder ne ".") and ($folder ne "..")){ opendir(PFOLDER, "$main_dir/$folder"); @player_file = readdir(PFOLDER); foreach $player_file (@player_file) { if ($player_file =~ ".fl"){ decode2(); editor(); } } } } ####################Decoder##################################################### sub decode2 { my @gene = qw/G e n e/; open(PFILE,"$main_dir/$folder/$player_file"); open(TEMPDATA, ">$main_dir/pfile.tmp"); seek(PFILE,4,0); my ($i,$r,$c,$k); $i = 0; while(read(PFILE,$c,1)) { $k = (ord($gene[$i % 4]) + $i) % 256; $r = ord($c) ^ ($k | 0x80); print (TEMPDATA chr($r)); $i++; } } #############Start of Editing################################################### sub editor { my $out; my %ini; my @houses; open(TEMPDATA, "<$main_dir/pfile.tmp"); open(EDITED, ">$main_dir/pfile1.tmp"); foreach $line () { chomp $line; if ($line =~ /\[([^\]]+)\]/) { $section = $1; } elsif ($line =~ /^\s*(.+?)\s*=\s*(.+?)\s*$/) { ($var,$value) = ($1,$2); push(@{$ini{$section}{$var}},$value); } } if (@{$ini{Player}{system}}[0] eq "SO01"){ foreach $house (@{$ini{Player}{house}}) { ($num,$fact) = split(/,/,$house); next if ($fact eq " so_grp"); if (($fact eq " O_grp" && $num >= 0.5)) { @{$ini{Player}{system}} = 'O01'; @{$ini{Player}{base}} = 'O01_01_Base'; push(@houses, '0.99, O_grp'); push(@houses, '-0.99, X_grp'); @{$ini{Player}{money}} = '100000'; $ini{Player}{name}->[0] = "005b004f005d$ini{Player}{name}->[0]"; next; } elsif ($fact eq " X_grp" && $num >= 0.5) { @{$ini{Player}{system}} = 'X01'; @{$ini{Player}{base}} = 'X01_01_Base'; push(@houses, '0.99, X_grp'); push(@houses, '-0.99, O_grp'); @{$ini{Player}{money}} = '100000'; $ini{Player}{name}->[0] = "005b0058005d$ini{Player}{name}->[0]"; next; } elsif ($fact eq " pvp_grp" && $num >= 0.5) { @{$ini{Player}{system}} = 'PVP01'; @{$ini{Player}{base}} = 'PVP01_01_Base'; @{$ini{Player}{money}} = '999999999'; $ini{Player}{name}->[0] = "005b005000560050005d$ini{Player}{name}->[0]"; next; } push(@houses,$house); } @{$ini{Player}{house}} = @houses; foreach $section (keys %ini) { $out .= "[$section]\n"; foreach $var (keys %{$ini{$section}}) { foreach $value (@{$ini{$section}{$var}}) { $out .= "$var = $value\n"; } } } print EDITED $out; close EDITED; close TEMPDATA; encode2(); }else { close TEMPDATA; unlink "$main_dir/pfile.tmp"; } } #############End of Editing################################################### sub encode2 { my @gene = qw/G e n e/; open(PFILE,">$main_dir/$folder/$player_file"); open(EDITED, "<$main_dir/pfile1.tmp"); print PFILE "FLS1"; my ($i,$r,$c,$k); $i = 0; while(read(EDITED,$c,1)) { $k = (ord($gene[$i % 4]) + $i) % 256; $r = ord($c) ^ ($k | 0x80); print PFILE (chr($r)); $i++; } #############Clean Up################################################### close TEMPDATA; close EDITED; close PFILE; unlink "$main_dir/pfile.tmp"; unlink "$main_dir/pfile1.tmp"; }