feat: 턴 선택기를 vue 기반으로 변경

This commit is contained in:
2021-11-28 01:57:46 +09:00
parent 9adcbecce4
commit 0aaadf9536
12 changed files with 548 additions and 342 deletions
@@ -0,0 +1,69 @@
<?php
namespace sammo\API\Command;
use sammo\Session;
use DateTimeInterface;
use sammo\DB;
use sammo\Json;
use sammo\KVStorage;
use sammo\TimeUtil;
use function sammo\cutTurn;
class GetReservedCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$db = DB::db();
$commandList = [];
$gameStor = KVStorage::getStorage($db, 'game_env');
$generalID = $session->generalID;
$rawTurn = $db->queryAllLists('SELECT turn_idx, action, arg, brief FROM general_turn WHERE general_id = %i ORDER BY turn_idx ASC', $generalID);
foreach ($rawTurn as [$turn_idx, $action, $arg, $brief]) {
$commandList[$turn_idx] = [
'action' => $action,
'brief' => $brief,
'arg' => Json::decode($arg)
];
}
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
[$turnTime, $rawGeneralAux] = $db->queryFirstList('SELECT turntime, aux FROM general WHERE no=%i', $generalID);
$generalAux = Json::decode($rawGeneralAux ?? '{}');
if (cutTurn($turnTime, $turnTerm) > cutTurn($lastExecute, $turnTerm)) {
//이미 이번달에 실행된 턴이다.
$month++;
if ($month >= 13) {
$month -= 12;
$year += 1;
}
}
return [
'result' => true,
'turnTime' => $turnTime,
'turnTerm' => $turnTerm,
'year' => $year,
'month' => $month,
'date' => TimeUtil::now(true),
'turn' => $commandList,
'autorun_limit' => $generalAux['autorun_limit'] ?? null,
];
}
}
+47
View File
@@ -0,0 +1,47 @@
<?php
namespace sammo\API\Command;
use sammo\Session;
use DateTimeInterface;
use sammo\Validator;
use function sammo\cutTurn;
use function sammo\pushGeneralCommand;
class PushCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
$v = new Validator($this->args);
$v->rule('required', [
'amount',
])
->rule('integer', 'amount')
->rule('min', 'amount', -12)
->rule('max', 'amount', 12);
if (!$v->validate()) {
return $v->errorStr();
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$amount = $this->args['amount'];
if($amount == 0){
return '0은 불가능합니다';
}
pushGeneralCommand($session->generalID, $amount);
return [
'result'=>true
];
}
}
+45
View File
@@ -0,0 +1,45 @@
<?php
namespace sammo\API\Command;
use sammo\Session;
use DateTimeInterface;
use sammo\Validator;
use function sammo\cutTurn;
use function sammo\repeatGeneralCommand;
class RepeatCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
$v = new Validator($this->args);
$v->rule('required', [
'amount',
])
->rule('integer', 'amount')
->rule('min', 'amount', 1)
->rule('max', 'amount', 12);
if (!$v->validate()) {
return $v->errorStr();
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$amount = $this->args['amount'];
repeatGeneralCommand($session->generalID, $amount);
return [
'result'=>true
];
}
}
+56
View File
@@ -0,0 +1,56 @@
<?php
namespace sammo\API\Command;
use sammo\Session;
use DateTimeInterface;
use sammo\GameConst;
use sammo\Util;
use sammo\Validator;
use function sammo\setGeneralCommand;
class ReserveCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
$v = new Validator($this->args);
$v->rule('required', [
'action',
'turnList'
])
->rule('lengthMin', 'action', 1)
->rule('integerArray', 'turnList');
if (!$v->validate()) {
return $v->errorStr();
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$action = $this->args['action'];
$turnList = $this->args['turnList'];
$arg = $this->args['arg']??[];
if(!$turnList){
return '턴이 입력되지 않았습니다';
}
if(!in_array($action, Util::array_flatten(GameConst::$availableGeneralCommand))){
return '사용할 수 없는 커맨드입니다.';
}
if(!is_array($arg)){
'올바른 arg 형태가 아닙니다.';
}
return setGeneralCommand($session->generalID, $turnList, $action, $arg);
}
}