mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 07:55:11 +08:00
1247 lines
39 KiB
TypeScript
1247 lines
39 KiB
TypeScript
// 位置类型
|
||
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<Record<BuildingType | TechnologyType, number>> // 前置条件(初始解锁)
|
||
levelRequirements?: Record<number, Partial<Record<BuildingType | TechnologyType, number>>> // 等级升级条件
|
||
}
|
||
|
||
// 建筑实例
|
||
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<Record<BuildingType | TechnologyType, number>> // 前置条件(初始解锁)
|
||
levelRequirements?: Record<number, Partial<Record<BuildingType | TechnologyType, number>>> // 等级升级条件
|
||
}
|
||
|
||
// 科技实例
|
||
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<Record<BuildingType | TechnologyType, number>>
|
||
}
|
||
|
||
// 舰船类型
|
||
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<Record<BuildingType | TechnologyType, number>>
|
||
// 快速射击:对特定目标有额外攻击次数
|
||
// 例如 { lightFighter: 6 } 表示对轻型战斗机有6倍快速射击
|
||
rapidFire?: Partial<Record<ShipType | DefenseType, number>>
|
||
}
|
||
|
||
// 舰船实例
|
||
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<string, string | number> // 翻译参数(如 { 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<Fleet> // 预设舰队数量
|
||
targetPosition?: { galaxy: number; system: number; position: number } // 预设目标坐标
|
||
missionType?: MissionType // 预设任务类型
|
||
cargo?: Partial<Resources> // 预设运输资源
|
||
}
|
||
|
||
// 舰队任务
|
||
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<Fleet>
|
||
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<Fleet>
|
||
defenderFleet: Partial<Fleet>
|
||
defenderDefense: Partial<Record<DefenseType, number>>
|
||
attackerLosses: Partial<Fleet>
|
||
defenderLosses: {
|
||
fleet: Partial<Fleet>
|
||
defense: Partial<Record<DefenseType, number>>
|
||
}
|
||
winner: 'attacker' | 'defender' | 'draw'
|
||
read?: boolean // 已读状态
|
||
plunder: Resources
|
||
debrisField: Resources
|
||
// 新增详细信息
|
||
rounds?: number
|
||
attackerRemaining?: Partial<Fleet>
|
||
defenderRemaining?: {
|
||
fleet: Partial<Fleet>
|
||
defense: Partial<Record<DefenseType, number>>
|
||
}
|
||
roundDetails?: Array<{
|
||
round: number
|
||
attackerLosses: Partial<Fleet>
|
||
defenderLosses: {
|
||
fleet: Partial<Fleet>
|
||
defense: Partial<Record<DefenseType, number>>
|
||
}
|
||
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<Fleet>
|
||
defense?: Partial<Record<DefenseType, number>>
|
||
buildings?: Partial<Record<BuildingType, number>>
|
||
technologies?: Partial<Record<TechnologyType, number>>
|
||
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<Resources, 'metal' | 'crystal'>
|
||
remainingDebris?: Pick<Resources, 'metal' | 'crystal'>
|
||
// 毁灭任务:摧毁的星球
|
||
destroyedPlanetName?: string
|
||
// 毁灭任务:概率和死星损失
|
||
destructionChance?: number
|
||
deathstarsLost?: boolean
|
||
// 毁灭任务:是否发生了战斗
|
||
hadBattle?: boolean
|
||
// 部署任务:部署的舰队
|
||
deployedFleet?: Partial<Fleet>
|
||
// 导弹攻击任务:导弹信息
|
||
missileCount?: number
|
||
missileHits?: number
|
||
missileIntercepted?: number
|
||
defenseLosses?: Partial<Record<DefenseType, number>>
|
||
// 探险任务:发现的资源
|
||
foundResources?: Partial<Resources>
|
||
// 探险任务:发现的舰船
|
||
foundFleet?: Partial<Fleet>
|
||
// 探险任务:损失的舰船
|
||
fleetLost?: Partial<Fleet>
|
||
// 探险任务:探险区域
|
||
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<Fleet>
|
||
resources?: Partial<Resources>
|
||
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<Fleet>
|
||
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<Fleet>
|
||
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<Resources, 'metal' | 'crystal'> // 残骸场只包含金属和晶体
|
||
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<BuildingType, number>
|
||
fleet: Fleet
|
||
defense: Record<DefenseType, number>
|
||
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<TechnologyType, number>
|
||
officers: Record<OfficerType, Officer>
|
||
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<string, AchievementProgress> // 成就进度
|
||
// 战役系统
|
||
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<string, Planet> // 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<TechnologyType, number>
|
||
difficulty: 'easy' | 'medium' | 'hard' // 保留兼容,不再使用
|
||
aiType?: NPCAIType // AI 行为类型
|
||
// 距离难度系统
|
||
difficultyLevel?: number // 基于距离的难度等级(1-无限)
|
||
distanceToHomeworld?: number // 到玩家母星的距离
|
||
// 行为跟踪字段
|
||
lastSpyTime?: number // 上次侦查玩家的时间
|
||
lastAttackTime?: number // 上次攻击玩家的时间
|
||
playerSpyReports?: Record<string, SpyReport> // 对玩家星球的侦查报告(key: planetId)
|
||
fleetMissions?: FleetMission[] // NPC的舰队任务
|
||
// 被攻击追踪
|
||
attackedBy?: Record<
|
||
string,
|
||
{
|
||
count: number // 被攻击次数
|
||
lastAttackTime: number // 最后被攻击时间
|
||
planetId?: string // 攻击者星球ID
|
||
}
|
||
>
|
||
alertUntil?: number // 警戒状态持续到的时间戳
|
||
revengeTarget?: string // 复仇目标玩家ID
|
||
// 外交系统字段
|
||
relations?: Record<string, DiplomaticRelation> // 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<BuildingType, number>
|
||
researchCompleted: number
|
||
maxTechnologyLevel: Record<TechnologyType, number>
|
||
shipsProduced: Record<ShipType, number>
|
||
totalShipsProduced: number
|
||
defensesBuilt: Record<DefenseType, number>
|
||
totalDefensesBuilt: number
|
||
|
||
// 战斗统计
|
||
attacksLaunched: number
|
||
attacksWon: number
|
||
attacksLost: number
|
||
fleetLostInAttack: Record<ShipType, number>
|
||
totalFleetLostInAttack: number
|
||
debrisCreatedFromAttacks: number
|
||
defensesSuccessful: number
|
||
defensesFailed: number
|
||
fleetLostInDefense: Record<ShipType, number>
|
||
totalFleetLostInDefense: number
|
||
defenseLostInDefense: Record<DefenseType, number>
|
||
totalDefenseLostInDefense: number
|
||
enemyFleetDestroyedInDefense: Record<ShipType, number>
|
||
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<AchievementTier, number | null>
|
||
}
|
||
|
||
// ==================== 排行榜系统类型 ====================
|
||
|
||
// 排行榜类别枚举
|
||
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<Resources>
|
||
darkMatter?: number
|
||
points?: number
|
||
ships?: Partial<Fleet>
|
||
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<string, { current: number; completed: boolean }>
|
||
startedAt?: number
|
||
completedAt?: number
|
||
rewardsClaimed?: boolean
|
||
dialoguesRead?: string[] // 已读对话ID
|
||
}
|
||
|
||
// 玩家战役进度
|
||
export interface PlayerCampaignProgress {
|
||
campaignId: string
|
||
currentChapter: number
|
||
currentQuestId?: string
|
||
questProgress: Record<string, QuestProgress>
|
||
completedQuests: string[]
|
||
unlockedQuests: string[]
|
||
branchChoices?: Record<string, string> // 分支选择记录
|
||
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<string, string | number> // 翻译参数
|
||
rewards?: QuestReward
|
||
read?: boolean
|
||
}
|
||
|
||
// WebDAV 配置
|
||
export interface WebDAVConfig {
|
||
serverUrl: string // WebDAV 服务器地址
|
||
username: string // 用户名
|
||
password: string // 密码或应用专用密码
|
||
basePath: string // 存档存放路径
|
||
}
|