From b8309ca89da34da8a97dc645a3f09f475f994cb3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:54:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=8F=E6=97=A5=E4=BB=BB=E5=8A=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/daily_task/daily_task_cfg.go | 47 ++++++++++++++++++++ src/server/game/activity_func.go | 22 +++++++++ src/server/game/mod/daily_task/DailyFunc.go | 3 +- src/server/game/mod/daily_task/DailyTask.go | 10 +++-- src/server/game/mod_factory.go | 5 +++ src/server/game/player_base_mod.go | 3 +- src/server/game/player_data.go | 9 ++-- src/server/test/dailytask_test.go | 25 +++++++++++ 8 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 src/server/test/dailytask_test.go diff --git a/src/server/conf/daily_task/daily_task_cfg.go b/src/server/conf/daily_task/daily_task_cfg.go index 7348bf67..ecc36c06 100644 --- a/src/server/conf/daily_task/daily_task_cfg.go +++ b/src/server/conf/daily_task/daily_task_cfg.go @@ -5,6 +5,7 @@ import ( "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" + "strings" ) const ( @@ -12,6 +13,7 @@ const ( DAILY_TASK = "DailyTask" DAILY_TASK_ACTIVE = "DailyTaskActive" DAILY_TASK_JACKPOT = "DailyTaskJackpot" + DAILY_TASK_REWARD = "DailyTaskReward" ) func init() { @@ -19,6 +21,51 @@ func init() { gamedata.InitCfg(DAILY_TASK) gamedata.InitCfg(DAILY_TASK_ACTIVE) gamedata.InitCfg(DAILY_TASK_JACKPOT) + gamedata.InitCfg(DAILY_TASK_REWARD) +} + +func GetDailyTaskReward(Id, factory, activityId int) []*item.Item { + data, err := gamedata.GetData(DAILY_TASK_REWARD) + if err != nil { + log.Debug("GetDailyTaskReward err:%v", err) + return nil + } + for _, v := range data { + sortId := gamedata.GetIntValue(v, "SortId") + rewardGroupType := gamedata.GetIntValue(v, "RewardGroupType") + if sortId == Id && rewardGroupType == activityId { + items := gamedata.GetItemList(v, "ItemID") + petCoinBase := gamedata.GetIntValue(v, "PetCoinBase") + if petCoinBase > 0 { + petCoinNum := int(float64(petCoinBase) * (float64(factory)/1000 + 1)) + petCoinNum = (petCoinNum/5 + 1) * 5 // 向上取整到5的倍数 + items = append(items, &item.Item{ + Id: item.ITEM_STAR_ID, + Num: petCoinNum, + }) + } + return items + } + } + return nil +} + +func GetActivityIds() []int { + data, err := gamedata.GetDataByKey(DAILY_TASK_CONST, "RewardGroupType_const") + if err != nil { + log.Debug("GetActivityIds err:%v", err) + return nil + } + str := gamedata.GetStringValue(data, "Value") + strArr := strings.Split(str, "|") + result := make([]int, 0, len(strArr)) + for _, v := range strArr { + a, _ := strconv.Atoi(v) + if a != 0 { + result = append(result, a) + } + } + return result } // 获取任务列表 diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 2d917909..377eceda 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -5,6 +5,7 @@ import ( activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" champshipCfg "server/conf/champship" + dailyTaskCfg "server/conf/daily_task" guesscolorCfg "server/conf/guess_color" languageCfg "server/conf/language" miningCfg "server/conf/mining" @@ -456,3 +457,24 @@ func (p *Player) GetChampshipActivityId() (int, int) { } return todayActivityId, yesterdayActivityId } + +func (p *Player) GetDailyTaskActivityId() int { + var activityId int + activiyCfgList := activityCfg.GetActivityListOrigin() + Now := GoUtil.Now() + level := p.GetBaseMod().GetLevel() + activityIds := dailyTaskCfg.GetActivityIds() + for _, v := range activiyCfgList { + if !GoUtil.InArray(v.Type, activityIds) { + continue + } + if v.Level > level { + continue + } + if v.StartTime <= Now && v.EndTime >= Now { + activityId = v.Id + break + } + } + return activityId +} diff --git a/src/server/game/mod/daily_task/DailyFunc.go b/src/server/game/mod/daily_task/DailyFunc.go index 0c0ad490..28728d10 100644 --- a/src/server/game/mod/daily_task/DailyFunc.go +++ b/src/server/game/mod/daily_task/DailyFunc.go @@ -8,7 +8,8 @@ import ( "sort" ) -func getTaskReward(Id, AreaId int) []*item.Item { +func getTaskReward(Id, AreaId, activityId int) []*item.Item { + switch Id { case 2: StarNum := int(50 * math.Pow(1.04, float64(AreaId))) diff --git a/src/server/game/mod/daily_task/DailyTask.go b/src/server/game/mod/daily_task/DailyTask.go index b07d88aa..58bfe2a7 100644 --- a/src/server/game/mod/daily_task/DailyTask.go +++ b/src/server/game/mod/daily_task/DailyTask.go @@ -3,6 +3,7 @@ package dailyTask import ( "fmt" dailyTaskCfg "server/conf/daily_task" + orderCfg "server/conf/order" "server/game/mod/item" "server/game/mod/quest" GoUtil "server/game_util" @@ -48,15 +49,15 @@ func (dt *DailyTaskMod) Unlock() { dt.Lock = true } -func (dt *DailyTaskMod) LevUpTrigger(Lv, AreaId int) bool { +func (dt *DailyTaskMod) LevUpTrigger(Lv, AreaId, dailyAcitivityId int) bool { if len(dt.DayTask) != 0 { return false } - dt.ZeroUpdate(Lv, AreaId) + dt.ZeroUpdate(Lv, AreaId, dailyAcitivityId) return true } -func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { +func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId, activityId int) { TaskList := dailyTaskCfg.GetTaskList(Lv) if len(TaskList) <= 0 { return @@ -65,6 +66,7 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { LastTaskId := GoUtil.GetMapKey(dt.lastTask) TaskList1 := GoUtil.SubSlices(TaskListId, LastTaskId) TaskId := GoUtil.RandSliceNum(TaskList1, 3) + OrderFactor := orderCfg.GetOrderFactor(AreaId) for i := 0; i < len(TaskId); i++ { Id := i + 1 questStr := TaskList[TaskId[i]] @@ -72,7 +74,7 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { if err != nil { log.Debug("parse quest err str : %s", questStr) } - Items := getTaskReward(Id, AreaId) + Items := dailyTaskCfg.GetDailyTaskReward(Id, OrderFactor, activityId) dt.DayTask[Id] = DailyTask{ Items: Items, UnLock: Id == 1, diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index b9da4fae..f7ba48bd 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -6,6 +6,7 @@ import ( "server/game/mod/champship" "server/game/mod/charge" "server/game/mod/chess" + dailyTask "server/game/mod/daily_task" "server/game/mod/decorate" "server/game/mod/endless" "server/game/mod/face" @@ -85,3 +86,7 @@ func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod func (p *Player) GetMiningMod() *mining.MiningMod { return p.PlayMod.getMiningMod() } + +func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod { + return p.PlayMod.getDailyTaskMod() +} diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index 62f74700..83e5557a 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -537,7 +537,8 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) // 日常任务解锁 DailyTaskMod := player.PlayMod.getDailyTaskMod() DecorateMod := player.PlayMod.getDecorateMod() - if DailyTaskMod.LevUpTrigger(BaseMod.Level, DecorateMod.GetAreaId()) { + dailyAcitivityId := player.GetDailyTaskActivityId() + if DailyTaskMod.LevUpTrigger(BaseMod.Level, DecorateMod.GetAreaId(), dailyAcitivityId) { player.PushClientRes(DailyTaskMod.BackData()) } upLv = BaseMod.Level diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index e273216e..899372d6 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -350,10 +350,6 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String()) p.PushClientRes(p.PlayMod.getCardMod().BackData()) - // 每日任务 - p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId()) - p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) - // 能量商店 p.PlayMod.getBaseMod().ZeroUpdate() p.PushClientRes(p.PlayMod.getBaseMod().BackData()) @@ -390,6 +386,11 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.PlayMod.getChampshipMod().ZeroUpdate() p.initAcitivity() p.ActivityZeroUpdate() + + // 每日任务 + p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId(), p.GetDailyTaskActivityId()) + p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) + p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN}) p.PlayMod.save() } diff --git a/src/server/test/dailytask_test.go b/src/server/test/dailytask_test.go new file mode 100644 index 00000000..72711427 --- /dev/null +++ b/src/server/test/dailytask_test.go @@ -0,0 +1,25 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestDailyActiviyId(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + ids := player.GetDailyTaskActivityId() + if ids == 0 { + t.Errorf("GetDailyTaskActivityId failed, ids is empty") + } +} + +func TestDailyZeroUpdate(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + DailyTaskMod := player.GetDailyTaskMod() + BaseMod := player.GetBaseMod() + DecorateMod := player.GetDecorateMod() + DailyTaskMod.ZeroUpdate(BaseMod.Level, DecorateMod.GetAreaId(), player.GetDailyTaskActivityId()) + DailyTaskMod.BackData() +}