feat: -60 turnterm 가변턴
This commit is contained in:
@@ -28,6 +28,7 @@ use sammo\UniqueConst;
|
||||
use sammo\UserLogger;
|
||||
use sammo\Util;
|
||||
use sammo\Validator;
|
||||
use sammo\VarTurn60;
|
||||
use sammo\WebUtil;
|
||||
|
||||
use function sammo\addTurn;
|
||||
@@ -355,20 +356,28 @@ class Join extends \sammo\BaseAPI
|
||||
}
|
||||
|
||||
if ($inheritTurntimeZone !== null) {
|
||||
$inheritTurntime = $inheritTurntimeZone * $admin['turnterm'];
|
||||
$inheritTurntime += $rng->nextRangeInt(0, Util::clamp($admin['turnterm'] - 1, 0));
|
||||
$turnterm = abs($admin['turnterm']);
|
||||
$inheritTurntime = $inheritTurntimeZone * $turnterm;
|
||||
$inheritTurntime += $rng->nextRangeInt(0, Util::clamp($turnterm - 1, 0));
|
||||
|
||||
$userLogger->push(sprintf("턴 시간 %02d:%02d 로 지정", intdiv($inheritTurntime, 60), $inheritTurntime % 60), "inheritPoint");
|
||||
|
||||
$inheritTurntime += $rng->nextRangeInt(0, 999999) / 1000000;
|
||||
|
||||
$turntime = new \DateTimeImmutable(cutTurn($admin['turntime'], $admin['turnterm']));
|
||||
$turntime = new \DateTimeImmutable(cutTurn($admin['turntime'], $turnterm));
|
||||
$turntime = $turntime->add(TimeUtil::secondsToDateInterval($inheritTurntime));
|
||||
$turntime = TimeUtil::format($turntime, true);
|
||||
} else {
|
||||
$turntime = getRandTurn($rng, $admin['turnterm'], new \DateTimeImmutable($admin['turntime']));
|
||||
$turntime = getRandTurn($rng, abs($admin['turnterm']), new \DateTimeImmutable($admin['turntime']));
|
||||
}
|
||||
|
||||
if ($admin['turnterm'] == -60){
|
||||
$baseObj = VarTurn60::fromDatetime(new \DateTimeImmutable($admin['turntime']));
|
||||
$userTurnObj = VarTurn60::fromDatetime(new \DateTimeImmutable($turntime));
|
||||
if($baseObj->turnIdx != $userTurnObj->turnIdx){
|
||||
$turntime = $userTurnObj->addTurn(-1)->toDateStr();
|
||||
}
|
||||
}
|
||||
|
||||
$now = TimeUtil::now(true);
|
||||
if ($now >= $turntime) {
|
||||
|
||||
@@ -62,7 +62,7 @@ class ResetTurnTime extends \sammo\BaseAPI
|
||||
}
|
||||
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
|
||||
$currTurnTime = new DateTimeImmutable($general->getTurnTime());
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ abstract class AbsFromUserPool extends AbsGeneralPool{
|
||||
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$result = [];
|
||||
$validUntil = TimeUtil::nowAddMinutes(2 * $gameStor->turnterm);
|
||||
$validUntil = TimeUtil::nowAddMinutes(2 * abs($gameStor->turnterm));
|
||||
while(count($result) < $pickCnt){
|
||||
$cand = $rng->choiceUsingWeightPair($pool);
|
||||
$poolID = $cand['id'];
|
||||
|
||||
@@ -164,7 +164,7 @@ abstract class Auction
|
||||
if ($date === null) {
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
$date = $this->info->closeDate->add(TimeUtil::secondsToDateInterval(
|
||||
max(static::MIN_EXTENSION_MINUTES_PER_BID, $turnTerm * static::COEFF_EXTENSION_MINUTES_PER_BID) * 60
|
||||
));
|
||||
@@ -324,7 +324,7 @@ abstract class Auction
|
||||
}
|
||||
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
|
||||
if ($this->info->detail->availableLatestBidCloseDate !== null) {
|
||||
$extendedCloseDate = $now->add(TimeUtil::secondsToDateInterval(
|
||||
@@ -437,7 +437,7 @@ abstract class Auction
|
||||
$general->increaseVar($resType->value, -$morePoint);
|
||||
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
$extendedCloseDate = $now->add(TimeUtil::secondsToDateInterval(
|
||||
max(static::MIN_EXTENSION_MINUTES_PER_BID, $turnTerm * static::COEFF_EXTENSION_MINUTES_PER_BID) * 60
|
||||
));
|
||||
@@ -471,7 +471,7 @@ abstract class Auction
|
||||
if ($highestBid->aux->tryExtendCloseDate) {
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
|
||||
//연장 요청이 있었다.
|
||||
$extendedCloseDate = $this->info->closeDate->add(TimeUtil::secondsToDateInterval(
|
||||
|
||||
@@ -58,7 +58,7 @@ abstract class AuctionBasicResource extends Auction
|
||||
|
||||
$now = new \DateTimeImmutable();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
$closeDate = $now->add(TimeUtil::secondsToDateInterval($closeTurnCnt * $turnTerm * 60));
|
||||
|
||||
$openResult = static::openAuction(new AuctionInfo(
|
||||
@@ -246,7 +246,13 @@ abstract class AuctionBasicResource extends Auction
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$date = (new DateTimeImmutable())->add(TimeUtil::secondsToDateInterval($turnTerm * 60));
|
||||
if($turnTerm == -60){
|
||||
$date = VarTurn60::fromDatetime(new \DateTimeImmutable())->addTurn(1)->toDateStr();
|
||||
}
|
||||
else{
|
||||
$date = (new DateTimeImmutable())->add(TimeUtil::secondsToDateInterval($turnTerm * 60));
|
||||
}
|
||||
|
||||
$this->shrinkCloseDate($date);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ class AuctionUniqueItem extends Auction
|
||||
$now = new DateTimeImmutable();
|
||||
|
||||
[$turnTerm, $year, $month] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month']);
|
||||
$turnTerm = abs($turnTerm);
|
||||
|
||||
$closeDate = $now->add(TimeUtil::secondsToDateInterval(
|
||||
max(static::MIN_AUCTION_CLOSE_MINUTES, $turnTerm * static::COEFF_AUCTION_CLOSE_MINUTES) * 60
|
||||
@@ -266,7 +267,7 @@ class AuctionUniqueItem extends Auction
|
||||
}
|
||||
|
||||
if ($availableEquipUniqueCnt <= 0) {
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
//제한에 걸렸다면 자동 연장
|
||||
$extendedCloseDate = $this->info->closeDate->add(TimeUtil::secondsToDateInterval(
|
||||
max(static::MIN_EXTENSION_MINUTES_BY_EXTENSION_QUERY, $turnTerm * static::COEFF_EXTENSION_MINUTES_LIMIT_UNIQUE_CNT) * 60
|
||||
@@ -314,7 +315,7 @@ class AuctionUniqueItem extends Auction
|
||||
|
||||
if (!$availableItemTypes) {
|
||||
if ($isExtendCloseDateRequired) {
|
||||
$turnTerm = $gameStor->getValue('turnterm');
|
||||
$turnTerm = abs($gameStor->getValue('turnterm'));
|
||||
//동일 부위 제한에 걸렸다면 자동 연장
|
||||
$extendedCloseDate = $this->info->closeDate->add(TimeUtil::secondsToDateInterval(
|
||||
max(static::MIN_EXTENSION_MINUTES_LIMIT_BY_BID, $turnTerm * static::COEFF_EXTENSION_MINUTES_LIMIT_BY_BID) * 60
|
||||
|
||||
@@ -200,7 +200,7 @@ class che_불가침제의 extends Command\NationCommand
|
||||
|
||||
$now = new \DateTime($date);
|
||||
$validUntil = new \DateTime($date);
|
||||
$validMinutes = max(30, $env['turnterm'] * 3);
|
||||
$validMinutes = max(30, abs($env['turnterm']) * 3);
|
||||
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
|
||||
|
||||
$josaWa = JosaUtil::pick($nationName, '와');
|
||||
|
||||
@@ -149,7 +149,7 @@ class che_불가침파기제의 extends Command\NationCommand{
|
||||
|
||||
$now = new \DateTime($date);
|
||||
$validUntil = new \DateTime($date);
|
||||
$validMinutes = max(30, $env['turnterm']*3);
|
||||
$validMinutes = max(30, abs($env['turnterm'])*3);
|
||||
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
|
||||
|
||||
$msg = new DiplomaticMessage(
|
||||
|
||||
@@ -147,7 +147,7 @@ class che_종전제의 extends Command\NationCommand{
|
||||
|
||||
$now = new \DateTime($date);
|
||||
$validUntil = new \DateTime($date);
|
||||
$validMinutes = max(30, $env['turnterm']*3);
|
||||
$validMinutes = max(30, abs($env['turnterm'])*3);
|
||||
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
|
||||
|
||||
$msg = new DiplomaticMessage(
|
||||
|
||||
@@ -120,7 +120,7 @@ class RaiseInvader extends \sammo\Event\Action
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$gameStor->setValue('isunited', 1);
|
||||
|
||||
$turnterm = $gameStor->turnterm;
|
||||
$turnterm = abs($gameStor->turnterm);
|
||||
$generalCnt = $db->queryFirstField('SELECT count(*) FROM general');
|
||||
|
||||
if ($npcEachCount < 0) {
|
||||
|
||||
@@ -134,7 +134,7 @@ class UpdateNationLevel extends \sammo\Event\Action
|
||||
if ($levelDiff) {
|
||||
//유니크 아이템 하나 돌리자
|
||||
$targetKillTurn = $env['killturn'];
|
||||
$targetKillTurn -= 24 * 60 / $env['turnterm'];
|
||||
$targetKillTurn -= 24 * 60 / abs($env['turnterm']);
|
||||
$nationGenIDList = $db->queryFirstColumn(
|
||||
'SELECT no FROM general WHERE nation = %i AND killturn >= %i AND npc < 2',
|
||||
$nation['nation'],
|
||||
|
||||
@@ -283,6 +283,7 @@ class General extends GeneralBase implements iAction
|
||||
}
|
||||
$recwar = new \DateTimeImmutable($this->getVar('recent_war'));
|
||||
$turnNow = new \DateTimeImmutable($this->getVar('turntime'));
|
||||
|
||||
$secDiff = TimeUtil::DateIntervalToSeconds($recwar->diff($turnNow));
|
||||
|
||||
if ($secDiff <= 0) {
|
||||
@@ -290,6 +291,12 @@ class General extends GeneralBase implements iAction
|
||||
return 0;
|
||||
}
|
||||
|
||||
if($turnTerm == -60){
|
||||
$turnDiff = VarTurn60::calcTurnDiff($recwar, $turnNow);
|
||||
$this->calcCache[$cacheKey] = $turnDiff;
|
||||
return $turnDiff;
|
||||
}
|
||||
|
||||
$result = intdiv(Util::toInt($secDiff), 60 * $turnTerm);
|
||||
$this->calcCache[$cacheKey] = $result;
|
||||
return $result;
|
||||
|
||||
@@ -1980,7 +1980,7 @@ class GeneralAI
|
||||
$db = DB::db();
|
||||
|
||||
$nationStor = KVStorage::getStorage($db, $general->getNationID(), 'nation_env');
|
||||
$turnTerm = $this->env['turnterm'];
|
||||
$turnTerm = abs($this->env['turnterm']);
|
||||
|
||||
//천도를 한턴 넣었다면 계속 넣는다.
|
||||
if ($lastTurn->getCommand() === '천도' && $lastTurn->getArg()['destCityID'] != $this->nation['capital']) {
|
||||
@@ -3715,7 +3715,7 @@ class GeneralAI
|
||||
$this->updateInstance();
|
||||
|
||||
//특별 메세지 있는 경우 출력
|
||||
$term = $this->env['turnterm'];
|
||||
$term = abs($this->env['turnterm']);
|
||||
if ($general->getVar('npcmsg') && $this->rng->nextBool(GameConst::$npcMessageFreqByDay * $term / (60 * 24))) {
|
||||
$src = new MessageTarget(
|
||||
$general->getID(),
|
||||
@@ -3985,7 +3985,7 @@ class GeneralAI
|
||||
|
||||
$userChiefCnt = 0;
|
||||
|
||||
$minUserKillturn = $this->env['killturn'] - Util::toInt(240 / $this->env['turnterm']);
|
||||
$minUserKillturn = $this->env['killturn'] - Util::toInt(240 / abs($this->env['turnterm']));
|
||||
$minNPCKillturn = 36;
|
||||
|
||||
foreach (Util::range($minChiefLevel, 12) as $chiefLevel) {
|
||||
|
||||
@@ -245,7 +245,16 @@ class ResetHelper{
|
||||
true
|
||||
);
|
||||
|
||||
if($sync == 0) {
|
||||
if($turnterm == -60){
|
||||
[$starttime, $yearPulled, $month] = VarTurn60::fromDatetime(new \DateTimeImmutable($turntime))->cutDay();
|
||||
if($yearPulled){
|
||||
$year = $startyear-1;
|
||||
}
|
||||
else{
|
||||
$year = $startyear;
|
||||
}
|
||||
}
|
||||
else if($sync == 0) {
|
||||
// 현재 시간을 1월로 맞춤
|
||||
$starttime = cutTurn($turntime, $turnterm);
|
||||
$month = 1;
|
||||
@@ -261,7 +270,7 @@ class ResetHelper{
|
||||
}
|
||||
}
|
||||
|
||||
$killturn = 4800 / $turnterm;
|
||||
$killturn = 4800 / abs($turnterm);
|
||||
if($npcmode == 1) { $killturn = intdiv($killturn, 3); }
|
||||
|
||||
$develcost = ($year - $startyear + 10) * 2;
|
||||
|
||||
@@ -219,11 +219,20 @@ class TurnExecutionHelper
|
||||
|
||||
$nextTurnTimeBase = $general->getAuxVar('nextTurnTimeBase');
|
||||
if($nextTurnTimeBase !== null){
|
||||
$turntime = cutTurn($turntime, $gameStor->turnterm);
|
||||
$turntimeObj = new \DateTimeImmutable($turntime);
|
||||
$turntimeObj = $turntimeObj->add(TimeUtil::secondsToDateInterval($nextTurnTimeBase));
|
||||
$turntime = TimeUtil::format($turntimeObj, true);
|
||||
$general->setAuxVar('nextTurnTimeBase', null);
|
||||
if($gameStor->turnterm == -60){
|
||||
[$turntime, $nextTurnterm] = VarTurn60::fromDatetime(new \DateTimeImmutable($turntime))->cutTurn();
|
||||
$turntimeObj = new \DateTimeImmutable($turntime);
|
||||
$turntimeObj = $turntimeObj->add(TimeUtil::secondsToDateInterval($nextTurnTimeBase * $nextTurnterm / 60));
|
||||
$turntime = TimeUtil::format($turntimeObj, true);
|
||||
$general->setAuxVar('nextTurnTimeBase', null);
|
||||
}
|
||||
else {
|
||||
$turntime = cutTurn($turntime, $gameStor->turnterm);
|
||||
$turntimeObj = new \DateTimeImmutable($turntime);
|
||||
$turntimeObj = $turntimeObj->add(TimeUtil::secondsToDateInterval($nextTurnTimeBase));
|
||||
$turntime = TimeUtil::format($turntimeObj, true);
|
||||
$general->setAuxVar('nextTurnTimeBase', null);
|
||||
}
|
||||
}
|
||||
|
||||
$general->setVar('turntime', $turntime);
|
||||
|
||||
Reference in New Issue
Block a user