探索与情报
海图先是一片黑:船开到哪里,雾擦到哪里;港口靠过才算认识;新闻每七天一条,流言靠岸才听得到。本页覆盖战争迷雾、发现注册(first-meet)、新闻与流言、事件调度、全局价格修正事件、小地图显示规则六块机制。
探索与情报系统(Service/Discovery/)负责回答一个问题:玩家此刻“知道”世界的哪一部分。它把信息揭示拆成三层,互相独立:
| 层 | 管的是什么 | 载体 |
|---|---|---|
| 几何雾(战争迷雾) | 地形层面“去过没去过” | FogMaskService.cs,80×80 格位图 |
| 兴趣点发现(first-meet) | 国家 / 城市 / 遭遇海域“认识没认识” | DiscoveryRegistry.cs,三个永久集合 |
| 情报 | 世界动态新闻 + 靠岸流言 | EventScheduler.cs / NewsTemplates.cs / RumorGenerator.cs |
在游戏循环中的位置:玩家驾船航行(参见 船只)时雾被动擦除;靠近港口触发城市发现并弹出情报简报;进入危险海域触发海域发现(参见 遭遇与刷怪)。已发现与否决定了小地图、全屏战略图、外交面板、顶部位置栏等十余处界面显示什么、隐藏什么。
玩家直接接触它的入口:
- 右下角小地图(200×200 像素)与按 M 键展开的全屏战略地图(
MiniMapPresenter.cs); - 每次驶入港口范围时弹出的“情报简报”弹窗,分【确定新闻】与【流言】两栏(
HarborBriefingPresenter.cs); - 顶部当前位置栏:未发现的海域显示“未知海域”、未发现的港口显示“某国 · 未知港口”(
CurrentLocationPresenter.cs)。
系统由场景内的 DiscoveryBoot.cs 组合根在所有城市生成之前(执行顺序 -200)拉起,确保后续所有系统都能查询发现状态。
战争迷雾(几何雾)
Section titled “战争迷雾(几何雾)”迷雾只作用于小地图与全屏战略地图(界面层),不影响主视角 3D 画面。数据是一张固定 80×80 的正方形格子位图(FogMaskService.cs 代码常量 Grid = 80),覆盖整个世界包围盒的最长边:
- 格子边长 = max(世界宽度, 世界深度) ÷ 80(单位:米)
- 揭示半径 = max(世界宽度, 世界深度) ÷ 10(单位:米)
代入两种世界预设(预设详见 配置表总览):
| 世界预设 | 世界尺寸(约) | 格子边长(约) | 揭示半径(约) |
|---|---|---|---|
| real(positionScale = 1.0) | 7500 米 | 87-94 米 | 750 米 |
| compact(positionScale = 0.1) | 750 米 | 8.7-9.4 米 | 75 米 |
世界尺寸来自城市领海网格构建后注册的世界包围盒,因此迷雾初始化被显式安排在城市系统生成领地网格之后(CitySystemInitializer.cs 调用 InitializeFromBounds),不靠运气。
三态显示(MiniMapPresenter.cs 中 RebuildFogTexture):
| 状态 | 判定 | 小地图表现 |
|---|---|---|
| 当前视野 | 格子中心在玩家船周“揭示半径”圆内 | 完全透明(看得见一切) |
| 已探索 | 历史上曾进入过视野 | 半透明黑罩(透明度 50%,黑 alpha=128) |
| 未探索 | 从未进入视野 | 纯黑(alpha=255),完全遮挡其下的城市与船只图标 |
擦除节奏:每 1 秒重算一次船周圆并把圈内格子永久标记为“已探索”(FogMaskService.cs 代码常量,Update 内 _eraseTimer < 1f)。已探索状态永久且不可逆——没有任何运行时机制会把格子重新变黑(开发者面板的 Reset 除外)。
持久化:6400 个格子打包成 800 字节写入世界状态存档({shipId}_world.json,键 FogMaskData,经由 WorldStateInfo.cs 聚合保存,参见 存档)。存档加载可能早于迷雾初始化,此时数据先缓存、初始化完成后再回放,保证读档不丢探索进度。
遮挡层级:雾罩画在城市 / 港口 / 船只图标之上,玩家三角与导航目标标记之下——玩家永远看得到自己和自己设的航点。
发现注册(什么算“发现”)
Section titled “发现注册(什么算“发现”)”DiscoveryRegistry.cs 维护三个互相独立的永久集合:已发现国家、已发现城市、已发现遭遇海域。全部按字符串 ID 记录,重复发现自动去重(事件只在首次触发一次),没有任何“取消发现”机制。
| 维度 | 触发条件 | 出处 |
|---|---|---|
| 城市 | 玩家船进入城市触发半径(cities.csv 的 radius 列 × 世界预设 cityRadiusScale;触发参考点优先用港口锚点)。敌对城同样会被发现 | CityTradingTrigger.cs |
| 国家(连带) | 发现任意一座城市时,自动连带发现该城所属国家(按 cities.csv 的 country_id 列查) | DiscoveryRegistry.cs |
| 国家(新闻) | “宣战 / 停战”新闻生成时,自动发现牵涉的两个国家——即使玩家从未去过 | EventScheduler.cs |
| 遭遇海域 | 玩家船进入遭遇海域多边形且成功开启遭遇战(船位每 0.1 秒检测一次;重入冷却期内进入不会开战也不会触发发现,但首次进入必然成功) | ActiveZoneTracker.cs / ArenaSessionManager.cs |
| 预设初始 | 场景预设 JSON 的 initialDiscoveredCountries / initialDiscoveredCities 字段在开局时直接灌入 |
ScenarioLoader.cs |
| 开发工具 | F8 面板一键全发现 / 重置(仅编辑器与开发构建) | DiscoveryRevealDevPanel.cs |
当前唯一带初始发现的预设 外循环测试_真实地图.json:开局已知西班牙(country_001)、英格兰(country_002)两国与 city_001 至 city_004 四城;法兰西(country_003)与自由港(city_005)需要玩家自己找。
发现状态遮蔽全表——“未发现”在各界面的具体表现:
| 未发现对象 | 被遮蔽的内容 | 出处 |
|---|---|---|
| 国家 | 全屏地图领地不染色(视同公海)、国境线与海岸线不绘制 | MiniMapPresenter.cs |
| 国家 | 航行视角 / 战略视角领海边界与染色透明;仅一侧已知的国境线用特殊色 | SailingBorderRenderer.cs / StrategicMapRenderer.cs |
| 国家 | 外交面板不出现该国筹码与关系矩阵行(参见 阵营与外交) | DiplomacyPanel.cs |
| 国家 | AI 船国籍标签显示“?“加灰点 | AIShipNationalityTag.cs |
| 国家 | 顶部位置栏整段显示“未知海域” | CurrentLocationPresenter.cs |
| 国家 | 世界视角的国家名标签隐藏 | CountryNameLabel.cs |
| 城市 | 世界视角的城市标记方块与染色隐藏、城市名标签隐藏 | CityDiscoveryVisibility.cs / CityNameLabel.cs |
| 城市 | 战略视角点击该城无响应 | StrategicMapInteractor.cs |
| 城市 | 顶部位置栏显示“某国 · 未知港口” | CurrentLocationPresenter.cs |
| 城市 | 小地图城市 / 港口图标与港口安全圈隐藏(见“已知限制”第 1 条) | MiniMapPresenter.cs |
| 遭遇海域 | 小地图红色危险区不绘制 | MiniMapPresenter.cs |
存档恢复发现集合时不重放发现事件,避免读档瞬间触发大规模界面重建;界面在打开时主动查询全量。
新闻系统(EventScheduler + NewsTemplates)
Section titled “新闻系统(EventScheduler + NewsTemplates)”投放节奏:EventScheduler.cs 监听日期变更,距上次投放 ≥ 7 个游戏天就生成 1 条新闻(代码常量 IntervalDays = 7)。游标初始值为 -999,因此第一条新闻在第 1 个换日点(界面显示“第 2 天”开始的瞬间)就会出现。按默认时间速率(1 现实秒 = 1 游戏小时,参见 时间与调度),7 个游戏天 ≈ 168 现实秒 ≈ 2.8 分钟一条。
关键时序:新闻在生成当刻就改变世界状态(宣战立即敌对、物价立即记账、涉事国立即被发现);靠岸简报只是事后“读报”。玩家可能先挨打、后看到宣战新闻。
模板全表(NewsTemplates.cs,四类等概率各 25%,全部硬编码,无配置表):
| 类型 | 概率 | 标题文案 | 参数 | 生成时立即生效的效果 |
|---|---|---|---|---|
| WarDeclared 宣战 | 25% | “英格兰对法兰西宣战” | 固定 country_002 对 country_003 | 两国关系设为 Hostile;两国自动 first-meet |
| PeaceMade 停战 | 25% | “英法停战协议达成” | 固定同一对国家 | 两国关系设为 Neutral;两国自动 first-meet |
| CurrencyShift 通货变动 | 25% | “全境 {物品} 价格上涨 5%” 或 “…下跌 5%” | 物品从 IronPlate / Wood / Coal / Bullet 四选一(各 25%);50% 概率 ×1.05(涨),50% 概率 ×0.95(跌) | 该物品的全局价格倍率累乘 |
| MonsterSurge 怪物潮 | 25% | “渔船反映 {海域ID} 海域怪物增多” | 海域从 zone_central / east / west / north / south 五选一(各 20%,与 EncounterZones.csv 的真实海域一一对应) | 无——仅记录文案,不联动刷怪强度 |
新闻列表、简报已读游标、投放游标三者全部持久化(键 EventSchedulerNews / LastBriefingShownDay / LastInvestigatedDay)。
靠岸简报与流言(RumorGenerator)
Section titled “靠岸简报与流言(RumorGenerator)”玩家船每次驶入城市触发半径(包括敌对城)都会组装一份 HarborBriefingMessage 并弹窗:
- 确定新闻栏:自上次简报已读日以来的全部新闻(严格大于已读日:同一天内第二次靠岸不会重复看到当天的新闻)。展示后立即把已读游标推到当前天。
- 流言栏:最多 3 条(
RumorGenerator.cs代码常量MaxRumors = 3),按以下优先级填充:
| 序 | 流言来源 | 触发条件 | 文案与数值规则 |
|---|---|---|---|
| 1 | 邻近城市奢侈品报价 | 候选 = GoodsOrigin.csv 全部条目;要求原产城已被发现、不是当前城、直线距离 < 3000 米(代码常量 NeighborMaxDistMeters,距离按 CSV 坐标 × positionScale 换算成米) |
“听说 {城市名} 的 {物品ID} 卖到一份 {模糊价} 金币”。模糊价 = 原产地基础价 × random(0.7, 1.3),即 ±30% 误差 |
| 2 | 未知势力提示 | 还有任何国家未被发现 | 固定文案“听说北方还有别的势力,没人确认。”(不点名,方向也是写死的) |
| 3 | 怪物潮预警 | 新闻历史里存在任意一条 MonsterSurge | 固定文案“渔船说北海最近怪物多。”(不引用真实海域) |
简报弹窗的 LocalPrices 字段当前恒为空——本期不传本地物价,交易界面直接读城市商人数据(参见 交易)。
全局价格修正事件(GlobalPriceModifier)
Section titled “全局价格修正事件(GlobalPriceModifier)”GlobalPriceModifier.cs 维护一张“物品 ID → 价格倍率”表,默认 1.0。通货变动新闻每次 Apply 都是累乘:连续两条同物品上涨新闻 = 1.05 × 1.05 ≈ 1.1025(+10.25%)。倍率无上下限、不随时间衰减、持续时间无限(除非反向新闻把它乘回来),并随世界状态存档持久化(键 GlobalPriceModifierData)。
唯一的读取点在城市商人初始化奢侈品上架时(CityTrader.cs):
上架单价 = max(1, round(距离衰减价 × 全局倍率))
其中距离衰减价来自奢侈品产地表(GoodsOriginRegistry.cs,数据 GoodsOrigin.csv):
价格 = round(基础价 × (1 + 每公里涨价率 × 距原产地公里数)) 库存 = max(0, round(max(基础库存 × (1 − 每公里降库率 × 公里数), 基础库存 × 最低库存比例)))
距离按城市 CSV 坐标 × positionScale 换算为米再除以 1000(公里)。自由港(city_005)被显式排除,不上架任何奢侈品。
GoodsOrigin.csv 全量内容(6 行,策划可直接改):
| 物品 ItemId | 原产城市 | 基础价(金币) | 基础库存(件) | 每公里涨价率 | 每公里降库率 | 最低库存比例 |
|---|---|---|---|---|---|---|
| LuxuryWine | city_001 马德里 | 5 | 400 | 0.6 | 0.20 | 0.10 |
| LuxuryTobacco | city_002 塞维利亚 | 30 | 250 | 1.0 | 0.30 | 0.05 |
| LuxuryCloth | city_003 普利茅斯 | 12 | 300 | 0.7 | 0.20 | 0.10 |
| LuxuryArtillery | city_004 朴次茅斯 | 30 | 100 | 1.0 | 0.30 | 0.05 |
| LuxuryCoffee | city_006 勒阿弗尔 | 30 | 300 | 0.8 | 0.25 | 0.05 |
| LuxurySilk | city_007 马赛 | 80 | 150 | 1.2 | 0.30 | 0.05 |
举例:马赛产丝绸基础价 80,运到约 5.64 公里外的马德里(按 cities.csv 坐标算直线距离)→ 价格 = 80 × (1 + 1.2 × 5.64) ≈ 622 金币;库存被最低比例钳制在 150 × 0.05 = 7.5 → 8 件。“低买高卖跑距离”即本系统设计的核心套利循环。
小地图显示规则
Section titled “小地图显示规则”小地图分两层:数据层(Service/MiniMap/)与渲染层(MiniMapPresenter.cs,UI Toolkit 自绘图标,无相机渲染开销)。
数据层:任何想上小地图的物体挂 MiniMapMarker.cs 组件,自动注册到 MiniMapManager.cs 注册表。标记类型六种:Player / City / MonsterArea / Custom(船只)/ LandArea(岛屿)/ Harbor。城市标记由城市生成器自动挂载,岛屿轮廓与港口点由岛屿生成器挂载(参见 岛屿与陆地)。
两种视图:
| 模式 | 进入方式 | 中心 | 视野半径 | 画幅 |
|---|---|---|---|---|
| 跟随小图 | 默认 | 玩家船(始终居中) | 200 世界单位(代码常量 ViewRadius) |
右下角 200×200 像素(右距 8、底距 64) |
| 全屏战略图 | 按 M 键切换(淡入淡出 200 毫秒) | 世界包围盒中心 | max(世界半宽, 世界半深),未注册时回退 5000 米 | 居中正方形信箱式适配 |
图标与颜色规格(全部为 MiniMapPresenter.cs 代码常量):
| 元素 | 形状 | 尺寸(像素) | 颜色 | 显示条件 |
|---|---|---|---|---|
| 玩家 | 三角(随船艏旋转) | 15 | 白 | 永远显示,雾罩之上 |
| 城市 | 方块 + 全屏模式下加城市名标签 | 12 | 黄 | 城市已发现且在画幅内 |
| 城市边缘指示 | 三角(指向城市方向) | 12 | 黄 | 城市已发现、出画但直线距离 ≤ 1000 米(CityIndicatorMaxDistance),贴画幅边缘(留边 10 像素) |
| 港口 | 方块 | 7 | 青蓝 (0.3, 0.8, 1) | 所属城市已发现 |
| 港口安全圈 | 圆 | 世界半径 80 米(HarborSafeZoneConstants.cs) |
半透明青绿 (64, 224, 168, alpha 64) | 所属城市已发现 |
| 遭遇危险区 | 多边形 / 圆填充 | 按真实形状投影 | 红,透明度 25%(不按危险等级分色) | 海域已发现 |
| 怪物区标记 | 多边形 / 圆 | 按真实大小 | 标记色强制透明度 35% | 跟随模式下区域边缘进入 200 单位视野 |
| 岛屿 | 多边形填充 | 按真实轮廓 | 土黄 (0.6, 0.5, 0.3, alpha 0.8)(LandManager.cs) |
同上,不受发现状态限制 |
| 其他船只 | 三角 | 10 | 灰 (0.6, 0.6, 0.6) 或标记自带色 | 在画幅内即显示,不受发现状态限制 |
| 自动航行目标 | 红色“X”文字标记 + 橙色航线折线 | 字号 16 | 红 / 橙 (1, 0.7, 0.2) | 设有导航目标时 |
全屏模式独有内容:国家领地染色(已发现国家按国家色块填充,透明度 55%)、国境线(双侧国家均已发现才画,粗白线宽 2)、海岸线(陆侧国家已发现才画,米色细线宽 1.5)、城市名标签。国家色来自 countries.csv 的 area_color 列。
交互:小图与全屏图上右键 = 设置自动航行目标(替换当前航线),Shift + 右键 = 追加途经点(参见 寻路与移动)。全屏模式不会因设目标自动关闭。
渲染分层(自下而上):海面底色 → 国家染色 → 怪物区 → 国境线 → 遭遇危险区与安全圈 → 岛屿 → 城市/港口 → 船只 → 雾罩 → 航线 → 玩家三角 → 导航 X 标记。
MiniMapCamera.cs 仍会自动创建一台 512×512 渲染纹理的正交俯视相机(高度 100、正交尺寸 100,均为 Inspector 序列化字段),但图标式小地图不消费它的画面,属于遗留链路;无图形设备的服务器环境下该相机自动禁用。
公式与数值(集中表)
Section titled “公式与数值(集中表)”| 项目 | 公式 / 数值 | 单位 | 来源 |
|---|---|---|---|
| 迷雾网格 | 80 × 80 | 格 | 代码常量 FogMaskService.cs |
| 迷雾格边长 | max(世界宽, 世界深) ÷ 80 | 米 | 代码公式 FogMaskService.cs |
| 迷雾揭示半径 | max(世界宽, 世界深) ÷ 10(real ≈ 750,compact ≈ 75) | 米 | 代码公式 FogMaskService.cs |
| 迷雾擦除间隔 | 1 | 秒 | 代码常量 FogMaskService.cs |
| 迷雾三态透明度 | 视野内 0 / 已探索 128 / 未探索 255(黑色 alpha) | — | 代码常量 MiniMapPresenter.cs |
| 迷雾存档体积 | 6400 位 = 800 字节 | 字节 | 代码 FogMaskService.cs |
| 海域进出检测频率 | 每 0.1 秒(10 赫兹) | 秒 | 代码常量 ActiveZoneTracker.cs |
| 城市发现触发半径 | cities.csv radius 列(45-60)× cityRadiusScale(real 1.0 / compact 0.2) | 米 | CSV cities.csv + JSON 世界预设 |
| 新闻投放间隔 | ≥ 7 游戏天(默认速率下 ≈ 168 现实秒) | 天 | 代码常量 EventScheduler.cs |
| 首条新闻时间 | 第 1 个换日点(显示“第 2 天”开始时) | — | 代码 EventScheduler.cs(游标初值 -999) |
| 新闻四类概率 | 各 25% | 百分比 | 代码 NewsTemplates.cs |
| 通货变动幅度 | ×1.05(涨 5%)或 ×0.95(跌 5%),各 50%;多次累乘 | 倍率 | 代码常量 NewsTemplates.cs |
| 通货变动持续时间 | 无限(不衰减、不过期,仅反向新闻可抵消) | — | 代码 GlobalPriceModifier.cs |
| 通货变动物品池 | IronPlate / Wood / Coal / Bullet(各 25%) | — | 代码常量 NewsTemplates.cs |
| 怪物潮海域池 | zone_central / east / west / north / south(各 20%) | — | 代码常量 NewsTemplates.cs |
| 流言条数上限 | 3 | 条 | 代码常量 RumorGenerator.cs |
| 流言邻城距离上限 | 3000 | 米 | 代码常量 RumorGenerator.cs |
| 流言价格误差 | 原产地基础价 × random(0.7, 1.3),即 ±30% | 倍率 | 代码常量 RumorGenerator.cs |
| 奢侈品价格 | round(基础价 × (1 + 每公里涨价率 × 公里数)) | 金币 | 公式在 GoodsOriginRegistry.cs,参数在 CSV GoodsOrigin.csv |
| 奢侈品库存 | max(0, round(max(基础库存 × (1 − 每公里降库率 × 公里数), 基础库存 × 最低库存比例))) | 件 | 同上 |
| 奢侈品最终上架价 | max(1, round(距离衰减价 × 全局倍率)) | 金币 | 代码 CityTrader.cs |
| 商人库存派生 | 最大库存 = 计算库存 × 2;每日补货 = max(1, 计算库存 ÷ 5) | 件 | 代码 CityTrader.cs |
| 小图视野半径 | 200 | 世界单位 | 代码常量 MiniMapPresenter.cs |
| 全屏视野半径 | max(世界半宽, 世界半深);未注册回退 5000 | 米 | 代码 MiniMapPresenter.cs |
| 小图画幅 | 200×200,右距 8、底距 64 | 像素 | 代码常量 MiniMapPresenter.cs |
| 城市边缘指示距离 | ≤ 1000 | 米 | 代码常量 MiniMapPresenter.cs |
| 全屏切换键 / 动画 | M 键 / 200 毫秒淡入淡出 | — | 代码常量 MiniMapPresenter.cs |
| 港口安全圈半径 | 80 | 米 | 代码常量 HarborSafeZoneConstants.cs |
| 图标尺寸 | 玩家 15 / 城市 12 / 港口 7 / 船 10 / 指示三角 12 / 怪物区基准 20 | 像素 | 代码常量 MiniMapPresenter.cs |
| 小地图相机(遗留) | 高度 100、正交尺寸 100、渲染纹理 512×512、缩放步进 10、最小正交 10 | — | Inspector 序列化字段 MiniMapCamera.cs / MiniMapManager.cs |
与其他系统的交互
Section titled “与其他系统的交互”- 城市与国家:城市触发半径既是交易入口也是城市发现的判定圈;世界包围盒(迷雾初始化的依据)由城市领地网格构建时注册;城市标记方块与名字标签按发现状态显隐。
- 阵营与外交:宣战 / 停战新闻直接改写英格兰与法兰西的国家关系;外交面板只列出已发现国家。
- 遭遇与刷怪:遭遇海域首次成功开战即被发现,此后小地图永久显示其红色危险区;怪物潮新闻引用同一批海域 ID 但不改变刷怪强度。
- 交易:奢侈品距离衰减价、全局价格倍率都在城市商人初始化时注入上架价;国家关系另有 0.9 至 1.2 倍的关系价格修正(属交易系统)。
- 时间与调度:新闻投放挂在换日事件上;1 游戏天 = 1440 游戏分钟 = 默认 24 现实秒。
- 存档:发现集合、迷雾位图、价格倍率、新闻列表与两个游标,五者统一打进
{shipId}_world.json(WorldStateInfo.cs)。 - 船只:迷雾擦除、海域检测、小地图中心都跟玩家船位置走;靠岸记录(复活点、压力破除)与城市发现共用同一个进圈事件。
- 界面总览:小地图属 MainRight 槽位;简报弹窗、位置栏、外交面板均消费发现状态。
- 开发者工具:F8 地图可视度面板提供“仅清雾 / 仅 first-meet / 全揭示 / 重置到预设初始”四档。
配置与调参指南
Section titled “配置与调参指南”| 想调什么 | 改哪里 | 备注 |
|---|---|---|
| 奢侈品基础价 / 库存 / 衰减斜率 | Assets/StreamingAssets/GoodsOrigin.csv |
策划可直接改,运行时首次访问加载;前三行是表头 / 类型 / 注释 |
| 开局已知哪些国家与城市 | 场景预设 JSON(如 Assets/StreamingAssets/Presets/外循环测试_真实地图.json)的 initialDiscoveredCountries / initialDiscoveredCities |
写城市 ID 会自动连带其国家 |
| 城市发现 / 交易触发圈大小 | Assets/StreamingAssets/CitySystem/cities.csv 的 radius 列;整体缩放改世界预设 DataSets/world/*.json 的 cityRadiusScale |
单位米 |
| 新闻频率(7 天) | EventScheduler.cs 常量 IntervalDays |
需程序改 |
| 新闻内容 / 概率 / 涨跌幅(±5%) | NewsTemplates.cs 全部硬编码 |
需程序改;国家对、物品池、海域池均写死 |
| 流言条数(3)/ 邻城距离(3000 米)/ 价格误差(±30%) | RumorGenerator.cs 常量 |
需程序改 |
| 迷雾精度(80 格)/ 揭示半径系数(÷10)/ 擦除间隔(1 秒) | FogMaskService.cs 常量与公式 |
需程序改;揭示半径目前不是独立参数而是世界尺寸的固定比例 |
| 小地图视野半径(200)/ 画幅 / 图标尺寸与颜色 | MiniMapPresenter.cs 常量 |
需程序改 |
| 港口安全圈半径(80 米)与颜色 | HarborSafeZoneConstants.cs |
需程序改 |
| 单个标记是否上图 / 颜色 / 大小 | 挂 MiniMapMarker.cs 组件的 Inspector 序列化字段(_showOnMap、_markerColor、_markerSize 等) |
城市与岛屿的标记是代码生成的,Inspector 只对手工摆放的标记有效 |
| 海域范围 / 危险等级 / 重入冷却 | Assets/StreamingAssets/Encounter/EncounterZones.csv |
属遭遇系统,但海域发现与怪物潮新闻引用其 zoneId |
已知限制与注意事项
Section titled “已知限制与注意事项”- 小地图城市 / 港口图标的发现校验存在 ID 不匹配(疑似缺陷):
MiniMapPresenter.cs用标记 ID 查“城市是否已发现”,并注释声称标记 ID 就是城市 ID;但实际标记 ID 取自物体名——城市为City_{cityId}(CitySystemInitializer.cs创建物体后立即挂组件,组件初始化时名字已定)、港口为HarborMarker_{cityId}(LandManager.cs)。发现注册表里存的是裸city_001这样的 ID,带前缀的查询永远返回“未发现”。按代码现状推断:城市方块、港口方块图标与城市名标签在小地图上不会显示(即使城市已发现);不受影响的有领地染色与国境线(按国家 ID 查)、港口安全圈(按 HarborRegistry 的裸城市 ID 查)、危险区(按海域 ID 查)。 - 通货变动新闻当前没有实际价格效果:新闻只影响 IronPlate / Wood / Coal / Bullet 四种物品的全局倍率,而全局倍率唯一的读取点是奢侈品上架(GoodsOrigin.csv 里只有 LuxuryX 物品)。倍率被忠实记账、持久化,但没有任何消费者读这四种物品的倍率。
- 全局倍率只在城市商人初始化时读一次:
GlobalPriceModifier.cs注释称“dock 入场重算 inventory 时应用”,但实际调用点在城市生成时的商人启动流程(CityTrader.cs)。开局后投放的通货新闻即使命中奢侈品也要等下次读档 / 重建城市才反映到价签。 - 怪物潮新闻是纯文案:代码注释明确“本期不强联动 Encounter zone tier 升级”,海域刷怪强度不变。
- 新闻与流言文案硬编码且混排英文 ID:宣战 / 停战永远是英格兰对法兰西;通货标题与流言直接拼接
IronPlate、zone_central等英文 ID,没有走本地化名称。流言第 2、3 条是固定话术,不引用真实方位或海域。 - 海域发现绑定在“成功开启遭遇战”上:进入处于重入冷却的海域不会触发发现;由于首次进入必然不在冷却中,正常流程无影响,但若首战在海域内沉船复活,时序上存在窄缝。
- 靠岸简报每次进圈都弹,包括敌对城(敌对城不记录停靠状态但照样发简报、照样推进已读游标);没有新闻时弹窗只有流言栏。简报弹窗需要场景中的
HarborBriefingPresenter.cs在 Inspector 上配好面板资源,缺失时只记警告不弹窗。 - 迷雾揭示半径不与瞭望 / 船只属性挂钩:固定为世界尺寸的十分之一,没有“瞭望塔加视野”之类的成长机制。
MiniMapCamera.cs渲染纹理链路属遗留:图标式小地图不使用相机画面,但相机仍会被自动创建并每帧渲染(编辑器与正常构建中)。- F8 重置面板使用反射清空发现集合(仅开发者工具允许反射),重置后重新应用预设初始发现,但已投放的新闻与价格倍率不会回滚。