diff --git a/hwe/_119.php b/hwe/_119.php
index 576e1b1c..65de2e5a 100644
--- a/hwe/_119.php
+++ b/hwe/_119.php
@@ -13,6 +13,9 @@ $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
[$turntime, $tnmt_time] = $gameStor->getValuesAsArray(['turntime','tnmt_time']);
+$clock = GameClock::fromStorage($gameStor);
+$turntimeDisplay = $clock->formatTick(Util::toInt($turntime), true);
+$tnmtTimeDisplay = $tnmt_time === null ? '-' : $clock->formatTick(Util::toInt($tnmt_time), true);
$plock = $db->queryFirstField('SELECT plock FROM plock WHERE `type` ="GAME"');
?>
@@ -30,8 +33,8 @@ $plock = $db->queryFirstField('SELECT plock FROM plock WHERE `type` ="GAME"');
diff --git a/hwe/_119_b.php b/hwe/_119_b.php
index 84158b73..18472c12 100644
--- a/hwe/_119_b.php
+++ b/hwe/_119_b.php
@@ -38,21 +38,9 @@ switch ($btn) {
usleep(500000);
}
- $gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
- $turntime = (new \DateTimeImmutable($gameStor->turntime))->sub(new \DateInterval("PT{$minute}M"));
- $starttime = (new \DateTimeImmutable($gameStor->starttime))->sub(new \DateInterval("PT{$minute}M"));
- $tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->sub(new \DateInterval("PT{$minute}M"));
-
- $gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
- $gameStor->starttime = $starttime->format('Y-m-d H:i:s');
- $gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
-
- $db->update('general', [
- 'turntime' => $db->sqleval('DATE_SUB(turntime, INTERVAL %i MINUTE)', $minute)
- ], true);
- $db->update('ng_auction', [
- 'close_date' => $db->sqleval('DATE_SUB(close_date, INTERVAL %i MINUTE)', $minute)
- ], 'finished = 0');
+ $clock = GameClock::fromStorage($gameStor);
+ // 스케줄 전체를 벽시계에서 빼지 않고 논리 현재 tick만 앞으로 이동합니다.
+ $clock->advance($gameStor, $clock->ticksFromMinutes($minute));
if ($locked) {
unlock();
}
@@ -66,34 +54,19 @@ switch ($btn) {
}
usleep(500000);
}
- $gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
- $turntime = (new \DateTimeImmutable($gameStor->turntime))->add(new \DateInterval("PT{$minute}M"));
- $starttime = (new \DateTimeImmutable($gameStor->starttime))->add(new \DateInterval("PT{$minute}M"));
- $tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->add(new \DateInterval("PT{$minute}M"));
-
- $gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
- $gameStor->starttime = $starttime->format('Y-m-d H:i:s');
- $gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
-
- $db->update('general', [
- 'turntime' => $db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
- ], true);
- $db->update('ng_auction', [
- 'close_date' => $db->sqleval('DATE_ADD(close_date, INTERVAL %i MINUTE)', $minute)
- ], 'finished = 0');
+ $clock = GameClock::fromStorage($gameStor);
+ $clock->advance($gameStor, -$clock->ticksFromMinutes($minute));
if ($locked) {
unlock();
}
break;
case "토너분당김":
- $tnmt_time = new \DateTime($gameStor->tnmt_time);
- $tnmt_time->sub(new \DateInterval("PT{$minute2}M"));
- $gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
+ $clock = GameClock::fromStorage($gameStor);
+ $gameStor->tnmt_time = Util::toInt($gameStor->tnmt_time) - $clock->ticksFromMinutes($minute2);
break;
case "토너분지연":
- $tnmt_time = new \DateTimeImmutable($gameStor->tnmt_time);
- $tnmt_time->add(new \DateInterval("PT{$minute2}M"));
- $gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
+ $clock = GameClock::fromStorage($gameStor);
+ $gameStor->tnmt_time = Util::toInt($gameStor->tnmt_time) + $clock->ticksFromMinutes($minute2);
break;
case "금지급":
processGoldIncome();
diff --git a/hwe/_admin1.php b/hwe/_admin1.php
index 069a5ab9..e2a80b8a 100644
--- a/hwe/_admin1.php
+++ b/hwe/_admin1.php
@@ -40,7 +40,7 @@ $admin = getAdmin();
| 시작시간변경 |
- '> |
+ '> |
| 최대 장수 |
@@ -52,7 +52,7 @@ $admin = getAdmin();
시작 년도 |
'> |
최근 갱신 시간 |
- =$admin['turntime']?> |
+ =$admin['turntime_display']?> (tick =$admin['turntime']?>) |
| 턴시간 |
diff --git a/hwe/_admin1_submit.php b/hwe/_admin1_submit.php
index 48e66e6a..47732316 100644
--- a/hwe/_admin1_submit.php
+++ b/hwe/_admin1_submit.php
@@ -25,13 +25,15 @@ if (!$v->validate()) {
$msg = Util::getPost('msg');
$btn = Util::getPost('btn');
$log = Util::getPost('log');
-$starttime = Util::getPost('starttime', 'string', (new \DateTime())->format('Y-m-d H:i:s'));
+$starttime = Util::getPost('starttime', 'string', null);
$maxgeneral = Util::getPost('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
$maxnation = Util::getPost('maxnation', 'int', GameConst::$defaultMaxNation);
$startyear = Util::getPost('startyear', 'int', GameConst::$defaultStartYear);
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
+$clock = GameClock::fromStorage($gameStor);
+$starttime ??= $clock->formatTick($clock->nowTick());
$admin = getAdmin();
@@ -43,7 +45,11 @@ switch ($btn) {
pushGlobalHistoryLog(["★>{$log}>"]);
break;
case "변경1":
- $gameStor->starttime = (new \DateTime($starttime))->format('Y-m-d H:i:s');
+ $gameStor->clock_base_time = TimeUtil::format(GameClock::baseTimeForProjection(
+ new \DateTimeImmutable($starttime),
+ Util::toInt($gameStor->starttime),
+ $clock->getTurnTermMinutes(),
+ ), true);
break;
case "변경2":
$gameStor->maxgeneral = $maxgeneral;
@@ -78,4 +84,4 @@ switch ($btn) {
break;
}
-header('location:_admin1.php');
\ No newline at end of file
+header('location:_admin1.php');
diff --git a/hwe/_admin2_submit.php b/hwe/_admin2_submit.php
index 54d63b35..d2502089 100644
--- a/hwe/_admin2_submit.php
+++ b/hwe/_admin2_submit.php
@@ -99,7 +99,7 @@ switch ($btn) {
], '`no` IN %li', $genlist);
break;
case "강제 사망":
- $date = TimeUtil::now(true);
+ $date = GameClock::fromStorage($gameStor)->nowTick();
$db->update('general', [
'killturn' => 0,
'turntime' => $date,
@@ -113,7 +113,7 @@ switch ($btn) {
case "경험치1000":
$text = $btn . " 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -124,7 +124,7 @@ switch ($btn) {
case "공헌치1000":
$text = $btn . " 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -135,7 +135,7 @@ switch ($btn) {
case "보숙10000":
$text = "보병숙련도+10000 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -145,7 +145,7 @@ switch ($btn) {
case "궁숙10000":
$text = "궁병숙련도+10000 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -156,7 +156,7 @@ switch ($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "기병숙련도+10000 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -167,7 +167,7 @@ switch ($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "귀병숙련도+10000 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -178,7 +178,7 @@ switch ($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "차병숙련도+10000 지급!";
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general', [
@@ -198,7 +198,7 @@ switch ($btn) {
case "메세지 전달":
$text = $msg ?? '';
foreach ($genlist as $generalID) {
- $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
+ $msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
break;
diff --git a/hwe/_admin7.php b/hwe/_admin7.php
index 8623f9c2..c335ee49 100644
--- a/hwe/_admin7.php
+++ b/hwe/_admin7.php
@@ -42,6 +42,7 @@ if ($session->userGrade < 6) {
}
$db = DB::db();
+$clock = GameClock::fromStorage(KVStorage::getStorage($db, 'game_env'));
if ($btn == '정렬하기') {
$gen = 0;
@@ -111,7 +112,7 @@ $generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAcc
대상장수 :
@@ -179,4 +180,4 @@ $generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAcc
-