mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 16:02:26 +08:00
任务接取、进度、完成状态
This commit is contained in:
132
gs/model/db_quest.go
Normal file
132
gs/model/db_quest.go
Normal file
@@ -0,0 +1,132 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"hk4e/common/constant"
|
||||
"hk4e/gdconf"
|
||||
"hk4e/pkg/logger"
|
||||
)
|
||||
|
||||
// DbQuest 玩家任务数据
|
||||
type DbQuest struct {
|
||||
QuestMap map[uint32]*Quest // 任务列表 key:任务id value:任务
|
||||
}
|
||||
|
||||
// Quest 任务
|
||||
type Quest struct {
|
||||
QuestId uint32 // 任务id
|
||||
State uint32 // 任务状态
|
||||
AcceptTime uint32 // 接取时间
|
||||
StartTime uint32 // 开始执行时间
|
||||
FinishProgressList []uint32 // 任务进度
|
||||
}
|
||||
|
||||
func (p *Player) GetDbQuest() *DbQuest {
|
||||
if p.DbQuest == nil {
|
||||
p.DbQuest = &DbQuest{
|
||||
QuestMap: make(map[uint32]*Quest),
|
||||
}
|
||||
}
|
||||
return p.DbQuest
|
||||
}
|
||||
|
||||
// GetQuestMap 获取全部任务
|
||||
func (q *DbQuest) GetQuestMap() map[uint32]*Quest {
|
||||
return q.QuestMap
|
||||
}
|
||||
|
||||
// GetQuestById 获取一个任务
|
||||
func (q *DbQuest) GetQuestById(questId uint32) *Quest {
|
||||
return q.QuestMap[questId]
|
||||
}
|
||||
|
||||
// AddQuest 添加一个任务
|
||||
func (q *DbQuest) AddQuest(questId uint32) {
|
||||
_, exist := q.QuestMap[questId]
|
||||
if exist {
|
||||
logger.Error("quest is already exist, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
questDataConfig := gdconf.GetQuestDataById(int32(questId))
|
||||
if questDataConfig == nil {
|
||||
logger.Error("get quest data config is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
q.QuestMap[questId] = &Quest{
|
||||
QuestId: uint32(questDataConfig.QuestId),
|
||||
State: constant.QUEST_STATE_TYPE_ACCEPT,
|
||||
AcceptTime: uint32(time.Now().Unix()),
|
||||
StartTime: 0,
|
||||
FinishProgressList: nil,
|
||||
}
|
||||
}
|
||||
|
||||
// ExecQuest 开始执行一个任务
|
||||
func (q *DbQuest) ExecQuest(questId uint32) {
|
||||
quest, exist := q.QuestMap[questId]
|
||||
if !exist {
|
||||
logger.Error("get quest is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
if quest.State != constant.QUEST_STATE_TYPE_ACCEPT {
|
||||
logger.Error("invalid quest state, questId: %v, state: %v", questId, quest.State)
|
||||
return
|
||||
}
|
||||
questDataConfig := gdconf.GetQuestDataById(int32(questId))
|
||||
if questDataConfig == nil {
|
||||
logger.Error("get quest data config is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
quest.State = constant.QUEST_STATE_TYPE_EXEC
|
||||
quest.StartTime = uint32(time.Now().Unix())
|
||||
quest.FinishProgressList = make([]uint32, len(questDataConfig.FinishCondList))
|
||||
}
|
||||
|
||||
// DeleteQuest 删除一个任务
|
||||
func (q *DbQuest) DeleteQuest(questId uint32) {
|
||||
_, exist := q.QuestMap[questId]
|
||||
if !exist {
|
||||
logger.Error("quest is not exist, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
delete(q.QuestMap, questId)
|
||||
}
|
||||
|
||||
// AddQuestProgress 添加一个任务的进度
|
||||
func (q *DbQuest) AddQuestProgress(questId uint32, index int, progress uint32) {
|
||||
quest, exist := q.QuestMap[questId]
|
||||
if !exist {
|
||||
logger.Error("get quest is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
if quest.State != constant.QUEST_STATE_TYPE_EXEC {
|
||||
logger.Error("invalid quest state, questId: %v, state: %v", questId, quest.State)
|
||||
return
|
||||
}
|
||||
questDataConfig := gdconf.GetQuestDataById(int32(questId))
|
||||
if questDataConfig == nil {
|
||||
logger.Error("get quest data config is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
if index >= len(quest.FinishProgressList) || index >= len(questDataConfig.FinishCondList) {
|
||||
logger.Error("invalid quest progress index, questId: %v, index: %v", questId, index)
|
||||
return
|
||||
}
|
||||
quest.FinishProgressList[index] += progress
|
||||
if quest.FinishProgressList[index] >= uint32(questDataConfig.FinishCondList[index].Count) {
|
||||
quest.State = constant.QUEST_STATE_TYPE_FINISH
|
||||
}
|
||||
}
|
||||
|
||||
// ForceFinishQuest 强制完成一个任务
|
||||
func (q *DbQuest) ForceFinishQuest(questId uint32) {
|
||||
questDataConfig := gdconf.GetQuestDataById(int32(questId))
|
||||
if questDataConfig == nil {
|
||||
logger.Error("get quest data config is nil, questId: %v", questId)
|
||||
return
|
||||
}
|
||||
for index, finishCond := range questDataConfig.FinishCondList {
|
||||
q.AddQuestProgress(questId, index, uint32(finishCond.Count))
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,7 @@ type Player struct {
|
||||
MainCharAvatarId uint32 // 主角id
|
||||
GCGInfo *GCGInfo // 七圣召唤信息
|
||||
IsGM uint8 // 管理员权限等级
|
||||
DbQuest *DbQuest // 任务
|
||||
// 在线数据 请随意 记得加忽略字段的tag
|
||||
LastSaveTime uint32 `bson:"-" msgpack:"-"` // 上一次保存时间
|
||||
EnterSceneToken uint32 `bson:"-" msgpack:"-"` // 玩家的世界进入令牌
|
||||
|
||||
Reference in New Issue
Block a user