mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 07:55:11 +08:00
feat: 新增队列与外交通知组件及新手引导
引入队列通知(QueueNotifications)和外交通知(DiplomaticNotifications)组件,优化主界面队列与外交报告展示,支持一键查看与跳转。重构App.vue,移除原有队列展示,改为弹出式通知,支持功能解锁提示与新手引导(TutorialOverlay)。完善NPC外交事件处理,导弹攻击等行为影响好感度并生成报告。优化部分UI细节与多语言文本,提升交互体验。
This commit is contained in:
@@ -36,9 +36,10 @@ export const calculateDistance = (
|
||||
|
||||
/**
|
||||
* 计算飞行时间
|
||||
* 平衡后的时间倍率,确保游戏节奏合理
|
||||
*/
|
||||
export const calculateFlightTime = (distance: number, minSpeed: number): number => {
|
||||
return Math.max(10, Math.floor((distance * 10000) / minSpeed)) // 至少10秒
|
||||
return Math.max(10, Math.floor((distance * 50) / minSpeed)) // 至少10秒
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -717,7 +718,8 @@ export const updateFleetMissions = async (
|
||||
attacker: Player,
|
||||
defender: Player | null,
|
||||
now: number,
|
||||
allNpcs?: NPC[]
|
||||
allNpcs?: NPC[],
|
||||
locale?: Locale
|
||||
): Promise<{
|
||||
completedMissions: string[]
|
||||
battleReports: BattleResult[]
|
||||
@@ -767,7 +769,24 @@ export const updateFleetMissions = async (
|
||||
planets.set(moonKey, attackResult.moon)
|
||||
}
|
||||
if (attackResult.debrisField) {
|
||||
newDebrisFields.push(attackResult.debrisField)
|
||||
// 检查该位置是否已存在残骸场
|
||||
const existingDebris = debrisFields.get(attackResult.debrisField.id)
|
||||
if (existingDebris) {
|
||||
// 累加残骸资源
|
||||
const updatedDebris: DebrisField = {
|
||||
...existingDebris,
|
||||
resources: {
|
||||
metal: existingDebris.resources.metal + attackResult.debrisField.resources.metal,
|
||||
crystal: existingDebris.resources.crystal + attackResult.debrisField.resources.crystal
|
||||
}
|
||||
}
|
||||
debrisFields.set(attackResult.debrisField.id, updatedDebris)
|
||||
updatedDebrisFields.push(updatedDebris)
|
||||
} else {
|
||||
// 新建残骸场
|
||||
debrisFields.set(attackResult.debrisField.id, attackResult.debrisField)
|
||||
newDebrisFields.push(attackResult.debrisField)
|
||||
}
|
||||
}
|
||||
}
|
||||
break
|
||||
@@ -821,6 +840,15 @@ export const updateFleetMissions = async (
|
||||
if (destroyResult && destroyResult.success && destroyResult.planetId) {
|
||||
// 星球被摧毁
|
||||
destroyedPlanetIds.push(destroyResult.planetId)
|
||||
|
||||
// 处理外交关系(如果目标是NPC星球)
|
||||
if (targetPlanet && targetPlanet.ownerId && allNpcs && locale) {
|
||||
const planetOwner = allNpcs.find(npc => npc.id === targetPlanet.ownerId)
|
||||
if (planetOwner) {
|
||||
diplomaticLogic.handlePlanetDestructionReputation(attacker, targetPlanet, planetOwner, allNpcs, locale)
|
||||
}
|
||||
}
|
||||
|
||||
planets.delete(targetKey)
|
||||
}
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user