diff --git a/hwe/sammo/ServerTool.php b/hwe/sammo/ServerTool.php new file mode 100644 index 00000000..dc1cf690 --- /dev/null +++ b/hwe/sammo/ServerTool.php @@ -0,0 +1,79 @@ +getValues(['turntime', 'turnterm', 'year', 'startyear', 'month', 'isunited']); + + $reqGameLock = $admin['isunited'] != 2; + + $locked = false; + if($reqGameLock){ + for ($i = 0; $i < 5; $i++) { + $locked = tryLock(); + if ($locked) { + break; + } + usleep(500000); + } + + if (!$locked) { + return 'server busy'; + } + } + else{ + $locked = tryLock(); + } + + $oldunit = $admin['turnterm'] * 60; + $unit = $turnterm * 60; + + if($unit == $oldunit){ + if($locked){ + unlock(); + } + return null; + } + + $unitDiff = $unit / $oldunit; + + $servTurnTime = new \DateTimeImmutable($admin['turntime']); + foreach ($db->query('SELECT no,turntime FROM general') as $gen) { + $genTurnTime = new \DateTimeImmutable($gen['turntime']); + $timeDiff = TimeUtil::DateIntervalToSeconds($genTurnTime->diff($servTurnTime)); + $timeDiff *= $unitDiff; + $newGenTurnTime = $servTurnTime->add(TimeUtil::secondsToDateInterval($timeDiff)); + + $db->update('general', [ + 'turntime' => $newGenTurnTime->format('Y-m-d H:i:s.u') + ], 'no=%i', $gen['no']); + } + $turn = ($admin['year'] - $admin['startyear']) * 12 + $admin['month'] - 1; + $starttime = $servTurnTime->sub(TimeUtil::secondsToDateInterval($turn * $unit))->format('Y-m-d H:i:s'); + $starttime = cutTurn($starttime, $turnterm, false); + $gameStor->turnterm = $turnterm; + $gameStor->starttime = $starttime; + pushGlobalHistoryLog(["★턴시간이 {$turnterm}분으로 변경됩니다."]); + + if($locked){ + unlock(); + } + + return null; + } +}