Compare commits

..
29 Commits
Author SHA1 Message Date
Hide_D aafe6d8863 천통시 저장되는 데이터 변경 2018-06-27 03:43:01 +09:00
Hide_D 47005483cd 버그 수정 2018-06-27 03:05:39 +09:00
Hide_D 378075955a 서버 오픈시 천통국 체크가 이상한 버그 수정 2018-06-27 03:04:54 +09:00
Hide_D 2059797904 사망, 천통시 장수를 ng_old_generals에 보관 2018-06-27 02:53:58 +09:00
Hide_D 8c711242a9 왕조 일람에 연감을 볼 수 있도록 통합 2018-06-27 02:12:59 +09:00
Hide_D 481894c89b 모든 국가 멸망 케이스에 ng_old_nations 백업 추가 2018-06-27 01:55:28 +09:00
Hide_D ba53275322 천통시 깃수 자동 표기 2018-06-27 01:49:46 +09:00
Hide_D cfe2b4c1bd 사소한 코드 수정 2018-06-27 01:34:11 +09:00
Hide_D 60e83f8324 오타 수정 2018-06-27 01:26:02 +09:00
Hide_D ceac040d82 명전에 0 이하는 안받도록 변경 2018-06-27 01:25:50 +09:00
Hide_D 89d400c81a 연감 월 표기 버그 수정 2018-06-27 01:22:16 +09:00
Hide_D 4cf7bca399 왕조 일람에서 서버 정보와 국가 정보를 보관하도록 변경 2018-06-27 01:14:34 +09:00
Hide_D 761441622e 왕조일람 '전체보기' 기능 살림 2018-06-26 23:05:04 +09:00
Hide_D 1b814abf0b 천통 시 왕조 일람용 테이블에 server_id 기록. 연감에 server_id로 이전 연감 조회기능 추가 2018-06-26 23:01:43 +09:00
Hide_D 62a2147e33 천통국 정상 추가 2018-06-26 22:45:47 +09:00
Hide_D 246dff9c87 명장일람 버그? 2018-06-26 16:27:51 +09:00
Hide_D 50494beb27 명장 일람 보정 시도 2018-06-26 16:21:47 +09:00
Hide_D ce3b3ebfd8 명장 일람, 설전 승률 % 표기 오류 2018-06-26 16:18:58 +09:00
Hide_D 213090c32e 오타 수정 2018-06-26 09:45:15 +09:00
Hide_D adb8668197 크롬과 파이어폭스에 최적화 2018-06-26 09:44:26 +09:00
Hide_D 0023677003 임관 권유문 길이 제한 2018-06-26 04:13:41 +09:00
Hide_D 0b19a37ad4 초반 3년 수뇌 임명 방식 변경 2018-06-26 03:52:17 +09:00
Hide_D 9f34ae5d28 천통시 재야 장수도 저장 2018-06-26 03:33:56 +09:00
Hide_D 6f07b5cf08 ng_games에 시나리오명 남도록 수정 2018-06-26 03:20:57 +09:00
Hide_D 0f39431157 chmod 재설정 2018-06-26 03:19:47 +09:00
Hide_D bc1a470e64 디렉토리 권한 문제 해결 2018-06-26 03:15:38 +09:00
Hide_D 09e24f5684 ng_games 누락분 추가 2018-06-26 03:10:50 +09:00
Hide_D 2f27ea4c8a schema 값 꼬이는 문제 해결 2018-06-26 03:06:34 +09:00
Hide_D d09aba70b7 천통시에도 ng_old_nations에 데이터가 저장되도록 변경 2018-06-26 03:00:02 +09:00
14 changed files with 677 additions and 465 deletions
+3 -3
View File
@@ -78,7 +78,7 @@ $types = [
["전 력 전 승 률", "percent", function($v){$v['value'] = $v['ttw']/max(1, $v['ttw']+$v['ttd']+$v['ttl']); return $v; }],
["통 솔 전 승 률", "percent", function($v){$v['value'] = $v['tlw']/max(1, $v['tlw']+$v['tld']+$v['tll']); return $v; }],
["일 기 토 승 률", "percent", function($v){$v['value'] = $v['tpw']/max(1, $v['tpw']+$v['tpd']+$v['tpl']); return $v; }],
["설 전 승 률", "percent", function($v){$v['value'] = $v['ttw']/max(1, $v['tiw']+$v['tid']+$v['til']); return $v; }],
["설 전 승 률", "percent", function($v){$v['value'] = $v['tiw']/max(1, $v['tiw']+$v['tid']+$v['til']); return $v; }],
["베 팅 투 자 액", "int", function($v){$v['value'] = $v['betgold']; return $v; }],
["베 팅 당 첨", "int", function($v){$v['value'] = $v['betwin']; return $v; }],
["베 팅 수 익 금", "int", function($v){$v['value'] = $v['betwingold']; return $v; }],
@@ -127,12 +127,12 @@ foreach($types as $idx=>[$typeName, $typeValue, $typeFunc]){
usort($typeGenerals, function($lhs, $rhs){
//내림차순
return -($lhs['value'] - $rhs['value']);
return -($lhs['value'] <=> $rhs['value']);
});
echo $templates->render('hallOfFrame', [
'typeName'=>$typeName,
'generals'=>array_slice($typeGenerals, 0, 10, true)
'generals'=>array_slice($typeGenerals, 0, 10)
]);
}
?>
+148 -133
View File
@@ -11,7 +11,7 @@ extractMissingPostToGlobals();
$db = DB::db();
$connect=$db->get();
increaseRefresh("왕조일람", 2);
increaseRefresh("왕조일람", 1);
?>
<!DOCTYPE html>
<html>
@@ -41,166 +41,181 @@ if ($select == 0) {
for ($i=0; $i < $empcount; $i++) {
$emperior = MYDB_fetch_array($result);
echo "
<form action=a_emperior.php method=post>
?>
<table align=center width=1000 class='tb_layout bg0'>
<tr>
<td bgcolor=skyblue align=center colspan=8>
<font size=5>{$emperior['phase']}</font>
<form action=a_emperior.php method=get>
<font size=5><?=$emperior['phase']?></font>
<input type=submit value='자세히'>
<input type=hidden name=select value='{$emperior['no']}'>
<input type=hidden name=select value='<?=$emperior['no']?>'>
<?php if($emperior['server_id']): ?>
<a href="a_history.php?server_id=<?=$emperior['server_id']?>"><button type="button">역사 보기</button></a>
<?php endif ?>
</form>
</td>
</tr>
<tr>
<td align=center style=color:".newColor($emperior['color'])."; bgcolor={$emperior['color']} colspan=8>
<font size=5>{$emperior['name']} ({$emperior['year']}年 {$emperior['month']}月)</font>
<td align=center style=color:".newColor($emperior['color'])."; bgcolor=<?=$emperior['color']?> colspan=8>
<font size=5><?=$emperior['name']?> (<?=$emperior['year']?>年 <?=$emperior['month']?>月)</font>
</td>
</tr>
<tr>
<td id=bg1 align=center width=80>국 력</td>
<td align=center width=170>{$emperior['power']}</td>
<td align=center width=170><?=$emperior['power']?></td>
<td id=bg1 align=center width=80>장 수</td>
<td align=center width=170>{$emperior['gennum']}</td>
<td align=center width=170><?=$emperior['gennum']?></td>
<td id=bg1 align=center width=80>속 령</td>
<td align=center width=170>{$emperior['citynum']}</td>
<td align=center width=170><?=$emperior['citynum']?></td>
<td id=bg1 align=center width=80>성 향</td>
<td align=center width=170>{$emperior['type']}</td>
<td align=center width=170><?=$emperior['type']?></td>
</tr>
<tr>
<td id=bg1 align=center>황 제</td>
<td align=center>{$emperior['l12name']}</td>
<td align=center><?=$emperior['l12name']?></td>
<td id=bg1 align=center>승 상</td>
<td align=center>{$emperior['l11name']}</td>
<td align=center><?=$emperior['l11name']?></td>
<td id=bg1 align=center>위 장 군</td>
<td align=center>{$emperior['l10name']}</td>
<td align=center><?=$emperior['l10name']?></td>
<td id=bg1 align=center>사 공</td>
<td align=center>{$emperior['l9name']}</td>
<td align=center><?=$emperior['l9name']?></td>
</tr>
</table>
</form>";
<?php
}
} else {
$query = "select * from emperior where no='$select'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$emperior = MYDB_fetch_array($result);
echo "
<table align=center width=1000 class='tb_layout bg0'>
<tr>
<td bgcolor=skyblue align=center colspan=6>
<font size=5>{$emperior['phase']}</font>
<input type=submit value='전체보기'>
<input type=hidden name=select value='0'>
</td>
</tr>
<tr>
<td id=bg1 width=98 align=center>국 가 수<br>(최종 / 최대)</td>
<td align=center width=398 colspan=2>{$emperior['nation_count']}</td>
<td id=bg1 width=98 align=center>장 수 수<br>(최종 / 최대)</td>
<td align=center width=398 colspan=2>{$emperior['gen_count']}</td>
</tr>
<tr>
<td id=bg1 align=center>등 장 국 가</td>
<td colspan=5>{$emperior['nation_name']}</td>
</tr>
<tr>
<td id=bg1 align=center>국가별 성향</td>
<td colspan=5>{$emperior['nation_hist']}</td>
</tr>
<tr>
<td id=bg1 align=center>장 수 성 격</td>
<td colspan=5>{$emperior['personal_hist']}</td>
</tr>
<tr>
<td id=bg1 align=center>장 수 특 기</td>
<td colspan=5>{$emperior['special_hist']}</td>
</tr>
<tr>
<td align=center style=color:".newColor($emperior['color'])."; bgcolor={$emperior['color']} colspan=6>
<font size=5>{$emperior['name']} ({$emperior['year']}年 {$emperior['month']}月)</font>
</td>
</tr>
<tr>
<td id=bg1 width=98 align=center>국 력</td>
<td align=center width=398 colspan=2>{$emperior['power']}</td>
<td id=bg1 width=98 align=center>성 향</td>
<td align=center width=398 colspan=2>{$emperior['type']}</td>
</tr>
<tr>
<td id=bg1 width=98 align=center>장 수</td>
<td align=center width=398 colspan=2>{$emperior['gennum']}</td>
<td id=bg1 width=98 align=center>속 령</td>
<td align=center width=398 colspan=2>{$emperior['citynum']}</td>
</tr>
<tr>
<td id=bg1 align=center>총 인 구</td>
<td align=center colspan=2>{$emperior['pop']}</td>
<td id=bg1 align=center>인 구 율</td>
<td align=center colspan=2>{$emperior['poprate']}</td>
</tr>
<tr>
<td id=bg1 align=center>국 고</td>
<td align=center colspan=2>{$emperior['gold']}</td>
<td id=bg1 align=center>병 량</td>
<td align=center colspan=2>{$emperior['rice']}</td>
</tr>
<tr>
<td id=bg1 align=center>황 제</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l12name']}</td>
<td id=bg1 align=center>승 상</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l11name']}</td>
</tr>
<tr>
<td id=bg1 align=center>위 장 군</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l10name']}</td>
<td id=bg1 align=center>사 공</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l9name']}</td>
</tr>
<tr>
<td id=bg1 align=center>표 기 장 군</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l8name']}</td>
<td id=bg1 align=center>태 위</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l7name']}</td>
</tr>
<tr>
<td id=bg1 align=center>거 기 장 군</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l6name']}</td>
<td id=bg1 align=center>사 도</td>
<td width=64>&nbsp;</td>
<td width=332>{$emperior['l5name']}</td>
</tr>
<tr>
<td id=bg1 align=center>오 호 장 군</td>
<td colspan=5>{$emperior['tiger']}</td>
</tr>
<tr>
<td id=bg1 align=center>건 안 칠 자</td>
<td colspan=5>{$emperior['eagle']}</td>
</tr>
<tr>
<td id=bg1 align=center>장 수 들<br>(공헌도 순서)</td>
<td colspan=5>{$emperior['gen']}</td>
</tr>
<tr>
<td id=bg1 align=center>역 사 기 록</td>
<td colspan=5>".ConvertLog($emperior['history'], 1)."</td>
</tr>
</table>
";
}
?>
<table align=center width=1000 class='tb_layout bg0'>
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
</body>
</html>
<?php
die();
}
$emperior = $db->queryFirstRow('SELECT * FROM emperior WHERE `no`=%i',$select);
?>
<table align=center width=1000 class='tb_layout bg0'>
<tr>
<td bgcolor=skyblue align=center colspan=6>
<form action=a_emperior.php method=get>
<font size=5><?=$emperior['phase']?></font>
<input type=submit value='전체보기'>
</form>
</td>
</tr>
<tr>
<td id=bg1 width=98 align=center>국 가 수<br>(최종 / 최대)</td>
<td align=center width=398 colspan=2><?=$emperior['nation_count']?></td>
<td id=bg1 width=98 align=center>장 수 수<br>(최종 / 최대)</td>
<td align=center width=398 colspan=2><?=$emperior['gen_count']?></td>
</tr>
<tr>
<td id=bg1 align=center>등 장 국 가</td>
<td colspan=5><?=$emperior['nation_name']?></td>
</tr>
<tr>
<td id=bg1 align=center>국가별 성향</td>
<td colspan=5><?=$emperior['nation_hist']?></td>
</tr>
<tr>
<td id=bg1 align=center>장 수 성 격</td>
<td colspan=5><?=$emperior['personal_hist']?></td>
</tr>
<tr>
<td id=bg1 align=center>장 수 특 기</td>
<td colspan=5><?=$emperior['special_hist']?></td>
</tr>
<tr>
<td align=center style=color:<?=newColor($emperior['color'])?>; bgcolor=<?=$emperior['color']?> colspan=6>
<font size=5><?=$emperior['name']?> (<?=$emperior['year']?>年 <?=$emperior['month']?>月)</font>
</td>
</tr>
<tr>
<td id=bg1 width=98 align=center>국 력</td>
<td align=center width=398 colspan=2><?=$emperior['power']?></td>
<td id=bg1 width=98 align=center>성 향</td>
<td align=center width=398 colspan=2><?=$emperior['type']?></td>
</tr>
<tr>
<td id=bg1 width=98 align=center>장 수</td>
<td align=center width=398 colspan=2><?=$emperior['gennum']?></td>
<td id=bg1 width=98 align=center>속 령</td>
<td align=center width=398 colspan=2><?=$emperior['citynum']?></td>
</tr>
<tr>
<td id=bg1 align=center>총 인 구</td>
<td align=center colspan=2><?=$emperior['pop']?></td>
<td id=bg1 align=center>인 구 율</td>
<td align=center colspan=2><?=$emperior['poprate']?></td>
</tr>
<tr>
<td id=bg1 align=center>국 고</td>
<td align=center colspan=2><?=$emperior['gold']?></td>
<td id=bg1 align=center>병 량</td>
<td align=center colspan=2><?=$emperior['rice']?></td>
</tr>
<tr>
<td id=bg1 align=center>황 제</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l12name']?></td>
<td id=bg1 align=center>승 상</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l11name']?></td>
</tr>
<tr>
<td id=bg1 align=center>위 장 군</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l10name']?></td>
<td id=bg1 align=center>사 공</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l9name']?></td>
</tr>
<tr>
<td id=bg1 align=center>표 기 장 군</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l8name']?></td>
<td id=bg1 align=center>태 위</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l7name']?></td>
</tr>
<tr>
<td id=bg1 align=center>거 기 장 군</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l6name']?></td>
<td id=bg1 align=center>사 도</td>
<td width=64>&nbsp;</td>
<td width=332><?=$emperior['l5name']?></td>
</tr>
<tr>
<td id=bg1 align=center>오 호 장 군</td>
<td colspan=5><?=$emperior['tiger']?></td>
</tr>
<tr>
<td id=bg1 align=center>건 안 칠 자</td>
<td colspan=5><?=$emperior['eagle']?></td>
</tr>
<tr>
<td id=bg1 align=center>장 수 들<br>(공헌도 순서)</td>
<td colspan=5><?=$emperior['gen']?></td>
</tr>
<tr>
<td id=bg1 align=center>역 사 기 록</td>
<td colspan=5><?=ConvertLog($emperior['history'], 1)?></td>
</tr>
</table>
<table align=center width=1000 class='tb_layout bg0'>
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
</body>
</html>
+20 -7
View File
@@ -5,6 +5,7 @@ include "lib.php";
include "func.php";
$btn = Util::getReq('btn');
$yearmonth = Util::getReq('yearmonth', 'int');
$serverID = Util::getReq('server_id', 'string', null);
extractMissingPostToGlobals();
@@ -16,7 +17,13 @@ $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
increaseRefresh("연감", 2);
if(!$serverID){
$serverID = UniqueConst::$serverID;
}
if($serverID === UniqueConst::$serverID){
increaseRefresh("연감", 1);
}
$admin = $gameStor->getValues(['startyear','year','month']);
@@ -30,14 +37,20 @@ if ($con >= 2) {
exit();
}
[$s_year, $s_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month ASC LIMIT 1', UniqueConst::$serverID);
[$s_year, $s_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month ASC LIMIT 1', $serverID);
$s = $s_year * 12 + $s_month;
[$e_year, $e_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year DESC, month DESC LIMIT 1', UniqueConst::$serverID);
[$e_year, $e_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year DESC, month DESC LIMIT 1', $serverID);
$e = $e_year * 12 + $e_month;
//FIXME: $yearmonth가 올바르지 않을 경우에 처리가 필요.
if (!$yearmonth) {
if($serverID !== UniqueConst::$serverID && !$yearmonth){
$year = $s_year;
$month = $s_month;
}
else if (!$yearmonth) {
$year = $admin['year'];
$month = $admin['month'] - 1;
} else {
@@ -94,7 +107,7 @@ if ($month <= 0) {
<input type=submit name=btn value="◀◀ 이전달">
<select name=yearmonth size=1>
<?php
$dates = $db->queryAllLists('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month DESC', UniqueConst::$serverID);
$dates = $db->queryAllLists('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month ASC', $serverID);
foreach($dates as [$hYear, $hMonth]){
$value = "".$hYear.StringUtil::padStringAlignRight($hMonth, 2, "0");
if ($hYear == $year && $hMonth == $month) {
@@ -106,7 +119,7 @@ foreach($dates as [$hYear, $hMonth]){
}
}
$history = $db->queryFirstRow('SELECT log,genlog,nation,power,gen,city FROM history WHERE server_id = %s AND year = %i AND month = %i', UniqueConst::$serverID, $year, $month);
$history = $db->queryFirstRow('SELECT log,genlog,nation,power,gen,city FROM history WHERE server_id = %s AND year = %i AND month = %i', $serverID, $year, $month);
?>
</select>
<input type=submit name=btn value='조회하기'>
@@ -144,7 +157,7 @@ $history = $db->queryFirstRow('SELECT log,genlog,nation,power,gen,city FROM hist
</table>
<script>
reloadWorldMap({
targetJson:'j_map_history.php?year=<?=$year?>&month=<?=$month?>',
targetJson:'j_map_history.php?year=<?=$year?>&month=<?=$month?>&server_id=<?=$serverID?>',
showMe:false,
neutralView:true
});
+18
View File
@@ -1917,6 +1917,9 @@ function updateTurntime($no) {
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name2']}</>{$josaYi} <Y>{$general['name']}</>의 육체에서 <S>유체이탈</>합니다!";
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
} else {
storeOldGeneral($general['no'], $admin['year'], $admin['month']);
// 군주였으면 유지 이음
if($general['level'] == 12) {
nextRuler($general);
@@ -2120,6 +2123,10 @@ function CheckHall($no) {
//수익률인데 1000미만시 스킵
if($typeName === 'betrate' && $general['betgold'] < 1000) { continue; }
if($general[$typeName]<=0){
continue;
}
$aux = [
'name'=>$general['name'],
'nationName'=>$nation['name'],
@@ -2439,6 +2446,10 @@ function deleteNation($general) {
$josaUn = JosaUtil::pick($nation['name'], '은');
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<R><b>【멸망】</b></><D><b>{$nation['name']}</b></>{$josaUn} <R>멸망</>했습니다.";
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $general['nation']);
$oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $general['nation']);
$oldNation['generals'] = $oldNationGenerals;
// 전 장수 재야로 // 전 장수 소속 무소속으로
$query = "update general set belong=0,troop=0,level=0,nation=0,makelimit=12 where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -2449,6 +2460,13 @@ function deleteNation($general) {
$query = "delete from troop where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 국가 삭제
$db->insert('ng_old_nations', [
'server_id'=>UniqueConst::$serverID,
'nation'=>$general['nation'],
'data'=>Json::encode($oldNation)
]);
$query = "delete from nation where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 외교 삭제
+4 -1
View File
@@ -791,7 +791,10 @@ function getItemCost($weap) : int {
function ConvertLog(string $str, $type=1) : string {
function ConvertLog(?string $str, $type=1) : string {
if(!$str){
return '';
}
//TODO: 이 함수는 없애야 한다. CSS로 대신하자
if($type > 0) {
$str = str_replace("<1>", "<font size=1>", $str);
+373 -250
View File
@@ -685,10 +685,22 @@ function checkMerge() {
if($newGenCount < GameConst::$initialNationGenLimit) { $newGenCount = GameConst::$initialNationGenLimit; }
$newTotalTech = $younation['totaltech'] + $mynation['totaltech'];
$newTech = Util::round($newTotalTech / $newGenCount);
// 국가 백업
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $me['nation']);
$oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $me['nation']);
$oldNation['generals'] = $oldNationGenerals;
// 자금 통합, 외교제한 5년, 기술유지
$query = "update nation set name='{$you['makenation']}',gold=gold+'{$mynation['gold']}',rice=rice+'{$mynation['rice']}',surlimit='24',totaltech='$newTotalTech',tech='$newTech',gennum='{$newGenCount}' where nation='{$younation['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//국가 삭제
$db->insert('ng_old_nations', [
'server_id'=>UniqueConst::$serverID,
'nation'=>$me['nation'],
'data'=>Json::encode($oldNation)
]);
$query = "delete from nation where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 아국 모든 도시들 상대국 소속으로
@@ -804,6 +816,11 @@ function checkSurrender() {
$history[] = "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>【혼란】</b></>통합에 반대하는 세력들로 인해 <D><b>{$younation['name']}</b></>에 혼란이 일고 있습니다.";
pushNationHistory($younation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$mynation['name']}</b></>{$josaWa} 합병");
// 국가 백업
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $me['nation']);
$oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $me['nation']);
$oldNation['generals'] = $oldNationGenerals;
$newGenCount = $gencount + $gencount2;
if($newGenCount < GameConst::$initialNationGenLimit) { $newGenCount = GameConst::$initialNationGenLimit; }
$newTotalTech = $younation['totaltech'] + $mynation['totaltech'];
@@ -818,6 +835,13 @@ function checkSurrender() {
$query = "update city set pop=pop*0.95,agri=agri*0.95,comm=comm*0.95,secu=secu*0.95,rate=rate*0.95,def=def*0.95,wall=wall*0.95 where nation='{$you['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//국가 삭제
$db->insert('ng_old_nations', [
'server_id'=>UniqueConst::$serverID,
'nation'=>$me['nation'],
'data'=>Json::encode($oldNation)
]);
$query = "delete from nation where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
// 군주가 있는 위치 구함
@@ -943,53 +967,79 @@ function updateNationState() {
function checkStatistic() {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$admin = $gameStor->getValues(['year', 'month']);
$nationHists = [];
$specialHists = [];
$personalHists = [];
$specialHists2 = [0];
$specialHists2 = [];
$crewtypeHists = [];
$etc = '';
$query = "select avg(gold) as avggold, avg(rice) as avgrice, avg(dex0+dex10+dex20+dex30) as avgdex, max(dex0+dex10+dex20+dex30) as maxdex, avg(experience+dedication) as avgexpded, max(experience+dedication) as maxexpded from general";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$general['avggold'] = Util::round($general['avggold']);
$general['avgrice'] = Util::round($general['avgrice']);
$general['avgdex'] = Util::round($general['avgdex']);
$general['avgexpded'] = Util::round($general['avgexpded']);
$etc .= "평균 금/쌀 ({$general['avggold']}/{$general['avgrice']}), 평균/최고 숙련({$general['avgdex']}/{$general['maxdex']}), 평균/최고 경험공헌({$general['avgexpded']}/{$general['maxexpded']}), ";
$auxData = [
'generals'=>[],
'nations'=>[],
];
$query = "select min(tech) as mintech, max(tech) as maxtech, avg(tech) as avgtech, min(power) as minpower, max(power) as maxpower, avg(power) as avgpower from nation where level>0";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$nation['avgtech'] = Util::round($nation['avgtech']);
$nation['avgpower'] = Util::round($nation['avgpower']);
$etc .= "최저/평균/최고 기술({$nation['mintech']}/{$nation['avgtech']}/{$nation['maxtech']}), ";
$etc .= "최저/평균/최고 국력({$nation['minpower']}/{$nation['avgpower']}/{$nation['maxpower']}), ";
$avgGeneral = $db->queryFirstRow(
'SELECT avg(gold) as avggold, avg(rice) as avgrice, avg(dex0+dex10+dex20+dex30) as avgdex,
max(dex0+dex10+dex20+dex30) as maxdex, avg(experience+dedication) as avgexpded, max(experience+dedication) as maxexpded
FROM general'
);
$auxData['generals']['avg'] = $avgGeneral;
$avgGeneral['avggold'] = Util::round($avgGeneral['avggold']);
$avgGeneral['avgrice'] = Util::round($avgGeneral['avgrice']);
$avgGeneral['avgdex'] = Util::round($avgGeneral['avgdex']);
$avgGeneral['avgexpded'] = Util::round($avgGeneral['avgexpded']);
$etc .= "평균 금/쌀 ({$avgGeneral['avggold']}/{$avgGeneral['avgrice']}), 평균/최고 숙련({$avgGeneral['avgdex']}/{$avgGeneral['maxdex']}), 평균/최고 경험공헌({$avgGeneral['avgexpded']}/{$avgGeneral['maxexpded']}), ";
$avgNation = $db->queryFirstRow(
'SELECT min(tech) as mintech, max(tech) as maxtech, avg(tech) as avgtech,
min(power) as minpower, max(power) as maxpower, avg(power) as avgpower from nation where level>0');
$auxData['nations']['avg'] = $avgNation;
$avgNation['avgtech'] = Util::round($avgNation['avgtech']);
$avgNation['avgpower'] = Util::round($avgNation['avgpower']);
$etc .= "최저/평균/최고 기술({$avgNation['mintech']}/{$avgNation['avgtech']}/{$avgNation['maxtech']}), ";
$etc .= "최저/평균/최고 국력({$avgNation['minpower']}/{$avgNation['avgpower']}/{$avgNation['maxpower']}), ";
$nationName = '';
$power_hist = '';
$powerHist = '';
$query = "select nation,name,type,power,gennum,round((gold+rice)/100) as goldrice from nation where level>0 order by power desc";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nationCount = MYDB_num_rows($result);
for($i=0; $i < $nationCount; $i++) {
$nation = MYDB_fetch_array($result);
$nations = Util::convertArrayToDict(
$db->query(
'SELECT nation,name,type,power,gennum,gold+rice as goldrice from nation where level>0 order by power desc', 'nation'
),
'nation'
);
$nationCount = count($nations);
$query = "select sum(leader+power+intel) as abil,round(sum(gold+rice)/100) as goldrice,round(sum(dex0+dex10+dex20+dex30)/1000) as dex,round(sum(experience+dedication)/100) as expded from general where nation='{$nation['nation']}'";
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result2);
$nationGeneralInfos = Util::convertArrayToDict(
$db->query(
'SELECT nation, sum(leader+power+intel) as abil,sum(gold+rice) as goldrice,
sum(dex0+dex10+dex20+dex30) as dex,sum(experience+dedication) as expded
from general GROUP BY nation'
),
'nation'
);
$query = "select count(*) as cnt,round(sum(pop)/100) as pop,round(sum(pop2)/100) as pop2 from city where nation='{$nation['nation']}'";
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result2);
$nationCityInfos = Util::convertArrayToDict(
$db->query('SELECT nation, count(*) as cnt, sum(pop) as pop,sum(pop2) as pop2 from city GROUP BY nation'),
'nation'
);
foreach($nations as $nationNo=>&$nation) {
$general = $nationGeneralInfos[$nationNo];
$city = $nationCityInfos[$nationNo];
$nation['generalInfo'] = $general;
$nation['cityInfo'] = $city;
$nationName .= $nation['name'].'('.getNationType($nation['type']).'), ';
$power_hist .= "{$nation['name']}({$nation['power']}/{$nation['gennum']}/{$city['cnt']}/{$city['pop']}/{$city['pop2']}/{$nation['goldrice']}/{$general['goldrice']}/{$general['abil']}/{$general['dex']}/{$general['expded']}), ";
$powerHist .= "{$nation['name']}({$nation['power']}/{$nation['gennum']}/{$city['cnt']}/{$city['pop']}/{$city['pop2']}/{$nation['goldrice']}/{$general['goldrice']}/{$general['abil']}/{$general['dex']}/{$general['expded']}), ";
if(!isset($nationHists[$nation['type']])){
$nationHists[$nation['type']] = 0;
@@ -997,26 +1047,21 @@ function checkStatistic() {
$nationHists[$nation['type']]++;
}
$auxData['nations']['all'] = $nations;
$nationHist = '';
for($i=1; $i <= 13; $i++) {
if(!Util::array_get($nationHists[$i])) { $nationHists[$i] = '-'; }
$nationHist .= getNationType($i)."({$nationHists[$i]}), ";
}
$query = "select no from general where npc <= 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$genCount = MYDB_num_rows($result);
$generals = $db->query('SELECT `no`,npc,personal,special,special2,crewtype FROM general');
$query = "select no from general where npc > 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$npcCount = MYDB_num_rows($result);
$query = "select personal,special,special2 from general";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$generalCount = MYDB_num_rows($result);
for($i=0; $i < $generalCount; $i++) {
$general = MYDB_fetch_array($result);
$genCount = 0;
$npcCount = 0;
$generalCount = count($generals);
foreach($generals as $general) {
if(!isset($personalHists[$general['personal']])){
$personalHists[$general['personal']] = 0;
}
@@ -1029,70 +1074,112 @@ function checkStatistic() {
$specialHists2[$general['special2']] = 0;
}
if($general['npc'] < 2){
$genCount+=1;
}
else{
$npcCount+=1;
}
$personalHists[$general['personal']]++;
$specialHists[$general['special']]++;
$specialHists2[$general['special2']]++;
}
foreach($db->queryAllLists(
'SELECT crewtype, count(crewtype) AS cnt FROM general WHERE crew>=100 OR deathnum>0 GROUP BY crewtype'
) as [$crewtype, $cnt]
){
$crewtypeHists[$crewtype] = $cnt;
}
$auxData['generals']['hists'] = [
'personal' => $personalHists,
'special' => $specialHists,
'special2' => $specialHists2,
'crewtype' => $crewtypeHists,
'userCnt' => $genCount,
'npcCnt' => $npcCount,
];
$generalCountStr = "{$generalCount}({$genCount}+{$npcCount})";
$personalHist = '';
for($i=0; $i < 11; $i++) {
if(!Util::array_get($personalHists[$i])) { $personalHists[$i] = '-'; }
$personalHist .= getGenChar($i)."({$personalHists[$i]}), ";
}
$specialHist = '';
for($i=0; $i < 40; $i++) {
$call = getGenSpecial($i);
if($call) {
if(!Util::array_get($specialHists[$i])) { $specialHists[$i] = '-'; }
$personalHistStr = join(', ', array_map(function($histPair){
[$histKey, $cnt] = $histPair;
return getGenChar($histKey).'('.$cnt.')';
}, Util::convertDictToArray($personalHists)));
$specialHist .= $call."({$specialHists[$i]}), ";
}
}
$specialHist .= '// ';
$specialHist .= "-({$specialHists2[0]}), ";
for($i=40; $i < 80; $i++) {
$call = getGenSpecial($i);
if($call) {
if(!Util::array_get($specialHists2[$i])) { $specialHists2[$i] = '-'; }
$specialHistsStr = join(', ', array_map(function($histPair){
[$histKey, $cnt] = $histPair;
return getGenSpecial($histKey).'('.$cnt.')';
}, Util::convertDictToArray($specialHists)));
$specialHist .= $call."({$specialHists2[$i]}), ";
}
}
$specialHists2Str = join(', ', array_map(function($histPair){
[$histKey, $cnt] = $histPair;
return getGenSpecial($histKey).'('.$cnt.')';
}, Util::convertDictToArray($specialHists2)));
$crewtype = '';
$types = array(0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43);
$count = count($types);
foreach(GameUnitConst::all() as $unit){
$userCnt = DB::db()->queryFirstField(
"SELECT count(*) as type from general where crewtype=%i and crew>=100",
$unit->id
$specialHistsAllStr = "$specialHistsStr // $specialHists2Str";
$crewtypeHistsStr = join(', ', array_map(function($histPair){
[$histKey, $cnt] = $histPair;
return getGenSpecial($histKey).'('.$cnt.')';
}, Util::convertDictToArray($crewtypeHists)));
$db->insert('statistic', [
'year'=>$admin['year'],
'month'=>$admin['month'],
'nation_count'=>$nationCount,
'nation_name'=>$nationName,
'nation_hist'=>$nationHist,
'gen_count'=>$generalCountStr,
'personal_hist'=>$personalHistStr,
'special_hist'=>$specialHistsAllStr,
'power_hist'=>$powerHist,
'crewtype'=>$crewtypeHistsStr,
'etc'=>$etc,
'aux'=>Json::encode($auxData)
]);
}
function convForOldGeneral(array $general, int $year, int $month){
return [
'server_id'=>UniqueConst::$serverID,
'general_no'=>$general['no'],
'owner'=>$general['owner'],
'name'=>$general['name'],
'last_yearmonth'=>$year*100+$month,
'turntime'=>$general['turntime'],
'data'=>Json::encode($general)
];
}
function storeOldGeneral(int $no, int $year, int $month){
$db = DB::db();
$general = $db->queryFirstRow('SELECT * FROM general WHERE `no` = %i', $no);
if(!$general){
return;
}
$data = convForOldGeneral($general, $year, $month);
$db->insertUpdate(
'ng_old_generals',
$data,
$data
);
}
function storeOldGenerals(int $nation, int $year, int $month){
$db = DB::db();
foreach($db->query('SELECT * FROM general WHERE nation = %i',$nation) as $general){
$data = convForOldGeneral($general, $year, $month);
$db->insertUpdate(
'ng_old_generals',
$data,
$data
);
$crewtype .= "{$unit->name}({$userCnt}), ";
}
for($i=0; $i < $count; $i++) {
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
}
$query = "
insert into statistic (
year, month,
nation_count, nation_name, nation_hist,
gen_count, personal_hist, special_hist, power_hist,
crewtype, etc
) values (
'{$admin['year']}', '{$admin['month']}',
'$nationCount', '$nationName', '$nationHist',
'$generalCountStr', '$personalHist', '$specialHist', '$power_hist',
'$crewtype', '$etc'
)";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
function checkEmperior() {
@@ -1106,183 +1193,219 @@ function checkEmperior() {
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
if($count == 1 && $admin['isunited'] == 0) {
$nation = MYDB_fetch_array($result);
if ($count != 1 || $admin['isunited'] != 0) {
return;
}
$query = "select city from city where nation='{$nation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$nation = MYDB_fetch_array($result);
$query = "select city from city";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$allcount = MYDB_num_rows($result);
$count = $db->queryFirstField('SELECT count(city) FROM city WHERE nation=%i', $nation['nation']);
if(!$count){
return;
}
$allcount = $db->queryFirstField('SELECT count(city) FROM city');
if($count == $allcount) {
if ($count != $allcount) {
return;
}
$josaYi = JosaUtil::pick($nation['name'], '이');
checkStatistic();
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일");
$josaYi = JosaUtil::pick($nation['name'], '이');
$gameStor->isunited = 2;
$gameStor->conlimit = $gameStor->conlimit*100;
pushNationHistory($nation, "<C>●</>{$admin['year']}{$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일");
$query = "select no from general where npc<2 and age>=40";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$gameStor->isunited = 2;
$gameStor->conlimit = $gameStor->conlimit*100;
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
CheckHall($general['no']);
}
$query = "select no from general where npc<2 and age>=40";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
$query = "select nation,name,type,color,gold,rice,power,gennum from nation where nation='{$nation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
CheckHall($general['no']);
}
$query = "select SUM(pop) as totalpop,SUM(pop2) as maxpop from city where nation='{$nation['nation']}'"; // 도시 이름 목록
$cityresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($cityresult);
$pop = "{$city['totalpop']} / {$city['maxpop']}";
$poprate = round($city['totalpop']/$city['maxpop']*100, 2);
$poprate .= " %";
$query = "select nation,name,type,color,gold,rice,power,gennum from nation where nation='{$nation['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='12'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level12 = MYDB_fetch_array($genresult);
$query = "select SUM(pop) as totalpop,SUM(pop2) as maxpop from city where nation='{$nation['nation']}'"; // 도시 이름 목록
$cityresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($cityresult);
$pop = "{$city['totalpop']} / {$city['maxpop']}";
$poprate = round($city['totalpop']/$city['maxpop']*100, 2);
$poprate .= " %";
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='11'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level11 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='12'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level12 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='10'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level10 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='11'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level11 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='9'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level9 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='10'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level10 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='8'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level8 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='9'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level9 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='7'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level7 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='8'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level8 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='6'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level6 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='7'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level7 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='5'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level5 = MYDB_fetch_array($genresult);
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='6'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level6 = MYDB_fetch_array($genresult);
$query = "select name,picture,killnum from general where nation='{$nation['nation']}' order by killnum desc limit 5"; // 오호장군
$tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$tigernum = MYDB_num_rows($tigerresult);
$tigerstr = '';
for($i=0; $i < $tigernum; $i++) {
$tiger = MYDB_fetch_array($tigerresult);
if($tiger['killnum'] > 0) {
$tigerstr .= "{$tiger['name']}{$tiger['killnum']}】, ";
}
}
$query = "select name,picture,belong from general where nation='{$nation['nation']}' and level='5'";
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$level5 = MYDB_fetch_array($genresult);
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$eaglenum = MYDB_num_rows($eagleresult);
$eaglestr = '';
for($i=0; $i < $eaglenum; $i++) {
$eagle = MYDB_fetch_array($eagleresult);
if($eagle['firenum'] > 0) {
$eaglestr .= "{$eagle['name']}{$eagle['firenum']}】, ";
}
}
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $nation['nation']);
$oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $nation['nation']);
$oldNation['generals'] = $oldNationGenerals;
$log = ["<C>●</>{$admin['year']}{$admin['month']}월: <D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일하였습니다."];
$query = "select no,name from general where nation='{$nation['nation']}' order by dedication desc";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$gen = '';
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
$gen .= "{$general['name']}, ";
pushGenLog($general, $log);
}
$nation['type'] = getNationType($nation['type']);
$query = "select MAX(nation_count) as nc,MAX(gen_count) as gc from statistic";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$stat = MYDB_fetch_array($result);
$query = "select count(*) as cnt from general";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_fetch_array($result);
$statNC = "1 / {$stat['nc']}";
$statGC = "{$gencount['cnt']} / {$stat['gc']}";
$query = "select nation_count,nation_name,nation_hist from statistic where nation_count='{$stat['nc']}' limit 0,1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$statNation = MYDB_fetch_array($result);
$query = "select gen_count,personal_hist,special_hist from statistic order by no desc limit 0,1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$statGeneral = MYDB_fetch_array($result);
$nationHistory = DB::db()->queryFirstField('SELECT `history` FROM `nation` WHERE `nation` = %i', $nation['nation']);
$db->insert('emperior', [
'phase'=>'-',
'nation_count'=>$statNC,
'nation_name'=>$statNation['nation_name'],
'nation_hist'=>$statNation['nation_hist'],
'gen_count'=>$statGC,
'personal_hist'=>$statGeneral['personal_hist'],
'special_hist'=>$statGeneral['special_hist'],
'name'=>$nation['name'],
'type'=>$nation['type'],
'color'=>$nation['color'],
'year'=>$admin['year'],
'month'=>$admin['month'],
'power'=>$nation['power'],
'gennum'=>$nation['gennum'],
'citynum'=>$allcount,
'pop'=>$pop,
'poprate'=>$poprate,
'gold'=>$nation['gold'],
'rice'=>$nation['rice'],
'l12name'=>$level12['name'],
'l12pic'=>$level12['picture'],
'l11name'=>$level11['name'],
'l11pic'=>$level11['picture'],
'l10name'=>$level10['name'],
'l10pic'=>$level10['picture'],
'l9name'=>$level9['name'],
'l9pic'=>$level9['picture'],
'l8name'=>$level8['name'],
'l8pic'=>$level8['picture'],
'l7name'=>$level7['name'],
'l7pic'=>$level7['picture'],
'l6name'=>$level6['name'],
'l6pic'=>$level6['picture'],
'l5name'=>$level5['name'],
'l5pic'=>$level5['picture'],
'tiger'=>$tigerstr,
'eagle'=>$eaglestr,
'gen'=>$gen,
'history'=>$nationHistory
]);
$history = ["<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【통일】</b></><D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일하였습니다."];
pushWorldHistory($history, $admin['year'], $admin['month']);
//연감 월결산
LogHistory();
$query = "select name,picture,killnum from general where nation='{$nation['nation']}' order by killnum desc limit 5"; // 오호장군
$tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$tigernum = MYDB_num_rows($tigerresult);
$tigerstr = '';
for($i=0; $i < $tigernum; $i++) {
$tiger = MYDB_fetch_array($tigerresult);
if($tiger['killnum'] > 0) {
$tigerstr .= "{$tiger['name']}{$tiger['killnum']}】, ";
}
}
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$eaglenum = MYDB_num_rows($eagleresult);
$eaglestr = '';
for($i=0; $i < $eaglenum; $i++) {
$eagle = MYDB_fetch_array($eagleresult);
if($eagle['firenum'] > 0) {
$eaglestr .= "{$eagle['name']}{$eagle['firenum']}】, ";
}
}
$log = ["<C>●</>{$admin['year']}{$admin['month']}월: <D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일하였습니다."];
$query = "select no,name from general where nation='{$nation['nation']}' order by dedication desc";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$gen = '';
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
$gen .= "{$general['name']}, ";
pushGenLog($general, $log);
}
$nation['type'] = getNationType($nation['type']);
$query = "select MAX(nation_count) as nc,MAX(gen_count) as gc from statistic";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$stat = MYDB_fetch_array($result);
$query = "select count(*) as cnt from general";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_fetch_array($result);
$statNC = "1 / {$stat['nc']}";
$statGC = "{$gencount['cnt']} / {$stat['gc']}";
$query = "select nation_count,nation_name,nation_hist from statistic where nation_count='{$stat['nc']}' limit 0,1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$statNation = MYDB_fetch_array($result);
$query = "select gen_count,personal_hist,special_hist,aux from statistic order by no desc limit 0,1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$statGeneral = MYDB_fetch_array($result);
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $nation['nation']);
$oldNation['generals'] = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $nation['nation']);
storeOldGenerals(0, $admin['year'], $admin['month']);
storeOldGenerals($nation['nation'], $admin['year'], $admin['month']);
$db->insert('ng_old_nations', [
'server_id'=>UniqueConst::$serverID,
'nation'=>$nation['nation'],
'history'=>'',
'data'=>Json::encode($oldNation)
]);
$noNationGeneral = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=0');
$db->insert('ng_old_nations', [
'server_id'=>UniqueConst::$serverID,
'nation'=>0,
'data'=>Json::encode([
'nation'=>0,
'name'=>'재야',
'generals'=>$noNationGeneral
])
]);
$nationHistory = DB::db()->queryFirstField('SELECT `history` FROM `nation` WHERE `nation` = %i', $nation['nation']);
$serverCnt = $db->queryFirstField('SELECT count(*) FROM ng_games');
$serverName = UniqueConst::$serverName;
$db->insert('emperior', [
'phase'=>$serverName.$serverCnt.'기',
'server_id'=>UniqueConst::$serverID,
'nation_count'=>$statNC,
'nation_name'=>$statNation['nation_name'],
'nation_hist'=>$statNation['nation_hist'],
'gen_count'=>$statGC,
'personal_hist'=>$statGeneral['personal_hist'],
'special_hist'=>$statGeneral['special_hist'],
'name'=>$nation['name'],
'type'=>$nation['type'],
'color'=>$nation['color'],
'year'=>$admin['year'],
'month'=>$admin['month'],
'power'=>$nation['power'],
'gennum'=>$nation['gennum'],
'citynum'=>$allcount,
'pop'=>$pop,
'poprate'=>$poprate,
'gold'=>$nation['gold'],
'rice'=>$nation['rice'],
'l12name'=>$level12['name'],
'l12pic'=>$level12['picture'],
'l11name'=>$level11['name'],
'l11pic'=>$level11['picture'],
'l10name'=>$level10['name'],
'l10pic'=>$level10['picture'],
'l9name'=>$level9['name'],
'l9pic'=>$level9['picture'],
'l8name'=>$level8['name'],
'l8pic'=>$level8['picture'],
'l7name'=>$level7['name'],
'l7pic'=>$level7['picture'],
'l6name'=>$level6['name'],
'l6pic'=>$level6['picture'],
'l5name'=>$level5['name'],
'l5pic'=>$level5['picture'],
'tiger'=>$tigerstr,
'eagle'=>$eaglestr,
'gen'=>$gen,
'history'=>$nationHistory,
'aux'=>$statGeneral['aux']
]);
$history = ["<C>●</>{$admin['year']}{$admin['month']}월:<Y><b>【통일】</b></><D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일하였습니다."];
pushWorldHistory($history, $admin['year'], $admin['month']);
//연감 월결산
LogHistory();
}
+4 -1
View File
@@ -1305,8 +1305,11 @@ function Promotion($nation, $level) {
$query = "update general set level=1 where level<11 and level>4 and nation='$nation'";
MYDB_query($query, $connect) or Error("Promotion_02 ".MYDB_error($connect),"");
$maxBelong = $db->queryFirstField('SELECT max(belong) FROM `general` WHERE nation=%i', $nation);
$maxBelong = min($maxBelong - 1, 3);
//유저 후보 선택
$query = "select no from general where nation='$nation' and npc<2 and level=1 and belong>=3 and killturn>='{$admin['killturn']}' order by rand() limit 0,1";
$query = "select no from general where nation='$nation' and npc<2 and level=1 and belong>=$maxBelong and killturn>='{$admin['killturn']}' order by rand() limit 0,1";
$result = MYDB_query($query, $connect) or Error("Promotion_00 ".MYDB_error($connect),"");
$userCandidate = MYDB_fetch_array($result);
// 유저수뇌 안함
+4 -1
View File
@@ -1812,7 +1812,10 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
// 국가 백업
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $city['nation']);
$oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $city['nation']);
$oldNation['generals'] = $oldNationGenerals;
$oldNation['generals'] = array_map(function($gen){
//다른 코드와는 다르게 공용으로 쓰므로 남겨둠
return $gen['no'];
}, $oldNationGenerals);
foreach($oldNationGenerals as $gen){
+1 -1
View File
@@ -973,7 +973,7 @@ function command_25($turn, $command) {
$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 FROM nation ORDER BY rand()');
$nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg,gennum FROM nation ORDER BY rand()');
echo "
국가에 임관합니다.<br>
+5 -4
View File
@@ -16,8 +16,8 @@ class ResetHelper{
'reason'=>'logs, data 디렉토리를 생성할 권한이 없습니다.'
];
}
mkdir($servRoot.'/logs', 0644);
mkdir($servRoot.'/data', 0644);
mkdir($servRoot.'/logs', 0755);
mkdir($servRoot.'/data', 0755);
}
if(!is_writable($servRoot.'/logs')){
@@ -57,8 +57,8 @@ class ResetHelper{
$serverID = DB::prefix().'_'.date("ymd").'_'.Util::randomStr(4);
mkdir($servRoot.'/logs/'.$serverID, 0644);
mkdir($servRoot.'/data/'.$serverID, 0644);
mkdir($servRoot.'/logs/'.$serverID, 0755);
mkdir($servRoot.'/data/'.$serverID, 0755);
$result = Util::generateFileUsingSimpleTemplate(
$servRoot.'/d_setting/UniqueConst.orig.php',
@@ -213,6 +213,7 @@ class ResetHelper{
'date'=>$turntime,
'winner_nation'=>null,
'scenario'=>$scenario,
'scenario_name'=>$scenarioObj->getTitle(),
'env'=>Json::encode($env)
]);
+83 -56
View File
@@ -363,7 +363,7 @@ ENGINE=InnoDB;
##
###########################################################################
CREATE TABLE `ng_hall` (
CREATE TABLE IF NOT EXISTS `ng_hall` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NOT NULL,
`scenario` INT(11) NOT NULL,
@@ -385,12 +385,13 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
##
###########################################################################
CREATE TABLE if not exists `ng_games` (
CREATE TABLE IF NOT EXISTS `ng_games` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NOT NULL,
`date` DATETIME NOT NULL,
`winner_nation` INT(11) NULL DEFAULT NULL,
`scenario` INT(11) NOT NULL,
`scenario_name` TEXT NOT NULL,
`env` TEXT NOT NULL COMMENT 'json',
PRIMARY KEY (`id`),
UNIQUE INDEX `server_id` (`server_id`),
@@ -398,7 +399,7 @@ CREATE TABLE if not exists `ng_games` (
)
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `ng_old_nations` (
CREATE TABLE IF NOT EXISTS `ng_old_nations` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NOT NULL DEFAULT '0',
`nation` INT(11) NOT NULL DEFAULT '0',
@@ -409,42 +410,67 @@ CREATE TABLE `ng_old_nations` (
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
create table if not exists emperior (
no int(6) not null auto_increment,
phase char(255) default '',
nation_count char(64) default '',
nation_name text default '',
nation_hist text default '',
gen_count char(64) default '',
personal_hist text default '',
special_hist text default '',
name char(64) default '',
type char(64) default '',
color char(7) default '',
year int(4) default 0,
month int(2) default 0,
power int(8) default 0,
gennum int(3) default 0,
citynum int(3) default 0,
pop char(255) default 0,
poprate char(255) default '',
gold int(9) default 0,
rice int(9) default 0,
l12name char(64) default '', l12pic char(32) default '',
l11name char(64) default '', l11pic char(32) default '',
l10name char(64) default '', l10pic char(32) default '',
l9name char(64) default '', l9pic char(32) default '',
l8name char(64) default '', l8pic char(32) default '',
l7name char(64) default '', l7pic char(32) default '',
l6name char(64) default '', l6pic char(32) default '',
l5name char(64) default '', l5pic char(32) default '',
tiger char(64) default '',
eagle char(64) default '',
gen text default '',
history mediumtext default '',
CREATE TABLE IF NOT EXISTS `ng_old_generals` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NOT NULL,
`general_no` INT(11) NOT NULL,
`owner` INT(11) NULL DEFAULT NULL,
`name` VARCHAR(32) NOT NULL,
`last_yearmonth` INT(11) NOT NULL,
`turntime` DATETIME NOT NULL,
`data` MEDIUMTEXT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `by_no` (`server_id`, `general_no`),
INDEX `by_name` (`server_id`, `name`),
INDEX `owner` (`owner`, `server_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
PRIMARY KEY (no)
) ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `emperior` (
`no` INT(6) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NULL DEFAULT '',
`phase` CHAR(255) NULL DEFAULT '',
`nation_count` CHAR(64) NULL DEFAULT '',
`nation_name` TEXT NULL DEFAULT '',
`nation_hist` TEXT NULL DEFAULT '',
`gen_count` CHAR(64) NULL DEFAULT '',
`personal_hist` TEXT NULL DEFAULT '',
`special_hist` TEXT NULL DEFAULT '',
`name` CHAR(64) NULL DEFAULT '',
`type` CHAR(64) NULL DEFAULT '',
`color` CHAR(7) NULL DEFAULT '',
`year` INT(4) NULL DEFAULT '0',
`month` INT(2) NULL DEFAULT '0',
`power` INT(8) NULL DEFAULT '0',
`gennum` INT(3) NULL DEFAULT '0',
`citynum` INT(3) NULL DEFAULT '0',
`pop` CHAR(255) NULL DEFAULT '0',
`poprate` CHAR(255) NULL DEFAULT '',
`gold` INT(9) NULL DEFAULT '0',
`rice` INT(9) NULL DEFAULT '0',
`l12name` CHAR(64) NULL DEFAULT '',
`l12pic` CHAR(32) NULL DEFAULT '',
`l11name` CHAR(64) NULL DEFAULT '',
`l11pic` CHAR(32) NULL DEFAULT '',
`l10name` CHAR(64) NULL DEFAULT '',
`l10pic` CHAR(32) NULL DEFAULT '',
`l9name` CHAR(64) NULL DEFAULT '',
`l9pic` CHAR(32) NULL DEFAULT '',
`l8name` CHAR(64) NULL DEFAULT '',
`l8pic` CHAR(32) NULL DEFAULT '',
`l7name` CHAR(64) NULL DEFAULT '',
`l7pic` CHAR(32) NULL DEFAULT '',
`l6name` CHAR(64) NULL DEFAULT '',
`l6pic` CHAR(32) NULL DEFAULT '',
`l5name` CHAR(64) NULL DEFAULT '',
`l5pic` CHAR(32) NULL DEFAULT '',
`tiger` CHAR(64) NULL DEFAULT '',
`eagle` CHAR(64) NULL DEFAULT '',
`gen` TEXT NULL DEFAULT '',
`history` MEDIUMTEXT NULL DEFAULT '',
`aux` MEDIUMTEXT NULL DEFAULT '' COMMENT 'json',
PRIMARY KEY (`no`)
) ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
###########################################################################
##
@@ -512,27 +538,28 @@ create table auction (
###########################################################################
##
###########################################################################
create table statistic (
no int(6) not null auto_increment,
year int(4) default 0,
month int(2) default 0,
nation_count int(2) default 0,
nation_name text default '',
nation_hist text default '',
gen_count varchar(32) default '',
personal_hist text default '',
special_hist text default '',
power_hist text default '',
crewtype text default '',
etc text default '',
PRIMARY KEY (no)
) ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
CREATE TABLE `statistic` (
`no` INT(6) NOT NULL AUTO_INCREMENT,
`year` INT(4) NULL DEFAULT '0',
`month` INT(2) NULL DEFAULT '0',
`nation_count` INT(2) NULL DEFAULT '0',
`nation_name` TEXT NULL DEFAULT '',
`nation_hist` TEXT NULL DEFAULT '',
`gen_count` VARCHAR(32) NULL DEFAULT '',
`personal_hist` TEXT NULL DEFAULT '',
`special_hist` TEXT NULL DEFAULT '',
`power_hist` TEXT NULL DEFAULT '',
`crewtype` TEXT NULL DEFAULT '',
`etc` TEXT NULL DEFAULT '',
`aux` TEXT NULL DEFAULT '' COMMENT 'json',
PRIMARY KEY (`no`)
)
ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
###########################################################################
##
###########################################################################
CREATE TABLE if not exists `history` (
CREATE TABLE IF NOT EXISTS `history` (
`no` INT(6) NOT NULL AUTO_INCREMENT,
`server_id` CHAR(20) NOT NULL DEFAULT '',
`year` INT(4) NULL DEFAULT '0',
@@ -620,7 +647,7 @@ ENGINE=MyISAM;
###################
# KV storage
###################
CREATE TABLE if not exists `storage` (
CREATE TABLE IF NOT EXISTS `storage` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`namespace` VARCHAR(40) NOT NULL,
`key` VARCHAR(40) NOT NULL,
+2 -2
View File
@@ -10,8 +10,8 @@
>
<td style="width:130px;text-align:center;"
><?=$nation['name']?></td>
<td style="width:870px;max-width:870px;max-height:200px;overflow:hidden;"
><?=$nation['scoutmsg']?:'-'?></td>
<td><div style="width:870px;max-width:870px;max-height:200px;overflow:hidden;"
><?=$nation['scoutmsg']?:'-'?></div></td>
</tr>
<?php endforeach; ?>
</tbody>
+1 -1
View File
@@ -172,6 +172,6 @@ function postOAuthResult(result){
</div>
<div id="bottom_box">
<div class="container"><a href="terms.2.html">개인정보처리방침</a> &amp; <a href="terms.1.html">이용약관</a><br>© 2018 • HideD
</div></div>
<br>크롬과 파이어폭스에 최적화되어있습니다.</div></div>
</body>
</html>
+11 -5
View File
@@ -187,11 +187,11 @@ class Util extends \utilphp\util
return $str;
}
public static function mapWithDict($callback, $dict)
public static function mapWithKey($callback, $dict)
{
$result = [];
foreach (array_keys($dict) as $key) {
$result[$key] = ($callback)($dict[$key]);
$result[$key] = ($callback)($key, $dict[$key]);
}
return $result;
}
@@ -208,13 +208,19 @@ class Util extends \utilphp\util
return $result;
}
public static function convertDictToArray($dict, $keys)
public static function convertDictToArray($dict, bool $withKey=true)
{
$result = [];
foreach ($keys as $key) {
$result[] = Util::array_get($dict[$key], null);
foreach($dict as $key=>$value){
if($withKey){
$result[] = [$key, $value];
}
else{
$result[] = $value;
}
}
return $result;
}