feat: 重构任务奖励系统并增加宠物技能和皮肤奖励
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

将任务奖励逻辑重构到单独的文件中,增加对宠物技能和皮肤奖励的支持,优化任务完成处理流程
This commit is contained in:
xinian
2026-04-11 19:25:59 +08:00
parent ecc483a11a
commit f6aa0c3339
13 changed files with 536 additions and 188 deletions

View File

@@ -3,6 +3,7 @@ package service
import (
"blazing/common/utils"
"blazing/cool"
configmodel "blazing/modules/config/model"
config "blazing/modules/config/service"
"blazing/modules/player/model"
@@ -27,54 +28,58 @@ func (s *TalkService) reset(flag int) {
s.dbm(s.Model).Where("talk_id", flag).Data("count", 0, "last_reset_time", gtime.Now()).Update()
}
//实现挖矿次数确认
func (s *TalkService) Cheak(mapid uint32, flag int) (int, bool) {
m1 := s.dbm(s.Model)
func (s *TalkService) progress(flag int) (uint32, *model.Talk, *configmodel.MineralCollectionConfig, bool) {
var talks *model.Talk
m1.Where("talk_id", flag).Scan(&talks)
s.dbm(s.Model).Where("talk_id", flag).Scan(&talks)
cfg := config.NewTalkConfigService().GetCache(flag)
if cfg == nil {
return 0, talks, nil, false
}
if talks == nil {
return 0, true //如果表里没有记载数据,那么就可以直接挖矿
return 0, nil, cfg, true
}
c := config.NewTalkConfigService().GetCache(flag)
//因为这个是挖一次更新一次,而且是实时更新的,如果更新日期是今天,那么就可以确认不用再重置,否则就需要重置挖矿记录
if c == nil {
return 0, false //没在地图
}
switch c.Limit {
switch cfg.Limit {
case 0:
if !utils.IsToday(talks.LastResetTime) {
s.reset(flag)
return int(0), true
return 0, talks, cfg, true
}
case 1:
if !utils.IsWEEK(talks.LastResetTime) {
s.reset(flag)
return int(0), true
return 0, talks, cfg, true
}
case 2:
if !utils.IsMon(talks.LastResetTime) {
s.reset(flag)
return int(0), true
return 0, talks, cfg, true
}
}
if uint32(mapid) != c.MapID {
return talks.Count, talks, cfg, true
}
func (s *TalkService) Progress(flag int) (uint32, bool) {
count, _, _, ok := s.progress(flag)
return count, ok
}
//实现挖矿次数确认
func (s *TalkService) Cheak(mapid uint32, flag int) (int, bool) {
count, _, cfg, ok := s.progress(flag)
if !ok || cfg == nil {
return 0, false //没在地图
}
if talks.Count >= c.DailyCollectCount {
if uint32(mapid) != cfg.MapID {
return 0, false //没在地图
}
if count >= cfg.DailyCollectCount {
return 0, false
}
return int(talks.Count), true //int(config.MaxDailyCnt - talks.Count)
return int(count), true //int(config.MaxDailyCnt - talks.Count)
}