gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

FF XI のマクロをPerlで切り出す

えっと…本気でメモなのですが。
Final Fantasy XI online ってのがありまして。で、PC(Windows)版ってのがあるのですが。
マクロ周りでチェックをいれてみたのですが…
mcr9.dat
とかって名前で入ってるのはいいのですが…もろバイナリなんです。
んで…私のように「PS2と混在」の場合、とりあえずPC版のマクロのリストとかが作りたくなりまして。でもバイナリを読み上げるのはちょっと人としてどうかと思いまして。


でまぁ「取り合えず簡易的に抜き出すっぽいPerl」を作りました。
文字コードは変換してないですし(元々はShift JIS)、かなり作りも荒いのですが。
まぁ本格的に使いたかったら適当に修正してください :-P


ってか…同アカウント内であれば、PCとPS2とでマクロのやり取りくらい通信とかでやりたいよぉ ;;


そうそう。
tab変換した文字列は、:で囲まれてよくわからんバイナリ化しています。
そんなんの辞書なんぞ用意するほど丁寧じゃありません(笑


#!/usr/bin/perl

$fn = "./" . $ARGV[0];

open (IN, $fn);
$data = "";
while() {
$data .= $_;
}
close(IN);

#
my @ret;
$count = 0;

sub cut { my ($a) = @_; $count += $a; }
sub add {
my ($a) = @_;
$wk = substr($data, $count, $a);
$wk =~ s/[\x00]//g ;
$wk =~ s/[\xFD]/:/g ;
$count += $a;
push @ret, $wk;
}

# 初期ヘッダ切り出し
cut(28);

# データ取得
for($i = 0; $i < 20; $i ++) {
add(61);
add(61);
add(61);
add(61);
add(61);
add(61);
add(14); # タイトル
push @ret, "------";
}

# 出力
$fn = $fn . ".txt";
open (OUT, "> $fn");
foreach $wk (@ret) {
print OUT $wk . "\r\n";
}
close(OUT);