require 'ebs_sub2.cgi'; require 'doumei.cgi'; $alliance_num = 2; #最大同盟国数(0は無制限) $penalty_money = 1000; #強制破棄で減る国費の額(0はペナルティなし) sub ALLIANCE_START{ #エントリ $gErrMSG_Al = ''; #エラーメッセージ my %aCookie = (); if(&nazGetCookie(\%aCookie,$ENV{'HTTP_COOKIE'}) != 0) { &ERROR('COOKIEが無効になっています。'); } &DBM_INPORT(P); &DBM_INPORT(C); my @aSelfPerson = split(/\s/,$P{$aCookie{'pname'}}); my @aSelfCntry = split(/\s/,$C{$aSelfPerson[5]}); &ERROR('Passwordが無効です。') if crypt("$aCookie{'pass'}",eb) ne "$aSelfPerson[2]"; if($FORM{'CNTRY'} eq "") { #表示のみのものはさっさと返す &HEADER; &AL_VIEW(\%C, \@aSelfPerson); &FOOTER; return; } #操作系で権限がない時はエラー if( &AL_AUTHORITYCHECK($aSelfPerson[6]) != 0 ) { &ERROR( $gErrMSG_Al ); } #各操作系コマンド実行 if ($FORM{'ALLIANCE'} eq "締結") { &AL_JOIN($aSelfPerson[5], $FORM{'CNTRY'}); } elsif ($FORM{'ALLIANCE'} eq "破棄") { &AL_CANCEL($aSelfPerson[5],$FORM{'CNTRY'}); } elsif ($FORM{'ALLIANCE'} eq "強制破棄") { &LOCK; dbmopen (%CNTRY,"$DBM_C",0666); &AL_FORCECANCEL(\%CNTRY, $aSelfPerson[5], $FORM{'CNTRY'}); dbmclose %CNTRY; &UNLOCK; } if($gErrMSG_Al ne '') { #上の操作でエラーになっているのでエラーメッセージ表示 &ERROR( $gErrMSG_Al ); } &HEADER; &AL_VIEW(\%C, \@aSelfPerson); &FOOTER; } sub AL_VIEW{ #状態表示(すべての国DataRef,自分のDataRef) my $aAllCntry = shift; my $aSelfPerson = shift; if($aSelfPerson->[5] eq "") { $gErrMSG_Al = "$aNone_NATIONALITYは同盟を組めません。"; return; } my $aNone = '
'; print << "END_OF_HTML";
END_OF_HTML my $i=0; my @aTargCntry = (); foreach $aName (keys %$aAllCntry) { if( $aName eq $aSelfPerson->[5] ){ next; } @aTargCntry = split(/\s/,$aAllCntry->{$aName}); print "\n"; if(&allianceCheck($aSelfPerson->[5],$aName) == 0){ print "\n"; if($gStatus & $gStatusFlag[2]){ print ""; }elsif($gStatus & $gStatusFlag[3]){ print ""; }else{ print ""; } if($aTargCntry[5] and $aTargCntry[7] > time){ print "\n"; print "\n"; }else{ print "\n"; } }else{ print "\n"; if($gStatus & $gStatusFlag[0]){ print ""; }elsif($gStatus & $gStatusFlag[1]){ print ""; }else{ print ""; } print "\n"; } $i++; } print << "END_OF_HTML";
国名状態行動発動中の戦略援護
\n"; print "$aName同盟国破棄申\込済破棄申\込有$aNone$aTargCntry[5]
$aNone$aNone
非同盟国締結申\込済締結申\込有$aNone不明不可
END_OF_HTML if($penalty_money == 0){ print "\n"; }else{ print "\n"; &JScfm(penalty_check,"国費が\$ $penalty_money減ります。よろしいですか?"); } print "
\n"; } sub AL_JOIN{ #締結(自国,相手国) my $aSelfCntryName = shift; my $aTargCntryName = shift; my $count = ''; $count = &AL_LIST(\%C,$aSelfCntryName); if($alliance_num and $count + 1 > $alliance_num){ $gErrMSG_Al = 'これ以上同盟を結べません。'; return; } $count = &AL_LIST(\%C,$aTargCntryName); if($alliance_num and $count + 1 > $alliance_num){ $gErrMSG_Al = '相手国はこれ以上同盟を結べません。'; return; } if(&allianceJoin($aSelfCntryName,$aTargCntryName) != 0){ $gErrMSG_Al = $gErrMSG; return; } } sub AL_CANCEL{ #破棄(自国,相手国) my $aSelfCntryName = shift; my $aTargCntryName = shift; if(&allianceCancel($aSelfCntryName,$aTargCntryName) != 0){ $gErrMSG_Al = $gErrMSG; return; } } sub AL_FORCECANCEL{ #強制破棄(すべての国,自国,相手国) my $aAllCntry = shift; my $aSelfCntryName = shift; my $aTargCntryName = shift; my @aSelfCntry = split(/\s/,$aAllCntry->{$aSelfCntryName}); if($aSelfCntry[1] < $penalty_money) { $gErrMSG_Al = "国費が足りません。"; return; } if(&allianceForceCancel($aSelfCntryName,$aTargCntryName) != 0) { $gErrMSG_Al = $gErrMSG; return; } $aSelfCntry[1] -= $penalty_money; $aAllCntry->{$aSelfCntryName} = "@aSelfCntry"; } sub AL_AUTHORITYCHECK{ #隊長総帥以外はガード(自分のランク) my $aMRank = shift; if($aMRank == 0){ $gErrMSG_Al = '隊長、総帥ランク以外は同盟交渉できません。'; return -1; } return 0; } sub AL_LIST{ #対象の国の同盟国のリストを返す my $aAllCntry = shift; my $aTargCntryName = shift; my @country = (); foreach $aName (keys %$aAllCntry) { if($aName eq $aTargCntryName){ next;} if(&allianceCheck($aTargCntryName,$aName) == 0){ push(@country,$aName); } } return @country; } sub AL_YOUSAITIMECHECK{ #対象国が同盟国の戦略発動先かチェック(すべての国DataRef,自国,相手国) my $aAllCntry = shift; my $aSelfCntryName = shift; my $aTargCntryName = shift; my @aAllianceCntry = (); foreach $aName (&AL_LIST($aAllCntry,$aSelfCntryName)) { @aAllianceCntry = split(/\s/,$aAllCntry->{$aName}); if($aAllianceCntry[6] eq $aTargCntryName and $aAllianceCntry[7] > time ){ return $aAllianceCntry[7]; #同盟国の戦略の期限 } } return 0; } sub nazGetCookie{ #クッキー取得(格納するHashRef,元Data) my $aCkHash = shift; my $aCkData = shift; my @aPair = (); my $aEBData = ''; @aPair = split(/;/, $aCkData); foreach (@aPair) { my ($aKey, $aVal) = split(/=/); if($aKey eq 'EB') { $aEBData = $aVal; last; } } @aPair = split(/,/, $aEBData); foreach (@aPair) { my($aKey, $aVal) = split(/:/); $aCkHash->{"$aKey"} = $aVal; } return 1 if !$aCkHash->{'pname'}; return 0; } 1;