www.pudn.com > sangoku_26_zh_tw.rar > battle.cgi


 
# 戰鬥處理 # 
 
sub BATTLE { 
	open(IN,"$COUNTRY_LIST"); 
	@COU_DATA = ; 
	close(IN); 
	@NEW_COU_DATA=(); 
	$zvhit=0; 
	foreach(@COU_DATA){ 
		($xvcid,$xvname,$xvele,$xvmark,$xvking,$xvmes,$xvsub,$xvpri)=split(/<>/); 
		if($xvcid eq $zcon){$zvhit=1;last;} 
	} 
	if($zvhit && $xvmark < $BATTLE_STOP){ 
		&K_LOG("$mmonth月:$xvname 還不能攻擊該國家。($xvmark 回合)"); 
	}else{ 
		&COUNTRY_DATA_OPEN("$kcon"); 
		if($xmark < $BATTLE_STOP){ 
			&K_LOG("$mmonth月:$xname 還不能攻擊該國家。($xmark 回合)"); 
		}else{ 
			open(IN,"$DEF_LIST"); 
			@DEF_LIST3 = ; 
			close(IN); 
			$d_hit=0; 
			foreach(@DEF_LIST3){ 
				($mdid,$mdname,$mdtown_id,$mdtown_flg,$mdcon) = split(/<>/); 
				if($cnum eq $mdtown_id){ 
					$d_hit=1;last; 
				} 
			} 
			$katt_add2 = 0; 
			if("$xdai" eq "$kid"){ 
				$katt_add2 = 10; 
			}elsif("$xuma" eq "$kid"){ 
				if($ksub1_ex eq "3"){ 
					$katt_add2 = 10; 
				} 
			}elsif("$xgoei" eq "$kid"){ 
				if($ksub1_ex eq "2"){ 
					$katt_add2 = 10; 
				} 
			}elsif("$xyumi" eq "$kid"){ 
				if($ksub1_ex eq "1"){ 
					$katt_add2 = 10; 
				} 
			}elsif("$xhei" eq "$kid"){ 
				if($ksub1_ex eq "0"){ 
					$katt_add2 = 10; 
				} 
			} 
 
			$kcex += 20; 
			&MAP_LOG("$xname 國$kname武將 出兵向$zname發動戰爭!"); 
			$eid=""; 
			if($d_hit){ 
				open(IN,"./charalog/main/$mdid\.cgi"); 
				@E_DATA = ; 
				close(IN); 
				($eid,$epass,$ename,$echara,$estr,$eint,$elea,$echa,$esol,$egat,$econ,$egold,$erice,$ecex,$eclass,$earm,$ebook,$ebank,$esub1,$esub2,$epos,$emes,$ehost,$edate,$email,$eos) = split(/<>/,$E_DATA[0]); 
($estr_ex,$eint_ex,$elea_ex,$echa_ex,$esub1_ex,$esub2_ex) = split(/,/,$esub1); 
				$last_battle=0; 
			}else{ 
				$ename = "城牆"; 
				$esol = $zshiro; 
				$estr = int($zdef_att/15)+30; 
				$egat = 60; 
				$last_battle=1; 
				$esub1_ex=""; 
			} 
 
			&K_LOG2("$mmonth月:$xname 國$kname武將 出兵向$zname發動戰爭!"); 
			&E_LOG2("$mmonth月:$xname 國$kname武將 與 $ename武將 發生戰鬥!"); 
 
			&CHARA_ITEM_OPEN; 
 
			if($ksub1_ex eq "1"){ 
				$katt_add = 30; 
				$katt_def = 10; 
			}elsif($ksub1_ex eq "2"){ 
				$katt_add = 60; 
				$katt_def = 40; 
			}elsif($ksub1_ex eq "3"){ 
				$katt_add = 10; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "4"){ 
				$katt_add = 50; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "5"){ 
				$katt_add = 110; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "6"){ 
				$katt_add = 0; 
				$katt_def = 15; 
			}elsif($ksub1_ex eq "7"){ 
				$katt_add = 20; 
				$katt_def = 40; 
			}elsif($ksub1_ex eq "8"){ 
				$katt_add = 40; 
				$katt_def = 80; 
			}elsif($ksub1_ex eq "9"){ 
				$katt_add = 20; 
				$katt_def = 5; 
			}elsif($ksub1_ex eq "10"){ 
				$katt_add = 45; 
				$katt_def = 25; 
			}elsif($ksub1_ex eq "11"){ 
				$katt_add = 90; 
				$katt_def = 40; 
			}elsif($ksub1_ex eq "12"){ 
				$katt_add = $kint; 
				$katt_add += 60; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "13"){ 
				$katt_add = $kint; 
				$katt_add += 30; 
				$katt_def = $kint; 
				$katt_def += 50; 
			}elsif($ksub1_ex eq "14"){ 
				$katt_add = $kint; 
				$katt_add += 100; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "15"){ 
				$katt_add = $kint; 
				$katt_add += 110; 
				$katt_def = $kint; 
				$katt_def += 10; 
			}elsif($ksub1_ex eq "16"){ 
				$katt_add = $kint; 
				$katt_add += 120; 
				$katt_def = $kint; 
				$katt_def += 20; 
			}elsif($ksub1_ex eq "17"){ 
				$katt_add = $kcha; 
				$katt_add += 90; 
				$katt_def = 0; 
			}elsif($ksub1_ex eq "18"){ 
				$katt_add = $kcha; 
				$katt_add += 100; 
				$katt_def = $kcha; 
				$katt_def += 10; 
			}elsif($ksub1_ex eq "19"){ 
				$katt_add = $kcha; 
				$katt_add += 110; 
				$katt_def = $kcha; 
				$katt_def += 20; 
			}else{ 
				$katt_add = 0; 
				$katt_def = 0; 
			} 
 
			if($esub1_ex eq "1"){ 
				$eatt_add = 30; 
				$eatt_def = 10; 
			}elsif($esub1_ex eq "2"){ 
				$eatt_add = 60; 
				$eatt_def = 40; 
			}elsif($esub1_ex eq "3"){ 
				$eatt_add = 10; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "4"){ 
				$eatt_add = 50; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "5"){ 
				$eatt_add = 110; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "6"){ 
				$eatt_add = 0; 
				$eatt_def = 15; 
			}elsif($esub1_ex eq "7"){ 
				$eatt_add = 20; 
				$eatt_def = 40; 
			}elsif($esub1_ex eq "8"){ 
				$eatt_add = 40; 
				$eatt_def = 80; 
			}elsif($esub1_ex eq "9"){ 
				$eatt_add = 20; 
				$eatt_def = 5; 
			}elsif($esub1_ex eq "10"){ 
				$eatt_add = 45; 
				$eatt_def = 25; 
			}elsif($esub1_ex eq "11"){ 
				$eatt_add = 90; 
				$eatt_def = 40; 
			}elsif($esub1_ex eq "12"){ 
				$eatt_add = $eint; 
				$eatt_add += 60; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "13"){ 
				$eatt_add = $eint; 
				$eatt_add += 30; 
				$eatt_def = $eint; 
				$eatt_def += 50; 
			}elsif($esub1_ex eq "14"){ 
				$eatt_add = $eint; 
				$eatt_add += 100; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "15"){ 
				$eatt_add = $eint; 
				$eatt_add += 110; 
				$eatt_def = $eint; 
				$eatt_def += 10; 
			}elsif($esub1_ex eq "16"){ 
				$eatt_add = $eint; 
				$eatt_add += 120; 
				$eatt_def = $eint; 
				$eatt_def += 20; 
			}elsif($esub1_ex eq "17"){ 
				$eatt_add = $echa; 
				$eatt_add += 90; 
				$eatt_def = 0; 
			}elsif($esub1_ex eq "18"){ 
				$eatt_add = $echa; 
				$eatt_add += 100; 
				$eatt_def = $echa; 
				$eatt_def += 10; 
			}elsif($esub1_ex eq "19"){ 
				$eatt_add = $echa; 
				$eatt_add += 110; 
				$eatt_def = $echa; 
				$eatt_def += 20; 
			}else{ 
				$eatt_add = 0; 
				$eatt_def = 0; 
			} 
 
			$katt = int(($kstr + $karmdmg + $katt_add + $katt_add2 - $eatt_def - int($egat / 2.5))/8); 
			if($katt < 0){$katt = 0;} 
			$eatt = int(($estr + $earmdmg + $eatt_add - $katt_def - int($kgat / 2.5))/8); 
			$kex_add=0; 
			$eex_add=0; 
			if($eatt < 0){$eatt = 0;} 
			$win=0; 
			for($count=0;$count<50;$count++){ 
				$kdmg=0; 
				$edmg=0; 
				if($ksol <= 0){last;} 
				$kdmg = int(rand($katt)); 
				if($kdmg <= 0){$kdmg=1;} 
				$wsol = $esol; 
				$esol -= $kdmg; 
				 
				$kex_add += ($wsol - $esol); 
				if($esol <= 0){ 
					$esol=0; 
					&K_LOG2("回合 $count:$kname $SOL_TYPE[$ksub1_ex] $ksol人 ↓\(-$edmg\) |$ename $SOL_TYPE[$esub1_ex] $esol人 ↓\(-$kdmg\)"); 
					&E_LOG2("回合 $count:$kname $SOL_TYPE[$ksub1_ex] $ksol人 ↓\(-$edmg\) |$ename $SOL_TYPE[$esub1_ex] $esol人 ↓\(-$kdmg\)"); 
					$win = 1;last; 
				} 
 
				$edmg = int(rand($eatt)); 
				if($edmg <= 0){$edmg=1;} 
				$wsol = $ksol; 
				$ksol -= $edmg; 
				$eex_add += ($wsol - $ksol); 
				if($ksol <= 0){ 
					$ksol=0; 
					&K_LOG2("回合$count:$kname $SOL_TYPE[$ksub1_ex] $ksol人 ↓\(-$edmg\) |$ename $SOL_TYPE[$esub1_ex] $esol人 ↓\(-$kdmg\)"); 
					&E_LOG2("回合$count:$kname $SOL_TYPE[$ksub1_ex] $ksol人 ↓\(-$edmg\) |$ename $SOL_TYPE[$esub1_ex] $esol人 ↓\(-$kdmg\)"); 
					last; 
				} 
				&K_LOG2("回合$count:$kname $SOL_TYPE[$ksub1_ex] $ksol人 ↓\(-$edmg\) |$ename $SOL_TYPE[$esub1_ex] $esol人 ↓\(-$kdmg\)"); 
			} 
 
			$eex_add = int($eex_add/2); 
			$kex_add = int($kex_add/2); 
			if($win){ 
				$ksub2_ex++; 
				if($last_battle){ 
					if($town_get[$zcon] <= 1){ 
						@NEW_COU=(); 
						foreach(@COU_DATA){ 
							($xcid,$xname,$xele,$xmark,$xking,$xmes,$xsub,$xpri)=split(/<>/); 
							if("$zcon" eq "$xcid"){ 
							}else{ 
								push(@NEW_COU,"$_"); 
							} 
						} 
						open(OUT,">$COUNTRY_LIST"); 
						print OUT @NEW_COU; 
						close(OUT); 
						&MAP_LOG2("【滅亡】\[$old_date\]$cou_name[$zcon]國已經滅亡了。"); 
						&MAP_LOG("【滅亡】\[$old_date\]$cou_name[$zcon]國已經滅亡了。"); 
					} 
						$zcon = $kcon; 
						$znou = int($znou*0.8); 
						$zsyo = int($zsyo*0.8); 
						$znum = int($znum*0.8); 
						$zsub1 = int($zsub1*0.8); 
						$zdef_att = 0; 
						$zpri = int($zpri*0.8); 
						$kex_add += 50; 
						$kcex += $kex_add; 
						$kpos = $cnum; 
					@NEW_DEF_LIST3=(); 
					$pphit=0; 
					foreach(@DEF_LIST3){ 
						($did,$dname,$dtown_id,$dtown_flg,$dcon) = split(/<>/); 
						if("$did" eq "$kid"){ 
							$pphit=1; 
							unshift(@NEW_DEF_LIST3,"$kid<>$kname<>$kpos<>0<>$kcon<>\n"); 
						}else{ 
							push(@NEW_DEF_LIST3,"$_"); 
						} 
					} 
 
					if(!$pphit){ 
						unshift(@NEW_DEF_LIST3,"$kid<>$kname<>$kpos<>0<>$kcon<>\n"); 
					} 
					&SAVE_DATA($DEF_LIST,@NEW_DEF_LIST3); 
 
					&K_LOG2("已經得到$zname領土!貢獻值獲得$kex_add點!"); 
					&MAP_LOG2("【統治】\[$old_date\]$cou_name[$kcon]國$kname武將 已經統治$zname。"); 
					&MAP_LOG("【統治】\[$old_date\]$cou_name[$kcon]國$kname武將 已經統治$zname。"); 
				}else{ 
					@NEW_DEF_LIST3=(); 
					foreach(@DEF_LIST3){ 
						($did,$dname,$dtown_id,$dtown_flg,$dcon) = split(/<>/); 
						if("$mdid" ne "$did"){ 
							push(@NEW_DEF_LIST3,"$_"); 
						} 
					} 
					open(OUT,">$DEF_LIST"); 
					print OUT @NEW_DEF_LIST3; 
					close(OUT); 
					$kex_add += 30; 
					$kcex += $kex_add; 
					$ecex += $eex_add; 
					&K_LOG2("$kname武將 將 $ename擊潰,獲得勝利!貢獻值獲得$kex_add點。"); 
					&E_LOG2("$ename武將 敗在 $kname武將 攻勢,攻城失敗!貢獻值獲得$eex_add點。"); 
					&MAP_LOG("【勝利】$kname武將 將 $ename擊潰,大獲全勝!"); 
				} 
			}else{ 
				$eex_add += 30; 
				$ecex += $eex_add; 
				$kcex += $kex_add; 
				&K_LOG2("$kname武將 敗在 $ename武將 攻勢,守城失敗!貢獻值獲得$kex_add點。"); 
				&E_LOG2("$ename武將 將 $kname擊潰,獲得勝利!貢獻值獲得$eex_add點。"); 
			} 
 
			if(!$last_battle){ 
				if($eid ne ""){ 
					&ENEMY_INPUT; 
				} 
			}else{ 
				$zshiro = $esol; 
				$zdef_att -= $kex_add; 
				if($zdef_att < 0){ 
					$zdef_att=0; 
				} 
				if("$zname" ne ""){ 
					splice(@TOWN_DATA,$cnum,1,"$zname<>$zcon<>$znum<>$znou<>$zsyo<>$zshiro<>$znou_max<>$zsyo_max<>$zshiro_max<>$zpri<>$zx<>$zy<>$zsouba<>$zdef_att<>$zsub1<>$zsub2<>$z[0]<>$z[1]<>$z[2]<>$z[3]<>$z[4]<>$z[5]<>$z[6]<>$z[7]<>\n"); 
 
				} 
			} 
 
			$kstr_ex++; 
			$ksub1 = "$kstr_ex,$kint_ex,$klea_ex,$kcha_ex,$ksub1_ex,$ksub2_ex,"; 
		} 
	} 
} 
 
1;