Browse Source

任务的接取和结算

master
hanqin 1 week ago
parent
commit
84ff464ff3
  1. 2
      Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs
  2. 1
      Build_God_Api/Build_God_Api/Dto/CharacterDto.cs
  3. 1
      Build_God_Api/Build_God_Api/Services/CharacterService.cs
  4. 1
      Build_God_Game/src/api/character.ts
  5. 6
      Build_God_Game/src/api/dailyMission.ts
  6. 18
      Build_God_Game/src/views/TrainingView.vue

2
Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs

@ -30,11 +30,13 @@ namespace Build_God_Api.DB
/// <summary> /// <summary>
/// 开始时间 /// 开始时间
/// </summary> /// </summary>
[SqlSugar.SugarColumn(IsNullable = true)]
public DateTime? StartTime { get; set; } public DateTime? StartTime { get; set; }
/// <summary> /// <summary>
/// 预计完成时间 /// 预计完成时间
/// </summary> /// </summary>
[SqlSugar.SugarColumn(IsNullable = true)]
public DateTime? EndTime { get; set; } public DateTime? EndTime { get; set; }
/// <summary> /// <summary>

1
Build_God_Api/Build_God_Api/Dto/CharacterDto.cs

@ -19,6 +19,7 @@
public int? NextLevelRequiredPillId { get; set; } public int? NextLevelRequiredPillId { get; set; }
public string? NextLevelRequiredPillName { get; set; } public string? NextLevelRequiredPillName { get; set; }
public int NextLevelRequiredPillQuantity { get; set; } public int NextLevelRequiredPillQuantity { get; set; }
public decimal TrainingExpRate { get; set; }
public DateTime LastLogin { get; set; } public DateTime LastLogin { get; set; }
public DateTime CreatedOn { get; set; } public DateTime CreatedOn { get; set; }
} }

1
Build_God_Api/Build_God_Api/Services/CharacterService.cs

@ -286,6 +286,7 @@ public async Task<Character?> GetCharacterByAccountId(int accountId)
NextLevelRequiredPillId = nextLevelRequiredPillId, NextLevelRequiredPillId = nextLevelRequiredPillId,
NextLevelRequiredPillName = nextLevelRequiredPillName, NextLevelRequiredPillName = nextLevelRequiredPillName,
NextLevelRequiredPillQuantity = nextLevelRequiredPillQuantity, NextLevelRequiredPillQuantity = nextLevelRequiredPillQuantity,
TrainingExpRate = 0.01m,
LastLogin = c.LastLogin, LastLogin = c.LastLogin,
CreatedOn = c.CreatedOn CreatedOn = c.CreatedOn
}); });

1
Build_God_Game/src/api/character.ts

@ -52,6 +52,7 @@ export interface CharacterDto {
nextLevelRequiredPillId?: number nextLevelRequiredPillId?: number
nextLevelRequiredPillName?: string nextLevelRequiredPillName?: string
nextLevelRequiredPillQuantity: number nextLevelRequiredPillQuantity: number
trainingExpRate: number
lastLogin: string lastLogin: string
createdOn: string createdOn: string
} }

6
Build_God_Game/src/api/dailyMission.ts

@ -77,15 +77,15 @@ export interface DailyMission {
export const dailyMissionApi = { export const dailyMissionApi = {
getList: (): Promise<DailyMission[]> => { getList: (): Promise<DailyMission[]> => {
return instance.get('/god/daily-mission/list') return instance.get('/dailyMission/list')
}, },
accept: (dailyMissionId: number): Promise<boolean> => { accept: (dailyMissionId: number): Promise<boolean> => {
return instance.post(`/god/daily-mission/${dailyMissionId}/accept`) return instance.post(`/dailyMission/${dailyMissionId}/accept`)
}, },
claim: (dailyMissionId: number): Promise<boolean> => { claim: (dailyMissionId: number): Promise<boolean> => {
return instance.post(`/god/daily-mission/${dailyMissionId}/claim`) return instance.post(`/dailyMission/${dailyMissionId}/claim`)
} }
} }

18
Build_God_Game/src/views/TrainingView.vue

@ -18,8 +18,14 @@ const showMsg = (text: string, type: 'success' | 'error' = 'success') => {
} }
const trainingStartTime = ref<Date | null>(null) const trainingStartTime = ref<Date | null>(null)
const elapsedMinutes = ref(0) const elapsedSeconds = ref(0)
const expectedExp = computed(() => Math.floor(elapsedMinutes.value * 100)) const levelId = computed(() => characterStore.currentCharacter?.levelId ?? 1)
const trainingExpRate = computed(() => characterStore.currentCharacter?.trainingExpRate ?? 0.01)
const expectedExp = computed(() => {
const rate = trainingExpRate.value
const level = levelId.value
return Math.floor(elapsedSeconds.value * rate * level * level)
})
const isTraining = computed(() => !!trainingStartTime.value) const isTraining = computed(() => !!trainingStartTime.value)
let timer: number | null = null let timer: number | null = null
@ -27,7 +33,7 @@ const updateElapsedTime = () => {
if (trainingStartTime.value) { if (trainingStartTime.value) {
const now = new Date() const now = new Date()
const diff = now.getTime() - trainingStartTime.value!.getTime() const diff = now.getTime() - trainingStartTime.value!.getTime()
elapsedMinutes.value = diff / 60000 elapsedSeconds.value = Math.floor(diff / 1000)
} }
} }
@ -54,7 +60,7 @@ const handleStartTraining = async () => {
const success = await characterStore.startTraining() const success = await characterStore.startTraining()
if (success) { if (success) {
trainingStartTime.value = new Date() trainingStartTime.value = new Date()
elapsedMinutes.value = 0 elapsedSeconds.value = 0
timer = window.setInterval(updateElapsedTime, 1000) timer = window.setInterval(updateElapsedTime, 1000)
showMsg('开始打坐') showMsg('开始打坐')
} else { } else {
@ -69,7 +75,7 @@ const handleStopTraining = async () => {
timer = null timer = null
} }
trainingStartTime.value = null trainingStartTime.value = null
elapsedMinutes.value = 0 elapsedSeconds.value = 0
showMsg(`结算成功,获得 ${expGained} 经验`) showMsg(`结算成功,获得 ${expGained} 经验`)
} }
</script> </script>
@ -99,7 +105,7 @@ const handleStopTraining = async () => {
<div class="info-section"> <div class="info-section">
<div class="info-item"> <div class="info-item">
<span class="label">已打坐</span> <span class="label">已打坐</span>
<span class="value">{{ Math.floor(elapsedMinutes) }} 分钟</span> <span class="value">{{ Math.floor(elapsedSeconds / 60) }}{{ elapsedSeconds % 60 }}</span>
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">预计获得</span> <span class="label">预计获得</span>

Loading…
Cancel
Save