feat: add age-based event gating, event timer, and UI polish

- Add minAge/maxAge to events so infants can't go treasure hunting
- Cache event panel DOM to prevent high-speed button destruction
- Add 10s auto-select countdown for choice events
- Fix event title/text field mapping (name/description → title/text)
- Add rotating clock icon for time flow feedback
- Fix speed/pause button active states
- Fix shop affordability check (disable + show insufficient money)
- Add red styling for unmet choice requirements
- Fix log re-rendering on every tick
This commit is contained in:
2026-05-13 09:09:42 +00:00
parent a05225b514
commit 3f741b4f0a
41 changed files with 9847 additions and 651 deletions
+190 -5
View File
@@ -24,8 +24,81 @@
"tab": "item",
"cost": 50,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "body", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "wisdom_pill",
"name": "悟道丹",
"tab": "item",
"cost": 50,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "wisdom", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "charm_pill",
"name": "美颜丹",
"tab": "item",
"cost": 50,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "charm", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "destiny_pill",
"name": "转运丹",
"tab": "item",
"cost": 100,
"unlockConditions": [{ "type": "age", "op": ">=", "value": 15 }],
"effects": [{ "type": "addStat", "stat": "destiny", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "business_manual",
"name": "经商手册",
"tab": "item",
"cost": 80,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "business", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "strategy_book",
"name": "谋略兵法",
"tab": "item",
"cost": 120,
"unlockConditions": [{ "type": "age", "op": ">=", "value": 15 }],
"effects": [{ "type": "addStat", "stat": "intelligence", "value": 5 }],
"resetOnRebirth": true
},
{
"id": "elixir_youth",
"name": "驻颜丹",
"tab": "item",
"cost": 500,
"unlockConditions": [
{ "type": "age", "op": ">=", "value": 30 },
{ "type": "careerLevel", "op": ">=", "careerId": "taoist_priest", "value": 100 }
],
"effects": [
{ "type": "addStat", "stat": "body", "value": 5 }
{ "type": "addLog", "text": "服用驻颜丹,寿命延长!" },
{ "type": "addStat", "stat": "body", "value": 10 }
],
"resetOnRebirth": true
},
{
"id": "mystic_scroll",
"name": "神秘卷轴",
"tab": "item",
"cost": 1000,
"unlockConditions": [
{ "type": "age", "op": ">=", "value": 25 },
{ "type": "stat", "op": ">=", "stat": "destiny", "value": 20 }
],
"effects": [
{ "type": "addStat", "stat": "wisdom", "value": 10 },
{ "type": "addStat", "stat": "destiny", "value": 5 }
],
"resetOnRebirth": true
}
@@ -37,8 +110,57 @@
"tab": "buff",
"cost": 200,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "wisdom", "value": 10 }],
"resetOnRebirth": true
},
{
"id": "iron_body_buff",
"name": "铜皮铁骨",
"tab": "buff",
"cost": 200,
"unlockConditions": [],
"effects": [{ "type": "addStat", "stat": "body", "value": 10 }],
"resetOnRebirth": true
},
{
"id": "golden_tongue",
"name": "金口玉言",
"tab": "buff",
"cost": 250,
"unlockConditions": [{ "type": "age", "op": ">=", "value": 15 }],
"effects": [{ "type": "addStat", "stat": "charm", "value": 10 }],
"resetOnRebirth": true
},
{
"id": "merchant_aura",
"name": "财神附体",
"tab": "buff",
"cost": 300,
"unlockConditions": [{ "type": "stat", "op": ">=", "stat": "business", "value": 20 }],
"effects": [{ "type": "addStat", "stat": "business", "value": 15 }],
"resetOnRebirth": true
},
{
"id": "strategist_mind",
"name": "谋主之心",
"tab": "buff",
"cost": 350,
"unlockConditions": [{ "type": "stat", "op": ">=", "stat": "intelligence", "value": 20 }],
"effects": [{ "type": "addStat", "stat": "intelligence", "value": 15 }],
"resetOnRebirth": true
},
{
"id": "heaven_blessing",
"name": "天赐福缘",
"tab": "buff",
"cost": 500,
"unlockConditions": [
{ "type": "age", "op": ">=", "value": 20 },
{ "type": "stat", "op": ">=", "stat": "destiny", "value": 30 }
],
"effects": [
{ "type": "addStat", "stat": "wisdom", "value": 10 }
{ "type": "addStat", "stat": "destiny", "value": 15 },
{ "type": "addStat", "stat": "wisdom", "value": 5 }
],
"resetOnRebirth": true
}
@@ -51,11 +173,74 @@
"baseCost": 1000,
"costGrowth": 1.5,
"unlockConditions": [
{ "type": "careerLevel", "careerId": "taoist_priest", "op": ">=", "value": 50 }
{ "type": "careerLevel", "op": ">=", "careerId": "taoist_priest", "value": 50 }
],
"effects": [
{ "type": "addStat", "stat": "body", "value": 10 }
"effects": [{ "type": "addStat", "stat": "body", "value": 10 }],
"resetOnRebirth": false,
"maxLevel": 10
},
{
"id": "jade_seal",
"name": "玉玺",
"tab": "artifact",
"baseCost": 2000,
"costGrowth": 1.6,
"unlockConditions": [
{ "type": "careerLevel", "op": ">=", "careerId": "shangshu", "value": 100 }
],
"effects": [{ "type": "addStat", "stat": "intelligence", "value": 15 }],
"resetOnRebirth": false,
"maxLevel": 10
},
{
"id": "tiger_tally",
"name": "虎符",
"tab": "artifact",
"baseCost": 2000,
"costGrowth": 1.6,
"unlockConditions": [
{ "type": "careerLevel", "op": ">=", "careerId": "general", "value": 100 }
],
"effects": [{ "type": "addStat", "stat": "body", "value": 15 }],
"resetOnRebirth": false,
"maxLevel": 10
},
{
"id": "divine_brush",
"name": "神笔",
"tab": "artifact",
"baseCost": 1500,
"costGrowth": 1.55,
"unlockConditions": [
{ "type": "careerLevel", "op": ">=", "careerId": "hanlin", "value": 100 }
],
"effects": [{ "type": "addStat", "stat": "wisdom", "value": 12 }],
"resetOnRebirth": false,
"maxLevel": 10
},
{
"id": "treasure_bowl",
"name": "聚宝盆",
"tab": "artifact",
"baseCost": 3000,
"costGrowth": 1.7,
"unlockConditions": [
{ "type": "careerLevel", "op": ">=", "careerId": "tycoon", "value": 100 }
],
"effects": [{ "type": "addStat", "stat": "business", "value": 20 }],
"resetOnRebirth": false,
"maxLevel": 10
},
{
"id": "talisman",
"name": "护身符",
"tab": "artifact",
"baseCost": 800,
"costGrowth": 1.45,
"unlockConditions": [
{ "type": "careerLevel", "op": ">=", "careerId": "taoist_priest", "value": 30 }
],
"effects": [{ "type": "addStat", "stat": "destiny", "value": 8 }],
"resetOnRebirth": false,
"maxLevel": 10
}