每日任务优化

This commit is contained in:
hahwu 2026-03-06 16:54:17 +08:00
parent 4fcae1b8f0
commit b8309ca89d
8 changed files with 114 additions and 10 deletions

View File

@ -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
}
// 获取任务列表

View File

@ -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
}

View File

@ -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)))

View File

@ -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,

View File

@ -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()
}

View File

@ -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

View File

@ -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()
}

View File

@ -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()
}