일부 버그 수정 old 파일 삭제

This commit is contained in:
2019-10-04 23:03:19 +09:00
parent 6f722f9ead
commit 5eec7f9bbc
11 changed files with 39 additions and 10259 deletions
+35 -47
View File
@@ -21,57 +21,48 @@ if($tnmt < 0 || $tnmt > 1){
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$generalID = $session->generalID;
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("내정보", 1);
$me = $db->queryFirstRow('SELECT no,npc,mode,tnmt,myset,train,atmos from general WHERE owner = %i', $userID);
$me = General::createGeneralObjFromDB($generalID);
if ($me['myset'] > 0) {
$myset = $me->getVar('myset');
if ($myset > 0) {
$submit = 'submit';
} else {
$submit = 'hidden';
}
if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
if ($me['myset'] > 1) {
if (($btn == "설정저장" || $detachNPC) && $myset > 0) {
if ($myset > 1) {
$submit = 'submit';
} else {
$submit = 'hidden';
}
if($mode == 0){
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'mode'=>$mode,
'train'=>max(0, $me['train'] - 3),
'atmos'=>max(0, $me['atmos'] - 3),
], 'owner=%i AND mode!=%i', $userID, $mode);
if($mode != $me->getVar('mode')){
if($mode == 0){
$me->increaseVar('myset', -1);
$me->setVar('mode', $mode);
$me->increaseVar('train', -3);
$me->increaseVar('atmos', -3);
}
else{
$me->increaseVar('myset', -1);
$me->setVar('mode', $mode);
}
$myset -= 1;
}
else{
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'mode'=>$mode
], 'owner=%i AND mode!=%i', $userID, $mode);
if($me->getVar('tnmt') != $tnmt){
$me->setVar('tnmt', $tnmt);
}
if($db->affectedRows()){
$me['myset'] -= 1;
}
if($me['tnmt'] != $tnmt){
$db->update('general', [
'tnmt'=>$tnmt
], 'owner=%i', $userID);
}
$me['mode'] = $mode;
$me['tnmt'] = $tnmt;
if($me['npc'] == 1 && $detachNPC){
if($me->getVar('npc') == 1 && $detachNPC){
$turnterm = $gameStor->turnterm;
if($turnterm < 10){
@@ -80,13 +71,10 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
else{
$targetKillTurn = 60 / $turnterm;
}
$db->update('general', [
'killturn'=>$targetKillTurn
], 'owner=%i AND npc=1', $userID);
$me['killturn']=$targetKillTurn;
$me->setVar('killturn', $targetKillTurn);
}
}
$me->applyDB($db);
?>
<!DOCTYPE html>
@@ -113,23 +101,23 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
<table align=center width=1000 class='tb_layout bg0'>
<tr>
<td width=50%>
<?php myInfo(); ?>
<?php myInfo($me); ?>
<?php myInfo2(); ?>
</td>
<td width=50% valign=top style="padding-left:4ch;">
<form name=form1 action=b_myPage.php method=post>
토너먼트 【
<input type=radio name=tnmt value=0 <?=$me['tnmt']==0?"checked":""; ?>>수동참여
<input type=radio name=tnmt value=1 <?=$me['tnmt']==1?"checked":""; ?>>자동참여
<input type=radio name=tnmt value=0 <?=$me->getVar('tnmt')==0?"checked":""; ?>>수동참여
<input type=radio name=tnmt value=1 <?=$me->getVar('tnmt')==1?"checked":""; ?>>자동참여
】<br>
∞<font color=orange>개막직전 남는자리가 있을경우 랜덤하게 참여합니다.</font><br><br>
수비 【
<input type=radio name=mode value=2 <?=$me['mode']==2?"checked":""; ?>>◎(훈사80)
<input type=radio name=mode value=1 <?=$me['mode']==1?"checked":""; ?>>○(훈사60)
<input type=radio name=mode value=0 <?=$me['mode']==0?"checked":""; ?>>×
<input type=radio name=mode value=2 <?=$me->getVar('mode')==2?"checked":""; ?>>◎(훈사80)
<input type=radio name=mode value=1 <?=$me->getVar('mode')==1?"checked":""; ?>>○(훈사60)
<input type=radio name=mode value=0 <?=$me->getVar('mode')==0?"checked":""; ?>>×
】<br><br>
<input type=<?=$submit?> name=btn style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px; value=설정저장><br>
∞<font color=orange>설정저장은 이달중 <?=$me['myset']?>회 남았습니다.</font><br><br>
∞<font color=orange>설정저장은 이달중 <?=$myset?>회 남았습니다.</font><br><br>
</form>
휴 가 신 청<br>
<a href="c_vacation.php"><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>휴가 신청</button></a><br><br>
@@ -145,10 +133,10 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
</tr>
<tr>
<td valign=top>
<?=getGenLogRecent($me['no'], 24)?>
<?=getGenLogRecent($generalID, 24)?>
</td>
<td valign=top>
<?=getBatLogRecent($me['no'], 24)?>
<?=getBatLogRecent($generalID, 24)?>
</td>
</tr>
<tr>
@@ -157,10 +145,10 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
</tr>
<tr>
<td valign=top>
<?=getGeneralHistoryAll($me['no'])?>
<?=getGeneralHistoryAll($generalID)?>
</td>
<td valign=top>
<?=getBatResRecent($me['no'], 24)?>
<?=getBatResRecent($generalID, 24)?>
</td>
</tr>
</table>
+1 -1
View File
@@ -744,7 +744,7 @@ function generalInfo($no) {
echo "<table width=498 class='tb_layout bg2'>
<tr>
<td width=64 height=64 rowspan=3 class='generalIcon' style='text-align:center;background:no-repeat center url(\"{$imageTemp}/{$general['picture']}\");background-size:64px;'>&nbsp;</td>
<td colspan=9 height=16 style=text-align:center;color:".newColor($nation['color']).";background-color:{$nation['color']};font-weight:bold;font-size:13px;>{$general['name']} 【 {$level} | {$call} | {$color}{$injury}</font> 】 ".substr($general['turntime'], 11)."</td>
<td colspan=9 height=16 style=text-align:center;color:".newColor($nation['color']).";background-color:{$nation['color']};font-weight:bold;font-size:13px;>{$general['name']} 【 {$level} | {$call} | {$color}{$injury}</font> 】 ".substr($general['turntime'], 11, 8)."</td>
</tr>
<tr height=16>
<td style='text-align:center;' class='bg1'><b>통솔</b></td>
-605
View File
@@ -1,605 +0,0 @@
<?php
namespace sammo;
function getGeneralTurnBrief(General $generalObj, array $turnList) {
$result = [];
foreach($turnList as $turnIdx => [$action, $arg]){
$commandObj = buildGeneralCommandClass($action, $generalObj, [], $arg);
$turnText = $commandObj->getBrief();
$result[$turnIdx] = $turnText;
}
return $result;
//TODO: 정리가 끝나면 삭제
$turn = [];
$turn[0] = $general["turn0"];
if($type >= 1) {
$turn[1] = $general["turn1"];
$turn[2] = $general["turn2"];
$turn[3] = $general["turn3"];
$turn[4] = $general["turn4"];
}
if($type >= 2) {
$turn[5] = $general["turn5"];
$turn[6] = $general["turn6"];
$turn[7] = $general["turn7"];
$turn[8] = $general["turn8"];
$turn[9] = $general["turn9"];
$turn[10] = $general["turn10"];
$turn[11] = $general["turn11"];
$turn[12] = $general["turn12"];
$turn[13] = $general["turn13"];
$turn[14] = $general["turn14"];
$turn[15] = $general["turn15"];
$turn[16] = $general["turn16"];
$turn[17] = $general["turn17"];
$turn[18] = $general["turn18"];
$turn[19] = $general["turn19"];
$turn[20] = $general["turn20"];
$turn[21] = $general["turn21"];
$turn[22] = $general["turn22"];
$turn[23] = $general["turn23"];
}
if($type == 0) { $count = 1; }
elseif($type == 1) { $count = 5; }
elseif($type == 2) { $count = 24; }
for($i=0; $i < $count; $i++) {
$command = DecodeCommand($turn[$i]);
switch($command[0]) {
case 0: $str[$i] = "휴식"; break; //휴식
case 1: $str[$i] = "농지 개간"; break; //농업
case 2: $str[$i] = "상업 투자"; break; //상업
case 3: $str[$i] = "기술 연구"; break; //기술
case 4: $str[$i] = "주민 선정"; break; //선정
case 5: $str[$i] = "수비 강화"; break; //수비
case 6: $str[$i] = "성벽 보수"; break; //성벽
case 7: $str[$i] = "정착 장려"; break; //정착 장려
case 8: $str[$i] = "치안 강화"; break; //치안
case 9: $str[$i] = "물자 조달"; break; //조달
case 11: //징병
$third = GameUnitConst::byID($command[2])->name;
$double = $command[1];
$str[$i] = "{$third}{$double}00명 징병";
break;
case 12: //모병
$third = GameUnitConst::byID($command[2])->name;
$double = $command[1];
$str[$i] = "{$third}{$double}00명 모병";
break;
case 13: //훈련
$str[$i] = "훈련";
break;
case 14: //사기진작
$str[$i] = "사기진작";
break;
case 15: //전투태세
$str[$i] = "전투태세";
break;
case 16: //전쟁
$double = $command[1];
$city = getCity($double, "name");
$josaRo = JosaUtil::pick($city['name'], '로');
$str[$i] = "{$city['name']}{$josaRo} 출병";
break;
case 17: //소집해제
$str[$i] = "소집 해제";
break;
case 21: //이동
$double = $command[1];
$city = getCity($double, "name");
$josaRo = JosaUtil::pick($city['name'], '로');
$str[$i] = "{$city['name']}{$josaRo} 이동";
break;
case 22: //등용
$double = $command[1];
$query = "select name from general where no='$double'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$josaUl = JosaUtil::pick($general['name'], '을');
$str[$i] = "{$general['name']}{$josaUl} 등용";
break;
case 25: //임관
$double = $command[1];
$nation = getNationStaticInfo($double);
if(!$nation['name']) { $nation['name'] = '????'; }
$josaRo = JosaUtil::pick($nation['name'], '로');
$str[$i] = "{$nation['name']}{$josaRo} 임관";
break;
case 26: //집합
$str[$i] = "집합";
break;
case 28: //귀환
$str[$i] = "담당 도시로 귀환";
break;
case 29: //인재탐색
$str[$i] = "인재 탐색";
break;
case 30: //강행
$double = $command[1];
$city = getCity($double, "name");
$josaRo = JosaUtil::pick($city['name'], '로');
$str[$i] = "{$city['name']}{$josaRo} 강행";
break;
case 31: //첩보
$double = $command[1];
$city= getCity($double, "name");
$str[$i] = "{$city['name']}】에 첩보 실행";
break;
case 32: //화계
$double = $command[1];
$city= getCity($double, "name");
$str[$i] = "{$city['name']}】에 화계 실행";
break;
case 33: //탈취
$double = $command[1];
$city= getCity($double, "name");
$str[$i] = "{$city['name']}】에 탈취 실행";
break;
case 34: //파괴
$double = $command[1];
$city= getCity($double, "name");
$str[$i] = "{$city['name']}】에 파괴 실행";
break;
case 35: //선동
$double = $command[1];
$city= getCity($double, "name");
$str[$i] = "{$city['name']}】에 선동 실행";
break;
case 41: //단련
$str[$i] = "숙련도를 단련";
break;
case 42: //견문
$str[$i] = "견문";
break;
case 43: //증여
$fourth = $command[3];
$third = $command[2];
$double = $command[1];
$query = "select name from general where no='$third'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if($fourth == 1) { $str[$i] = "{$general['name']}】에게 금 {$double}00을 증여"; }
else { $str[$i] = "{$general['name']}】에게 쌀 {$double}00을 증여"; }
break;
case 44: //헌납
$third = $command[2];
$double = $command[1];
if($third == 1) { $str[$i] = "{$double}00을 헌납"; }
else { $str[$i] = "{$double}00을 헌납"; }
break;
case 45: //하야
$str[$i] = "하야";
break;
case 46: //건국
$nationName = $db->queryFirstField('SELECT makenation FROM general WHERE `no`=%i', $general['no'])??'';
$josaUl = JosaUtil::pick($nationName, '을');
$str[$i] = "{$nationName}{$josaUl} 건국";
break;
case 47: //방랑
$str[$i] = "방랑";
break;
case 48: //장비 구입
$double = $command[1];
if($double == 0) {
$str[$i] = "무기를 판매";
} elseif($double == 100) {
$str[$i] = "서적을 판매";
} elseif($double == 200) {
$str[$i] = "명마를 판매";
} elseif($double == 300) {
$str[$i] = "도구를 판매";
} elseif($double < 100) {
$josaUl = JosaUtil::pick(getItemName($double), '을');
$str[$i] = "".getItemName($double)."{$josaUl} 구입";
} elseif($double < 200) {
$josaUl = JosaUtil::pick(getItemName($double-100), '을');
$str[$i] = "".getItemName($double-100)."{$josaUl} 구입";
} elseif($double < 300) {
$josaUl = JosaUtil::pick(getItemName($double-200), '을');
$str[$i] = "".getItemName($double-200)."{$josaUl} 구입";
} elseif($double < 400) {
$josaUl = JosaUtil::pick(getItemName($double-300), '을');
$str[$i] = "".getItemName($double-300)."{$josaUl} 구입";
}
break;
case 49: //군량 매매
$third = $command[2];
$double = $command[1];
if($third == 1) { $str[$i] = "군량 {$double}00을 판매"; }
else { $str[$i] = "군량 {$double}00을 구입"; }
break;
case 50: //요양
$str[$i] = "요양";
break;
case 54: //선양
$double = $command[1];
$query = "select name from general where no='$double'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$str[$i] = "{$general['name']}】에게 선양";
break;
case 55: //거병
$str[$i] = "방랑군 결성";
break;
case 56: //해산
$str[$i] = "방랑군 해산";
break;
case 57: //모반 시도
$str[$i] = "모반 시도";
break;
default:
$str[$i] = "????";
break;
}
}
if($font == 1) {
for($i=0; $i < count($str); $i++) {
$str[$i] = getFont($str[$i]);
}
}
return $str;
}
function getNationTurnBrief(General $generalObj, array $turnList) {
$result = [];
$tmpTurn = new LastTurn();
foreach($turnList as $turnIdx => [$action, $arg]){
$commandObj = buildNationCommandClass($action, $generalObj, [], $tmpTurn, $arg);
$turnText = $commandObj->getBrief();
$result[$turnIdx] = $turnText;
}
return $result;
$turn[0] = $nation["l{$level}turn0"];
$turn[1] = $nation["l{$level}turn1"];
$turn[2] = $nation["l{$level}turn2"];
$turn[3] = $nation["l{$level}turn3"];
$turn[4] = $nation["l{$level}turn4"];
$turn[5] = $nation["l{$level}turn5"];
$turn[6] = $nation["l{$level}turn6"];
$turn[7] = $nation["l{$level}turn7"];
$turn[8] = $nation["l{$level}turn8"];
$turn[9] = $nation["l{$level}turn9"];
$turn[10] = $nation["l{$level}turn10"];
$turn[11] = $nation["l{$level}turn11"];
$count = 12;
for($i=0; $i < $count; $i++) {
$command = DecodeCommand($turn[$i]);
switch($command[0]) {
case 99: //휴식
$str[$i] = "휴식";
break;
case 23: //포상
$fourth = $command[3];
$third = $command[2];
$double = (int)$command[1];
$query = "select name from general where no='$third'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if($fourth == 1) { $str[$i] = "{$general['name']}】에게 금 {$double}00 포상"; }
else { $str[$i] = "{$general['name']}】에게 쌀 {$double}00 포상"; }
break;
case 24: //몰수
$fourth = $command[3];
$third = $command[2];
$double = $command[1];
$query = "select name from general where no='$third'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if($fourth == 1) { $str[$i] = "{$general['name']}】의 금 {$double}00 몰수"; }
else { $str[$i] = "{$general['name']}】의 쌀 {$double}00 몰수"; }
break;
case 27: //발령
$third = $command[2];
$double = $command[1];
$query = "select name from general where no='$third'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$city = getCity($double, "name");
$josaRo = JosaUtil::pick($city['name'], '로');
$str[$i] = "{$general['name']}】【{$city['name']}{$josaRo} 발령";
break;
case 51: //항복권고
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에게 항복 권고";
break;
case 52: //원조
$fourth = $command[3];
$third = $command[2];
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$fourth *= 1000;
$third *= 1000;
$str[$i] = "{$nation['name']}】에게 국고 {$third} 병량 {$fourth} 원조";
break;
case 53: //통합제의
$nationName = $db->queryFirstField('SELECT makenation FROM general WHERE `level`=%i AND `nation`=%i', $level, $nation['nation'])??'';
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$josaRo = JosaUtil::pick($nationName, '로');
$str[$i] = "{$nation['name']}】에 【{$nationName}{$josaRo} 통합 제의";
break;
case 61: //불가침제의
$third = $command[2];
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 {$third}년 불가침 제의";
break;
case 62: //선전 포고
$double = $command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 선전 포고";
break;
case 63: //종전 제의
$double = $command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 종전 제의";
break;
case 64: //파기 제의
$double = $command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 파기 제의";
break;
case 65: //초토
$double = $command[1];
$city = getCity($double, "name");
$josaUl = JosaUtil::pick($city['name'], '을');
$str[$i] = "{$city['name']}{$josaUl} 초토화";
break;
case 66: //천도
$double = $command[1];
$city = getCity($double, "name");
$josaRo = JosaUtil::pick($city['name'], '로');
$str[$i] = "{$city['name']}{$josaRo} 천도";
break;
case 67: //증축
$double = $command[1];
$city = getCity($double, "name");
$josaUl = JosaUtil::pick($city['name'], '을');
$str[$i] = "{$city['name']}{$josaUl} 증축";
break;
case 68: //감축
$double = $command[1];
$city = getCity($double, "name");
$josaUl = JosaUtil::pick($city['name'], '을');
$str[$i] = "{$city['name']}{$josaUl} 감축";
break;
case 71: //필사즉생
$str[$i] = "필사즉생";
break;
case 72: //백성동원
$double = $command[1];
$city = getCity($double, "name");
$str[$i] = "{$city['name']}】에 백성동원";
break;
case 73: //수몰
$double = $command[1];
$city = getCity($double, "name");
$josaUl = JosaUtil::pick($city['name'], '을');
$str[$i] = "{$city['name']}{$josaUl} 수몰";
break;
case 74: //허보
$double = $command[1];
$city = getCity($double, "name");
$str[$i] = "{$city['name']}】에 허보";
break;
case 75: //피장파장
$double = $command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 피장파장";
break;
case 76: //의병모집
$str[$i] = "의병모집";
break;
case 77: //이호경식
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 이호경식";
break;
case 78: //급습
$double = (int)$command[1];
$nation = getNationStaticInfo($double);
$str[$i] = "{$nation['name']}】에 급습";
break;
case 81: //국기변경
$double = $command[1];
$colors = GetNationColors();
$color = $colors[$double];
$str[$i] = "【<font color={$color}>국기</font>】를 변경";
break;
default:
$str[$i] = "????";
break;
}
}
for($i=0; $i < count($str); $i++) {
$str[$i] = getFont($str[$i]);
}
return $str;
}
function pushGeneralCommand(int $generalID, int $turnCnt=1){
if($turnCnt == 0){
return;
}
if($turnCnt < 0){
pullGeneralCommand($generalID, -$turnCnt);
}
if($turnCnt >= GameConst::$maxTurn){
return;
}
$db = DB::db();
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt)
], 'general_id=%i', $generalID);
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxTurn),
'action'=>'휴식',
'arg'=>'{}'
], 'general_id=%i AND turn_idx >= %i', $generalID, GameConst::$maxTurn);
}
function pullGeneralCommand(int $generalID, int $turnCnt=1){
if($turnCnt == 0){
return;
}
if($turnCnt < 0){
pushGeneralCommand($generalID, -$turnCnt);
}
if($turnCnt >= GameConst::$maxTurn){
return;
}
$db = DB::db();
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxTurn),
'action'=>'휴식',
'arg'=>'{}'
], 'general_id=%i AND turn_idx < %i', $generalID, $turnCnt);
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt)
], 'general_id=%i', $generalID);
}
function pushNationCommand(int $nationID, int $level, int $turnCnt=1){
if($nationID == 0){
return;
}
if($level < 5){
return;
}
if($turnCnt == 0){
return;
}
if($turnCnt < 0){
pullNationCommand($nationID, $level, -$turnCnt);
}
if($turnCnt >= GameConst::$maxNationTurn){
return;
}
$db = DB::db();
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt)
], 'nation_id=%i AND level=%i', $nationID, $level);
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxNationTurn),
'action'=>'휴식',
'arg'=>'{}'
], 'nation_id=%i AND level=%i AND turn_idx >= %i', $nationID, $level, GameConst::$maxNationTurn);
}
function pullNationCommand(int $nationID, int $level, int $turnCnt=1){
if($nationID == 0){
return;
}
if($level < 5){
return;
}
if($turnCnt == 0){
return;
}
if($turnCnt < 0){
pushNationCommand($nationID, $level, -$turnCnt);
}
if($turnCnt >= GameConst::$maxNationTurn){
return;
}
$db = DB::db();
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxNationTurn),
'action'=>'휴식',
'arg'=>'{}'
], 'nation_id=%i AND level=%i AND turn_idx < %i', $nationID, $level, $turnCnt);
$db->update('general_turn', [
'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt)
], 'nation_id=%i AND level=%i', $nationID, $level);
}
function setGeneralCommand(int $generalID, array $turnList, string $command, ?array $arg = null) {
if(!$turnList){
return;
}
$db = DB::db();
$db->update('general_turn', [
'action'=>$command,
'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT)
], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList);
}
function setNationCommand(int $nationID, int $level, array $turnList, string $command, ?array $arg = null) {
if(!$turnList){
return;
}
$db = DB::db();
$db->update('nation_turn', [
'action'=>$command,
'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT)
], 'nation_id = %i AND level = %i AND turn_idx IN %li', $generalID, $level, $turnList);
}
-2542
View File
@@ -1,2542 +0,0 @@
<?php
namespace sammo;
use Constraint\Constraint;
/**
* 장수의 통솔을 받아옴
*
* @param array $general 장수 정보, leadership, injury, lbonus, horse 사용
* @param bool $withInjury 부상값 사용 여부
* @param bool $withItem 아이템 적용 여부
* @param bool $withStatAdjust 추가 능력치 보정 사용 여부
* @param bool $useFloor 내림 사용 여부, false시 float 값을 반환할 수도 있음
*
* @return int|float 계산된 능력치
*/
function getGeneralLeadership($general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$leadership = $general['leadership'];
if($withInjury){
$leadership *= (100 - $general['injury']) / 100;
}
//xxx: 징병 전특 때문에 새로 고쳐야함
if($withStatAdjust){
if($general['special2'] == 'che_징병'){
$leadership *= 1.15;
}
}
if(isset($general['lbonus'])){
$leadership += $general['lbonus'];
}
if($withItem){
$leadership += getHorseEff($general['horse']);
}
//$withStatAdjust는 통솔에서 미사용
if($useFloor){
return intval($leadership);
}
return $leadership;
}
/**
* 장수의 무력을 받아옴
*
* @param array $general 장수 정보, power, injury, weapon 사용
* @param bool $withInjury 부상값 사용 여부
* @param bool $withItem 아이템 적용 여부
* @param bool $withStatAdjust 추가 능력치 보정 사용 여부
* @param bool $useFloor 내림 사용 여부, false시 float 값을 반환할 수도 있음
*
* @return int|float 계산된 능력치
*/
function getGeneralStrength($general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$power = $general['power'];
if($withInjury){
$power *= (100 - $general['injury']) / 100;
}
if($withItem){
$power += getWeapEff($general['weapon']);
}
if($withStatAdjust){
$power += Util::round(getGeneralIntel($general, $withInjury, $withItem, false, false) / 4);
}
if($useFloor){
return intval($power);
}
return $power;
}
/**
* 장수의 지력을 받아옴
*
* @param array $general 장수 정보, intel, injury, book 사용
* @param bool $withInjury 부상값 사용 여부
* @param bool $withItem 아이템 적용 여부
* @param bool $withStatAdjust 추가 능력치 보정 사용 여부
* @param bool $useFloor 내림 사용 여부, false시 float 값을 반환할 수도 있음
*
* @return int|float 계산된 능력치
*/
function getGeneralIntel($general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$intel = $general['intel'];
if($withInjury){
$intel *= (100 - $general['injury']) / 100;
}
if($withItem){
$intel += getBookEff($general['book']);
}
if($withStatAdjust){
$intel += Util::round(getGeneralStrength($general, $withInjury, $withItem, false, false) / 4);
}
if($useFloor){
return intval($intel);
}
return $intel;
}
/**
* 내정 커맨드 사용시 성공 확률 계산
*
* @param array $general 장수 정보
* @param int|string $type 내정 커맨드 타입, 0|'leadership' = 통솔 기반, 1|'power' = 무력 기반, 2|'intel' = 지력 기반
*
* @return array 계산된 실패, 성공 확률 ('success' => 성공 확률, 'fail' => 실패 확률)
*/
function CriticalRatioDomestic(&$general, $type) {
$leadership = getGeneralLeadership($general, false, true, true, false);
$power = getGeneralStrength($general, false, true, true, false);
$intel = getGeneralIntel($general, false, true, true, false);
$avg = ($leadership+$power+$intel) / 3;
/*
* 능력치가 높아질 수록 성공 확률 감소. 실패 확률도 감소
* 무력 내정 기준(지력 내정 방식과 구조 동일)
756510(32%/30%), 707010(28%/25%), 657510(23%/20%)
106575(23%/20%), 107070(20%/17%), 107565(17%/15%)
506040(33%/30%), 505050(43%/40%), 504060(50%/50%)
* 통솔 내정 기준
756510(25%/22%), 707010(31%/28%), 657510(38%,35%),
505050(50%,50%), 107070(50%,50%)
*/
switch($type) {
case 'leadership':
case 0: $ratio = $avg / $leadership; break;
case 'power':
case 1: $ratio = $avg / $power; break;
case 'intel':
case 2: $ratio = $avg / $intel; break;
default:
throw new MustNotBeReachedException();
}
$ratio = min($ratio, 1.2);
$fail = pow($ratio / 1.2, 1.4) - 0.3;
$success = pow($ratio / 1.2, 1.5) - 0.25;
$fail = min(max($fail, 0), 0.5);
$success = min(max($success, 0), 0.5);
return array(
'success'=>$success,
'fail'=>$fail
);
}
/**
* 수뇌직 통솔 보너스 계산
*
* @param array &$general 장수 정보. 'lbonus' 값에 통솔 보너스가 입력 됨
* @param int $nationLevel 국가 등급
*
* @return int 계산된 $general['lbonus'] 값
*/
function setLeadershipBonus(&$general, $nationLevel){
if($general['level'] == 12) {
$lbonus = $nationLevel * 2;
} elseif($general['level'] >= 5) {
$lbonus = $nationLevel;
} else {
$lbonus = 0;
}
$general['lbonus'] = $lbonus;
return $lbonus;
}
function CriticalScore($score, $type) {
switch($type) {
case 0:
$ratio = Util::randF()*0.8 + 2.2; // 2.2~3.0
break;
case 1:
$ratio = Util::randF()*0.2 + 0.2; // 0.2~0.4
break;
}
return Util::round($score * $ratio);
}
function process_domestic(array $rawGeneral, int $type){
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$env = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
$general = new General($rawGeneral, null, $env['year'], $env['month']);
//TODO: 최종적으로는 클래스 명 그대로 가야함
$commandMap = [
1=>'Command\che_농지개간',
2=>'Command\che_상업투자',
3=>'Command\che_기술연구',
4=>'Command\che_주민선정',
5=>'Command\che_수비강화',
6=>'Command\che_성벽보수',
7=>'Command\che_정착장려',
8=>'Command\che_치안강화',
9=>'Command\che_물자조달',
];
$cmdClass = $commandMap[$type]??null;
if(!$cmdClass){
throw new \InvalidArgumentException('잘못된 내정 코드');
}
$cmdObj = new $cmdClass($general, $env);
if(!$cmdObj->isRunnable()){
return;
}
$cmdObj->run();
}
function process_1_old(&$general, $type) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
if($type == 1) { $dtype = "농지 개간"; $atype = ""; $btype = ""; $stype = "agri"; }
elseif($type == 2) { $dtype = "상업 투자"; $atype = ""; $btype = ""; $stype = "comm"; }
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. $dtype 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. $dtype 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. $dtype 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. $dtype 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. $dtype 실패. <1>$date</>";
} elseif($city["$stype"] >= $city["$stype"."2"]) {
$log[] = "<C>●</>{$admin['month']}월:{$dtype}{$btype} 충분합니다. $dtype 실패. <1>$date</>";
} else {
// 민심 50 이하이면 50과 같게
if($city['trust'] < GameConst::$develrate) { $city['trust'] = GameConst::$develrate; }
$trust = $city['trust'] / 100;
$score = getGeneralIntel($general, true, true, true, false) * $trust;
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 2 || $nation['type'] == 12) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 8 || $nation['type'] == 11) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모, 모사 보정
if($general['level'] == 12 || $general['level'] == 11 || $general['level'] == 9 || $general['level'] == 7 || $general['level'] == 5) { $score *= 1.05; }
// 군사 보정
if($general['level'] == 3 && $general['no'] == $city['gen2']) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 2);
// 특기보정 : 경작, 상재
if($type == 1 && $general['special'] == 1) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
if($type == 2 && $general['special'] == 2) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//민심 반영
if($city['trust'] < 80) { $r['success'] *= $city['trust'] / 80; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}{$atype} <span class='ev_failed'>실패</span>하여 <C>$score</> 상승했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}{$atype} <S>성공</>하여 <C>$score</> 상승했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}{$atype} 하여 <C>$score</> 상승했습니다. <1>$date</>";
}
$exp = $score * 0.7;
$ded = $score * 1.0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$score += $city["$stype"];
if($score > $city["{$stype}2"]) { $score = $city["{$stype}2"]; }
// 내정 상승
$query = "update city set {$stype}='$score' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 하락, 경험치 상승
$general['gold'] -= $admin['develcost'];
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_3(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
$dtype = "기술 연구";
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select level,type,tech from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. $dtype 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. $dtype 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. $dtype 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. $dtype 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. $dtype 실패. <1>$date</>";
} else {
$score = getGeneralIntel($general, true, true, true, false);
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 3 || $nation['type'] == 13) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 5 || $nation['type'] == 6 || $nation['type'] == 7 || $nation['type'] == 8 || $nation['type'] == 12) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모, 모사 보정
if($general['level'] == 12 || $general['level'] == 11 || $general['level'] == 9 || $general['level'] == 7 || $general['level'] == 5) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 2);
// 특기보정 : 발명
if($general['special'] == 3) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//민심 반영
if($city['trust'] < 80) { $r['success'] *= $city['trust'] / 80; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 <span class='ev_failed'>실패</span>하여 <C>$score</> 상승했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 <S>성공</>하여 <C>$score</> 상승했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 하여 <C>$score</> 상승했습니다. <1>$date</>";
}
$exp = $score * 0.7;
$ded = $score * 1.0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 부드러운 기술 제한
if(TechLimit($admin['startyear'], $admin['year'], $nation['tech'])) { $score = intdiv($score, 4); }
//장수수 구함
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
if($gencount < GameConst::$initialNationGenLimit) $gencount = GameConst::$initialNationGenLimit;
// 내정 상승
$query = "update nation set totaltech=totaltech+'$score',tech=totaltech/'$gencount' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 하락, 경험치 상승 // 공헌도, 명성 상승 = $score * 10
$general['gold'] -= $admin['develcost'];
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_4(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 주민 선정 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. 주민 선정 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 주민 선정 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 주민 선정 실패. <1>$date</>";
} elseif($general['rice'] < $admin['develcost']*2) {
$log[] = "<C>●</>{$admin['month']}월:군량이 모자랍니다. 주민 선정 실패. <1>$date</>";
} elseif($city['trust'] >= 100) {
$log[] = "<C>●</>{$admin['month']}월:민심은 충분합니다. 주민 선정 실패. <1>$date</>";
} else {
$score = getGeneralLeadership($general, true, true, true) / 10;
$score *= (100 + $general['explevel']/5)/100;
$score *= (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 2 || $nation['type'] == 4 || $nation['type'] == 7 || $nation['type'] == 10) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 1 || $nation['type'] == 3 || $nation['type'] == 9) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모 보정
if($general['level'] == 12 || $general['level'] == 11) { $score *= 1.05; }
// 종사 보정
if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 0);
// 특기보정 : 인덕
if($general['special'] == 20) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:선정을 <span class='ev_failed'>실패</span>하여 민심이 <C>".round($score, 1)."</> 상승했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:선정을 <S>성공</>하여 민심이 <C>".round($score, 1)."</> 상승했습니다. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:민심이 <C>".round($score, 1)."</> 상승했습니다. <1>$date</>";
}
$exp = $score * 7;
$ded = $score * 10;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$score += $city['trust'];
if($score > 100) { $score = 100; }
// 민심 상승
$query = "update city set trust='$score' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 군량 하락 내정보다 2배 지력경험 경험, 공헌 상승
$general['rice'] -= $admin['develcost'] * 2;
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',rice='{$general['rice']}',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_5(&$general, $type) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
if($type == 1) { $dtype = "수비 강화"; $stype = "def"; }
elseif($type == 2) { $dtype = "성벽 보수"; $stype = "wall"; }
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. $dtype 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. $dtype 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. $dtype 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. $dtype 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. $dtype 실패. <1>$date</>";
} elseif($city["$stype"] >= $city["$stype"."2"]) {
$log[] = "<C>●</>{$admin['month']}월:{$dtype}는 충분합니다. $dtype 실패. <1>$date</>";
} else {
// 민심 50 이하이면 50과 같게
if($city['trust'] < GameConst::$develrate) { $city['trust'] = GameConst::$develrate; }
$trust = $city['trust'] / 100;
$score = getGeneralStrength($general, true, true, true, false) * $trust;
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 3 || $nation['type'] == 5 || $nation['type'] == 10 || $nation['type'] == 11) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 4 || $nation['type'] == 7 || $nation['type'] == 8 || $nation['type'] == 13) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모, 장군 보정
if($general['level'] == 12 || $general['level'] == 11 || $general['level'] == 10 || $general['level'] == 8 || $general['level'] == 6) { $score *= 1.05; }
// 태수 보정
if($general['level'] == 4 && $general['no'] == $city['gen1']) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 1);
// 특기보정 : 수비, 축성
if($type == 1 && $general['special'] == 11) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
if($type == 2 && $general['special'] == 10) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//민심 반영
if($city['trust'] < 80) { $r['success'] *= $city['trust'] / 80; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 <span class='ev_failed'>실패</span>하여 <C>$score</> 상승했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 <S>성공</>하여 <C>$score</> 상승했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}를 하여 <C>$score</> 상승했습니다. <1>$date</>";
}
$exp = $score * 0.7;
$ded = $score * 1.0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$score += $city["$stype"];
if($score > $city["{$stype}2"]) { $score = $city["{$stype}2"]; }
// 내정 상승
$query = "update city set {$stype}='$score' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 하락, 무력 경험 경험, 공헌 상승
$general['gold'] -= $admin['develcost'];
$general['strength2']++;
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',strength2='{$general['strength2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_7(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 정착 장려 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. 정착 장려 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 정착 장려 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 정착 장려 실패. <1>$date</>";
} elseif($general['rice'] < $admin['develcost'] * 2) {
$log[] = "<C>●</>{$admin['month']}월:군량이 모자랍니다. 정착 장려 실패. <1>$date</>";
} elseif($city['pop'] >= $city['pop2']) {
$log[] = "<C>●</>{$admin['month']}월:이미 포화상태입니다. 정착 장려 실패. <1>$date</>";
} else {
$score = getGeneralLeadership($general, true, true, true);
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 2 || $nation['type'] == 4 || $nation['type'] == 7 || $nation['type'] == 10) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 1 || $nation['type'] == 3 || $nation['type'] == 9) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모 보정
if($general['level'] == 12 || $general['level'] == 11) { $score *= 1.05; }
// 종사 보정
if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 0);
// 특기보정 : 인덕
if($general['special'] == 20) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:장려를 <span class='ev_failed'>실패</span>하여 주민이 <C>{$score}0</>명 증가했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:장려를 <S>성공</>하여 주민이 <C>{$score}0</>명 증가했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:주민이 <C>{$score}0</>명 증가했습니다. <1>$date</>";
}
$exp = $score * 0.7;
$ded = $score * 1.0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$score = $city['pop'] + ($score * 10);
if($score > $city['pop2']) { $score = $city['pop2']; }
// 민심 상승
$query = "update city set pop='$score' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 군량 하락 내정보다 2배 지력경험 경험, 공헌 상승
$general['rice'] -= $admin['develcost'] * 2;
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',rice='{$general['rice']}',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_8(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'develcost']);
$dtype = "치안"; $stype = "secu";
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. $dtype 강화 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3 && $nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 방랑군은 불가능합니다. $dtype 강화 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. $dtype 강화 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. $dtype 강화 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. $dtype 강화 실패. <1>$date</>";
} elseif($city['secu'] >= $city['secu2']) {
$log[] = "<C>●</>{$admin['month']}월:치안은 충분합니다. $dtype 강화 실패. <1>$date</>";
} else {
// 민심 50 이하이면 50과 같게
if($city['trust'] < GameConst::$develrate) { $city['trust'] = GameConst::$develrate; }
$trust = $city['trust'] / 100;
$score = getGeneralStrength($general, true, true, true, false) * $trust;
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
// 국가보정
if($nation['type'] == 1 || $nation['type'] == 4) { $score *= 1.1; $admin['develcost'] *= 0.8; }
if($nation['type'] == 6 || $nation['type'] == 9) { $score *= 0.9; $admin['develcost'] *= 1.2; }
// 군주, 참모, 장군 보정
if($general['level'] == 12 || $general['level'] == 11 || $general['level'] == 10 || $general['level'] == 8 || $general['level'] == 6) { $score *= 1.05; }
// 태수 보정
if($general['level'] == 4 && $general['no'] == $city['gen1']) { $score *= 1.05; }
$rd = Util::randF();
$r = CriticalRatioDomestic($general, 1);
// 특기보정 : 통찰
if($general['special'] == 12) { $r['success'] += 0.1; $score *= 1.1; $admin['develcost'] *= 0.8; }
//민심 반영
if($city['trust'] < 80) { $r['success'] *= $city['trust'] / 80; }
//버그방지
if($score < 1) $score = 1;
if($r['fail'] > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}을 <span class='ev_failed'>실패</span>하여 <C>$score</> 강화했습니다. <1>$date</>";
} elseif($r['success'] + $r['fail'] > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}을 <S>성공</>하여 <C>$score</> 강화했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:{$dtype}을 <C>$score</> 강화했습니다. <1>$date</>";
}
$exp = $score * 0.7;
$ded = $score * 1.0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$score += $city["$stype"];
if($score > $city["{$stype}2"]) { $score = $city["{$stype}2"]; }
// 내정 상승
$query = "update city set {$stype}='$score' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 하락, 무력 경험 경험, 공헌 상승
$general['gold'] -= $admin['develcost'];
$general['strength2']++;
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',strength2='{$general['strength2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_9(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 물자 조달 실패. <1>$date</>";
} elseif($nation['level'] > 0 && $city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 물자 조달 실패. <1>$date</>";
} elseif($city['supply'] == 0 && $city['nation'] == $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 물자 조달 실패. <1>$date</>";
} else {
if(rand() % 2 == 0) { $dtype = 0; $stype = ""; }
else { $dtype = 1; $stype = ""; }
$score = getGeneralLeadership($general, true, true, true)
+ getGeneralStrength($general, true, true, true)
+ getGeneralIntel($general, true, true, true);
$score = $score * (100 + $general['explevel']/5)/100;
$score = $score * (80 + rand() % 41)/100; // 80 ~ 120%
$rd = rand() % 100; // 현재 20%
//버그방지
if($score < 1) $score = 1;
if(30 > $rd) {
$score = CriticalScore($score, 1);
$log[] = "<C>●</>{$admin['month']}월:조달을 <span class='ev_failed'>실패</span>하여 {$stype}을 <C>$score</> 조달했습니다. <1>$date</>";
} elseif(40 > $rd) {
$score = CriticalScore($score, 0);
$log[] = "<C>●</>{$admin['month']}월:조달을 <S>성공</>하여 {$stype}을 <C>$score</> 조달했습니다. <1>$date</>";
} else {
$score = Util::round($score);
$log[] = "<C>●</>{$admin['month']}월:{$stype}을 <C>$score</> 조달했습니다. <1>$date</>";
}
$exp = $score * 0.7 / 3;
$ded = $score * 1.0 / 3;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 물자 상승
if($dtype == 0) {
$query = "update nation set gold=gold+'$score' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$query = "update nation set rice=rice+'$score' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
switch(Util::choiceRandomUsingWeight([$general['leadership'], $general['power'], $general['intel']])) {
case 0:
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
break;
case 1:
$general['strength2']++;
$query = "update general set resturn='SUCCESS',strength2='{$general['strength2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
break;
case 2:
$general['intel2']++;
$query = "update general set resturn='SUCCESS',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
break;
}
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_11(&$general, $type) {
if($type == 1){
$type = '징병';
}
else{
$type = '모병';
}
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
if($type === '징병') {
$defaultatmos = GameConst::$defaultAtmosLow;
$defaulttrain = GameConst::$defaultTrainLow;
}
else {
$defaultatmos = GameConst::$defaultAtmosHigh;
$defaulttrain = GameConst::$defaultTrainHigh;
}
[$startyear, $year, $month] = $gameStor->getValuesAsArray(['startyear', 'year', 'month']);
$actLog = new ActionLogger($general['no'], $general['nation'], $year, $month);
$command = DecodeCommand($general['turn0']);
$crewType = $command[2];
$rawCrew = $command[1];
if($crewType != $general['crewtype']) {
$general['crew'] = 0;
$general['train'] = $defaulttrain;
$general['atmos'] = $defaultatmos;
}
if($general['crew'] != 0) {
$dtype = "추가".$type;
}
else {
$dtype = $type;
}
if(!$general['nation']){
$actLog->pushGeneralActionLog("재야입니다. $dtype 실패. <1>$date</>");
return;
}
$city = $db->queryFirstRow('SELECT * FROM city WHERE city = %i', $general['city']);
if($city['nation'] != $general['nation']){
$actLog->pushGeneralActionLog("아국이 아닙니다. $dtype 실패. <1>$date</>");
return;
}
$crewTypeObj = GameUnitConst::byID($crewType);
if($crewTypeObj === null){
$actLog->pushGeneralActionLog("병종 코드 에러. $type 실패. <1>$date</>");
return;
}
[$nationLevel, $tech] = $db->queryFirstList('SELECT `level`,tech FROM nation WHERE nation=%i', $general['nation']);
$lbonus = setLeadershipBonus($general, $nationLevel);
//NOTE: 입력 변수는 100명 단위임
$crew = $rawCrew * 100;
if($crew + $general['crew'] > getGeneralLeadership($general, true, true, true)*100) {
$crew = max(0, getGeneralLeadership($general, true, true, true) * 100 - $general['crew']);
}
if($crew <= 0) {
$actLog->pushGeneralActionLog("더이상 $dtype 할 수 없습니다. $dtype 실패. <1>$date</>");
return;
}
$cost = $crewTypeObj->costWithTech($tech, $crew);
if($type === '모병') {
$cost *= 2;
}
//성격 보정
$cost = Util::round(CharCost($cost, $general['personal']));
//특기 보정 : 징병, 보병, 궁병, 기병, 귀병, 공성
if($general['special2'] == 72) { $cost *= 0.5; }
else if($general['special2'] == 50 && $crewTypeObj->armType == GameUnitConstBase::T_FOOTMAN) { $cost *= 0.9; }
else if($general['special2'] == 51 && $crewTypeObj->armType == GameUnitConstBase::T_ARCHER) { $cost *= 0.9; }
else if($general['special2'] == 52 && $crewTypeObj->armType == GameUnitConstBase::T_CAVALRY) { $cost *= 0.9; }
else if($general['special2'] == 40 && $crewTypeObj->armType == GameUnitConstBase::T_WIZARD) { $cost *= 0.9; }
else if($general['special2'] == 53 && $crewTypeObj->armType == GameUnitConstBase::T_SIEGE) { $cost *= 0.9; }
if($general['gold'] < $cost){
$actLog->pushGeneralActionLog("자금이 모자랍니다. $dtype 실패. <1>$date</>");
return;
}
if($general['rice'] < $crew / 100) {
$actLog->pushGeneralActionLog("군량이 모자랍니다. $dtype 실패. <1>$date</>");
return;
}
$ownCities = [];
$ownRegions = [];
foreach($db->queryFirstColumn('SELECT city FROM city WHERE nation = %i', $general['nation']) as $ownCity){
$ownCities[$ownCity] = 1;
$ownRegions[CityConst::byId($ownCity)->region] = 1;
}
$valid = $crewTypeObj->isValid($ownCities, $ownRegions, $year - $startyear, $tech);
if(!$valid) {
$actLog->pushGeneralActionLog("현재 $dtype 할 수 없는 병종입니다. $dtype 실패. <1>$date</>");
return;
}
if($city['pop']-30000 < $crew) { // 주민 30000명 이상만 가능
$actLog->pushGeneralActionLog("주민이 모자랍니다. $dtype 실패. <1>$date</>");
return;
}
if($city['trust'] < 20) {
$actLog->pushGeneralActionLog("민심이 낮아 주민들이 도망갑니다. $dtype 실패. <1>$date</>");
return;
}
$josaUl = JosaUtil::pick($crewTypeObj->name, '을');
$actLog->pushGeneralActionLog($crewTypeObj->name."{$josaUl} <C>{$crew}</>명 {$dtype}했습니다. <1>$date</>");
$exp = Util::round($crew / 100);
$ded = Util::round($crew / 100);
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $crewType, $crew/100);
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$atmos = Util::round(($general['atmos'] * $general['crew'] + $defaultatmos * $crew) / ($general['crew'] + $crew));
$train = Util::round(($general['train'] * $general['crew'] + $defaulttrain * $crew) / ($general['crew'] + $crew));
$general['crew'] += $crew;
$general['gold'] -= $cost;
// 주민수 감소 // 민심 감소
if($type === '징병') {
$city['trust'] -= ($crew / $city['pop'])*100;
}
else {
$city['trust'] -= ($crew / 2 / $city['pop'])*100;
}
if($city['trust'] < 0) { $city['trust'] = 0; }
$db->update('city', [
'pop'=>$db->sqleval('pop-%i', $crew),
'trust'=>$city['trust']
], 'city = %i', $general['city']);
// 통솔경험, 병종 변경, 병사수 변경, 훈련치 변경, 사기치 변경, 자금 군량 하락, 공헌도, 명성 상승
$general['leadership2']++;
$db->update('general', [
'resturn'=>'SUCCESS',
'leadership2'=>$general['leadership2'],
'crewtype'=>$crewTypeObj->id,
'crew'=>$general['crew'],
'train'=>$train,
'atmos'=>$atmos,
'gold'=>$general['gold'],
'rice'=>$db->sqleval('rice - %i', Util::round($crew/100)),
'dedication'=>$db->sqleval('dedication + %i', $ded),
'experience'=>$db->sqleval('experience + %i', $exp)
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $actLog);
uniqueItemEx($general['no'], $actLog);
$actLog->pushGeneralActionLog($log, ActionLogger::RAWTEXT);
}
function process_13(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 훈련 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 훈련 실패. <1>$date</>";
} elseif($general['crew'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 없습니다. 훈련 실패. <1>$date</>";
} elseif($general['train'] >= GameConst::$maxTrainByCommand) {
$log[] = "<C>●</>{$admin['month']}월:병사들은 이미 정예병사들입니다. <1>$date</>";
} else {
// 훈련시
$score = Util::round(getGeneralLeadership($general, true, true, true) * 100 / $general['crew'] * GameConst::$trainDelta);
$log[] = "<C>●</>{$admin['month']}월:훈련치가 <C>$score</> 상승했습니다. <1>$date</>";
$exp = 100;
$ded = 70;
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], Util::round($general['crew']/100));
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 훈련치 변경
$score += $general['train'];
if($score > GameConst::$maxTrainByCommand) { $score = GameConst::$maxTrainByCommand; }
$query = "update general set train='$score' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 사기 약간 감소
$score = intval($general['atmos'] * GameConst::$atmosSideEffectByTraining);
if($score < 0 ) { $score = 0; }
$query = "update general set atmos='$score' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 경험치 상승 // 공헌도, 명성 상승
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_14(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$nation = getNationStaticInfo($general['nation']);
$lbonus = setLeadershipBonus($general, $nation['level']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 사기진작 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 사기진작 실패. <1>$date</>";
} elseif($general['crew'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 없습니다. 사기진작 실패. <1>$date</>";
} elseif($general['gold'] < $general['crew']/100) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 사기진작 실패. <1>$date</>";
} elseif($general['atmos'] >= GameConst::$maxAtmosByCommand) {
$log[] = "<C>●</>{$admin['month']}월:이미 사기는 하늘을 찌를듯 합니다. <1>$date</>";
} else {
$score = Util::round(getGeneralLeadership($general, true, true, true)*100 / $general['crew'] * GameConst::$atmosDelta);
$gold = $general['gold'] - Util::round($general['crew']/100);
$log[] = "<C>●</>{$admin['month']}월:사기치가 <C>$score</> 상승했습니다. <1>$date</>";
$exp = 100;
$ded = 70;
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], Util::round($general['crew']/100));
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 사기치 변경 // 자금 감소 // 경험치 상승 // 공헌도, 명성 상승
$score += $general['atmos'];
if($score > GameConst::$maxAtmosByCommand) { $score = GameConst::$maxAtmosByCommand; }
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',atmos='$score',gold='$gold',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_15(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$query = "select nation,tech from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
if($general['term']%100 == 15) {
$term = intdiv($general['term'], 100) + 1;
$code = $term * 100 + 15;
} else {
$term = 1;
$code = 100 + 15;
}
$cost = Util::round($general['crew']/100 * 3 * getTechCost($nation['tech']));
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 전투태세 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 전투태세 실패. <1>$date</>";
// } elseif($city['supply'] == 0) {
// $log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 전투태세 실패. <1>$date</>";
} elseif($general['crew'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 없습니다. 전투태세 실패. <1>$date</>";
} elseif($general['atmos'] >= 90 && $general['train'] >= 90) {
$log[] = "<C>●</>{$admin['month']}월:이미 병사들은 날쌔고 용맹합니다. <1>$date</>";
} elseif($general['gold'] < $cost) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 전투태세 실패. <1>$date</>";
} elseif($term < 3) {
$log[] = "<C>●</>{$admin['month']}월:병사들을 열심히 훈련중... ({$term}/3) <1>$date</>";
$query = "update general set resturn='ONGOING',term={$code} where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
//기술로 가격
$gold = $general['gold'] - $cost;
$log[] = "<C>●</>{$admin['month']}월:전투태세 완료! <1>$date</>";
$exp = 100 * 3;
$ded = 70 * 3;
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], Util::round($general['crew']/100 * 3));
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 훈련,사기치 변경 // 자금 감소 // 경험치 상승 // 공헌도, 명성 상승
$general['leadership2']+=3;
$query = "update general set resturn='SUCCESS',term='0',atmos='95',train='95',gold='$gold',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_16(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$query = "select nation,war,strategic_cmd_limit,tech from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$command = DecodeCommand($general['turn0']);
$destination = $command[1];
$query = "select * from city where city='$destination'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$query = "select nation,strategic_cmd_limit,tech from nation where nation='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dnation = MYDB_fetch_array($result);
$query = "select state from diplomacy where me='{$general['nation']}' and you='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
if(key_exists($destination, CityConst::byID($general['city'])->path)){
$nearCity = true;
}
else{
$nearCity = false;
}
$josaRo = JosaUtil::pick($destcity['name'], '로');
if($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:현재 초반 제한중입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
// } elseif($city['supply'] == 0) {
// $log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif(!$nearCity) {
$log[] = "<C>●</>{$admin['month']}월:인접도시가 아닙니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($general['crew'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 없습니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($general['rice'] <= Util::round($general['crew']/100)) {
$log[] = "<C>●</>{$admin['month']}월:군량이 모자랍니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($dip['state'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:교전중인 국가가 아닙니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($general['nation'] != $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:본국에서만 출병가능합니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($nation['war'] == 1) {
$log[] = "<C>●</>{$admin['month']}월:현재 전쟁 금지입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
} elseif($general['nation'] == $destcity['nation']) {
$log[] = "<C>●</>{$admin['month']}월:본국입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 출병 실패. <1>$date</>";
pushGenLog($general, $log);
process_21($general);
return;
} else {
// 전쟁 표시
$query = "update city set state=43,term=3 where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], Util::round($general['crew']/100));
// 전투 처리
processWar($general, $destcity);
$log = uniqueItem($general, $log);
}
pushGenLog($general, $log);
}
function process_17(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
if($general['crew'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 없습니다. 소집해제 실패. <1>$date</>";
} else {
// 주민으로 돌아감
$query = "update city set pop=pop+'{$general['crew']}' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set crew='0' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log[0] = "<C>●</>{$admin['month']}월:병사들을 <R>소집해제</>하였습니다. <1>$date</>";
// 경험, 공헌 상승
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$query = "update general set resturn='SUCCESS',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_21(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$db = DB::db();
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$city = CityConst::byID($general['city']);
$command = DecodeCommand($general['turn0']);
$destination = $command[1];
$destCity = CityConst::byID($destination);
$josaRo = JosaUtil::pick($destCity->name, '로');
if(!key_exists($destCity->id, $city->path)) {
$log[] = "<C>●</>{$admin['month']}월:인접도시가 아닙니다. <G><b>{$destCity->name}</b></>{$josaRo} 이동 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 부족합니다. <G><b>{$destCity->name}</b></>{$josaRo} 이동 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destCity->name}</b></>{$josaRo} 이동했습니다. <1>$date</>";
$exp = 50;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
// 이동, 경험치 상승, 명성 상승, 사기 감소
$general['leadership2']++;
$db->update('general',[
'resturn'=>'SUCCESS',
'gold'=>$db->sqleval('gold - %i',$admin['develcost']),
'city'=>$destCity->id,
'atmos'=>$db->sqleval('atmos*0.95'),
'leadership2'=>$general['leadership2'],
'experience'=>$db->sqleval('experience + %i',$exp)
], 'no = %i', $general['no']);
if($general['level'] == 12) {
$nation = getNationStaticInfo($general['nation']);
if($nation['level'] == 0) {
$db->update('general', [
'city'=>$destCity->id
], 'nation = %i', $general['nation']);
$genlog = ["<C>●</>방랑군 세력이 <G><b>{$destCity->name}</b></>{$josaRo} 이동했습니다."];
foreach($db->query('SELECT `no` FROM general WHERE nation=%i and `level`<12', $general['nation']) as $follower){
pushGenLog($follower, $genlog);
}
}
}
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_26(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$troop = getTroop($general['troop']);
$admin = $gameStor->getValues(['year', 'month']);
$query = "select nation,name,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select no,name,nation,city from general where troop='{$general['troop']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
if($general['nation'] != $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 집합 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 집합 실패. <1>$date</>";
} elseif($general['no'] != $troop['no']) {
$log[] = "<C>●</>{$admin['month']}월:부대장이 아닙니다. 집합 실패. <1>$date</>";
} elseif($gencount == 0) {
$log[] = "<C>●</>{$admin['month']}월:집합 가능한 부대원이 없습니다. 집합 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$city['name']}</b></>에서 집합을 실시했습니다. <1>$date</>";
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
//부대원에게 로그 전달
$josaRo = JosaUtil::pick($city['name'], '로');
$genlog = ["<C>●</><S>{$troop['name']}</>의 부대원들은 <G><b>{$city['name']}</b></>{$josaRo} 집합되었습니다."];
for($i=0; $i < $gencount; $i++) {
$troopgen = MYDB_fetch_array($result);
if($general['city'] != $troopgen['city']) {
pushGenLog($troopgen, $genlog);
}
}
// 같은 부대원 모두 집합
$query = "update general set city='{$general['city']}' where troop='{$general['troop']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 경험치 명성 공헌 상승
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_28(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$youlog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$nation = getNationStaticInfo($general['nation']);
if($nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:방랑군입니다. 귀환 실패. <1>$date</>";
} elseif($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 귀환 실패. <1>$date</>";
} elseif(($general['level'] == 1 || $general['level'] >= 5) && $general['city'] == $nation['capital']) {
$log[] = "<C>●</>{$admin['month']}월:이미 수도입니다. 귀환 실패. <1>$date</>";
} else {
if($general['level'] == 2) {
$query = "select city,name from city where gen3='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
} elseif($general['level'] == 3) {
$query = "select city,name from city where gen2='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
} elseif($general['level'] == 4) {
$query = "select city,name from city where gen1='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
} else {
$query = "select city,name from city where city='{$nation['capital']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
}
$josaRo = JosaUtil::pick($city['name'], '로');
$log[] = "<C>●</>{$admin['month']}월:<G>{$city['name']}</>{$josaRo} 귀환했습니다. <1>$date</>";
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 귀환
$query = "update general set city='{$city['city']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 경험치 상승 // 명성,공헌 상승
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',experience=experience+'$exp',dedication=dedication+'$ded' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
//pushGenLog($you, $youlog);
}
function process_30(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$query = "select path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$dist = searchDistance($general['city'], 3, false);
$command = DecodeCommand($general['turn0']);
$destination = $command[1];
$query = "select name from city where city='$destination'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$cost = $admin['develcost'] * 5;
$josaRo = JosaUtil::pick($destcity['name'], '로');
if($destination == $general['city']){
$log[] = "<C>●</>{$admin['month']}월:같은 도시입니다. <G><b>{$destcity['name']}</b></>{$josaRo} 강행 실패. <1>$date</>";
} elseif(!key_exists($destination, $dist)) {
$log[] = "<C>●</>{$admin['month']}월:거리가 멉니다. <G><b>{$destcity['name']}</b></>{$josaRo} 강행 실패. <1>$date</>";
} elseif($general['gold'] < $cost) {
$log[] = "<C>●</>{$admin['month']}월:자금이 부족합니다. <G><b>{$destcity['name']}</b></>{$josaRo} 강행 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaRo} 강행했습니다. <1>$date</>";
$exp = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
// 이동, 경험치 상승, 명성 상승, 병력/사기/훈련 감소
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',gold=gold-'$cost',city='$destination',crew=crew*0.95,atmos=atmos*0.9,train=train*0.95,leadership2='{$general['leadership2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
if($general['level'] == 12) {
$nation = getNationStaticInfo($general['nation']);
if($nation['level'] == 0) {
$query = "update general set city='$destination' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "select no,name from general where nation='{$general['nation']}' and level<'12'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$genlog = ["<C>●</>방랑군 세력이 <G><b>{$destcity['name']}</b></>{$josaRo} 강행했습니다."];
for($j=0; $j < $gencount; $j++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $genlog);
}
}
}
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_31(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$msg = [];
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$dist = searchDistance($general['city'], 2, false);
$command = DecodeCommand($general['turn0']);
$destination = $command[1];
$query = "select * from city where city='$destination'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
if(!$city) {
$log[] = "<C>●</>{$admin['month']}월:없는 도시입니다. 첩보 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']*3) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. <G><b>{$city['name']}</b></>에 첩보 실패. <1>$date</>";
} elseif($general['rice'] < $admin['develcost']*3) {
$log[] = "<C>●</>{$admin['month']}월:군량이 모자랍니다. <G><b>{$city['name']}</b></>에 첩보 실패. <1>$date</>";
} elseif($general['nation'] == $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국입니다. <G><b>{$city['name']}</b></>에 첩보 실패. <1>$date</>";
// } elseif(!key_exists($destination, $dist)) {
// $log[] = "<C>●</>{$admin['month']}월:너무 멉니다. <G><b>{$city['name']}</b></>에 첩보 실패. <1>$date</>";
} else {
$query = "select crew,crewtype from general where city='$destination' and nation='{$city['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$crew = 0;
$typecount = [];
for($i=0; $i < $gencount; $i++) {
$gen = MYDB_fetch_array($result);
if($gen['crew'] != 0) {
if(!key_exists($gen['crewtype'], $typecount)){
$typecount[$gen['crewtype']] = 1;
}
else{
$typecount[$gen['crewtype']]+=1;
}
$crew += $gen['crew'];
}
}
if(!key_exists($destination, $dist)) {
$josaUl = JosaUtil::pick($city['name'], '을');
$alllog[] = "<C>●</>{$admin['month']}월:누군가가 <G><b>{$city['name']}</b></>{$josaUl} 살피는 것 같습니다.";
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$city['name']}</b></>의 소문만 들을 수 있었습니다. <1>$date</>";
$log[] = "【<G>{$city['name']}</>】주민:{$city['pop']}, 민심:".round($city['trust'], 1).", 장수:$gencount, 병력:$crew";
} elseif($dist[$destination] == 2) {
$josaUl = JosaUtil::pick($city['name'], '을');
$alllog[] = "<C>●</>{$admin['month']}월:누군가가 <G><b>{$city['name']}</b></>{$josaUl} 살피는 것 같습니다.";
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$city['name']}</b></>의 어느정도 정보를 얻었습니다. <1>$date</>";
$log[] = "【<M>첩보</>】농업:{$city['agri']}, 상업:{$city['comm']}, 치안:{$city['secu']}, 수비:{$city['def']}, 성벽:{$city['wall']}";
$log[] = "【<G>{$city['name']}</>】주민:{$city['pop']}, 민심:".round($city['trust'], 1).", 장수:$gencount, 병력:$crew";
} else {
$josaUl = JosaUtil::pick($city['name'], '을');
$alllog[] = "<C>●</>{$admin['month']}월:누군가가 <G><b>{$city['name']}</b></>{$josaUl} 살피는 것 같습니다.";
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$city['name']}</b></>의 많은 정보를 얻었습니다. <1>$date</>";
$msg[] = "【<S>병종</>】";
foreach($typecount as $crewtype=>$cnt){
$crewtypeText = mb_substr(GameUnitConst::byID($crewtype)->name, 0, 2);
$msg[] = "{$crewtypeText}:{$cnt}";
}
$log[] = join(' ', $msg);
$msg = [];
$log[] = "【<M>첩보</>】농업:{$city['agri']}, 상업:{$city['comm']}, 치안:{$city['secu']}, 수비:{$city['def']}, 성벽:{$city['wall']}";
$log[] = "【<G>{$city['name']}</>】주민:{$city['pop']}, 민심:".round($city['trust'], 1).", 장수:$gencount, 병력:$crew";
if($general['nation'] != 0 && $city['nation'] != 0) {
$query = "select name,tech from nation where nation='{$city['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$yourTech = MYDB_fetch_array($result);
$query = "select tech from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$myTech = MYDB_fetch_array($result);
$diff = $yourTech['tech'] - $myTech['tech']; // 차이
if($diff >= 1000) { $log[] = "【<span class='ev_notice'>{$yourTech['name']}</span>】아국대비기술:<M>↑</>압도"; }
elseif($diff >= 250) { $log[] = "【<span class='ev_notice'>{$yourTech['name']}</span>】아국대비기술:<Y>▲</>우위"; }
elseif($diff >= -250) { $log[] = "【<span class='ev_notice'>{$yourTech['name']}</span>】아국대비기술:<W>↕</>대등"; }
elseif($diff >= -1000) { $log[] = "【<span class='ev_notice'>{$yourTech['name']}</span>】아국대비기술:<G>▼</>열위"; }
else { $log[] = "【<span class='ev_notice'>{$yourTech['name']}</span>】아국대비기술:<C>↓</>미미"; }
}
}
// 자금 하락 // 경험치 상승 // 공헌도, 명성 상승
$exp = rand() % 100 + 1;
$ded = rand() % 70 + 1;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$general['leadership2']++;
$general['gold'] -= $admin['develcost']*3;
$general['rice'] -= $admin['develcost']*3;
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',rice='{$general['rice']}',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$rawSpy = $db->queryFirstField('SELECT spy FROM nation WHERE nation = %i', $general['nation']);
if($rawSpy == ''){
$spyInfo = [];
}
else if(strpos($rawSpy, '|') !== false || is_numeric($rawSpy)){
//TODO: 0.8 버전 이후에는 삭제할 것. 이후 버전은 json으로 변경됨.
$spyInfo = [];
foreach(explode('|', $rawSpy) as $value){
$value = intval($value);
$cityNo = intdiv($value, 10);
$remainMonth = $value % 10;
$spyInfo[$cityNo] = $remainMonth;
}
}
else{
$spyInfo = Json::decode($rawSpy);
}
$spyInfo[$destination] = 3;
$db->update('nation', [
'spy'=>Json::encode($spyInfo, Json::EMPTY_ARRAY_IS_DICT)
], 'nation=%i', $general['nation']);
$log = checkAbility($general, $log);
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_41(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$ratio = rand() % 100;
$exp = $general['crew'] / 400;
$crewexp = $general['crew'] * $general['train'] * $general['atmos'] / 20 / 10000;
// 랜덤치
$exp = Util::round($exp * (80 + rand() % 41)/100); // 80 ~ 120%
$crewexp = Util::round($crewexp * (80 + rand() % 41)/100); // 80 ~ 120%
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ratio = CharCritical($ratio, $general['personal']);
if($general['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 단련 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 단련 실패. <1>$date</>";
} elseif($general['rice'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:군량이 모자랍니다. 단련 실패. <1>$date</>";
} elseif($general['train'] < 40) {
$log[] = "<C>●</>{$admin['month']}월:훈련이 너무 낮습니다. 단련 실패. <1>$date</>";
} elseif($general['atmos'] < 40) {
$log[] = "<C>●</>{$admin['month']}월:사기가 너무 낮습니다. 단련 실패. <1>$date</>";
} elseif($crewexp == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 모자랍니다. 단련 실패. <1>$date</>";
} else {
$crewstr = GameUnitConst::allType()[GameUnitConst::byID($general['crewtype'])->armType];
if($ratio < 33) {
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], $crewexp);
$log[] = "<C>●</>{$admin['month']}월:$crewstr 숙련도 향상이 <span class='ev_failed'>지지부진</span>했습니다. <1>$date</>";
} elseif($ratio < 66) {
$exp = $exp * 2;
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], $crewexp * 2);
$log[] = "<C>●</>{$admin['month']}월:$crewstr 숙련도가 향상되었습니다. <1>$date</>";
} else {
$exp = $exp * 3;
// 숙련도 증가
addGenDex($general['no'], GameConst::$maxAtmosByCommand, GameConst::$maxTrainByCommand, $general['crewtype'], $crewexp * 3);
$log[] = "<C>●</>{$admin['month']}월:$crewstr 숙련도가 <S>일취월장</>했습니다. <1>$date</>";
}
// 경험치 상승 // 명성 상승
$query = "update general set resturn='SUCCESS',gold=gold-'{$admin['develcost']}',rice=rice-'{$admin['develcost']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
pushGenLog($general, $log);
}
function process_42(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$type = rand() % 27 + 1;
$exp = 30;
$ded = 0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$exp2 = $exp * 2;
switch($type) {
case 1:
$log[] = "<C>●</>{$admin['month']}월:지나가는 행인에게서 금을 <C>300</> 받았습니다. <1>$date</>";
// 자금 상승 // 명성 상승
$query = "update general set resturn='SUCCESS',gold=gold+300,experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 2:
$log[] = "<C>●</>{$admin['month']}월:지나가는 행인에게서 쌀을 <C>300</> 받았습니다. <1>$date</>";
// 군량 상승 // 명성 상승
$query = "update general set resturn='SUCCESS',rice=rice+300,experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 3:
$log[] = "<C>●</>{$admin['month']}월:어느 명사와 설전을 벌여 멋지게 이겼습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2'] += 2;
$query = "update general set resturn='SUCCESS',intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 4:
$log[] = "<C>●</>{$admin['month']}월:명사와 설전을 벌였으나 망신만 당했습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 5:
$log[] = "<C>●</>{$admin['month']}월:동네 장사와 힘겨루기를 하여 멋지게 이겼습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['strength2'] += 2;
$query = "update general set resturn='SUCCESS',strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 6:
$log[] = "<C>●</>{$admin['month']}월:동네 장사와 힘겨루기를 했지만 망신만 당했습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 7:
$log[] = "<C>●</>{$admin['month']}월:산적과 싸워 금 <C>300</>을 빼앗았습니다. <1>$date</>";
// 자금 상승 // 경험치 상승 // 명성 상승
$general['strength2'] += 2;
$query = "update general set resturn='SUCCESS',gold=gold+300,strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 8:
$log[] = "<C>●</>{$admin['month']}월:산적을 만나 금 <C>200</>을 빼앗겼습니다. <1>$date</>";
$general['gold'] -= 200;
if($general['gold'] <= 0) { $general['gold'] = 0; }
// 자금 하락 // 경험 상승
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 9:
$log[] = "<C>●</>{$admin['month']}월:호랑이를 잡아 고기 <C>300</>을 얻었습니다. <1>$date</>";
// 군량 상승 // 경험치 상승
$general['strength2'] += 2;
$query = "update general set resturn='SUCCESS',rice=rice+300,strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 10:
$log[] = "<C>●</>{$admin['month']}월:호랑이에게 물려 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 11:
$log[] = "<C>●</>{$admin['month']}월:곰을 잡아 고기 <C>300</>을 얻었습니다. <1>$date</>";
// 군량 상승 // 경험치 상승 // 명성 상승
$general['strength2'] += 2;
$query = "update general set resturn='SUCCESS',rice=rice+300,strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 12:
$log[] = "<C>●</>{$admin['month']}월:곰에게 할퀴어 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 13:
$log[] = "<C>●</>{$admin['month']}월:주점에서 사람들과 어울려 술을 마셨습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 14:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구해주었습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 15:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구해주다가 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 16:
$log[] = "<C>●</>{$admin['month']}월:돈을 빌려주었다가 이자 <C>300</>을 받았습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold=gold+300,intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 17:
$log[] = "<C>●</>{$admin['month']}월:돈을 <C>200</> 빌려주었다가 떼어먹혔습니다. <1>$date</>";
$general['gold'] -= 200;
if($general['gold'] <= 0) { $general['gold'] = 0; }
// 명성 상승
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 18:
$log[] = "<C>●</>{$admin['month']}월:쌀을 빌려주었다가 이자 <C>300</>을 받았습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2']++;
$query = "update general set resturn='SUCCESS',rice=rice+300,intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 19:
$log[] = "<C>●</>{$admin['month']}월:쌀을 <C>200</> 빌려주었다가 떼어먹혔습니다. <1>$date</>";
$general['rice'] -= 200;
if($general['rice'] <= 0) { $general['rice'] = 0; }
// 명성 상승
$query = "update general set resturn='SUCCESS',rice='{$general['rice']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 20:
$log[] = "<C>●</>{$admin['month']}월:거리에서 글 모르는 아이들을 모아 글을 가르쳤습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2'] += 2;
$query = "update general set resturn='SUCCESS',intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 21:
$log[] = "<C>●</>{$admin['month']}월:백성들에게 현인의 가르침을 설파했습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['leadership2'] += 2;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 22:
$log[] = "<C>●</>{$admin['month']}월:어느 집의 무너진 울타리를 고쳐주었습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['strength2'] += 2;
$query = "update general set resturn='SUCCESS',strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 23:
$log[] = "<C>●</>{$admin['month']}월:어느 집의 도망친 가축을 되찾아 주었습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['leadership2'] += 2;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 24:
$log[] = "<C>●</>{$admin['month']}월:호랑이에게 물려 크게 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 30 + 20;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 25:
$log[] = "<C>●</>{$admin['month']}월:곰에게 할퀴어 크게 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 30 + 20;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 26:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구하다가 죽을뻔 했습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 50 + 30;
$general['strength2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',strength2='{$general['strength2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
default:
$log[] = "<C>●</>{$admin['month']}월:아무일도 일어나지 않았습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
}
$log = checkAbility($general, $log);
pushGenLog($general, $log);
}
function process_43(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$genlog = [];
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$command = DecodeCommand($general['turn0']);
$what = $command[3];
$who = $command[2];
$amount = $command[1];
$amount *= 100; // 100~10000까지
if($amount > 10000) { $amount = 10000; }
if($amount < 100) { $amount = 100; }
if($what == 1) { $dtype = ""; }
elseif($what == 2) { $dtype = ""; }
else { $what = 2; $dtype = ""; }
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select no,name,nation,gold,rice from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen = MYDB_fetch_array($result);
if($what == 1 && $general['gold'] < $amount) { $amount = $general['gold']; }
if($what == 2 && $general['rice'] < $amount) { $amount = $general['rice']; }
if(!$gen) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 증여 실패. <1>$date</>";
} elseif($what == 1 && $general['gold'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:자금이 없습니다. 증여 실패. <1>$date</>";
} elseif($what == 2 && $general['rice'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:군량이 없습니다. 증여 실패. <1>$date</>";
} elseif($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야는 불가능합니다. 증여 실패. <1>$date</>";
} elseif($general['nation'] != $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 증여 실패. <1>$date</>";
} elseif($general['nation'] != $gen['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 장수가 아닙니다. 증여 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 증여 실패. <1>$date</>";
} else {
$genlog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>에게서 $dtype <C>$amount</>을 증여 받았습니다.";
$log[] = "<C>●</>{$admin['month']}월:<Y>{$gen['name']}</>에게 $dtype <C>$amount</>을 증여했습니다. <1>$date</>";
if($what == 1) {
$gen['gold'] += $amount;
$query = "update general set gold='{$gen['gold']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general['gold'] -= $amount;
$query = "update general set gold='{$general['gold']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($what == 2) {
$gen['rice'] += $amount;
$query = "update general set rice='{$gen['rice']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general['rice'] -= $amount;
$query = "update general set rice='{$general['rice']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 경험치 상승 // 공헌도, 명성 상승
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
pushGenLog($gen, $genlog);
}
function process_44(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$query = "select name,gold,rice from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$command = DecodeCommand($general['turn0']);
$what = $command[2];
$amount = $command[1];
$amount *= 100; // 100~10000까지
if($amount > 10000) { $amount = 10000; }
if($amount < 100) { $amount = 100; }
if($what == 1) {
$dtype = "";
if($general['gold'] < $amount) { $amount = $general['gold']; }
} elseif($what == 2) {
$dtype = "";
if($general['rice'] < $amount) { $amount = $general['rice']; }
} else {
$what = 2;
$dtype = "";
if($general['rice'] < $amount) { $amount = $general['rice']; }
}
if($general['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 헌납 실패. <1>$date</>";
} elseif($what == 1 && $general['gold'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:자금이 없습니다. 헌납 실패. <1>$date</>";
} elseif($what == 2 && $general['rice'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:군량이 없습니다. 헌납 실패. <1>$date</>";
} elseif($general['nation'] != $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 헌납 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 헌납 실패. <1>$date</>";
} else {
// $alllog[] = "<C>●</>{$admin['month']}월:<D><b>{$nation['name']}</b></>에서 장수들이 재산을 헌납 하고 있습니다.";
$log[] = "<C>●</>{$admin['month']}월: $dtype <C>$amount</>을 헌납했습니다. <1>$date</>";
if($what == 1) {
$general['gold'] -= $amount;
$query = "update general set gold='{$general['gold']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['gold'] += $amount;
$query = "update nation set gold='{$nation['gold']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($what == 2) {
$general['rice'] -= $amount;
$query = "update general set rice='{$general['rice']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['rice'] += $amount;
$query = "update nation set rice='{$nation['rice']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 경험치 상승 // 공헌도, 명성 상승
$general['leadership2']++;
$query = "update general set resturn='SUCCESS',leadership2='{$general['leadership2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_48(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$city = getCity($general['city']);
$command = DecodeCommand($general['turn0']);
$type = $command[1];
if($type < 100) { $isweap = 0; }
elseif($type < 200) { $type -= 100; $isweap = 1; }
elseif($type < 300) { $type -= 200; $isweap = 2; }
elseif($type < 400) { $type -= 300; $isweap = 3; }
else { $type = 7; }
if($isweap == 3) { $cost = getItemCost($type); }
else { $cost = getItemCost($type); }
if($city['trade'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:도시에 상인이 없습니다. 장비매매 실패. <1>$date</>";
} elseif($city['secu']/1000 < $type) {
$log[] = "<C>●</>{$admin['month']}월:이 도시에서는 구할 수 없었습니다. 구입 실패. <1>$date</>";
} elseif($type > 6 || $type < 0) {
$log[] = "<C>●</>{$admin['month']}월:구입할 수 있는 물건이 아닙니다. 구입 실패. <1>$date</>";
} elseif($general['gold'] < $cost && $type != 0) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 구입 실패. <1>$date</>";
} elseif($general['weapon'] == 0 && $isweap == 0 && $type == 0) {
$log[] = "<C>●</>{$admin['month']}월:무기가 없습니다. 판매 실패. <1>$date</>";
} elseif($general['book'] == 0 && $isweap == 1 && $type == 0) {
$log[] = "<C>●</>{$admin['month']}월:서적이 없습니다. 판매 실패. <1>$date</>";
} elseif($general['horse'] == 0 && $isweap == 2 && $type == 0) {
$log[] = "<C>●</>{$admin['month']}월:명마가 없습니다. 판매 실패. <1>$date</>";
} elseif($general['item'] == 0 && $isweap == 3 && $type == 0) {
$log[] = "<C>●</>{$admin['month']}월:도구가 없습니다. 판매 실패. <1>$date</>";
} else {
if($isweap == 0) {
if($type != 0) {
$josaUl = JosaUtil::pick(getItemName($type), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($type)."</>{$josaUl} 구입했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',weapon='$type',gold=gold-'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$cost = Util::round(getItemCost($general['weapon']) / 2);
$josaUl = JosaUtil::pick(getItemName($general['weapon']), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($general['weapon'])."</>{$josaUl} 판매했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',weapon='0',gold=gold+'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
} elseif($isweap == 1) {
if($type != 0) {
$josaUl = JosaUtil::pick(getItemName($type), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($type)."</>{$josaUl} 구입했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',book='$type',gold=gold-'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$cost = Util::round(getItemCost($general['book']) / 2);
$josaUl = JosaUtil::pick(getItemName($general['book']), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($general['book'])."</>{$josaUl} 판매했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',book='0',gold=gold+'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
} elseif($isweap == 2) {
if($type != 0) {
$josaUl = JosaUtil::pick(getItemName($type), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($type)."</>{$josaUl} 구입했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',horse='$type',gold=gold-'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$cost = Util::round(getItemCost($general['horse']) / 2);
$josaUl = JosaUtil::pick(getItemName($general['horse']), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($general['horse'])."</>{$josaUl} 판매했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',horse='0',gold=gold+'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
} elseif($isweap == 3) {
if($type != 0) {
$josaUl = JosaUtil::pick(getItemName($type), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($type)."</>{$josaUl} 구입했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',item='$type',gold=gold-'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$cost = Util::round(getItemCost($general['item']) / 2);
$josaUl = JosaUtil::pick(getItemName($general['item']), '을');
$log[] = "<C>●</>{$admin['month']}월:<C>".getItemName($general['item'])."</>{$josaUl} 판매했습니다. <1>$date</>";
$query = "update general set resturn='SUCCESS',item='0',gold=gold+'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
}
}
$exp = 10;
$ded = 0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 명성 상승
$query = "update general set experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushGenLog($general, $log);
}
function process_49(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$nation = getNationStaticInfo($general['nation']);
$city = getCity($general['city']);
$command = DecodeCommand($general['turn0']);
$type = $command[2];
$amount = $command[1];
$amount *= 100;
if($type != 1 && $type != 2) { $type = 1; }
if($amount < 100) { $amount = 100; }
elseif($amount > 10000) { $amount = 10000; }
if($city['trade'] == 0 && $general['npc'] >= 2) {
$city['trade'] = 100;
}
// 거상 f배 이득시 금 계산
// a : 쌀, b : 물가, f : 배수, c : 금
// (0.7 ~1.3) : c = a((1+f)b-f)
// (0.99~1.01) : c = a((1-f)b+f)
if($type == 1) {
$dtype = "군량 판매";
if($general['rice'] < $amount) { $amount = $general['rice']; }
$cost = $amount * $city['trade'] / 100;
$tax = $cost * GameConst::$exchangeFee;
$cost = $cost - $tax;
} elseif($type == 2) {
$dtype = "군량 구입";
$cost = $amount * $city['trade'] / 100;
$tax = $cost * GameConst::$exchangeFee;
$cost = $cost + $tax;
if($general['gold'] < $cost) {
$cost = $general['gold'];
$tax = $cost * GameConst::$exchangeFee;
$amount = ($cost-$tax) * 100 / $city['trade'];
}
}
$cost = Util::round($cost);
$amount = Util::round($amount);
$tax = Util::round($tax);
if($city['trade'] == 0 && $general['npc'] < 2) {
$log[] = "<C>●</>{$admin['month']}월:도시에 상인이 없습니다. $dtype 실패. <1>$date</>";
} elseif($general['nation'] != $city['nation'] && $nation['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. $dtype 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. $dtype 실패. <1>$date</>";
} elseif($type == 1 && $general['rice'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:군량이 없습니다. $dtype 실패. <1>$date</>";
} elseif($type == 2 && $general['gold'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:자금이 없습니다. $dtype 실패. <1>$date</>";
} else {
// 판매
if($type == 1) {
$log[] = "<C>●</>{$admin['month']}월:군량 <C>$amount</>을 팔아 자금 <C>$cost</>을 얻었습니다. <1>$date</>";
// 군량 감소
$query = "update general set rice=rice-{$amount} where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 증가
$query = "update general set gold=gold+{$cost} where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 구입
} elseif($type == 2) {
$log[] = "<C>●</>{$admin['month']}월:군량 <C>$amount</>을 사서 자금 <C>$cost</>을 썼습니다. <1>$date</>";
// 군량 증가
$query = "update general set rice=rice+{$amount} where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 자금 감소
$query = "update general set gold=gold-{$cost} where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// 세금 국고로
$query = "update nation set gold=gold+'$tax' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$exp = 30;
$ded = 50;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 공헌도, 명성 상승
$query = "update general set resturn='SUCCESS',dedication=dedication+'$ded', experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 경험치 상승
switch(Util::choiceRandomUsingWeight([$general['leadership'], $general['power'], $general['intel']])) {
case 0:
$general['leadership2']++;
$query = "update general set leadership2='{$general['leadership2']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 1:
$general['strength2']++;
$query = "update general set strength2='{$general['strength2']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 2:
$general['intel2']++;
$query = "update general set intel2='{$general['intel2']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
}
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_50(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$month = $gameStor->month;
$log[] = "<C>●</>{$month}월:건강 회복을 위해 요양합니다. <1>$date</>";
// 경험치 상승 // 공헌도, 명성 상승
$exp = 10;
$ded = 7;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$query = "update general set resturn='SUCCESS',injury='0',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushGenLog($general, $log);
}
function process_99(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$log[] = "<C>●</>{$admin['month']}월:아직 구현되지 않았습니다. <1>$date</>";
$exp = 100;
$ded = 0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 명성 상승
$query = "update general set experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushGenLog($general, $log);
}
-2438
View File
@@ -1,2438 +0,0 @@
<?php
namespace sammo;
function process_23(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$genlog = [];
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select gold,rice,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$what = $command[3];
$who = $command[2];
$amount = $command[1];
$amount *= 100; // 100~10000까지
if($amount > 10000) { $amount = 10000; }
if($amount < 100) { $amount = 100; }
if($what == 1) {
$dtype = "";
if($nation['gold']-GameConst::$basegold < $amount) { $amount = $nation['gold'] - GameConst::$basegold; }
} elseif($what == 2) {
$dtype = "";
if($nation['rice']-GameConst::$baserice < $amount) { $amount = $nation['rice'] - GameConst::$baserice; }
} else {
$what = 2;
$dtype = "";
if($nation['rice']-GameConst::$baserice < $amount) { $amount = $nation['rice'] - GameConst::$baserice; }
}
$query = "select no,nation,level,name,gold,rice from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen = MYDB_fetch_array($result);
if(!$gen) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 포상 실패. <1>$date</>";
} elseif($general['no'] == $who) {
$log[] = "<C>●</>{$admin['month']}월:자기 자신입니다. 포상 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 포상 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 포상 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 포상 실패. <1>$date</>";
} elseif($what == 1 && $amount <= 0) {
$log[] = "<C>●</>{$admin['month']}월:국고가 부족합니다. 포상 실패. <1>$date</>";
} elseif($what == 2 && $amount <= 0) {
$log[] = "<C>●</>{$admin['month']}월:병량이 부족합니다. 포상 실패. <1>$date</>";
} elseif($gen['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 장수가 아닙니다. 포상 실패. <1>$date</>";
} else {
$genlog[] = "<C>●</>$dtype <C>$amount</>을 포상으로 받았습니다.";
$log[] = "<C>●</>{$admin['month']}월:<Y>{$gen['name']}</>에게 $dtype <C>$amount</>을 수여했습니다. <1>$date</>";
if($what == 1) {
$gen['gold'] += $amount;
$query = "update general set gold='{$gen['gold']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['gold'] -= $amount;
$query = "update nation set gold='{$nation['gold']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($what == 2) {
$gen['rice'] += $amount;
$query = "update general set rice='{$gen['rice']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['rice'] -= $amount;
$query = "update nation set rice='{$nation['rice']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$query = "update general set resturn='SUCCESS' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// $log = checkAbility($general, $log);
}
pushGenLog($general, $log);
pushGenLog($gen, $genlog);
}
function process_24(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$genlog = [];
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','scenario','startyear']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,color,gold,rice,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$what = $command[3];
$who = $command[2];
$amount = $command[1];
$amount *= 100; // 100~10000까지
$query = "select no,nation,level,name,gold,rice,npc,picture,imgsvr from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen = MYDB_fetch_array($result);
if($amount > 10000) { $amount = 10000; }
if($amount < 100) { $amount = 100; }
if($what == 1) {
$dtype = "";
if($gen['gold'] < $amount) { $amount = $gen['gold']; }
} elseif($what == 2) {
$dtype = "";
if($gen['rice'] < $amount) { $amount = $gen['rice']; }
} else {
$what = 2;
$dtype = "";
if($gen['rice'] < $amount) { $amount = $gen['rice']; }
}
if(!$gen) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 몰수 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:현재 초반 제한중입니다. 몰수 실패. <1>$date</>";
} elseif($general['no'] == $who) {
$log[] = "<C>●</>{$admin['month']}월:자기 자신입니다. 몰수 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 몰수 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 몰수 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 몰수 실패. <1>$date</>";
} elseif($gen['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 장수가 아닙니다. 몰수 실패. <1>$date</>";
} else {
if($gen['npc'] >= 2 && rand()%100 == 0) {
switch(rand()%5) {
case 0: $str = "몰수를 하다니... 이것이 윗사람이 할 짓이란 말입니까..."; break;
case 1: $str = "사유재산까지 몰수해가면서 이 나라가 잘 될거라 믿습니까? 정말 이해할 수가 없군요..."; break;
case 2: $str = "내 돈 내놔라! 내 돈! 몰수가 왠 말이냐!"; break;
case 3: $str = "몰수해간 내 자금... 언젠가 몰래 다시 빼내올 것이다..."; break;
case 4: $str = "몰수로 인한 사기 저하는 몰수로 얻은 물자보다 더 손해란걸 모른단 말인가!"; break;
}
$src = new MessageTarget(
$gen['no'],
$gen['name'],
$gen['nation'],
$nation['name'],
$nation['color'],
GetImageURL($gen['imgsvr'], $gen['picture'])
);
$msg = new Message(
Message::MSGTYPE_PUBLIC,
$src,
$src,
$str,
new \DateTime(),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
$genlog[] = "<C>●</>$dtype {$amount}을 몰수 당했습니다.";
$log[] = "<C>●</>{$admin['month']}월:<Y>{$gen['name']}</>에게서 $dtype <C>$amount</>을 몰수했습니다. <1>$date</>";
if($what == 1) {
$gen['gold'] -= $amount;
$query = "update general set gold='{$gen['gold']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['gold'] += $amount;
$query = "update nation set gold='{$nation['gold']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($what == 2) {
$gen['rice'] -= $amount;
$query = "update general set rice='{$gen['rice']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation['rice'] += $amount;
$query = "update nation set rice='{$nation['rice']}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// 경험치 상승
$query = "update general set resturn='SUCCESS' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// $log = checkAbility($general, $log);
}
pushGenLog($general, $log);
pushGenLog($gen, $genlog);
}
function process_27(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$youlog = [];
$date = substr($general['turntime'],11,5);
$query = "select gold,rice,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$who = $command[2];
$where = $command[1];
$admin = $gameStor->getValues(['year','month']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select no,name,nation,level from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$you = MYDB_fetch_array($result);
$query = "select name,nation,supply from city where city='$where'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
if(!$you) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 발령 실패. <1>$date</>";
} elseif($general['no'] == $who) {
$log[] = "<C>●</>{$admin['month']}월:자기 자신입니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($destcity['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($destcity['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 도시가 아닙니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} elseif($general['nation'] != $you['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 장수가 아닙니다. <Y>{$you['name']}</> 발령 실패. <1>$date</>";
} else {
$josaUl = JosaUtil::pick($you['name'], '을');
$josaRo = JosaUtil::pick($destcity['name'], '로');
$log[] = "<C>●</>{$admin['month']}월:<Y>{$you['name']}</>{$josaUl} <G><b>{$destcity['name']}</b></>{$josaRo} 발령했습니다. <1>$date</>";
$youlog[] = "<C>●</><Y>{$general['name']}</>에 의해 <G><b>{$destcity['name']}</b></>{$josaRo} 발령됐습니다. <1>$date</>";
// 발령
$query = "update general set city='$where' where no='{$you['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 경험치 상승
$query = "update general set resturn='SUCCESS' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// $log = checkAbility($general, $log);
}
pushGenLog($general, $log);
pushGenLog($you, $youlog);
}
function process_51(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
list($year, $month, $turnterm) = $gameStor->getValuesAsArray(['year','month','turnterm']);
if($general['level'] < 5 || $general['nation']==0) {
pushGenLog($general, ["<C>●</>{$month}월:수뇌부가 아닙니다. 권고 실패. <1>$date</>"]);
return;
}
$supply = $db->queryFirstField('SELECT supply FROM city WHERE city=%i AND nation=%i', $general['city'], $general['nation']);
$myTurn = $db->queryFirstField('SELECT %b FROM nation WHERE nation=%i', "l{$general['level']}turn0", $general['nation']);
$command = DecodeCommand($myTurn);
$which = $command[1];
$srcNation = getNationStaticInfo($general['nation']);
$destNation = getNationStaticInfo($which);
if($destNation['nation'] == 0) {
pushGenLog($general, ["<C>●</>{$month}월:멸망한 국가입니다. 권고 실패. <1>$date</>"]);
return;
}
if($supply === null) {
pushGenLog($general, ["<C>●</>{$month}월:아국이 아닙니다. 권고 실패. <1>$date</>"]);
return;
}
if($supply === 0) {
pushGenLog($general, ["<C>●</>{$month}월:고립된 도시입니다. 권고 실패. <1>$date</>"]);
return;
}
// 상대에게 발송
$src = new MessageTarget(
$general['no'],
$general['name'],
$srcNation['nation'],
$srcNation['name'],
$srcNation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$destNation['nation'],
$destNation['name'],
$destNation['color']
);
$now = new \DateTime($date);
$validUntil = new \DateTime($date);
$validMinutes = max(30, $turnterm*3);
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
$msg = new DiplomaticMessage(
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}의 항복 권고 서신",
$now,
$validUntil,
['action'=>DiplomaticMessage::TYPE_SURRENDER]
);
$msg->send();
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>으로 항복 권고 서신을 보냈습니다.<1>$date</>"]);
}
function process_52(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,level,gold,rice,surlimit,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$mynation = MYDB_fetch_array($result);
$command = DecodeCommand($mynation["l{$general['level']}turn0"]);
$rice = $command[3];
$gold = $command[2];
$which = $command[1];
$rice *= 1000;
$gold *= 1000;
$limit = $mynation['level'] * 10000;
if($gold < 0) { $gold = 0; }
if($rice < 0) { $rice = 0; }
$query = "select nation,name,gold,rice,surlimit from nation where nation='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$younation = MYDB_fetch_array($result);
if($gold > $mynation['gold']-GameConst::$basegold) { $gold = $mynation['gold'] - GameConst::$basegold; }
if($rice > $mynation['rice']-GameConst::$baserice) { $rice = $mynation['rice'] - GameConst::$baserice; }
if($younation['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:멸망한 국가입니다. 원조 실패. <1>$date</>";
} elseif($gold == 0 && $rice == 0) {
$log[] = "<C>●</>{$admin['month']}월:보낼 물자가 부족합니다. 원조 실패. <1>$date</>";
} elseif($gold < 0 || $rice < 0) {
$log[] = "<C>●</>{$admin['month']}월:보낼 물자가 부족합니다. 원조 실패. <1>$date</>";
} elseif($gold > $limit || $rice > $limit) {
$log[] = "<C>●</>{$admin['month']}월:작위 제한량 이상은 보낼 수 없습니다. 원조 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 원조 실패. <1>$date</>";
} elseif($mynation['surlimit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:외교제한중입니다. 원조 실패. <1>$date</>";
} elseif($younation['surlimit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:상대국이 외교제한중입니다. 원조 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 원조 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 원조 실패. <1>$date</>";
} else {
// 본국 자원 감소
$query = "update nation set gold=gold-'$gold',rice=rice-'$rice',surlimit=surlimit+12 where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 상대국 자원 증가
$query = "update nation set gold=gold+'$gold',rice=rice+'$rice' where nation='$which'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//아국 수뇌부에게 로그 전달
$query = "select no,name,nation from general where nation='{$general['nation']}' and level>='9'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$josaRo = JosaUtil::pick($younation['name'], '로');
$genlog = ["<C>●</><D><b>{$younation['name']}</b></>{$josaRo} 금<C>$gold</> 쌀<C>$rice</>을 지원했습니다."];
for($i=0; $i < $gencount; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $genlog);
}
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$younation['name']}</b></>{$josaRo} 금<C>$gold</> 쌀<C>$rice</>을 지원");
pushNationHistory($mynation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$younation['name']}</b></>{$josaRo} 금<C>$gold</> 쌀<C>$rice</>을 지원");
pushNationHistory($younation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$mynation['name']}</b></>{$josaRo}부터 금<C>$gold</> 쌀<C>$rice</>을 지원 받음");
//상대국 수뇌부에게 로그 전달
$query = "select no,name,nation from general where nation='$which' and level>='9'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
for($i=0; $i < $gencount; $i++) {
$gen = MYDB_fetch_array($result);
$genlog[0] = "<C>●</><D><b>{$mynation['name']}</b></>에서 금<C>$gold</> 쌀<C>$rice</>을 원조 했습니다.";
pushGenLog($gen, $genlog);
}
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【원조】</b></><D><b>{$mynation['name']}</b></>에서 <D><b>{$younation['name']}</b></>{$josaRo} 물자를 지원합니다.";
$log[] = "<C>●</>{$admin['month']}월:<D><b>{$younation['name']}</b></>{$josaRo} 물자를 지원합니다. <1>$date</>";
$exp = 5;
$ded = 5;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 경험치 상승 // 공헌도, 명성 상승
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// $log = checkAbility($general, $log);
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_53(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
list($year, $month, $turnterm) = $gameStor->getValuesAsArray(['year','month','turnterm']);
if($general['level'] < 5 || $general['nation']==0) {
pushGenLog($general, ["<C>●</>{$month}월:수뇌부가 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
$supply = $db->queryFirstField('SELECT supply FROM city WHERE city=%i AND nation=%i', $general['city'], $general['nation']);
$myTurn = $db->queryFirstField('SELECT %b FROM nation WHERE nation=%i', "l{$general['level']}turn0", $general['nation']);
$command = DecodeCommand($myTurn);
$which = $command[1];
$srcNation = getNationStaticInfo($general['nation']);
$destNation = getNationStaticInfo($which);
if($destNation['nation'] == 0) {
pushGenLog($general, ["<C>●</>{$month}월:멸망한 국가입니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === null) {
pushGenLog($general, ["<C>●</>{$month}월:아국이 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === 0) {
pushGenLog($general, ["<C>●</>{$month}월:고립된 도시입니다. 제의 실패. <1>$date</>"]);
return;
}
// 상대에게 발송
$src = new MessageTarget(
$general['no'],
$general['name'],
$srcNation['nation'],
$srcNation['name'],
$srcNation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$destNation['nation'],
$destNation['name'],
$destNation['color']
);
$now = new \DateTime($date);
$validUntil = new \DateTime($date);
$validMinutes = max(30, $turnterm*3);
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
$msg = new DiplomaticMessage(
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}의 통합 제의 서신",
$now,
$validUntil,
['action'=>DiplomaticMessage::TYPE_MERGE]
);
$msg->send();
$josaRo = JosaUtil::pick($destNation['name'], '로');
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>{$josaRo} 통합 제의 서신을 보냈습니다.<1>$date</>"]);
}
function process_61(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
list($year, $month, $turnterm) = $gameStor->getValuesAsArray(['year','month','turnterm']);
if($general['level'] < 5 || $general['nation']==0) {
pushGenLog($general, ["<C>●</>{$month}월:수뇌부가 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
$supply = $db->queryFirstField('SELECT supply FROM city WHERE city=%i AND nation=%i', $general['city'], $general['nation']);
$myTurn = $db->queryFirstField('SELECT %b FROM nation WHERE nation=%i', "l{$general['level']}turn0", $general['nation']);
$command = DecodeCommand($myTurn);
$which = $command[1];
$when = Util::valueFit($command[2], 1, 20);
$srcNation = getNationStaticInfo($general['nation']);
$destNation = getNationStaticInfo($which);
if($destNation['nation'] == 0) {
pushGenLog($general, ["<C>●</>{$month}월:멸망한 국가입니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === null) {
pushGenLog($general, ["<C>●</>{$month}월:아국이 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === 0) {
pushGenLog($general, ["<C>●</>{$month}월:고립된 도시입니다. 제의 실패. <1>$date</>"]);
return;
}
// 상대에게 발송
$src = new MessageTarget(
$general['no'],
$general['name'],
$srcNation['nation'],
$srcNation['name'],
$srcNation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$destNation['nation'],
$destNation['name'],
$destNation['color']
);
$now = new \DateTime($date);
$validUntil = new \DateTime($date);
$validMinutes = max(30, $turnterm*3);
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
//FIXME: 현재 command가 숫자로만 이루어져 있어서 문자열을 처리할 수 없다.
//XXX: 으악.
//TODO: 커맨드 처리 방식을 json으로 변경
$option = $db->queryFirstField('SELECT reserved FROM diplomacy WHERE me=%i AND you=%i', $src->nationID, $dest->nationID);
$msg = new DiplomaticMessage(
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}{$when}년 불가침 제의 서신",
$now,
$validUntil,
[
'action'=>DiplomaticMessage::TYPE_NO_AGGRESSION,
'year'=>$when,
'option'=>$option
]
);
$msg->send();
//NOTE: 현재 내무부 외교란의 비고는 diplomacy가 기준이니까 유지할 필요는 있다.
//FIXME: 외교란도 message란의 diplomacy를 참조하든가 하도록.
$db->update('diplomacy', [
'showing'=>$validUntil->format('Y-m-d H:i:s')
], 'me=%i AND you=%i', $src->nationID, $dest->nationID);
// 3턴후
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>으로 불가침 제의 서신을 보냈습니다.<1>$date</>"]);
}
function process_62(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','startyear']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,l{$general['level']}turn0,color from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select nation,name,color from nation where nation='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$younation = MYDB_fetch_array($result);
$query = "select * from general where nation='{$younation['nation']}' and level='12'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$king = MYDB_fetch_array($result);
//아국과의 관계
$query = "select state from diplomacy where me='{$nation['nation']}' and you='{$younation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
//대상국이 외교 진행중(합병수락중,통합수락중)일때
$query = "select state from diplomacy where me='{$younation['nation']}' and (state='3' or state='5')";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount = MYDB_num_rows($result);
if($younation['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:멸망한 국가입니다. 선포 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 선포 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 선포 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 선포 실패. <1>$date</>";
} elseif($dip['state'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:아국과 이미 교전중입니다. 선포 실패. <1>$date</>";
} elseif($dip['state'] == 1) {
$log[] = "<C>●</>{$admin['month']}월:아국과 이미 선포중입니다. 선포 실패. <1>$date</>";
} elseif($dip['state'] == 7) {
$log[] = "<C>●</>{$admin['month']}월:아국과 불가침중입니다. 선포 실패. <1>$date</>";
} elseif($dipcount != 0) {
$log[] = "<C>●</>{$admin['month']}월:상대국이 외교 진행중입니다. 선포 실패. <1>$date</>";
} elseif(!isNeighbor($nation['nation'], $younation['nation'])) {
$log[] = "<C>●</>{$admin['month']}월:인접하지 않았습니다. 선포 실패. <1>$date</>";
} elseif($admin['year'] <= $admin['startyear']) {
$log[] = "<C>●</>{$admin['month']}월:초반제한 해제 2년전부터 가능합니다. 선포 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<D><b>{$younation['name']}</b></>으로 선전 포고 했습니다.<1>$date</>";
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$younation['name']}</b></>에 <M>선전 포고</> 하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<R><b>【선포】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$younation['name']}</b></>에 선전 포고 하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$younation['name']}</b></>에 선전 포고");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$younation['name']}</b></>에 선전 포고");
pushNationHistory($younation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국에 선전 포고");
//외교 변경
$query = "update diplomacy set state='1',term='24' where me='{$nation['nation']}' and you='{$younation['nation']}'";
MYDB_query($query, $connect) or Error("ally ".MYDB_error($connect),"");
$query = "update diplomacy set state='1',term='24' where me='{$younation['nation']}' and you='{$nation['nation']}'";
MYDB_query($query, $connect) or Error("ally ".MYDB_error($connect),"");
//국메로 저장
$text = "【외교】{$admin['year']}{$admin['month']}월:{$nation['name']}에서 {$younation['name']}에 선전포고";
$src = new MessageTarget(
$general['no'],
$general['name'],
$general['nation'],
$nation['name'],
$nation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$younation['nation'],
$younation['name'],
$younation['color']
);
$msg = new Message(
Message::MSGTYPE_NATIONAL,
$src,
$dest,
$text,
new \DateTime($general['turntime']),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_63(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
list($year, $month, $turnterm) = $gameStor->getValuesAsArray(['year','month','turnterm']);
if($general['level'] < 5 || $general['nation']==0) {
pushGenLog($general, ["<C>●</>{$month}월:수뇌부가 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
$supply = $db->queryFirstField('SELECT supply FROM city WHERE city=%i AND nation=%i', $general['city'], $general['nation']);
$myTurn = $db->queryFirstField('SELECT %b FROM nation WHERE nation=%i', "l{$general['level']}turn0", $general['nation']);
$command = DecodeCommand($myTurn);
$which = $command[1];
$srcNation = getNationStaticInfo($general['nation']);
$destNation = getNationStaticInfo($which);
if($destNation['nation'] == 0) {
pushGenLog($general, ["<C>●</>{$month}월:멸망한 국가입니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === null) {
pushGenLog($general, ["<C>●</>{$month}월:아국이 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === 0) {
pushGenLog($general, ["<C>●</>{$month}월:고립된 도시입니다. 제의 실패. <1>$date</>"]);
return;
}
// 상대에게 발송
$src = new MessageTarget(
$general['no'],
$general['name'],
$srcNation['nation'],
$srcNation['name'],
$srcNation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$destNation['nation'],
$destNation['name'],
$destNation['color']
);
$now = new \DateTime($date);
$validUntil = new \DateTime($date);
$validMinutes = max(30, $turnterm*3);
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
$msg = new DiplomaticMessage(
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}의 종전 제의 서신",
$now,
$validUntil,
['action'=>DiplomaticMessage::TYPE_STOP_WAR]
);
$msg->send();
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>으로 종전 제의 서신을 보냈습니다. <1>$date</>"]);
}
function process_64(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
list($year, $month, $turnterm) = $gameStor->getValuesAsArray(['year','month','turnterm']);
if($general['level'] < 5 || $general['nation']==0) {
pushGenLog($general, ["<C>●</>{$month}월:수뇌부가 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
$supply = $db->queryFirstField('SELECT supply FROM city WHERE city=%i AND nation=%i', $general['city'], $general['nation']);
$myTurn = $db->queryFirstField('SELECT %b FROM nation WHERE nation=%i', "l{$general['level']}turn0", $general['nation']);
$command = DecodeCommand($myTurn);
$which = $command[1];
$srcNation = getNationStaticInfo($general['nation']);
$destNation = getNationStaticInfo($which);
if($destNation['nation'] == 0) {
pushGenLog($general, ["<C>●</>{$month}월:멸망한 국가입니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === null) {
pushGenLog($general, ["<C>●</>{$month}월:아국이 아닙니다. 제의 실패. <1>$date</>"]);
return;
}
if($supply === 0) {
pushGenLog($general, ["<C>●</>{$month}월:고립된 도시입니다. 제의 실패. <1>$date</>"]);
return;
}
// 상대에게 발송
$src = new MessageTarget(
$general['no'],
$general['name'],
$srcNation['nation'],
$srcNation['name'],
$srcNation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$destNation['nation'],
$destNation['name'],
$destNation['color']
);
$now = new \DateTime($date);
$validUntil = new \DateTime($date);
$validMinutes = max(30, $turnterm*3);
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
$msg = new DiplomaticMessage(
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}의 불가침 파기 제의 서신",
$now,
$validUntil,
['action'=>DiplomaticMessage::TYPE_CANCEL_NA]
);
$msg->send();
$josaRo = JosaUtil::pick($destNation['name'], '로');
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>{$josaRo} 불가침 파기 제의 서신을 보냈습니다.<1>$date</>"]);
}
function process_65(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select city from city where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$citycount = MYDB_num_rows($result);
$query = "select nation,capital,name,surlimit,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation,pop,gen1,gen2,gen3 from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
//아국이 외교중(교전, 선포, 합병, 통합 // 즉 !통상, !불가침)일때
$query = "select state from diplomacy where me='{$nation['nation']}' and (state!='2' and state!='7')";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount = MYDB_num_rows($result);
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 초토화 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 초토화 실패. <1>$date</>";
} elseif($nation['capital'] == $destcity['city']) {
$log[] = "<C>●</>{$admin['month']}월:수도입니다. 초토화 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 초토화 실패. <1>$date</>";
} elseif($destcity['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 영토가 아닙니다. 초토화 실패. <1>$date</>";
} elseif($citycount <= 4) {
$log[] = "<C>●</>{$admin['month']}월:더이상 물러날 수 없습니다. 초토화 실패. <1>$date</>";
} elseif($dipcount != 0) {
$log[] = "<C>●</>{$admin['month']}월:평시에만 가능합니다. 초토화 실패. <1>$date</>";
} elseif($nation['surlimit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:제한 턴이 있습니다. 초토화 실패. <1>$date</>";
} else {
$josaUl = JosaUtil::pick($destcity['name'], '을');
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaUl} 초토화했습니다. <1>$date</>";
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>의 <R>초토화</>를 명령하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<R><b>【초토화】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>{$josaUl} <R>초토화</>하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>의 <R>초토화</>를 명령");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>의 <R>초토화</>를 명령");
//외교제한 24
$amount = Util::round($destcity['pop'] * 0.1);
$query = "update nation set surlimit='24',gold=gold+'$amount',rice=rice+'$amount' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//직위해제
$query = "update general set level=1 where no='{$destcity['gen1']}' or no='{$destcity['gen2']}' or no='{$destcity['gen3']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//성 공백지로
$query = "update city set pop=pop*0.1,trust=50,agri=agri*0.1,comm=comm*0.1,secu=secu*0.1,nation='0',front='0',gen1='0',gen2='0',gen3='0',conflict='{}' where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//전장수 10% 삭감
$query = "update general set experience=experience*0.9,dedication=dedication*0.9 where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_66(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,gold,rice,surlimit,l{$general['level']}term,l{$general['level']}turn0,capital,capset from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$nearCities = searchDistance($nation['capital'], 1, false);
$amount = $admin['develcost'] * 10;
$code = $nation["l{$general['level']}term"];
if($code%100 == 66) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 66;
} else {
$term = 1;
$code = 100 + 66;
}
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 천도 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 천도 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 천도 실패. <1>$date</>";
} elseif($destcity['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 영토가 아닙니다. 천도 실패. <1>$date</>";
} elseif($destcity['city'] == $nation['capital'] || !key_exists($destcity['city'], $nearCities)){
$log[] = "<C>●</>{$admin['month']}월:인접도시가 아닙니다. 천도 실패. <1>$date</>";
} elseif($nation['capset'] == 1) {
$log[] = "<C>●</>{$admin['month']}월:다음 분기에 가능합니다. 천도 실패. <1>$date</>";
} elseif($nation['gold']-GameConst::$basegold < $amount || $nation['rice']-GameConst::$baserice < $amount) {
$log[] = "<C>●</>{$admin['month']}월:물자가 부족합니다. 천도 실패. <1>$date</>";
} elseif($term < 3) {
$log[] = "<C>●</>{$admin['month']}월:천도중... ({$term}/3) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$josaRo = JosaUtil::pick($destcity['name'], '로');
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaRo} 천도했습니다. <1>$date</>";
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaRo} <R>천도</>를 명령하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<S><b>【천도】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>{$josaRo} 천도하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaRo} 천도 명령");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaRo} 천도 명령");
//수도 변경
$query = "update nation set l{$general['level']}term='0',capital='{$destcity['city']}',capset='1',gold=gold-'$amount',rice=rice-'$amount' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
refreshNationStaticInfo();
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_67(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,gold,rice,surlimit,l{$general['level']}term,l{$general['level']}turn0,capital,capset from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation,level from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$amount = $admin['develcost'] * 500 + 60000; // 7만~13만
$code = $nation["l{$general['level']}term"];
if($code%100 == 67) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 67;
} else {
$term = 1;
$code = 100 + 67;
}
if($nation['capital'] != $general['city']) {
$log[] = "<C>●</>{$admin['month']}월:수도에서 실행해야 합니다. 증축 실패. <1>$date</>";
} elseif($nation['capital'] != $destcity['city']) {
$log[] = "<C>●</>{$admin['month']}월:수도만 가능합니다. 증축 실패. <1>$date</>";
} elseif($destcity['level'] <= 3) {
$log[] = "<C>●</>{$admin['month']}월:수진, 진, 관문은 불가능합니다. 증축 실패. <1>$date</>";
} elseif($destcity['level'] >= 8) {
$log[] = "<C>●</>{$admin['month']}월:더이상 증축할 수 없습니다. 증축 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 증축 실패. <1>$date</>";
} elseif($nation['capset'] == 1) {
$log[] = "<C>●</>{$admin['month']}월:다음 분기에 가능합니다. 증축 실패. <1>$date</>";
} elseif($nation['gold']-GameConst::$basegold < $amount || $nation['rice']-GameConst::$baserice < $amount) {
$log[] = "<C>●</>{$admin['month']}월:물자가 부족합니다. 증축 실패. <1>$date</>";
} elseif($term < 6) {
$log[] = "<C>●</>{$admin['month']}월:증축중... ({$term}/6) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$josaUl = JosaUtil::pick($destcity['name'], '을');
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaUl} 증축했습니다. <1>$date</>";
$exp = 5 * 6;
$ded = 5 * 6;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaUl} <C>증축</>하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<C><b>【증축】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>{$josaUl} 증축하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaUl} 증축");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaUl} 증축");
//물자 감소
$query = "update nation set l{$general['level']}term='0',capset='1',gold=gold-'$amount',rice=rice-'$amount' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//수도 증축
$query = "update city set upgrading=upgrading+1,level=level+1,pop2=pop2+100000,agri2=agri2+2000,comm2=comm2+2000,def2=def2+2000,wall2=wall2+2000,secu2=secu2+2000 where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_68(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,gold,rice,surlimit,l{$general['level']}term,l{$general['level']}turn0,capital,capset from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation,level,pop,agri,comm,def,wall,secu,upgrading from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$amount = $admin['develcost'] * 500 + 30000; // 4만~10만
$code = $nation["l{$general['level']}term"];
if($code%100 == 68) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 68;
} else {
$term = 1;
$code = 100 + 68;
}
if($nation['capital'] != $general['city']) {
$log[] = "<C>●</>{$admin['month']}월:수도에서 실행해야 합니다. 감축 실패. <1>$date</>";
} elseif($nation['capital'] != $destcity['city']) {
$log[] = "<C>●</>{$admin['month']}월:수도만 가능합니다. 감축 실패. <1>$date</>";
} elseif($destcity['level'] <= 3) {
$log[] = "<C>●</>{$admin['month']}월:수진, 진, 관문은 불가능합니다. 감축 실패. <1>$date</>";
} elseif($destcity['level'] <= 6) {
$log[] = "<C>●</>{$admin['month']}월:더이상 감축할 수 없습니다. 감축 실패. <1>$date</>";
} elseif($destcity['upgrading'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:증축된 도시가 아닙니다. 감축 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 감축 실패. <1>$date</>";
} elseif($nation['capset'] == 1) {
$log[] = "<C>●</>{$admin['month']}월:다음 분기에 가능합니다. 감축 실패. <1>$date</>";
} elseif($term < 6) {
$log[] = "<C>●</>{$admin['month']}월:감축중... ({$term}/6) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$josaUl = JosaUtil::pick($destcity['name'], '을');
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaUl} 감축했습니다. <1>$date</>";
$exp = 5 * 6;
$ded = 5 * 6;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaUl} <M>감축</>하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<M><b>【감축】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>{$josaUl} 감축하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>{$josaUl} 감축");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>{$josaUl} 감축");
//물자 증가
$query = "update nation set l{$general['level']}term='0',capset='1',gold=gold+'$amount',rice=rice+'$amount' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$pop = $destcity['pop'] - 100000;
$agri = $destcity['agri'] - 2000;
$comm = $destcity['comm'] - 2000;
$def = $destcity['def'] - 2000;
$wall = $destcity['wall'] - 2000;
$secu = $destcity['secu'] - 2000;
if($pop < 30000) { $pop = 30000; }
if($agri < 0) { $agri = 0; }
if($comm < 0) { $comm = 0; }
if($def < 0) { $def = 0; }
if($wall < 0) { $wall = 0; }
if($secu < 0) { $secu = 0; }
//수도 감축
$query = "update city set upgrading=upgrading-1,level=level-1,pop2=pop2-100000,agri2=agri2-2000,comm2=comm2-2000,def2=def2-2000,wall2=wall2-2000,secu2=secu2-2000,pop='$pop',agri='$agri',comm='$comm',def='$def',wall='$wall',secu='$secu' where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_71(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select no from diplomacy where me='{$general['nation']}' and state=0";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipCount = MYDB_num_rows($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 10);
//if($term2 == 0) { $term2 = 1; }
$term2 = 3;
$term3 = Util::round(sqrt($genCount*8)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 71) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 71;
} else {
$term = 1;
$code = 100 + 71;
}
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 필사즉생 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 필사즉생 실패. <1>$date</>";
} elseif($dipCount == 0) {
$log[] = "<C>●</>{$admin['month']}월:전쟁중이 아닙니다. 필사즉생 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 필사즉생 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:필사즉생 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:필사즉생 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <M>필사즉생</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <M>필사즉생</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <M>필사즉생</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <M>필사즉생</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<M>필사즉생</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <M>필사즉생</>을 발동");
//전장수 훈사100
$query = "update general set atmos=100,train=100 where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_72(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$query = "select no from diplomacy where me='{$general['nation']}' and state=0";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipCount = MYDB_num_rows($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 20);
//if($term2 == 0) { $term2 = 1; }
$term2 = 1;
$term3 = Util::round(sqrt($genCount*4)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 72) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 72;
} else {
$term = 1;
$code = 100 + 72;
}
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 백성동원 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 백성동원 실패. <1>$date</>";
} elseif($dipCount == 0) {
$log[] = "<C>●</>{$admin['month']}월:전쟁중이 아닙니다. 백성동원 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 백성동원 실패. <1>$date</>";
} elseif($destcity['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 도시만 가능합니다. 백성동원 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:백성동원 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:백성동원 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>백성동원</>을 발동");
//도시 성수 80%
$query = "update city set def=def2*0.8,wall=wall2*0.8 where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_73(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$query = "select nation,name from nation where nation='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destnation = MYDB_fetch_array($result);
$query = "select state from diplomacy where me='{$general['nation']}' and you='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 20);
//if($term2 == 0) { $term2 = 1; }
$term2 = 3;
$term3 = Util::round(sqrt($genCount*4)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 73) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 73;
} else {
$term = 1;
$code = 100 + 73;
}
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 수몰 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 수몰 실패. <1>$date</>";
} elseif($destcity['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:공백지입니다. 수몰 실패. <1>$date</>";
} elseif($destcity['nation'] == $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:대상도시가 아국입니다. 수몰 실패. <1>$date</>";
} elseif($dip['state'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전쟁중인 상대국에만 가능합니다. 수몰 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 수몰 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:수몰 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:수몰 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
$query = "select no,name from general where nation='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><G><b>{$destcity['name']}</b></>에 <M>수몰</>이 발동되었습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>의 <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동");
pushNationHistory($destnation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국의 <G><b>{$destcity['name']}</b></>에 <M>수몰</>을 발동");
//도시 성수 80% 감소
$query = "update city set def=def*0.2,wall=wall*0.2 where city='{$destcity['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_74(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select city,name,nation from city where city='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destcity = MYDB_fetch_array($result);
$query = "select nation,name from nation where nation='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destnation = MYDB_fetch_array($result);
$query = "select state from diplomacy where me='{$general['nation']}' and you='{$destcity['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 20);
//if($term2 == 0) { $term2 = 1; }
$term2 = 2;
$term3 = Util::round(sqrt($genCount*4)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 74) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 74;
} else {
$term = 1;
$code = 100 + 74;
}
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 허보 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 허보 실패. <1>$date</>";
} elseif($destcity['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:공백지입니다. 허보 실패. <1>$date</>";
} elseif($destcity['nation'] == $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:대상도시가 아국입니다. 허보 실패. <1>$date</>";
} elseif($dip['state'] > 1) {
$log[] = "<C>●</>{$admin['month']}월:선포,전쟁중인 상대국에만 가능합니다. 허보 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 허보 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:허보 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:허보 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>의 <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동");
pushNationHistory($destnation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국의 <G><b>{$destcity['name']}</b></>에 <M>허보</>를 발동");
//상대국 도시 전부 검색
$query = "select city from city where nation='{$destcity['nation']}' and supply=1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cityCount = MYDB_num_rows($result);
$cities = [];
for($i=0; $i < $cityCount; $i++) {
$dCity = MYDB_fetch_array($result);
$cities[$i] = $dCity['city'];
}
//상대국 유저 랜덤 배치
$query = "select no,name from general where nation='{$destcity['nation']}' and city='{$destcity['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$opplog = ["<C>●</>상대국의 허보에 당했다! <1>$date</>"];
for($i=0; $i < $count; $i++) {
$gen = MYDB_fetch_array($result);
$selCity = $cities[rand() % $cityCount];
//현재도시이면 한번 다시 랜덤추첨
if($selCity == $destcity['city']) { $selCity = $cities[rand() % $cityCount]; }
$query = "update general set city={$selCity} where no='{$gen['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushGenLog($gen, $opplog);
}
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_75(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select nation,name from nation where nation='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destnation = MYDB_fetch_array($result);
$query = "select state from diplomacy where me='{$general['nation']}' and you='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 40);
//if($term2 == 0) { $term2 = 1; }
$term2 = 3;
$term3 = Util::round(sqrt($genCount*2)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 75) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 75;
} else {
$term = 1;
$code = 100 + 75;
}
if(!$destnation) {
$log[] = "<C>●</>{$admin['month']}월:없는 국가입니다. 피장파장 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 피장파장 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 피장파장 실패. <1>$date</>";
} elseif($dip['state'] > 1) {
$log[] = "<C>●</>{$admin['month']}월:선포,전쟁중인 상대국에만 가능합니다. 피장파장 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 피장파장 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:피장파장 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:피장파장 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
$query = "select no,name from general where nation='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</>아국에 <M>피장파장</>이 발동되었습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>피장파장</>을 발동");
pushNationHistory($destnation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국에 <M>피장파장</>을 발동");
//전략기한+60
$query = "update nation set strategic_cmd_limit=strategic_cmd_limit+60 where nation='{$destnation['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한, 최소72
if($term3 < 72) { $term3 = 72; }
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_76(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear','year','month','develcost','turnterm']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
//$term2 = Util::round($genCount / 10);
//if($term2 == 0) { $term2 = 1; }
$term2 = 3;
$term3 = Util::round(sqrt($genCount*10)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 76) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 76;
} else {
$term = 1;
$code = 100 + 76;
}
if($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:현재 초반 제한중입니다. 의병모집 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 의병모집 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 의병모집 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 의병모집 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:의병모집 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:의병모집 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <M>의병모집</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <M>의병모집</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <M>의병모집</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <M>의병모집</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<M>의병모집</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <M>의병모집</>을 발동");
$avgGenNum = $db->queryFirstField('SELECT avg(gennum) FROM nation');
$addGenCount = 5 + Util::round($avgGenNum / 10);
$query = "select avg(age) as age, max(leadership+power+intel) as stat_sum, avg(dedication) as ded,avg(experience) as exp, avg(dex0) as dex0, avg(dex10) as dex10, avg(dex20) as dex20, avg(dex30) as dex30, avg(dex40) as dex40 from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$avgGen = MYDB_fetch_array($result);
//의병추가
$npc = 4;
$npcid = Util::randRangeInt(0, 9999999);
for($i=0; $i < $addGenCount; $i++) {
// 무장 40%, 지장 40%, 무지장 20%
$type = rand() % 10;
switch($type) {
case 0: case 1: case 2: case 3:
$leadership = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatTotal - $leadership - $intel;
break;
case 4: case 5: case 6: case 7:
$leadership = GameConst::$defaultStatMax - 10 + rand()%11;
$power = GameConst::$defaultStatMin + rand()%6;
$intel = GameConst::$defaultStatTotal - $leadership - $power;
break;
case 8: case 9:
$leadership = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatTotal - $leadership - $power;
break;
}
// 국내 최고능치 기준으로 랜덤성 스케일링
if($avgGen['stat_sum'] > 210) {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
} elseif($avgGen['stat_sum'] > 180) {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
} else {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
}
$over1 = 0;
$over2 = 0;
$over3 = 0;
// 너무 높은 능치는 다른 능치로 분산
if($leadership > 90) {
$over1 = rand() % ($leadership - 90) + 5;
$leadership -= $over1;
}
if($power > 90) {
$over2 = rand() % ($power - 90) + 5;
$power -= $over2;
}
if($intel > 90) {
$over3 = rand() % ($intel - 90) + 5;
$intel -= $over3;
}
// 낮은 능치쪽으로 합산
if($type == 0) {
$intel = $intel + $over1 + $over2 + $over3;
} else {
$power = $power + $over1 + $over2 + $over3;
}
// 너무 높은 능치는 제한
if($leadership > GameConst::$defaultStatNPCMax) {
$leadership = GameConst::$defaultStatNPCMax;
}
if($power > GameConst::$defaultStatNPCMax) {
$power = GameConst::$defaultStatNPCMax;
}
if($intel > GameConst::$defaultStatNPCMax) {
$intel = GameConst::$defaultStatNPCMax;
}
$affinity = rand() % 150 + 1;
$name = "ⓖ의병장{$npcid}";
$picture = 'default.jpg';
$turntime = getRandTurn($admin['turnterm']);
$personal = rand() % 10;
$bornyear = $admin['year'];
$deadyear = $admin['year'] + 3;
$killturn = 64 + rand()%7;
@MYDB_query("
insert into general (
npc,npc_org,affinity,name,picture,nation,
city,leadership,power,intel,experience,dedication,
level,gold,rice,crew,crewtype,train,atmos,tnmt,
weapon,book,horse,turntime,killturn,age,belong,personal,special,specage,special2,specage2,npcmsg,
makelimit,bornyear,deadyear,
dex0, dex10, dex20, dex30, dex40
) values (
'$npc','$npc','$affinity','$name','$picture','{$nation['nation']}',
'{$general['city']}','$leadership','$power','$intel','{$avgGen['exp']}','{$avgGen['ded']}',
'1','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','{$avgGen['age']}','1','$personal','0','0','0','0','',
'0','$bornyear','$deadyear',
'{$avgGen['dex0']}','{$avgGen['dex10']}','{$avgGen['dex20']}','{$avgGen['dex30']}','{$avgGen['dex40']}'
)",
$connect
) or Error(__LINE__.MYDB_error($connect),"");
$npcid++;
}
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$db->update('nation', [
'strategic_cmd_limit'=>$term3,
'gennum'=>$db->sqleval('gennum + %i', $addGenCount),
], 'nation=%i', $general['nation']);
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_77(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select nation,name from nation where nation='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destnation = MYDB_fetch_array($result);
$query = "select state,term from diplomacy where me='{$general['nation']}' and you='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
$term2 = 1;
$term3 = Util::round(sqrt($genCount*16)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 77) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 77;
} else {
$term = 1;
$code = 100 + 77;
}
if(!$destnation) {
$log[] = "<C>●</>{$admin['month']}월:없는 국가입니다. 이호경식 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 이호경식 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 이호경식 실패. <1>$date</>";
} elseif($dip['state'] > 1) {
$log[] = "<C>●</>{$admin['month']}월:선포,전쟁중인 상대국에만 가능합니다. 이호경식 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 이호경식 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:이호경식 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:이호경식 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
$query = "select no,name from general where nation='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</>아국에 <M>이호경식</>이 발동되었습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>이호경식</>을 발동");
pushNationHistory($destnation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국에 <M>이호경식</>을 발동");
//선포+3개월
if($dip['state'] == 0) {
$query = "update diplomacy set state=1,term=3 where (me='{$general['nation']}' and you='{$destnation['nation']}') or (you='{$general['nation']}' and me='{$destnation['nation']}')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$query = "update diplomacy set term=term+3 where (me='{$general['nation']}' and you='{$destnation['nation']}') or (you='{$general['nation']}' and me='{$destnation['nation']}')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_78(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$sabotagelog = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month','develcost']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$query = "select nation,name from nation where nation='$which'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$destnation = MYDB_fetch_array($result);
$query = "select state,term from diplomacy where me='{$general['nation']}' and you='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dip = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
if($genCount < GameConst::$initialNationGenLimit) { $genCount = GameConst::$initialNationGenLimit; }
$term2 = 1;
$term3 = Util::round(sqrt($genCount*16)*10);
$code = $nation["l{$general['level']}term"];
if($code%100 == 78) {
$term = intdiv($code, 100) + 1;
$code = $term * 100 + 78;
} else {
$term = 1;
$code = 100 + 78;
}
if(!$destnation) {
$log[] = "<C>●</>{$admin['month']}월:없는 국가입니다. 급습 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 급습 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 급습 실패. <1>$date</>";
} elseif($dip['state'] != 1) {
$log[] = "<C>●</>{$admin['month']}월:선포중인 상대국에만 가능합니다. 급습 실패. <1>$date</>";
} elseif($dip['term'] < 12) {
$log[] = "<C>●</>{$admin['month']}월:선포 12개월 이상인 상대국에만 가능합니다. 급습 실패. <1>$date</>";
} elseif($nation['strategic_cmd_limit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:전략기한이 남았습니다. 급습 실패. <1>$date</>";
} elseif($term < $term2) {
$log[] = "<C>●</>{$admin['month']}월:급습 수행중... ({$term}/{$term2}) <1>$date</>";
$query = "update nation set l{$general['level']}term={$code} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$log[] = "<C>●</>{$admin['month']}월:급습 발동! <1>$date</>";
$exp = 5 * $term2;
$ded = 5 * $term2;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</><Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동하였습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
$query = "select no,name from general where nation='{$destnation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$alllog[0] = "<C>●</>아국에 <M>급습</>이 발동되었습니다.";
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $alllog);
}
// $alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동하였습니다.";
// $history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동하였습니다.";
$sabotagelog[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【전략】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$destnation['name']}</b></>에 <M>급습</>을 발동");
pushNationHistory($destnation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} 아국에 <M>급습</>을 발동");
//선포-3개월
$query = "update diplomacy set term=term-3 where (me='{$general['nation']}' and you='{$destnation['nation']}') or (you='{$general['nation']}' and me='{$destnation['nation']}')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가보정
if($nation['type'] == 11) { $term3 = Util::round($term3 / 2); }
if($nation['type'] == 12) { $term3 = $term3 * 2; }
//전략기한
$query = "update nation set strategic_cmd_limit={$term3} where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
// pushWorldHistory($history, $admin['year'], $admin['month']);
// pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushSabotageLog($sabotagelog);
pushGenLog($general, $log);
}
function process_81(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$query = "select nation from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation,can_change_flag,name,type,strategic_cmd_limit,l{$general['level']}term,l{$general['level']}turn0 from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$command = DecodeCommand($nation["l{$general['level']}turn0"]);
$which = $command[1];
$colors = GetNationColors();
if($which >= count($colors)) { $which = 0; }
$color = $colors[$which];
if($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 국기변경 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부가 아닙니다. 국기변경 실패. <1>$date</>";
} elseif($nation['can_change_flag'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:더이상 변경이 불가능합니다. 국기변경 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<font color={$color}><b>국기</b></font>를 변경합니다. <1>$date</>";
$exp = 10;
$ded = 10;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$josaYi = JosaUtil::pick($general['name'], '이');
$josaYiNation = JosaUtil::pick($nation['name'], '이');
$query = "select no,name from general where nation='{$general['nation']}' and no!='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$cnt = MYDB_num_rows($result);
$genlog = ["<C>●</><Y>{$general['name']}</>{$josaYi} <font color={$color}><b>국기</b></font>를 변경합니다."];
for($i=0; $i < $cnt; $i++) {
$gen = MYDB_fetch_array($result);
pushGenLog($gen, $genlog);
}
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <font color={$color}><b>국기</b></font>를 변경하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<L><b>【국기변경】</b></><D><b>{$nation['name']}</b></>{$josaYiNation} <font color={$color}><b>국기</b></font>를 변경하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<font color={$color}><b>국기</b></font>를 변경");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <font color={$color}><b>국기</b></font>를 변경");
//국기변경
$query = "update nation set color='$color',can_change_flag=can_change_flag-1 where nation='{$nation['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//경험치, 공헌치
$query = "update general set dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
refreshNationStaticInfo();
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
-1118
View File
@@ -1,1118 +0,0 @@
<?php
namespace sammo;
function process_22(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear','year','month','develcost','join_mode']);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$command = DecodeCommand($general['turn0']);
$who = $command[1];
$query = "select * from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$you = MYDB_fetch_array($result);
$cost = Util::round($admin['develcost'] + ($you['experience'] + $you['dedication'])/1000) * 10;
if($admin['join_mode'] == 'onlyRandom'){
$log[] = "<C>●</>{$admin['month']}월:랜덤 임관만 가능합니다. 등용 실패. <1>$date</>";
}
else if(!$you) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 등용 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:초반 제한중입니다. 등용 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 등용 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 등용 실패. <1>$date</>";
} elseif($general['gold'] < $cost) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 등용 실패. <1>$date</>";
} else {
$log[] = "<C>●</>{$admin['month']}월:<Y>{$you['name']}</>에게 등용 권유 서신을 보냈습니다. <1>$date</>";
$exp = 100;
$ded = 200;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$msg = ScoutMessage::buildScoutMessage($general['no'], $who, $reason);
if($msg){
$msg->send(true);
}
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold=gold-'$cost',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
}
function process_25(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'scenario', 'fiction', 'join_mode', 'init_year', 'init_month']);
$query = "select nation from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$command = DecodeCommand($general['turn0']);
$where = $command[1];
if($admin['join_mode'] == 'onlyRandom' && $where < 98){
$where = 99;
}
$nation = null;
$joinedNations = Json::decode($general['nations']);
// 랜덤임관인 경우
if($general['npc'] >= 2 && $where >= 98 && !$admin['fiction'] && 1000 <= $admin['scenario'] && $admin['scenario'] < 2000){
//'사실' 모드에서는 '성향'에 우선을 두되, 장수수, 랜덤에 비중을 둠
$nations = $db->query(
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %li and gennum < %i and scout = 0',
$joinedNations,
($admin['year'] < $admin['startyear']+3)?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral
);
shuffle($nations);
$allGen = array_sum(array_map(function($item) {
return $item['gennum'];
}, $nations));
$maxScore = 1<<30;
foreach($nations as $testNation){
$affinity = abs($general['affinity'] - $testNation['affinity']);
$affinity = min($affinity, abs($affinity - 150));
$score = log($affinity + 1, 2);//0~
//쉐킷쉐킷
$score += Util::randF();
$score += sqrt($testNation['gennum']/$allGen);
if($score < $maxScore){
$maxScore = $score;
$nation = $testNation;
}
}
}
else if($where >= 98) {
//랜임
$generals = [];
foreach($db->queryAllLists('SELECT count(no), nation FROM general WHERE npc <= 2 AND nation > 0 GROUP BY nation') as list($cnt, $nation)){
$generals[$nation] = $cnt;
}
foreach($db->queryAllLists('SELECT count(no), nation FROM general WHERE 3 <= npc and npc <= 4 AND nation > 0 GROUP BY nation') as list($cnt, $nation)){
//의병, 인탐장은 1/3로 카운트
if(key_exists($nation, $generals)){
$generals[$nation] += $cnt / 3;
}
else{
$generals[$nation] = $cnt / 3;
}
}
$allGen = array_sum($generals);
$genLimit = GameConst::$defaultMaxGeneral;
if($admin['join_mode'] == 'onlyRandom' && TimeUtil::IsRangeMonth($admin['init_year'], $admin['init_month'], 1, $admin['year'], $admin['month'])){
$genLimit = GameConst::$initialNationGenLimitForRandInit;
}
else if($admin['year'] < $admin['startyear'] + 3){
$genLimit = GameConst::$initialNationGenLimit;
}
$nations = $db->query(
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`injury` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %li and gennum < %i and scout = 0',
$joinedNations,
$genLimit
);
shuffle($nations);
$randVals = [];
foreach($nations as $idx=>$testNation){
// 임관금지없음 국가, 방랑군 제외
if($where == 98 && $testNation['level'] == 0){
continue;
}
$score = 1;
if($admin['startyear']+3 > $admin['year'] && $general['npc'] == 2){
$score *= sqrt((100-max(30, $testNation['injury']))/100);
}
$score *= $allGen/$generals[$testNation['nation']];
$randVals[$idx] = $score;
}
if($randVals){
$nation = $nations[Util::choiceRandomUsingWeight($randVals)];
}
else{
$nation = null;
}
} else {
$nation = $db->queryFirstRow('SELECT `name`,nation,scout,`level` FROM nation WHERE nation=%i', $where);
}
if($nation){
$gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE nation=%i', $nation['nation']);
$josaUn = JosaUtil::pick($nation['name'], '은');
}
if(!$nation) {
$log[] = "<C>●</>{$admin['month']}월:임관할 국가가 없습니다. 임관 실패. <1>$date</>";
if($where >= 98 && $genLimit == GameConst::$initialNationGenLimitForRandInit){
//랜덤 모드, 초기화시에는 랜덤 임관을 대신 한턴 더 넣어준다.
$db->update('general', [
'turn1'=>EncodeCommand(0, 0, $where, 25),
], '`no` = %i', $general['no']);
pushGenLog($general, $log);
process_42($general);
return;
}
} elseif($general['nation'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:재야가 아닙니다. 임관 실패. <1>$date</>";
} elseif($nation['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:없는 국가입니다. 임관 실패. <1>$date</>";
} elseif($nation['level'] == 0 && $gencount >= GameConst::$initialNationGenLimit) {
$log[] = "<C>●</>{$admin['month']}월:현재 <D>{$nation['name']}</>{$josaUn} 임관이 제한되고 있습니다. 임관 실패.";
} elseif($admin['year'] < $admin['startyear']+3 && $gencount >= GameConst::$initialNationGenLimit) {
$log[] = "<C>●</>{$admin['month']}월:현재 <D>{$nation['name']}</>{$josaUn} 임관이 제한되고 있습니다. 임관 실패.";
} elseif($nation['scout'] == 1 && $general['npc'] != 9) {
$log[] = "<C>●</>{$admin['month']}월:현재 <D>{$nation['name']}</>{$josaUn} 임관이 금지되어 있습니다. 임관 실패.";
} elseif($general['makelimit'] > 0 && $general['npc'] != 9) {
$log[] = "<C>●</>{$admin['month']}월:재야가 된지 12턴이 지나야 합니다. 임관 실패. <1>$date</>";
} elseif(in_array($nation['nation'], $joinedNations)) {
$log[] = "<C>●</>{$admin['month']}월:이미 임관했었던 국가입니다. 임관 실패. <1>$date</>";
} else {
$josaYi = JosaUtil::pick($general['name'], '이');
if($where == 99 || $where == 98) {
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} 어쩌다보니 <D><b>{$nation['name']}</b></>에 <S>임관</>했습니다.";
$log[] = "<C>●</>{$admin['month']}월:<D>{$nation['name']}</>에 랜덤으로 임관했습니다. <1>$date</>";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>에 임관");
} else {
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>에 <S>임관</>했습니다.";
$log[] = "<C>●</>{$admin['month']}월:<D>{$nation['name']}</>에 임관했습니다. <1>$date</>";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>에 임관");
}
if($gencount < GameConst::$initialNationGenLimit) { $exp = 700; }
else { $exp = 100; }
$ded = 0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 군주가 있는 곳으로 이동
$query = "select city from general where nation='{$nation['nation']}' and level='12'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$king = MYDB_fetch_array($result);
// NPC초반시 임관기록 추가 안함
if($general['npc'] > 1 && $admin['year'] < $admin['startyear']+3) {
} else {
$joinedNations[] = $nation['nation'];
}
// 국적 바꾸고 등급 일반으로 // 명성 상승
$db->update('general', [
'resturn'=>'SUCCESS',
'nation'=>$nation['nation'],
'nations'=>Json::encode($joinedNations),
'level'=>1,
'permission'=>'normal',
'experience'=>$db->sqleval('experience + %i', $exp),
'city'=>$king['city'],
'belong'=>1
], 'no=%i', $general['no']);
$db->update('nation', [
'gennum'=>$gencount + 1,
], 'nation=%i', $nation['nation']);
if($where < 99) {
$log = uniqueItem($general, $log);
} else {
$log = uniqueItem($general, $log, 2);
}
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_29(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear','year','month','develcost','npccount','turnterm','scenario','maxgeneral', 'turntime']);
$query = "select nation,name,level,gennum,scout from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$josaUn = JosaUtil::pick($nation['name'], '은');
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 인재탐색 실패. <1>$date</>";
} elseif($nation['level'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:방랑군입니다. 인재탐색 실패. <1>$date</>";
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 인재탐색 실패. <1>$date</>";
} else {
$max_gen_cnt = $admin['maxgeneral'];
$total_gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2');
$total_npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4');
$gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2 AND nation = %i', $general['nation']);
$npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4 AND nation = %i', $general['nation']);
$nation_cnt = $db->queryFirstField('SELECT count(`nation`) FROM nation WHERE `level` > 0');
$curr_cnt = Util::toInt($total_gen_cnt + $total_npc_cnt / 2);
$remain_slot = $max_gen_cnt - $curr_cnt;
$avg_cnt = $curr_cnt / $nation_cnt;
$found_prop_main = pow($remain_slot / $max_gen_cnt, 6);
$found_prop_small = 1 / ($total_npc_cnt / 3 + 1);
$found_prop_big = 1 / $max_gen_cnt;
if($total_npc_cnt < 50){
$found_prop = max($found_prop_main, $found_prop_small);
}
else{
$found_prop = max($found_prop_main, $found_prop_big);
}
$found_npc = Util::randBool($found_prop);
// 탐색 실패
if(!$found_npc) {
$exp = 100;
$ded = 70;
switch(Util::choiceRandomUsingWeight([$general['leadership'], $general['power'], $general['intel']])) {
case 0: $general['leadership2'] += 1; break;
case 1: $general['strength2'] += 1; break;
case 2: $general['intel2'] += 1; break;
}
$log[] = "<C>●</>{$admin['month']}월:인재를 찾을 수 없었습니다. <1>$date</>";
} else {
// 탐색 성공
$exp = 200;
$ded = 300;
switch(Util::choiceRandomUsingWeight([$general['leadership'], $general['power'], $general['intel']])) {
case 0: $general['leadership2'] += 3; break;
case 1: $general['strength2'] += 3; break;
case 2: $general['intel2'] += 3; break;
}
$name = getRandGenName();
$name = 'ⓜ'.$name;
//중복장수 처리
$query = "select no from general where name like '{$name}%'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$count++;
if($count > 1) {
$name = "{$name}{$count}";
}
$join_prop = 0.55 * $avg_cnt / ($gen_cnt + $npc_cnt / 2);
$no_scout = false;
if($nation['scout'] != 0){
$no_scout = true;
}
else if($admin['year'] < $admin['startyear']+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit){
$no_scout = true;
}
if($no_scout || !Util::randBool($join_prop)) {
$scoutType = "발견";
$scoutLevel = 0;
$scoutNation = 0;
} else {
$scoutType = "영입";
$scoutLevel = 1;
$scoutNation = $nation['nation'];
}
$josaYi = JosaUtil::pick($general['name'], '이');
$josaRa = JosaUtil::pick($name, '라');
$log[] = "<C>●</>{$admin['month']}월:<Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}하였습니다! <1>$date</>";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}하였습니다!";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}");
$avgGen = $db->queryFirstRow('SELECT max(leadership+power+intel) as stat_sum, avg(dedication) as ded,avg(experience) as exp, avg(dex0+dex10+dex20+dex30) as dex_t, avg(dex40) as dex40 from general where npc < 5 and nation = %i', $general['nation']);
$dexTotal = $avgGen['dex_t'];
//무장 40%, 지장 40%, 무지장 20%
$stat_tier1 = GameConst::$defaultStatMax - 10 + rand()%11;
$stat_tier3 = GameConst::$defaultStatMin + rand()%6;
$stat_tier2 = GameConst::$defaultStatTotal - $stat_tier1 - $stat_tier3;
$type = Util::choiceRandomUsingWeight([
'strength0'=>2,
'strength1'=>2,
'strength2'=>2,
'intel'=>6,
'neutral'=>3
]);
switch($type){
case 'strength0':
$leadership = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
$dexVal = [$dexTotal*5/8, $dexTotal/8, $dexTotal/8, $dexTotal/8];
break;
case 'strength1':
$leadership = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
$dexVal = [$dexTotal/8, $dexTotal*5/8, $dexTotal/8, $dexTotal/8];
break;
case 'strength2':
$leadership = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
$dexVal = [$dexTotal/8, $dexTotal/8, $dexTotal*5/8, $dexTotal/8];
break;
case 'intel':
$leadership = $stat_tier1;
$power = $stat_tier3;
$intel = $stat_tier2;
$dexVal = [$dexTotal/8, $dexTotal/8, $dexTotal/8, $dexTotal*5/8];
break;
default:
$leadership = $stat_tier3;
$power = $stat_tier1;
$intel = $stat_tier2;
$dexVal = [$dexTotal/4, $dexTotal/4, $dexTotal/4, $dexTotal/4];
break;
}
// 국내 최고능치 기준으로 랜덤성 스케일링
if($avgGen['stat_sum'] > 210) {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
} elseif($avgGen['stat_sum'] > 180) {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (75+rand()%21)/100);
} else {
$leadership = Util::round($leadership * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
$power = Util::round($power * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
$intel = Util::round($intel * $avgGen['stat_sum'] / GameConst::$defaultStatTotal * (90+rand()%11)/100);
}
$over1 = 0;
$over2 = 0;
$over3 = 0;
// 너무 높은 능치는 다른 능치로 분산
if($leadership > 90) {
$over1 = rand() % ($leadership - 90) + 5;
$leadership -= $over1;
}
if($power > 90) {
$over2 = rand() % ($power - 90) + 5;
$power -= $over2;
}
if($intel > 90) {
$over3 = rand() % ($intel - 90) + 5;
$intel -= $over3;
}
// 낮은 능치쪽으로 합산
if($type == 'power') {
$intel = $intel + $over1 + $over2 + $over3;
} else {
$power = $power + $over1 + $over2 + $over3;
}
// 너무 높은 능치는 제한
if($leadership > 95) {
$leadership = 95;
}
if($power > 95) {
$power = 95;
}
if($intel > 95) {
$intel = 95;
}
//인재추가
$npc = 3;
$npcid = $admin['npccount'];
$npccount = 10000 + $npcid;
$affinity = rand() % 150 + 1;
$picture = 'default.jpg';
$turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime']));
$personal = rand() % 10;
$bornyear = $admin['year'];
$deadyear = $admin['year'] + 3;
$age = 20;
$specage = Util::round((GameConst::$retirementYear - $age)/12) + $age;
$specage2 = Util::round((GameConst::$retirementYear - $age)/3) + $age;
//$specage = $age + 1 + rand() % 3;
//$specage2 = $age + 5 + rand() % 5;
// 20년 ~ 50년
$killturn = Util::randRangeInt(20, 50) * 12;
@MYDB_query("
insert into general (
npcid,npc,npc_org,affinity,name,picture,nation,
city,leadership,power,intel,experience,dedication,
level,gold,rice,crew,crewtype,train,atmos,tnmt,
weapon,book,horse,turntime,killturn,age,belong,personal,special,specage,special2,specage2,npcmsg,
makelimit,bornyear,deadyear,
dex0, dex10, dex20, dex30, dex40
) values (
'$npccount','$npc','$npc','$affinity','$name','$picture','$scoutNation',
'{$general['city']}','$leadership','$power','$intel','{$avgGen['exp']}','{$avgGen['ded']}',
'$scoutLevel','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','$age','1','$personal','0','$specage','0','$specage2','',
'0','$bornyear','$deadyear',
'{$dexVal[0]}','{$dexVal[1]}','{$dexVal[2]}','{$dexVal[3]}','{$avgGen['dex40']}'
)",
$connect
) or Error(__LINE__.MYDB_error($connect),"");
$npcid++;
//npccount
$gameStor->npccount=$npcid;
$db->update('nation', [
'gennum'=>$db->sqleval('gennum + 1'),
], 'nation=%i', $general['nation']);
}
//기술로 가격
$gold = $general['gold'] - $admin['develcost'];
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 자금 감소 // 경험치 상승 // 공헌도, 명성 상승
$query = "update general set resturn='SUCCESS',term='0',gold='$gold',leadership2='{$general['leadership2']}',strength2='{$general['strength2']}',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
$log = uniqueItem($general, $log);
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_45(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$query = "select name from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
if($general['nation'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야입니다. 하야 실패. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중 하야는 불가능합니다. 하야 실패. <1>$date</>";
} elseif($general['level'] == 12) {
$log[] = "<C>●</>{$admin['month']}월:군주입니다. 하야 실패. <1>$date</>";
} else {
$query = "select no from diplomacy where me='{$general['nation']}' and state>='3' and state<='4'";
$dipresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount1 = MYDB_num_rows($dipresult);
$query = "select no from diplomacy where me='{$general['nation']}' and state>='5' and state<='6'";
$dipresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount2 = MYDB_num_rows($dipresult);
$gold = 0;
$rice = 0;
// 금쌀1000이상은 남김
if($general['gold'] > 1000) {
$gold = $general['gold'] - 1000;
$general['gold'] = 1000;
}
if($general['rice'] > 1000) {
$rice = $general['rice'] - 1000;
$general['rice'] = 1000;
}
if($dipcount1 > 0) {
$josaYi = JosaUtil::pick($general['name'], '이');
$josaUl = JosaUtil::pick($nation['name'], '을');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} 통합에 반대하며 <D><b>{$nation['name']}</b></>{$josaUl} <R>떠났</>습니다.";
$log[] = "<C>●</>{$admin['month']}월:통합에 반대하며 <D><b>{$nation['name']}</b></>에서 떠났습니다. <1>$date</>";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:통합에 반대하며 <D><b>{$nation['name']}</b></>{$josaUl} 떠남");
// 국적 바꾸고 등급 재야로
$query = "update general set resturn='SUCCESS',belong=0,nation=0,level=0,makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($dipcount2 > 0) {
$josaYi = JosaUtil::pick($general['name'], '이');
$josaUl = JosaUtil::pick($nation['name'], '을');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} 합병에 반대하며 <D><b>{$nation['name']}</b></>{$josaUl} <R>떠났</>습니다.";
$log[] = "<C>●</>{$admin['month']}월:합병에 반대하며 <D><b>{$nation['name']}</b></>에서 떠났습니다. <1>$date</>";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:합병에 반대하며 <D><b>{$nation['name']}</b></>{$josaUl} 떠남");
// 국적 바꾸고 등급 재야로
$query = "update general set resturn='SUCCESS',belong=0,nation=0,level=0,makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$josaYi = JosaUtil::pick($general['name'], '이');
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>에서 <R>하야</>했습니다.";
$log[] = "<C>●</>{$admin['month']}월:<D><b>{$nation['name']}</b></>에서 하야했습니다. <1>$date</>";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>에서 하야");
// 국적 바꾸고 등급 재야로 // 명성/공헌 N*10% 감소
$query = "update general set resturn='SUCCESS',belong=0,nation=0,level=0,permission='normal',experience=experience*(1-0.1*betray),dedication=dedication*(1-0.1*betray),makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}',betray=betray+1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
//도시의 태수, 군사, 종사직도 초기화
$query = "update city set gen1='0' where gen1='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update city set gen2='0' where gen2='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update city set gen3='0' where gen3='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "select no from troop where troop='{$general['troop']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$troop = MYDB_fetch_array($result);
//부대장일 경우
if($troop['no'] == $general['no']) {
// 모두 탈퇴
$query = "update general set troop='0' where troop='{$general['troop']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 부대 삭제
$query = "delete from troop where troop='{$general['troop']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$query = "update general set troop='0' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$db->update('nation', [
'gennum'=>$db->sqleval('gennum - 1'),
'gold'=>$db->sqleval('gold + %i', $gold),
'rice'=>$db->sqleval('rice + %i', $rice),
], 'nation=%i', $general['nation']);
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_46(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$query = "select * from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$query = "select nation from nation where nation!={$general['nation']} AND name='{$general['makenation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nationcount = MYDB_num_rows($result);
$currNationLevel = $db->queryFirstField('SELECT level FROM nation WHERE nation=%i', $general['nation']);
$command = DecodeCommand($general['turn0']);
$color = $command[1];
$type = $command[2]; // 1 ~ 13
$colors = GetNationColors();
if($color >= count($colors)) { $color = 0; }
$color = $colors[$color];
if($type < 1) { $type = 9; }
elseif($type > 13) { $type = 9; }
if($gencount < 2) {
$log[] = "<C>●</>{$admin['month']}월:수하 장수가 부족합니다. 건국 실패. <1>$date</>";
} elseif($admin['year'] >= $admin['startyear']+2) {
$log[] = "<C>●</>{$admin['month']}월:건국 기간이 지났습니다. 건국 실패. <1>$date</>";
} elseif($city['nation'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:공백지가 아닙니다. 건국 실패. <1>$date</>";
} elseif($currNationLevel != 0) {
$log[] = "<C>●</>{$admin['month']}월:방랑군이 아닙니다. 건국 실패. <1>$date</>";
} elseif($nationcount > 0) {
$log[] = "<C>●</>{$admin['month']}월:존재하는 국가명입니다. 건국 실패. <1>$date</>";
} elseif($general['makelimit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:재야가 된지 12시간이 지나야 합니다. 건국 실패. <1>$date</>";
} elseif($general['level'] != 12) {
$log[] = "<C>●</>{$admin['month']}월:군주가 아닙니다. 건국 실패. <1>$date</>";
} elseif($city['level'] != 5 && $city['level'] != 6) {
$log[] = "<C>●</>{$admin['month']}월:중, 소 도시에서만 가능합니다. 건국 실패. <1>$date</>";
} else {
$db->update('nation', [
'name'=>$general['makenation'],
'color'=>$color,
'level'=>1,
'type'=>$type,
'capital'=>$general['city'],
], 'nation=%i', $general['nation']);
refreshNationStaticInfo();
$nation = getNationStaticInfo($general['nation']);
// 현 도시 소속지로
$query = "update city set nation='{$nation['nation']}',conflict='{}' where city='{$general['city']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$josaYi = JosaUtil::pick($general['name'], '이');
$josaUl = JosaUtil::pick($nation['name'], '을');
$log[] = "<C>●</>{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaUl} 건국하였습니다. <1>$date</>";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$city['name']}</b></>에 국가를 건설하였습니다.";
$josaYi = JosaUtil::pick($nation['name'], '이');
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【건국】</b></>".getNationType($type)." <D><b>{$nation['name']}</b></>{$josaYi} 새로이 등장하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaUl} 건국");
$josaYi = JosaUtil::pick($general['name'], '이');
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>{$josaUl} 건국");
$exp = 1000;
$ded = 1000;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 명성 상승
$query = "update general set resturn='SUCCESS',dedication=dedication+'$ded', experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = uniqueItem($general, $log, 3);
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_47(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$nation = getNationStaticInfo($general['nation']);
//현재 외교 진행중(평시, 불가침만 제외)일때
$query = "select state from diplomacy where me='{$general['nation']}' and state!='2' and state!='7'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount = MYDB_num_rows($result);
if($general['level'] != 12) {
$log[] = "<C>●</>{$admin['month']}월:군주가 아닙니다. <1>$date</>";
} elseif($admin['year'] < $admin['startyear']+3) {
$log[] = "<C>●</>{$admin['month']}월:초반제한중에는 방랑이 불가능합니다. 방랑 실패.";
} elseif($dipcount != 0) {
$log[] = "<C>●</>{$admin['month']}월:방랑할 수 없는 외교상태입니다. 방랑 실패.";
} elseif($nation['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:이미 방랑군입니다. 방랑 실패.";
} else {
$josaYi = JosaUtil::pick($general['name'], '이');
$log[] = "<C>●</>{$admin['month']}월:영토를 버리고 방랑의 길을 떠납니다. <1>$date</>";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} 방랑의 길을 떠납니다.";
$josaUl = JosaUtil::pick($nation['name'], '을');
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaUl} 버리고 방랑");
$josaUn = JosaUtil::pick($general['name'], '은');
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<R><b>【방랑】</b></><D><b>{$general['name']}</b></>{$josaUn} <R>방랑</>의 길을 떠납니다.";
//분쟁기록 모두 지움
DeleteConflict($general['nation']);
// 국명, 색깔 바꿈 국가 레벨 0, 성향리셋, 기술0
$db->update('nation', [
'name'=>$general['name'],
'color'=>'#330000', //TODO: 기본 방랑군색 별도 지정
'level'=>0,
'type'=>0,
'tech'=>0,
'capital'=>0
], 'nation=%i', $general['nation']);
// 본인 빼고 건국/임관제한
$query = "update general set makelimit='12' where no!='{$general['no']}' and nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 건국/임관제한
$query = "update general set resturn='SUCCESS',makelimit='12' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 관직장수 일반으로
$query = "update general set level=1 where nation='{$general['nation']}' and level <= 11";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 전 도시 공백지로
$query = "update city set nation='0',front='0',gen1='0',gen2='0',gen3='0',conflict='{}' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 외교 리셋
$query = "update diplomacy set state='2',term='0' where me='{$general['nation']}' or you='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushWorldHistory($history, $admin['year'], $admin['month']);
refreshNationStaticInfo();
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_54(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$youlog = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$command = DecodeCommand($general['turn0']);
$who = $command[1];
$query = "select no,name,nation from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nextruler = MYDB_fetch_array($result);
$query = "select nation,name from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
//현재 외교 진행중(통합제의중)일때
$query = "select state from diplomacy where me='{$general['nation']}' and state='4'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$dipcount = MYDB_num_rows($result);
if($nextruler['name'] == "") {
$log[] = "<C>●</>{$admin['month']}월:잘못된 장수입니다. 선양 실패. <1>$date</>";
} elseif($general['level'] != 12) {
$log[] = "<C>●</>{$admin['month']}월:군주가 아닙니다. 선양 실패. <1>$date</>";
} elseif($nextruler['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:잘못된 장수입니다. 선양 실패. <1>$date</>";
} elseif($dipcount != 0) {
$log[] = "<C>●</>{$admin['month']}월:현재 통합 진행중입니다. 선양 실패.";
} else {
//군주 교체
$db->update('general', [
'level'=>12,
'permission'=>'normal'
], 'no=%i', $who);
// 태수,군사,종사이었다면 해제
$db->update('city', [
'gen1'=>0,
], 'gen1=%i', $who);
$db->update('city', [
'gen2'=>0,
], 'gen2=%i', $who);
$db->update('city', [
'gen3'=>0,
], 'gen3=%i', $who);
$db->update('general', [
'resturn'=>'SUCCESS',
'level'=>1,
'permission'=>'auditor',
'experience'=>$db->sqleval('experience*0.7'),
], 'no=%i', $general['no']);
$josaYi = JosaUtil::pick($general['name'], '이');
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【선양】</b></><Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>의 군주 자리를 <Y>{$nextruler['name']}</>에게 선양했습니다.";
$log[] = "<C>●</>{$admin['month']}월:<Y>{$nextruler['name']}</>에게 군주의 자리를 물려줍니다. <1>$date</>";
$youlog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>에게서 군주의 자리를 물려받습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 군주자리를 <Y>{$nextruler['name']}</>에게 선양");
pushGeneralHistory($nextruler, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>의 군주자리를 물려 받음");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>{$nextruler['name']}</>에게 선양");
}
pushGenLog($general, $log);
pushGenLog($nextruler, $youlog);
pushWorldHistory($history, $admin['year'], $admin['month']);
}
function process_55(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$query = "select name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select nation from nation where name='{$general['name']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nationcount = MYDB_num_rows($result);
if($nationcount > 0) { $makename = mb_substr("$nationcount".$general['name'], 0, 6); }
else { $makename = $general['name']; }
if($general['level'] != 0) {
$log[] = "<C>●</>{$admin['month']}월:재야가 아닙니다. 거병 실패. <1>$date</>";
} elseif($admin['year'] >= $admin['startyear']+2) {
$log[] = "<C>●</>{$admin['month']}월:거병 기간이 지났습니다. 거병 실패. <1>$date</>";
} elseif($general['makelimit'] > 0) {
$log[] = "<C>●</>{$admin['month']}월:재야가 된지 12시간이 지나야 합니다. 거병 실패. <1>$date</>";
} else {
DB::db()->insert('nation', [
'name'=>$makename,
'color'=>'#330000',
'gold'=>0,
'rice'=>GameConst::$baserice,
'rate'=>20,
'bill'=>100,
'strategic_cmd_limit'=>36,
'surlimit'=>72,
'type'=>0,
'gennum'=>1
]);
$nationID = DB::db()->insertId();
refreshNationStaticInfo();
$nation = getNationStaticInfo($nationID);
$exp = 100;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 명성 상승
// 군주로
// 현 국가 소속으로
$query = "update general set resturn='SUCCESS',belong=1,level=12,nation='{$nation['nation']}',dedication=dedication+'$ded', experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$josaYi = JosaUtil::pick($general['name'], '이');
$log[] = "<C>●</>{$admin['month']}월:거병에 성공하였습니다. <1>$date</>";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$city['name']}</b></>에서 거병하였습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【거병】</b></><D><b>{$general['name']}</b></>{$josaYi} 세력을 결성하였습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<G><b>{$city['name']}</b></>에서 거병");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <G><b>{$city['name']}</b></>에서 거병");
// 외교테이블 추가
foreach(getAllNationStaticInfo() as $younation){
if($nation['nation'] == $younation['nation']){
continue;
}
//FIXME: 쿼리 개선. foreach문은 굳이 필요없을것
$query = "insert into diplomacy (me, you, state, term) values ('{$nation['nation']}', '{$younation['nation']}', '2', '0')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "insert into diplomacy (me, you, state, term) values ('{$younation['nation']}', '{$nation['nation']}', '2', '0')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
}
pushWorldHistory($history, $admin['year'], $admin['month']);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_56(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year','month']);
$nation = getNationStaticInfo($general['nation']);
$query = "select city from city where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$citycount = MYDB_num_rows($result);
if($general['level'] != 12) {
$log[] = "<C>●</>{$admin['month']}월:군주가 아닙니다. <1>$date</>";
} elseif($citycount != 0) {
$log[] = "<C>●</>{$admin['month']}월:방랑군이 아닙니다. <1>$date</>";
} else {
$josaYi = JosaUtil::pick($general['name'], '이');
$log[] = "<C>●</>{$admin['month']}월:세력을 해산했습니다. <1>$date</>";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} 세력을 해산했습니다.";
$josaUl = JosaUtil::pick($nation['name'], '을');
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaUl} 해산");
$query = "select no from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
// 수동 해산인 국가 페널티, 자금, 군량
if($genCount > 1) {
$query = "update general set resturn='SUCCESS' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set gold=1000 where nation='{$general['nation']}' and gold>1000";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set rice=1000 where nation='{$general['nation']}' and rice>1000";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
//분쟁기록 모두 지움
DeleteConflict($general['nation']);
deleteNation($general);
refreshNationStaticInfo();
}
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushGenLog($general, $log);
}
function process_57(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$youlog = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month', 'killturn']);
$query = "select nation,name from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select npc,no,name,killturn from general where nation='{$general['nation']}' and level='12'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$ruler = MYDB_fetch_array($result);
if($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야 입니다. 모반 실패. <1>$date</>";
} elseif($general['level'] < 5) {
$log[] = "<C>●</>{$admin['month']}월:수뇌부 이상만 가능합니다. 모반 실패. <1>$date</>";
} elseif($city['nation'] != $general['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 모반 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 모반 실패. <1>$date</>";
} elseif($general['level'] == 12) {
$log[] = "<C>●</>{$admin['month']}월:이미 군주 입니다. 모반 실패. <1>$date</>";
} elseif($ruler['killturn'] >= $admin['killturn']) {
$log[] = "<C>●</>{$admin['month']}월:군주가 활동중입니다. 모반 실패. <1>$date</>";
} elseif($ruler['npc'] >= 2) {
$log[] = "<C>●</>{$admin['month']}월:군주가 NPC입니다. 모반 실패. <1>$date</>";
} else {
//군주 교체
$query = "update general set resturn='SUCCESS',level='12' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 태수,군사,종사이었다면 해제
$query = "update city set gen1='0' where gen1='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update city set gen2='0' where gen2='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update city set gen3='0' where gen3='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set level='1',experience=experience*0.7 where no='{$ruler['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$josaYi = JosaUtil::pick($general['name'], '이');
$log[] = "<C>●</>{$admin['month']}월:모반에 성공했습니다. <1>$date</>";
$youlog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>에게 군주의 자리를 뺏겼습니다.";
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <M>모반</>에 성공했습니다.";
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【모반】</b></><Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>의 군주 자리를 찬탈했습니다.";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:모반으로 <D><b>{$nation['name']}</b></>의 군주자리를 찬탈");
pushGeneralHistory($ruler, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$general['name']}</b></>의 모반으로 인해 <D><b>{$nation['name']}</b></>의 군주자리를 박탈당함");
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>{$ruler['name']}</>에게서 군주자리를 찬탈");
}
pushGenLog($general, $log);
pushGenLog($ruler, $youlog);
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
pushWorldHistory($history, $admin['year'], $admin['month']);
}
-709
View File
@@ -1,709 +0,0 @@
<?php
namespace sammo;
function calcSabotageAttackScore(string $statType, array $general, array $nation):array{
setLeadershipBonus($general, $nation['level']);
if($statType === 'leadership'){
$genScore = getGeneralLeadership($general, true, true, true);
}
else if($statType === 'strength'){
$genScore = getGeneralStrength($general, true, true, true);
}
else if($statType === 'intel'){
$genScore = getGeneralIntel($general, true, true, true);
}
else{
throw new MustNotBeReachedException();
}
$genScore /= GameConst::$sabotageProbCoefByStat;
$specialScore = 0;
if($general['special'] == 31){
//귀모
$specialScore += 0.2;
}
if($general['special2'] == 41){
//신산
$specialScore += 0.1;
}
if($general['item'] == 21){
//육도
$specialScore += 0.2;
}
else if($general['item'] == 22){
//삼략
$specialScore += 0.2;
}
$itemScore = 0;
if($general['item'] == 5){
//이추
$itemScore += 0.1;
}
else if($general['item'] == 6){
//향낭
$itemScore += 0.2;
}
$nationScore = 0;
if($nation['type'] == 9){
$nationScore = 0.1;
}
return [
$genScore,
$specialScore,
$itemScore,
$nationScore,
];
}
function calcSabotageDefendScore(string $statType, array $generalList, array $city, array $nation):array{
$maxGenScore = 0;
foreach ($generalList as $general) {
setLeadershipBonus($general, $nation['level']);
if ($statType === 'leadership') {
$maxGenScore = max($maxGenScore, getGeneralLeadership($general, true, true, true));
} elseif ($statType === 'strength') {
$maxGenScore = max($maxGenScore, getGeneralStrength($general, true, true, true));
} elseif ($statType === 'intel') {
$maxGenScore = max($maxGenScore, getGeneralIntel($general, true, true, true));
} else {
throw new MustNotBeReachedException();
}
}
$cityScore = $city['secu'] / $city['secu2'] / 5;
$supplyScore = $city['supply'] ? 0.1 : 0;
return [
($maxGenScore / GameConst::$sabotageProbCoefByStat),
$cityScore,
$supplyScore
];
}
function checkSabotageFailCondition($general, $srcCity, $destCity, $reqGold, $reqRice, $dipState):?string{
$srcNationID = $general['nation'];
$destNationID = $destCity['nation'];
if(!$destCity){
return '없는 도시입니다.';
}
if($general['level'] == 0){
return '재야입니다.';
}
if($srcNationID != $srcCity['nation']){
return '아국이 아닙니다.';
}
if(!$srcCity['supply']){
return '고립된 도시입니다.';
}
if($destNationID == 0){
return '공백지입니다.';
}
if($general['gold'] < $reqGold){
return '자금이 모자랍니다.';
}
if($general['rice'] < $reqRice){
return '군량이 모자랍니다.';
}
if($srcNationID == $destNationID){
return '아국입니다.';
}
if($dipState >= 7){
return '불가침국입니다.';
}
return null;
}
function process_32(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
$sabotageName = '화계';
$statType = 'intel';
[$year, $month, $develCost] = $gameStor->getValuesAsArray(['year','month','develcost']);
$logger = new ActionLogger($general['no'], $general['nation'], $year, $month);
$reqGold = $develCost * 5;
$reqRice = $develCost * 5;
$srcCityID = $general['city'];
$destCityID = DecodeCommand($general['turn0'])[1];
$dist = searchDistance($srcCityID, 5, false);
$srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID);
$destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,trust FROM city WHERE city=%i',$destCityID);
$destCityName = $destCity['name']??null;
$srcNationID = $general['nation'];
$destNationID = $destCity['nation'];
$dipState = $db->queryFirstField('SELECT `state` FROM diplomacy WHERE me=%i AND you=%i', $srcNationID, $destNationID);
$failReason = checkSabotageFailCondition($general, $srcCity, $destCity, $reqGold, $reqRice, $dipState);
if($failReason !== null){
$logger->pushGeneralActionLog("{$failReason} {$sabotageName} 실패. <1>{$date}</>");
return;
}
$srcNation = getNationStaticInfo($srcNationID);
$destNation = getNationStaticInfo($destNationID);
$generalList = $db->query('SELECT `no`,leadership,horse,strength,weapon,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']);
[
$srcGenScore,
$srcSpecialScore,
$srcItemScore,
$srcNationScore,
] = calcSabotageAttackScore($statType, $general, $srcNation);
[
$destGenScore,
$destCityScore,
$destSupplyScore
] = calcSabotageDefendScore($statType, $generalList, $destCity, $destNation);
$sabotageProb = (
GameConst::$sabotageDefaultProb
+ ($srcGenScore + $srcSpecialScore + $srcItemScore + $srcNationScore)
- ($destGenScore + $destCityScore + $destSupplyScore)
);
// 거리보정
$sabotageProb /= Util::array_get($dist[$destCityID], 99);
if(!Util::randBool($sabotageProb)){
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 실패했습니다. <1>$date</>");
$exp = Util::randRangeInt(1, 100);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(1, 70);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
return;
}
if($srcItemScore){
$itemName = getItemName($general['item']);
$josaUl = JosaUtil::pick($itemName, '을');
$logger->pushGeneralActionLog("<C>{$itemName}</>{$josaUl} 사용!", ActionLogger::PLAIN);
$general['item'] = 0;
}
$josaYi = JosaUtil::pick($destCityName, '이');
$logger->pushGlobalActionLog("<G><b>{$destCityName}</b></>{$josaYi} 불타고 있습니다.");
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 성공했습니다. <1>$date</>");
$agriAmount = Util::valueFit(Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax), null, $destCity['agri']);
$commAmount = Util::valueFit(Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax), null, $destCity['comm']);
$destCity['agri'] -= $agriAmount;
$destCity['comm'] -= $commAmount;
$db->update('city', [
'state'=>32,
'agri'=>$destCity['agri'],
'comm'=>$destCity['comm']
], 'city=%i', $destCityID);
$injuryCount = SabotageInjury($destCityID);
$logger->pushGeneralActionLog("도시의 농업이 <C>{$agriAmount}</>, 상업이 <C>{$commAmount}</>만큼 감소하고, 장수 <C>{$injuryCount}</>명이 부상 당했습니다.", ActionLogger::PLAIN);
$exp = Util::randRangeInt(201, 300);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(141, 210);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
'firenum' => $db->sqleval('firenum + 1'),
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'item'=>$general['item'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
}
function process_33(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
$sabotageName = '탈취';
$statType = 'strength';
[$year, $month, $develCost] = $gameStor->getValuesAsArray(['year','month','develcost']);
$logger = new ActionLogger($general['no'], $general['nation'], $year, $month);
$reqGold = $develCost * 5;
$reqRice = $develCost * 5;
$srcCityID = $general['city'];
$destCityID = DecodeCommand($general['turn0'])[1];
$dist = searchDistance($srcCityID, 5, false);
$srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID);
$destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,trust FROM city WHERE city=%i',$destCityID);
$destCityName = $destCity['name']??null;
$srcNationID = $general['nation'];
$destNationID = $destCity['nation'];
//탈취는 0까지 무제한
$srcNation = getNationStaticInfo($srcNationID);
$dipState = $db->queryFirstField('SELECT `state` FROM diplomacy WHERE me=%i AND you=%i', $srcNationID, $destNationID);
$failReason = checkSabotageFailCondition($general, $srcCity, $destCity, $reqGold, $reqRice, $dipState);
if($failReason !== null){
$logger->pushGeneralActionLog("{$failReason} {$sabotageName} 실패. <1>{$date}</>");
return;
}
$srcNation = getNationStaticInfo($srcNationID);
$destNation = getNationStaticInfo($destNationID);
$generalList = $db->query('SELECT `no`,leadership,horse,strength,weapon,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']);
[
$srcGenScore,
$srcSpecialScore,
$srcItemScore,
$srcNationScore,
] = calcSabotageAttackScore($statType, $general, $srcNation);
[
$destGenScore,
$destCityScore,
$destSupplyScore
] = calcSabotageDefendScore($statType, $generalList, $destCity, $destNation);
$sabotageProb = (
GameConst::$sabotageDefaultProb
+ ($srcGenScore + $srcSpecialScore + $srcItemScore + $srcNationScore)
- ($destGenScore + $destCityScore + $destSupplyScore)
);
// 거리보정
$sabotageProb /= Util::array_get($dist[$destCityID], 99);
if(!Util::randBool($sabotageProb)){
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 실패했습니다. <1>$date</>");
$exp = Util::randRangeInt(1, 100);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(1, 70);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
return;
}
if($srcItemScore){
$itemName = getItemName($general['item']);
$josaUl = JosaUtil::pick($itemName, '을');
$logger->pushGeneralActionLog("<C>{$itemName}</>{$josaUl} 사용!", ActionLogger::PLAIN);
$general['item'] = 0;
}
$logger->pushGlobalActionLog("<G><b>{$destCityName}</b></>에서 금과 쌀을 도둑맞았습니다.");
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 성공했습니다. <1>$date</>");
// 탈취 최대 400 * 8
$gold = Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax) * $destCity['level'];
$rice = Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax) * $destCity['level'];
if($destCity['supply']){
[$destNationGold, $destNationRice] = $db->queryFirstList('SELECT gold,rice FROM nation WHERE nation=%i', $destNationID);
$destNationGold -= $gold;
$destNationRice -= $rice;
if($destNationGold < GameConst::$minNationalGold) {
$gold += $destNationGold - GameConst::$minNationalGold;
$destNationGold = GameConst::$minNationalGold;
}
if($destNationRice < GameConst::$minNationalRice) {
$rice += $destNationRice - GameConst::$minNationalRice;
$destNationRice = GameConst::$minNationalRice;
}
$db->update('nation', [
'gold'=>$destNationGold,
'rice'=>$destNationRice
], 'nation=%i', $destNationID);
$db->update('city', [
'state'=>34
], 'city=%i', $destCityID);
}
else{
$db->update('city', [
'comm'=>Util::valueFit($destCity['comm'] - $gold / 12, 0),
'agri'=>Util::valueFit($destCity['agri'] - $rice / 12, 0),
'state'=>34
], 'city=%i', $destCityID);
}
// 본국으로 일부 회수, 재야이면 본인이 전량 소유
if($general['nation'] != 0) {
$db->update('nation', [
'gold' => $db->sqleval('gold + %i', Util::round($gold * 0.7)),
'rice' => $db->sqleval('rice + %i', Util::round($rice * 0.7))
], 'nation=%i', $srcNationID);
$general['gold'] += $gold - Util::round($gold * 0.7);
$general['rice'] += $rice - Util::round($rice * 0.7);
} else {
$general['gold'] += $gold;
$general['rice'] += $rice;
}
$logger->pushGeneralActionLog("금<C>{$gold}</> 쌀<C>{$rice}</>을 획득했습니다.", ActionLogger::PLAIN);
$exp = Util::randRangeInt(201, 300);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(141, 210);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
'firenum' => $db->sqleval('firenum + 1'),
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'item'=>$general['item'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
}
function process_34(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
$sabotageName = '파괴';
$statType = 'strength';
[$year, $month, $develCost] = $gameStor->getValuesAsArray(['year','month','develcost']);
$logger = new ActionLogger($general['no'], $general['nation'], $year, $month);
$reqGold = $develCost * 5;
$reqRice = $develCost * 5;
$srcCityID = $general['city'];
$destCityID = DecodeCommand($general['turn0'])[1];
$dist = searchDistance($srcCityID, 5, false);
$srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID);
$destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,trust FROM city WHERE city=%i',$destCityID);
$destCityName = $destCity['name']??null;
$srcNationID = $general['nation'];
$destNationID = $destCity['nation'];
$srcNation = getNationStaticInfo($srcNationID);
$dipState = $db->queryFirstField('SELECT `state` FROM diplomacy WHERE me=%i AND you=%i', $srcNationID, $destNationID);
$failReason = checkSabotageFailCondition($general, $srcCity, $destCity, $reqGold, $reqRice, $dipState);
if($failReason !== null){
$logger->pushGeneralActionLog("{$failReason} {$sabotageName} 실패. <1>{$date}</>");
return;
}
$srcNation = getNationStaticInfo($srcNationID);
$destNation = getNationStaticInfo($destNationID);
$generalList = $db->query('SELECT `no`,leadership,horse,strength,weapon,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']);
[
$srcGenScore,
$srcSpecialScore,
$srcItemScore,
$srcNationScore,
] = calcSabotageAttackScore($statType, $general, $srcNation);
[
$destGenScore,
$destCityScore,
$destSupplyScore
] = calcSabotageDefendScore($statType, $generalList, $destCity, $destNation);
$sabotageProb = (
GameConst::$sabotageDefaultProb
+ ($srcGenScore + $srcSpecialScore + $srcItemScore + $srcNationScore)
- ($destGenScore + $destCityScore + $destSupplyScore)
);
// 거리보정
$sabotageProb /= Util::array_get($dist[$destCityID], 99);
if(!Util::randBool($sabotageProb)){
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 실패했습니다. <1>$date</>");
$exp = Util::randRangeInt(1, 100);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(1, 70);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
return;
}
if($srcItemScore){
$itemName = getItemName($general['item']);
$josaUl = JosaUtil::pick($itemName, '을');
$logger->pushGeneralActionLog("<C>{$itemName}</>{$josaUl} 사용!", ActionLogger::PLAIN);
$general['item'] = 0;
}
$logger->pushGlobalActionLog("누군가가 <G><b>{$destCityName}</b></>의 성벽을 허물었습니다.");
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 성공했습니다. <1>$date</>");
// 파괴
$defAmount = Util::valueFit(Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax), null, $destCity['def'] - 100);
$wallAmount = Util::valueFit(Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax), null, $destCity['wall'] - 100);
if($defAmount < 0){ $defAmount = 0; }
if($wallAmount < 0){ $wallAmount = 0; }
$destCity['def'] -= $defAmount;
$destCity['wall'] -= $wallAmount;
$db->update('city', [
'state'=>32,
'def'=>$destCity['def'],
'wall'=>$destCity['wall']
], 'city=%i', $destCityID);
$injuryCount = SabotageInjury($destCityID);
$logger->pushGeneralActionLog("도시의 수비가 <C>{$defAmount}</>, 성벽이 <C>{$wallAmount}</>만큼 감소하고, 장수 <C>{$injuryCount}</>명이 부상 당했습니다.", ActionLogger::PLAIN);
$exp = Util::randRangeInt(201, 300);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(141, 210);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
'firenum' => $db->sqleval('firenum + 1'),
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'item'=>$general['item'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
}
function process_35(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$date = substr($general['turntime'],11,5);
$sabotageName = '선동';
$statType = 'leadership';
[$year, $month, $develCost] = $gameStor->getValuesAsArray(['year','month','develcost']);
$logger = new ActionLogger($general['no'], $general['nation'], $year, $month);
$reqGold = $develCost * 5;
$reqRice = $develCost * 5;
$srcCityID = $general['city'];
$destCityID = DecodeCommand($general['turn0'])[1];
$dist = searchDistance($srcCityID, 5, false);
$srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID);
$destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,trust FROM city WHERE city=%i',$destCityID);
$destCityName = $destCity['name']??null;
$srcNationID = $general['nation'];
$destNationID = $destCity['nation'];
$srcNation = getNationStaticInfo($srcNationID);
$dipState = $db->queryFirstField('SELECT `state` FROM diplomacy WHERE me=%i AND you=%i', $srcNationID, $destNationID);
$lbonus = setLeadershipBonus($general, $srcNation['level']);
$failReason = checkSabotageFailCondition($general, $srcCity, $destCity, $reqGold, $reqRice, $dipState);
if($failReason !== null){
$logger->pushGeneralActionLog("{$failReason} {$sabotageName} 실패. <1>{$date}</>");
return;
}
$srcNation = getNationStaticInfo($srcNationID);
$destNation = getNationStaticInfo($destNationID);
$generalList = $db->query('SELECT `no`,leadership,horse,strength,weapon,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']);
[
$srcGenScore,
$srcSpecialScore,
$srcItemScore,
$srcNationScore,
] = calcSabotageAttackScore($statType, $general, $srcNation);
[
$destGenScore,
$destCityScore,
$destSupplyScore
] = calcSabotageDefendScore($statType, $generalList, $destCity, $destNation);
$sabotageProb = (
GameConst::$sabotageDefaultProb
+ ($srcGenScore + $srcSpecialScore + $srcItemScore + $srcNationScore)
- ($destGenScore + $destCityScore + $destSupplyScore)
);
// 거리보정
$sabotageProb /= Util::array_get($dist[$destCityID], 99);
if(!Util::randBool($sabotageProb)){
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 실패했습니다. <1>$date</>");
$exp = Util::randRangeInt(1, 100);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(1, 70);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
return;
}
if($srcItemScore){
$itemName = getItemName($general['item']);
$josaUl = JosaUtil::pick($itemName, '을');
$logger->pushGeneralActionLog("<C>{$itemName}</>{$josaUl} 사용!", ActionLogger::PLAIN);
$general['item'] = 0;
}
$logger->pushGlobalActionLog("<G><b>{$destCityName}</b></>의 백성들이 동요하고 있습니다.");
$josaYi = JosaUtil::pick($sabotageName, '이');
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>에 {$sabotageName}{$josaYi} 성공했습니다. <1>$date</>");
// 선동 최대 10
$secuAmount = Util::valueFit(Util::randRangeInt(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax), null, $destCity['secu']);
$trustAmount = Util::valueFit(
Util::randRange(GameConst::$sabotageDamageMin, GameConst::$sabotageDamageMax) / 50,
null,
$destCity['trust']
);
$destCity['secu'] -= $secuAmount;
$destCity['trust'] -= $trustAmount;
$db->update('city', [
'state'=>32,
'secu'=>$destCity['secu'],
'trust'=>$destCity['trust']
], 'city=%i', $destCityID);
$injuryCount = SabotageInjury($destCityID);
$logger->pushGeneralActionLog("도시의 치안이 <C>{$secuAmount}</>, 민심이 <C>".round($trustAmount, 1)."</>만큼 감소하고, 장수 <C>{$injuryCount}</>명이 부상 당했습니다.", ActionLogger::PLAIN);
$exp = Util::randRangeInt(201, 300);
$exp *= getCharExpMultiplier($general['personal']);
$ded = Util::randRangeInt(141, 210);
$ded *= getCharDedMultiplier($general['personal']);
$general[$statType.'2'] += 1;
$general['gold'] -= $reqGold;
$general['rice'] -= $reqRice;
$db->update('general', [
'firenum' => $db->sqleval('firenum + 1'),
($statType.'2') => $general[$statType.'2'],
'resturn'=>'SUCCESS',
'gold'=>$general['gold'],
'rice'=>$general['rice'],
'item'=>$general['item'],
'experience'=>$db->sqleval('experience + %i', Util::round($exp)),
'dedication'=>$db->sqleval('dedication + %i', Util::round($ded))
], 'no=%i', $general['no']);
checkAbilityEx($general['no'], $logger);
}
+2 -2
View File
@@ -152,9 +152,9 @@ $(function(){
<td style='text-align:center;'>
<?php
if (!$plock) {
echo "<span style='color:cyan;'>동작 시각: ".substr($gameStor->turntime, 5)."</span>";
echo "<span style='color:cyan;'>동작 시각: ".substr($gameStor->turntime, 5, 14)."</span>";
} else {
echo "<span style='color:magenta;'>동작 시각: ".substr($gameStor->turntime, 5)."</span>";
echo "<span style='color:magenta;'>동작 시각: ".substr($gameStor->turntime, 5, 14)."</span>";
}
echo "
-274
View File
@@ -1,274 +0,0 @@
<?
include "lib.php";
include "func.php";
$id = $_POST[id];
$pw = $_POST[pw];
$name = $_POST[name];
$name = _String::NoSpecialCharacter($name);
$pic = $_POST[pic];
$character = $_POST[character];
$pwTemp = substr($pw, 0, 32);
$connect = dbConn("sammo");
//회원 테이블에서 정보확인
$query = "select no,id,picture,imgsvr,grade from MEMBER where id='$id' and pw='$pwTemp'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$member = MYDB_fetch_array($result);
if(!$member) {
MessageBox("잘못된 접근입니다!!!");
echo "<script>history.go(-1);</script>";
exit(1);
}
$date = date('Y-m-d H:i:s');
//등록정보
$query = "update MEMBER set reg_num=reg_num+1,reg_date='$date' where no='$member[no]'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$connect = dbConn();
########## 동일 정보 존재여부 확인. ##########
$query = "select year,month,scenario,maxgeneral,turnterm,genius,img from game where no='1'";
$result = MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
$query = "select no from general where npc<2";
$result = MYDB_query($query,$connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$query = "select no from general where user_id='$member[id]'";
$result = MYDB_query($query,$connect) or Error(__LINE__.MYDB_error($connect),"");
$id_num = MYDB_num_rows($result);
$query = "select no from general where name='$name'";
$result = MYDB_query($query,$connect) or Error(__LINE__.MYDB_error($connect),"");
$name_num = MYDB_num_rows($result);
$query = "select * from token where id='$member[id]'";
$result = MYDB_query($query,$connect) or Error(__LINE__.MYDB_error($connect),"");
$token_num = MYDB_num_rows($result);
if($token_num == 1) {
$token = MYDB_fetch_array($result);
$leadership = $token['leadership'];
$power = $token['power'];
$intel = $token['intel'];
} else {
$leadership = 0;
$power = 0;
$intel = 0;
}
if($id_num) {
echo("<script>
window.alert('이미 등록하셨습니다!')
history.go(-1)
</script>");
exit;
} elseif($name_num) {
echo("<script>
window.alert('이미 있는 장수입니다. 다른 이름으로 등록해 주세요!')
history.go(-1)
</script>");
exit;
} elseif($token_num != 1) {
echo("<script>
window.alert('능력치 정보가 잘못되었습니다. 운영자에게 문의해 주세요!')
history.go(-1)
</script>");
exit;
} elseif($admin[maxgeneral] <= $gencount) {
echo("<script>
window.alert('더이상 등록할 수 없습니다!')
history.go(-1)
</script>");
exit;
} elseif($id == "") {
echo("<script>
window.alert('ID가 없습니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif(_String::GetStrLen($name) < 1) {
echo("<script>
window.alert('이름이 짧습니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif($name == "") {
echo("<script>
window.alert('이름이 없습니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif(_String::GetStrLen($name) > 6) {
echo("<script>
window.alert('이름이 유효하지 않습니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif($leadership + $power + $intel > 150) {
echo("<script>
window.alert('능력치가 150을 넘어섰습니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif($leadership > 75 || $leadership < 10 || $power > 75 || $power < 10 || $intel > 75 || $intel < 10) {
echo("<script>
window.alert('능력치가 비정상적입니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} elseif($character < 0 || $character > 11) {
echo("<script>
window.alert('성격이 비정상적입니다. 다시 가입해주세요!')
history.go(-1)
</script>");
exit;
} else {
$ratio = rand() % 100;
// 현재 1%
if($ratio == 50 && $admin[genius] > 0) {
$genius = 1;
$query = "update game set genius=genius-1 where no='1'";
MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
} else {
$genius = 0;
}
//중, 소 공백지 개수
$query = "select city from city where level>=5 and level<=6 and nation=0";
$result = MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
$citycount = MYDB_num_rows($result);
// 공백지에서만 태어나게
if($citycount > 0) {
$query = "select city from city where level>=5 and level<=6 and nation=0 order by rand() limit 0,1";
$result = MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
} else {
$query = "select city from city where level>=5 and level<=6 order by rand() limit 0,1";
$result = MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
}
$city = $city[city];
$total = rand() % 6;
$pleader = rand() % 100;
$ppower = rand() % 100;
$pintel = rand() % 100;
$rate = $pleader + $ppower + $pintel;
$pleader = floor($pleader / $rate * $total + 0.5);
$ppower = floor($ppower / $rate * $total + 0.5);
$pintel = floor($pintel / $rate * $total + 0.5);
$leadership = $leadership + $pleader;
$power = $power + $ppower;
$intel = $intel + $pintel;
$age = 20 + ($pleader + $ppower + $pintel) * 2 + (rand() % 2);
// 아직 남았고 천재등록상태이면 특기 부여
if($genius == 1) {
$specage2 = $age;
$special2 = getSpecial2($connect, $leadership, $power, $intel);
} else {
$specage2 = round((80 - $age)/3) + $age;
$special2 = 0;
}
//내특
$specage = round((80 - $age)/12) + $age;
$special = 0;
if($admin[scenario] > 0) {
$specage2 = $age + 3;
$specage = $age + 3;
}
$turntime = getRandTurn($admin[turnterm]);
$lastconnect = date('Y-m-d H:i:s');
if($lastconnect >= $turntime) {
$turntime = addTurn($turntime, $admin[turnterm]);
}
//특회 전콘
if($admin[img] >= 1 && $member[grade] >= 1 && $member[picture] != "" && $pic == 1) {
$face = $member[picture];
$imgsvr = $member[imgsvr];
} else {
$face = "default.jpg";
$imgsvr = 0;
}
//특회
$userlevel = $member[grade];
//성격 랜덤시
if($character == 11) $character = rand()%10;
//상성 랜덤
$npcmatch = rand()%150 + 1;
########## 회원정보 테이블에 입력값을 등록한다. ##########
$query = "
insert into general (
user_id, password, name, picture, imgsvr, nation, city, troop, npcmatch,
leadership, power, intel, experience, dedication, gold, rice, crew, train, atmos,
userlevel, level, turntime, killturn, lastconnect, makelimit, age, startage, personal, specage, special, specage2, special2
) values (
'$id', '$pwTemp', '$name', '$face', '$imgsvr', '0', '$city', '0', '$npcmatch',
'$leadership', '$power', '$intel', '0', '0', '1000', '1000', '0', '0', '0',
'$userlevel', '0', '$turntime', '6', '$lastconnect', '0', '$age', '$age', '$character', '$specage', '$special', '$specage2', '$special2'
)";
$result = MYDB_query($query,$connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "select no,name,history from general where user_id='$id'";
$result = MYDB_query($query, $connect) or Error("join_post ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
if($me[name] == "") {
$r = rand() % 999 + 1;
$me[name] = '장수-'.$r;
$query = "update general set name='$me[name]' where user_id='$id'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$cityname = getCity($connect, $city, "name");
if($genius == 1) {
$log[0] = "<C>●</>{$admin[month]}월:<G><b>$cityname[name]</b></>에서 <Y>$me[name]</>(이)라는 기재가 천하에 이름을 알립니다.";
$log[1] = "<C>●</>{$admin[month]}월:<C>".getGeneralSpecialWarName($special2)."</> 특기를 가진 <C>천재</>의 등장으로 온 천하가 떠들썩합니다.";
$history[0] = "<C>●</>$admin[year]년 $admin[month]월:<L><b>【천재】</b></><G><b>$cityname[name]</b></>에 천재가 등장했습니다.";
pushHistory($connect, $history);
} else {
$log[0] = "<C>●</>{$admin[month]}월:<G><b>$cityname[name]</b></>에서 <Y>$me[name]</>(이)라는 호걸이 천하에 이름을 알립니다.";
}
$me = addHistory($connect, $me, "<C>●</>$admin[year]년 $admin[month]월:<Y>$me[name]</>, <G>$cityname[name]</>에서 큰 뜻을 품다.");
$mylog[count($mylog)] = "<C>●</>삼국지 모의전투 PHP의 세계에 오신 것을 환영합니다 ^o^";
$mylog[count($mylog)] = "<C>●</>처음 하시는 경우에는 <D>도움말</>을 참고하시고,";
$mylog[count($mylog)] = "<C>●</>문의사항이 있으시면 게시판에 글을 남겨주시면 되겠네요~";
$mylog[count($mylog)] = "<C>●</>부디 즐거운 삼모전 되시길 바랍니다 ^^";
$mylog[count($mylog)] = "<C>●</>통솔 <C>$pleader</> 무력 <C>$ppower</> 지력 <C>$pintel</> 의 보너스를 받으셨습니다.";
$mylog[count($mylog)] = "<C>●</>연령은 <C>$age</>세로 시작합니다.";
if($genius == 1) {
$mylog[count($mylog)] = "<C>●</>축하합니다! 천재로 태어나 처음부터 <C>".getGeneralSpecialWarName($special2)."</> 특기를 가지게 됩니다!";
$me = addHistory($connect, $me, "<C>●</>$admin[year]년 $admin[month]월:<C>".getGeneralSpecialWarName($special2)."</> 특기를 가진 천재로 탄생.");
}
pushGenLog($me, $mylog);
pushAllLog($log);
$adminLog[0] = "가입 : {$name} // {$me[name]} // {$id} // ".getenv("REMOTE_ADDR");
pushAdminLog($connect, $adminLog);
MYDB_close($connect);
echo("<script>
window.alert('정상적으로 회원 가입되었습니다. ID : $id \n튜토리얼을 꼭 읽어보세요!');
</script>");
echo("<script>location.replace('index.php');</script>");
}
-2522
View File
@@ -1,2522 +0,0 @@
<?php
namespace sammo;
die();
include "lib.php";
include "func.php";
//로그인 검사
$commandtype = Util::getReq('commandtype', 'int');
$turn = Util::getReq('turn', 'array_int');
if(!$turn || $commandtype === null){
header('location:commandlist.php', true, 303);
die();
}
$session = Session::requireGameLogin()->setReadOnly();
$db = DB::db();
$connect=$db->get();
$count = count($turn);
for($i=0; $i < $count; $i++) {
if($turn[$i] == 100 || $turn[$i] == 99 || $turn[$i] == 98) {
} elseif($turn[$i] >= 0 || $turn[$i] <= 23) {
} else {
unset($turn);
$turn[0] = 100;
break;
}
}
if($turn[0] == 100) {
unset($turn);
for($i=0; $i < 24; $i++) $turn[$i] = $i;
} elseif($turn[0] == 99) {
unset($turn);
for($i=0, $j=0; $i < 24; $i+=2, $j++) $turn[$j] = $i;
} elseif($turn[0] == 98) {
unset($turn);
for($i=1, $j=0; $i < 24; $i+=2, $j++) $turn[$j] = $i;
}
switch($commandtype) {
case 0: command_Single($turn, 0); break; //휴식
case 1: command_Single($turn, 1); break; //농업
case 2: command_Single($turn, 2); break; //상업
case 3: command_Single($turn, 3); break; //기술
case 4: command_Single($turn, 4); break; //선정
case 5: command_Single($turn, 5); break; //수비
case 6: command_Single($turn, 6); break; //성벽
case 7: command_Single($turn, 7); break; //정착 장려
case 8: command_Single($turn, 8); break; //치안 강화
case 9: command_Single($turn, 9); break; //자금 조달
case 11: command_11( $turn, 11, false); break; //징병
case 12: command_11( $turn, 12, true); break; //모병
case 13: command_Single($turn, 13); break; //훈련
case 14: command_Single($turn, 14); break; //사기진작
//case 15: command_Single($turn, 0); break; //전투태세
case 16: command_16( $turn, 16); break; //전쟁
case 17: command_Single($turn, 17); break; //소집해제
case 21: command_21( $turn, 21); break; //이동
case 22: command_22( $turn, 22); break; //등용 //TODO:등용장 재 디자인
case 23: command_23( $turn, 23); break; //포상
case 24: command_24( $turn, 24); break; //몰수
case 25: command_25( $turn, 25); break; //임관
case 26: command_Single($turn, 26); break; //집합
case 27: command_27( $turn, 27); break; //발령
case 28: command_Single($turn, 28); break; //귀환
case 29: command_Single($turn, 29); break; //인재탐색
case 30: command_30( $turn, 30); break; //강행
case 31: command_31($turn, 31); break; //첩보
case 32: command_32($turn, 32); break; //화계
case 33: command_33($turn, 33); break; //탈취
case 34: command_34($turn, 34); break; //파괴
case 35: command_35($turn, 35); break; //선동
case 41: command_Single($turn, 41); break; //단련
case 42: command_Single($turn, 42); break; //견문
case 43: command_43( $turn, 43); break; //증여
case 44: command_44( $turn, 44); break; //헌납
case 45: command_Single($turn, 45); break; //하야
case 46: command_46( $turn, 46); break; //건국
case 47: command_Single($turn, 47); break; //방랑
case 48: command_48( $turn, 48); break; //장비구입
case 49: command_49( $turn, 49); break; //군량매매
case 50: command_Single($turn, 50); break; //요양
case 51: command_51($turn, 51); break; //항복권고
case 52: command_52($turn, 52); break; //원조
case 53: command_53($turn, 53); break; //통합제의
case 54: command_54($turn, 54); break; //선양
case 55: command_Single($turn, 55); break; //거병
case 56: command_Single($turn, 56); break; //해산
case 57: command_Single($turn, 57); break; //모반 시도
case 61: command_61($turn, 61); break; //불가침
case 62: command_62($turn, 62); break; //선포
case 63: command_63($turn, 63); break; //종전
case 64: command_64($turn, 64); break; //파기
case 65: command_65($turn, 65); break; //초토화
case 66: command_66($turn, 66); break; //천도
case 67: command_67($turn, 67); break; //증축
case 68: command_68($turn, 68); break; //감축
case 71: command_Chief($turn, 71); break; //필사즉생
case 72: command_72($turn, 72); break; //백성동원
case 73: command_73($turn, 73); break; //수몰
case 74: command_74($turn, 74); break; //허보
case 75: command_75($turn, 75); break; //피장파장
case 76: command_Chief($turn, 76); break; //의병모집
case 77: command_77($turn, 77); break; //이호경식
case 78: command_78($turn, 78); break; //급습
case 81: command_81($turn, 81); break; //국기변경
case 99: command_99($turn); break; //수뇌부 휴식
default:command_Single($turn, 0); break; //휴식
}
function starter($name, $type=0) {
?>
<!DOCTYPE html>
<html>
<head>
<title><?=$name?></title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=1024" />
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('../d_shared/common_path.js')?>
<?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printJS('d_shared/base_map.js')?>
<?=WebUtil::printJS('js/map.js')?>
<script>
window.serverNick = '<?=DB::prefix()?>';
window.serverID = '<?=UniqueConst::$serverID?>';
$(function(){
var $target = $("form[name=form1] select[name=double]");
console.log($target);
reloadWorldMap({
isDetailMap:false,
clickableAll:true,
neutralView:true,
useCachedMap:true,
selectCallback:function(city){
$target.val(city.id);
return false;
}
});
});
</script>
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
<?=WebUtil::printCSS('../d_shared/common.css')?>
<?=WebUtil::printCSS('css/common.css')?>
<?=WebUtil::printCSS('css/main.css')?>
<?=WebUtil::printCSS('css/map.css')?>
</head>
<body class="img_back">
<table class="tb_layout bg0" style="width:1000px;margin:auto;">
<tr><td class="bg1" align="center"><?=$name?></td></tr>
<tr><td>
<?php
if($type == 1) echo CoreBackButton();
else echo backButton();
}
function ender($type=0) {
if($type == 1) echo CoreBackButton();
else echo backButton();
echo banner();
echo "
</td></tr>
</table>
</body>
</html>
";
}
function command_99($turn) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
$query = "select nation,level from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
if($me['level'] >= 5) {
_setNationCommand($me['nation'], $me['level'], range(0, $turn - 1), 'che_휴식');
}
header('location:b_chiefcenter.php', true, 303);
}
function command_11($turn, $command, bool $is모병 = false) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$userID = Session::getUserID();
$me = $db->queryFirstRow(
'SELECT no,nation,level,personal,special2,level,city,crew,horse,injury,leadership,crewtype,gold
from general where owner=%i',
$userID
);
[$nationLevel, $tech] = $db->queryFirstList('SELECT level,tech FROM nation WHERE nation=%i', $me['nation']);
if(!$nationLevel){
$nationLevel = 0;
}
if(!$tech){
$tech = 0;
}
$lbonus = setLeadershipBonus($me, $nationLevel);
$ownCities = [];
$ownRegions = [];
[$year, $startyear] = $gameStor->getValuesAsArray(['year','startyear']);
$relativeYear = $year - $startyear;
foreach(DB::db()->query('SELECT city, region from city where nation = %i', $me['nation']) as $city){
$ownCities[$city['city']] = 1;
$ownRegions[$city['region']] = 1;
}
$leadership = getGeneralLeadership($me, true, true, true);
$fullLeadershipship = getGeneralLeadership($me, false, true, true);
$abil = getTechAbil($tech);
$armTypes = [];
foreach(GameUnitConst::allType() as $armType => $armName){
$armTypeCrews = [];
foreach(GameUnitConst::byType($armType) as $unit){
$crewObj = new \stdClass;
if(!$unit->isValid($ownCities, $ownRegions, $relativeYear, $tech)){
continue; //TODO: 불가능한 병종도 보여줄 필요가 있음.
}
$crewObj->id = $unit->id;
if($unit->reqTech == 0){
$crewObj->bgcolor = 'green';
}
else{
$crewObj->bgcolor = 'limegreen';
}
$crewObj->baseRice = $unit->rice * getTechCost($tech);
$crewObj->baseCost = CharCost($unit->costWithTech($tech), $me['personal']);
$armType = $unit->armType;
if($me['special2'] == 50 && $armType == GameUnitConst::T_FOOTMAN){
$crewObj->baseCost *= 0.9;
}
else if($me['special2'] == 51 && $armType == GameUnitConst::T_ARCHER){
$crewObj->baseCost *= 0.9;
}
else if($me['special2'] == 52 && $armType == GameUnitConst::T_CAVALRY){
$crewObj->baseCost *= 0.9;
}
else if($me['special2'] == 53 && $armType == GameUnitConst::T_WIZARD){
$crewObj->baseCost *= 0.9;
}
else if($me['special2'] == 54 && $armType == GameUnitConst::T_SIEGE){
$crewObj->baseCost *= 0.9;
}
else if($me['special2'] == 72) {
$crewObj->baseCost *= 0.5;
}
$crewObj->name = $unit->name;
$crewObj->attack = $unit->attack + $abil;
$crewObj->defence = $unit->defence + $abil;
$crewObj->speed = $unit->speed;
$crewObj->avoid = $unit->avoid;
if($gameStor->show_img_level < 2) {
$crewObj->img = ServConfig::$sharedIconPath."/default.jpg";
}
else{
$crewObj->img = ServConfig::$gameImagePath."/weapon".$unit->id.".png";
}
$crewObj->baseRiceShort = round($crewObj->baseRice, 1);
$crewObj->baseCostShort = round($crewObj->baseCost, 1);
$crewObj->info = join('<br>', $unit->info);
$armTypeCrews[] = $crewObj;
}
$armTypes[] = [$armName, $armTypeCrews];
}
if($is모병){
$commandName = '모병';
starter("모병");
}
else{
$commandName = '징병';
starter("징병");
}
$templates = new \League\Plates\Engine('templates');
echo $templates->render('recruitCrewForm', [
'command'=>$command,
'commandName'=>$commandName,
'techLevelText'=>getTechCall($tech),
'tech'=>$tech,
'leadership'=>$leadership,
'fullLeadership'=>$fullLeadership,
'crewType'=>GameUnitConst::byId($me['crewtype'])->id,
'crewTypeName'=>GameUnitConst::byId($me['crewtype'])->name,
'crew'=>$me['crew'],
'gold'=>$me['gold'],
'turn'=>$turn,
'armTypes'=>$armTypes,
]);
ender();
}
function command_15($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("재편성");
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$me = $general['no'];
$query = "select no,name from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo "
자신의 병사를 다른 장수에게 보냅니다.
<form name=form1 action=c_double.php method=post>
<select name=third size=1>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if($me != $general['no']) {
echo "
<option value={$general['no']}>{$general['name']}</option>";
}
}
echo "
</select>
<input type=text name=double size=3 maxlength=3 style=text-align:right;color:white;background-color:black>00명
<input type=submit value=재편성>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_16($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("출병");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시로 침공을 합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=출병>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 1);
ender();
}
function command_21($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("이동");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시로 이동합니다.<br>
인접 도시로만 이동이 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=이동>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 1);
ender();
}
function command_22($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("등용");
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
재야나 타국의 장수를 등용합니다.<br>
서신은 개인 메세지로 전달됩니다.<br>
등용할 장수를 목록에서 선택하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
$query = "select no,name,npc from general where nation='0' and npc<2 order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
if($gencount != 0) echo " <option>【 재야 】</option>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
foreach(getAllNationStaticInfo() as $nation){
echo "<option style='color:{$nation['color']}'>【 {$nation['name']} 】</option>";
$query = "select no,name,npc from general where nation='{$nation['nation']}' and level!='12' and npc<2 order by npc,binary(name)";
$genresult = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($genresult);
for($j=0; $j < $gencount; $j++) {
$general = MYDB_fetch_array($genresult);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
}
echo "
</select>
<input type=submit value=등용>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_23($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("포상", 1);
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select no,name,level,npc from general where nation='{$general['nation']}' and no!='{$general['no']}' order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo "
국고로 장수에게 자금이나 군량을 지급합니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=color:white;background-color:black>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
if($general['level'] >= 5) {
echo "
<option value={$general['no']} {$style}>*{$general['name']}*</option>";
} else {
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
}
echo "
</select>
<select name=fourth size=1 style=color:white;background-color:black>
<option value=1>금</option>
<option value=2>쌀</option>
</select>
<select name=double size=1 style=text-align:right;color:white;background-color:black>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type=submit value=포상>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_24($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("몰수", 1);
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select no,name,level,npc from general where nation='{$general['nation']}' and no!='{$general['no']}' order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo "
장수의 자금이나 군량을 몰수합니다.<br>
몰수한것은 국가재산으로 귀속됩니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=text-align:right;color:white;background-color:black>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
if($general['level'] >= 5) {
echo "
<option value={$general['no']} {$style}>*{$general['name']}*</option>";
} else {
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
}
echo "
</select>
<select name=fourth size=1 style=text-align:right;color:white;background-color:black>
<option value=1>금</option>
<option value=2>쌀</option>
</select>
<select name=double size=1 style=text-align:right;color:white;background-color:black>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type=submit value=몰수>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_25($turn, $command) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$userID = Session::getUserID();
$gameStor->cacheValues(['year','startyear','month','join_mode']);
$onlyRandom = $gameStor->join_mode == 'onlyRandom';
starter("임관");
$query = "select no,nations from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("command_27 ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$joinedNations = Json::decode($me['nations']);
$query = "select nation,name,color,scout,scoutmsg,strategic_cmd_limit,gennum from nation order by gennum";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg,gennum FROM nation ORDER BY rand()');
foreach($nationList as &$nation){
if ($onlyRandom && TimeUtil::IsRangeMonth($gameStor->init_year, $gameStor->init_month, 1, $gameStor->year, $gameStor->month) && $nation['gennum'] >= GameConst::$initialNationGenLimitForRandInit) {
$nation['availableJoin'] = false;
}
else if($gameStor->year < $gameStor->startyear+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit){
$nation['availableJoin'] = false;
}
else if($nation['scout'] == 1) {
$nation['availableJoin'] = false;
}
else{
$nation['availableJoin'] = true;
}
}
unset($nation);
?>
국가에 임관합니다.<br>
이미 임관/등용되었던 국가는 다시 임관할 수 없습니다.<br>
바로 군주의 위치로 이동합니다.<br>
<?php if($onlyRandom): ?>
랜덤 임관 대상 국가는 아래에서 확인할 수 있습니다.<br>
<?php else: ?>
임관할 국가를 목록에서 선택하세요.<br>
<?php endif; ?>
!!!는 방랑군을 포함한 랜덤임관입니다. 유니크를 기대하신다면!<br>
???는 방랑군을 제외한 랜덤임관입니다. 유니크 혜택은 없습니다.<br>
임관 금지이거나 초기 제한중인 국가는 붉은색 배경으로 표시됩니다.<br>
870px x 200px를 넘어서는 내용은 표시되지 않습니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>
<option value=99 style=color:white;background-color:black;>!!!</option>
<option value=98 style=color:white;background-color:black;>???</option>
<?php foreach($nationList as $nation): ?>
<?php if(!$nation['availableJoin']): ?>
<option value='<?=$nation['nation']?>' style='color:<?=$nation['color']?>;background-color:red;' <?=$onlyRandom?'disabled':''?>>【 <?=$nation['name']?> 】</option>
<?php else: ?>
<option value='<?=$nation['nation']?>' style='color:<?=$nation['color']?>;' <?=$onlyRandom?'disabled':''?>>【 <?=$nation['name']?> 】</option>
<?php endif; ?>
<?php endforeach; ?>
</select>
<input type=submit value=임관>
<input type=hidden name=command value=<?=$command?>>
<?php foreach(range(0, count($turn) - 1) as $i): ?>
<input type=hidden name=turn[] value=<?=$turn[$i]?>>
<?php endforeach; ?>
</form>
<?php
echo getInvitationList($nationList);
ender();
}
function command_27($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("발령", 1);
$query = "select no,nation,level from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("command_27 ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$query = "select no,name,level,npc from general where nation='{$me['nation']}' and no!='{$me['no']}' order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo getMapHtml();
echo "<br>
선택된 도시로 아국 장수를 발령합니다.<br>
아국 도시로만 발령이 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=text-align:right;color:white;background-color:black>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
if($general['level'] >= 5) {
echo "
<option value={$general['no']} {$style}>*{$general['name']}*</option>";
} else {
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
}
echo "
</select>
=>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=발령>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_30($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("강행");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시로 강행합니다.<br>
최대 3칸내 도시로만 강행이 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=강행>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 3);
ender();
}
function command_31($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("첩보");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 첩보를 실행합니다.<br>
인접도시일 경우 많은 정보를 얻을 수 있습니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=첩보>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
echo "
모든 도시가 가능하지만 많은 정보를 얻을 수 있는<br>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_32($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("화계");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 화계를 실행합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=화계>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_33($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("탈취");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 탈취를 실행합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=탈취>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_34($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("파괴");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 파괴를 실행합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=파괴>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_35($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("선동");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 선동을 실행합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=선동>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_36($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("기습");
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select city,name from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 기습을 실행합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
{$currentcity['name']} =>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=기습>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
printCitiesBasedOnDistance($currentcity['city'], 2);
ender();
}
function command_43($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("증여");
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select no,name,level,npc from general where nation='{$general['nation']}' and no!='{$general['no']}' order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo "
자신의 자금이나 군량을 다른 장수에게 증여합니다.<br>
장수를 선택하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=color:white;background-color:black>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if ($general['npc'] >= 2) { $style = "style=color:cyan;"; }
elseif($general['npc'] == 1) { $style = "style=color:skyblue;"; }
else { $style = ""; }
if($general['level'] >= 9) {
echo "
<option value={$general['no']} {$style}>*{$general['name']}*</option>";
} else {
echo "
<option value={$general['no']} {$style}>{$general['name']}</option>";
}
}
echo "
</select>
<select name=fourth size=1 style=color:white;background-color:black>
<option value=1>금</option>
<option value=2>쌀</option>
</select>
<select name=double size=1 style=text-align:right;color:white;background-color:black>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type=submit value=증여>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_44($turn, $command) {
$db = DB::db();
$connect=$db->get();
starter("헌납");
echo "
자신의 자금이나 군량을 국가 재산으로 헌납합니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=color:white;background-color:black>
<option value=1>금</option>
<option value=2>쌀</option>
</select>
<select name=double size=1 style=text-align:right;color:white;background-color:black>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type=submit value=헌납>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_46($turn, $command) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
starter("건국");
$maxnation = $gameStor->maxnation;
$colorUsed = [];
foreach(GetNationColors() as $color){
$colorUsed[$color] = 0;
}
$nationCount = count(getAllNationStaticInfo());
foreach(getAllNationStaticInfo() as $nation){
if($nation['level'] <= 0){
continue;
}
if(!isset($nationcolor[$nation['color']])){
$nationcolor[$nation['color']] = 1;
}
else{
$nationcolor[$nation['color']]++;
}
}
$colorUsedCnt = 0;
foreach($colorUsed as $color=>$used){
if($used){
continue;
}
$colorUsedCnt += 1;
}
//색깔이 다 쓰였으면 그냥 모두 허용
if($colorUsedCnt === count($colorUsed)){
foreach(array_keys($colorUsed) as $color){
$colorUsed[$color] = 0;
}
}
if($nationCount < $maxnation) {
?>
현재 도시에서 나라를 세웁니다. 중, 소도시에서만 가능합니다.<br>
- 법 가 : <font color=cyan>금수입↑ 치안↑</font> <font color=magenta>인구↓ 민심↓</font><br>
- 유 가 : <font color=cyan>내정↑ 민심↑</font> <font color=magenta>쌀수입↓</font><br>
- 병 가 : <font color=cyan>기술↑ 수성↑</font> <font color=magenta>인구↓ 민심↓</font><br>
- 덕 가 : <font color=cyan>치안↑인구↑ 민심↑</font> <font color=magenta>쌀수입↓ 수성↓</font><br>
- 묵 가 : <font color=cyan>수성↑</font> <font color=magenta>기술↓</font><br>
- 도 가 : <font color=cyan>인구↑</font> <font color=magenta>기술↓ 치안↓</font><br>
- 태 평 도 : <font color=cyan>인구↑ 민심↑</font> <font color=magenta>기술↓ 수성↓</font><br>
- 오 두 미 도 : <font color=cyan>쌀수입↑ 인구↑</font> <font color=magenta>기술↓ 수성↓ 내정↓</font><br>
- 도 적 : <font color=cyan>계략↑</font> <font color=magenta>금수입↓ 치안↓ 민심↓</font><br>
- 불 가 : <font color=cyan>민심↑ 수성↑</font> <font color=magenta>금수입↓</font><br>
- 종 횡 가 : <font color=cyan>전략↑ 수성↑</font> <font color=magenta>금수입↓ 내정↓</font><br>
- 음 양 가 : <font color=cyan>내정↑ 인구↑ </font> <font color=magenta>기술↓ 전략↓</font><br>
- 명 가 : <font color=cyan>기술↑ 인구↑</font> <font color=magenta>쌀수입↓ 수성↓</font><br>
<form name=form1 action=c_double.php method=post>
국명 : <input type=text name=name size=18 maxlength=18 style=text-align:right;color:white;background-color:black>
색깔 : <select name=double size=1>
<?php
foreach(GetNationColors() as $idx=>$color) {
if($colorUsed[$color] > 0){
continue;
}
echo "<option value={$idx} style=background-color:{$color};color:".newColor($color).";>국가명</option>";
}
?>
</select>
성향 : <select name=third size=1>
<?php foreach(GameConst::$avilableNationType as $nationTypeID): ?>
<?php $nationClass = getNationTypeClass($nationTypeID) ?>
<?php endforeach; ?>
<option value='<?=$nationTypeID?>' style=background-color:black;color:white;><?=$nationClass::$name?></option>
</select>
<input type=submit value=건국>
<input type=hidden name=command value=<?=$command?>>
<?php
for($i=0; $i < count($turn); $i++) {
echo "<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "</form>";
} else {
echo "더 이상 건국은 불가능합니다.<br>";
}
ender();
}
function command_48($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("장비 매매");
$query = "select no,city,gold from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("command_48 ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$city = getCity($me['city'], "secu");
$color = [];
for($i=1; $i <= 6; $i++) {
if($city['secu'] >= $i*1000) {
$color[$i] = "white";
} else {
$color[$i] = "red";
}
}
echo "
장비를 구입하거나 매각합니다.<br>
현재 구입 불가능한 것은 <font color=red>붉은색</font>으로 표시됩니다.<br>
현재 도시 치안 : {$city['secu']} &nbsp;&nbsp;&nbsp;현재 자금 : {$me['gold']}<br>
<form name=form1 action=c_double.php method=post>
장비 : <select name=double size=1 style=color:white;background-color:black>
<option value=0 style=color:skyblue>_____무기매각(반값)____</option>
<option value=1 style=color:$color[1]>".getItemName(1)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(1)."</option>
<option value=2 style=color:$color[2]>".getItemName(2)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(2)."</option>
<option value=3 style=color:$color[3]>".getItemName(3)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(3)."</option>
<option value=4 style=color:$color[4]>".getItemName(4)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(4)."</option>
<option value=5 style=color:$color[5]>".getItemName(5)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(5)."</option>
<option value=6 style=color:$color[6]>".getItemName(6)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(6)."</option>
<option value=100 style=color:skyblue>_____서적매각(반값)____</option>
<option value=101 style=color:$color[1]>".getItemName(1)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(1)."</option>
<option value=102 style=color:$color[2]>".getItemName(2)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(2)."</option>
<option value=103 style=color:$color[3]>".getItemName(3)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(3)."</option>
<option value=104 style=color:$color[4]>".getItemName(4)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(4)."</option>
<option value=105 style=color:$color[5]>".getItemName(5)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(5)."</option>
<option value=106 style=color:$color[6]>".getItemName(6)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(6)."</option>
<option value=200 style=color:skyblue>_____명마매각(반값)____</option>
<option value=201 style=color:$color[1]>".getItemName(1)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(1)."</option>
<option value=202 style=color:$color[2]>".getItemName(2)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(2)."</option>
<option value=203 style=color:$color[3]>".getItemName(3)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(3)."</option>
<option value=204 style=color:$color[4]>".getItemName(4)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(4)."</option>
<option value=205 style=color:$color[5]>".getItemName(5)."&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(5)."</option>
<option value=206 style=color:$color[6]>".getItemName(6)."&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(6)."</option>
<option value=300 style=color:skyblue>_____도구매각(반값)____</option>
<option value=301 style=color:$color[1]>".getItemName(1)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(1)."</option>
<option value=302 style=color:$color[2]>".getItemName(2)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(2)."</option>
<option value=303 style=color:$color[3]>".getItemName(3)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(3)."</option>
<option value=304 style=color:$color[4]>".getItemName(4)."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(4)."</option>
<option value=305 style=color:$color[5]>".getItemName(5)."&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(5)."</option>
<option value=306 style=color:$color[6]>".getItemName(6)."&nbsp;&nbsp;&nbsp;&nbsp;가격: ".getItemCost(6)."</option>
</select>
<input type=submit value=거래>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_49($turn, $command) {
$db = DB::db();
$connect=$db->get();
starter("군량매매");
echo "
자신의 군량을 사거나 팝니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=third size=1 style=color:white;background-color:black>
<option value=1>팜</option>
<option value=2>삼</option>
</select>
<select name=double size=1 style=text-align:right;color:white;background-color:black>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type=submit value=거래>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_51($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("항복 권고", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$query = "select nation,power from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$myNation = MYDB_fetch_array($result);
echo "
타국에게 항복을 권고합니다.<br>
서신은 개인 메세지로 전달됩니다.<br>
권고할 국가를 목록에서 선택하세요.<br>
합병이 불가능한 국가는 <font color=red>붉은</font> 배경으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
$query = "select nation,name,power,color from nation where nation!='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=1; $i <= $count; $i++) {
$nation = MYDB_fetch_array($result);
if($myNation['power'] <= $nation['power'] * 3 || !isNeighbor($me['nation'], $nation['nation'])) {
echo "<option style='color:{$nation['color']};background-color:red;' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
} else {
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
}
echo "
</select>
<input type=submit value=항복권고>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
제한 조건<br>
- 인접 국가<br>
- 양국 모두 외교제한 기간 없음<br>
- 제의한 국가가 항복하는 국가보다 국력 3배 초과<br>
";
ender(1);
}
function command_52($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("원조", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$mynation = getNationStaticInfo($me['nation']);
echo "
타국에게 원조합니다.<br>
작위별로 금액 제한이 있습니다.<br>
 호족: 1만<br>
 군벌: 2만<br>
주자사: 3만<br>
 주목: 4만<br>
  공: 5만<br>
  왕: 6만<br>
 황제: 7만<br>
원조할 국가를 목록에서 선택하세요.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
foreach(getAllNationStaticInfo() as $nation) {
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
국고 <select name=third size=1 style=text-align:right;color:white;background-color:black>
<option value=0>0</option>
<option value=1>1000</option>
<option value=2>2000</option>
<option value=3>3000</option>
<option value=4>4000</option>
<option value=5>5000</option>
<option value=6>6000</option>
<option value=7>7000</option>
<option value=8>8000</option>
<option value=9>9000</option>";
for($i=1; $i <= $mynation['level']; $i++) {
echo "<option value={$i}0>{$i}0000</option>";
}
echo "
</select>
병량 <select name=fourth size=1 style=text-align:right;color:white;background-color:black>
<option value=0>0</option>
<option value=1>1000</option>
<option value=2>2000</option>
<option value=3>3000</option>
<option value=4>4000</option>
<option value=5>5000</option>
<option value=6>6000</option>
<option value=7>7000</option>
<option value=8>8000</option>
<option value=9>9000</option>";
for($i=1; $i <= $mynation['level']; $i++) {
echo "<option value={$i}0>{$i}0000</option>";
}
echo "
</select>
<input type=submit value=원조>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_53($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("통합제의", 1);
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("command_53 ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$query = "select avg(power) as power,avg(gennum) as gennum from nation where level>=1";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$avgNation = MYDB_fetch_array($result);
$query = "select std(power) as power,std(gennum) as gennum from nation where level>=1";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$stdNation = MYDB_fetch_array($result);
$query = "select nation,power,gennum from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$myNation = MYDB_fetch_array($result);
echo "
세력이 비슷한 국가에 통합 제의를 합니다. 제의한 국가 위주로 통합됩니다.<br>
서신은 개인 메세지로 전달됩니다.<br>
제의할 국가를 목록에서 선택하세요.<br>
통합이 불가능한 국가는 <font color=red>붉은</font> 배경으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상국 : <select name=double size=1 style=color:white;background-color:black>";
$query = "select nation,name,power,gennum,color from nation where nation!='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$cond1 = (-0.25 * $stdNation['power']) + $avgNation['power'];
$cond2 = (-0.67 * $stdNation['gennum']) + $avgNation['gennum'];
for($i=1; $i <= $count; $i++) {
$nation = MYDB_fetch_array($result);
if(($myNation['power']+$nation['power'])/2 > $cond1 || ($myNation['gennum']+$nation['gennum'])/2 > $cond2 || !isNeighbor($me['nation'], $nation['nation'])) {
echo "<option style='color:{$nation['color']};background-color:red;' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
} else {
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
}
echo "
</select>
통합국명 : <input type=text name=nationname size=18 maxlength=18 style=text-align:right;color:white;background-color:black>
<input type=submit value=통합제의>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
제한 조건<br>
- 인접 국가<br>
- 양국 모두 외교제한 없음<br>
- 두 국가의 국력 평균이 상위 60%(현재 ".round($cond1,2).") 이하.<br>
- 두 국가의 장수수 평균이 상위 75%(현재 ".round($cond2,1).") 이하.<br>
";
ender(1);
}
function command_54($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("선양");
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select no,name,level from general where nation='{$general['nation']}' and no!='{$general['no']}' order by npc,binary(name)";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
echo "
군주의 자리를 다른 장수에게 물려줍니다.<br>
장수를 선택하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
if($general['level'] >= 5) {
echo "
<option value={$general['no']}>*{$general['name']}*</option>";
} else {
echo "
<option value={$general['no']}>{$general['name']}</option>";
}
}
echo "
</select>
<input type=submit value=선양>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_61($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("불가침", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
타국에게 불가침을 제의합니다.<br>
제의할 국가를 목록에서 선택하세요.<br>
배경색은 현재 제의가 불가능한 국가는 <font color=red>붉은색</font>, 현재 불가침중인 국가는 <font color=blue>푸른색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "red"; break;
case 1: $color = "red"; break;
case 2: $color = "black"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
기간 <select name=third size=1 style=text-align:right;color:white;background-color:black>
<option value=1 > 1</option>
<option value=2 > 2</option>
<option value=3 > 3</option>
<option value=4 > 4</option>
<option value=5 > 5</option>
<option value=6 > 6</option>
<option value=7 > 7</option>
<option value=8 > 8</option>
<option value=9 > 9</option>
<option value=10>10</option>
<option value=11>11</option>
<option value=12>12</option>
<option value=13>13</option>
<option value=14>14</option>
<option value=15>15</option>
<option value=16>16</option>
<option value=17>17</option>
<option value=18>18</option>
<option value=19>19</option>
<option value=20>20</option>
</select>
년<br>
<input type=submit value=불가침>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_62($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("선전포고", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
타국에게 선전 포고합니다.<br>
선전 포고할 국가를 목록에서 선택하세요.<br>
고립되지 않은 아국 도시에서 인접한 국가에 선포 가능합니다.<br>
초반제한 해제 2년전부터 선포가 가능합니다. (체섭기준 181년 1월부터 가능)<br>
배경색은 현재 선포가 불가능한 국가는 <font color=red>붉은색</font>, 현재 불가침중(역시 불가)인 국가는 <font color=blue>푸른색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
//합병중 국가는 안됨
$query = "select state from diplomacy where me='{$nation['nation']}' and (state='3' or state='5')";
$tempresult = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$anycount = MYDB_num_rows($tempresult);
if($anycount != 0 && $diplomacy[$nation['nation']] != 7) {
$diplomacy[$nation['nation']] = 3;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "red"; break;
case 1: $color = "red"; break;
case 2: $color = "black"; break;
case 3: $color = "red"; break;
case 4: $color = "black"; break;
case 5: $color = "red"; break;
case 6: $color = "black"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=선전포고>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_63($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("종전", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
전쟁중인 국가에 종전을 제의합니다.<br>
제의할 국가를 목록에서 선택하세요.<br>
배경색은 현재 제의가 불가능한 국가는 <font color=red>붉은색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "black"; break;
case 1: $color = "black"; break;
case 2: $color = "red"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "red"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=종전제의>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_64($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("파기", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
불가침중인 국가에 조약 파기를 제의합니다.<br>
제의할 국가를 목록에서 선택하세요.<br>
배경색은 현재 제의가 불가능한 국가는 <font color=red>붉은색</font>, 현재 불가침중(제의 가능)인 국가는 <font color=blue>푸른색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "red"; break;
case 1: $color = "red"; break;
case 2: $color = "red"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=파기제의>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_65($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("초토화", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시를 초토화 시킵니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=초토화>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_66($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("천도", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시로 천도합니다.<br>
현재 수도에서 인접한 도시만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=천도>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_67($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("증축", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시를 증축합니다.<br>
현재 수도만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=증축>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_68($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("감축", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시를 감축합니다.<br>
현재 수도만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=감축>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_72($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("백성동원", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 백성동원을 발동합니다.<br>
아국 도시만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=백성동원>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_73($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("수몰", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 수몰을 발동합니다.<br>
전쟁중인 상대국 도시만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=수몰>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_74($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("허보", 1);
$query = "select city from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$query = "select name,path from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$currentcity = MYDB_fetch_array($result);
echo getMapHtml();
echo "<br>
선택된 도시에 허보를 발동합니다.<br>
선포, 전쟁중인 상대국 도시만 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<form name=form1 action=c_double.php method=post>
<select name=double size=1 style=color:white;background-color:black>";
echo optionsForCities();
echo "
</select>
<input type=submit value=허보>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender();
}
function command_75($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("피장파장", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
선택된 국가에 피장파장을 발동합니다.<br>
선포, 전쟁중인 상대국에만 가능합니다.<br>
상대 국가를 목록에서 선택하세요.<br>
배경색은 현재 피장파장 불가능 국가는 <font color=red>붉은색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "black"; break;
case 1: $color = "black"; break;
case 2: $color = "red"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=피장파장>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_77($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("이호경식", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
선택된 국가에 이호경식을 발동합니다.<br>
선포, 전쟁중인 상대국에만 가능합니다.<br>
상대 국가를 목록에서 선택하세요.<br>
배경색은 현재 이호경식 불가능 국가는 <font color=red>붉은색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "black"; break;
case 1: $color = "black"; break;
case 2: $color = "red"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=이호경식>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_78($turn, $command) {
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
starter("급습", 1);
$query = "select nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
echo "
선택된 국가에 급습을 발동합니다.<br>
선포, 전쟁중인 상대국에만 가능합니다.<br>
상대 국가를 목록에서 선택하세요.<br>
배경색은 현재 급습 불가능 국가는 <font color=red>붉은색</font>으로 표시됩니다.<br>
<form name=form1 action=c_double.php method=post>
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
$query = "select you,state from diplomacy where me='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$diplomacy = [];
for($i=1; $i <= $count; $i++) {
$dip = MYDB_fetch_array($result);
$diplomacy[$dip['you']] = $dip['state'];
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['nation'] == $me['nation']){
continue;
}
switch($diplomacy[$nation['nation']]) {
case 0: $color = "red"; break;
case 1: $color = "black"; break;
case 2: $color = "red"; break;
case 3: $color = "red"; break;
case 4: $color = "red"; break;
case 5: $color = "red"; break;
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
<input type=submit value=급습>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
function command_81($turn, $command) {
$db = DB::db();
$connect=$db->get();
starter("국기변경", 1);
$colorUsed = [];
foreach(GetNationColors() as $color){
$colorUsed[$color] = 0;
}
foreach(getAllNationStaticInfo() as $nation){
if($nation['level'] <= 0){
continue;
}
$colorUsed[$nation['color']]+=1;
}
$colorUsedCnt = 0;
foreach($colorUsed as $color=>$used){
if($used){
continue;
}
$colorUsedCnt += 1;
}
//색깔이 다 쓰였으면 그냥 모두 허용
if($colorUsedCnt === count($colorUsed)){
foreach(array_keys($colorUsed) as $color){
$colorUsed[$color] = 0;
}
}
echo "
국기를 변경합니다. 단 1회 가능합니다.<br>
<form name=form1 action=c_double.php method=post>
색깔 : <select name=double size=1>";
foreach(GetNationColors() as $idx=>$color) {
if($colorUsed[$color]>0){
continue;
}
echo "<option value={$idx} style=background-color:{$color};color:".newColor($color).";>국가명</option>";
}
echo "
</select>
<input type=submit value=국기변경>
<input type=hidden name=command value=$command>";
for($i=0; $i < count($turn); $i++) {
echo "
<input type=hidden name=turn[] value=$turn[$i]>";
}
echo "
</form>
";
ender(1);
}
+1 -1
View File
@@ -619,7 +619,7 @@ class General implements iAction{
'leadership', 'leadership2', 'strength', 'strength2', 'intel', 'intel2', 'weapon', 'book', 'horse', 'item',
'experience', 'dedication', 'level', 'gold', 'rice', 'crew', 'crewtype', 'train', 'atmos', 'turntime',
'makelimit', 'killturn', 'block', 'dedlevel', 'explevel', 'age', 'startage', 'belong',
'personal', 'special', 'special2', 'mode', 'npc', 'npc_org', 'deadyear', 'npcmsg',
'personal', 'special', 'special2', 'mode', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg',
'dex0', 'dex10', 'dex20', 'dex30', 'dex40',
'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew', 'recwar', 'last_turn', 'myset'
];