use strict qw(vars subs); use warnings; use vars qw($ScriptName); use vars qw(%in @Log $Day $ID $PASS $VillageNm $VillageName %Char $LoginFlag $EndFlag); #my (%in,%Char,@Log,$ID,$PASS,$Day,$LoginFlag,$EndFlag,$VillageNm,$VillageName,$ajax,$footer); # # &Output2( # 'in' =>{}, # 'Char'=>{}, # 'Log' =>[], # 'ID' =>'temp', # 'PASS'=>'temp', # 'Day' =>0, # 'LoginFlag' =>1, # 'EndFlag' =>1, # 'VillageNm' =>0, # 'VillageName'=>'test' # ); # exit; my ($ajax,$footer); $footer=''; sub Output { if($in{ajax} and $in{Last}) { &DispAjaxText(); } else { &DispHTML(); } exit; } sub Output2 { my %args = @_; %in = %{$args{'in' }}; %Char= %{$args{'Char'}}; @Log = @{$args{'Log'}}; $ID = $args{'ID'}; $PASS= $args{'PASS'}; $Day = $args{'Day'}; $LoginFlag = $args{'LoginFlag'}; $EndFlag = $args{'EndFlag'}; $VillageNm = $args{'VillageNm'}; $VillageName = $args{'VillageName'}; &Output(); } #--------------------------------------- sub error { if($in{ajax} and $in{Last}) { print "Content-Type: text/xml; charset=utf-8\n\n"; print "-1\n"; print shift; } else { print <<"ERROR_END"; Content-type: text/html error $_[0]
戻る ERROR_END } exit; } #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ sub DispHTML { @Log=grep{($in{Day}?$in{Day}-1:$Day)==$_->{'Day'}}@Log; # ○HEADER部 my $Cookie=''; if($LoginFlag) { my @TIM=split(/ +/,localtime(time+86400000)); my $TIM2=$TIM[0].', '.join('-',@TIM[2,1,4]).' '.$TIM[3].' GMT'; $Cookie="Set-Cookie:jinro=${ID}_$PASS; expires=$TIM2;\n"; } print <<"HEADER_END"; Content-type:text/html $Cookie 人狼怪奇ファイル:$VillageName HEADER_END #----------------------------------------------------------- if($in{'ajax'}) { print <<'JAVA_SCRIPT_END'; JAVA_SCRIPT_END print ""; $ajax=' onSubmit="Send(this);return false;" '; } #----------------------------------------------------------- else { print "\n"; } #----------------------------------------------------------- print <<"HEADER2_END";
HEADER2_END #----------------------------- unless($LoginFlag) { print <<"LOGIN_FORM_END";
user_id : password :
LOGIN_FORM_END } #------------------- print "\n$VillageName\n

\n"; #=========================================================== # ○BODY &DispDays(); unless ($in{ajax}) { &DispLogs(); } else { print '

'; } &DispForm() ; #=========================================================== print <<"FOOTER_END";
議事録を見るトップページに戻る
$footer FOOTER_END } #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ sub DispAjaxText { my $Last = $Log[-1]{Time}; print "Content-Type: text/xml; charset=utf-8\n\n"; print "$Last\n"; exit if $in{Last} eq $Last; my $today; my $LastDay=$Log[$#Log]{'Day'}; if($in{Last}==1) { $today=$LastDay; } else { $today = $Log[&BinarySearch($in{'Last'},@Log)]{'Day'}; } @Log=@Log[&BinarySearch($in{'Last'}+1,@Log) .. $#Log]; @Log=grep{ $_->{'Day'} == $today }@Log; #これも後でバイナリサーチに置き換え @Log=GrepLog(@Log); my %Conv=( 'MES'=>'say', 'WIS'=>'whisper', 'GROAN'=>'groan', 'MEMO'=>'think', 'SYS'=>'SYS', 'POW'=>'SYS' ); foreach(@Log) { print "$Char{$_->{'ID'}}{'Name'},$Conv{$_->{'Type'}},$_->{'Time'},$_->{'Message'}\n"; } if( $today != $LastDay ) { print ",Next,,\n"; } } #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ #◆ログ表示◆ sub DispLogs { #0=>通常発言、1=>独り言、2=>人狼会話、3=>墓会話、4=>アナウンス、5=>投票結果表示,6=>能力結果表示,7=>襲撃結果表示 print "\n
\n"; @Log=GrepLog(@Log); unless($in{'ALL'}) { @Log=@Log[(@Log<15?0:@Log-15)..$#Log]; } foreach(@Log) { if(defined(&{'Disp'.$_->{'Type'}})) { &{'Disp'.$_->{'Type'}}($_); } } print "\n
\n"; } #◆各ログの処理◆ sub DispMES { &DispMessage(shift,'say'); } sub DispWIS { &DispMessage(shift,'whisper'); } sub DispGROAN { &DispMessage(shift,'groan'); } sub DispMEMO { &DispMessage(shift,'think'); } sub DispKILL { &DispMessage(shift,'whisper'); } sub DispSYS { &DispSysMessage(shift); } sub DispPOW { &DispSysMessage(shift); } #--------------------------------------- #◆ログ表示のサブルーチン◆ my @Position=(' center',' left',' right'); sub DispMessage { my %Log =%{$_[0]}; my $Detail=$_[1]; my %C =%{$Char{$Log{'ID'}}}; print <<"MESSAGE_H_END";
$C{'Job'} $C{'Name'} @{[&DispTime($Log{'Time'})]} MESSAGE_H_END unless($Log{'Side'}) { print <<"MESSAGE_B_END"; MESSAGE_B_END } else { print <<"MESSAGE_B2_END"; MESSAGE_B2_END } print "\n
$Log{'Message'}
$Log{'Message'}
\n
\n"; } #------------------- sub DispSysMessage { my %Log =%{$_[0]}; print <<"MESSAGE_END"
$Log{'Message'}
MESSAGE_END } #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ sub DispForm { if($LoginFlag) { &DispActionForm(); } elsif($Day==0) { &DispEntryForm(); } } #=========================================================== sub DispEntryForm { print <<"ENTRY_FORM_END";
望む配役とキャラの名前、
そして登場時のセリフを入力してください。
ID  : PASS:
Name:
希望: Ajaxモード:

ID、passは再ログイン時に使用します。
IDは村終了後に公開されます。普段使用しているHN等でどうぞ。
Nameには村の中で使用する名前を入力してください。

「ゲーム開始」を押すと1日目が始まります。
占い師が占い先を指定すると2日目が始まります。
それ以降は、全員が投票先を指定した時点で日付が変わります。
ENTRY_FORM_END $footer=''; } #=========================================================== sub DispActionForm { print <<"FORM_HEADER_END";
$Char{$ID}{'Job'} $Char{$ID}{'Name'} FORM_HEADER_END #----------------------------- # ○投票フォーム if ($Day>=2 and !$EndFlag and $Char{$ID}{'State'} ne 'Dead' ) { print <<"VOTE_FORM_END";
投票:
VOTE_FORM2_END } #----------------------------- print <<"CHAT_FORM_END";

CHAT_FORM_END unless($ajax) { print qq(); } else { print qq(); print qq(); } #----------------------------- if ($Day>=1 and !$EndFlag and $Char{$ID}{'State'} ne 'Dead') { print ' 独り言' ; print ' 議事録に残す' ; } print '
'; if ($Day==1) { if ($Char{$ID}{'Role'} ne 'Shaman') { if ($Char{$ID}{'Vote'} ne '') { print <<"UPDATE_CANCEL_FORM_END";
UPDATE_CANCEL_FORM_END } else { print <<"UPDATE_CANCEL_FORM2_END";
UPDATE_CANCEL_FORM2_END } } } if ($Day==0 and keys(%Char)>=6) { print <<"START_FORM_END";
START_FORM_END } if ($EndFlag) { print <<"FORMAT_FORM_END";
FORMAT_FORM_END } #★能力用フォーム表示 if (!$EndFlag and $Char{$ID}{'State'} ne 'Dead') { if(defined(&{'Power'.$Char{$ID}{'Role'}})) { &{'Power'.$Char{$ID}{'Role'}}; } } print <<'FOOTER_END';
FOOTER_END } #=========================================================== sub DispCharList { my $s=shift; print qq(