プレーヤー情報記録 ■機能説明 プレーヤーに遭遇するとそのプレーヤーの情報を記録します。 前のコードからの改良点は ・情報が更新されている場合更新する ・GameMasterの場合、通常プレーヤーと別ファイルに記録 ・GameMasterの場合、Mapごとに記録、遭遇時間記録 ■使用方法 コード追加。 あとはファイルに記録されていきます。 ■予定 GameMaster用のデータを表示するコマンド作成 ----- [kore.pl] } elsif ($switch eq "0095") { $ID = substr($msg, 2, 4); if (%{$players{$ID}}) { ($players{$ID}{'name'}) = substr($msg, 6, 24) =~ /([\s\S]*?)\000/; + RecordPlayerData($ID); ----- [kore.pl] } elsif ($switch eq "0195") { $ID = substr($msg, 2, 4); if (%{$players{$ID}}) { ($players{$ID}{'name'}) = substr($msg, 6, 24) =~ /([\s\S]*?)\000/; ($players{$ID}{'party'}{'name'}) = substr($msg, 30, 24) =~ /([\s\S]*?)\000/; ($players{$ID}{'guild'}{'name'}) = substr($msg, 54, 24) =~ /([\s\S]*?)\000/; ($players{$ID}{'guild'}{'men'}{$players{$ID}{'name'}}{'title'}) = substr($msg, 78, 24) =~ /([\s\S]*?)\000/; + RecordPlayerData($ID); ----- [kore.pl] +sub RecordPlayerData { + my $ID = shift; + if ($players{$ID}{'name'} =~ /^GM/) { # GameMaster + # ファイルが存在しなければ作成 + unless (-e "$servers[$config{'server'}]{'name'}GameMaster.txt") { + open (FILE,">$servers[$config{'server'}]{'name'}GameMaster.txt"); + close (FILE); + } + # 現在のマップ名取得 + my ($GM_map_name, $temp) = split /\./ , $map_name; + # 情報を記録 + my @temp = undef; + my $flag = undef; + open (FILE,"+<$servers[$config{'server'}]{'name'}GameMaster.txt"); + while () { + chomp; + if (/^$GM_map_name\:/) { + my ($temp, $data) = split /\:/; + my @data = split /<>/ , $data; + my $GMdata .= "$GM_map_name\:"; + foreach (@data) { + if (/^$players{$ID}{'name'}\,/) { + my (@GMdata) = split /\,/; + $GMdata[2] += 1; + $GMdata[3] .= "|" . time; + $GMdata .= "$GMdata[0],$GMdata[1],$GMdata[2],$GMdata[3]<>"; + $flag = 1; + } else { + $GMdata .= "$_<>"; + } + } + if ($flag eq '') { # 新規追加 + $GMdata .= "$players{$ID}{'name'}," . getHex($ID) . ",1,". time ."<>\n"; + } + push (@temp,"$GMdata\n"); + $flag = 1; + } else { + push (@temp,"$_\n"); + } + } + if ($flag eq '') { # 新規追加 + push (@temp,"$GM_map_name:$players{$ID}{'name'}," . getHex($ID) . ",1,". time ."<>\n"); + } + truncate(FILE, 0); + seek(FILE, 0, 0); + print FILE @temp; + close(FILE); + # GameMasterの情報を記録したことを表示 + print "*** GameMaster $players{$ID}{'name'} の情報を記録しました。 ***\n"; + } else { # 一般プレイヤー + # ファイルが存在しなければ作成 + unless(-e "$servers[$config{'server'}]{'name'}PlayerData.txt"){ + open(FILE,">$servers[$config{'server'}]{'name'}PlayerData.txt"); + close(FILE); + } + # 情報を記録 + my @temp = undef; + my $flag = undef; + open(FILE,"+<$servers[$config{'server'}]{'name'}PlayerData.txt"); + while(){ + chomp; + my @data = split /\,/; + if ($players{$ID}{'name'} eq $data[0]) { + if (getHex($ID) ne $data[1] + || $players{$ID}{'party'}{'name'} ne $data[2] + || $players{$ID}{'guild'}{'name'} ne $data[3] + || $players{$ID}{'guild'}{'men'}{$players{$ID}{'name'}}{'title'} ne $data[4] + || $players{$ID}{'jobID'} ne $data[5] + || $players{$ID}{'sex'} ne $data[6] ) { + push(@temp,"$players{$ID}{'name'},".getHex($ID).",$players{$ID}{'party'}{'name'},$players{$ID}{'guild'}{'name'},$players{$ID}{'guild'}{'men'}{$players{$ID}{'name'}}{'title'},$players{$ID}{'jobID'},$players{$ID}{'sex'},".int(time)."\n"); + $flag = 1; + } else { # 更新がなかった + undef @temp; + return 0; + } + } else { + push(@temp,$_."\n"); + } + } + if ($flag eq '') { # 新規追加 + push(@temp,"$players{$ID}{'name'},".getHex($ID).",$players{$ID}{'party'}{'name'},$players{$ID}{'guild'}{'name'},$players{$ID}{'guild'}{'men'}{$players{$ID}{'name'}}{'title'},$players{$ID}{'jobID'},$players{$ID}{'sex'},".int(time)."\n"); + } + truncate(FILE, 0); + seek(FILE, 0, 0); + print FILE @temp; + close(FILE); + # プレイヤーの情報を記録したことを表示 + print "*** $players{$ID}{'name'} の情報を記録しました。 ***\n"; + } +}