playroom每日任务

This commit is contained in:
hahwu 2025-04-21 15:56:10 +08:00
parent 7e6039f16a
commit 7d61511c32
6 changed files with 1038 additions and 542 deletions

View File

@ -4,6 +4,7 @@ import (
"server/GoUtil"
"server/game/mod/item"
"server/gamedata"
"server/pkg/github.com/name5566/leaf/log"
)
const (
@ -16,6 +17,9 @@ const (
CFG_PLAYROOM_DRESS = "PlayroomDress"
CFG_PLAYROOM_AIR = "PlayroomAir"
CFG_PLAYROOM_LOCK = "PlayroomLock"
CFG_PLAYROOM_DAILYTASK = "PlayroomDailyTask"
CFG_PLAYROOM_DAILYTASKREWARD = "PlayroomDailyTaskReward"
CFG_PLAYROOM_TASKJACKPOT = "PlayroomTaskJackpot"
)
func init() {
@ -28,6 +32,7 @@ func init() {
gamedata.InitCfg(CFG_PLAYROOM_DRESS)
gamedata.InitCfg(CFG_PLAYROOM_AIR)
gamedata.InitCfg(CFG_PLAYROOM_LOCK)
gamedata.InitCfg(CFG_PLAYROOM_DAILYTASK)
}
func GetShopItem(Id int) (int, []*item.Item) {
@ -358,3 +363,58 @@ func GetUnlockNeed(Type int) int {
}
return gamedata.GetIntValue(data, "Need")
}
func GetDailyTask(Type int) map[int]string {
data, err := gamedata.GetData(CFG_PLAYROOM_DAILYTASK)
if err != nil {
return nil
}
r := make(map[int]string)
r1 := make([]int, 0)
r2 := make(map[int]string)
for k, v := range data {
if gamedata.GetIntValue(v, "Type") == Type {
k1 := GoUtil.Int(k)
r[k1] = gamedata.GetStringValue(v, "Task")
r1 = append(r1, k1)
}
}
r3 := GoUtil.RandSliceNum(r1, 6)
for _, v := range r3 {
r2[v] = r[v]
}
return r2
}
func GetDailyTaskReward(Id int) []*item.Item {
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_DAILYTASKREWARD, Id)
if err != nil {
return nil
}
return gamedata.GetItemList(data, "Reward")
}
// 获取场景冲刺奖池
func GetTaskJackpotProb() map[int]int {
r := make(map[int]int)
data, err := gamedata.GetData(CFG_PLAYROOM_TASKJACKPOT)
if err != nil {
log.Debug("GetTaskJackpotProb err:%v", err)
return nil
}
for k, v := range data {
Id := GoUtil.Int(k)
r[Id] = gamedata.GetIntValue(v, "Prob")
}
return r
}
// 获取场景冲刺奖励
func GetTaskJackpotReward(Id int) []*item.Item {
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_TASKJACKPOT, Id)
if err != nil {
log.Debug("GetTaskJackpotReward err:%v", err)
return nil
}
return gamedata.GetItemList(data, "Items")
}

View File

@ -792,6 +792,8 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
RegisterMsgProcessFunc("ReqPlayroomUpvote", ReqPlayroomUpvote) // 点赞别人的playroom
RegisterMsgProcessFunc("ReqPlayroomUnlock", ReqPlayroomUnlock) // 解锁房间
RegisterMsgProcessFunc("ReqPlayroomTask", ReqPlayroomTask) // playroom任务
RegisterMsgProcessFunc("ReqPlayroomTaskReward", ReqPlayroomTaskReward) // 领取任务奖励
// 宠物宝藏
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据

View File

@ -151,7 +151,9 @@ func (p *Player) ProcessTrigger() {
IsDailyBack := false
DailyTaskMod := p.PlayMod.getDailyTaskMod()
MailMod := p.PlayMod.getMailMod()
PlayroomMod := p.PlayMod.getPlayroomMod()
IsMailBack := false
IsPlayroomBack := false
for _, tr := range p.Trigger {
if DailyTaskMod.Trigger(tr) {
IsDailyBack = true
@ -159,6 +161,9 @@ func (p *Player) ProcessTrigger() {
if p.MailTrigger(tr) {
IsMailBack = true
}
if PlayroomMod.QuestTrigger(tr) {
IsPlayroomBack = true
}
}
if IsDailyBack {
@ -167,6 +172,9 @@ func (p *Player) ProcessTrigger() {
if IsMailBack {
p.PushClientRes(MailMod.BackData())
}
if IsPlayroomBack {
// TODO playroom每日任务返回
}
p.Trigger = make([]*quest.Trigger, 0)
}

View File

@ -3529,6 +3529,63 @@ func ReqPlayroomUnlock(player *Player, buf []byte) error {
return nil
}
func ReqPlayroomTask(player *Player, buf []byte) error {
req := &msg.ReqPlayroomTask{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
Items, err := PlayroomMod.GetDailyTaskReward(int(req.Id))
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomTask{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomTask.String())
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomTask{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.PlayMod.save()
player.PushClientRes(&msg.ResPlayroomTask{
Code: msg.RES_CODE_SUCCESS,
Id: int32(req.Id),
})
return nil
}
func ReqPlayroomTaskReward(player *Player, buf []byte) error {
req := &msg.ReqPlayroomTaskReward{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
Id, Items, err := PlayroomMod.GetTaskReward(int(req.Type))
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomTaskReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomTask.String())
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomTaskReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.PlayMod.save()
player.PushClientRes(&msg.ResPlayroomTaskReward{
Code: msg.RES_CODE_SUCCESS,
Id: int32(Id),
Type: req.Type,
})
return nil
}
func ReqOfflineReconnectFunc(a gate.Agent, buf []byte) error {
req := &msg.ReqOfflineReconnect{}
proto.Unmarshal(buf, req)

View File

@ -7,6 +7,7 @@ import (
limitedTimeEventCfg "server/conf/limitedTimeEvent"
playroomCfg "server/conf/playroom"
"server/game/mod/item"
"server/game/mod/quest"
"server/msg"
)
@ -48,9 +49,18 @@ type PlayroomMod struct {
UpvoteList []int // 点赞列表
RoomPoint int // 房间点数
UnlockList map[int]int64 // 解锁
DailyTask map[int]*DailyTask // 每日任务
DailyTaskReward []int // 每日任务奖励
Physiology map[int]*Physiology
}
type DailyTask struct {
Items []*item.Item
Status int
Quest quest.QuestProgress
UnLock bool
}
const (
STATUS_IDLE = 0 // 未开始
STATUS_VISIT = 1 // 拜访
@ -79,6 +89,9 @@ const (
GAME_TYPE_HOOK = 1 // 愿者上钩
GAME_TYPE_FILP = 2 // 翻牌
GAME_TYPE_HIDE = 3 // 捉迷藏
DAILY_TASK_TYPE_ONE = 1 // 一阶段任务
DAILY_TASK_TYPE_TWO = 2 // 二阶段任务
)
type ChipInfo struct {
@ -151,6 +164,9 @@ func (p *PlayroomMod) InitData() {
if p.UnlockList == nil {
p.UnlockList = make(map[int]int64)
}
if p.DailyTask == nil {
p.DailyTask = make(map[int]*DailyTask)
}
}
func (p *PlayroomMod) ZeroUpdate() {
@ -158,6 +174,73 @@ func (p *PlayroomMod) ZeroUpdate() {
p.LastFlip = 0
p.JackpotNum = playroomCfg.GetJackpotNum()
p.UpvoteList = make([]int, 0)
p.DailyTaskReward = make([]int, 0)
p.InitDailyTask()
}
func (p *PlayroomMod) InitDailyTask() {
if p.DailyTask == nil {
p.DailyTask = make(map[int]*DailyTask)
}
Index := 1
TaskList1 := playroomCfg.GetDailyTask(DAILY_TASK_TYPE_ONE)
for k, v := range TaskList1 {
Items := playroomCfg.GetDailyTaskReward(Index)
Quest, _ := quest.ParseQuest(v)
p.DailyTask[k] = &DailyTask{
Items: Items,
Status: 0,
Quest: quest.QuestProgress{Label: Quest.Label, Num: 0, Target: Quest.Num, Status: false},
UnLock: false,
}
Index++
}
TaskList2 := playroomCfg.GetDailyTask(DAILY_TASK_TYPE_TWO)
for k, v := range TaskList2 {
Items := playroomCfg.GetDailyTaskReward(Index)
Quest, _ := quest.ParseQuest(v)
p.DailyTask[k] = &DailyTask{
Items: Items,
Status: 0,
Quest: quest.QuestProgress{Label: Quest.Label, Num: 0, Target: Quest.Num, Status: false},
UnLock: false,
}
Index++
}
}
func (p *PlayroomMod) QuestTrigger(Tr *quest.Trigger) bool {
update := false
for _, v := range p.DailyTask {
if !v.UnLock {
continue
}
if v.Status != quest.QUEST_STATUS_UNFINISH {
continue
}
up := quest.TriggerQuestProgress(&v.Quest, Tr)
if up {
update = true
}
if v.Quest.Status {
v.Status = quest.QUEST_STATUS_FINISH
}
}
return update
}
func (p *PlayroomMod) GetDailyTaskReward(Id int) ([]*item.Item, error) {
v, ok := p.DailyTask[Id]
if !ok {
return nil, fmt.Errorf("GetDailyTaskReward Id is not ok")
}
if v.Status != quest.QUEST_STATUS_FINISH {
return nil, fmt.Errorf("GetDailyTaskReward Status is not finish")
}
v.Status = quest.QUEST_STATUS_REWARD
p.DailyTask[Id] = v
return v.Items, nil
}
func (p *PlayroomMod) GetVisitor() map[int]*Info {
@ -411,6 +494,27 @@ func (p *PlayroomMod) GetVisitorInfo(Id int) (int, int64) {
}
return v.Times, v.Time
}
func (p *PlayroomMod) GetTaskReward(Type int) (int, []*item.Item, error) {
if GoUtil.InArray(Type, p.DailyTaskReward) {
return 0, nil, fmt.Errorf("GetTaskReward Type is already in DailyTaskReward")
}
p.DailyTaskReward = append(p.DailyTaskReward, Type)
Id := 0
var Items []*item.Item
if Type == DAILY_TASK_TYPE_TWO {
ProbList := limitedTimeEventCfg.GetSenceJackpotProb()
Id = GoUtil.RandMap(ProbList)
Items = limitedTimeEventCfg.GetSenceJackpotReward(Id)
} else {
ProbList := playroomCfg.GetTaskJackpotProb()
Id = GoUtil.RandMap(ProbList)
Items = playroomCfg.GetTaskJackpotReward(Id)
}
return Id, Items, nil
}
func (p *PlayroomMod) Draw() (int, []*item.Item, error) {
// if p.AllMood < 100 {
// return 0, nil, fmt.Errorf("Draw AllMood < 100")

File diff suppressed because it is too large Load Diff