From 5ab8b50a8a1805ce4a59056c1876a1e074c4ed3e Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 00:20:07 +0900 Subject: [PATCH 01/23] =?UTF-8?q?NPC=EC=9D=98=20=EA=B8=B0=EC=88=A0=20?= =?UTF-8?q?=EC=97=B0=EA=B5=AC=20=EA=B8=B0=EC=A4=80=EC=9D=84=20'=EA=B8=B0?= =?UTF-8?q?=EC=88=A0=EC=A0=9C=ED=95=9C=EC=9D=B4=20=EC=95=84=EB=8B=88?= =?UTF-8?q?=EB=A9=B4'=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_npc.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hwe/func_npc.php b/hwe/func_npc.php index fd46eec0..80be3c09 100644 --- a/hwe/func_npc.php +++ b/hwe/func_npc.php @@ -5,6 +5,9 @@ function SetDevelop($genType, $no, $city, $tech) { $db = DB::db(); $connect=$db->get(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + [$startyear, $year] = $gameStor->getValuesAsArray(['startyear', 'year']); + $query = "select rate,pop/pop2*100 as po,comm/comm2*100 as co,def/def2*100 as de,wall/wall2*100 as wa,secu/secu2*100 as se,agri/agri2*100 as ag from city where city='$city'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $city = MYDB_fetch_array($result); @@ -52,11 +55,11 @@ function SetDevelop($genType, $no, $city, $tech) { elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장 else { $command = EncodeCommand(0, 0, 0, 9); } //조달 } elseif($prob < 90) { - if($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술 + if(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술 elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장 else { $command = EncodeCommand(0, 0, 0, 9); } //조달 } else { - if($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3 + (rand() % 2) * 6); } //기술, 조달 + if(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3 + (rand() % 2) * 6); } //기술, 조달 else { $command = EncodeCommand(0, 0, 0, 29); } } break; From 57041e5e272ab2c195500f45bfc5ec8ee3ce5175 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 01:30:41 +0900 Subject: [PATCH 02/23] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EA=B0=80=EC=98=A4?= =?UTF-8?q?=ED=94=88=EC=8B=9C=20=EB=8C=80=EB=B9=84=20=EB=84=89=EB=84=89?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=8B=9C=EA=B0=84=20=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/ResetHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwe/sammo/ResetHelper.php b/hwe/sammo/ResetHelper.php index b24d3830..a377ef2c 100644 --- a/hwe/sammo/ResetHelper.php +++ b/hwe/sammo/ResetHelper.php @@ -237,7 +237,7 @@ class ResetHelper{ 'msg'=>'공지사항',//TODO:공지사항 'maxgeneral'=>GameConst::$defaultMaxGeneral, 'maxnation'=>GameConst::$defaultMaxNation, - 'conlimit'=>300, + 'conlimit'=>30000, 'gold_rate'=>100, 'rice_rate'=>100, 'develcost'=>$develcost, From a9b26993cc43a37341d13678d7c05ece9b9c5426 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 02:23:27 +0900 Subject: [PATCH 03/23] =?UTF-8?q?=EA=B0=80=20=EC=98=A4=ED=94=88=EA=B8=B0?= =?UTF-8?q?=EA=B0=84=EB=82=B4=20=EC=9E=A5=EC=88=98=20=EC=82=AD=EC=A0=9C/?= =?UTF-8?q?=EB=B9=99=EC=9D=98=ED=95=B4=EC=A0=9C=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_myPage.php | 34 ++++++++++++++++++-- hwe/c_die_immediately.php | 67 +++++++++++++++++++++++++++++++++++++++ hwe/join_post.php | 7 ++-- 3 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 hwe/c_die_immediately.php diff --git a/hwe/b_myPage.php b/hwe/b_myPage.php index e72171e4..86604c68 100644 --- a/hwe/b_myPage.php +++ b/hwe/b_myPage.php @@ -18,21 +18,24 @@ if($tnmt < 0 || $tnmt > 1){ $tnmt = 1; } +$showDieImmediatelyBtn = false; +$availableDieImmediately = false; + //로그인 검사 $session = Session::requireGameLogin()->setReadOnly(); $userID = Session::getUserID(); $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); +$gameStor->cacheValues(['turnterm', 'opentime', 'turntime']); $connect=$db->get(); increaseRefresh("내정보", 1); -$query = "select no,npc,mode,tnmt,myset,train,atmos from general where owner='{$userID}'"; +$query = "select no,npc,mode,tnmt,myset,train,atmos,lastrefresh from general where owner='{$userID}'"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), ""); $me = MYDB_fetch_array($result); - if ($me['myset'] > 0) { $submit = 'submit'; } else { @@ -91,6 +94,13 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) { } } +if($gameStor->turntime <= $gameStor->opentime){ + //서버 가오픈시 할 수 있는 행동 + $showDieImmediatelyBtn = true; + if(addTurn($me['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){ + $availableDieImmediately = true; + } +} ?> @@ -106,7 +116,21 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) { + @@ -138,6 +162,12 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {

+ + + 가오픈 기간 내 장수 삭제
+

+ + 개인용 CSS
diff --git a/hwe/c_die_immediately.php b/hwe/c_die_immediately.php new file mode 100644 index 00000000..de600f30 --- /dev/null +++ b/hwe/c_die_immediately.php @@ -0,0 +1,67 @@ +queryFirstRow('SELECT no,name,name2,npc,lastrefresh FROM general WHERE owner=%i', $userID); + +if(!$general){ + header('location:b_myPage.php'); + die(); +} + +increaseRefresh("장수 삭제", 1); +$gameStor->cacheValues(['turnterm', 'opentime', 'turntime', 'year', 'month']); + +if($gameStor->turntime <= $gameStor->opentime){ + //서버 가오픈시 할 수 있는 행동 + if(addTurn($general['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){ + $availableDieImmediately = true; + } +} + +if(!$availableDieImmediately){ + header('location:b_myPage.php'); + die(); +} + + +if($general['npc'] == 0){ + if(!$db->query('DELETE FROM general WHERE owner=%i AND npc=0', $userID)){ + trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING); + } + $generalName = $general['name']; + $josaYi = JosaUtil::pick($generalName, '이'); + pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); +} +else{ + $turnterm = $gameStor->turnterm; + if($turnterm < 10){ + $targetKillTurn = 30 / $turnterm; + } + else{ + $targetKillTurn = 60 / $turnterm; + } + if(!$db->update('general', [ + 'killturn'=>$targetKillTurn + ], 'owner=%i AND npc=1', $userID)){ + trigger_error("올바르지 않은 빙의 해제 프로세스 $userID", E_USER_WARNING); + } + $generalName = $general['name2']; + $josaYi = JosaUtil::pick($generalName, '이'); + pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); +} + + +$session->logoutGame(); +header('location:..'); \ No newline at end of file diff --git a/hwe/join_post.php b/hwe/join_post.php index 89bd02cc..a7e0395f 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -189,8 +189,8 @@ else{ $turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime'])); -$lastconnect = date('Y-m-d H:i:s'); -if ($lastconnect >= $turntime) { +$now = date('Y-m-d H:i:s'); +if ($now >= $turntime) { $turntime = addTurn($turntime, $admin['turnterm']); } @@ -233,7 +233,8 @@ $db->insert('general', [ 'level' => 0, 'turntime' => $turntime, 'killturn' => 6, - 'lastconnect' => $lastconnect, + 'lastconnect' => $now, + 'lastrefresh' => $now, 'crewtype'=>GameUnitConst::DEFAULT_CREWTYPE, 'makelimit' => 0, 'age' => $age, From 41df33f5d0345d9fd0a67c829a21c19ec258f3ab Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 02:24:58 +0900 Subject: [PATCH 04/23] =?UTF-8?q?=EA=B0=80=EC=98=A4=ED=94=88=EC=8B=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=EB=8A=94=20=EC=9C=A0=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EB=A7=8C=20=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_myPage.php | 9 ++++++--- hwe/c_die_immediately.php | 32 +++++++------------------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/hwe/b_myPage.php b/hwe/b_myPage.php index 86604c68..885f5663 100644 --- a/hwe/b_myPage.php +++ b/hwe/b_myPage.php @@ -96,9 +96,12 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) { if($gameStor->turntime <= $gameStor->opentime){ //서버 가오픈시 할 수 있는 행동 - $showDieImmediatelyBtn = true; - if(addTurn($me['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){ - $availableDieImmediately = true; + + if($me['npc'] == 0){ + $showDieImmediatelyBtn = true; + if(addTurn($me['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){ + $availableDieImmediately = true; + } } } ?> diff --git a/hwe/c_die_immediately.php b/hwe/c_die_immediately.php index de600f30..c858889c 100644 --- a/hwe/c_die_immediately.php +++ b/hwe/c_die_immediately.php @@ -13,7 +13,7 @@ $userID = Session::getUserID(); $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); -$general = $db->queryFirstRow('SELECT no,name,name2,npc,lastrefresh FROM general WHERE owner=%i', $userID); +$general = $db->queryFirstRow('SELECT no,name,name2,npc,lastrefresh FROM general WHERE owner=%i AND npc = 0', $userID); if(!$general){ header('location:b_myPage.php'); @@ -36,31 +36,13 @@ if(!$availableDieImmediately){ } -if($general['npc'] == 0){ - if(!$db->query('DELETE FROM general WHERE owner=%i AND npc=0', $userID)){ - trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING); - } - $generalName = $general['name']; - $josaYi = JosaUtil::pick($generalName, '이'); - pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); -} -else{ - $turnterm = $gameStor->turnterm; - if($turnterm < 10){ - $targetKillTurn = 30 / $turnterm; - } - else{ - $targetKillTurn = 60 / $turnterm; - } - if(!$db->update('general', [ - 'killturn'=>$targetKillTurn - ], 'owner=%i AND npc=1', $userID)){ - trigger_error("올바르지 않은 빙의 해제 프로세스 $userID", E_USER_WARNING); - } - $generalName = $general['name2']; - $josaYi = JosaUtil::pick($generalName, '이'); - pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); +if(!$db->query('DELETE FROM general WHERE owner=%i AND npc=0', $userID)){ + trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING); } +$generalName = $general['name']; +$josaYi = JosaUtil::pick($generalName, '이'); +pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); + $session->logoutGame(); From d6704c154bc10d750392e2037a996a5626809a94 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 23:24:05 +0900 Subject: [PATCH 05/23] =?UTF-8?q?=EA=B0=80=EC=98=A4=ED=94=88=EC=8B=9C=20?= =?UTF-8?q?=EB=B3=84=EB=8F=84=20=ED=91=9C=EA=B8=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i_entrance/entrance.php | 1 + js/entrance.js | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/i_entrance/entrance.php b/i_entrance/entrance.php index f6c21591..943f4829 100644 --- a/i_entrance/entrance.php +++ b/i_entrance/entrance.php @@ -32,6 +32,7 @@ $acl = $session->acl; + diff --git a/js/entrance.js b/js/entrance.js index f2db3f91..0779e83a 100644 --- a/js/entrance.js +++ b/js/entrance.js @@ -16,6 +16,13 @@ var serverTextInfo = "\ \ "; +var serverProvisionalInfo = "\ +\ +- 오픈 일시 : <%opentime%> -
\ +서기 <%year%>년 <%month%>월 (<%scenario%>)
\ +유저 : <%userCnt%> / <%maxUserCnt%>명 NPC : <%npcCnt%>명 (<%turnTerm%>분 턴 서버)\ +"; + var serverFullTemplate = "\ - 장수 등록 마감 -\ "; @@ -71,6 +78,7 @@ function Entrance_UpdateServer() { function Entrance_drawServerList(serverInfos){ var $serverList = $('#server_list'); + var now = moment().format('YYYY-MM-DD HH:mm:ss'); $.each(serverInfos, function(idx, serverInfo){ var $serverHtml = $(TemplateEngine(serverListTemplate, serverInfo)); $serverList.append($serverHtml); @@ -104,14 +112,27 @@ function Entrance_drawServerList(serverInfos){ $serverHtml.find('.n_country').html('§천하통일§'); $serverHtml.find('.server_date').html('{0}
~ {1}'.format(game.starttime, game.turntime)); } - else{ + else if(game.opentime <= now){ $serverHtml.find('.n_country').html('<{0}국 경쟁중>'.format(game.nationCnt)); $serverHtml.find('.server_date').html('{0} ~'.format(game.starttime)); } + else{ + $serverHtml.find('.n_country').html('-가오픈 중-'); + $serverHtml.find('.server_date').html('{0} ~'.format(game.starttime)); + } - $serverHtml.append( - TemplateEngine(serverTextInfo, game) - ); + console.log(game.opentime, now); + if(game.opentime <= now){ + $serverHtml.append( + TemplateEngine(serverTextInfo, game) + ); + } + else{ + $serverHtml.append( + TemplateEngine(serverProvisionalInfo, game) + ); + } + if(result.me && result.me.name){ var me = result.me; From 980c1255077a48d44928448d76f18a0d6f7347b5 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 13 Aug 2019 23:37:46 +0900 Subject: [PATCH 06/23] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_server_basic_info.php | 19 ++++++++++++++++++- js/entrance.js | 13 ++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/hwe/j_server_basic_info.php b/hwe/j_server_basic_info.php index 75d2e9a2..c34d3fa2 100644 --- a/hwe/j_server_basic_info.php +++ b/hwe/j_server_basic_info.php @@ -64,7 +64,7 @@ if(file_exists(__dir__.'/.htaccess')){ //TODO: 천통시에도 예약 오픈 알림이 필요..? -$admin = $gameStor->getValues(['isunited', 'npcmode', 'year', 'month', 'scenario', 'scenario_text', 'maxgeneral', 'turnterm', 'opentime', 'turntime']); +$admin = $gameStor->getValues(['isunited', 'npcmode', 'year', 'month', 'scenario', 'scenario_text', 'maxgeneral', 'turnterm', 'opentime', 'turntime', 'join_mode', 'fiction']); $admin['maxUserCnt'] = $admin['maxgeneral']; $admin['npcMode'] = $admin['npcmode']; $admin['turnTerm'] = $admin['turnterm']; @@ -85,6 +85,23 @@ $admin['userCnt'] = $genCnt; $admin['npcCnt'] = $npcCnt; $admin['nationCnt'] = $nationCnt; +$admin['npcMode'] = $admin['npcMode']?'가능':'불가'; +$admin['fictionMode'] = $admin['fiction']?'가상':'사실'; + +$otherTextInfo = []; + +if($options['join_mode'] == 'onlyRandom'){ + $otherTextInfo[] = '랜덤 임관 전용'; +} + +if(!$otherTextInfo){ + $otherTextInfo = '표준'; +} +else{ + $otherTextInfo = join(', ', $otherTextInfo); +} +$admin['otherTextInfo'] = $otherTextInfo; +$admin['defaultStatTotal'] = GameConst::$defaultStatTotal; $me = []; $general = $db->queryFirstRow('SELECT name, picture, imgsvr from general where owner=%i', $userID); diff --git a/js/entrance.js b/js/entrance.js index 0779e83a..4608fbff 100644 --- a/js/entrance.js +++ b/js/entrance.js @@ -12,7 +12,8 @@ var serverListTemplate = "\ var serverTextInfo = "\ \ 서기 <%year%>년 <%month%>월 (<%scenario%>)
\ -유저 : <%userCnt%> / <%maxUserCnt%>명 NPC : <%npcCnt%>명 (<%turnTerm%>분 턴 서버)\ +유저 : <%userCnt%> / <%maxUserCnt%>명 NPC : <%npcCnt%>명 (<%turnTerm%>분 턴 서버)
\ +(상성 설정:<%fictionMode%>), (기타 설정:<%otherTextInfo%>)\ \ "; @@ -20,7 +21,9 @@ var serverProvisionalInfo = "\ \ - 오픈 일시 : <%opentime%> -
\ 서기 <%year%>년 <%month%>월 (<%scenario%>)
\ -유저 : <%userCnt%> / <%maxUserCnt%>명 NPC : <%npcCnt%>명 (<%turnTerm%>분 턴 서버)\ +유저 : <%userCnt%> / <%maxUserCnt%>명 NPC : <%npcCnt%>명 (<%turnTerm%>분 턴 서버)
\ +(상성 설정:<%fictionMode%>), (기타 설정:<%otherTextInfo%>)\ +\ "; var serverFullTemplate = "\ @@ -56,7 +59,8 @@ var serverReservedTemplate = "\ <%openDatetime==starttime?'':'- 가오픈 일시 : '+openDatetime+ '-
'%>\ - 오픈 일시 : <%starttime%> -
\ <%scenarioName%> <%turnterm%>분 턴 서버
\ -(상성 설정:<%fictionMode%>), (빙의 여부:<%npcMode%>), (최대 스탯:<%gameConf.defaultStatTotal%>), (기타 설정:<%otherTextInfo%>)\ +(상성 설정:<%fictionMode%>), (빙의 여부:<%npcMode%>), (최대 스탯:<%gameConf.defaultStatTotal%>), (기타 설정:<%otherTextInfo%>)\ +\ "; $(function(){ @@ -121,7 +125,6 @@ function Entrance_drawServerList(serverInfos){ $serverHtml.find('.server_date').html('{0} ~'.format(game.starttime)); } - console.log(game.opentime, now); if(game.opentime <= now){ $serverHtml.append( TemplateEngine(serverTextInfo, game) @@ -146,7 +149,7 @@ function Entrance_drawServerList(serverInfos){ TemplateEngine(serverFullTemplate, {}) ); } - else if(game.npcMode == 1){ + else if(game.npcMode == '가눙'){ $serverHtml.append( TemplateEngine(serverCreateAndSelectTemplate, {serverPath:serverPath}) ).addClass('server_create_and_select'); From d02eaeec1e0b3b5f45a1c985ebe1179a74fe66dd Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 00:27:36 +0900 Subject: [PATCH 07/23] =?UTF-8?q?=EA=B1=B4=EA=B5=AD=20=EC=A6=89=EC=8B=9C?= =?UTF-8?q?=20=EC=96=BB=EB=8A=94=20=ED=85=9C=20=EC=82=AD=EC=A0=9C,=20?= =?UTF-8?q?=EC=9C=A0=EB=8B=88=ED=81=AC=20=EB=B3=B5=EA=B6=8C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81,=20'=EA=B3=A0=EC=A0=95=EB=90=9C=20?= =?UTF-8?q?=ED=95=9C=EA=B0=9C'=EB=A5=BC=20=EC=A3=BC=EB=8A=94=20=EC=9C=A0?= =?UTF-8?q?=EB=8B=88=ED=81=AC=20=EB=B3=B5=EA=B6=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 230 +++++++++++++++++---------------- hwe/func_process_personnel.php | 2 +- 2 files changed, 122 insertions(+), 110 deletions(-) diff --git a/hwe/func.php b/hwe/func.php index 1227f810..4c0efb95 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -2261,11 +2261,78 @@ function CheckHall($no) { } +function GuaranteedUniqueItemLottery(array $weightedArray, string $headerText='아이템'):?int{ + //NOTE: Util::choiceRandomUsingWeight 사용 + //TODO: 또 재 구현해야함.... ㅜㅜ + + if(!$weightedArray){ + return null; + } + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + + $targetGeneralID = Util::choiceRandomUsingWeight($weightedArray); + + $alllog = []; + $history = []; + $occupied = []; + $item = []; + + $admin = $gameStor->getValues(['year', 'month', 'scenario']); + + $selGroup = [ + 20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where book > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where item > 6') + ]; + + if(array_sum($selGroup) == 0){ + return null; + } + + $sel = Util::choiceRandomUsingWeight($selGroup); + switch($sel) { + case 0: [$type, $nameFunc] = ["weap", 'getWeapName']; break; + case 1: [$type, $nameFunc] = ["book", 'getBookName']; break; + case 2: [$type, $nameFunc] = ["horse", 'getHorseName']; break; + case 3: [$type, $nameFunc] = ["item", 'getItemName']; break; + } + + foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type) as $item){ + $occupied[$item] = 1; + } + for($i=7; $i <= 26; $i++) { + if(!Util::array_get($occupied[$i])) { + $item[] = $i; + } + } + $it = Util::choiceRandom($item); + + $general = $db->queryFirstRow('SELECT no, name, nation FROM general WHERE no = %i', $targetGeneralID); + + $db->update('general', [$type=>$it], 'no=%i', $general['no']); + + $nation = getNationStaticInfo($general['nation']); + + + $josaUl = JosaUtil::pick(($nameFunc)($it), '을'); + $josaYi = JosaUtil::pick($general['name'], '이'); + $log[] = "".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".($nameFunc)($it)."{$josaUl} 습득"); + $history[] = "●{$admin['year']}년 {$admin['month']}월:【{$headerText}】{$nation['name']}{$general['name']}{$josaYi} ".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + + pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); + pushWorldHistory($history, $admin['year'], $admin['month']); + pushGenLog($general, $log); + return $targetGeneralID; +} + function uniqueItem($general, $log, $vote=0) { //TODO: uniqueItem 재 구현 $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); - $connect=$db->get(); $alllog = []; $history = []; $occupied = []; @@ -2276,124 +2343,69 @@ function uniqueItem($general, $log, $vote=0) { $admin = $gameStor->getValues(['year', 'month', 'scenario']); - $query = "select count(*) as cnt from general where npc<2"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $gen = MYDB_fetch_array($result); + $genCnt = $db->queryFirstField('SELECT count(*) FROM general WHERE npc < 2'); - if($admin['scenario'] < 100) { $prob = $gen['cnt'] * 5; } // 5~6개월에 하나씩 등장 - else { $prob = $gen['cnt']; } // 1~2개월에 하나씩 등장 + if($admin['scenario'] < 100) { $prob = $genCnt * 5; } // 5~6개월에 하나씩 등장 + else { $prob = $genCnt; } // 1~2개월에 하나씩 등장 - if($vote == 1) { $prob = Util::round($gen['cnt'] * 0.7 / 3); } // 투표율 70%, 투표 한번에 2~3개 등장 - elseif($vote == 2) { $prob = Util::round($gen['cnt'] / 10 / 2); } // 랜임시 2개(10%) 등장(200명중 20명 랜임시도?) - elseif($vote == 3) { $prob = Util::round($gen['cnt'] / 10 / 4); } // 건국시 4개(20%) 등장(200명시 20국 정도 됨) + if($vote == 1) { $prob = Util::round($genCnt * 0.7 / 3); } // 투표율 70%, 투표 한번에 2~3개 등장 + elseif($vote == 2) { $prob = Util::round($genCnt / 10 / 2); } // 랜임시 2개(10%) 등장(200명중 20명 랜임시도?) if($prob < 3) { $prob = 3; } //아이템 습득 상황 - if(rand() % $prob == 0) { - //셋중 선택 - $selGroup = [ - 20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'), - 20 - $db->queryFirstField('SELECT count(*) from general where book > 6'), - 20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'), - 20 - $db->queryFirstField('SELECT count(*) from general where item > 6') - ]; - $sel = Util::choiceRandomUsingWeight($selGroup); - switch($sel) { - case 0: $type = "weap"; break; - case 1: $type = "book"; break; - case 2: $type = "horse"; break; - case 3: $type = "item"; break; - } - $query = "select no,{$type} from general where {$type}>6"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $count = MYDB_num_rows($result); - if($count < 20) { - for($i=0; $i < $count; $i++) { - $gen = MYDB_fetch_array($result); - $occupied[$gen[$type]] = 1; - } - for($i=7; $i <= 26; $i++) { - if(!Util::array_get($occupied[$i])) { - $item[] = $i; - } - } - $it = $item[rand() % count($item)]??0; + if (rand() % $prob != 0) { + return $log; - $query = "update general set {$type}='$it' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + } + //셋중 선택 + $selGroup = [ + 20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where book > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'), + 20 - $db->queryFirstField('SELECT count(*) from general where item > 6') + ]; - $nation = getNationStaticInfo($general['nation']); + if(array_sum($selGroup) == 0){ + return $log; + } - switch($sel) { - case 0: - $josaUl = JosaUtil::pick(getWeapName($it), '을'); - $josaYi = JosaUtil::pick($general['name'], '이'); - $log[] = "".getWeapName($it)."{$josaUl} 습득했습니다!"; - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".getWeapName($it)."{$josaUl} 습득했습니다!"; - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".getWeapName($it)."{$josaUl} 습득"); - if($vote == 0) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【아이템】{$nation['name']}{$general['name']}{$josaYi} ".getWeapName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 1) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【설문상품】{$nation['name']}{$general['name']}{$josaYi} ".getWeapName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 2) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【랜덤임관상품】{$nation['name']}{$general['name']}{$josaYi} ".getWeapName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 3) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【건국상품】{$nation['name']}{$general['name']}{$josaYi} ".getWeapName($it)."{$josaUl} 습득했습니다!"; - } - break; - case 1: - $josaUl = JosaUtil::pick(getBookName($it), '을'); - $josaYi = JosaUtil::pick($general['name'], '이'); - $log[] = "".getBookName($it)."{$josaUl} 습득했습니다!"; - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".getBookName($it)."{$josaUl} 습득했습니다!"; - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".getBookName($it)."{$josaUl} 습득"); - if($vote == 0) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【아이템】{$nation['name']}{$general['name']}{$josaYi} ".getBookName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 1) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【설문상품】{$nation['name']}{$general['name']}{$josaYi} ".getBookName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 2) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【랜덤임관상품】{$nation['name']}{$general['name']}{$josaYi} ".getBookName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 3) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【건국상품】{$nation['name']}{$general['name']}{$josaYi} ".getBookName($it)."{$josaUl} 습득했습니다!"; - } - break; - case 2: - $josaUl = JosaUtil::pick(getHorseName($it), '을'); - $josaYi = JosaUtil::pick($general['name'], '이'); - $log[] = "".getHorseName($it)."{$josaUl} 습득했습니다!"; - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".getHorseName($it)."{$josaUl} 습득했습니다!"; - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".getHorseName($it)."{$josaUl} 습득"); - if($vote == 0) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【아이템】{$nation['name']}{$general['name']}{$josaYi} ".getHorseName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 1) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【설문상품】{$nation['name']}{$general['name']}{$josaYi} ".getHorseName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 2) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【랜덤임관상품】{$nation['name']}{$general['name']}{$josaYi} ".getHorseName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 3) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【건국상품】{$nation['name']}{$general['name']}{$josaYi} ".getHorseName($it)."{$josaUl} 습득했습니다!"; - } - break; - case 3: - $josaUl = JosaUtil::pick(getItemName($it), '을'); - $josaYi = JosaUtil::pick($general['name'], '이'); - $log[] = "".getItemName($it)."{$josaUl} 습득했습니다!"; - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".getItemName($it)."{$josaUl} 습득했습니다!"; - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".getItemName($it)."{$josaUl} 습득"); - if($vote == 0) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【아이템】{$nation['name']}{$general['name']}{$josaYi} ".getItemName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 1) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【설문상품】{$nation['name']}{$general['name']}{$josaYi} ".getItemName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 2) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【랜덤임관상품】{$nation['name']}{$general['name']}{$josaYi} ".getItemName($it)."{$josaUl} 습득했습니다!"; - } elseif($vote == 3) { - $history[] = "●{$admin['year']}년 {$admin['month']}월:【건국상품】{$nation['name']}{$general['name']}{$josaYi} ".getItemName($it)."{$josaUl} 습득했습니다!"; - } - break; - } - pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); - pushWorldHistory($history, $admin['year'], $admin['month']); + $sel = Util::choiceRandomUsingWeight($selGroup); + switch($sel) { + case 0: [$type, $nameFunc] = ["weap", 'sammo\getWeapName']; break; + case 1: [$type, $nameFunc] = ["book", 'sammo\getBookName']; break; + case 2: [$type, $nameFunc] = ["horse", 'sammo\getHorseName']; break; + case 3: [$type, $nameFunc] = ["item", 'sammo\getItemName']; break; + } + + switch($vote){ + case 1: $voteTypeText = '설문상품'; break; + case 2: $voteTypeText = '랜덤임관상품'; break; + default: $voteTypeText = '아이템'; break; + } + + foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $item){ + $occupied[$item] = 1; + } + for($i=7; $i <= 26; $i++) { + if(!Util::array_get($occupied[$i])) { + $item[] = $i; } } + $it = Util::choiceRandom($item); + + $db->update('general', [$type=>$it], 'no=%i', $general['no']); + + $nation = getNationStaticInfo($general['nation']); + + $josaUl = JosaUtil::pick(($nameFunc)($it), '을'); + $josaYi = JosaUtil::pick($general['name'], '이'); + $log[] = "".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} ".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:".($nameFunc)($it)."{$josaUl} 습득"); + $history[] = "●{$admin['year']}년 {$admin['month']}월:【{$voteTypeText}】{$nation['name']}{$general['name']}{$josaYi} ".($nameFunc)($it)."{$josaUl} 습득했습니다!"; + + pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); + pushWorldHistory($history, $admin['year'], $admin['month']); return $log; } diff --git a/hwe/func_process_personnel.php b/hwe/func_process_personnel.php index d8f115b4..86585d90 100644 --- a/hwe/func_process_personnel.php +++ b/hwe/func_process_personnel.php @@ -770,7 +770,7 @@ function process_46(&$general) { $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); + $log = uniqueItem($general, $log); } pushWorldHistory($history, $admin['year'], $admin['month']); From a4a469b9c11dfcbef154721dbfed8fadb568c623 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 00:55:45 +0900 Subject: [PATCH 08/23] =?UTF-8?q?=EC=9E=91=EC=9C=84=20=EB=B3=B4=EC=83=81?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 18 +++++++++--------- hwe/func_gamerule.php | 24 +++++++++++++++++++++++- hwe/j_server_basic_info.php | 2 +- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/hwe/func.php b/hwe/func.php index 4c0efb95..1e4ec85f 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -2261,7 +2261,7 @@ function CheckHall($no) { } -function GuaranteedUniqueItemLottery(array $weightedArray, string $headerText='아이템'):?int{ +function guaranteedUniqueItemLottery(array $weightedArray, string $headerText='아이템'):?int{ //NOTE: Util::choiceRandomUsingWeight 사용 //TODO: 또 재 구현해야함.... ㅜㅜ @@ -2293,14 +2293,14 @@ function GuaranteedUniqueItemLottery(array $weightedArray, string $headerText=' $sel = Util::choiceRandomUsingWeight($selGroup); switch($sel) { - case 0: [$type, $nameFunc] = ["weap", 'getWeapName']; break; - case 1: [$type, $nameFunc] = ["book", 'getBookName']; break; - case 2: [$type, $nameFunc] = ["horse", 'getHorseName']; break; - case 3: [$type, $nameFunc] = ["item", 'getItemName']; break; + case 0: [$type, $nameFunc] = ["weap", 'sammo\getWeapName']; break; + case 1: [$type, $nameFunc] = ["book", 'sammo\getBookName']; break; + case 2: [$type, $nameFunc] = ["horse", 'sammo\getHorseName']; break; + case 3: [$type, $nameFunc] = ["item", 'sammo\getItemName']; break; } - foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type) as $item){ - $occupied[$item] = 1; + foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $itemIdx){ + $occupied[$itemIdx] = 1; } for($i=7; $i <= 26; $i++) { if(!Util::array_get($occupied[$i])) { @@ -2383,8 +2383,8 @@ function uniqueItem($general, $log, $vote=0) { default: $voteTypeText = '아이템'; break; } - foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $item){ - $occupied[$item] = 1; + foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $itemIdx){ + $occupied[$itemIdx] = 1; } for($i=7; $i <= 26; $i++) { if(!Util::array_get($occupied[$i])) { diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index ba16fdec..fc15e605 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -973,7 +973,7 @@ function updateNationState() { $connect=$db->get(); $history = array(); - $admin = $gameStor->getValues(['year', 'month', 'fiction', 'startyear', 'show_img_level', 'turnterm', 'turntime']); + $admin = $gameStor->getValues(['year', 'month', 'fiction', 'startyear', 'show_img_level', 'turnterm', 'turntime', 'killturn']); $query = "select nation,name,level,gennum,tech from nation"; $nationresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); @@ -1030,6 +1030,28 @@ function updateNationState() { break; } + //유니크 아이템 하나 돌리자 + $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $admin['killturn']); + $uniqueLotteryWeightList = []; + + foreach($nationGenList as $nationGen){ + if($nationGen['horse'] > 6 || $nationGen['weap'] > 6 || $nationGen['book'] > 6 || $nationGen['item'] > 6){ + continue; + } + $score = $nationGen['belong'] + 5; //임관 년도 + 5 + if($nationGen['level'] == 12){ + $score += 200; //NOTE: 꼬우면 군주하세요. + } + else if($nationGen['level'] == 11){ + $score += 100; + } + else if($nationGen['level'] > 4){ + $score += 50; + } + $uniqueLotteryWeightList[$nationGen['no']] = $score; + } + guaranteedUniqueItemLottery($uniqueLotteryWeightList, '작위보상'); + $lastAssemblerID = $gameStor->assembler_id??0; for($levelGen = max(1, $oldLevel) + 1; $levelGen <= $nationlevel; $levelGen+=1){ diff --git a/hwe/j_server_basic_info.php b/hwe/j_server_basic_info.php index c34d3fa2..0939c241 100644 --- a/hwe/j_server_basic_info.php +++ b/hwe/j_server_basic_info.php @@ -90,7 +90,7 @@ $admin['fictionMode'] = $admin['fiction']?'가상':'사실'; $otherTextInfo = []; -if($options['join_mode'] == 'onlyRandom'){ +if($admin['join_mode'] == 'onlyRandom'){ $otherTextInfo[] = '랜덤 임관 전용'; } From 8cfc191e72aa6a036f1f88b41c19757e1f640ed8 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 00:58:56 +0900 Subject: [PATCH 09/23] =?UTF-8?q?=EC=82=AD=ED=84=B4=EC=97=90=20=EC=A1=B0?= =?UTF-8?q?=EA=B8=88=20=EC=97=AC=EC=9C=A0=EB=A5=BC=20=EC=A4=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index fc15e605..45c234cb 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1031,7 +1031,9 @@ function updateNationState() { } //유니크 아이템 하나 돌리자 - $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $admin['killturn']); + $targetKillTurn = $admin['killturn']; + $targetKillTurn -= Util::toInt($targetKillTurn / 10); + $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $targetKillTurn); $uniqueLotteryWeightList = []; foreach($nationGenList as $nationGen){ From b63471594bdf3ae3c240db6d122dc3b31d9343f2 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 01:00:10 +0900 Subject: [PATCH 10/23] =?UTF-8?q?=EC=97=AC=EC=9C=A0=EB=A5=BC=20'=EC=A0=88?= =?UTF-8?q?=EB=8C=80=20=EC=8B=9C=EA=B0=84'=20=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 45c234cb..1d0b66ca 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1032,7 +1032,7 @@ function updateNationState() { //유니크 아이템 하나 돌리자 $targetKillTurn = $admin['killturn']; - $targetKillTurn -= Util::toInt($targetKillTurn / 10); + $targetKillTurn -= 24 * 60 / $admin['turnterm']; $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $targetKillTurn); $uniqueLotteryWeightList = []; From 8831e70448d8f13de6f205ebe7fa8a6d95e905a2 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 01:26:05 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=EC=9E=91=EC=9C=84=EB=B3=B4=EC=83=81?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EB=87=8C=20=EB=B3=B4=EC=A0=95=EC=9D=84=20?= =?UTF-8?q?=EB=82=AE=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 1d0b66ca..9e502662 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1042,13 +1042,13 @@ function updateNationState() { } $score = $nationGen['belong'] + 5; //임관 년도 + 5 if($nationGen['level'] == 12){ - $score += 200; //NOTE: 꼬우면 군주하세요. + $score += 100; //NOTE: 꼬우면 군주하세요. } else if($nationGen['level'] == 11){ - $score += 100; + $score += 50; } else if($nationGen['level'] > 4){ - $score += 50; + $score += 25; } $uniqueLotteryWeightList[$nationGen['no']] = $score; } From b114735bb66ca069e57c2d4fb6823fa55e86c9e2 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 01:27:37 +0900 Subject: [PATCH 12/23] =?UTF-8?q?=EB=B3=B4=EC=A0=95=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 9e502662..1d0b66ca 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1042,13 +1042,13 @@ function updateNationState() { } $score = $nationGen['belong'] + 5; //임관 년도 + 5 if($nationGen['level'] == 12){ - $score += 100; //NOTE: 꼬우면 군주하세요. + $score += 200; //NOTE: 꼬우면 군주하세요. } else if($nationGen['level'] == 11){ - $score += 50; + $score += 100; } else if($nationGen['level'] > 4){ - $score += 25; + $score += 50; } $uniqueLotteryWeightList[$nationGen['no']] = $score; } From 7e2b01ef77298320e2c454da8ab00492039abc01 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 01:33:50 +0900 Subject: [PATCH 13/23] =?UTF-8?q?=EB=8F=99=EC=8B=9C=EC=97=90=20=EA=B4=80?= =?UTF-8?q?=EC=A7=81=EC=9D=B4=20=EC=97=AC=EB=9F=AC=EB=B2=88=20=EB=9B=B8?= =?UTF-8?q?=EB=95=8C=EC=97=90=EB=8F=84=20=EA=B4=80=EC=A7=81=20=EB=B3=B4?= =?UTF-8?q?=EC=83=81=20=EB=A7=8E=EC=9D=B4=20=EC=A4=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 46 ++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 1d0b66ca..f825ada5 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1005,8 +1005,10 @@ function updateNationState() { } if($nationlevel > $nation['level']) { + $levelDiff = $nationlevel - $nation['level']; $oldLevel = $nation['level']; $nation['level'] = $nationlevel; + switch($nationlevel) { case 7: @@ -1030,29 +1032,33 @@ function updateNationState() { break; } - //유니크 아이템 하나 돌리자 - $targetKillTurn = $admin['killturn']; - $targetKillTurn -= 24 * 60 / $admin['turnterm']; - $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $targetKillTurn); - $uniqueLotteryWeightList = []; + + foreach(range(1, $levelDiff) as $idx){ + //유니크 아이템 하나 돌리자 + $targetKillTurn = $admin['killturn']; + $targetKillTurn -= 24 * 60 / $admin['turnterm']; + $nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $targetKillTurn); + $uniqueLotteryWeightList = []; - foreach($nationGenList as $nationGen){ - if($nationGen['horse'] > 6 || $nationGen['weap'] > 6 || $nationGen['book'] > 6 || $nationGen['item'] > 6){ - continue; + foreach($nationGenList as $nationGen){ + if($nationGen['horse'] > 6 || $nationGen['weap'] > 6 || $nationGen['book'] > 6 || $nationGen['item'] > 6){ + continue; + } + $score = $nationGen['belong'] + 5; //임관 년도 + 5 + if($nationGen['level'] == 12){ + $score += 200; //NOTE: 꼬우면 군주하세요. + } + else if($nationGen['level'] == 11){ + $score += 100; + } + else if($nationGen['level'] > 4){ + $score += 50; + } + $uniqueLotteryWeightList[$nationGen['no']] = $score; } - $score = $nationGen['belong'] + 5; //임관 년도 + 5 - if($nationGen['level'] == 12){ - $score += 200; //NOTE: 꼬우면 군주하세요. - } - else if($nationGen['level'] == 11){ - $score += 100; - } - else if($nationGen['level'] > 4){ - $score += 50; - } - $uniqueLotteryWeightList[$nationGen['no']] = $score; + guaranteedUniqueItemLottery($uniqueLotteryWeightList, '작위보상'); } - guaranteedUniqueItemLottery($uniqueLotteryWeightList, '작위보상'); + $lastAssemblerID = $gameStor->assembler_id??0; From 7670f2f17c0e2f826d1babcf507512c3cc15fe18 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 14 Aug 2019 01:36:41 +0900 Subject: [PATCH 14/23] =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EB=B3=B4=EC=A0=95?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index f825ada5..9a7c520a 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1049,10 +1049,10 @@ function updateNationState() { $score += 200; //NOTE: 꼬우면 군주하세요. } else if($nationGen['level'] == 11){ - $score += 100; + $score += 70; } else if($nationGen['level'] > 4){ - $score += 50; + $score += 35; } $uniqueLotteryWeightList[$nationGen['no']] = $score; } From 04828450bc7756f0d30cd0bd35383469cec2a27e Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 15 Aug 2019 00:37:49 +0900 Subject: [PATCH 15/23] =?UTF-8?q?=EB=8B=A8=EC=88=9C=20=EA=B1=B4=EA=B5=AD?= =?UTF-8?q?=20=EC=83=81=ED=92=88=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 2 ++ hwe/func_process_personnel.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hwe/func.php b/hwe/func.php index 1e4ec85f..076da630 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -2350,6 +2350,7 @@ function uniqueItem($general, $log, $vote=0) { if($vote == 1) { $prob = Util::round($genCnt * 0.7 / 3); } // 투표율 70%, 투표 한번에 2~3개 등장 elseif($vote == 2) { $prob = Util::round($genCnt / 10 / 2); } // 랜임시 2개(10%) 등장(200명중 20명 랜임시도?) + elseif($vote == 3) { $prob = Util::round($genCnt / 10 / 4); } // 건국시 4개(20%) 등장(200명시 20국 정도 됨) if($prob < 3) { $prob = 3; } //아이템 습득 상황 @@ -2380,6 +2381,7 @@ function uniqueItem($general, $log, $vote=0) { switch($vote){ case 1: $voteTypeText = '설문상품'; break; case 2: $voteTypeText = '랜덤임관상품'; break; + case 3: $voteTypeText = '건국상품'; break; default: $voteTypeText = '아이템'; break; } diff --git a/hwe/func_process_personnel.php b/hwe/func_process_personnel.php index 86585d90..d8f115b4 100644 --- a/hwe/func_process_personnel.php +++ b/hwe/func_process_personnel.php @@ -770,7 +770,7 @@ function process_46(&$general) { $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); + $log = uniqueItem($general, $log, 3); } pushWorldHistory($history, $admin['year'], $admin['month']); From 1ca50aab1e873e39bd01028acf2bf7462f2c011f Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 15 Aug 2019 16:10:39 +0900 Subject: [PATCH 16/23] =?UTF-8?q?NPC=EA=B8=B0=EC=88=A0=EC=97=B0=EA=B5=AC?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EB=A7=88=EC=A0=80=20=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_npc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hwe/func_npc.php b/hwe/func_npc.php index 80be3c09..cf2d7bae 100644 --- a/hwe/func_npc.php +++ b/hwe/func_npc.php @@ -46,12 +46,12 @@ function SetDevelop($genType, $no, $city, $tech) { case 3: //지내정장 if($prob < 40) { if($city['ag'] < 99) { $command = EncodeCommand(0, 0, 0, 1); } //농업 - elseif($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술 + elseif(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술 elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장 else { $command = EncodeCommand(0, 0, 0, 9); } //조달 } elseif($prob < 80) { if($city['co'] < 99) { $command = EncodeCommand(0, 0, 0, 2); } //상업 - elseif($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술 + elseif(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술 elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장 else { $command = EncodeCommand(0, 0, 0, 9); } //조달 } elseif($prob < 90) { From 5e552678ef1751621fd08e34189a6b9c440dcce2 Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 15 Aug 2019 19:37:03 +0900 Subject: [PATCH 17/23] =?UTF-8?q?=EC=84=9C=EB=B2=84=EA=B0=80=20=EC=98=A4?= =?UTF-8?q?=ED=94=88=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9C=BC=EB=A9=B4=20?= =?UTF-8?q?=EB=B2=8C=EC=A0=90=EC=9D=B4=20=EB=8A=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hwe/func.php b/hwe/func.php index 076da630..bc9f4bdd 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1283,8 +1283,9 @@ function increaseRefresh($type="", $cnt=1) { $gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor->refresh = $gameStor->refresh+$cnt; //TODO: +로 증가하는 값은 별도로 분리 $isunited = $gameStor->isunited; + $opentime = $gameStor->opentime; - if($isunited != 2 && $generalID && $userGrade < 6) { + if($isunited != 2 && $generalID && $userGrade < 6 && $opentime <= TimeUtil::DatetimeNow()) { $db->update('general', [ 'lastrefresh'=>$date, 'con'=>$db->sqleval('con + %i', $cnt), From 9ee7140a46cb1b231a8df7097f91dceb558d574c Mon Sep 17 00:00:00 2001 From: hide_d Date: Fri, 16 Aug 2019 22:16:28 +0900 Subject: [PATCH 18/23] =?UTF-8?q?=EB=B6=80=EB=8C=80=20=EB=AA=85=EB=A0=B9?= =?UTF-8?q?=EC=9D=84=20json=20api=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_troop.php | 56 +++++++++++++--- hwe/c_troop.php | 66 ------------------- hwe/j_troop.php | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+), 76 deletions(-) delete mode 100644 hwe/c_troop.php create mode 100644 hwe/j_troop.php diff --git a/hwe/b_troop.php b/hwe/b_troop.php index be02541c..dfa673c1 100644 --- a/hwe/b_troop.php +++ b/hwe/b_troop.php @@ -81,6 +81,42 @@ uasort($troops, function($lhs, $rhs){ + @@ -88,7 +124,7 @@ uasort($troops, function($lhs, $rhs){
부 대 편 성
-
+ @@ -102,9 +138,9 @@ uasort($troops, function($lhs, $rhs){ @@ -133,7 +169,7 @@ foreach ($troops as $troopNo=>$troop) { - + @@ -152,15 +188,15 @@ foreach ($troops as $troopNo=>$troop) { - + "; $year = $admin['year']; @@ -120,11 +63,6 @@ function myCommandList() { } echo " -
- + - +
'>'>
");background-size:64px;'>  - "; - +
- + @@ -181,11 +217,11 @@ foreach ($troops as $troopNo=>$troop) { - + - + - +
부 대 명
diff --git a/hwe/c_troop.php b/hwe/c_troop.php deleted file mode 100644 index faed759b..00000000 --- a/hwe/c_troop.php +++ /dev/null @@ -1,66 +0,0 @@ -setReadOnly(); -$userID = $session::getUserID(); - -$db = DB::db(); - -$me = $db->queryFirstRow('SELECT `no`, nation, troop FROM general WHERE `owner`=%i', $userID); - -$name = trim($name); -if($btn == "부 대 창 설" && $name != "" && $me['troop'] == 0) { - $db->insert('troop',[ - 'name'=>$name, - 'nation'=>$me['nation'], - 'no'=>$me['no'] - ]); - $troopID = $db->insertId(); - - $db->update('general', [ - 'troop'=>$troopID - ], 'no=%i',$me['no']); -} elseif($btn == "부 대 변 경" && $name != "") { - $db->update('troop', [ - 'name'=>$name - ], 'no=%i',$me['no']); -} elseif($btn == "부 대 추 방" && $gen != 0) { - $db->update('general', [ - 'troop'=>0 - ], 'no=%i AND troop=(SELECT troop FROM troop WHERE no = %i)', $gen, $me['no']); -} elseif($btn == "부 대 가 입" && $troop != 0) { - $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troop); - $troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `nation`=%i', $troopLeader, $me['nation']); - if($troopLeaderNation){ - $db->update('general', [ - 'troop'=>$troop - ], 'no=%i', $me['no']); - } -} elseif($btn == "부 대 탈 퇴") { - $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $me['troop']); - - //부대장일 경우 - if($troopLeader == $me['no']) { - // 모두 탈퇴 - $db->update('general', [ - 'troop'=>0 - ], 'troop=%i',$me['troop']); - // 부대 삭제 - $db->delete('troop', 'troop=%i', $me['troop']); - } else { - $db->update('general', [ - 'troop'=>0 - ], 'no=%i', $me['no']); - } -} - -header('Location:b_troop.php', true, 303); diff --git a/hwe/j_troop.php b/hwe/j_troop.php new file mode 100644 index 00000000..431f228c --- /dev/null +++ b/hwe/j_troop.php @@ -0,0 +1,165 @@ +setReadOnly(); +$userID = $session::getUserID(); + +$db = DB::db(); + +$me = $db->queryFirstRow('SELECT `no`, name, nation, troop FROM general WHERE `owner`=%i', $userID); + + + +if($action == '부대창설'){ + $name = trim($name); + if(!$name){ + Json::die([ + 'result'=>false, + 'reason'=>'부대 이름이 없습니다.' + ]); + } + if($me['troop'] != 0){ + Json::die([ + 'result'=>false, + 'reason'=>'이미 부대에 가입해있습니다.' + ]); + } + $db->insert('troop',[ + 'name'=>$name, + 'nation'=>$me['nation'], + 'no'=>$me['no'] + ]); + $troopID = $db->insertId(); + + $db->update('general', [ + 'troop'=>$troopID + ], 'no=%i',$me['no']); + + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +if($action == '부대변경'){ + $name = trim($name); + if(!$name){ + Json::die([ + 'result'=>false, + 'reason'=>'부대 이름이 없습니다.' + ]); + } + + $db->update('troop', [ + 'name'=>$name + ], 'no=%i',$me['no']); + + if($db->affectedRows() == 0){ + Json::die([ + 'result'=>false, + 'reason'=>'부대장이 아닙니다.' + ]); + } + + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +if($action == '부대추방'){ + if (!$gen){ + Json::die([ + 'result'=>false, + 'reason'=>'장수를 지정해야 합니다.' + ]); + } + + $db->update('general', [ + 'troop'=>0 + ], 'no=%i AND troop=(SELECT troop FROM troop WHERE no = %i)', $gen, $me['no']); + + if($db->affectedRows() == 0){ + Json::die([ + 'result'=>false, + 'reason'=>'부대장이 아니거나, 장수를 잘못 지정했습니다.' + ]); + } + + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +if ($action == '부대가입') { + if(!$troop){ + Json::die([ + 'result'=>false, + 'reason'=>'부대를 지정해야 합니다.' + ]); + } + + $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troop)?:0; + $troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `nation`=%i', $troopLeader, $me['nation']); + + if (!$troopLeaderNation) { + Json::die([ + 'result'=>false, + 'reason'=>'올바른 부대장이 아닙니다.' + ]); + } + + $db->update('general', [ + 'troop'=>$troop + ], 'no=%i', $me['no']); + + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +if($action == "부대탈퇴") { + + if($me['troop'] == 0){ + Json::die([ + 'result'=>false, + 'reason'=>'부대에 속해있지 않습니다.' + ]); + } + $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $me['troop']); + + //부대장일 경우 + if($troopLeader == $me['no']) { + // 모두 탈퇴 + $db->update('general', [ + 'troop'=>0 + ], 'troop=%i',$me['troop']); + // 부대 삭제 + $db->delete('troop', 'troop=%i', $me['troop']); + } else { + $db->update('general', [ + 'troop'=>0 + ], 'no=%i', $me['no']); + } + + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 명령입니다.' +]); \ No newline at end of file From 57eac83b1b99b8d3254a195e1d3f895581f84315 Mon Sep 17 00:00:00 2001 From: hide_d Date: Fri, 16 Aug 2019 23:27:28 +0900 Subject: [PATCH 19/23] =?UTF-8?q?=EB=A7=88=EC=A7=80=EB=A7=89=20=EB=82=A8?= =?UTF-8?q?=EC=9D=80=20iframe=20=EC=95=88=EB=85=95!!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nt-timezone-with-data-10-year-range.min.js | 1 + hwe/commandlist.php | 70 ++----------------- hwe/func_command.php | 54 ++++++-------- hwe/index.php | 7 +- ...{preprocessing.php => j_preprocessing.php} | 8 ++- hwe/j_turn.php | 64 ++++++++++++++++- hwe/js/main.js | 69 +++++++++++++++--- hwe/turn.php | 65 ----------------- 8 files changed, 162 insertions(+), 176 deletions(-) create mode 100644 e_lib/moment-timezone-with-data-10-year-range.min.js rename hwe/{preprocessing.php => j_preprocessing.php} (97%) delete mode 100644 hwe/turn.php diff --git a/e_lib/moment-timezone-with-data-10-year-range.min.js b/e_lib/moment-timezone-with-data-10-year-range.min.js new file mode 100644 index 00000000..64a16c0f --- /dev/null +++ b/e_lib/moment-timezone-with-data-10-year-range.min.js @@ -0,0 +1 @@ +!function(a,i){"use strict";"object"==typeof module&&module.exports?module.exports=i(require("moment")):"function"==typeof define&&define.amd?define(["moment"],i):i(a.moment)}(this,function(c){"use strict";var i,A={},n={},s={},u={};c&&"string"==typeof c.version||L("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var a=c.version.split("."),e=+a[0],r=+a[1];function t(a){return 96= 2.6.0. You are using Moment.js "+c.version+". See momentjs.com"),p.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i= 2.9.0. You are using Moment.js "+c.version+"."),c.defaultZone=a?P(a):null,c};var y=c.momentProperties;return"[object Array]"===Object.prototype.toString.call(y)?(y.push("_z"),y.push("_a")):y&&(y._z=null),_({version:"2019a",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|01010101010101010101010101010101|1LHC0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00","Africa/Tripoli|EET|-20|0||11e5","Africa/Windhoek|CAT WAT|-20 -10|010101010|1LKo0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1Lzo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1Lzn0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1LEP0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1LKw0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|20e6","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1Lzl0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|01010101010101010101010|1LqP0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0|77e4","America/Cancun|CST CDT EST|60 50 50|0102|1LKw0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1Lzk0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1LKx0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1Lzm0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1Lzj0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Fort_Nelson|PST PDT MST|80 70 70|0102|1Lzm0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1Lzi0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|17e3","America/Grand_Turk|EST EDT AST|50 40 40|0101210101010101010|1Lzj0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1Lzh0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|012121201212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1Lzh0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|0101|1Lzg0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1Lzj0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|01010|1LSP0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1LSP0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0|62e5","America/Sao_Paulo|-02 -03|20 30|01010101010101010101010|1LqO0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1Lzhu 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+08 +11|-80 -b0|010|1RWg0 3m10|10","Asia/Bangkok|+07|-70|0||15e6","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Guadalcanal|+11|-b0|0||11e4","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1LKe0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|01010101010101010101010|1LGK0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|01010|1LHA0 1o00 11A0 1o00|27e5","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1LHy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1LGK0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101012010101010101010|1LHB0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1LGK0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|0101012|1LI10 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1LGM0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1LEku 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1LKg0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1LKgu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1LKf0 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1LSP0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|12e5","Etc/GMT-1|+01|-10|0|","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0|","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0|","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0|","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0|","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1LHA0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810","Europe/Simferopol|EET MSK MSK|-20 -40 -30|012|1LHA0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|010|1N7y0 9Jd0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1LHB0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1LKe0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1LKe0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Lfp0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Juba","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Araguaina","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Bahia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Eirunepe","America/Lima|America/Guayaquil","America/Lima|America/Porto_Acre","America/Lima|America/Rio_Branco","America/Lima|Brazil/Acre","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Antarctica/Davis","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Antarctica/Macquarie","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"]}),c}); \ No newline at end of file diff --git a/hwe/commandlist.php b/hwe/commandlist.php index 35ec1877..ee586cd7 100644 --- a/hwe/commandlist.php +++ b/hwe/commandlist.php @@ -8,66 +8,10 @@ $session = Session::getInstance()->setReadOnly(); $db = DB::db(); -?> - - - -커맨드리스트 - - - - - - - - - -'); } -?> -function myclock() { - lastday = new Array(31,28,31,30,31,30,31,31,30,31,30,31); - date = document.clock.clock.value; - - year = parseInt(date.substr(0, 4), 10); - month = parseInt(date.substr(5,2), 10); - day = parseInt(date.substr(8, 2), 10); - hour = parseInt(date.substr(11, 2), 10); - min = parseInt(date.substr(14, 2), 10); - sec = parseInt(date.substr(17, 2), 10); - - //윤년계산 - if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { lastday[1] = 29; } - else { lastday[1] = 28; } - -// if(term > 0) term--; - - sec++; - if(sec >= 60) { sec = 0; min++; } - if(min >= 60) { min = 0; hour++; } - if(hour >= 24) { hour = 0; day++; } - if(day > lastday[month-1]) { month++; day = 1; } - if(month >= 13) { year++; month = 1; } - if(month < 10) { month = '0' + month; } - if(day < 10) { day = '0' + day; } - if(hour < 10) { hour = '0' + hour; } - if(min < 10) { min = '0' + min; } - if(sec < 10) { sec = '0' + sec; } - date = '' + year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec; - - document.clock.clock.value = date; - - window.setTimeout("myclock();", 1000); -} - - - - - -
- 명령 목록 - - 명령 목록 -
"; -} -?> - - - +} \ No newline at end of file diff --git a/hwe/func_command.php b/hwe/func_command.php index 4bd39859..12874364 100644 --- a/hwe/func_command.php +++ b/hwe/func_command.php @@ -720,8 +720,11 @@ where nation='{$general['nation']}' function command_Single($turn, $command) { if(!$turn){ - header('location:commandlist.php', true, 303); - return; + Json::die([ + 'result'=>true, + 'nextPage'=>null, + 'reason'=>'invalid turn' + ]); } $db = DB::db(); @@ -735,7 +738,11 @@ function command_Single($turn, $command) { } $db->update('general', $setValues, 'owner=%i',$userID); - header('location:commandlist.php', true, 303); + Json::die([ + 'result'=>true, + 'nextPage'=>null, + 'reason'=>'success' + ]); } function command_Chief($turn, $command) { @@ -762,37 +769,22 @@ function command_Chief($turn, $command) { } function command_Other($turn, $commandtype) { - - $target = "processing.php?commandtype={$commandtype}"; - foreach($turn as $turnItem){ - $target.="&turn[]={$turnItem}"; + if(!$turn){ + Json::die([ + 'result'=>true, + 'nextPage'=>null, + 'reason'=>'invalid turn' + ]); } - $target.="&".mt_rand(); - ?> - - - - - - - - - - - - - - - -> -  - @@ -241,9 +244,9 @@ else if($session->userGrade == 4){ - + -
+ diff --git a/hwe/preprocessing.php b/hwe/j_preprocessing.php similarity index 97% rename from hwe/preprocessing.php rename to hwe/j_preprocessing.php index af363d27..31926d8f 100644 --- a/hwe/preprocessing.php +++ b/hwe/j_preprocessing.php @@ -4,7 +4,7 @@ namespace sammo; include "lib.php"; include "func.php"; //로그인 검사 -$session = Session::requireGameLogin()->setReadOnly(); +$session = Session::requireGameLogin([])->setReadOnly(); $userID = Session::getUserID(); $db = DB::db(); @@ -17,8 +17,10 @@ $commandtype = Util::getReq('commandtype', 'int'); increaseRefresh("턴입력", 1); if(!$turn || $commandtype === null || $sel === null){ - header('location:commandlist.php', true, 303); - die(); + Json::die([ + 'result'=>true, + 'reason'=>'empty command' + ]); } $count = count($turn); diff --git a/hwe/j_turn.php b/hwe/j_turn.php index 4a72aa63..97d6a875 100644 --- a/hwe/j_turn.php +++ b/hwe/j_turn.php @@ -6,4 +6,66 @@ include "func.php"; -$session = Session::requireGameLogin([])->setReadOnly(); \ No newline at end of file +$session = Session::requireGameLogin([])->setReadOnly(); + +$type = Util::getReq('type', 'int', 0); +$sel = Util::getReq('sel', 'int', 1); + +if($sel <= 0 || $sel > 12){ + $sel = 1; +} + +$userID = Session::getUserID(); + +$db = DB::db(); +$gameStor = KVStorage::getStorage($db, 'game_env'); + +increaseRefresh("턴반복", 1); + +$myActionCnt = $db->queryFirstField('SELECT con FROM general WHERE `owner`=%i', $userID); + +$con = checkLimit($myActionCnt); +if($con >= 2) { + Json::die([ + 'result'=>false, + 'result'=>'접속 제한입니다.' + ]); + } + +switch($type) { +case 0://반복 + $valueMap = []; + foreach(range($sel, GameConst::$maxTurn - 1) as $idx){ + $src = $idx % $sel; + $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); + } + $db->update('general', $valueMap, 'owner=%i', $userID); + break; +case 1: + $valueMap = []; + foreach(range(GameConst::$maxTurn -1, $sel, -1) as $idx){ + $src = $idx - $sel; + $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); + } + foreach(range($sel -1, 0, -1) as $idx){ + $valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0); + } + $db->update('general', $valueMap, 'owner=%i', $userID); + break; +case 2: + $valueMap = []; + foreach(range(0, GameConst::$maxTurn - $sel - 1) as $idx){ + $src = $idx + $sel; + $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); + } + foreach(range(GameConst::$maxTurn - $sel, GameConst::$maxTurn - 1) as $idx){ + $valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0); + } + $db->update('general', $valueMap, 'owner=%i', $userID); + break; +} + +Json::die([ + 'result'=>true, + 'result'=>'success' +]); \ No newline at end of file diff --git a/hwe/js/main.js b/hwe/js/main.js index fa79b5c3..c67f217c 100644 --- a/hwe/js/main.js +++ b/hwe/js/main.js @@ -28,7 +28,7 @@ function refreshing(obj, arg1, arg2) { switch(arg1) { case 0: document.location.reload(); break; case 2: turn(arg2); break; - case 3: arg2.submit(); break; + case 3: $(arg2).submit(); break; case 4: arg2.submit(); message.msg.value = ""; @@ -39,14 +39,38 @@ function refreshing(obj, arg1, arg2) { return false; } -function moveProcessing(commandtype, turn){ - console.log(commandtype, turn); - $.redirect("processing.php",{ commandtype: commandtype, turn: turn}, 'post'); +function turn(type) { + $.post({ + url:'j_turn.php', + dataType:'json', + data:{ + type:type, + sel:form2.sel.value + } + }).then(function(data){ + if(!data.result){ + alert(data.reason); + } + reloadCommandList(); + }); } -function turn(type) { - num = form2.sel.value; - commandlist.location.replace('turn.php?type=' + type + '&sel=' + num); +function reloadCommandList(){ + $.get({ + url:'commandlist.php', + cache: false, + }).then(function(rdata){ + $('#commandlist').html(rdata); + }); +} + +function myclock() { + + $('#clock').val(moment().tz('Asia/Seoul').format('YYYY-MM-DD HH:mm:ss')); + + window.setTimeout(function(){ + myclock(); + }, 1000); } jQuery(function($){ @@ -54,11 +78,40 @@ jQuery(function($){ var $this = $(this); var target = $('[name="genlist"]').val(); var msg = $('#msg').val(); - console.log(target, msg); return false; }); $('#mainBtnSubmit').click(function(){ }); + + $('#form2').submit(function(){ + var values = $(this).serializeArray(); + console.log(values); + $.post({ + url:'j_preprocessing.php', + dataType:'json', + data:values + }).then(function(data){ + if(!data.result){ + alert(data.reason); + reloadCommandList(); + return; + } + + if(!data.nextPage){ + reloadCommandList(); + return; + } + + document.location = data.nextPage; + return; + }, function(){ + alert('알 수 없는 에러'); + location.reload(); + }); + return false; + }); + + myclock(); }); \ No newline at end of file diff --git a/hwe/turn.php b/hwe/turn.php deleted file mode 100644 index 2910641b..00000000 --- a/hwe/turn.php +++ /dev/null @@ -1,65 +0,0 @@ - 12){ - $sel = 1; -} - -$session = Session::requireGameLogin()->setReadOnly(); -$userID = Session::getUserID(); - -$db = DB::db(); -$gameStor = KVStorage::getStorage($db, 'game_env'); -$connect=$db->get(); - -increaseRefresh("턴반복", 1); - -$myActionCnt = $db->queryFirstField('SELECT con FROM general WHERE `owner`=%i', $userID); - -$con = checkLimit($myActionCnt); -if($con >= 2) { - header('location:commandlist.php', true, 303); - exit(); - } - -switch($type) { -case 0://반복 - $valueMap = []; - foreach(range($sel, GameConst::$maxTurn - 1) as $idx){ - $src = $idx % $sel; - $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); - } - $db->update('general', $valueMap, 'owner=%i', $userID); - break; -case 1: - $valueMap = []; - foreach(range(GameConst::$maxTurn -1, $sel, -1) as $idx){ - $src = $idx - $sel; - $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); - } - foreach(range($sel -1, 0, -1) as $idx){ - $valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0); - } - $db->update('general', $valueMap, 'owner=%i', $userID); - break; -case 2: - $valueMap = []; - foreach(range(0, GameConst::$maxTurn - $sel - 1) as $idx){ - $src = $idx + $sel; - $valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src); - } - foreach(range(GameConst::$maxTurn - $sel, GameConst::$maxTurn - 1) as $idx){ - $valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0); - } - $db->update('general', $valueMap, 'owner=%i', $userID); - break; -} - -header('location:commandlist.php', true, 303); From 34a3c1c8abd4f81d2a823ebee67ca293a9c0b7bc Mon Sep 17 00:00:00 2001 From: hide_d Date: Fri, 16 Aug 2019 23:42:46 +0900 Subject: [PATCH 20/23] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=EC=9D=84=20=EB=8D=94=20=EC=A0=95=EA=B5=90=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/commandlist.php | 3 ++- hwe/index.php | 1 - hwe/js/main.js | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/hwe/commandlist.php b/hwe/commandlist.php index ee586cd7..e011a574 100644 --- a/hwe/commandlist.php +++ b/hwe/commandlist.php @@ -20,6 +20,7 @@ function myCommandList() { $userID = Session::getUserID(); $date = date('Y-m-d H:i:s'); + $date_precise = (new \DateTime())->format("Y-m-d H:i:s.u"); // 명령 목록 $admin = $gameStor->getValues(['year','month','turnterm','turntime','opentime']); @@ -33,7 +34,7 @@ function myCommandList() { echo " - + "; $year = $admin['year']; diff --git a/hwe/index.php b/hwe/index.php index 42dc6d06..deab7481 100644 --- a/hwe/index.php +++ b/hwe/index.php @@ -91,7 +91,6 @@ $serverCnt = $db->queryFirstField('SELECT count(*) FROM ng_games'); - diff --git a/hwe/js/main.js b/hwe/js/main.js index c67f217c..bb92e7b3 100644 --- a/hwe/js/main.js +++ b/hwe/js/main.js @@ -66,11 +66,21 @@ function reloadCommandList(){ function myclock() { - $('#clock').val(moment().tz('Asia/Seoul').format('YYYY-MM-DD HH:mm:ss')); + var $clock = $('#clock'); + var now_clock = moment(); + + if(!$clock.attr('data-time-diff')){ + var base_clock = moment($clock.attr('data-server-time')); + $clock.attr('data-time-diff', base_clock.diff(now_clock)); + } + + var game_clock = now_clock.add(parseInt($clock.attr('data-time-diff')), 'milliseconds'); + + $('#clock').val(game_clock.format('YYYY-MM-DD HH:mm:ss')); window.setTimeout(function(){ myclock(); - }, 1000); + }, 500); } jQuery(function($){ From 4653f39b57a5a8ec0e13970e20f7b95c4b5045cd Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 18 Aug 2019 00:46:39 +0900 Subject: [PATCH 21/23] =?UTF-8?q?=EB=B6=80=EB=8C=80=ED=83=88=ED=87=B4=20?= =?UTF-8?q?=EC=8B=9C=20propergation=20=EC=B2=98=EB=A6=AC=20=EC=8B=A4?= =?UTF-8?q?=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_troop.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hwe/b_troop.php b/hwe/b_troop.php index dfa673c1..9a823843 100644 --- a/hwe/b_troop.php +++ b/hwe/b_troop.php @@ -87,8 +87,14 @@ jQuery(function($){ $('#form1').submit(function(){ return false; }); - -$('.submitBtn').click(function(){ +$('#leaveTroop').click(function(e){ + return confirm("정말 부대를 탈퇴하시겠습니까?"); +}) +$('.submitBtn').click(function(event){ + if(event.isPropagationStopped()){ + return false; + } + console.log('b'); var $this=$(this); $.post({ @@ -140,7 +146,7 @@ $('.submitBtn').click(function(){ - + From 7d13a157f144059f4a1b0670e2044ace38fbc957 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 18 Aug 2019 17:50:38 +0900 Subject: [PATCH 22/23] =?UTF-8?q?=EC=9E=A5=EC=88=98=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=8B=9C=20=EB=B9=A0=EB=A5=B4=EA=B2=8C=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EB=82=A0=EB=A0=A4=20=EC=A4=91=EB=B3=B5=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=98=EB=8A=94=20=EA=B2=83=EC=9D=B4=20=EB=B6=88?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_select_npc.php | 4 ++++ hwe/join_post.php | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/hwe/j_select_npc.php b/hwe/j_select_npc.php index 3909a753..edb0e66b 100644 --- a/hwe/j_select_npc.php +++ b/hwe/j_select_npc.php @@ -71,6 +71,8 @@ if ($gencount >= $maxgeneral) { ]); } +$db->query("lock tables plock write"); + //등록 시작 $db->update('general', [ 'name2'=>$userNick, @@ -81,6 +83,8 @@ $db->update('general', [ 'owner'=>$userID, ], 'owner <= 0 AND npc = 2 AND no = %i', $pick); +$db->query("unlock tables"); + if(!$db->affectedRows()){ Json::die([ 'result'=>false, diff --git a/hwe/join_post.php b/hwe/join_post.php index a7e0395f..507e0d4e 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -71,6 +71,8 @@ $gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor->cacheValues(['year','month','maxgeneral','scenario','show_img_level','turnterm','turntime','genius','npcmode']); ########## 동일 정보 존재여부 확인. ########## +$db->query("lock tables plock write"); + $gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'); $oldGeneral = $db->queryFirstField('SELECT `no` FROM general WHERE `owner`=%i', $userID); $oldName = $db->queryFirstField('SELECT `no` FROM general WHERE `name`=%s', $name); @@ -80,6 +82,7 @@ if ($oldGeneral) { window.alert('이미 등록하셨습니다!') history.go(-1) "); + $db->query("unlock tables"); exit; } if ($oldName) { @@ -87,6 +90,7 @@ if ($oldName) { window.alert('이미 있는 장수입니다. 다른 이름으로 등록해 주세요!') history.go(-1) "); + $db->query("unlock tables"); exit; } if ($gameStor->maxgeneral <= $gencount) { @@ -94,6 +98,7 @@ if ($gameStor->maxgeneral <= $gencount) { window.alert('더이상 등록할 수 없습니다!') history.go(-1) "); + $db->query("unlock tables"); exit; } if (mb_strlen($name) < 1) { @@ -101,6 +106,7 @@ if (mb_strlen($name) < 1) { window.alert('이름이 짧습니다. 다시 가입해주세요!') history.go(-1) "); + $db->query("unlock tables"); exit; } if (mb_strlen($name) > 9) { @@ -108,6 +114,7 @@ if (mb_strlen($name) > 9) { window.alert('이름이 유효하지 않습니다. 다시 가입해주세요!') history.go(-1) "); + $db->query("unlock tables"); exit; } if ($leader + $power + $intel > GameConst::$defaultStatTotal) { @@ -115,6 +122,7 @@ if ($leader + $power + $intel > GameConst::$defaultStatTotal) { window.alert('능력치가 ".GameConst::$defaultStatTotal."을 넘어섰습니다. 다시 가입해주세요!') history.go(-1) "); + $db->query("unlock tables"); exit; } @@ -247,6 +255,8 @@ $db->insert('general', [ ]); $generalID = $db->insertId(); +$db->query("unlock tables"); + $cityname = CityConst::byID($city)->name; $me = [ From ae302f219e80a374bf5c85954c43727612fb3777 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 18 Aug 2019 18:01:11 +0900 Subject: [PATCH 23/23] =?UTF-8?q?=EB=B9=99=EC=9D=98=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85/=EB=B9=99=EC=9D=98=20=EC=8B=9C=20=EB=9D=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_select_npc.php | 25 ++++++++++++++++--------- hwe/join_post.php | 2 +- js/entrance.js | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/hwe/j_select_npc.php b/hwe/j_select_npc.php index edb0e66b..819f3547 100644 --- a/hwe/j_select_npc.php +++ b/hwe/j_select_npc.php @@ -22,6 +22,13 @@ $rootDB = RootDB::db(); $oNow = new \DateTimeImmutable(); $now = $oNow->format('Y-m-d H:i:s'); +list( + $year, + $month, + $maxgeneral, + $npcmode +) = $gameStor->getValuesAsArray(['year', 'month', 'maxgeneral', 'npcmode']); + $userNick = RootDB::db()->queryFirstField('SELECT `NAME` FROM member WHERE `NO`=%i',$userID); if(!$userNick){ Json::die([ @@ -30,6 +37,8 @@ if(!$userNick){ ]); } +$db->query("lock tables general write, select_npc_token write"); + $pickResult = $db->queryFirstField('SELECT pick_result FROM select_npc_token WHERE `owner`=%i AND `valid_until`>=%s', $userID, $now); if(!$pickResult){ Json::die([ @@ -38,7 +47,6 @@ if(!$pickResult){ ]); } - $pickResult = Json::decode($pickResult); if(!key_exists($pick, $pickResult)){ Json::die([ @@ -50,14 +58,9 @@ $pickedNPC = $pickResult[$pick]; $gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'); -list( - $year, - $month, - $maxgeneral, - $npcmode -) = $gameStor->getValuesAsArray(['year', 'month', 'maxgeneral', 'npcmode']); if(!$npcmode){ + $db->query("unlock tables"); Json::die([ 'result'=>false, 'reason'=>'빙의 가능한 서버가 아닙니다' @@ -65,13 +68,14 @@ if(!$npcmode){ } if ($gencount >= $maxgeneral) { + $db->query("unlock tables"); Json::die([ 'result'=>false, 'reason'=>'더 이상 등록 할 수 없습니다.' ]); } -$db->query("lock tables plock write"); + //등록 시작 $db->update('general', [ @@ -83,9 +87,10 @@ $db->update('general', [ 'owner'=>$userID, ], 'owner <= 0 AND npc = 2 AND no = %i', $pick); -$db->query("unlock tables"); + if(!$db->affectedRows()){ + $db->query("unlock tables"); Json::die([ 'result'=>false, 'reason'=>'장수 등록에 실패했습니다.' @@ -94,6 +99,8 @@ if(!$db->affectedRows()){ $db->delete('select_npc_token', 'owner=%i or valid_until < %s', $userID, $now); +$db->query("unlock tables"); + $josaYi = JosaUtil::pick($userNick, '이'); pushGeneralHistory($pickedNPC, "●{$year}년 {$month}월:{$pickedNPC['name']}의 육체에 {$userNick}{$josaYi} 빙의되다."); //pushGenLog($me, $mylog); diff --git a/hwe/join_post.php b/hwe/join_post.php index 507e0d4e..20420676 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -71,7 +71,7 @@ $gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor->cacheValues(['year','month','maxgeneral','scenario','show_img_level','turnterm','turntime','genius','npcmode']); ########## 동일 정보 존재여부 확인. ########## -$db->query("lock tables plock write"); +$db->query("lock tables general write, city read, storage read"); $gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'); $oldGeneral = $db->queryFirstField('SELECT `no` FROM general WHERE `owner`=%i', $userID); diff --git a/js/entrance.js b/js/entrance.js index 4608fbff..0657302d 100644 --- a/js/entrance.js +++ b/js/entrance.js @@ -149,7 +149,7 @@ function Entrance_drawServerList(serverInfos){ TemplateEngine(serverFullTemplate, {}) ); } - else if(game.npcMode == '가눙'){ + else if(game.npcMode == '가능'){ $serverHtml.append( TemplateEngine(serverCreateAndSelectTemplate, {serverPath:serverPath}) ).addClass('server_create_and_select');
- 명령 목록 - - 명령 목록 -