mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 07:55:11 +08:00
feat: 管理员工具支持一键拉满资源与完成队列
新增GM界面一键拉满所有资源和一键完成所有建筑、科技、舰队、防御队列及飞行任务功能。舰队界面支持终止返航/已到达任务,相关多语言文本已补充(含中英文完整,其他语言留空待完善)。
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -26,3 +26,5 @@ docs
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
/docs
|
||||
/docs/assets
|
||||
|
||||
@@ -9,7 +9,11 @@
|
||||
},
|
||||
"private": true,
|
||||
"version": "1.2.5",
|
||||
<<<<<<< Updated upstream
|
||||
"buildDate": "2025/12/15 21:21:23",
|
||||
=======
|
||||
"buildDate": "2025/12/15 21:59:38",
|
||||
>>>>>>> Stashed changes
|
||||
"main": "dist-electron/main.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -475,6 +475,11 @@ export default {
|
||||
arrivalTime: 'Ankunftszeit',
|
||||
returnTime: 'Rückkehrzeit',
|
||||
recallFleet: 'Flotte zurückrufen',
|
||||
abortMission: '',
|
||||
abortMissionTitle: '',
|
||||
abortMissionWarning: '',
|
||||
abortMissionSuccess: '',
|
||||
abortMissionSuccessMessage: '',
|
||||
sendFailed: 'Senden fehlgeschlagen',
|
||||
sendFailedMessage: 'Bitte überprüfen Sie Flottenanzahl, Treibstoffverfügbarkeit oder Ladekapazitätsgrenzen.',
|
||||
recallFailed: 'Zurückrufen fehlgeschlagen',
|
||||
@@ -760,6 +765,8 @@ export default {
|
||||
officers: 'Offiziere',
|
||||
modifyResources: 'Ressourcen ändern',
|
||||
resourcesDesc: 'Planetenressourcen schnell ändern',
|
||||
maxAllResources: '',
|
||||
maxAllResourcesSuccess: '',
|
||||
modifyBuildings: 'Gebäude ändern',
|
||||
buildingsDesc: 'Gebäudelevel schnell festlegen',
|
||||
modifyResearch: 'Forschung ändern',
|
||||
@@ -799,7 +806,11 @@ export default {
|
||||
dangerZone: 'Gefahrenzone',
|
||||
dangerZoneDesc: 'Die folgenden Vorgänge sind irreversibel',
|
||||
resetGame: 'Spiel zurücksetzen',
|
||||
resetGameConfirm: 'Möchten Sie das Spiel wirklich zurücksetzen? Alle Daten werden gelöscht!'
|
||||
resetGameConfirm: 'Möchten Sie das Spiel wirklich zurücksetzen? Alle Daten werden gelöscht!',
|
||||
completeAllQueues: '',
|
||||
completeAllQueuesDesc: '',
|
||||
completeQueues: '',
|
||||
completeQueuesSuccess: ''
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC-Spionagesonde nähert sich',
|
||||
|
||||
@@ -475,6 +475,11 @@ export default {
|
||||
arrivalTime: 'Arrival Time',
|
||||
returnTime: 'Return Time',
|
||||
recallFleet: 'Recall Fleet',
|
||||
abortMission: 'Abort Mission',
|
||||
abortMissionTitle: 'Confirm Abort Mission',
|
||||
abortMissionWarning: 'WARNING: Aborting this mission will permanently lose {ships} ships and {resources} resources!\n\nThis action is irreversible and the fleet and resources will not return.',
|
||||
abortMissionSuccess: 'Mission Aborted',
|
||||
abortMissionSuccessMessage: 'Mission has been aborted, fleet and resources are lost.',
|
||||
sendFailed: 'Send Failed',
|
||||
sendFailedMessage: 'Please check fleet count, fuel availability, or cargo capacity limits.',
|
||||
recallFailed: 'Recall Failed',
|
||||
@@ -756,6 +761,8 @@ export default {
|
||||
officers: 'Officers',
|
||||
modifyResources: 'Modify Resources',
|
||||
resourcesDesc: 'Quickly modify planet resources',
|
||||
maxAllResources: 'Max All',
|
||||
maxAllResourcesSuccess: 'All resources maxed out',
|
||||
modifyBuildings: 'Modify Buildings',
|
||||
buildingsDesc: 'Quickly set building levels',
|
||||
modifyResearch: 'Modify Research',
|
||||
@@ -795,7 +802,11 @@ export default {
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'The following operations are irreversible',
|
||||
resetGame: 'Reset Game',
|
||||
resetGameConfirm: 'Are you sure you want to reset the game? This will delete all data!'
|
||||
resetGameConfirm: 'Are you sure you want to reset the game? This will delete all data!',
|
||||
completeAllQueues: 'Complete All Queues',
|
||||
completeAllQueuesDesc: 'Instantly complete all building, research, ship, defense queues and fleet missions',
|
||||
completeQueues: 'Complete Queues',
|
||||
completeQueuesSuccess: 'Completed {buildingCount} building queues, {researchCount} research queues, {missionCount} fleet missions, {missileCount} missile attacks'
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC Spy Probe Incoming',
|
||||
|
||||
@@ -473,6 +473,11 @@ export default {
|
||||
arrivalTime: '到着時刻',
|
||||
returnTime: '帰還時刻',
|
||||
recallFleet: '艦隊召還',
|
||||
abortMission: '',
|
||||
abortMissionTitle: '',
|
||||
abortMissionWarning: '',
|
||||
abortMissionSuccess: '',
|
||||
abortMissionSuccessMessage: '',
|
||||
sendFailed: '派遣失敗',
|
||||
sendFailedMessage: '艦隊数、燃料の充足、または積載量の制限を確認してください。',
|
||||
recallFailed: '召還失敗',
|
||||
@@ -751,6 +756,8 @@ export default {
|
||||
officers: '士官',
|
||||
modifyResources: '資源を変更',
|
||||
resourcesDesc: '惑星の資源を素早く変更',
|
||||
maxAllResources: '',
|
||||
maxAllResourcesSuccess: '',
|
||||
modifyBuildings: '建物を変更',
|
||||
buildingsDesc: '建物レベルを素早く設定',
|
||||
modifyResearch: '研究を変更',
|
||||
@@ -790,7 +797,11 @@ export default {
|
||||
dangerZone: '危険ゾーン',
|
||||
dangerZoneDesc: '以下の操作は元に戻せません',
|
||||
resetGame: 'ゲームをリセット',
|
||||
resetGameConfirm: 'ゲームをリセットしてもよろしいですか?すべてのデータが削除されます!'
|
||||
resetGameConfirm: 'ゲームをリセットしてもよろしいですか?すべてのデータが削除されます!',
|
||||
completeAllQueues: '',
|
||||
completeAllQueuesDesc: '',
|
||||
completeQueues: '',
|
||||
completeQueuesSuccess: ''
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC偵察プローブが接近中',
|
||||
|
||||
@@ -473,6 +473,11 @@ export default {
|
||||
arrivalTime: '도착 시간',
|
||||
returnTime: '귀환 시간',
|
||||
recallFleet: '함대 소환',
|
||||
abortMission: '',
|
||||
abortMissionTitle: '',
|
||||
abortMissionWarning: '',
|
||||
abortMissionSuccess: '',
|
||||
abortMissionSuccessMessage: '',
|
||||
sendFailed: '파견 실패',
|
||||
sendFailedMessage: '함대 수, 연료 충분 여부 또는 적재량 한계를 확인하세요.',
|
||||
recallFailed: '소환 실패',
|
||||
@@ -752,6 +757,8 @@ export default {
|
||||
officers: '장교',
|
||||
modifyResources: '자원 수정',
|
||||
resourcesDesc: '행성 자원을 빠르게 수정',
|
||||
maxAllResources: '',
|
||||
maxAllResourcesSuccess: '',
|
||||
modifyBuildings: '건물 수정',
|
||||
buildingsDesc: '건물 레벨을 빠르게 설정',
|
||||
modifyResearch: '연구 수정',
|
||||
@@ -791,7 +798,11 @@ export default {
|
||||
dangerZone: '위험 구역',
|
||||
dangerZoneDesc: '다음 작업은 되돌릴 수 없습니다',
|
||||
resetGame: '게임 초기화',
|
||||
resetGameConfirm: '게임을 초기화하시겠습니까? 모든 데이터가 삭제됩니다!'
|
||||
resetGameConfirm: '게임을 초기화하시겠습니까? 모든 데이터가 삭제됩니다!',
|
||||
completeAllQueues: '',
|
||||
completeAllQueuesDesc: '',
|
||||
completeQueues: '',
|
||||
completeQueuesSuccess: ''
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC 정찰 프로브 접근 중',
|
||||
|
||||
@@ -476,6 +476,11 @@ export default {
|
||||
arrivalTime: 'Время прибытия',
|
||||
returnTime: 'Время возврата',
|
||||
recallFleet: 'Отозвать флот',
|
||||
abortMission: '',
|
||||
abortMissionTitle: '',
|
||||
abortMissionWarning: '',
|
||||
abortMissionSuccess: '',
|
||||
abortMissionSuccessMessage: '',
|
||||
sendFailed: 'Отправка не удалась',
|
||||
sendFailedMessage: 'Пожалуйста, проверьте количество флота, наличие топлива или ограничения грузоподъёмности.',
|
||||
recallFailed: 'Отзыв не удался',
|
||||
@@ -759,6 +764,8 @@ export default {
|
||||
officers: 'Офицеры',
|
||||
modifyResources: 'Изменить ресурсы',
|
||||
resourcesDesc: 'Быстрое изменение ресурсов планеты',
|
||||
maxAllResources: '',
|
||||
maxAllResourcesSuccess: '',
|
||||
modifyBuildings: 'Изменить здания',
|
||||
buildingsDesc: 'Быстрая установка уровней зданий',
|
||||
modifyResearch: 'Изменить исследования',
|
||||
@@ -798,7 +805,11 @@ export default {
|
||||
dangerZone: 'Опасная зона',
|
||||
dangerZoneDesc: 'Следующие операции необратимы',
|
||||
resetGame: 'Сбросить игру',
|
||||
resetGameConfirm: 'Вы уверены, что хотите сбросить игру? Все данные будут удалены!'
|
||||
resetGameConfirm: 'Вы уверены, что хотите сбросить игру? Все данные будут удалены!',
|
||||
completeAllQueues: '',
|
||||
completeAllQueuesDesc: '',
|
||||
completeQueues: '',
|
||||
completeQueuesSuccess: ''
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'Приближается шпионский зонд NPC',
|
||||
|
||||
@@ -469,6 +469,11 @@ export default {
|
||||
arrivalTime: '到达时间',
|
||||
returnTime: '返回时间',
|
||||
recallFleet: '召回舰队',
|
||||
abortMission: '终止任务',
|
||||
abortMissionTitle: '确认终止任务',
|
||||
abortMissionWarning: '警告:终止任务将永久损失 {ships} 艘舰船和 {resources} 资源!\n\n此操作不可撤销,舰队和资源将不会返回。',
|
||||
abortMissionSuccess: '任务已终止',
|
||||
abortMissionSuccessMessage: '任务已终止,舰队和资源已损失。',
|
||||
sendFailed: '派遣失败',
|
||||
sendFailedMessage: '请检查舰队数量、燃料是否充足,或载货量是否超出限制。',
|
||||
recallFailed: '召回失败',
|
||||
@@ -751,6 +756,8 @@ export default {
|
||||
officers: '军官',
|
||||
modifyResources: '修改资源',
|
||||
resourcesDesc: '快速修改星球资源数量',
|
||||
maxAllResources: '一键拉满',
|
||||
maxAllResourcesSuccess: '所有资源已拉满',
|
||||
modifyBuildings: '修改建筑',
|
||||
buildingsDesc: '快速设置建筑等级',
|
||||
modifyResearch: '修改科技',
|
||||
@@ -790,7 +797,11 @@ export default {
|
||||
dangerZone: '危险区域',
|
||||
dangerZoneDesc: '以下操作不可撤销,请谨慎操作',
|
||||
resetGame: '重置游戏',
|
||||
resetGameConfirm: '确定要重置游戏吗?这将删除所有数据!'
|
||||
resetGameConfirm: '确定要重置游戏吗?这将删除所有数据!',
|
||||
completeAllQueues: '一键完成所有队列',
|
||||
completeAllQueuesDesc: '立即完成所有建筑、科技、舰船、防御队列和飞行任务',
|
||||
completeQueues: '完成队列',
|
||||
completeQueuesSuccess: '已完成 {buildingCount} 个建筑队列、{researchCount} 个科技队列、{missionCount} 个飞行任务、{missileCount} 个导弹任务'
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC侦查即将到达',
|
||||
|
||||
@@ -475,6 +475,11 @@ export default {
|
||||
arrivalTime: '到達時間',
|
||||
returnTime: '返回時間',
|
||||
recallFleet: '召回艦隊',
|
||||
abortMission: '',
|
||||
abortMissionTitle: '',
|
||||
abortMissionWarning: '',
|
||||
abortMissionSuccess: '',
|
||||
abortMissionSuccessMessage: '',
|
||||
sendFailed: '派遣失敗',
|
||||
sendFailedMessage: '請檢查艦隊數量、燃料是否充足,或載貨量是否超出限制。',
|
||||
recallFailed: '召回失敗',
|
||||
@@ -753,6 +758,8 @@ export default {
|
||||
officers: '軍官',
|
||||
modifyResources: '修改資源',
|
||||
resourcesDesc: '快速修改星球資源數量',
|
||||
maxAllResources: '',
|
||||
maxAllResourcesSuccess: '',
|
||||
modifyBuildings: '修改建築',
|
||||
buildingsDesc: '快速設定建築等級',
|
||||
modifyResearch: '修改科技',
|
||||
@@ -792,7 +799,11 @@ export default {
|
||||
dangerZone: '危險區域',
|
||||
dangerZoneDesc: '以下操作不可撤銷,請謹慎操作',
|
||||
resetGame: '重置遊戲',
|
||||
resetGameConfirm: '確定要重置遊戲嗎?這將刪除所有資料!'
|
||||
resetGameConfirm: '確定要重置遊戲嗎?這將刪除所有資料!',
|
||||
completeAllQueues: '',
|
||||
completeAllQueuesDesc: '',
|
||||
completeQueues: '',
|
||||
completeQueuesSuccess: ''
|
||||
},
|
||||
alerts: {
|
||||
npcSpyIncoming: 'NPC偵查即將到達',
|
||||
|
||||
@@ -303,6 +303,15 @@
|
||||
>
|
||||
{{ t('fleetView.recallFleet') }}
|
||||
</Button>
|
||||
<Button
|
||||
v-if="mission.status === 'returning' || mission.status === 'arrived'"
|
||||
@click="handleAbortMission(mission.id)"
|
||||
variant="destructive"
|
||||
size="sm"
|
||||
class="w-full"
|
||||
>
|
||||
{{ t('fleetView.abortMission') }}
|
||||
</Button>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
@@ -319,7 +328,8 @@
|
||||
</AlertDialogDescription>
|
||||
</AlertDialogHeader>
|
||||
<AlertDialogFooter>
|
||||
<AlertDialogAction>{{ t('common.confirm') }}</AlertDialogAction>
|
||||
<AlertDialogCancel v-if="alertDialogCallback">{{ t('common.cancel') }}</AlertDialogCancel>
|
||||
<AlertDialogAction @click="handleAlertConfirm">{{ t('common.confirm') }}</AlertDialogAction>
|
||||
</AlertDialogFooter>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
@@ -348,6 +358,7 @@
|
||||
import {
|
||||
AlertDialog,
|
||||
AlertDialogAction,
|
||||
AlertDialogCancel,
|
||||
AlertDialogContent,
|
||||
AlertDialogDescription,
|
||||
AlertDialogFooter,
|
||||
@@ -377,6 +388,7 @@
|
||||
const alertDialogOpen = ref(false)
|
||||
const alertDialogTitle = ref('')
|
||||
const alertDialogMessage = ref('')
|
||||
const alertDialogCallback = ref<(() => void) | null>(null)
|
||||
|
||||
// 当前时间(响应式)
|
||||
const currentTime = ref(Date.now())
|
||||
@@ -688,10 +700,54 @@
|
||||
if (!success) {
|
||||
alertDialogTitle.value = t('fleetView.recallFailed')
|
||||
alertDialogMessage.value = t('fleetView.recallFailedMessage')
|
||||
alertDialogCallback.value = null
|
||||
alertDialogOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
// 处理终止任务(返航中)
|
||||
const handleAbortMission = (missionId: string) => {
|
||||
const mission = gameStore.player.fleetMissions.find(m => m.id === missionId)
|
||||
if (!mission) return
|
||||
|
||||
// 计算损失资源总量
|
||||
const totalResources = mission.cargo.metal + mission.cargo.crystal + mission.cargo.deuterium + mission.cargo.darkMatter
|
||||
|
||||
// 计算舰队总数
|
||||
const totalShips = Object.values(mission.fleet).reduce((sum, count) => sum + count, 0)
|
||||
|
||||
alertDialogTitle.value = t('fleetView.abortMissionTitle')
|
||||
alertDialogMessage.value = t('fleetView.abortMissionWarning', {
|
||||
ships: totalShips.toString(),
|
||||
resources: formatNumber(totalResources)
|
||||
})
|
||||
alertDialogCallback.value = () => {
|
||||
abortMission(missionId)
|
||||
}
|
||||
alertDialogOpen.value = true
|
||||
}
|
||||
|
||||
// 终止任务(不返还任何东西)
|
||||
const abortMission = (missionId: string) => {
|
||||
const missionIndex = gameStore.player.fleetMissions.findIndex(m => m.id === missionId)
|
||||
if (missionIndex > -1) {
|
||||
gameStore.player.fleetMissions.splice(missionIndex, 1)
|
||||
alertDialogTitle.value = t('fleetView.abortMissionSuccess')
|
||||
alertDialogMessage.value = t('fleetView.abortMissionSuccessMessage')
|
||||
alertDialogCallback.value = null
|
||||
alertDialogOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
// 处理 AlertDialog 确认
|
||||
const handleAlertConfirm = () => {
|
||||
if (alertDialogCallback.value) {
|
||||
alertDialogCallback.value()
|
||||
alertDialogCallback.value = null
|
||||
}
|
||||
alertDialogOpen.value = false
|
||||
}
|
||||
|
||||
// 获取任务剩余时间
|
||||
const getRemainingTime = (mission: any): number => {
|
||||
const now = currentTime.value
|
||||
|
||||
@@ -60,6 +60,11 @@
|
||||
<CardDescription>{{ t('gmView.resourcesDesc') }}</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent class="space-y-4">
|
||||
<!-- 一键拉满按钮 -->
|
||||
<Button @click="maxAllResources" variant="outline" class="w-full">
|
||||
{{ t('gmView.maxAllResources') }}
|
||||
</Button>
|
||||
|
||||
<div v-for="resource in resourceTypes" :key="resource" class="space-y-2">
|
||||
<Label>{{ t(`resources.${resource}`) }}</Label>
|
||||
<div class="flex gap-2">
|
||||
@@ -242,6 +247,17 @@
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<!-- 队列管理 -->
|
||||
<Card class="border-primary">
|
||||
<CardHeader>
|
||||
<CardTitle>{{ t('gmView.completeAllQueues') }}</CardTitle>
|
||||
<CardDescription>{{ t('gmView.completeAllQueuesDesc') }}</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Button @click="completeAllQueues" variant="default" class="w-full">{{ t('gmView.completeQueues') }}</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<!-- 危险操作 -->
|
||||
<Card class="border-destructive">
|
||||
<CardHeader>
|
||||
@@ -289,6 +305,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { toast } from 'vue-sonner'
|
||||
import { useGameStore } from '@/stores/gameStore'
|
||||
import { useNPCStore } from '@/stores/npcStore'
|
||||
import { useUniverseStore } from '@/stores/universeStore'
|
||||
@@ -592,4 +609,112 @@
|
||||
|
||||
showAlert(t('gmView.npcFleetInitialized', { npcName: selectedNPC.value.name }), t('gmView.npcFleetDetails'))
|
||||
}
|
||||
|
||||
// 一键拉满所有资源
|
||||
const maxAllResources = () => {
|
||||
if (!selectedPlanet.value) return
|
||||
|
||||
const maxAmount = 1000000000 // 10亿
|
||||
selectedPlanet.value.resources.metal = maxAmount
|
||||
selectedPlanet.value.resources.crystal = maxAmount
|
||||
selectedPlanet.value.resources.deuterium = maxAmount
|
||||
selectedPlanet.value.resources.darkMatter = maxAmount
|
||||
|
||||
toast.success(t('gmView.maxAllResourcesSuccess'))
|
||||
}
|
||||
|
||||
// 一键完成所有队列和任务
|
||||
const completeAllQueues = () => {
|
||||
const now = Date.now()
|
||||
let buildingCount = 0
|
||||
let researchCount = 0
|
||||
let missionCount = 0
|
||||
let missileCount = 0
|
||||
|
||||
// 完成所有星球的建筑队列
|
||||
gameStore.player.planets.forEach(planet => {
|
||||
planet.buildQueue.forEach(item => {
|
||||
if (item.endTime > now) {
|
||||
// 根据队列类型完成建筑/拆除/舰船/防御
|
||||
if (item.type === 'building') {
|
||||
planet.buildings[item.itemType as BuildingType] = item.targetLevel || 0
|
||||
} else if (item.type === 'demolish') {
|
||||
planet.buildings[item.itemType as BuildingType] = item.targetLevel || 0
|
||||
} else if (item.type === 'ship') {
|
||||
planet.fleet[item.itemType as ShipType] = (planet.fleet[item.itemType as ShipType] || 0) + (item.quantity || 0)
|
||||
} else if (item.type === 'defense') {
|
||||
planet.defense[item.itemType as DefenseType] = (planet.defense[item.itemType as DefenseType] || 0) + (item.quantity || 0)
|
||||
}
|
||||
buildingCount++
|
||||
}
|
||||
})
|
||||
planet.buildQueue = []
|
||||
})
|
||||
|
||||
// 完成科技队列
|
||||
gameStore.player.researchQueue.forEach(item => {
|
||||
if (item.endTime > now && item.type === 'technology') {
|
||||
gameStore.player.technologies[item.itemType as TechnologyType] = item.targetLevel || 0
|
||||
researchCount++
|
||||
}
|
||||
})
|
||||
gameStore.player.researchQueue = []
|
||||
|
||||
// 完成所有飞行任务(设置到达时间为现在,让游戏逻辑自动处理)
|
||||
gameStore.player.fleetMissions.forEach(mission => {
|
||||
if (mission.status === 'outbound') {
|
||||
// 计算原始飞行时间
|
||||
const originalFlightTime = mission.arrivalTime - mission.departureTime
|
||||
// 将到达时间设置为现在减1毫秒,确保游戏逻辑能立即检测到
|
||||
mission.arrivalTime = now - 1
|
||||
// 同时更新返回时间为:现在 + 原始飞行时间 - 1毫秒
|
||||
mission.returnTime = now + originalFlightTime - 1
|
||||
missionCount++
|
||||
} else if (mission.status === 'returning') {
|
||||
// 返航中的任务设置返回时间为现在减1毫秒,确保游戏逻辑能立即检测到
|
||||
if (mission.returnTime) {
|
||||
mission.returnTime = now - 1
|
||||
}
|
||||
missionCount++
|
||||
} else if (mission.status === 'arrived') {
|
||||
// 修复卡在 arrived 状态的任务
|
||||
// 将状态改为 returning 并设置返回时间为现在
|
||||
mission.status = 'returning'
|
||||
mission.returnTime = now - 1
|
||||
missionCount++
|
||||
}
|
||||
})
|
||||
|
||||
// 完成所有NPC任务
|
||||
npcStore.npcs.forEach(npc => {
|
||||
if (npc.fleetMissions) {
|
||||
npc.fleetMissions.forEach(mission => {
|
||||
if (mission.status === 'outbound') {
|
||||
const originalFlightTime = mission.arrivalTime - mission.departureTime
|
||||
mission.arrivalTime = now - 1
|
||||
mission.returnTime = now + originalFlightTime - 1
|
||||
} else if (mission.status === 'returning' && mission.returnTime) {
|
||||
mission.returnTime = now - 1
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// 完成所有导弹攻击(设置到达时间为现在,让游戏逻辑自动处理)
|
||||
gameStore.player.missileAttacks.forEach(attack => {
|
||||
if (attack.status === 'flying') {
|
||||
attack.arrivalTime = now - 1
|
||||
missileCount++
|
||||
}
|
||||
})
|
||||
|
||||
toast.success(
|
||||
t('gmView.completeQueuesSuccess', {
|
||||
buildingCount,
|
||||
researchCount,
|
||||
missionCount,
|
||||
missileCount
|
||||
})
|
||||
)
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user