feat(server): add special loot and data-driven gameplay rules

Generate equipment loot atomically, grant random boxes and prevent repeat claims.
Read gacha pools, pity, products, tickets, missions, presets, chapter rewards
and inventory costs from GameData; extend both collaboration UR ticket pools.
Sync owned recipes, configure startup state and calendars in versioned seeds,
and validate unlock tickets and revival talents.
This commit is contained in:
2026-10-04 19:15:59 +08:00
parent 64454e71a3
commit 5b5a219dc2
86 changed files with 3577 additions and 646 deletions
+26
View File
@@ -3666,6 +3666,32 @@
]
}
]
},
"/RootSortIdInfo": {
"packet_code": 367,
"fields": [
{
"number": 1,
"type": 2,
"fields": [
{
"number": 1,
"type": 0,
"varint": 2
},
{
"number": 2,
"type": 0,
"varint": 140
},
{
"number": 3,
"type": 0,
"varint": 1
}
]
}
]
}
}
}
+163
View File
@@ -0,0 +1,163 @@
{
"version": "2.35.10",
"calculate_milliseconds": 32400000,
"contents": [
{
"id": 1,
"current": {
"id": 160,
"start_milliseconds": 1789344000000,
"end_milliseconds": 1789916399000,
"rank_reward_group_id": 1
},
"next": {
"id": 161,
"start_milliseconds": 1789948800000,
"end_milliseconds": 1790521199000,
"rank_reward_group_id": 1
}
},
{
"id": 2,
"current": {
"id": 58,
"start_milliseconds": 1755129600000,
"end_milliseconds": 253370678399000,
"rank_reward_group_id": 1
},
"next": {
"id": 58,
"start_milliseconds": 1755129600000,
"end_milliseconds": 253370678399000,
"rank_reward_group_id": 1
}
},
{
"id": 3,
"current": {
"id": 129,
"start_milliseconds": 1789657200000,
"end_milliseconds": 1790262000000,
"rank_reward_group_id": 1
},
"next": {
"id": 999999,
"start_milliseconds": 253370764800000,
"end_milliseconds": 253370764800000,
"rank_reward_group_id": 1
}
},
{
"id": 4,
"current": {
"id": 862,
"start_milliseconds": 1789830000000,
"end_milliseconds": 1789916400000,
"rank_reward_group_id": 1
},
"next": {
"id": 999999,
"start_milliseconds": 253370764800000,
"end_milliseconds": 253370764800000,
"rank_reward_group_id": 1
}
},
{
"id": 5,
"current": {
"id": 29,
"start_milliseconds": 1787788800000,
"end_milliseconds": 1790089199000,
"rank_reward_group_id": 1
},
"next": {
"id": 30,
"start_milliseconds": 1790121600000,
"end_milliseconds": 1791385199000,
"rank_reward_group_id": 1
}
},
{
"id": 6,
"current": {
"id": 26,
"start_milliseconds": 1787788800000,
"end_milliseconds": 1788361199000,
"rank_reward_group_id": 1
},
"next": {
"id": 27,
"start_milliseconds": 1790121600000,
"end_milliseconds": 1790693999000,
"rank_reward_group_id": 1
}
},
{
"id": 7,
"current": {
"id": 14,
"start_milliseconds": 1788220800000,
"end_milliseconds": 1790812800000,
"rank_reward_group_id": 1
},
"next": {
"id": 999999,
"start_milliseconds": 253370764800000,
"end_milliseconds": 253370764800000,
"rank_reward_group_id": 1
}
},
{
"id": 8,
"current": {
"id": 42,
"start_milliseconds": 1789603200000,
"end_milliseconds": 1790089199000,
"rank_reward_group_id": 1
},
"next": {
"id": 43,
"start_milliseconds": 1790121600000,
"end_milliseconds": 1790780399000,
"rank_reward_group_id": 1
}
},
{
"id": 9,
"current": {
"id": 2,
"start_milliseconds": 1787788800000,
"end_milliseconds": 1792594799000,
"rank_reward_group_id": 1
},
"next": {
"id": 999999,
"start_milliseconds": 253370764800000,
"end_milliseconds": 253370764800000,
"rank_reward_group_id": 1
}
}
],
"regular": [
{
"content_id": 1,
"season": 5
},
{
"content_id": 2,
"season": 6
},
{
"content_id": 5,
"season": 5
},
{
"content_id": 8,
"season": 0
},
{
"content_id": 9,
"season": 0
}
]
}
+1
View File
@@ -1,5 +1,6 @@
{
"version": "2.35.10",
"cooking_recipes": [101],
"items": [
{
"inven_index": 853258187,
+4
View File
@@ -1,6 +1,10 @@
{
"version": "2.35.10",
"pack_id": 21,
"placeholder_costume_id": 996000,
"square_scene_id": 3,
"initial_reputations": [{"group_id": 1, "state": 1}],
"initial_rank_statues": [{"id": 3, "season": 77, "error": true}],
"start_quest_id": 1,
"battle_unlock_quest_id": 26,
"reward_character": {