Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1e6ac7b89 | ||
|
|
7b24f66f93 | ||
|
|
b2b2934ce9 | ||
|
|
6ed3e673df | ||
|
|
aa7dcab1fd | ||
|
|
e2e578e485 | ||
|
|
6cebc903c9 | ||
|
|
c0190959e3 | ||
|
|
bb26366769
|
||
|
|
71849a457b
|
||
|
|
7c1a8d96a2
|
||
|
|
cebd152daf
|
||
|
|
2ca03389d2
|
||
|
|
cacf0981ce
|
||
|
|
bcf5b5cb7d
|
||
|
|
66b2f1a8f2
|
||
|
|
40ecca5440
|
||
|
|
a96c2312d0
|
||
|
|
faff3f4e6a | ||
|
|
83abf44380
|
||
|
|
e83960d67f
|
||
|
|
c6b2e64c05
|
||
|
|
029f719112 | ||
|
|
46f460c8ad | ||
|
|
af4401d9bb | ||
|
|
2f00aee947 | ||
|
|
dd2b032fa3 | ||
|
|
1b858ae36c
|
||
|
|
69f4d8e2c7 | ||
|
|
f24aea0120 | ||
|
|
f6dc7f49e2 | ||
|
|
c1f105226f
|
||
|
|
cecab2b0cf
|
||
|
|
39f4e89b03
|
||
|
|
83f595a27a
|
||
|
|
b0db11544d
|
||
|
|
8e3551cb11
|
||
|
|
61d99a3043
|
||
|
|
fe80deff0c | ||
|
|
536c00f5a8 | ||
|
|
66ed8635dd | ||
|
|
311c485cec | ||
|
|
5b5cf4e6d3 | ||
|
|
c5ed2d47fc | ||
|
|
428ec0d0ed | ||
|
|
96c5f987d6 | ||
|
|
f0ae28b087 | ||
|
|
fa4a266d77 | ||
|
|
32e854858e
|
||
|
|
f13371e679 | ||
|
|
2420f594a6
|
||
|
|
b7b0a1050c
|
||
|
|
d2a90157b9
|
||
|
|
a32cb3a2c0
|
||
|
|
7c0a3a6955
|
||
|
|
7d2e2945a1 | ||
|
|
dc526c7359 | ||
|
|
6c4cb484da | ||
|
|
d41246de9d | ||
|
|
6d40783224
|
||
|
|
6eb6014e80
|
||
|
|
103cf3f882
|
||
|
|
5969e0c82b
|
||
|
|
945f9027dd
|
||
|
|
0bf3145042
|
||
|
|
905669755f
|
||
|
|
57b12e8c04
|
||
|
|
eccd883edc
|
||
|
|
895b134cd0
|
||
|
|
7258573e4d
|
||
|
|
cbdfa6f6fc
|
||
|
|
ed25c58410
|
||
|
|
16cfa46864
|
||
|
|
e54a0a6668
|
||
|
|
eb545724ea
|
||
|
|
7858b48bad
|
||
|
|
a4ed41edbe
|
||
|
|
b5a9e52c43
|
||
|
|
c6166d3295
|
||
|
|
9520d29109
|
||
|
|
3edfff146e | ||
|
|
38416ccdf8
|
||
|
|
eeb5eabd12
|
||
|
|
41273f97db
|
||
|
|
0e23677e1b | ||
|
|
0f085c7f36
|
||
|
|
bd90076441
|
||
|
|
1801bdf55b
|
||
|
|
f27f0edfb6
|
||
|
|
02f23e7db4
|
||
|
|
9871e24811 | ||
|
|
a7dac2ce15 | ||
|
|
ed1d2cbf0d | ||
|
|
06ca32802b
|
||
|
|
568b45f93a
|
+2
-5
@@ -15,9 +15,8 @@ return [
|
|||||||
// Note that the **only** effect of choosing `'5.6'` is to infer
|
// Note that the **only** effect of choosing `'5.6'` is to infer
|
||||||
// that functions removed in php 7.0 exist.
|
// that functions removed in php 7.0 exist.
|
||||||
// (See `backward_compatibility_checks` for additional options)
|
// (See `backward_compatibility_checks` for additional options)
|
||||||
"target_php_version" => '8.1',
|
"target_php_version" => '8.2',
|
||||||
"minimum_target_php_version" => '8.1',
|
"minimum_target_php_version" => '8.2',
|
||||||
'backward_compatibility_checks ' => true,
|
|
||||||
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
||||||
|
|
||||||
'file_list' => [
|
'file_list' => [
|
||||||
@@ -29,8 +28,6 @@ return [
|
|||||||
'hwe/_admin1_submit.php',
|
'hwe/_admin1_submit.php',
|
||||||
'hwe/_admin2.php',
|
'hwe/_admin2.php',
|
||||||
'hwe/_admin2_submit.php',
|
'hwe/_admin2_submit.php',
|
||||||
'hwe/_admin4.php',
|
|
||||||
'hwe/_admin4_submit.php',
|
|
||||||
'hwe/_admin5.php',
|
'hwe/_admin5.php',
|
||||||
'hwe/_admin5_submit.php',
|
'hwe/_admin5_submit.php',
|
||||||
'hwe/_admin7.php',
|
'hwe/_admin7.php',
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ $src = MessageTarget::buildQuick($session->generalID);
|
|||||||
$genObjList = [];
|
$genObjList = [];
|
||||||
$env = [];
|
$env = [];
|
||||||
if ($genlist) {
|
if ($genlist) {
|
||||||
$genObjList = General::createGeneralObjListFromDB($genlist);
|
$genObjList = General::createObjListFromDB($genlist);
|
||||||
$env = $gameStor->cacheAll();
|
$env = $gameStor->cacheAll();
|
||||||
}
|
}
|
||||||
switch ($btn) {
|
switch ($btn) {
|
||||||
|
|||||||
+1
-1
@@ -76,7 +76,7 @@ if (!$gen) {
|
|||||||
$gen = $generalBasicList[0]['no'];
|
$gen = $generalBasicList[0]['no'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($gen, null, GeneralQueryMode::FullWithAccessLog);
|
$generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAccessLog);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ foreach ($db->queryFirstColumn(
|
|||||||
}
|
}
|
||||||
|
|
||||||
$inheritPointManager = InheritancePointManager::getInstance();
|
$inheritPointManager = InheritancePointManager::getInstance();
|
||||||
foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
foreach(General::createObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
||||||
$inheritPointManager->mergeTotalInheritancePoint($genObj);
|
$inheritPointManager->mergeTotalInheritancePoint($genObj);
|
||||||
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
|
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
|
||||||
}
|
}
|
||||||
+18
-33
@@ -12,34 +12,19 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
|
|
||||||
increaseRefresh("갱신정보", 1);
|
increaseRefresh("갱신정보", 1);
|
||||||
|
|
||||||
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxrefresh', 'maxonline']);
|
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxrefresh', 'maxonline', 'recentTraffic']);
|
||||||
|
|
||||||
$log = getRawFileLogRecent(__DIR__ . '/logs/' . UniqueConst::$serverID . '/_traffic.txt', 11, 100);
|
$recentTraffic = $admin['recentTraffic'] ?? [];
|
||||||
|
|
||||||
$date = [];
|
|
||||||
$year = [];
|
|
||||||
$month = [];
|
|
||||||
$refresh = [];
|
|
||||||
$online = [];
|
|
||||||
|
|
||||||
$curonline = getOnlineNum();
|
$curonline = getOnlineNum();
|
||||||
foreach ($log as $i => $value) {
|
|
||||||
$parse = Json::decode($value);
|
$recentTraffic[] = [
|
||||||
if (is_array($parse) === false) {
|
'year' => $admin['year'],
|
||||||
continue;
|
'month' => $admin['month'],
|
||||||
}
|
'refresh' => $admin['refresh'],
|
||||||
if (count($parse) < 5) {
|
'online' => $curonline,
|
||||||
continue;
|
'date' => TimeUtil::now()
|
||||||
}
|
];
|
||||||
$date[$i] = $parse[0];
|
|
||||||
$year[$i] = $parse[1];
|
|
||||||
$month[$i] = $parse[2];
|
|
||||||
$refresh[$i] = $parse[3];
|
|
||||||
$online[$i] = $parse[4];
|
|
||||||
}
|
|
||||||
$year[] = $admin['year'];
|
|
||||||
$month[] = $admin['month'];
|
|
||||||
$date[] = TimeUtil::now();
|
|
||||||
|
|
||||||
if ($admin['maxrefresh'] == 0) {
|
if ($admin['maxrefresh'] == 0) {
|
||||||
$admin['maxrefresh'] = 1;
|
$admin['maxrefresh'] = 1;
|
||||||
@@ -113,13 +98,13 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
$refresh[] = $admin['refresh'];
|
foreach ($recentTraffic as $trafficItem) {
|
||||||
foreach ($refresh as $i => $value) {
|
$value = $trafficItem['refresh'];
|
||||||
$w = round($value / $admin['maxrefresh'] * 100, 1);
|
$w = round($value / $admin['maxrefresh'] * 100, 1);
|
||||||
$color = getTrafficColor($w);
|
$color = getTrafficColor($w);
|
||||||
$dt = substr($date[$i], 11, 5); ?>
|
$dt = substr($trafficItem['date'], 11, 5); ?>
|
||||||
<tr height=30>
|
<tr height=30>
|
||||||
<td width=100 align=center><?= $year[$i] ?>년 <?= $month[$i] ?>월</td>
|
<td width=100 align=center><?= $trafficItem['year'] ?>년 <?= $trafficItem['month'] ?>월</td>
|
||||||
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
||||||
<td width=2 align=center class='bg1'></td>
|
<td width=2 align=center class='bg1'></td>
|
||||||
<td width=320>
|
<td width=320>
|
||||||
@@ -154,13 +139,13 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
$online[] = $curonline;
|
foreach ($recentTraffic as $trafficItem) {
|
||||||
foreach ($online as $i => $value) {
|
$value = $trafficItem['online'];
|
||||||
$w = round($value / $admin['maxonline'] * 100, 1);
|
$w = round($value / $admin['maxonline'] * 100, 1);
|
||||||
$color = getTrafficColor($w);
|
$color = getTrafficColor($w);
|
||||||
$dt = substr($date[$i], 11, 5); ?>
|
$dt = substr($trafficItem['date'], 11, 5); ?>
|
||||||
<tr height=30>
|
<tr height=30>
|
||||||
<td width=100 align=center><?= $year[$i] ?>년 <?= $month[$i] ?>월</td>
|
<td width=100 align=center><?= $trafficItem['year'] ?>년 <?= $trafficItem['month'] ?>월</td>
|
||||||
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
||||||
<td width=2 align=center class='bg1'></td>
|
<td width=2 align=center class='bg1'></td>
|
||||||
<td width=320>
|
<td width=320>
|
||||||
|
|||||||
+8
-7
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\GeneralLiteQueryMode;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
use sammo\Enums\RankColumn;
|
use sammo\Enums\RankColumn;
|
||||||
|
|
||||||
@@ -506,28 +507,28 @@ if ($str3) {
|
|||||||
$tournamentType = [
|
$tournamentType = [
|
||||||
'전 력 전' => [
|
'전 력 전' => [
|
||||||
'종합',
|
'종합',
|
||||||
function (General $general) {
|
function (GeneralLite $general) {
|
||||||
return $general->getVar('leadership') + $general->getVar('strength') + $general->getVar('intel');
|
return $general->getVar('leadership') + $general->getVar('strength') + $general->getVar('intel');
|
||||||
},
|
},
|
||||||
'tt',
|
'tt',
|
||||||
],
|
],
|
||||||
'통 솔 전' => [
|
'통 솔 전' => [
|
||||||
'통솔',
|
'통솔',
|
||||||
function (General $general) {
|
function (GeneralLite $general) {
|
||||||
return $general->getVar('leadership');
|
return $general->getVar('leadership');
|
||||||
},
|
},
|
||||||
'tl',
|
'tl',
|
||||||
],
|
],
|
||||||
'일 기 토' => [
|
'일 기 토' => [
|
||||||
'무력',
|
'무력',
|
||||||
function (General $general) {
|
function (GeneralLite $general) {
|
||||||
return $general->getVar('strength');
|
return $general->getVar('strength');
|
||||||
},
|
},
|
||||||
'ts',
|
'ts',
|
||||||
],
|
],
|
||||||
'설 전' => [
|
'설 전' => [
|
||||||
'지력',
|
'지력',
|
||||||
function (General $general) {
|
function (GeneralLite $general) {
|
||||||
return $general->getVar('intel');
|
return $general->getVar('intel');
|
||||||
},
|
},
|
||||||
'ti',
|
'ti',
|
||||||
@@ -564,12 +565,12 @@ if ($str3) {
|
|||||||
$winColumn = RankColumn::from("{$rankColumn}w");
|
$winColumn = RankColumn::from("{$rankColumn}w");
|
||||||
$drawColumn = RankColumn::from("{$rankColumn}d");
|
$drawColumn = RankColumn::from("{$rankColumn}d");
|
||||||
$loseColumn = RankColumn::from("{$rankColumn}l");
|
$loseColumn = RankColumn::from("{$rankColumn}l");
|
||||||
$tournamentRankerList = General::createGeneralObjListFromDB(
|
$tournamentRankerList = GeneralLite::createObjListFromDB(
|
||||||
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn->value),
|
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn->value),
|
||||||
[$prizeColumn->value, $gameColumn->value, $winColumn->value, $drawColumn->value, $loseColumn->value, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
|
[$prizeColumn->value, $gameColumn->value, $winColumn->value, $drawColumn->value, $loseColumn->value, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
|
||||||
GeneralQueryMode::Core
|
GeneralLiteQueryMode::Core
|
||||||
);
|
);
|
||||||
usort($tournamentRankerList, function (General $lhs, General $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) {
|
usort($tournamentRankerList, function (GeneralLite $lhs, GeneralLite $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) {
|
||||||
$result = - ($lhs->getRankVar($gameColumn) <=> $rhs->getRankVar($gameColumn));
|
$result = - ($lhs->getRankVar($gameColumn) <=> $rhs->getRankVar($gameColumn));
|
||||||
if ($result !== 0) return $result;
|
if ($result !== 0) return $result;
|
||||||
$result = - (
|
$result = - (
|
||||||
|
|||||||
@@ -327,8 +327,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
|
|
||||||
if ($ourGeneral && !$isNPC) {
|
if ($ourGeneral && !$isNPC) {
|
||||||
$turnText = [];
|
$turnText = [];
|
||||||
$generalObj = new General($general, null, null, null, null, null, null, false);
|
foreach ($generalTurnList[$general['no']] as $turnRawIdx => $turn) {
|
||||||
foreach ($generalTurnList[$generalObj->getID()] as $turnRawIdx => $turn) {
|
|
||||||
$turnIdx = $turnRawIdx + 1;
|
$turnIdx = $turnRawIdx + 1;
|
||||||
$turnText[] = "{$turnIdx} : $turn";
|
$turnText[] = "{$turnIdx} : $turn";
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-5
@@ -24,7 +24,7 @@ $gameStor->cacheValues(['turntime', 'opentime', 'autorun_user', 'npcmode']);
|
|||||||
|
|
||||||
increaseRefresh("내정보", 1);
|
increaseRefresh("내정보", 1);
|
||||||
|
|
||||||
$me = General::createGeneralObjFromDB($generalID, null, GeneralQueryMode::FullWithAccessLog);
|
$me = General::createObjFromDB($generalID, null, GeneralQueryMode::FullWithAccessLog);
|
||||||
|
|
||||||
$myset = $me->getVar('myset');
|
$myset = $me->getVar('myset');
|
||||||
if ($myset > 0) {
|
if ($myset > 0) {
|
||||||
@@ -37,7 +37,8 @@ $lastRefresh = $db->queryFirstField(
|
|||||||
'SELECT %b FROM %b WHERE %b = %i',
|
'SELECT %b FROM %b WHERE %b = %i',
|
||||||
GeneralAccessLogColumn::lastRefresh->value,
|
GeneralAccessLogColumn::lastRefresh->value,
|
||||||
TableName::generalAccessLog->value,
|
TableName::generalAccessLog->value,
|
||||||
GeneralAccessLogColumn::generalID->value, $generalID
|
GeneralAccessLogColumn::generalID->value,
|
||||||
|
$generalID
|
||||||
);
|
);
|
||||||
|
|
||||||
$targetTime = addTurn($lastRefresh, $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
|
$targetTime = addTurn($lastRefresh, $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
|
||||||
@@ -50,13 +51,19 @@ if ($gameStor->turntime <= $gameStor->opentime) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($me->getNationID() == 0){
|
if ($me->getNationID() == 0) {
|
||||||
$showBuildNationCandidateBtn = true;
|
$showBuildNationCandidateBtn = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$use_treatment = $me->getAuxVar('use_treatment') ?? 10;
|
$use_treatment = $me->getAuxVar('use_treatment') ?? 10;
|
||||||
$use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
$use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
||||||
|
|
||||||
|
$changeDefence999Train = -3;
|
||||||
|
$changeDefence999Atmos = -6;
|
||||||
|
$changeDefence999Train = $me->onCalcDomestic('changeDefenceTrain', "train999", $changeDefence999Train);
|
||||||
|
$changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $changeDefence999Atmos);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
@@ -128,7 +135,10 @@ $use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
|||||||
<?php foreach ([90, 80, 60, 40] as $targetDefenceTrain) : ?>
|
<?php foreach ([90, 80, 60, 40] as $targetDefenceTrain) : ?>
|
||||||
<option value='<?= $targetDefenceTrain ?>' <?= $me->getVar('defence_train') == $targetDefenceTrain ? "selected" : ""; ?>><?= formatDefenceTrain($targetDefenceTrain) ?>(훈사<?= $targetDefenceTrain ?>)</option>
|
<option value='<?= $targetDefenceTrain ?>' <?= $me->getVar('defence_train') == $targetDefenceTrain ? "selected" : ""; ?>><?= formatDefenceTrain($targetDefenceTrain) ?>(훈사<?= $targetDefenceTrain ?>)</option>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
<option value=999 <?= $me->getVar('defence_train') == 999 ? "selected" : ""; ?>><?= formatDefenceTrain(999) ?>[훈련 -3, 사기 -6]</option>
|
<option value=999 <?= $me->getVar('defence_train') == 999 ? "selected" : ""; ?>><?= formatDefenceTrain(999) ?>
|
||||||
|
<?php if($changeDefence999Train != 0 || $changeDefence999Train != 0):
|
||||||
|
?>[<?=$changeDefence999Train!=0?"훈련 {$changeDefence999Train},":''?><?=$changeDefence999Atmos!=0?"사기 {$changeDefence999Atmos}":''
|
||||||
|
?>]<?php endif?></option>
|
||||||
</select>
|
</select>
|
||||||
】<br><br>
|
】<br><br>
|
||||||
<input type=<?= $submit ?> id='set_my_setting' name=btn style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px; value=설정저장><br>
|
<input type=<?= $submit ?> id='set_my_setting' name=btn style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px; value=설정저장><br>
|
||||||
@@ -150,6 +160,11 @@ $use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
|||||||
<button type="button" id='buildNationCandidate' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>사전 거병</button><br><br>
|
<button type="button" id='buildNationCandidate' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>사전 거병</button><br><br>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (GameConst::$availableInstantAction['instantRetreat'] ?? false) : ?>
|
||||||
|
거리 3칸 이내 아국 도시로 즉시 이동<br>
|
||||||
|
<button type="button" id='instantRetreat' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>접경 귀환</button><br><br>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($gameStor->npcmode == 2 && $me->getNPCType() == 0) : ?>
|
<?php if ($gameStor->npcmode == 2 && $me->getNPCType() == 0) : ?>
|
||||||
다른 장수 선택 (<?= substr($me->getAuxVar('next_change') ?? TimeUtil::now(), 0, 19) ?> 부터)<br>
|
다른 장수 선택 (<?= substr($me->getAuxVar('next_change') ?? TimeUtil::now(), 0, 19) ?> 부터)<br>
|
||||||
<a href="select_general_from_pool.php" id='select_general_from_pool'><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>다른 장수 선택</button></a><br><br>
|
<a href="select_general_from_pool.php" id='select_general_from_pool'><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>다른 장수 선택</button></a><br><br>
|
||||||
@@ -178,7 +193,7 @@ $use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
|||||||
<div class="row mx-1">
|
<div class="row mx-1">
|
||||||
<div class="btn-group" role="group">
|
<div class="btn-group" role="group">
|
||||||
<?php foreach ($me->getItems() as $itemKey => $item) : ?>
|
<?php foreach ($me->getItems() as $itemKey => $item) : ?>
|
||||||
<button type="button" data-item-type='<?=$itemKey?>' class="drop-item-btn btn btn-primary <?= $item->getName() == '-' ? 'disabled' : '' ?>"><?= $item->getName() ?></button>
|
<button type="button" data-item-type='<?= $itemKey ?>' class="drop-item-btn btn btn-primary <?= $item->getName() == '-' ? 'disabled' : '' ?>"><?= $item->getName() ?></button>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ $me = $db->queryFirstRow(
|
|||||||
'SELECT no,tournament,refresh_score,turntime from `general`
|
'SELECT no,tournament,refresh_score,turntime from `general`
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id where owner=%i', $userID
|
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id where owner=%i', $userID
|
||||||
);
|
);
|
||||||
|
$generalID = $me['no'];
|
||||||
$admin = $gameStor->getValues(['tournament', 'phase', 'turnterm', 'tnmt_msg', 'tnmt_type', 'develcost', 'tnmt_trig']);
|
$admin = $gameStor->getValues(['tournament', 'phase', 'turnterm', 'tnmt_msg', 'tnmt_type', 'develcost', 'tnmt_trig']);
|
||||||
$turnTerm = $admin['turnterm'];
|
$turnTerm = $admin['turnterm'];
|
||||||
|
|
||||||
|
|||||||
+22
-10
@@ -149,7 +149,7 @@ function getRandGenName(RandUtil $rng)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function cityInfo(General $generalObj)
|
function cityInfo(GeneralLite $generalObj)
|
||||||
{
|
{
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
|
|
||||||
@@ -408,14 +408,14 @@ function checkSecretPermission(array $me, $checkSecretLimit = true)
|
|||||||
}
|
}
|
||||||
|
|
||||||
$secretMin = 0;
|
$secretMin = 0;
|
||||||
$secretMax = checkSecretMaxPermission($me, $penalty);
|
$secretMax = checkSecretMaxPermission($penalty);
|
||||||
|
|
||||||
|
|
||||||
if ($me['officer_level'] == 12) {
|
if ($me['officer_level'] == 12) {
|
||||||
$secretMin = 4;
|
$secretMin = 4;
|
||||||
} else if ($me['permission'] == 'ambassador') {
|
} else if ($permission == 'ambassador') {
|
||||||
$secretMin = 4;
|
$secretMin = 4;
|
||||||
} else if ($me['permission'] == 'auditor') {
|
} else if ($permission == 'auditor') {
|
||||||
$secretMin = 3;
|
$secretMin = 3;
|
||||||
} else if ($me['officer_level'] >= 5) {
|
} else if ($me['officer_level'] >= 5) {
|
||||||
$secretMin = 2;
|
$secretMin = 2;
|
||||||
@@ -1054,10 +1054,10 @@ function increaseRefresh($type = "", $cnt = 1)
|
|||||||
'ip' => $ip,
|
'ip' => $ip,
|
||||||
'date' => $date,
|
'date' => $date,
|
||||||
'path' => "refresh",
|
'path' => "refresh",
|
||||||
'arg' => JSON::encode([
|
'arg' => Json::encode([
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
]),
|
]),
|
||||||
'aux' => JSON::encode([
|
'aux' => Json::encode([
|
||||||
'generalID' => $generalID,
|
'generalID' => $generalID,
|
||||||
'generalName' => $session->generalName,
|
'generalName' => $session->generalName,
|
||||||
'userName' => $session->userName,
|
'userName' => $session->userName,
|
||||||
@@ -1070,7 +1070,7 @@ function updateTraffic()
|
|||||||
$online = getOnlineNum();
|
$online = getOnlineNum();
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxonline', 'maxrefresh']);
|
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxonline', 'maxrefresh', 'recentTraffic']);
|
||||||
/** @var array{year:int,month:int,refresh:int,maxonline:int,maxrefresh:int} $admin */
|
/** @var array{year:int,month:int,refresh:int,maxonline:int,maxrefresh:int} $admin */
|
||||||
|
|
||||||
if ($admin['maxrefresh'] < $admin['refresh']) {
|
if ($admin['maxrefresh'] < $admin['refresh']) {
|
||||||
@@ -1083,6 +1083,19 @@ function updateTraffic()
|
|||||||
$gameStor->maxrefresh = $admin['maxrefresh'];
|
$gameStor->maxrefresh = $admin['maxrefresh'];
|
||||||
$gameStor->maxonline = $admin['maxonline'];
|
$gameStor->maxonline = $admin['maxonline'];
|
||||||
|
|
||||||
|
$recentTraffic = $admin['recentTraffic'] ?? [];
|
||||||
|
if(count($recentTraffic) >= 5){
|
||||||
|
array_shift($recentTraffic);
|
||||||
|
}
|
||||||
|
$recentTraffic[] = [
|
||||||
|
'year'=>$admin['year'],
|
||||||
|
'month' => $admin['month'],
|
||||||
|
'refresh' => $admin['refresh'],
|
||||||
|
'online' => $online,
|
||||||
|
'date' => TimeUtil::now(),
|
||||||
|
];
|
||||||
|
$gameStor->recentTraffic = $recentTraffic;
|
||||||
|
|
||||||
$db->update('general_access_log', ['refresh' => 0], true);
|
$db->update('general_access_log', ['refresh' => 0], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1324,7 +1337,7 @@ function CheckHall($no)
|
|||||||
["betrate", 'calc'],
|
["betrate", 'calc'],
|
||||||
];
|
];
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($no);
|
$generalObj = General::createObjFromDB($no);
|
||||||
|
|
||||||
$ttw = $generalObj->getRankVar(RankColumn::ttw);
|
$ttw = $generalObj->getRankVar(RankColumn::ttw);
|
||||||
$ttd = $generalObj->getRankVar(RankColumn::ttd);
|
$ttd = $generalObj->getRankVar(RankColumn::ttd);
|
||||||
@@ -1714,14 +1727,13 @@ function deleteNation(General $lord, bool $applyDB): array
|
|||||||
$logger->pushGlobalHistoryLog("<R><b>【멸망】</b></><D><b>{$nationName}</b></>{$josaUn} <R>멸망</>했습니다.");
|
$logger->pushGlobalHistoryLog("<R><b>【멸망】</b></><D><b>{$nationName}</b></>{$josaUn} <R>멸망</>했습니다.");
|
||||||
|
|
||||||
|
|
||||||
$nationGeneralList = General::createGeneralObjListFromDB(
|
$nationGeneralList = General::createObjListFromDB(
|
||||||
$db->queryFirstColumn(
|
$db->queryFirstColumn(
|
||||||
'SELECT `no` FROM general WHERE nation=%i AND no != %i',
|
'SELECT `no` FROM general WHERE nation=%i AND no != %i',
|
||||||
$nationID,
|
$nationID,
|
||||||
$lordID
|
$lordID
|
||||||
),
|
),
|
||||||
['npc', 'owner', 'gold', 'rice', 'experience', 'explevel', 'dedication', 'dedlevel', 'belong', 'aux'],
|
['npc', 'owner', 'gold', 'rice', 'experience', 'explevel', 'dedication', 'dedlevel', 'belong', 'aux'],
|
||||||
GeneralQueryMode::Lite,
|
|
||||||
);
|
);
|
||||||
$nationGeneralList[$lordID] = $lord;
|
$nationGeneralList[$lordID] = $lord;
|
||||||
|
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ function _setGeneralCommand(GeneralCommand $command, array $turnList):void {
|
|||||||
|
|
||||||
$db->update('general_turn', [
|
$db->update('general_turn', [
|
||||||
'action'=>$commandName,
|
'action'=>$commandName,
|
||||||
'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT),
|
'arg'=>Json::encode($arg, Json::EMPTY_ARRAY_IS_DICT),
|
||||||
'brief'=>$brief
|
'brief'=>$brief
|
||||||
], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList);
|
], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList);
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ function _setNationCommand(NationCommand $command, array $turnList):void {
|
|||||||
|
|
||||||
$db->update('nation_turn', [
|
$db->update('nation_turn', [
|
||||||
'action'=>$commandName,
|
'action'=>$commandName,
|
||||||
'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT),
|
'arg'=>Json::encode($arg, Json::EMPTY_ARRAY_IS_DICT),
|
||||||
'brief'=>$brief
|
'brief'=>$brief
|
||||||
], 'nation_id = %i AND officer_level = %i AND turn_idx IN %li', $nationID, $officerLevel, $turnList);
|
], 'nation_id = %i AND officer_level = %i AND turn_idx IN %li', $nationID, $officerLevel, $turnList);
|
||||||
}
|
}
|
||||||
@@ -350,7 +350,7 @@ function setGeneralCommand(int $generalID, array $rawTurnList, string $command,
|
|||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$env = $gameStor->getAll();
|
$env = $gameStor->getAll();
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$commandObj = buildGeneralCommandClass($command, $general, $env, $arg);
|
$commandObj = buildGeneralCommandClass($command, $general, $env, $arg);
|
||||||
@@ -425,7 +425,7 @@ function setNationCommand(int $generalID, array $turnList, string $command, ?arr
|
|||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$env = $gameStor->getAll();
|
$env = $gameStor->getAll();
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
if($general->getVar('officer_level') < 5){
|
if($general->getVar('officer_level') < 5){
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -256,6 +256,41 @@ function buildItemClass(?string $type):BaseItem{
|
|||||||
return $obj;
|
return $obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getScenarioEffectClass(?string $type){
|
||||||
|
if($type === null || $type === ''){
|
||||||
|
$type = 'None';
|
||||||
|
}
|
||||||
|
|
||||||
|
static $basePath = __NAMESPACE__.'\\ActionScenarioEffect\\';
|
||||||
|
$classPath = ($basePath.$type);
|
||||||
|
|
||||||
|
if(class_exists($classPath)){
|
||||||
|
return $classPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
$classPath = ($basePath.'che_'.$type);
|
||||||
|
if(class_exists($classPath)){
|
||||||
|
return $classPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \InvalidArgumentException("{$type}은 시나리오 효과 클래스가 아님");
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildScenarioEffectClass(?string $type):iAction{
|
||||||
|
static $cache = [];
|
||||||
|
if($type === null){
|
||||||
|
$type = 'None';
|
||||||
|
}
|
||||||
|
if(key_exists($type, $cache)){
|
||||||
|
return $cache[$type];
|
||||||
|
}
|
||||||
|
$class = getScenarioEffectClass($type);
|
||||||
|
|
||||||
|
$obj = new $class();
|
||||||
|
$cache[$type]= $obj;
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
function getGeneralSpecialDomesticClass(?string $type){
|
function getGeneralSpecialDomesticClass(?string $type){
|
||||||
if($type === null || $type === ''){
|
if($type === null || $type === ''){
|
||||||
$type = GameConst::$defaultSpecialDomestic;
|
$type = GameConst::$defaultSpecialDomestic;
|
||||||
|
|||||||
+17
-6
@@ -451,7 +451,7 @@ function checkWander(RandUtil $rng)
|
|||||||
|
|
||||||
$wanderers = $db->queryFirstColumn('SELECT general.`no` FROM general LEFT JOIN nation ON general.nation = nation.nation WHERE nation.`level` = 0 AND general.`officer_level` = 12');
|
$wanderers = $db->queryFirstColumn('SELECT general.`no` FROM general LEFT JOIN nation ON general.nation = nation.nation WHERE nation.`level` = 0 AND general.`officer_level` = 12');
|
||||||
|
|
||||||
foreach (General::createGeneralObjListFromDB($wanderers) as $wanderer) {
|
foreach (General::createObjListFromDB($wanderers) as $wanderer) {
|
||||||
$wanderCmd = buildGeneralCommandClass('che_해산', $wanderer, $admin);
|
$wanderCmd = buildGeneralCommandClass('che_해산', $wanderer, $admin);
|
||||||
if ($wanderCmd->hasFullConditionMet()) {
|
if ($wanderCmd->hasFullConditionMet()) {
|
||||||
$logger = $wanderer->getLogger();
|
$logger = $wanderer->getLogger();
|
||||||
@@ -743,7 +743,7 @@ function checkEmperior()
|
|||||||
}
|
}
|
||||||
|
|
||||||
$inheritPointManager = InheritancePointManager::getInstance();
|
$inheritPointManager = InheritancePointManager::getInstance();
|
||||||
$allUserGenerals = General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc < 2'));
|
$allUserGenerals = General::createObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc < 2'));
|
||||||
foreach ($allUserGenerals as $genObj) {
|
foreach ($allUserGenerals as $genObj) {
|
||||||
if ($genObj->getNationID() == $nationID) {
|
if ($genObj->getNationID() == $nationID) {
|
||||||
if ($genObj->getVar('officer_level') > 4) {
|
if ($genObj->getVar('officer_level') > 4) {
|
||||||
@@ -899,7 +899,7 @@ function checkEmperior()
|
|||||||
'tiger' => $tigerstr,
|
'tiger' => $tigerstr,
|
||||||
'eagle' => $eaglestr,
|
'eagle' => $eaglestr,
|
||||||
'gen' => $gen,
|
'gen' => $gen,
|
||||||
'history' => JSON::encode($nationHistory),
|
'history' => Json::encode($nationHistory),
|
||||||
'aux' => $statGeneral['aux']
|
'aux' => $statGeneral['aux']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -951,8 +951,19 @@ function updateMaxDomesticCritical(General $general, $score)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function genGenericUniqueRNG(int $year, int $month, int $generalID): RandUtil
|
function genGenericUniqueRNG(int $year, int $month, int $generalID, ?string $reason = null): RandUtil
|
||||||
{
|
{
|
||||||
|
if($reason){
|
||||||
|
return new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
|
UniqueConst::$hiddenSeed,
|
||||||
|
'unique',
|
||||||
|
$year,
|
||||||
|
$month,
|
||||||
|
$generalID,
|
||||||
|
$reason
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
return new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
return new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
UniqueConst::$hiddenSeed,
|
UniqueConst::$hiddenSeed,
|
||||||
'unique',
|
'unique',
|
||||||
@@ -962,7 +973,7 @@ function genGenericUniqueRNG(int $year, int $month, int $generalID): RandUtil
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function genGenericUniqueRNGFromGeneral(General $general): RandUtil
|
function genGenericUniqueRNGFromGeneral(General $general, string $reason): RandUtil
|
||||||
{
|
{
|
||||||
$logger = $general->getLogger();
|
$logger = $general->getLogger();
|
||||||
if (!$logger) {
|
if (!$logger) {
|
||||||
@@ -971,5 +982,5 @@ function genGenericUniqueRNGFromGeneral(General $general): RandUtil
|
|||||||
$year = $logger->getYear();
|
$year = $logger->getYear();
|
||||||
$month = $logger->getMonth();
|
$month = $logger->getMonth();
|
||||||
$generalID = $general->getID();
|
$generalID = $general->getID();
|
||||||
return genGenericUniqueRNG($year, $month, $generalID);
|
return genGenericUniqueRNG($year, $month, $generalID, $reason);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,63 +148,6 @@ function allButton(bool $seizeNPCMode, array $opts = [])
|
|||||||
], $opts));
|
], $opts));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function commandButton(array $opts = [])
|
|
||||||
{
|
|
||||||
$session = Session::getInstance();
|
|
||||||
$userID = Session::getUserID();
|
|
||||||
if (!$session->isGameLoggedIn()) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = DB::db();
|
|
||||||
$me = $db->queryFirstRow("select no,nation,officer_level,belong,permission,penalty from general where owner=%i", $userID);
|
|
||||||
|
|
||||||
$nation = $db->queryFirstRow("select nation,level,color,secretlimit from nation where nation=%i", $me['nation']) ?? [
|
|
||||||
'nation' => 0,
|
|
||||||
'level' => 0,
|
|
||||||
'secretlimit' => 99,
|
|
||||||
'color' => '#000000'
|
|
||||||
];
|
|
||||||
|
|
||||||
$bgColor = $nation['color'] ?? '#000000';
|
|
||||||
$fgColor = newColor($bgColor);
|
|
||||||
|
|
||||||
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|
||||||
$showSecret = false;
|
|
||||||
$permission = checkSecretPermission($me);
|
|
||||||
$btnClassForTournament = $opts['btnClass'];
|
|
||||||
if ($opts['isTournamentApplicationOpen']) {
|
|
||||||
if ($btnClassForTournament != 'dropdown-item') {
|
|
||||||
$btnClassForTournament = 'toolbarButton2';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$btnClassForBetting = $opts['btnClass'];
|
|
||||||
if ($opts['isBettingActive']) {
|
|
||||||
if ($btnClassForTournament != 'dropdown-item') {
|
|
||||||
$btnClassForBetting = 'toolbarButton2';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($permission >= 1) {
|
|
||||||
$showSecret = true;
|
|
||||||
} else if ($me['officer_level'] == 0) {
|
|
||||||
$showSecret = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $templates->render('commandButton', array_merge([
|
|
||||||
'bgColor' => $bgColor,
|
|
||||||
'fgColor' => $fgColor,
|
|
||||||
'meLevel' => $me['officer_level'],
|
|
||||||
'nationLevel' => $nation['level'],
|
|
||||||
'showSecret' => $showSecret,
|
|
||||||
'permission' => $permission,
|
|
||||||
'btnClassForTournament' => $btnClassForTournament,
|
|
||||||
'btnClassForBetting' => $btnClassForBetting,
|
|
||||||
], $opts));
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatWounded(int $value, int $wound): string
|
function formatWounded(int $value, int $wound): string
|
||||||
{
|
{
|
||||||
if ($wound == 0) {
|
if ($wound == 0) {
|
||||||
|
|||||||
@@ -364,7 +364,14 @@ function disaster(RandUtil $rng) {
|
|||||||
$logger->flush();
|
$logger->flush();
|
||||||
|
|
||||||
if (!$isGood) {
|
if (!$isGood) {
|
||||||
$generalListByCity = Util::arrayGroupBy($db->query('SELECT no, name, nation, city, officer_level, injury, leadership, strength, intel, horse, weapon, book, item, crew, crewtype, atmos, train, special, special2 FROM general WHERE city IN %li', Util::squeezeFromArray($targetCityList, 'city')), 'city');
|
[$queryColumns,,] = General::mergeQueryColumn();
|
||||||
|
$generalListByCity = Util::arrayGroupBy(
|
||||||
|
$db->query(
|
||||||
|
'SELECT %l FROM general WHERE city IN %li',
|
||||||
|
Util::formatListOfBackticks($queryColumns),
|
||||||
|
Util::squeezeFromArray($targetCityList, 'city')
|
||||||
|
),
|
||||||
|
'city');
|
||||||
//NOTE: 쿼리 1번이지만 복잡하기 vs 쿼리 여러번이지만 조금 더 깔끔하기
|
//NOTE: 쿼리 1번이지만 복잡하기 vs 쿼리 여러번이지만 조금 더 깔끔하기
|
||||||
foreach ($targetCityList as $city) {
|
foreach ($targetCityList as $city) {
|
||||||
$affectRatio = Util::valueFit($city['secu'] / $city['secu_max'] / 0.8, 0, 1);
|
$affectRatio = Util::valueFit($city['secu'] / $city['secu_max'] / 0.8, 0, 1);
|
||||||
|
|||||||
@@ -882,7 +882,7 @@ function setGift($tnmt_type, $tnmt, $phase)
|
|||||||
//포상 장수 이름, 금액
|
//포상 장수 이름, 금액
|
||||||
$resultHelper[$generalID]['reward'] += $cost;
|
$resultHelper[$generalID]['reward'] += $cost;
|
||||||
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>4강 진출</span>";
|
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>4강 진출</span>";
|
||||||
General::createGeneralObjFromDB($generalID)->increaseInheritancePoint(InheritanceKey::tournament, 10);
|
General::createObjFromDB($generalID)->increaseInheritancePoint(InheritanceKey::tournament, 10);
|
||||||
}
|
}
|
||||||
//결승자 명성 돈
|
//결승자 명성 돈
|
||||||
$cost = $admin['develcost'] * 6;
|
$cost = $admin['develcost'] * 6;
|
||||||
@@ -946,7 +946,7 @@ function setGift($tnmt_type, $tnmt, $phase)
|
|||||||
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
|
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||||
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
|
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||||
|
|
||||||
$generalObjList = General::createGeneralObjListFromDB(array_keys($resultHelper));
|
$generalObjList = General::createObjListFromDB(array_keys($resultHelper));
|
||||||
|
|
||||||
foreach ($resultHelper as $generalID => $general) {
|
foreach ($resultHelper as $generalID => $general) {
|
||||||
$rewardText = number_format($general['reward']);
|
$rewardText = number_format($general['reward']);
|
||||||
|
|||||||
+22
-14
@@ -199,17 +199,25 @@ if($reserve_open){
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::die(ResetHelper::buildScenario(
|
try{
|
||||||
$turnterm,
|
Json::die(ResetHelper::buildScenario(
|
||||||
$sync,
|
$turnterm,
|
||||||
$scenario,
|
$sync,
|
||||||
$fiction,
|
$scenario,
|
||||||
$extend,
|
$fiction,
|
||||||
$block_general_create,
|
$extend,
|
||||||
$npcmode,
|
$block_general_create,
|
||||||
$show_img_level,
|
$npcmode,
|
||||||
!!$tournament_trig,
|
$show_img_level,
|
||||||
$join_mode,
|
!!$tournament_trig,
|
||||||
TimeUtil::now(),
|
$join_mode,
|
||||||
$autorun_user
|
TimeUtil::now(),
|
||||||
));
|
$autorun_user
|
||||||
|
));
|
||||||
|
}
|
||||||
|
catch(\Exception $e){
|
||||||
|
Json::die([
|
||||||
|
'result'=>false,
|
||||||
|
'reason'=>$e->getMessage()
|
||||||
|
]);
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\GeneralLiteQueryMode;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
use sammo\Enums\MessageType;
|
use sammo\Enums\MessageType;
|
||||||
|
|
||||||
@@ -46,12 +47,7 @@ if($destGeneralID==0){
|
|||||||
$general->setVar('nation', $nationID);
|
$general->setVar('nation', $nationID);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$general = General::createGeneralObjFromDB($destGeneralID, [
|
$general = General::createObjFromDB($destGeneralID);
|
||||||
'name', 'leadership', 'strength', 'intel', 'gold','rice',
|
|
||||||
'troop','officer_level','npc','picture','imgsvr',
|
|
||||||
'permission','penalty','belong', 'crewtype',
|
|
||||||
'experience', 'dedication', 'betray', 'dedlevel', 'explevel', 'makelimit', 'aux',
|
|
||||||
], GeneralQueryMode::Lite);
|
|
||||||
|
|
||||||
if($general instanceof DummyGeneral){
|
if($general instanceof DummyGeneral){
|
||||||
Json::die([
|
Json::die([
|
||||||
|
|||||||
+16
-4
@@ -27,14 +27,25 @@ $rootDB = RootDB::db();
|
|||||||
$oNow = new \DateTimeImmutable();
|
$oNow = new \DateTimeImmutable();
|
||||||
$now = $oNow->format('Y-m-d H:i:s');
|
$now = $oNow->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
$userNick = RootDB::db()->queryFirstField('SELECT `NAME` FROM member WHERE `NO`=%i',$userID);
|
$member = $rootDB->queryFirstRow('SELECT `name`, `penalty` FROM member WHERE `NO`=%i', $userID);
|
||||||
if(!$userNick){
|
if(!$member){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
'reason'=>'멤버 정보를 가져오지 못했습니다.'
|
'reason'=>'멤버 정보를 가져오지 못했습니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$userNick = $member['name'];
|
||||||
|
$memberPenalty = Json::decode($member['penalty'] ?? '{}');
|
||||||
|
$penaltyInfo = array_merge($memberPenalty['any'] ?? [], $memberPenalty[DB::prefix()] ?? []);
|
||||||
|
|
||||||
|
$penalty = [];
|
||||||
|
foreach($penaltyInfo as $penaltyKey => $penaltyValue){
|
||||||
|
if($penaltyValue['expire'] ?? 0 > TimeUtil::now()){
|
||||||
|
$penalty[$penaltyKey] = $penaltyValue['value'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$pickResult = $db->queryFirstField('SELECT pick_result FROM select_npc_token WHERE `owner`=%i AND `valid_until`>=%s', $userID, $now);
|
$pickResult = $db->queryFirstField('SELECT pick_result FROM select_npc_token WHERE `owner`=%i AND `valid_until`>=%s', $userID, $now);
|
||||||
if(!$pickResult){
|
if(!$pickResult){
|
||||||
Json::die([
|
Json::die([
|
||||||
@@ -86,10 +97,11 @@ $db->update('general', [
|
|||||||
'defence_train'=>80,
|
'defence_train'=>80,
|
||||||
'permission'=>'normal',
|
'permission'=>'normal',
|
||||||
'owner'=>$userID,
|
'owner'=>$userID,
|
||||||
'aux'=>Json::encode($genAux)
|
'aux'=>Json::encode($genAux),
|
||||||
|
'penalty'=>Json::encode($penalty),
|
||||||
], 'owner <= 0 AND npc = 2 AND no = %i', $pick);
|
], 'owner <= 0 AND npc = 2 AND no = %i', $pick);
|
||||||
$db->insertIgnore('general_access_log', [
|
$db->insertIgnore('general_access_log', [
|
||||||
GeneralAccessLogColumn::generalID->value => $generalID,
|
GeneralAccessLogColumn::generalID->value => $pick,
|
||||||
GeneralAccessLogColumn::userID->value => $userID,
|
GeneralAccessLogColumn::userID->value => $userID,
|
||||||
GeneralAccessLogColumn::lastRefresh->value => $now,
|
GeneralAccessLogColumn::lastRefresh->value => $now,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -36,15 +36,19 @@ if($tnmt < 0 || $tnmt > 1){
|
|||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$me = General::createGeneralObjFromDB($generalID);
|
$me = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
|
|
||||||
if($defence_train !== $me->getVar('defence_train')){
|
if($defence_train !== $me->getVar('defence_train')){
|
||||||
if($defence_train == 999){
|
if($defence_train == 999){
|
||||||
$me->increaseVar('myset', -1);
|
$me->increaseVar('myset', -1);
|
||||||
$me->setVar('defence_train', $defence_train);
|
$me->setVar('defence_train', $defence_train);
|
||||||
$me->increaseVarWithLimit('train', -3, 20);
|
$affectedTrain = -3;
|
||||||
$me->increaseVarWithLimit('atmos', -6, 20);
|
$affectedAtmos = -6;
|
||||||
|
$affectedTrain = $me->onCalcDomestic('changeDefenceTrain', "train{$defence_train}", $affectedTrain);
|
||||||
|
$affectedAtmos = $me->onCalcDomestic('changeDefenceTrain', "atmos{$defence_train}", $affectedAtmos);
|
||||||
|
$me->increaseVarWithLimit('train', $affectedTrain, 20, GameConst::$maxTrainByWar);
|
||||||
|
$me->increaseVarWithLimit('atmos', $affectedAtmos, 20, GameConst::$maxAtmosByWar);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$me->increaseVar('myset', -1);
|
$me->increaseVar('myset', -1);
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ if(!$ownerInfo){
|
|||||||
$info = Json::decode($info);
|
$info = Json::decode($info);
|
||||||
|
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($generalID);
|
$generalObj = General::createObjFromDB($generalID);
|
||||||
$oldGeneralName = $generalObj->getName();
|
$oldGeneralName = $generalObj->getName();
|
||||||
$db->update('select_pool', [
|
$db->update('select_pool', [
|
||||||
'general_id'=>-$generalID,
|
'general_id'=>-$generalID,
|
||||||
|
|||||||
+1
-26
@@ -59,7 +59,7 @@ if ($limitState >= 2) {
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($me['no'], null, GeneralQueryMode::FullWithAccessLog);
|
$generalObj = General::createObjFromDB($me['no'], null, GeneralQueryMode::FullWithAccessLog);
|
||||||
$generalObj->setRawCity($db->queryFirstRow('SELECT * FROM city WHERE city = %i', $generalObj->getCityID()));
|
$generalObj->setRawCity($db->queryFirstRow('SELECT * FROM city WHERE city = %i', $generalObj->getCityID()));
|
||||||
$scenario = $gameStor->scenario_text;
|
$scenario = $gameStor->scenario_text;
|
||||||
|
|
||||||
@@ -285,19 +285,6 @@ if ($lastVoteID) {
|
|||||||
<div id="general-position"><?php generalInfo($generalObj); ?></div>
|
<div id="general-position"><?php generalInfo($generalObj); ?></div>
|
||||||
<div id="generalCommandButton" class="row gx-0">
|
<div id="generalCommandButton" class="row gx-0">
|
||||||
<div class="buttonPlate bg2">
|
<div class="buttonPlate bg2">
|
||||||
<?= commandButton([
|
|
||||||
'splitBtnBegin' => '<div class="btn-group">',
|
|
||||||
'splitBtnEnd' => '</div>',
|
|
||||||
'splitZoneSign' => '<button type="button" class="btn btn-sammo-nation dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false"><span class="visually-hidden">Toggle Dropdown</span></button>',
|
|
||||||
'splitZoneBegin' => '<ul class="dropdown-menu dropdown-menu-end">',
|
|
||||||
'splitZoneEnd' => '</ul>',
|
|
||||||
'splitSubBtnBegin' => '<li>',
|
|
||||||
'splitSubBtnEnd' => '</li>',
|
|
||||||
'btnClass' => 'btn btn-sammo-nation',
|
|
||||||
'btnSplitClass' => 'dropdown-item',
|
|
||||||
'isTournamentApplicationOpen' => $isTournamentApplicationOpen,
|
|
||||||
'isBettingActive' => $isBettingActive
|
|
||||||
])
|
|
||||||
?></div>
|
?></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -398,18 +385,6 @@ if ($lastVoteID) {
|
|||||||
국가 메뉴
|
국가 메뉴
|
||||||
</div>
|
</div>
|
||||||
<ul class="dropdown-menu" aria-labelledby="navbarNation" id="navbarNationItems">
|
<ul class="dropdown-menu" aria-labelledby="navbarNation" id="navbarNationItems">
|
||||||
<?= commandButton([
|
|
||||||
'btnBegin' => '<li>',
|
|
||||||
'btnEnd' => '</li>',
|
|
||||||
'splitMainBegin' => '<div class="d-none">',
|
|
||||||
'splitMainEnd' => '</div>',
|
|
||||||
'splitSubBtnBegin' => '<li>',
|
|
||||||
'splitSubBtnEnd' => '</li>',
|
|
||||||
'btnClass' => 'dropdown-item',
|
|
||||||
'btnSplitClass' => 'dropdown-item',
|
|
||||||
'isTournamentApplicationOpen' => $isTournamentApplicationOpen,
|
|
||||||
'isBettingActive' => $isBettingActive
|
|
||||||
]) ?>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item dropup">
|
<li class="nav-item dropup">
|
||||||
|
|||||||
+23
-7
@@ -37,12 +37,12 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
|
|||||||
|
|
||||||
$city = new WarUnitCity($rng, $rawDefenderCity, $rawDefenderNation, $year, $month, $startYear);
|
$city = new WarUnitCity($rng, $rawDefenderCity, $rawDefenderNation, $year, $month, $startYear);
|
||||||
|
|
||||||
$defenderIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city'));
|
$defenderCityGeneralIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0', $city->getVar('nation'), $city->getVar('city'));
|
||||||
$defenderGeneralList = General::createGeneralObjListFromDB($defenderIDList, null);
|
$defenderCityGeneralList = General::createObjListFromDB($defenderCityGeneralIDList, null);
|
||||||
|
|
||||||
/** @var WarUnit[] */
|
/** @var WarUnit[] */
|
||||||
$defenderList = [];
|
$defenderList = [];
|
||||||
foreach($defenderGeneralList as $defenderGeneral){
|
foreach($defenderCityGeneralList as $defenderGeneral){
|
||||||
$defenderGeneral->setRawCity($rawDefenderCity);
|
$defenderGeneral->setRawCity($rawDefenderCity);
|
||||||
$defenderCandidate = new WarUnitGeneral($rng, $defenderGeneral, $rawDefenderNation, false);
|
$defenderCandidate = new WarUnitGeneral($rng, $defenderGeneral, $rawDefenderNation, false);
|
||||||
if(extractBattleOrder($defenderCandidate, $attacker) <= 0){
|
if(extractBattleOrder($defenderCandidate, $attacker) <= 0){
|
||||||
@@ -186,7 +186,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
|
|||||||
'year' => $year,
|
'year' => $year,
|
||||||
'month' => $month,
|
'month' => $month,
|
||||||
'join_mode' => $joinMode,
|
'join_mode' => $joinMode,
|
||||||
], $attacker->getGeneral(), $city->getRaw());
|
], $attacker->getGeneral(), $city->getRaw(), $defenderCityGeneralList);
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractBattleOrder(WarUnit $defender, WarUnit $attacker)
|
function extractBattleOrder(WarUnit $defender, WarUnit $attacker)
|
||||||
@@ -529,8 +529,9 @@ function getConquerNation($city): int
|
|||||||
return Util::array_first_key($conflict);
|
return Util::array_first_key($conflict);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ConquerCity(array $admin, General $general, array $city)
|
function ConquerCity(array $admin, General $general, array $city, array $defenderCityGeneralList)
|
||||||
{
|
{
|
||||||
|
/** @var General[] $defenderCityGeneralList */
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
|
|
||||||
$year = $admin['year'];
|
$year = $admin['year'];
|
||||||
@@ -585,6 +586,21 @@ function ConquerCity(array $admin, General $general, array $city)
|
|||||||
if(TurnExecutionHelper::runEventHandler($db, $gameStor, EventTarget::OccupyCity)){
|
if(TurnExecutionHelper::runEventHandler($db, $gameStor, EventTarget::OccupyCity)){
|
||||||
$gameStor->cacheAll();
|
$gameStor->cacheAll();
|
||||||
}
|
}
|
||||||
|
$rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
|
UniqueConst::$hiddenSeed,
|
||||||
|
'ConquerCity',
|
||||||
|
$year,
|
||||||
|
$month,
|
||||||
|
$attackerNationID,
|
||||||
|
$attackerID,
|
||||||
|
$cityID
|
||||||
|
)));
|
||||||
|
foreach($defenderCityGeneralList as $defenderCityGeneral){
|
||||||
|
$defenderCityGeneral->onArbitraryAction($defenderCityGeneral, $rng, 'ConquerCity', null, [
|
||||||
|
'attacker' => $general
|
||||||
|
]);
|
||||||
|
$defenderCityGeneral->applyDB($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 국가 멸망시
|
// 국가 멸망시
|
||||||
@@ -596,10 +612,10 @@ function ConquerCity(array $admin, General $general, array $city)
|
|||||||
|
|
||||||
$lord = new General($db->queryFirstRow(
|
$lord = new General($db->queryFirstRow(
|
||||||
'SELECT %l FROM general WHERE nation = %i AND officer_level = %i LIMIT 1',
|
'SELECT %l FROM general WHERE nation = %i AND officer_level = %i LIMIT 1',
|
||||||
Util::formatListOfBackticks(General::mergeQueryColumn(['npc', 'gold', 'rice', 'experience', 'explevel', 'belong', 'dedication', 'dedlevel', 'aux'], GeneralQueryMode::Lite)[0]),
|
Util::formatListOfBackticks(General::mergeQueryColumn()[0]),
|
||||||
$defenderNationID,
|
$defenderNationID,
|
||||||
12
|
12
|
||||||
), null, null, $city, $loseNation, $year, $month, false);
|
), null, null, $city, $loseNation, $year, $month);
|
||||||
|
|
||||||
$josaUl = JosaUtil::pick($defenderNationName, '을');
|
$josaUl = JosaUtil::pick($defenderNationName, '을');
|
||||||
$attackerLogger->pushNationalHistoryLog("<D><b>{$defenderNationName}</b></>{$josaUl} 정복");
|
$attackerLogger->pushNationalHistoryLog("<D><b>{$defenderNationName}</b></>{$josaUl} 정복");
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class BidBuyRiceAuction extends \sammo\BaseAPI
|
|||||||
$amount = $this->args['amount'];
|
$amount = $this->args['amount'];
|
||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
$auction = new AuctionBuyRice($auctionID, $general);
|
$auction = new AuctionBuyRice($auctionID, $general);
|
||||||
$result = $auction->bid($amount, true);
|
$result = $auction->bid($amount, true);
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class BidSellRiceAuction extends \sammo\BaseAPI
|
|||||||
$amount = $this->args['amount'];
|
$amount = $this->args['amount'];
|
||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
$auction = new AuctionSellRice($auctionID, $general);
|
$auction = new AuctionSellRice($auctionID, $general);
|
||||||
$result = $auction->bid($amount, true);
|
$result = $auction->bid($amount, true);
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class BidUniqueAuction extends \sammo\BaseAPI
|
|||||||
$tryExtendCloseDate = $this->args['extendCloseDate'] ?? false;
|
$tryExtendCloseDate = $this->args['extendCloseDate'] ?? false;
|
||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
$auction = new AuctionUniqueItem($auctionID, $general);
|
$auction = new AuctionUniqueItem($auctionID, $general);
|
||||||
$result = $auction->bid($amount, $tryExtendCloseDate);
|
$result = $auction->bid($amount, $tryExtendCloseDate);
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class GetUniqueItemAuctionDetail extends \sammo\BaseAPI
|
|||||||
$inheritMgr = InheritancePointManager::getInstance();
|
$inheritMgr = InheritancePointManager::getInstance();
|
||||||
//preveious라서 column을 최대한 비울 수 있다.
|
//preveious라서 column을 최대한 비울 수 있다.
|
||||||
$remainPoint = $inheritMgr->getInheritancePoint(
|
$remainPoint = $inheritMgr->getInheritancePoint(
|
||||||
General::createGeneralObjFromDB($generalID, ['owner'], GeneralQueryMode::Core),
|
General::createObjFromDB($generalID),
|
||||||
InheritanceKey::previous
|
InheritanceKey::previous
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class OpenBuyRiceAuction extends \sammo\BaseAPI
|
|||||||
$finishBidAmount = $this->args['finishBidAmount'];
|
$finishBidAmount = $this->args['finishBidAmount'];
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class OpenSellRiceAuction extends \sammo\BaseAPI
|
|||||||
$finishBidAmount = $this->args['finishBidAmount'];
|
$finishBidAmount = $this->args['finishBidAmount'];
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class OpenUniqueAuction extends \sammo\BaseAPI
|
|||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$itemObj = buildItemClass($itemID);
|
$itemObj = buildItemClass($itemID);
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use sammo\Session;
|
|||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
use sammo\DB;
|
use sammo\DB;
|
||||||
use sammo\Enums\APIRecoveryType;
|
use sammo\Enums\APIRecoveryType;
|
||||||
|
use sammo\GameConst;
|
||||||
use sammo\Json;
|
use sammo\Json;
|
||||||
use sammo\KVStorage;
|
use sammo\KVStorage;
|
||||||
use sammo\TimeUtil;
|
use sammo\TimeUtil;
|
||||||
@@ -32,8 +33,18 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
|
$invalidTurnList = 0;
|
||||||
|
|
||||||
$rawTurn = $db->queryAllLists('SELECT turn_idx, action, arg, brief FROM general_turn WHERE general_id = %i ORDER BY turn_idx ASC', $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]) {
|
foreach ($rawTurn as [$turn_idx, $action, $arg, $brief]) {
|
||||||
|
if($turn_idx < 0) {
|
||||||
|
$invalidTurnList = -1;
|
||||||
|
$turn_idx += GameConst::$maxTurn;
|
||||||
|
}
|
||||||
|
else if($turn_idx >= GameConst::$maxTurn) {
|
||||||
|
$invalidTurnList = 1;
|
||||||
|
$turn_idx -= GameConst::$maxTurn;
|
||||||
|
}
|
||||||
$commandList[$turn_idx] = [
|
$commandList[$turn_idx] = [
|
||||||
'action' => $action,
|
'action' => $action,
|
||||||
'brief' => $brief,
|
'brief' => $brief,
|
||||||
@@ -41,6 +52,19 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($invalidTurnList != 0){
|
||||||
|
if($invalidTurnList > 0){
|
||||||
|
$db->update('general_turn', [
|
||||||
|
'turn_idx' => $db->sqleval('turn_idx - %i', GameConst::$maxTurn)
|
||||||
|
], 'general_id=%i AND turn_idx >= %i', $generalID, GameConst::$maxTurn);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$db->update('general_turn', [
|
||||||
|
'turn_idx' => $db->sqleval('turn_idx + %i', GameConst::$maxTurn)
|
||||||
|
], 'general_id=%i AND turn_idx < 0', $generalID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
|
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class BuildNationCandidate extends \sammo\BaseAPI
|
|||||||
|
|
||||||
$env = $gameStor->getAll();
|
$env = $gameStor->getAll();
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($general['no']);
|
$generalObj = General::createObjFromDB($general['no']);
|
||||||
|
|
||||||
$validCmd = false;
|
$validCmd = false;
|
||||||
foreach(GameConst::$availableGeneralCommand as $cmdList){
|
foreach(GameConst::$availableGeneralCommand as $cmdList){
|
||||||
@@ -90,6 +90,9 @@ class BuildNationCandidate extends \sammo\BaseAPI
|
|||||||
return '거병을 실패했습니다.';
|
return '거병을 실패했습니다.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$generalObj->setVar('killturn', $env['killturn']);
|
||||||
|
$generalObj->applyDB($db);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class DieOnPrestart extends \sammo\BaseAPI
|
|||||||
return "아직 삭제할 수 없습니다. {$targetTimeShort} 부터 가능합니다.";
|
return "아직 삭제할 수 없습니다. {$targetTimeShort} 부터 가능합니다.";
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($general['no']);
|
$generalObj = General::createObjFromDB($general['no']);
|
||||||
if ($generalObj instanceof DummyGeneral) {
|
if ($generalObj instanceof DummyGeneral) {
|
||||||
trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING);
|
trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class DropItem extends \sammo\BaseAPI
|
|||||||
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
||||||
{
|
{
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$me = General::createGeneralObjFromDB($generalID);
|
$me = General::createObjFromDB($generalID);
|
||||||
|
|
||||||
$itemType = $this->args['itemType'];
|
$itemType = $this->args['itemType'];
|
||||||
$item = $me->getItem($itemType);
|
$item = $me->getItem($itemType);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class GetCommandTable extends \sammo\BaseAPI{
|
|||||||
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
||||||
{
|
{
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$me = General::createGeneralObjFromDB($generalID);
|
$me = General::createObjFromDB($generalID);
|
||||||
$commandTable = getCommandTable($me);
|
$commandTable = getCommandTable($me);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -534,7 +534,7 @@ class GetFrontInfo extends \sammo\BaseAPI
|
|||||||
{
|
{
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
//NOTE: 이 경우 staticNation 정보를 조회한다.
|
//NOTE: 이 경우 staticNation 정보를 조회한다.
|
||||||
$general = General::createGeneralObjFromDB($generalID, null, GeneralQueryMode::FullWithAccessLog);
|
$general = General::createObjFromDB($generalID, null, GeneralQueryMode::FullWithAccessLog);
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
$cityID = $general->getCityID();
|
$cityID = $general->getCityID();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo\API\General;
|
||||||
|
|
||||||
|
use sammo\DB;
|
||||||
|
use sammo\DummyGeneral;
|
||||||
|
use sammo\Enums\APIRecoveryType;
|
||||||
|
use sammo\Enums\GeneralAccessLogColumn;
|
||||||
|
use sammo\GameConst;
|
||||||
|
use sammo\Session;
|
||||||
|
use sammo\General;
|
||||||
|
use sammo\JosaUtil;
|
||||||
|
use sammo\KVStorage;
|
||||||
|
use sammo\LiteHashDRBG;
|
||||||
|
use sammo\RandUtil;
|
||||||
|
use sammo\TimeUtil;
|
||||||
|
use sammo\UniqueConst;
|
||||||
|
use sammo\Util;
|
||||||
|
|
||||||
|
use function sammo\addTurn;
|
||||||
|
use function sammo\buildGeneralCommandClass;
|
||||||
|
use function sammo\increaseRefresh;
|
||||||
|
|
||||||
|
class InstantRetreat extends \sammo\BaseAPI
|
||||||
|
{
|
||||||
|
public function validateArgs(): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRequiredSessionMode(): int
|
||||||
|
{
|
||||||
|
return static::REQ_GAME_LOGIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
||||||
|
{
|
||||||
|
|
||||||
|
if(!(GameConst::$availableInstantAction['instantRetreat'] ?? false)){
|
||||||
|
return '접경귀환을 사용할 수 없는 시나리오입니다.';
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
$gameStor->cacheAll();
|
||||||
|
|
||||||
|
$general = General::createObjFromDB($session->generalID);
|
||||||
|
|
||||||
|
if (!$general) {
|
||||||
|
return '장수가 없습니다';
|
||||||
|
}
|
||||||
|
|
||||||
|
increaseRefresh("접경귀환", 1);
|
||||||
|
|
||||||
|
$commandObj = buildGeneralCommandClass('che_접경귀환', $general, $gameStor->getAll(true));
|
||||||
|
$logger = $general->getLogger();
|
||||||
|
|
||||||
|
if (!$commandObj->hasFullConditionMet()) {
|
||||||
|
$logger->pushGeneralActionLog($commandObj->getFailString());
|
||||||
|
$reason = $commandObj->getFailString();
|
||||||
|
return $reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $commandObj->run(new RandUtil(
|
||||||
|
new LiteHashDRBG(Util::simpleSerialize(
|
||||||
|
UniqueConst::$hiddenSeed,
|
||||||
|
'InstantRetreat',
|
||||||
|
$general->getID(),
|
||||||
|
$gameStor->year,
|
||||||
|
$gameStor->month,
|
||||||
|
$general->getCityID(),
|
||||||
|
))
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
return '가까운 아국 도시가 없습니다.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -54,7 +54,7 @@ class Join extends \sammo\BaseAPI
|
|||||||
'leadership',
|
'leadership',
|
||||||
'strength',
|
'strength',
|
||||||
'intel',
|
'intel',
|
||||||
'inheritTurntime',
|
'inheritTurntimeZone',
|
||||||
])
|
])
|
||||||
->rule('boolean', [
|
->rule('boolean', [
|
||||||
'pic'
|
'pic'
|
||||||
@@ -72,7 +72,8 @@ class Join extends \sammo\BaseAPI
|
|||||||
], GameConst::$defaultStatMax)
|
], GameConst::$defaultStatMax)
|
||||||
->rule('in', 'character', array_merge(GameConst::$availablePersonality, ['Random']))
|
->rule('in', 'character', array_merge(GameConst::$availablePersonality, ['Random']))
|
||||||
->rule('in', 'inheritSpecial', GameConst::$availableSpecialWar)
|
->rule('in', 'inheritSpecial', GameConst::$availableSpecialWar)
|
||||||
->rule('min', 'inheritTurntime', 0)
|
->rule('min', 'inheritTurntimeZone', 0)
|
||||||
|
->rule('max', 'inheritTurntimeZone', 59)
|
||||||
->rule('in', 'inheritCity', array_keys(CityConst::all()))
|
->rule('in', 'inheritCity', array_keys(CityConst::all()))
|
||||||
->rule('integerArray', 'inheritBonusStat');
|
->rule('integerArray', 'inheritBonusStat');
|
||||||
|
|
||||||
@@ -139,22 +140,28 @@ class Join extends \sammo\BaseAPI
|
|||||||
$intel = $this->args['intel'];
|
$intel = $this->args['intel'];
|
||||||
|
|
||||||
$inheritSpecial = $this->args['inheritSpecial'] ?? null;
|
$inheritSpecial = $this->args['inheritSpecial'] ?? null;
|
||||||
$inheritTurntime = $this->args['inheritTurntime'] ?? null;
|
$inheritTurntimeZone = $this->args['inheritTurntimeZone'] ?? null;
|
||||||
$inheritCity = $this->args['inheritCity'] ?? null;
|
$inheritCity = $this->args['inheritCity'] ?? null;
|
||||||
$inheritBonusStat = $this->args['inheritBonusStat'] ?? null;
|
$inheritBonusStat = $this->args['inheritBonusStat'] ?? null;
|
||||||
|
|
||||||
if ($inheritTurntime !== null && $inheritCity !== null) {
|
|
||||||
return '턴과 도시를 동시에 지정할 수 없습니다.';
|
|
||||||
}
|
|
||||||
|
|
||||||
$rootDB = RootDB::db();
|
$rootDB = RootDB::db();
|
||||||
//회원 테이블에서 정보확인
|
//회원 테이블에서 정보확인
|
||||||
$member = $rootDB->queryFirstRow('SELECT `no`, id, picture, grade, `name`, imgsvr FROM member WHERE no=%i', $userID);
|
$member = $rootDB->queryFirstRow('SELECT `no`, id, picture, grade, `name`, imgsvr, `penalty` FROM member WHERE no=%i', $userID);
|
||||||
|
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
return "잘못된 접근입니다!!!";
|
return "잘못된 접근입니다!!!";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$memberPenalty = Json::decode($member['penalty'] ?? "{}");
|
||||||
|
$penaltyInfo = array_merge($memberPenalty['any'] ?? [], $memberPenalty[DB::prefix()] ?? []);
|
||||||
|
|
||||||
|
$penalty = [];
|
||||||
|
foreach($penaltyInfo as $penaltyKey => $penaltyValue){
|
||||||
|
if($penaltyValue['expire'] ?? 0 > TimeUtil::now()){
|
||||||
|
$penalty[$penaltyKey] = $penaltyValue['value'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$gameStor->cacheValues(['year', 'month', 'maxgeneral', 'scenario', 'show_img_level', 'block_general_create', 'turnterm', 'turntime', 'genius', 'npcmode']);
|
$gameStor->cacheValues(['year', 'month', 'maxgeneral', 'scenario', 'show_img_level', 'block_general_create', 'turnterm', 'turntime', 'genius', 'npcmode']);
|
||||||
@@ -232,7 +239,7 @@ class Join extends \sammo\BaseAPI
|
|||||||
if ($inheritSpecial !== null) {
|
if ($inheritSpecial !== null) {
|
||||||
$inheritRequiredPoint += GameConst::$inheritBornSpecialPoint;
|
$inheritRequiredPoint += GameConst::$inheritBornSpecialPoint;
|
||||||
}
|
}
|
||||||
if ($inheritTurntime !== null) {
|
if ($inheritTurntimeZone !== null) {
|
||||||
$inheritRequiredPoint += GameConst::$inheritBornTurntimePoint;
|
$inheritRequiredPoint += GameConst::$inheritBornTurntimePoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,12 +354,14 @@ class Join extends \sammo\BaseAPI
|
|||||||
$experience *= 0.8;
|
$experience *= 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($inheritTurntime !== null) {
|
if ($inheritTurntimeZone !== null) {
|
||||||
$inheritTurntime = $inheritTurntime % ($admin['turnterm'] * 60);
|
$inheritTurntime = $inheritTurntimeZone * $admin['turnterm'];
|
||||||
|
$inheritTurntime += $rng->nextRangeInt(0, Util::clamp($admin['turnterm'] - 1, 0));
|
||||||
|
|
||||||
$userLogger->push(sprintf("턴 시간 %02d:%02d 로 지정", intdiv($inheritTurntime, 60), $inheritTurntime % 60), "inheritPoint");
|
$userLogger->push(sprintf("턴 시간 %02d:%02d 로 지정", intdiv($inheritTurntime, 60), $inheritTurntime % 60), "inheritPoint");
|
||||||
|
|
||||||
$inheritTurntime += $rng->nextRangeInt(0, 999999) / 1000000;
|
$inheritTurntime += $rng->nextRangeInt(0, 999999) / 1000000;
|
||||||
|
|
||||||
$turntime = new \DateTimeImmutable(cutTurn($admin['turntime'], $admin['turnterm']));
|
$turntime = new \DateTimeImmutable(cutTurn($admin['turntime'], $admin['turnterm']));
|
||||||
$turntime = $turntime->add(TimeUtil::secondsToDateInterval($inheritTurntime));
|
$turntime = $turntime->add(TimeUtil::secondsToDateInterval($inheritTurntime));
|
||||||
$turntime = TimeUtil::format($turntime, true);
|
$turntime = TimeUtil::format($turntime, true);
|
||||||
@@ -424,7 +433,8 @@ class Join extends \sammo\BaseAPI
|
|||||||
'specage' => $specage,
|
'specage' => $specage,
|
||||||
'special' => $special,
|
'special' => $special,
|
||||||
'specage2' => $specage2,
|
'specage2' => $specage2,
|
||||||
'special2' => $special2
|
'special2' => $special2,
|
||||||
|
'penalty' => Json::encode($penalty),
|
||||||
]);
|
]);
|
||||||
$generalID = $db->insertId();
|
$generalID = $db->insertId();
|
||||||
$db->insert('general_access_log', [
|
$db->insert('general_access_log', [
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class BuyHiddenBuff extends \sammo\BaseAPI
|
|||||||
$type = $this->args['type'];
|
$type = $this->args['type'];
|
||||||
$level = $this->args['level'];
|
$level = $this->args['level'];
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
if ($userID != $general->getVar('owner')) {
|
if ($userID != $general->getVar('owner')) {
|
||||||
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class BuyRandomUnique extends \sammo\BaseAPI
|
|||||||
$userID = $session->userID;
|
$userID = $session->userID;
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
if($userID != $general->getVar('owner')){
|
if($userID != $general->getVar('owner')){
|
||||||
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class ResetSpecialWar extends \sammo\BaseAPI
|
|||||||
$userID = $session->userID;
|
$userID = $session->userID;
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
if ($userID != $general->getVar('owner')) {
|
if ($userID != $general->getVar('owner')) {
|
||||||
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class ResetTurnTime extends \sammo\BaseAPI
|
|||||||
$userID = $session->userID;
|
$userID = $session->userID;
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
if ($userID != $general->getVar('owner')) {
|
if ($userID != $general->getVar('owner')) {
|
||||||
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ class ResetTurnTime extends \sammo\BaseAPI
|
|||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
if($gameStor->isunited){
|
if ($gameStor->isunited) {
|
||||||
return '이미 천하가 통일되었습니다.';
|
return '이미 천하가 통일되었습니다.';
|
||||||
}
|
}
|
||||||
$inheritStor = KVStorage::getStorage($db, "inheritance_{$userID}");
|
$inheritStor = KVStorage::getStorage($db, "inheritance_{$userID}");
|
||||||
@@ -62,36 +62,25 @@ class ResetTurnTime extends \sammo\BaseAPI
|
|||||||
}
|
}
|
||||||
|
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
[$turnTerm, $serverTurnTime] = $gameStor->getValuesAsArray(['turnterm', 'turntime']);
|
$turnTerm = $gameStor->getValue('turnterm');
|
||||||
|
|
||||||
$currTurnTime = new DateTimeImmutable($general->getTurnTime());
|
$currTurnTime = new DateTimeImmutable($general->getTurnTime());
|
||||||
$serverTurnTimeObj = new DateTimeImmutable($serverTurnTime);
|
|
||||||
|
|
||||||
$rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
$rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
UniqueConst::$hiddenSeed,
|
UniqueConst::$hiddenSeed,
|
||||||
'ResetTurnTime',
|
'ResetTurnTime',
|
||||||
$userID,
|
$userID,
|
||||||
$general->getTurnTime()
|
$general->getAuxVar('nextTurnTimeBase') ?? $general->getTurnTime()
|
||||||
)));
|
)));
|
||||||
|
|
||||||
$afterTurn = $rng->nextRange($turnTerm * -60 / 2, $turnTerm * 60 / 2);
|
$afterTurn = $rng->nextFloat1() * $turnTerm * 60;
|
||||||
|
|
||||||
$userLogger = new UserLogger($userID);
|
$userLogger = new UserLogger($userID);
|
||||||
if($afterTurn >= 0){
|
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾸어 다다음 턴부터 %02d:%02d 적용", intdiv(Util::toInt($afterTurn), 60), $afterTurn % 60), "inheritPoint");
|
||||||
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 뒤로 밀림", intdiv(Util::toInt($afterTurn), 60), $afterTurn%60), "inheritPoint");
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$userLogger->push(sprintf("{$reqPoint} 포인트로 턴 시간을 바꾼 결과 %02d:%02d 앞으로 당김", intdiv(Util::toInt(-$afterTurn), 60), (-$afterTurn)%60), "inheritPoint");
|
|
||||||
}
|
|
||||||
$userLogger->flush();
|
$userLogger->flush();
|
||||||
|
|
||||||
$turnTime = $currTurnTime->add(TimeUtil::secondsToDateInterval($afterTurn));
|
|
||||||
if ($turnTime <= $serverTurnTimeObj && $serverTurnTimeObj <= $currTurnTime) {
|
|
||||||
$turnTime = $turnTime->add(TimeUtil::secondsToDateInterval($turnTerm * 60));
|
|
||||||
}
|
|
||||||
|
|
||||||
$general->setVar('turntime', TimeUtil::format($turnTime, true));
|
|
||||||
$general->setAuxVar('inheritResetTurnTime', $nextLevel);
|
$general->setAuxVar('inheritResetTurnTime', $nextLevel);
|
||||||
|
$general->setAuxVar('nextTurnTimeBase', $afterTurn);
|
||||||
$inheritStor->setValue('previous', [$previousPoint - $reqPoint, null]);
|
$inheritStor->setValue('previous', [$previousPoint - $reqPoint, null]);
|
||||||
$general->increaseRankVar(RankColumn::inherit_point_spent_dynamic, $reqPoint);
|
$general->increaseRankVar(RankColumn::inherit_point_spent_dynamic, $reqPoint);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class SetNextSpecialWar extends \sammo\BaseAPI
|
|||||||
|
|
||||||
$type = $this->args['type'];
|
$type = $this->args['type'];
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID);
|
$general = General::createObjFromDB($generalID);
|
||||||
if ($userID != $general->getVar('owner')) {
|
if ($userID != $general->getVar('owner')) {
|
||||||
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
return '로그인 상태가 이상합니다. 다시 로그인해 주세요.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ use DateTimeInterface;
|
|||||||
use sammo\DB;
|
use sammo\DB;
|
||||||
use sammo\Enums\APIRecoveryType;
|
use sammo\Enums\APIRecoveryType;
|
||||||
use sammo\Enums\MessageType;
|
use sammo\Enums\MessageType;
|
||||||
|
use sammo\Json;
|
||||||
use sammo\Message;
|
use sammo\Message;
|
||||||
use sammo\MessageTarget;
|
use sammo\MessageTarget;
|
||||||
use sammo\Validator;
|
use sammo\Validator;
|
||||||
|
use sammo\Util;
|
||||||
|
|
||||||
use function sammo\checkLimit;
|
use function sammo\checkLimit;
|
||||||
use function sammo\checkSecretPermission;
|
use function sammo\checkSecretPermission;
|
||||||
@@ -170,6 +172,8 @@ class SendMessage extends \sammo\BaseAPI
|
|||||||
return '장수가 없습니다.';
|
return '장수가 없습니다.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$penalty = Json::decode($me['penalty'] ?? '{}');
|
||||||
|
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
$limitState = checkLimit($me['refresh_score']);
|
||||||
if ($limitState >= 2) {
|
if ($limitState >= 2) {
|
||||||
return '접속 제한입니다.';
|
return '접속 제한입니다.';
|
||||||
@@ -226,8 +230,10 @@ class SendMessage extends \sammo\BaseAPI
|
|||||||
$now = new \DateTime();
|
$now = new \DateTime();
|
||||||
$lastMsg = new \DateTime($session->lastMsg ?? '0000-00-00');
|
$lastMsg = new \DateTime($session->lastMsg ?? '0000-00-00');
|
||||||
$msg_interval = $now->getTimestamp() - $lastMsg->getTimestamp();
|
$msg_interval = $now->getTimestamp() - $lastMsg->getTimestamp();
|
||||||
if ($msg_interval < 2) {
|
|
||||||
return '개인메세지는 2초당 1건만 보낼 수 있습니다!';
|
$msg_min_interval = $penalty['sendPrivateMsgDelay'] ?? 2;
|
||||||
|
if ($msg_interval < $msg_min_interval) {
|
||||||
|
return "개인메세지는 {$msg_min_interval}초당 1건만 보낼 수 있습니다!";
|
||||||
}
|
}
|
||||||
$session->lastMsg = $now->format('Y-m-d H:i:s');
|
$session->lastMsg = $now->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ namespace sammo\API\Nation;
|
|||||||
use ArrayObject;
|
use ArrayObject;
|
||||||
use sammo\DB;
|
use sammo\DB;
|
||||||
use sammo\Enums\APIRecoveryType;
|
use sammo\Enums\APIRecoveryType;
|
||||||
|
use sammo\Enums\GeneralLiteQueryMode;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
use sammo\General;
|
use sammo\General;
|
||||||
|
use sammo\GeneralLite;
|
||||||
use sammo\Session;
|
use sammo\Session;
|
||||||
use sammo\Util;
|
use sammo\Util;
|
||||||
|
|
||||||
@@ -165,7 +167,7 @@ class GeneralList extends \sammo\BaseAPI
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
[$queryColumns, $rankColumns, $accessLogColumns] = General::mergeQueryColumn(array_keys(static::$viewColumns), GeneralQueryMode::Lite);
|
[$queryColumns, $rankColumns, $accessLogColumns] = GeneralLite::mergeQueryColumn(array_keys(static::$viewColumns), GeneralLiteQueryMode::Lite);
|
||||||
|
|
||||||
$rawGeneralList = Util::convertArrayToDict(
|
$rawGeneralList = Util::convertArrayToDict(
|
||||||
$db->query(
|
$db->query(
|
||||||
@@ -311,7 +313,7 @@ class GeneralList extends \sammo\BaseAPI
|
|||||||
foreach ($rawGeneralList as $rawGeneral) {
|
foreach ($rawGeneralList as $rawGeneral) {
|
||||||
//General 생성?
|
//General 생성?
|
||||||
if (key_exists('aux', $rawGeneral)) {
|
if (key_exists('aux', $rawGeneral)) {
|
||||||
$rawGeneral['aux'] = \sammo\JSON::decode($rawGeneral['aux']);
|
$rawGeneral['aux'] = \sammo\Json::decode($rawGeneral['aux']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = [];
|
$item = [];
|
||||||
|
|||||||
@@ -14,14 +14,6 @@ use sammo\Util;
|
|||||||
use sammo\Validator;
|
use sammo\Validator;
|
||||||
|
|
||||||
use function sammo\buildNationCommandClass;
|
use function sammo\buildNationCommandClass;
|
||||||
use function sammo\checkLimit;
|
|
||||||
use function sammo\checkSecretPermission;
|
|
||||||
use function sammo\getBattleDetailLogMore;
|
|
||||||
use function sammo\getBattleResultMore;
|
|
||||||
use function sammo\getBattleResultRecent;
|
|
||||||
use function sammo\getGeneralActionLogMore;
|
|
||||||
use function sammo\getGeneralActionLogRecent;
|
|
||||||
use function sammo\getGeneralHistoryLogAll;
|
|
||||||
use function sammo\getNationStaticInfo;
|
use function sammo\getNationStaticInfo;
|
||||||
|
|
||||||
class GetNationInfo extends \sammo\BaseAPI
|
class GetNationInfo extends \sammo\BaseAPI
|
||||||
@@ -66,7 +58,7 @@ class GetNationInfo extends \sammo\BaseAPI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($session->generalID, null, GeneralQueryMode::FullWithoutIAction);
|
$generalObj = General::createObjFromDB($session->generalID);
|
||||||
|
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$gameEnv = $gameStor->getValues(['year', 'month', 'startyear']);
|
$gameEnv = $gameStor->getValues(['year', 'month', 'startyear']);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ use sammo\General;
|
|||||||
use sammo\Json;
|
use sammo\Json;
|
||||||
use sammo\KVStorage;
|
use sammo\KVStorage;
|
||||||
use sammo\TimeUtil;
|
use sammo\TimeUtil;
|
||||||
|
use sammo\Util;
|
||||||
|
|
||||||
use function sammo\checkLimit;
|
use function sammo\checkLimit;
|
||||||
use function sammo\checkSecretPermission;
|
use function sammo\checkSecretPermission;
|
||||||
@@ -42,7 +43,8 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$me = $db->queryFirstRow(
|
||||||
'SELECT no,nation,officer_level,refresh_score,turntime,belong,penalty,permission FROM `general`
|
'SELECT no,nation,officer_level,refresh_score,turntime,belong,penalty,permission FROM `general`
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner=%i', $userID
|
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner=%i',
|
||||||
|
$userID
|
||||||
);
|
);
|
||||||
|
|
||||||
$nationLevel = $db->queryFirstField('SELECT level FROM nation WHERE nation = %i', $me['nation']);
|
$nationLevel = $db->queryFirstField('SELECT level FROM nation WHERE nation = %i', $me['nation']);
|
||||||
@@ -62,11 +64,20 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
|
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
|
||||||
|
|
||||||
$generals = [];
|
$generals = [];
|
||||||
foreach ($db->query('SELECT no,name,turntime,npc,city,nation,officer_level FROM general WHERE nation = %i AND officer_level >= 5', $nationID) as $rawGeneral) {
|
foreach ($db->query(
|
||||||
|
'SELECT %l FROM general WHERE nation = %i AND officer_level >= 5',
|
||||||
|
Util::formatListOfBackticks(General::mergeQueryColumn()[0]),
|
||||||
|
$nationID
|
||||||
|
) as $rawGeneral) {
|
||||||
$generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, null, null, $year, $month, false);
|
$generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, null, null, $year, $month, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$nationTurnList = [];
|
$nationTurnList = [];
|
||||||
|
|
||||||
|
//혹시 정규 턴을 벗어난 턴이 있는지 체크
|
||||||
|
$invalidUnderTurnList = [];
|
||||||
|
$invalidOverTurnList = [];
|
||||||
|
|
||||||
foreach ($db->queryAllLists(
|
foreach ($db->queryAllLists(
|
||||||
'SELECT officer_level, turn_idx, action, arg, brief FROM nation_turn WHERE nation_id = %i ORDER BY officer_level DESC, turn_idx ASC',
|
'SELECT officer_level, turn_idx, action, arg, brief FROM nation_turn WHERE nation_id = %i ORDER BY officer_level DESC, turn_idx ASC',
|
||||||
$me['nation']
|
$me['nation']
|
||||||
@@ -74,6 +85,14 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
if (!key_exists($officer_level, $nationTurnList)) {
|
if (!key_exists($officer_level, $nationTurnList)) {
|
||||||
$nationTurnList[$officer_level] = [];
|
$nationTurnList[$officer_level] = [];
|
||||||
}
|
}
|
||||||
|
if($turn_idx < 0){
|
||||||
|
$invalidUnderTurnList[$officer_level] = $turn_idx;
|
||||||
|
$turn_idx += GameConst::$maxChiefTurn;
|
||||||
|
}
|
||||||
|
else if($turn_idx >= GameConst::$maxChiefTurn){
|
||||||
|
$invalidOverTurnList[$officer_level] = $turn_idx;
|
||||||
|
$turn_idx -= GameConst::$maxChiefTurn;
|
||||||
|
}
|
||||||
$nationTurnList[$officer_level][$turn_idx] = [
|
$nationTurnList[$officer_level][$turn_idx] = [
|
||||||
'action' => $action,
|
'action' => $action,
|
||||||
'brief' => $brief,
|
'brief' => $brief,
|
||||||
@@ -81,6 +100,21 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($invalidUnderTurnList){
|
||||||
|
$db->update(
|
||||||
|
'nation_turn', [
|
||||||
|
'turn_idx' => $db->sqleval('`turn_idx` + %i', GameConst::$maxChiefTurn)
|
||||||
|
], 'nation_id = %i AND officer_level IN %li AND turn_idx < 0', $me['nation'], array_keys($invalidUnderTurnList)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if($invalidOverTurnList){
|
||||||
|
$db->update(
|
||||||
|
'nation_turn', [
|
||||||
|
'turn_idx' => $db->sqleval('`turn_idx` - %i', GameConst::$maxChiefTurn)
|
||||||
|
], 'nation_id = %i AND officer_level IN %li AND turn_idx >= %i', $me['nation'], array_keys($invalidOverTurnList), GameConst::$maxChiefTurn
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$troopList = [];
|
$troopList = [];
|
||||||
foreach ($db->queryAllLists(
|
foreach ($db->queryAllLists(
|
||||||
'SELECT troop_leader, `name` FROM troop WHERE `nation` = %i',
|
'SELECT troop_leader, `name` FROM troop WHERE `nation` = %i',
|
||||||
@@ -113,7 +147,7 @@ class GetReservedCommand extends \sammo\BaseAPI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createGeneralObjFromDB($session->generalID, null, GeneralQueryMode::FullWithoutIAction);
|
$generalObj = General::createObjFromDB($session->generalID);
|
||||||
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ use DateTimeInterface;
|
|||||||
use sammo\DB;
|
use sammo\DB;
|
||||||
use sammo\DTO\VoteComment;
|
use sammo\DTO\VoteComment;
|
||||||
use sammo\Enums\APIRecoveryType;
|
use sammo\Enums\APIRecoveryType;
|
||||||
|
use sammo\Enums\GeneralLiteQueryMode;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
use sammo\General;
|
use sammo\General;
|
||||||
|
use sammo\GeneralLite;
|
||||||
use sammo\Session;
|
use sammo\Session;
|
||||||
use sammo\TimeUtil;
|
use sammo\TimeUtil;
|
||||||
use sammo\Validator;
|
use sammo\Validator;
|
||||||
@@ -41,7 +43,7 @@ class AddComment extends \sammo\BaseAPI
|
|||||||
$text = mb_substr($this->args['text'], 0, 200);
|
$text = mb_substr($this->args['text'], 0, 200);
|
||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
$general = General::createGeneralObjFromDB($generalID, null, GeneralQueryMode::Core);
|
$general = GeneralLite::createObjFromDB($generalID, null, GeneralLiteQueryMode::Core);
|
||||||
$generalName = $general->getName();
|
$generalName = $general->getName();
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
$nationName = $general->getStaticNation()['name'];
|
$nationName = $general->getStaticNation()['name'];
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class Vote extends \sammo\BaseAPI
|
|||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$voteReward = $gameStor->getValue('develcost') * 5;
|
$voteReward = $gameStor->getValue('develcost') * 5;
|
||||||
|
|
||||||
$general = General::createGeneralObjFromDB($generalID, ['gold', 'horse', 'weapon', 'book', 'item', 'npc', 'imgsvr', 'picture', 'aux'], GeneralQueryMode::Lite);
|
$general = General::createObjFromDB($generalID, null, GeneralQueryMode::Full);
|
||||||
$general->increaseVar('gold', $voteReward);
|
$general->increaseVar('gold', $voteReward);
|
||||||
$uniqueRng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
$uniqueRng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
UniqueConst::$hiddenSeed,
|
UniqueConst::$hiddenSeed,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class che_무기_02_단궁 extends \sammo\BaseStatItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 102, 0.01, 10, 30),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 102, 0.01, 10, 30),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 102)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ class che_무기_07_맥궁 extends \sammo\BaseStatItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 107, 0.2, 20, 40),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 107, 0.2, 20, 40),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 107)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ class che_무기_09_동호비궁 extends \sammo\BaseStatItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 109, 0.2, 20, 40, 20),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 109, 0.2, 20, 40, 20),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 109)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ class che_무기_11_이광궁 extends \sammo\BaseStatItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 111, 0.10, 20, 40, 10),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 111, 0.10, 20, 40, 10),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 111)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ class che_무기_13_양유기궁 extends \sammo\BaseStatItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 113, 0.1, 20, 40, 10),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 113, 0.1, 20, 40, 10),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM + che_저격시도::TYPE_DEDUP_TYPE_BASE * 113)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ class che_저격_매화수전 extends \sammo\BaseItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*304, 0.5, 20, 40),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*304, 0.5, 20, 40),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*304)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ class che_저격_비도 extends \sammo\BaseItem{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*305, 0.5, 20, 40),
|
new che_저격시도($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*305, 0.5, 20, 40),
|
||||||
new che_저격발동($unit, che_저격발동::TYPE_ITEM)
|
new che_저격발동($unit, che_저격시도::TYPE_ITEM+BaseWarUnitTrigger::TYPE_DEDUP_TYPE_BASE*305)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,7 @@ class che_저격_수극 extends \sammo\BaseItem{
|
|||||||
protected $buyable = true;
|
protected $buyable = true;
|
||||||
protected $reqSecu = 1000;
|
protected $reqSecu = 1000;
|
||||||
|
|
||||||
public function getBattleInitSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, BaseWarUnitTrigger::TYPE_CONSUMABLE_ITEM, 1, 20, 40),
|
new che_저격시도($unit, BaseWarUnitTrigger::TYPE_CONSUMABLE_ITEM, 1, 20, 40),
|
||||||
new che_저격발동($unit, BaseWarUnitTrigger::TYPE_CONSUMABLE_ITEM)
|
new che_저격발동($unit, BaseWarUnitTrigger::TYPE_CONSUMABLE_ITEM)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class che_오두미도 extends \sammo\BaseNation{
|
|||||||
protected $name = '오두미도';
|
protected $name = '오두미도';
|
||||||
protected $info = '';
|
protected $info = '';
|
||||||
static $pros = '쌀수입↑ 인구↑';
|
static $pros = '쌀수입↑ 인구↑';
|
||||||
static $cons = '기술↓ 수성↓ 내정↓';
|
static $cons = '기술↓ 수성↓ 농상↓';
|
||||||
|
|
||||||
|
|
||||||
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class che_유가 extends \sammo\BaseNation{
|
|||||||
|
|
||||||
protected $name = '유가';
|
protected $name = '유가';
|
||||||
protected $info = '';
|
protected $info = '';
|
||||||
static $pros = '내정↑ 민심↑';
|
static $pros = '농상↑ 민심↑';
|
||||||
static $cons = '쌀수입↓';
|
static $cons = '쌀수입↓';
|
||||||
|
|
||||||
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class che_음양가 extends \sammo\BaseNation{
|
|||||||
|
|
||||||
protected $name = '음양가';
|
protected $name = '음양가';
|
||||||
protected $info = '';
|
protected $info = '';
|
||||||
static $pros = '내정↑ 인구↑';
|
static $pros = '농상↑ 인구↑';
|
||||||
static $cons = '기술↓ 전략↓';
|
static $cons = '기술↓ 전략↓';
|
||||||
|
|
||||||
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
||||||
@@ -35,7 +35,7 @@ class che_음양가 extends \sammo\BaseNation{
|
|||||||
|
|
||||||
public function onCalcStrategic(string $turnType, string $varType, $value){
|
public function onCalcStrategic(string $turnType, string $varType, $value){
|
||||||
if($varType == 'delay'){
|
if($varType == 'delay'){
|
||||||
return $value * 2;
|
return Util::round($value * 4 / 3);
|
||||||
}
|
}
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class che_종횡가 extends \sammo\BaseNation{
|
|||||||
protected $name = '종횡가';
|
protected $name = '종횡가';
|
||||||
protected $info = '';
|
protected $info = '';
|
||||||
static $pros = '전략↑ 수성↑';
|
static $pros = '전략↑ 수성↑';
|
||||||
static $cons = '금수입↓ 내정↓';
|
static $cons = '금수입↓ 농상↓';
|
||||||
|
|
||||||
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
|
||||||
if($turnType == '수비' || $turnType == '성벽'){
|
if($turnType == '수비' || $turnType == '성벽'){
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
namespace sammo\ActionScenarioEffect;
|
||||||
|
use \sammo\iAction;
|
||||||
|
use \sammo\General;
|
||||||
|
|
||||||
|
class None implements iAction{
|
||||||
|
use \sammo\DefaultAction;
|
||||||
|
|
||||||
|
protected $id = -1;
|
||||||
|
protected $name = '-';
|
||||||
|
protected $info = '';
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo\ActionScenarioEffect;
|
||||||
|
|
||||||
|
use \sammo\iAction;
|
||||||
|
use sammo\WarUnit;
|
||||||
|
use sammo\WarUnitCity;
|
||||||
|
use sammo\WarUnitTrigger\che_전멸시페이즈증가;
|
||||||
|
use sammo\WarUnitTriggerCaller;
|
||||||
|
|
||||||
|
class event_StrongAttacker implements iAction
|
||||||
|
{
|
||||||
|
use \sammo\DefaultAction;
|
||||||
|
|
||||||
|
public function getWarPowerMultiplier(WarUnit $unit): array
|
||||||
|
{
|
||||||
|
if ($unit instanceof WarUnitCity) {
|
||||||
|
return [1, 1];
|
||||||
|
}
|
||||||
|
if ($unit->getOppose() instanceof WarUnitCity) {
|
||||||
|
return [1, 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($unit->isAttacker()) {
|
||||||
|
return [1.4, 0.7143];
|
||||||
|
}
|
||||||
|
return [1, 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux = null): float
|
||||||
|
{
|
||||||
|
if ($turnType == 'changeDefenceTrain') {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBattlePhaseSkillTriggerList(\sammo\WarUnit $unit): ?WarUnitTriggerCaller
|
||||||
|
{
|
||||||
|
return new WarUnitTriggerCaller(
|
||||||
|
new che_전멸시페이즈증가($unit),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@ class che_event_저격 extends \sammo\BaseSpecial{
|
|||||||
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
|
||||||
return new WarUnitTriggerCaller(
|
return new WarUnitTriggerCaller(
|
||||||
new che_저격시도($unit, che_저격시도::TYPE_NONE, 0.5, 20, 40),
|
new che_저격시도($unit, che_저격시도::TYPE_NONE, 0.5, 20, 40),
|
||||||
new che_저격발동($unit)
|
new che_저격발동($unit, che_저격시도::TYPE_NONE)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ abstract class Auction
|
|||||||
if ($bidItem->generalID === $this->general->getID()) {
|
if ($bidItem->generalID === $this->general->getID()) {
|
||||||
$oldBidder = $this->general;
|
$oldBidder = $this->general;
|
||||||
} else {
|
} else {
|
||||||
$oldBidder = General::createGeneralObjFromDB($bidItem->generalID);
|
$oldBidder = General::createObjFromDB($bidItem->generalID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->info->reqResource === ResourceType::inheritancePoint) {
|
if ($this->info->reqResource === ResourceType::inheritancePoint) {
|
||||||
@@ -267,7 +267,7 @@ abstract class Auction
|
|||||||
if ($isRollback) {
|
if ($isRollback) {
|
||||||
$highestBid = $this->getHighestBid();
|
$highestBid = $this->getHighestBid();
|
||||||
if ($highestBid !== null) {
|
if ($highestBid !== null) {
|
||||||
$this->refundBid($highestBid, "{$this->info->id}번 {$this->info->detail->title} 경매가 취소되었습니다.");
|
$this->refundBid($highestBid, "{$this->info->id}번 {$this->info->detail->title}가 취소되었습니다.");
|
||||||
}
|
}
|
||||||
$this->rollbackAuction();
|
$this->rollbackAuction();
|
||||||
}
|
}
|
||||||
@@ -485,7 +485,7 @@ abstract class Auction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$bidder = General::createGeneralObjFromDB($highestBid->generalID);
|
$bidder = General::createObjFromDB($highestBid->generalID);
|
||||||
$failReason = $this->finishAuction($highestBid, $bidder);
|
$failReason = $this->finishAuction($highestBid, $bidder);
|
||||||
if ($failReason === null) {
|
if ($failReason === null) {
|
||||||
$this->closeAuction();
|
$this->closeAuction();
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ abstract class AuctionBasicResource extends Auction
|
|||||||
} else if ($this->info->hostGeneralID == 0) {
|
} else if ($this->info->hostGeneralID == 0) {
|
||||||
$auctionHost = $this->genDummy();
|
$auctionHost = $this->genDummy();
|
||||||
} else {
|
} else {
|
||||||
$auctionHost = General::createGeneralObjFromDB($this->info->hostGeneralID);
|
$auctionHost = General::createObjFromDB($this->info->hostGeneralID);
|
||||||
}
|
}
|
||||||
|
|
||||||
$hostRes = static::$hostRes;
|
$hostRes = static::$hostRes;
|
||||||
@@ -164,7 +164,7 @@ abstract class AuctionBasicResource extends Auction
|
|||||||
} else if ($this->info->hostGeneralID == 0) {
|
} else if ($this->info->hostGeneralID == 0) {
|
||||||
$auctionHost = $this->genDummy();
|
$auctionHost = $this->genDummy();
|
||||||
} else {
|
} else {
|
||||||
$auctionHost = General::createGeneralObjFromDB($this->info->hostGeneralID);
|
$auctionHost = General::createObjFromDB($this->info->hostGeneralID);
|
||||||
}
|
}
|
||||||
|
|
||||||
$highestBid = $this->getHighestBid();
|
$highestBid = $this->getHighestBid();
|
||||||
@@ -175,7 +175,7 @@ abstract class AuctionBasicResource extends Auction
|
|||||||
if ($this->general->getID() === $highestBid->generalID) {
|
if ($this->general->getID() === $highestBid->generalID) {
|
||||||
$bidder = $this->general;
|
$bidder = $this->general;
|
||||||
} else {
|
} else {
|
||||||
$bidder = General::createGeneralObjFromDB($highestBid->generalID);
|
$bidder = General::createObjFromDB($highestBid->generalID);
|
||||||
}
|
}
|
||||||
|
|
||||||
$hostRes = static::$hostRes;
|
$hostRes = static::$hostRes;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ class AutorunGeneralPolicy{
|
|||||||
|
|
||||||
public array $priority;
|
public array $priority;
|
||||||
|
|
||||||
function doNPCState(General $general){
|
function doNPCState(GeneralBase $general){
|
||||||
$npc = $general->getNPCType();
|
$npc = $general->getNPCType();
|
||||||
$nationID = $general->getNationID();
|
$nationID = $general->getNationID();
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ class AutorunGeneralPolicy{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function __construct(General $general, $aiOptions, ?array $nationPolicy, ?array $serverPolicy, array $nation, array $env){
|
function __construct(GeneralBase $general, $aiOptions, ?array $nationPolicy, ?array $serverPolicy, array $nation, array $env){
|
||||||
$this->priority = static::$default_priority;
|
$this->priority = static::$default_priority;
|
||||||
|
|
||||||
if($serverPolicy && key_exists('priority', $serverPolicy)){
|
if($serverPolicy && key_exists('priority', $serverPolicy)){
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ class AutorunNationPolicy {
|
|||||||
'cureThreshold'=>10,
|
'cureThreshold'=>10,
|
||||||
];
|
];
|
||||||
|
|
||||||
function __construct(General $general, $aiOptions, ?array $nationPolicy, ?array $serverPolicy, array $nation, array $env)
|
function __construct(GeneralBase $general, $aiOptions, ?array $nationPolicy, ?array $serverPolicy, array $nation, array $env)
|
||||||
{
|
{
|
||||||
foreach(static::$defaultPolicy as $policy=>$value){
|
foreach(static::$defaultPolicy as $policy=>$value){
|
||||||
$this->{$policy} = $value;
|
$this->{$policy} = $value;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use Ds\Map;
|
|||||||
use sammo\DTO\BettingInfo;
|
use sammo\DTO\BettingInfo;
|
||||||
use sammo\DTO\BettingItem;
|
use sammo\DTO\BettingItem;
|
||||||
use sammo\Enums\GeneralQueryMode;
|
use sammo\Enums\GeneralQueryMode;
|
||||||
|
use sammo\Enums\InheritanceKey;
|
||||||
use sammo\Enums\RankColumn;
|
use sammo\Enums\RankColumn;
|
||||||
|
|
||||||
class Betting
|
class Betting
|
||||||
@@ -351,6 +352,8 @@ class Betting
|
|||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
|
|
||||||
|
$pointManager = InheritancePointManager::getInstance();
|
||||||
|
|
||||||
if ($this->info->reqInheritancePoint) {
|
if ($this->info->reqInheritancePoint) {
|
||||||
/** @var Map<int,UserLogger> */
|
/** @var Map<int,UserLogger> */
|
||||||
$loggers = new Map();
|
$loggers = new Map();
|
||||||
@@ -362,11 +365,8 @@ class Betting
|
|||||||
$userID = $rewardItem['userID'];
|
$userID = $rewardItem['userID'];
|
||||||
$amount = $rewardItem['amount'];
|
$amount = $rewardItem['amount'];
|
||||||
|
|
||||||
$inheritStor = KVStorage::getStorage($db, "inheritance_{$userID}");
|
$nextPoint = $pointManager->increaseInheritancePointRaw($userID, InheritanceKey::previous, $amount);
|
||||||
$previousPoint = ($inheritStor->getValue('previous') ?? [0, 0])[0];
|
$previousPoint = $nextPoint - $amount;//역산
|
||||||
$nextPoint = $previousPoint + $amount;
|
|
||||||
$inheritStor->setValue('previous', [$nextPoint, 0]);
|
|
||||||
$inheritStor->invalidateCacheValue('previous'); //XXX: 실제로는 previous 값을 사용할 수 없도록 락을 걸어야 한다.
|
|
||||||
|
|
||||||
$generalID = $rewardItem['generalID'];
|
$generalID = $rewardItem['generalID'];
|
||||||
$db->update('rank_data', [
|
$db->update('rank_data', [
|
||||||
@@ -402,7 +402,7 @@ class Betting
|
|||||||
$userLogger->flush();
|
$userLogger->flush();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$generalList = General::createGeneralObjListFromDB(array_unique(Util::squeezeFromArray($rewardList, 'generalID')), ['gold', 'npc', 'betgold'], GeneralQueryMode::Lite);
|
$generalList = General::createObjListFromDB(array_unique(Util::squeezeFromArray($rewardList, 'generalID')));
|
||||||
foreach ($rewardList as $rewardItem) {
|
foreach ($rewardList as $rewardItem) {
|
||||||
$gambler = $generalList[$rewardItem['generalID']];
|
$gambler = $generalList[$rewardItem['generalID']];
|
||||||
$reward = Util::round($rewardItem['amount']);
|
$reward = Util::round($rewardItem['amount']);
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ class che_강행 extends Command\GeneralCommand
|
|||||||
$general->increaseVar('leadership_exp', 1);
|
$general->increaseVar('leadership_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ class che_거병 extends Command\GeneralCommand{
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ class che_건국 extends Command\GeneralCommand
|
|||||||
$general->increaseInheritancePoint(InheritanceKey::active_action, 1);
|
$general->increaseInheritancePoint(InheritanceKey::active_action, 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general), $general, '건국');
|
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general, static::$actionName), $general, '건국');
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class che_견문 extends Command\GeneralCommand{
|
|||||||
$general->addExperience($exp);
|
$general->addExperience($exp);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ class che_군량매매 extends Command\GeneralCommand{
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class che_귀환 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar('leadership_exp', 1);
|
$general->increaseVar('leadership_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ class che_기술연구 extends che_상업투자{
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class che_단련 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar($incStat, 1);
|
$general->increaseVar($incStat, 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -7,11 +7,7 @@ use \sammo\{
|
|||||||
Util,
|
Util,
|
||||||
JosaUtil,
|
JosaUtil,
|
||||||
General,
|
General,
|
||||||
DummyGeneral,
|
|
||||||
ActionLogger,
|
|
||||||
GameConst,
|
|
||||||
LastTurn,
|
LastTurn,
|
||||||
GameUnitConst,
|
|
||||||
Command,
|
Command,
|
||||||
ScoutMessage
|
ScoutMessage
|
||||||
};
|
};
|
||||||
@@ -77,7 +73,7 @@ class che_등용 extends Command\GeneralCommand
|
|||||||
|
|
||||||
protected function initWithArg()
|
protected function initWithArg()
|
||||||
{
|
{
|
||||||
$destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], ['nation', 'experience', 'dedication'], GeneralQueryMode::Lite);
|
$destGeneral = General::createObjFromDB($this->arg['destGeneralID']);
|
||||||
$this->setDestGeneral($destGeneral);
|
$this->setDestGeneral($destGeneral);
|
||||||
|
|
||||||
[$reqGold, $reqRice] = $this->getCost();
|
[$reqGold, $reqRice] = $this->getCost();
|
||||||
@@ -173,7 +169,7 @@ class che_등용 extends Command\GeneralCommand
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class che_등용수락 extends Command\GeneralCommand{
|
|||||||
|
|
||||||
protected function initWithArg()
|
protected function initWithArg()
|
||||||
{
|
{
|
||||||
$destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], null);
|
$destGeneral = General::createObjFromDB($this->arg['destGeneralID'], null);
|
||||||
$this->setDestGeneral($destGeneral);
|
$this->setDestGeneral($destGeneral);
|
||||||
$this->setDestNation($this->arg['destNationID'], ['gennum', 'scout']);
|
$this->setDestNation($this->arg['destNationID'], ['gennum', 'scout']);
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ class che_등용수락 extends Command\GeneralCommand{
|
|||||||
$logger->pushGeneralActionLog("<D>{$destNationName}</>{$josaRo} 망명하여 수도로 이동합니다.");
|
$logger->pushGeneralActionLog("<D>{$destNationName}</>{$josaRo} 망명하여 수도로 이동합니다.");
|
||||||
$destLogger->pushGeneralActionLog("<Y>{$generalName}</> 등용에 성공했습니다.");
|
$destLogger->pushGeneralActionLog("<Y>{$generalName}</> 등용에 성공했습니다.");
|
||||||
|
|
||||||
$logger->pushGeneralHistoryLog("<D>{$destNationName}</>{$josaRo} 망명");
|
$logger->pushGeneralHistoryLog("<D><b>{$destNationName}</b></>{$josaRo} 망명");
|
||||||
$destLogger->pushGeneralHistoryLog("<Y>{$generalName}</> 등용에 성공");
|
$destLogger->pushGeneralHistoryLog("<Y>{$generalName}</> 등용에 성공");
|
||||||
|
|
||||||
$logger->pushGlobalActionLog("<Y>{$generalName}</>{$josaYi} <D><b>{$destNationName}</b></>{$josaRo} <S>망명</>하였습니다.");
|
$logger->pushGlobalActionLog("<Y>{$generalName}</>{$josaYi} <D><b>{$destNationName}</b></>{$josaRo} <S>망명</>하였습니다.");
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ class che_랜덤임관 extends Command\GeneralCommand
|
|||||||
$general->addExperience($exp);
|
$general->addExperience($exp);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general), $general, '랜덤 임관');
|
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general, static::$actionName), $general, '랜덤 임관');
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class che_모반시도 extends Command\GeneralCommand{
|
|||||||
|
|
||||||
$lordID = $db->queryFirstField('SELECT no FROM general WHERE nation = %i AND officer_level = 12', $nationID);
|
$lordID = $db->queryFirstField('SELECT no FROM general WHERE nation = %i AND officer_level = 12', $nationID);
|
||||||
|
|
||||||
$lordGeneral = General::createGeneralObjFromDB($lordID);
|
$lordGeneral = General::createObjFromDB($lordID);
|
||||||
|
|
||||||
$generalName = $general->getName();
|
$generalName = $general->getName();
|
||||||
$lordName = $lordGeneral->getName();
|
$lordName = $lordGeneral->getName();
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ class che_무작위건국 extends Command\GeneralCommand
|
|||||||
$general->increaseInheritancePoint(InheritanceKey::active_action, 1);
|
$general->increaseInheritancePoint(InheritanceKey::active_action, 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general), $general, '건국');
|
tryUniqueItemLottery(genGenericUniqueRNGFromGeneral($general, static::$actionName), $general, '건국');
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ class che_물자조달 extends Command\GeneralCommand{
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class che_사기진작 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar('leadership_exp', 1);
|
$general->increaseVar('leadership_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class che_상업투자 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar(static::$statKey.'_exp', 1);
|
$general->increaseVar(static::$statKey.'_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class che_선양 extends Command\GeneralCommand
|
|||||||
|
|
||||||
protected function initWithArg()
|
protected function initWithArg()
|
||||||
{
|
{
|
||||||
$destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], ['gold', 'nation'], GeneralQueryMode::Lite);
|
$destGeneral = General::createObjFromDB($this->arg['destGeneralID']);
|
||||||
$this->setDestGeneral($destGeneral);
|
$this->setDestGeneral($destGeneral);
|
||||||
|
|
||||||
$this->fullConditionConstraints = [
|
$this->fullConditionConstraints = [
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ class che_숙련전환 extends Command\GeneralCommand
|
|||||||
$general->increaseVar('leadership_exp', 2);
|
$general->increaseVar('leadership_exp', 2);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class che_은퇴 extends Command\GeneralCommand{
|
|||||||
$logger->pushGeneralActionLog("은퇴하였습니다. <1>$date</>");
|
$logger->pushGeneralActionLog("은퇴하였습니다. <1>$date</>");
|
||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ class che_이동 extends Command\GeneralCommand
|
|||||||
$general->increaseVar('leadership_exp', 1);
|
$general->increaseVar('leadership_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class che_인재탐색 extends Command\GeneralCommand
|
|||||||
$general->increaseVar($incStat, 1);
|
$general->increaseVar($incStat, 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ class che_인재탐색 extends Command\GeneralCommand
|
|||||||
$general->increaseVar($incStat, 3);
|
$general->increaseVar($incStat, 3);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ class che_임관 extends Command\GeneralCommand
|
|||||||
$general->addExperience($exp);
|
$general->addExperience($exp);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ class che_장비매매 extends Command\GeneralCommand
|
|||||||
$general->addExperience($exp);
|
$general->addExperience($exp);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class che_장수대상임관 extends Command\GeneralCommand{
|
|||||||
protected function initWithArg()
|
protected function initWithArg()
|
||||||
{
|
{
|
||||||
$destGeneralID = $this->arg['destGeneralID'];
|
$destGeneralID = $this->arg['destGeneralID'];
|
||||||
$destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], ['nation'], GeneralQueryMode::Lite);
|
$destGeneral = General::createObjFromDB($destGeneralID);
|
||||||
$this->setDestGeneral($destGeneral);
|
$this->setDestGeneral($destGeneral);
|
||||||
$this->setDestNation($this->destGeneralObj->getVar('nation'), ['gennum', 'scout']);
|
$this->setDestNation($this->destGeneralObj->getVar('nation'), ['gennum', 'scout']);
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ class che_장수대상임관 extends Command\GeneralCommand{
|
|||||||
$general->addExperience($exp);
|
$general->addExperience($exp);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ class che_전투태세 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar('leadership_exp', 3);
|
$general->increaseVar('leadership_exp', 3);
|
||||||
$this->setResultTurn($turnResult);
|
$this->setResultTurn($turnResult);
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class che_전투특기초기화 extends Command\GeneralCommand{
|
|||||||
$logger->pushGeneralActionLog("새로운 {$specialName}를 가질 준비가 되었습니다. <1>$date</>");
|
$logger->pushGeneralActionLog("새로운 {$specialName}를 가질 준비가 되었습니다. <1>$date</>");
|
||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
namespace sammo\Command\General;
|
||||||
|
|
||||||
|
use \sammo\{
|
||||||
|
DB, Util, JosaUtil,
|
||||||
|
General,
|
||||||
|
ActionLogger,
|
||||||
|
GameConst, GameUnitConst,
|
||||||
|
LastTurn,
|
||||||
|
Command
|
||||||
|
};
|
||||||
|
|
||||||
|
use \sammo\Constraint\ConstraintHelper;
|
||||||
|
use sammo\CityConst;
|
||||||
|
|
||||||
|
use function sammo\searchDistance;
|
||||||
|
|
||||||
|
class che_접경귀환 extends Command\GeneralCommand{
|
||||||
|
static protected $actionName = '접경귀환';
|
||||||
|
|
||||||
|
protected function argTest():bool{
|
||||||
|
$this->arg = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function init()
|
||||||
|
{
|
||||||
|
|
||||||
|
$general = $this->generalObj;
|
||||||
|
|
||||||
|
$this->setCity();
|
||||||
|
$this->setNation();
|
||||||
|
|
||||||
|
[$reqGold, $reqRice] = $this->getCost();
|
||||||
|
|
||||||
|
$this->fullConditionConstraints=[
|
||||||
|
ConstraintHelper::NotBeNeutral(),
|
||||||
|
ConstraintHelper::NotWanderingNation(),
|
||||||
|
ConstraintHelper::NotOccupiedCity()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCost():array{
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPreReqTurn():int{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPostReqTurn():int{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function run(\Sammo\RandUtil $rng):bool{
|
||||||
|
if(!$this->hasFullConditionMet()){
|
||||||
|
throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
|
||||||
|
$general = $this->generalObj;
|
||||||
|
$cityID = $general->getCityID();
|
||||||
|
$logger = $general->getLogger();
|
||||||
|
|
||||||
|
$distanceList = searchDistance($cityID, 3, true);
|
||||||
|
|
||||||
|
$occupiedCityList = new \Ds\Set($db->queryFirstColumn(
|
||||||
|
'SELECT city FROM city WHERE nation = %i AND city IN %li AND supply = 1',
|
||||||
|
$general->getNationID(),
|
||||||
|
array_merge(...$distanceList)
|
||||||
|
));
|
||||||
|
|
||||||
|
$nearestCityList = [];
|
||||||
|
foreach($distanceList as $cityList){
|
||||||
|
foreach($cityList as $cityID){
|
||||||
|
if($occupiedCityList->contains($cityID)){
|
||||||
|
$nearestCityList[] = $cityID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($nearestCityList){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$nearestCityList){
|
||||||
|
$logger->pushGeneralActionLog("3칸 이내에 아국 도시가 없습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$destCityID = $rng->choice($nearestCityList);
|
||||||
|
$destCityName = CityConst::byID($destCityID)->name;
|
||||||
|
|
||||||
|
$josaRo = JosaUtil::pick($destCityName, '로');
|
||||||
|
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>{$josaRo} 접경귀환했습니다.");
|
||||||
|
$general->setVar('city', $destCityID);
|
||||||
|
|
||||||
|
//TODO: InstantAction일때에만 설정하지 않는게 나은데..
|
||||||
|
//$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
|
|
||||||
|
$general->applyDB($db);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -188,7 +188,7 @@ class che_정착장려 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar(static::$statKey.'_exp', 1);
|
$general->increaseVar(static::$statKey.'_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ class che_주민선정 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar(static::$statKey.'_exp', 1);
|
$general->increaseVar(static::$statKey.'_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ class che_증여 extends Command\GeneralCommand
|
|||||||
|
|
||||||
protected function initWithArg()
|
protected function initWithArg()
|
||||||
{
|
{
|
||||||
$destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], ['gold', 'rice', 'nation'], GeneralQueryMode::Lite);
|
$destGeneral = General::createObjFromDB($this->arg['destGeneralID']);
|
||||||
$this->setDestGeneral($destGeneral);
|
$this->setDestGeneral($destGeneral);
|
||||||
|
|
||||||
$this->fullConditionConstraints = [
|
$this->fullConditionConstraints = [
|
||||||
@@ -170,7 +170,7 @@ class che_증여 extends Command\GeneralCommand
|
|||||||
|
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
|
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
$destGeneral->applyDB($db);
|
$destGeneral->applyDB($db);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class che_집합 extends Command\GeneralCommand{
|
|||||||
$general->increaseVar('leadership_exp', 1);
|
$general->increaseVar('leadership_exp', 1);
|
||||||
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
|
||||||
$general->checkStatChange();
|
$general->checkStatChange();
|
||||||
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
|
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user