playroom每日任务
This commit is contained in:
parent
7e6039f16a
commit
7d61511c32
@ -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")
|
||||
}
|
||||
|
||||
@ -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) // 请求好友宝藏数据
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
Loading…
Reference in New Issue
Block a user