merge: trace RaiseNPCNation monthly action
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"action": "RaiseNPCNation",
|
||||
"setup": {
|
||||
"resetCities": true,
|
||||
"resetGenerals": true,
|
||||
"resetNations": true,
|
||||
"city": [
|
||||
{
|
||||
"id": 1,
|
||||
"values": {
|
||||
"name": "점유도시",
|
||||
"level": 5,
|
||||
"nation": 1,
|
||||
"pop": 10001,
|
||||
"pop_max": 50001,
|
||||
"agri": 1001,
|
||||
"agri_max": 5001,
|
||||
"comm": 2001,
|
||||
"comm_max": 6001,
|
||||
"secu": 3001,
|
||||
"secu_max": 7001,
|
||||
"def": 4001,
|
||||
"def_max": 8001,
|
||||
"wall": 5001,
|
||||
"wall_max": 9001
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"values": {
|
||||
"name": "건국도시",
|
||||
"level": 5,
|
||||
"nation": 0,
|
||||
"pop": 10048,
|
||||
"pop_max": 50048,
|
||||
"agri": 1048,
|
||||
"agri_max": 5048,
|
||||
"comm": 2048,
|
||||
"comm_max": 6048,
|
||||
"secu": 3048,
|
||||
"secu_max": 7048,
|
||||
"def": 4048,
|
||||
"def_max": 8048,
|
||||
"wall": 5048,
|
||||
"wall_max": 9048
|
||||
}
|
||||
}
|
||||
],
|
||||
"nation": [
|
||||
{
|
||||
"id": 1,
|
||||
"values": {
|
||||
"name": "기준국",
|
||||
"capital": 1,
|
||||
"gennum": 1,
|
||||
"tech": 120,
|
||||
"level": 2,
|
||||
"type": "che_유가"
|
||||
}
|
||||
}
|
||||
],
|
||||
"syncEnvironment": true
|
||||
},
|
||||
"environment": {
|
||||
"year": 200,
|
||||
"month": 1,
|
||||
"startyear": 190,
|
||||
"turnterm": 10,
|
||||
"turntime": "0200-01-01 00:00:00",
|
||||
"show_img_level": 3,
|
||||
"fiction": [0]
|
||||
},
|
||||
"observe": {
|
||||
"cityIds": [1, 48],
|
||||
"nationIds": [1]
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,10 @@ function comparisonMonthlyPatch(string $table, int $id, array $values): void
|
||||
],
|
||||
'nation' => [
|
||||
'idColumn' => 'nation',
|
||||
'allowed' => ['name', 'color', 'capital', 'gold', 'rice', 'level', 'type', 'rate_tmp', 'aux'],
|
||||
'allowed' => [
|
||||
'name', 'color', 'capital', 'gennum', 'gold', 'rice', 'tech',
|
||||
'level', 'type', 'rate_tmp', 'aux',
|
||||
],
|
||||
],
|
||||
'general' => [
|
||||
'idColumn' => 'no',
|
||||
@@ -188,6 +191,7 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
'CreateManyNPC',
|
||||
'RegNPC',
|
||||
'RegNeutralNPC',
|
||||
'RaiseNPCNation',
|
||||
];
|
||||
if (!in_array($actionName, $supportedActions, true)) {
|
||||
throw new \InvalidArgumentException('unsupported monthly action');
|
||||
@@ -226,6 +230,12 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
comparisonMonthlyPatch('general', $row['id'], $row['values']);
|
||||
}
|
||||
}
|
||||
if (($setup['resetNations'] ?? false) === true) {
|
||||
DB::db()->query('UPDATE nation SET level = 0, gennum = 0, tech = 0');
|
||||
foreach ($setup['nation'] ?? [] as $row) {
|
||||
comparisonMonthlyPatch('nation', $row['id'], $row['values']);
|
||||
}
|
||||
}
|
||||
if (($setup['resetUniqueOccupancy'] ?? false) === true) {
|
||||
DB::db()->delete('ng_auction', '`type` = %s AND finished = 0', 'uniqueItem');
|
||||
DB::db()->query('DELETE FROM storage WHERE namespace LIKE %s', 'ut\\_%');
|
||||
@@ -240,6 +250,8 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
$db = DB::db();
|
||||
$generalIdBeforeAction =
|
||||
(int)($db->queryFirstField('SELECT COALESCE(MAX(no), 0) FROM general') ?? 0);
|
||||
$nationIdBeforeAction =
|
||||
(int)($db->queryFirstField('SELECT COALESCE(MAX(nation), 0) FROM nation') ?? 0);
|
||||
$snapshotRequest = ['observe' => $request['observe'] ?? []];
|
||||
$snapshotRequest['observe']['logAfterId'] =
|
||||
(int)($db->queryFirstField('SELECT COALESCE(MAX(id), 0) FROM general_record') ?? 0);
|
||||
@@ -304,7 +316,7 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
$actionEnvironment['killturn'] = $killturn;
|
||||
$actionEnvironment['turnterm'] = $turnterm;
|
||||
}
|
||||
if (in_array($actionName, ['CreateManyNPC', 'RegNPC', 'RegNeutralNPC'], true)) {
|
||||
if (in_array($actionName, ['CreateManyNPC', 'RegNPC', 'RegNeutralNPC', 'RaiseNPCNation'], true)) {
|
||||
$turnterm = $environment['turnterm'] ?? null;
|
||||
$turntime = $environment['turntime'] ?? null;
|
||||
$showImgLevel = $environment['show_img_level'] ?? 3;
|
||||
@@ -336,7 +348,7 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
$after = comparisonTurnStateSnapshot($snapshotRequest);
|
||||
$afterDetails = comparisonMonthlyDetails($snapshotRequest['observe'], $worldHistoryAfterId);
|
||||
$createdGenerals = [];
|
||||
if (in_array($actionName, ['CreateManyNPC', 'RegNPC', 'RegNeutralNPC'], true)) {
|
||||
if (in_array($actionName, ['CreateManyNPC', 'RegNPC', 'RegNeutralNPC', 'RaiseNPCNation'], true)) {
|
||||
foreach ($db->query('SELECT * FROM general WHERE no > %i ORDER BY no', $generalIdBeforeAction) as $row) {
|
||||
$generalId = (int)$row['no'];
|
||||
$turnRows = $db->query(
|
||||
@@ -391,6 +403,45 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
];
|
||||
}
|
||||
}
|
||||
$createdNations = [];
|
||||
if ($actionName === 'RaiseNPCNation') {
|
||||
foreach ($db->query('SELECT * FROM nation WHERE nation > %i ORDER BY nation', $nationIdBeforeAction) as $row) {
|
||||
$nationId = (int)$row['nation'];
|
||||
$createdNations[] = comparisonPickRow(
|
||||
$row,
|
||||
[
|
||||
'id' => 'nation',
|
||||
'name' => 'name',
|
||||
'color' => 'color',
|
||||
'capitalCityId' => 'capital',
|
||||
'generalCount' => 'gennum',
|
||||
'gold' => 'gold',
|
||||
'rice' => 'rice',
|
||||
'tech' => 'tech',
|
||||
'level' => 'level',
|
||||
'typeCode' => 'type',
|
||||
'bill' => 'bill',
|
||||
'rate' => 'rate',
|
||||
'scout' => 'scout',
|
||||
'war' => 'war',
|
||||
'strategicCommandLimit' => 'strategic_cmd_limit',
|
||||
'surrenderLimit' => 'surlimit',
|
||||
'aux' => 'aux',
|
||||
],
|
||||
['aux'],
|
||||
) + [
|
||||
'nationTurnCount' => (int)$db->queryFirstField(
|
||||
'SELECT count(*) FROM nation_turn WHERE nation_id = %i',
|
||||
$nationId,
|
||||
),
|
||||
'diplomacyCount' => (int)$db->queryFirstField(
|
||||
'SELECT count(*) FROM diplomacy WHERE me = %i OR you = %i',
|
||||
$nationId,
|
||||
$nationId,
|
||||
),
|
||||
];
|
||||
}
|
||||
}
|
||||
$response = [
|
||||
'schemaVersion' => 1,
|
||||
'engine' => 'ref',
|
||||
@@ -403,6 +454,10 @@ function comparisonMonthlyEventTraceMain(): void
|
||||
if (in_array($actionName, ['CreateManyNPC', 'RegNPC', 'RegNeutralNPC'], true)) {
|
||||
$response['createdGenerals'] = $createdGenerals;
|
||||
}
|
||||
if ($actionName === 'RaiseNPCNation') {
|
||||
$response['createdGenerals'] = $createdGenerals;
|
||||
$response['createdNations'] = $createdNations;
|
||||
}
|
||||
echo json_encode(
|
||||
$response,
|
||||
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION,
|
||||
|
||||
Reference in New Issue
Block a user