// 位置类型 export interface Position { galaxy: number system: number position: number } // 资源类型 export interface Resources { metal: number crystal: number deuterium: number darkMatter: number // 暗物质 energy: number // 电量(实时计算,不存储) } // 星球矿脉储量 export interface OreDeposits { metal: number // 金属矿脉剩余储量 crystal: number // 晶体矿脉剩余储量 deuterium: number // 重氢储量 // 存储星球位置,用于动态计算初始储量上限 // 这样修改配置后,所有星球的上限都会自动更新 position: { galaxy: number; system: number; position: number } } // 建筑类型 export const BuildingType = { MetalMine: 'metalMine', CrystalMine: 'crystalMine', DeuteriumSynthesizer: 'deuteriumSynthesizer', SolarPlant: 'solarPlant', FusionReactor: 'fusionReactor', // 核聚变反应堆 RoboticsFactory: 'roboticsFactory', NaniteFactory: 'naniteFactory', // 纳米工厂 Shipyard: 'shipyard', Hangar: 'hangar', // 机库 ResearchLab: 'researchLab', MetalStorage: 'metalStorage', CrystalStorage: 'crystalStorage', DeuteriumTank: 'deuteriumTank', DarkMatterCollector: 'darkMatterCollector', // 暗物质收集器 DarkMatterTank: 'darkMatterTank', // 暗物质储罐 MissileSilo: 'missileSilo', // 导弹发射井 Terraformer: 'terraformer', // 地形改造器 // 月球专属建筑 LunarBase: 'lunarBase', // 月球基地 SensorPhalanx: 'sensorPhalanx', // 传感器阵列 JumpGate: 'jumpGate', // 跳跃门 // 特殊建筑 PlanetDestroyerFactory: 'planetDestroyerFactory', // 行星毁灭者工厂 GeoResearchStation: 'geoResearchStation', // 地质研究站(影响矿脉恢复速度) DeepDrillingFacility: 'deepDrillingFacility', // 深层钻探设施(提升矿脉上限) // 2moons新增建筑 University: 'university' // 大学(加速研究) } as const export type BuildingType = (typeof BuildingType)[keyof typeof BuildingType] // 建筑配置 export interface BuildingConfig { id: BuildingType name: string description: string baseCost: Resources baseTime: number // 基础建造时间(秒) costMultiplier: number // 升级成本倍数 spaceUsage: number // 占用空间 fleetStorageBonus?: number // 每级增加的舰队仓储(可选) planetOnly?: boolean // 仅行星可建造 moonOnly?: boolean // 仅月球可建造 maxLevel?: number // 最大等级(可选,不设置则无上限) requirements?: Partial> // 前置条件(初始解锁) levelRequirements?: Record>> // 等级升级条件 } // 建筑实例 export interface Building { type: BuildingType level: number } // 研究科技类型 export const TechnologyType = { EnergyTechnology: 'energyTechnology', LaserTechnology: 'laserTechnology', IonTechnology: 'ionTechnology', HyperspaceTechnology: 'hyperspaceTechnology', PlasmaTechnology: 'plasmaTechnology', ComputerTechnology: 'computerTechnology', // 计算机技术 EspionageTechnology: 'espionageTechnology', // 间谍技术 CombustionDrive: 'combustionDrive', ImpulseDrive: 'impulseDrive', HyperspaceDrive: 'hyperspaceDrive', WeaponsTechnology: 'weaponsTechnology', // 武器技术 ShieldingTechnology: 'shieldingTechnology', // 护盾技术 ArmourTechnology: 'armourTechnology', // 装甲技术 Astrophysics: 'astrophysics', // 天体物理学 GravitonTechnology: 'gravitonTechnology', // 引力技术 DarkMatterTechnology: 'darkMatterTechnology', // 暗物质技术 TerraformingTechnology: 'terraformingTechnology', // 地形改造技术 PlanetDestructionTech: 'planetDestructionTech', // 行星毁灭技术 MiningTechnology: 'miningTechnology', // 采矿技术(提升矿脉上限) // 2moons新增科技 IntergalacticResearchNetwork: 'intergalacticResearchNetwork', // 星际研究网络(连接多个研究实验室) MineralResearch: 'mineralResearch', // 矿物研究(提升金属产量) CrystalResearch: 'crystalResearch', // 晶体研究(提升晶体产量) FuelResearch: 'fuelResearch' // 燃料研究(提升重氢产量) } as const export type TechnologyType = (typeof TechnologyType)[keyof typeof TechnologyType] // 科技配置 export interface TechnologyConfig { id: TechnologyType name: string description: string baseCost: Resources baseTime: number costMultiplier: number fleetStorageBonus?: number // 每级增加的舰队仓储(全局,可选) maxLevel?: number // 最大等级(可选,不设置则无上限) requirements?: Partial> // 前置条件(初始解锁) levelRequirements?: Record>> // 等级升级条件 } // 科技实例 export interface Technology { type: TechnologyType level: number } // 防御设施类型 export const DefenseType = { RocketLauncher: 'rocketLauncher', LightLaser: 'lightLaser', HeavyLaser: 'heavyLaser', GaussCannon: 'gaussCannon', IonCannon: 'ionCannon', PlasmaTurret: 'plasmaTurret', SmallShieldDome: 'smallShieldDome', LargeShieldDome: 'largeShieldDome', AntiBallisticMissile: 'antiBallisticMissile', // 反弹道导弹 InterplanetaryMissile: 'interplanetaryMissile', // 星际导弹 PlanetaryShield: 'planetaryShield' // 行星护盾 } as const export type DefenseType = (typeof DefenseType)[keyof typeof DefenseType] // 防御设施配置 export interface DefenseConfig { id: DefenseType name: string description: string cost: Resources buildTime: number attack: number shield: number armor: number requirements?: Partial> } // 舰船类型 export const ShipType = { LightFighter: 'lightFighter', HeavyFighter: 'heavyFighter', Cruiser: 'cruiser', Battleship: 'battleship', Battlecruiser: 'battlecruiser', // 战列巡洋舰 Bomber: 'bomber', // 轰炸机 Destroyer: 'destroyer', // 驱逐舰 SmallCargo: 'smallCargo', LargeCargo: 'largeCargo', ColonyShip: 'colonyShip', Recycler: 'recycler', EspionageProbe: 'espionageProbe', SolarSatellite: 'solarSatellite', // 太阳能卫星 DarkMatterHarvester: 'darkMatterHarvester', // 暗物质采集船 Deathstar: 'deathstar' // 死星 } as const export type ShipType = (typeof ShipType)[keyof typeof ShipType] // 舰船配置 export interface ShipConfig { id: ShipType name: string description: string cost: Resources buildTime: number cargoCapacity: number attack: number shield: number armor: number speed: number fuelConsumption: number storageUsage: number // 占用舰队仓储 requirements?: Partial> // 快速射击:对特定目标有额外攻击次数 // 例如 { lightFighter: 6 } 表示对轻型战斗机有6倍快速射击 rapidFire?: Partial> } // 舰船实例 export interface Fleet { [ShipType.LightFighter]: number [ShipType.HeavyFighter]: number [ShipType.Cruiser]: number [ShipType.Battleship]: number [ShipType.Battlecruiser]: number [ShipType.Bomber]: number [ShipType.Destroyer]: number [ShipType.SmallCargo]: number [ShipType.LargeCargo]: number [ShipType.ColonyShip]: number [ShipType.Recycler]: number [ShipType.EspionageProbe]: number [ShipType.SolarSatellite]: number [ShipType.DarkMatterHarvester]: number [ShipType.Deathstar]: number } // 舰队任务类型 export const MissionType = { Attack: 'attack', Transport: 'transport', Colonize: 'colonize', Spy: 'spy', Deploy: 'deploy', Expedition: 'expedition', HarvestDarkMatter: 'harvestDarkMatter', // 暗物质采集 Recycle: 'recycle', // 回收残骸 Destroy: 'destroy', // 行星毁灭 MissileAttack: 'missileAttack', // 导弹攻击 Station: 'station' // 驻守协防 } as const export type MissionType = (typeof MissionType)[keyof typeof MissionType] // 探险区域类型 export const ExpeditionZone = { NearSpace: 'nearSpace', // 近空区域 - 低风险低收益 DeepSpace: 'deepSpace', // 深空区域 - 中等风险收益 UnchartedSpace: 'unchartedSpace', // 未知空间 - 高风险高收益 DangerousNebula: 'dangerousNebula' // 危险星云 - 极高风险极高收益 } as const export type ExpeditionZone = (typeof ExpeditionZone)[keyof typeof ExpeditionZone] // 探险区域配置 export interface ExpeditionZoneConfig { id: ExpeditionZone requiredTechLevel: number // 所需天体物理学等级 flightTimeMultiplier: number // 飞行时间倍率 resourceMultiplier: number // 资源奖励倍率 darkMatterMultiplier: number // 暗物质奖励倍率 fleetFindMultiplier: number // 舰船发现倍率 dangerMultiplier: number // 危险程度倍率 probabilities: { resources: number // 发现资源概率 darkMatter: number // 发现暗物质概率 fleet: number // 发现舰船概率 pirates: number // 遭遇海盗概率 aliens: number // 遭遇外星人概率 nothing: number // 什么都没发现概率 } } // 外交关系状态 export const RelationStatus = { Hostile: 'hostile', // 敌对 Neutral: 'neutral', // 中立 Friendly: 'friendly' // 友好 } as const export type RelationStatus = (typeof RelationStatus)[keyof typeof RelationStatus] // 外交事件类型 export const DiplomaticEventType = { GiftResources: 'giftResources', // 赠送资源 Attack: 'attack', // 攻击 Spy: 'spy', // 侦查 StealDebris: 'stealDebris', // 抢夺残骸 AllyAttacked: 'allyAttacked', // 盟友被攻击 DestroyPlanet: 'destroyPlanet', // 摧毁星球 CampaignChoice: 'campaignChoice' // 战役对话选择 } as const export type DiplomaticEventType = (typeof DiplomaticEventType)[keyof typeof DiplomaticEventType] // 外交关系 export interface DiplomaticRelation { fromId: string // 关系发起方(玩家或NPC ID) toId: string // 关系接收方(玩家或NPC ID) reputation: number // 好感度值 (-100 到 +100) status: RelationStatus // 关系状态 lastUpdated: number // 最后更新时间戳 history?: Array<{ // 关系变化历史 timestamp: number change: number reason: DiplomaticEventType details?: string }> } // 外交报告(显示好感度变化通知) export interface DiplomaticReport { id: string timestamp: number npcId: string // NPC ID npcName: string // NPC名称 eventType: DiplomaticEventType // 事件类型 reputationChange?: number // 好感度变化值(可选,ally_defend 事件没有) newReputation?: number // 新的好感度值(可选) oldStatus?: RelationStatus // 旧的关系状态(可选) newStatus?: RelationStatus // 新的关系状态(可选) message?: string // 消息内容(已弃用,保留用于兼容性) messageKey?: string // 翻译键(如 'diplomacy.reports.youDestroyedNpcPlanet') messageParams?: Record // 翻译参数(如 { npcName: 'NPC-1', planetName: '星球 1:1:8', reputation: -80 }) read?: boolean // 已读状态 details?: { // 协防任务详情 targetPlanetName?: string targetPosition?: Position fleetSize?: number arrivalTime?: number stationDuration?: number } } // 舰队预设 export interface FleetPreset { id: string name: string // 自定义预设名称 fleet: Partial // 预设舰队数量 targetPosition?: { galaxy: number; system: number; position: number } // 预设目标坐标 missionType?: MissionType // 预设任务类型 cargo?: Partial // 预设运输资源 } // 舰队任务 export interface FleetMission { id: string playerId: string // 玩家ID,如果是NPC任务则为NPC ID npcId?: string // NPC ID(如果是NPC发起的任务) isHostile?: boolean // 是否是敌对任务(用于警告显示) originPlanetId: string targetPosition: { galaxy: number; system: number; position: number } targetIsMoon?: boolean // 目标是否为月球(用于区分同坐标的行星和月球) targetPlanetId?: string debrisFieldId?: string // 残骸场ID(用于回收任务) missionType: MissionType fleet: Partial cargo: Resources departureTime: number arrivalTime: number returnTime?: number status: 'outbound' | 'returning' | 'arrived' // 外交系统字段 isGift?: boolean // 是否为赠送资源任务 giftTargetNpcId?: string // 赠送目标NPC ID // 探险系统字段 expeditionZone?: ExpeditionZone // 探险区域类型 } // 导弹攻击任务(不使用舰队系统) export interface MissileAttack { id: string playerId: string originPlanetId: string targetPosition: { galaxy: number; system: number; position: number } targetPlanetId?: string missileCount: number // 发射的星际导弹数量 launchTime: number arrivalTime: number status: 'flying' | 'arrived' | 'intercepted' } // 战斗结果 export interface BattleResult { id: string timestamp: number attackerId: string defenderId: string attackerPlanetId: string defenderPlanetId: string attackerFleet: Partial defenderFleet: Partial defenderDefense: Partial> attackerLosses: Partial defenderLosses: { fleet: Partial defense: Partial> } winner: 'attacker' | 'defender' | 'draw' read?: boolean // 已读状态 plunder: Resources debrisField: Resources // 新增详细信息 rounds?: number attackerRemaining?: Partial defenderRemaining?: { fleet: Partial defense: Partial> } roundDetails?: Array<{ round: number attackerLosses: Partial defenderLosses: { fleet: Partial defense: Partial> } attackerRemainingPower: number defenderRemainingPower: number }> moonChance?: number // 月球生成概率 } // 间谍报告 export interface SpyReport { id: string timestamp: number spyId: string targetPlanetId: string targetPlanetName: string // 目标星球名称 targetPosition: Position // 目标星球坐标 targetPlayerId: string resources: Resources fleet?: Partial defense?: Partial> buildings?: Partial> technologies?: Partial> detectionChance: number read?: boolean // 已读状态 } // 被侦查通知(玩家被NPC侦查时收到) export interface SpiedNotification { id: string timestamp: number npcId: string // 侦查者NPC ID npcName: string // 侦查者NPC名称 targetPlanetId: string // 被侦查的星球ID targetPlanetName: string // 被侦查的星球名称 detectionSuccess: boolean // 是否被发现 read?: boolean } // NPC活动通知(回收残骸等) export interface NPCActivityNotification { id: string timestamp: number npcId: string // NPC ID npcName: string // NPC名称 activityType: 'recycle' // 活动类型 targetPosition: Position // 目标位置 targetPlanetId?: string // 目标星球ID(如果在玩家星球位置) targetPlanetName?: string // 目标星球名称 arrivalTime: number // 到达时间 read?: boolean } // 即将到来的敌对舰队警告 export interface IncomingFleetAlert { id: string // 对应的FleetMission ID npcId: string // NPC ID npcName: string // NPC名称 missionType: MissionType // 任务类型(spy/attack) targetPlanetId: string // 目标星球ID targetPlanetName: string // 目标星球名称 arrivalTime: number // 到达时间 fleetSize: number // 舰队总数(用于显示规模) read?: boolean } // 任务报告(运输、殖民、回收、部署、毁灭等任务的结果通知) export interface MissionReport { id: string timestamp: number missionType: MissionType originPlanetId: string originPlanetName: string targetPosition: { galaxy: number; system: number; position: number } targetPlanetId?: string targetPlanetName?: string success: boolean // 任务是否成功 message: string // 任务结果描述 // 任务特定的详细信息 details?: { // 通用:失败原因 failReason?: string // 运输任务:运输的资源 transportedResources?: Resources // 殖民任务:新星球信息 newPlanetId?: string newPlanetName?: string // 回收任务:回收的资源 recycledResources?: Pick remainingDebris?: Pick // 毁灭任务:摧毁的星球 destroyedPlanetName?: string // 毁灭任务:概率和死星损失 destructionChance?: number deathstarsLost?: boolean // 毁灭任务:是否发生了战斗 hadBattle?: boolean // 部署任务:部署的舰队 deployedFleet?: Partial // 导弹攻击任务:导弹信息 missileCount?: number missileHits?: number missileIntercepted?: number defenseLosses?: Partial> // 探险任务:发现的资源 foundResources?: Partial // 探险任务:发现的舰船 foundFleet?: Partial // 探险任务:损失的舰船 fleetLost?: Partial // 探险任务:探险区域 expeditionZone?: ExpeditionZone // 侦查任务:报告ID spyReportId?: string } read?: boolean } // 礼物通知(NPC赠送礼物,等待玩家接受或拒绝) export interface GiftNotification { id: string timestamp: number fromNpcId: string // 赠送方NPC ID fromNpcName: string // 赠送方NPC名称 resources: Resources // 赠送的资源 currentReputation: number // 当前好感度 expectedReputationGain: number // 预期好感度增加 expiresAt: number // 过期时间(7天后自动拒绝) read?: boolean } // 礼物被拒绝通知(玩家赠送礼物被NPC拒绝) export interface GiftRejectedNotification { id: string timestamp: number npcId: string // NPC ID npcName: string // NPC名称 rejectedResources: Resources // 被拒绝的资源 currentReputation: number // 当前好感度 reason: string // 拒绝原因 read?: boolean } // NPC贸易提议 export interface TradeOffer { id: string npcId: string npcName: string timestamp: number offeredResources: { type: 'metal' | 'crystal' | 'deuterium' amount: number } requestedResources: { type: 'metal' | 'crystal' | 'deuterium' amount: number } expiresAt: number status: 'pending' | 'accepted' | 'declined' | 'expired' read?: boolean } // NPC情报类型 export type IntelType = 'enemyFleet' | 'enemyResources' | 'enemyMovement' // NPC情报报告 export interface IntelReport { id: string fromNpcId: string fromNpcName: string timestamp: number targetNpcId: string targetNpcName: string intelType: IntelType data: { fleet?: Partial resources?: Partial movement?: { targetPosition: { galaxy: number; system: number; position: number } arrivalTime: number missionType: string } } read: boolean } // NPC联合攻击邀请 export interface JointAttackInvite { id: string fromNpcId: string fromNpcName: string timestamp: number targetNpcId: string targetNpcName: string targetPlanetId: string targetPosition: { galaxy: number; system: number; position: number } npcFleetCommitment: Partial expectedLootRatio: number // 玩家预期分成比例 (0-1) expiresAt: number status: 'pending' | 'accepted' | 'declined' | 'expired' read?: boolean } // NPC资源援助通知 export interface AidNotification { id: string timestamp: number npcId: string npcName: string aidResources: Resources read?: boolean } // NPC报复等级 export interface RevengeLevel { attackCount: number fleetMultiplier: number attackInterval: number name: string } // NPC协防通知 export interface AllyDefenseNotification { id: string timestamp: number npcId: string npcName: string targetPlanetId: string targetPlanetName: string fleetSent: Partial read?: boolean } // NPC态度变化通知 export interface AttitudeChangeNotification { id: string timestamp: number npcId: string npcName: string previousStatus: 'hostile' | 'neutral' | 'friendly' newStatus: 'hostile' | 'neutral' | 'friendly' reason: string // 变化原因 read?: boolean } // 残骸场 export interface DebrisField { id: string position: { galaxy: number; system: number; position: number } resources: Pick // 残骸场只包含金属和晶体 createdAt: number expiresAt?: number // 可选的过期时间 } // 建造队列项 export interface BuildQueueItem { id: string type: 'building' | 'technology' | 'ship' | 'defense' | 'demolish' | 'scrap_ship' itemType: BuildingType | TechnologyType | ShipType | DefenseType targetLevel?: number // 用于建筑和科技 quantity?: number // 用于舰船和防御 startTime: number endTime: number } // 等待队列项(尚未开始执行,不需要 startTime/endTime) export interface WaitingQueueItem { id: string type: 'building' | 'technology' | 'ship' | 'defense' | 'demolish' | 'scrap_ship' itemType: BuildingType | TechnologyType | ShipType | DefenseType targetLevel?: number // 用于建筑和科技 quantity?: number // 用于舰船和防御 priority: number // 排序优先级(数字越小优先级越高) addedTime: number // 添加到等待队列的时间戳 planetId?: string // 建造队列需要标识目标星球 } // 星球 export interface Planet { id: string name: string ownerId?: string position: { galaxy: number; system: number; position: number } resources: Resources buildings: Record fleet: Fleet defense: Record buildQueue: BuildQueueItem[] waitingBuildQueue: WaitingQueueItem[] // 等待队列(建筑、舰船、防御) lastUpdate: number maxSpace: number // 最大空间 maxFleetStorage: number // 舰队仓储上限 isMoon: boolean // 是否为月球 parentPlanetId?: string // 如果是月球,指向母星的ID diameter?: number // 月球直径(km),用于销毁概率计算 jumpGateLastUsed?: number // 跳跃门上次使用时间戳(ms),用于冷却计算 oreDeposits?: OreDeposits // 矿脉储量(可选,用于向后兼容) temperature?: { min: number; max: number } // 星球温度范围(摄氏度),影响太阳能卫星和重氢产量 } // 月球特殊配置 export interface MoonConfig { minDebrisField: number // 生成月球所需的最小残骸场 baseChance: number // 基础生成概率 maxChance: number // 最大生成概率 chancePerDebris: number // 每单位残骸增加的概率 } // 军官类型 export const OfficerType = { Commander: 'commander', // 指挥官 - 增加建筑队列 Admiral: 'admiral', // 上将 - 增加舰队槽位 Engineer: 'engineer', // 工程师 - 增加防御和能量 Geologist: 'geologist', // 地质学家 - 增加资源产量 Technocrat: 'technocrat', // 技术专家 - 减少研究时间 DarkMatterSpecialist: 'darkMatterSpecialist' // 暗物质专家 - 增加暗物质产量 } as const export type OfficerType = (typeof OfficerType)[keyof typeof OfficerType] // 军官配置 export interface OfficerConfig { id: OfficerType name: string description: string cost: Resources // 招募成本 weeklyMaintenance: Resources // 每周维护费用 benefits: { buildingSpeedBonus?: number // 建筑速度加成 (百分比) researchSpeedBonus?: number // 研究速度加成 (百分比) resourceProductionBonus?: number // 资源产量加成 (百分比) darkMatterProductionBonus?: number // 暗物质产量加成 (百分比) energyProductionBonus?: number // 电量产出加成 (百分比) fleetSpeedBonus?: number // 舰队速度加成 (百分比) fuelConsumptionReduction?: number // 燃料消耗减少 (百分比) defenseBonus?: number // 防御加成 (百分比) additionalBuildQueue?: number // 额外建筑队列 additionalFleetSlots?: number // 额外舰队槽位 storageCapacityBonus?: number // 仓储容量加成 (百分比) } } // 军官实例 export interface Officer { type: OfficerType active: boolean hiredAt?: number // 招募时间 expiresAt?: number // 到期时间 // 动态加成(与 OfficerConfig.benefits 结构相同) bonuses?: { buildingSpeedBonus?: number researchSpeedBonus?: number resourceProductionBonus?: number darkMatterProductionBonus?: number energyProductionBonus?: number fleetSpeedBonus?: number fuelConsumptionReduction?: number defenseBonus?: number additionalBuildQueue?: number additionalFleetSlots?: number storageCapacityBonus?: number } } // 玩家 export interface Player { id: string name: string planets: Planet[] technologies: Record officers: Record researchQueue: BuildQueueItem[] waitingResearchQueue: WaitingQueueItem[] // 研究等待队列 fleetMissions: FleetMission[] missileAttacks: MissileAttack[] // 导弹攻击任务 battleReports: BattleResult[] spyReports: SpyReport[] spiedNotifications: SpiedNotification[] // 被侦查通知 npcActivityNotifications: NPCActivityNotification[] // NPC活动通知(回收残骸等) missionReports: MissionReport[] // 任务报告(运输、殖民、回收等) incomingFleetAlerts: IncomingFleetAlert[] // 即将到来的敌对舰队警告 giftNotifications: GiftNotification[] // 礼物通知(等待接受/拒绝) giftRejectedNotifications: GiftRejectedNotification[] // 礼物被拒绝通知 // NPC增强行为通知 tradeOffers?: TradeOffer[] // 中立NPC贸易提议 intelReports?: IntelReport[] // 友好NPC情报报告 jointAttackInvites?: JointAttackInvite[] // 友好NPC联合攻击邀请 aidNotifications?: AidNotification[] // 友好NPC资源援助通知 allyDefenseNotifications?: AllyDefenseNotification[] // 友好NPC协防通知 attitudeChangeNotifications?: AttitudeChangeNotification[] // NPC态度变化通知 points: number // 总积分(每1000资源=1分) bonusPoints?: number // 奖励积分(战役、成就等奖励的积分,不会被重新计算覆盖) isGMEnabled?: boolean // GM模式开关(默认false,通过秘籍激活) lastVersionCheckTime?: number // 最后一次自动检查版本的时间戳(被动检测) lastManualUpdateCheck?: number // 最后一次手动检查更新的时间戳(主动检测) // 外交系统字段(外交关系存储在 NPC.relations 中) diplomaticReports?: DiplomaticReport[] // 外交变化报告 // 新手引导字段 tutorialProgress?: TutorialProgress // 新手引导进度 // 隐私协议同意状态 privacyAgreed?: boolean // 是否已同意隐私协议 // 弱引导系统 dismissedHints?: string[] // 已关闭的提示ID列表 hintsEnabled?: boolean // 是否启用弱引导提示(默认true) // 显示设置 backgroundEnabled?: boolean // 是否启用背景动画(默认false) // 舰队预设 fleetPresets?: FleetPreset[] // 舰队预设列表(最多3个) // 成就系统 achievementStats?: AchievementStats // 成就统计数据 achievements?: Record // 成就进度 // 战役系统 campaignProgress?: PlayerCampaignProgress // 战役进度 questNotifications?: QuestNotification[] // 任务通知 } export interface NotificationSettings { browser: boolean inApp: boolean suppressInFocus: boolean // 当页面聚焦时是否浏览器通知 types: { construction: boolean research: boolean [key: string]: boolean } } // 游戏状态 export interface GameState { player: Player currentPlanetId: string gameTime: number isPaused: boolean universe: Universe } // 宇宙 export interface Universe { galaxies: number systems: number positions: number planets: Map // key: "galaxy:system:position" npcs: NPC[] } // NPC AI 类型 export const NPCAIType = { Aggressive: 'aggressive', // 侵略型 - 积极侦查和攻击玩家 Defensive: 'defensive', // 防守型 - 只在被攻击时反击,优先发展防御 Trader: 'trader', // 商人型 - 主动交易,几乎不攻击,高好感度时赠送资源 Expansionist: 'expansionist', // 扩张型 - 优先发展和殖民,较少攻击 Balanced: 'balanced' // 平衡型 - 根据情况动态调整策略 } as const export type NPCAIType = (typeof NPCAIType)[keyof typeof NPCAIType] // NPC玩家 export interface NPC { id: string name: string note?: string // 玩家添加的备注 planets: Planet[] technologies: Record difficulty: 'easy' | 'medium' | 'hard' // 保留兼容,不再使用 aiType?: NPCAIType // AI 行为类型 // 距离难度系统 difficultyLevel?: number // 基于距离的难度等级(1-无限) distanceToHomeworld?: number // 到玩家母星的距离 // 行为跟踪字段 lastSpyTime?: number // 上次侦查玩家的时间 lastAttackTime?: number // 上次攻击玩家的时间 playerSpyReports?: Record // 对玩家星球的侦查报告(key: planetId) fleetMissions?: FleetMission[] // NPC的舰队任务 // 被攻击追踪 attackedBy?: Record< string, { count: number // 被攻击次数 lastAttackTime: number // 最后被攻击时间 planetId?: string // 攻击者星球ID } > alertUntil?: number // 警戒状态持续到的时间戳 revengeTarget?: string // 复仇目标玩家ID // 外交系统字段 relations?: Record // NPC对其他实体的关系(key: targetId) allies?: string[] // 盟友列表(NPC ID) enemies?: string[] // 敌人列表(NPC ID) } // 新手引导系统 export interface TutorialStep { id: string title: string // 标题 content: string // 内容描述 target?: string // 目标元素的选择器或ID placement?: 'top' | 'bottom' | 'left' | 'right' | 'center' // 提示框位置 route?: string // 需要跳转的路由 action?: 'click' | 'build' | 'research' | 'none' // 需要完成的操作类型 actionTarget?: string // 操作目标(建筑ID、科技ID等) completionCheck?: () => boolean // 完成条件检查函数(运行时注入) canSkip?: boolean // 是否可跳过此步骤 highlightPadding?: number // 高亮区域的padding } export interface TutorialState { isActive: boolean // 引导是否激活 currentStepIndex: number // 当前步骤索引 completedSteps: string[] // 已完成的步骤ID列表 skipped: boolean // 是否已跳过整个引导 lastActiveTime?: number // 最后活跃时间 } export interface TutorialProgress { tutorialCompleted: boolean // 是否完成了整个引导 completedStepIds: string[] // 已完成的步骤ID currentStep: string | null // 当前步骤ID skippedAt?: number // 跳过的时间戳 } // ==================== 成就系统类型 ==================== // 成就类别枚举 export const AchievementCategory = { Resource: 'resource', Building: 'building', Combat: 'combat', Mission: 'mission', Diplomacy: 'diplomacy' } as const export type AchievementCategory = (typeof AchievementCategory)[keyof typeof AchievementCategory] // 成就等级枚举 export const AchievementTier = { Bronze: 'bronze', Silver: 'silver', Gold: 'gold', Platinum: 'platinum', Diamond: 'diamond' } as const export type AchievementTier = (typeof AchievementTier)[keyof typeof AchievementTier] // 成就统计数据接口 export interface AchievementStats { // 资源统计 totalMetalProduced: number totalCrystalProduced: number totalDeuteriumProduced: number totalDarkMatterProduced: number totalMetalConsumed: number totalCrystalConsumed: number totalDeuteriumConsumed: number totalDarkMatterConsumed: number // 建造统计 buildingsUpgraded: number maxBuildingLevel: Record researchCompleted: number maxTechnologyLevel: Record shipsProduced: Record totalShipsProduced: number defensesBuilt: Record totalDefensesBuilt: number // 战斗统计 attacksLaunched: number attacksWon: number attacksLost: number fleetLostInAttack: Record totalFleetLostInAttack: number debrisCreatedFromAttacks: number defensesSuccessful: number defensesFailed: number fleetLostInDefense: Record totalFleetLostInDefense: number defenseLostInDefense: Record totalDefenseLostInDefense: number enemyFleetDestroyedInDefense: Record totalEnemyFleetDestroyedInDefense: number debrisCreatedFromDefenses: number // 任务统计 totalFlightMissions: number transportMissions: number transportedResources: number colonizations: number spyMissions: number deployments: number expeditionsTotal: number expeditionsSuccessful: number recyclingMissions: number recycledResources: number planetDestructions: number fuelConsumed: number // 外交统计 friendlyNPCCount: number hostileNPCCount: number giftsSent: number giftResourcesTotal: number attackedByNPC: number spiedByNPC: number debrisRecycledByNPC: number debrisResourcesLostToNPC: number } // 成就等级配置 export interface AchievementTierConfig { tier: AchievementTier target: number reward: AchievementReward } // 成就奖励 export interface AchievementReward { darkMatter?: number points?: number } // 成就配置接口 export interface AchievementConfig { id: string category: AchievementCategory icon: string tiers: AchievementTierConfig[] statKey: keyof AchievementStats | string checkType: 'gte' | 'eq' | 'sum' | 'max' } // 玩家成就进度 export interface AchievementProgress { id: string currentTier: AchievementTier | null currentValue: number unlockedAt?: number tierUnlocks: Record } // ==================== 排行榜系统类型 ==================== // 排行榜类别枚举 export const RankingCategory = { Total: 'total', // 总积分 Building: 'building', // 建筑积分 Research: 'research', // 研究积分 Fleet: 'fleet', // 舰队积分 Defense: 'defense' // 防御积分 } as const export type RankingCategory = (typeof RankingCategory)[keyof typeof RankingCategory] // 排行榜条目接口 export interface RankingEntry { id: string // 玩家或NPC ID name: string // 名称 isPlayer: boolean // 是否为玩家(否则为NPC) scores: { total: number // 总积分 building: number // 建筑积分 research: number // 研究积分 fleet: number // 舰队积分 defense: number // 防御积分 } planetCount: number // 星球数量 } // ==================== 战役系统 ==================== // 任务状态 export const QuestStatus = { Locked: 'locked', // 未解锁 Available: 'available', // 可接取 Active: 'active', // 进行中 Completed: 'completed', // 已完成 Failed: 'failed' // 失败 } as const export type QuestStatus = (typeof QuestStatus)[keyof typeof QuestStatus] // 任务目标类型 export const ObjectiveType = { // 基础目标 BuildBuilding: 'buildBuilding', // 建造建筑到某等级 ResearchTech: 'researchTech', // 研究科技 ProduceShips: 'produceShips', // 生产舰船 AccumulateResources: 'accumulateResources', // 积累资源 // 战斗目标 DefeatNPC: 'defeatNPC', // 击败特定NPC WinBattles: 'winBattles', // 赢得N场战斗 RecycleDebris: 'recycleDebris', // 回收残骸 DestroyPlanet: 'destroyPlanet', // 摧毁星球 // 外交目标 ReachRelation: 'reachRelation', // 达到某关系等级 SendGift: 'sendGift', // 送礼 FormAlliance: 'formAlliance', // 结盟 // 探索目标 Colonize: 'colonize', // 殖民新星球 Expedition: 'expedition', // 完成探险任务 DiscoverLocation: 'discoverLocation', // 发现特定位置 SpyTarget: 'spyTarget' // 侦查特定目标 } as const export type ObjectiveType = (typeof ObjectiveType)[keyof typeof ObjectiveType] // 任务目标 export interface QuestObjective { id: string type: ObjectiveType descriptionKey: string // 翻译键 target: string | number // 目标值或ID (建筑类型/科技类型/舰船类型/NPC ID等) targetSecondary?: string | number // 次要目标 (如等级要求) required: number // 需要数量 } // 任务奖励 export interface QuestReward { resources?: Partial darkMatter?: number points?: number ships?: Partial unlockBuilding?: BuildingType unlockTech?: TechnologyType specialItem?: string // 特殊物品ID } // 剧情对话 export interface StoryDialogue { id: string speaker: 'narrator' | 'player' | 'npc' | 'mysterious' speakerNameKey?: string // 翻译键 portrait?: string // 头像标识 textKey: string // 翻译键 choices?: DialogueChoice[] } // 对话选项 export interface DialogueChoice { textKey: string // 翻译键 nextDialogueId?: string effect?: 'reputation_up' | 'reputation_down' | 'unlock_branch' npcId?: string // 影响的NPC ID(用于声望变化) value?: number // 效果数值(如声望变化量,默认为10) branchId?: string // 解锁的分支ID(用于unlock_branch效果) } // 战役任务配置 export interface CampaignQuestConfig { id: string chapter: number // 章节号 order: number // 章节内顺序 titleKey: string // 翻译键 descriptionKey: string // 翻译键 // 剧情 prologueDialogues?: StoryDialogue[] // 任务开始对话 epilogueDialogues?: StoryDialogue[] // 任务完成对话 // 目标 objectives: QuestObjective[] // 奖励 rewards: QuestReward // 解锁条件 requiredQuestIds?: string[] // 需要先完成的任务 // 任务位置(用于地图显示) mapPosition: { x: number; y: number } // 特殊标记 isBoss?: boolean // Boss战 isBranch?: boolean // 分支任务 branchGroup?: string // 分支组ID(同组只能完成一个) } // 战役章节配置 export interface CampaignChapterConfig { id: string number: number titleKey: string // 翻译键 descriptionKey: string // 翻译键 backgroundStoryKey: string // 翻译键 quests: CampaignQuestConfig[] } // 战役配置 export interface CampaignConfig { id: string nameKey: string // 翻译键 descriptionKey: string // 翻译键 chapters: CampaignChapterConfig[] } // 玩家任务进度 export interface QuestProgress { questId: string status: QuestStatus objectives: Record startedAt?: number completedAt?: number rewardsClaimed?: boolean dialoguesRead?: string[] // 已读对话ID } // 玩家战役进度 export interface PlayerCampaignProgress { campaignId: string currentChapter: number currentQuestId?: string questProgress: Record completedQuests: string[] unlockedQuests: string[] branchChoices?: Record // 分支选择记录 unlockedBranches?: string[] // 已解锁的分支任务ID列表 } // 任务通知 export interface QuestNotification { id: string timestamp: number questId: string questTitleKey: string // 翻译键 eventType: 'unlocked' | 'objective_completed' | 'quest_completed' | 'chapter_completed' | 'reward_claimed' messageKey: string // 翻译键 messageParams?: Record // 翻译参数 rewards?: QuestReward read?: boolean } // WebDAV 配置 export interface WebDAVConfig { serverUrl: string // WebDAV 服务器地址 username: string // 用户名 password: string // 密码或应用专用密码 basePath: string // 存档存放路径 }