diff --git a/hwe/sammo/API/General/Join.php b/hwe/sammo/API/General/Join.php index b3eac283..a467c605 100644 --- a/hwe/sammo/API/General/Join.php +++ b/hwe/sammo/API/General/Join.php @@ -277,10 +277,11 @@ class Join extends \sammo\BaseAPI if ($inheritTurntime !== null) { //FIXME: 오동작함 - $inheritTurntime = $inheritTurntime % ($gameStor->turnterm * 60); + $inheritTurntime = $inheritTurntime % ($admin['turnterm'] * 60); $inheritTurntime += Util::randRangeInt(0, 999999) / 1000000; $turntime = new \DateTimeImmutable(cutTurn($admin['turntime'], $admin['turnterm'])); - $turntime = TimeUtil::format($turntime->add(TimeUtil::secondsToDateInterval($inheritTurntime)), true); + $turntime = $turntime->add(TimeUtil::secondsToDateInterval($inheritTurntime)); + $turntime = TimeUtil::format($turntime, true); } else { $turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime'])); } diff --git a/hwe/sammo/API/InheritAction/ResetTurnTime.php b/hwe/sammo/API/InheritAction/ResetTurnTime.php index 6f19dc75..8cb2f692 100644 --- a/hwe/sammo/API/InheritAction/ResetTurnTime.php +++ b/hwe/sammo/API/InheritAction/ResetTurnTime.php @@ -54,13 +54,13 @@ class ResetTurnTime extends \sammo\BaseAPI $gameStor = new KVStorage($db, 'game_env'); [$turnTerm, $serverTurnTime] = $gameStor->getValuesAsArray(['turnterm', 'turntime']); + $currTurnTime = new DateTimeImmutable($general->getTurnTime()); $serverTurnTimeObj = new DateTimeImmutable($serverTurnTime); - $turnTime = new DateTimeImmutable($general->getTurnTime()); $afterTurn = Util::randRange($turnTerm * -60 / 2, $turnTerm * 60 / 2); - $turnTime = $turnTime->add(TimeUtil::secondsToDateInterval($afterTurn)); - if ($turnTime <= $serverTurnTimeObj) { + $turnTime = $currTurnTime->add(TimeUtil::secondsToDateInterval($afterTurn)); + if ($turnTime <= $serverTurnTimeObj && $serverTurnTimeObj <= $currTurnTime) { $turnTime = $turnTime->add(TimeUtil::secondsToDateInterval($turnTerm * 60)); } diff --git a/hwe/ts/Join.vue b/hwe/ts/Join.vue index b04d1863..e1c740d9 100644 --- a/hwe/ts/Join.vue +++ b/hwe/ts/Join.vue @@ -244,6 +244,7 @@ :readonly="!inheritTurnTimeSet" :min="0" :max="1 - turnterm" + v-model="inheritTurnTimeMinute" title="분" /> @@ -252,6 +253,7 @@ :readonly="!inheritTurnTimeSet" :min="0" :max="60" + v-model="inheritTurnTimeSecond" title="초" /> @@ -432,18 +434,21 @@ export default defineComponent({ inheritTurnTimeMinute(newValue: number) { if (!this.inheritTurnTimeSet) { this.args.inheritTurntime = 0; + return; } this.args.inheritTurntime = newValue * 60 + this.inheritTurnTimeSecond; }, inheritTurnTimeSecond(newValue: number) { if (!this.inheritTurnTimeSet) { this.args.inheritTurntime = 0; + return; } this.args.inheritTurntime = this.inheritTurnTimeMinute * 60 + newValue; }, inheritTurnTimeSet(newValue: boolean) { if (!newValue) { this.args.inheritTurntime = 0; + return; } this.args.inheritTurntime = this.inheritTurnTimeMinute * 60 + this.inheritTurnTimeSecond; diff --git a/src/sammo/TimeUtil.php b/src/sammo/TimeUtil.php index 107b9dd1..c441af5a 100644 --- a/src/sammo/TimeUtil.php +++ b/src/sammo/TimeUtil.php @@ -140,9 +140,17 @@ class TimeUtil public static function secondsToDateInterval(float $fullSeconds): \DateInterval { - $d0 = new \DateTime("@0"); + $inverted = $fullSeconds < 0?1:0; - return $d0->diff(static::secondsToDateTime($fullSeconds, true)); + $fullSeconds = abs($fullSeconds); + $seconds = floor($fullSeconds); + $fraction = $fullSeconds - $seconds; + + $interval = new \DateInterval("PT{$seconds}S"); + + $interval->f = $fraction; + $interval->invert = $inverted; + return $interval; } public static function DateTimeToSeconds(\DateTimeInterface $dateTime, bool $isUTC = false): float