阵营boss
This commit is contained in:
parent
840aae0caf
commit
4893f8496b
2018
bin/json/game_enchantboss.json
Normal file
2018
bin/json/game_enchantboss.json
Normal file
File diff suppressed because it is too large
Load Diff
102
bin/json/game_enchantshop.json
Normal file
102
bin/json/game_enchantshop.json
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"buynum": 1,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 2,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 20
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 3,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 30
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 4,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 40
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 5,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 50
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 6,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 60
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 7,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 70
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 8,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 9,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 90
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buynum": 10,
|
||||||
|
"need": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "diamond",
|
||||||
|
"n": 100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
49
modules/enchant/api.go
Normal file
49
modules/enchant/api.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/modules"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
HuntingGetListResp = "getlist"
|
||||||
|
HuntingChallengeResp = "challenge"
|
||||||
|
HuntingChallengeOverResp = "challengeover"
|
||||||
|
HuntingSkillLvResp = "skilllv"
|
||||||
|
HuntingGetRewardResp = "getreward"
|
||||||
|
HuntingBuyResp = "buy"
|
||||||
|
HuntingRankListResp = "ranklist"
|
||||||
|
)
|
||||||
|
|
||||||
|
type apiComp struct {
|
||||||
|
modules.MCompGate
|
||||||
|
service core.IService
|
||||||
|
configure *configureComp
|
||||||
|
module *Hunting
|
||||||
|
friend comm.IFriend
|
||||||
|
chat comm.IChat
|
||||||
|
}
|
||||||
|
|
||||||
|
//组件初始化接口
|
||||||
|
func (this *apiComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
|
err = this.MCompGate.Init(service, module, comp, options)
|
||||||
|
this.module = module.(*Hunting)
|
||||||
|
|
||||||
|
this.service = service
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *apiComp) Start() (err error) {
|
||||||
|
err = this.MCompGate.Start()
|
||||||
|
var module core.IModule
|
||||||
|
if module, err = this.service.GetModule(comm.ModuleFriend); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.friend = module.(comm.IFriend)
|
||||||
|
if module, err = this.service.GetModule(comm.ModuleChat); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.chat = module.(comm.IChat)
|
||||||
|
return
|
||||||
|
}
|
137
modules/enchant/api_buy.go
Normal file
137
modules/enchant/api_buy.go
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/configure"
|
||||||
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
"go_dreamfactory/utils"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
//参数校验
|
||||||
|
func (this *apiComp) BuyCheck(session comm.IUserSession, req *pb.HuntingBuyReq) (code pb.ErrorCode) {
|
||||||
|
if req.Count <= 0 {
|
||||||
|
code = pb.ErrorCode_ReqParameterError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *apiComp) Buy(session comm.IUserSession, req *pb.HuntingBuyReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
var (
|
||||||
|
curByCount int32
|
||||||
|
costRes *cfg.Gameatn // 门票atn 类型 只取T
|
||||||
|
mapData map[string]interface{}
|
||||||
|
szCostRes []*cfg.Gameatn // 购买累计消耗
|
||||||
|
curCount int32 // 当前门票数量
|
||||||
|
addCount int32 //获得数量
|
||||||
|
)
|
||||||
|
mapData = make(map[string]interface{}, 0)
|
||||||
|
code = this.BuyCheck(session, req)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return // 参数校验失败直接返回
|
||||||
|
}
|
||||||
|
list, err := this.module.modelHunting.getHuntingList(session.GetUserId())
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验是不是今天
|
||||||
|
if !utils.IsToday(list.CTime) {
|
||||||
|
list.CTime = configure.Now().Unix()
|
||||||
|
list.BuyCount = 0
|
||||||
|
mapData["cTime"] = list.CTime
|
||||||
|
mapData["buyCount"] = list.BuyCount
|
||||||
|
} else {
|
||||||
|
curByCount = list.BuyCount
|
||||||
|
}
|
||||||
|
curByCount += req.Count // 当前需要购买的数量
|
||||||
|
if this.configure.GetMaxBuyChallengeCount() < curByCount {
|
||||||
|
code = pb.ErrorCode_HuntingBuyMaxCount
|
||||||
|
return
|
||||||
|
}
|
||||||
|
conf := this.module.configure.GetGlobalConf()
|
||||||
|
if conf == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
costRes = conf.HuntingCos
|
||||||
|
if costRes == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
amount := int32(this.module.ModuleItems.QueryItemAmount(session.GetUserId(), costRes.T)) // 获取当前数量
|
||||||
|
curCount = amount
|
||||||
|
if amount < conf.HuntingNum {
|
||||||
|
if list.RecoveryTime == 0 {
|
||||||
|
list.RecoveryTime = configure.Now().Unix()
|
||||||
|
}
|
||||||
|
for { // 计算恢复时间
|
||||||
|
if list.RecoveryTime+int64(conf.HuntingRecovery*60) <= configure.Now().Unix() {
|
||||||
|
curCount++
|
||||||
|
list.RecoveryTime += int64(conf.HuntingRecovery * 60)
|
||||||
|
if curCount >= conf.HuntingNum {
|
||||||
|
list.RecoveryTime = 0
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if curCount-amount > 0 {
|
||||||
|
addCount = curCount - amount
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
list.RecoveryTime = 0
|
||||||
|
}
|
||||||
|
addCount += req.Count
|
||||||
|
if amount+addCount > conf.VikingNum {
|
||||||
|
code = pb.ErrorCode_VikingBuyMaxCount
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mapData["recoveryTime"] = list.RecoveryTime
|
||||||
|
|
||||||
|
for i := list.BuyCount + 1; i <= curByCount; i++ {
|
||||||
|
_cfg := this.configure.GetBuyChallengeCount(i)
|
||||||
|
if _cfg == nil {
|
||||||
|
code = pb.ErrorCode_HuntingBuyMaxCount
|
||||||
|
return
|
||||||
|
}
|
||||||
|
szCostRes = append(szCostRes, _cfg.Need...)
|
||||||
|
}
|
||||||
|
sz := make([]*cfg.Gameatn, 0)
|
||||||
|
for _, v := range szCostRes {
|
||||||
|
bFound := false
|
||||||
|
for _, v1 := range sz {
|
||||||
|
if v.A == v1.A && v.T == v1.T {
|
||||||
|
v1.N += v.N
|
||||||
|
bFound = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !bFound {
|
||||||
|
sz = append(sz, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//消耗
|
||||||
|
if code = this.module.ConsumeRes(session, sz, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res := &cfg.Gameatn{
|
||||||
|
A: "item",
|
||||||
|
T: costRes.T,
|
||||||
|
N: addCount,
|
||||||
|
}
|
||||||
|
if code = this.module.DispenseRes(session, []*cfg.Gameatn{res}, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list.BuyCount = curByCount
|
||||||
|
mapData["buyCount"] = curByCount
|
||||||
|
code = this.module.ModifyHuntingData(session.GetUserId(), mapData)
|
||||||
|
|
||||||
|
session.SendMsg(string(this.module.GetType()), HuntingBuyResp, &pb.HuntingBuyResp{Data: list})
|
||||||
|
return
|
||||||
|
}
|
90
modules/enchant/api_challenge.go
Normal file
90
modules/enchant/api_challenge.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
//参数校验
|
||||||
|
func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.HuntingChallengeReq) (code pb.ErrorCode) {
|
||||||
|
if req.BossType <= 0 && req.Difficulty > 0 {
|
||||||
|
code = pb.ErrorCode_ReqParameterError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
///挑战主线关卡
|
||||||
|
func (this *apiComp) Challenge(session comm.IUserSession, req *pb.HuntingChallengeReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
|
||||||
|
code = this.ChallengeCheck(session, req)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return // 参数校验失败直接返回
|
||||||
|
}
|
||||||
|
|
||||||
|
hunting, err := this.module.modelHunting.getHuntingList(session.GetUserId())
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_PagodaNotFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
conf := this.module.configure.GetGlobalConf()
|
||||||
|
if conf == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
costRes := conf.HuntingCos
|
||||||
|
if costRes == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if code = this.module.CheckRes(session, []*cfg.Gameatn{costRes}); code != pb.ErrorCode_Success {
|
||||||
|
code = pb.ErrorCode_HuntingNoChallengeCount
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// if hunting.ChallengeCount > this.module.configure.GetGlobalConf().HuntingNum+hunting.BuyCount {
|
||||||
|
// code = pb.ErrorCode_HuntingMaxChallengeCount
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
cfgData := this.module.configure.GetHuntingBossConfigData(req.BossType, req.Difficulty)
|
||||||
|
if cfgData == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
value, ok := hunting.Boss[req.BossType]
|
||||||
|
if !ok { // 类型校验
|
||||||
|
hunting.Boss[req.BossType] = 0
|
||||||
|
}
|
||||||
|
if value < req.Difficulty {
|
||||||
|
if value+1 != req.Difficulty {
|
||||||
|
code = pb.ErrorCode_HuntingLvErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
code, record := this.module.battle.CreatePveBattle(session, &pb.BattlePVEReq{
|
||||||
|
Ptype: pb.PlayType_hunting,
|
||||||
|
Title: "",
|
||||||
|
Format: &pb.BattleFormation{
|
||||||
|
Leadpos: req.Leadpos,
|
||||||
|
Format: req.Teamids,
|
||||||
|
},
|
||||||
|
Mformat: cfgData.Boss,
|
||||||
|
})
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
session.SendMsg(string(this.module.GetType()), HuntingChallengeResp, &pb.HuntingChallengeResp{
|
||||||
|
Info: &pb.BattleInfo{Id: record.Id, Title: record.Title, Btype: record.Btype, Ptype: record.Ptype, RedCompId: record.RedCompId, Redflist: record.Redflist, BlueCompId: record.BlueCompId, Buleflist: record.Buleflist},
|
||||||
|
BossType: req.BossType,
|
||||||
|
Difficulty: req.Difficulty,
|
||||||
|
})
|
||||||
|
if user := this.module.ModuleUser.GetUser(session.GetUserId()); user != nil {
|
||||||
|
this.chat.SendSysChatToWorld(comm.ChatSystem15, nil, req.BossType, req.Difficulty, user.Name)
|
||||||
|
} else {
|
||||||
|
this.module.Errorf("no found userdata uid:%s", session.GetUserId())
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
119
modules/enchant/api_challengeover.go
Normal file
119
modules/enchant/api_challengeover.go
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/configure"
|
||||||
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
//参数校验
|
||||||
|
func (this *apiComp) ChallengeOverCheck(session comm.IUserSession, req *pb.HuntingChallengeOverReq) (code pb.ErrorCode) {
|
||||||
|
if req.BossType <= 0 && req.Difficulty > 0 {
|
||||||
|
code = pb.ErrorCode_ReqParameterError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
///挑战主线关卡
|
||||||
|
func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.HuntingChallengeOverReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
var (
|
||||||
|
mapData map[string]interface{}
|
||||||
|
newChallenge bool // 新的关卡
|
||||||
|
reward []*cfg.Gameatn
|
||||||
|
bWin bool // 战斗是否胜利
|
||||||
|
)
|
||||||
|
mapData = make(map[string]interface{}, 0)
|
||||||
|
reward = make([]*cfg.Gameatn, 0)
|
||||||
|
code = this.ChallengeOverCheck(session, req)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return // 参数校验失败直接返回
|
||||||
|
}
|
||||||
|
|
||||||
|
hunting, err := this.module.modelHunting.getHuntingList(session.GetUserId())
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_PagodaNotFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
conf := this.module.configure.GetGlobalConf()
|
||||||
|
if conf == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
costRes := conf.HuntingCos
|
||||||
|
if costRes == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if code = this.module.CheckRes(session, []*cfg.Gameatn{costRes}); code != pb.ErrorCode_Success {
|
||||||
|
code = pb.ErrorCode_HuntingNoChallengeCount
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cfgHunting := this.module.configure.GetHuntingBossConfigData(req.BossType, req.Difficulty)
|
||||||
|
if cfgHunting == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
value, ok := hunting.Boss[req.BossType]
|
||||||
|
if !ok { // 类型校验
|
||||||
|
hunting.Boss[req.BossType] = 0
|
||||||
|
}
|
||||||
|
if value < req.Difficulty {
|
||||||
|
if value+1 != req.Difficulty {
|
||||||
|
code = pb.ErrorCode_HuntingLvErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newChallenge = true
|
||||||
|
}
|
||||||
|
// 校验门票数量够不够
|
||||||
|
if code = this.module.ConsumeRes(session, []*cfg.Gameatn{costRes}, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// check
|
||||||
|
code, bWin = this.module.battle.CheckBattleReport(session, req.Report)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
amount := int32(this.module.ModuleItems.QueryItemAmount(session.GetUserId(), costRes.T)) // 获取当前数量
|
||||||
|
|
||||||
|
if amount < conf.HuntingNum {
|
||||||
|
hunting.RecoveryTime = configure.Now().Unix()
|
||||||
|
mapData["recoveryTime"] = hunting.RecoveryTime
|
||||||
|
}
|
||||||
|
if bWin {
|
||||||
|
this.module.CheckRank(session.GetUserId(), req.BossType, req.Difficulty, hunting, req.Report)
|
||||||
|
}
|
||||||
|
// 耗时校验 当前战斗胜利时间消耗小于之前刷新数据
|
||||||
|
|
||||||
|
// 发放通关随机奖励
|
||||||
|
reward = this.module.configure.GetDropReward(cfgHunting.Drop) // 获取掉落奖励
|
||||||
|
if code = this.module.DispenseRes(session, reward, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if newChallenge && bWin { // 新关卡挑战通过 发放首通奖励
|
||||||
|
if code = this.module.DispenseRes(session, cfgHunting.Firstprize, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hunting.Boss[req.BossType] += 1
|
||||||
|
mapData["boss"] = hunting.Boss
|
||||||
|
|
||||||
|
}
|
||||||
|
for k := range hunting.Boss {
|
||||||
|
hunting.Boss[k] += 1
|
||||||
|
}
|
||||||
|
mapData["challengeTime"] = hunting.BossTime
|
||||||
|
code = this.module.ModifyHuntingData(session.GetUserId(), mapData)
|
||||||
|
session.SendMsg(string(this.module.GetType()), HuntingChallengeOverResp, &pb.HuntingChallengeOverResp{Data: hunting})
|
||||||
|
|
||||||
|
// 随机任务统计
|
||||||
|
this.module.ModuleRtask.SendToRtask(session, comm.Rtype81, req.Difficulty, req.BossType)
|
||||||
|
this.module.ModuleRtask.SendToRtask(session, comm.Rtype82, req.BossType)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
95
modules/enchant/api_getlist.go
Normal file
95
modules/enchant/api_getlist.go
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/configure"
|
||||||
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
"go_dreamfactory/utils"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
//参数校验
|
||||||
|
func (this *apiComp) GetListCheck(session comm.IUserSession, req *pb.HuntingGetListReq) (code pb.ErrorCode) {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *apiComp) GetList(session comm.IUserSession, req *pb.HuntingGetListReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
var (
|
||||||
|
mapData map[string]interface{}
|
||||||
|
curCount int32
|
||||||
|
)
|
||||||
|
mapData = make(map[string]interface{}, 0)
|
||||||
|
code = this.GetListCheck(session, req)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return // 参数校验失败直接返回
|
||||||
|
}
|
||||||
|
|
||||||
|
list, err := this.module.modelHunting.getHuntingList(session.GetUserId())
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 校验 是不是当天
|
||||||
|
if !utils.IsToday(list.CTime) {
|
||||||
|
list.CTime = configure.Now().Unix()
|
||||||
|
list.BuyCount = 0
|
||||||
|
mapData["cTime"] = list.CTime
|
||||||
|
mapData["buyCount"] = list.BuyCount
|
||||||
|
|
||||||
|
}
|
||||||
|
// 检查恢复时间
|
||||||
|
conf := this.module.configure.GetGlobalConf()
|
||||||
|
if conf == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
costRes := conf.HuntingCos
|
||||||
|
if costRes == nil {
|
||||||
|
code = pb.ErrorCode_ConfigNoFound
|
||||||
|
return
|
||||||
|
}
|
||||||
|
amount := int32(this.module.ModuleItems.QueryItemAmount(session.GetUserId(), costRes.T)) // 获取当前数量
|
||||||
|
curCount = amount
|
||||||
|
if amount < conf.HuntingNum {
|
||||||
|
if list.RecoveryTime == 0 {
|
||||||
|
list.RecoveryTime = configure.Now().Unix()
|
||||||
|
}
|
||||||
|
for { // 计算恢复时间
|
||||||
|
if list.RecoveryTime+int64(conf.HuntingRecovery*60) <= configure.Now().Unix() {
|
||||||
|
curCount++
|
||||||
|
list.RecoveryTime += int64(conf.HuntingRecovery * 60)
|
||||||
|
if curCount >= conf.HuntingNum {
|
||||||
|
list.RecoveryTime = 0
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addCount := curCount - amount
|
||||||
|
if addCount > 0 {
|
||||||
|
res := &cfg.Gameatn{
|
||||||
|
A: "item",
|
||||||
|
T: costRes.T,
|
||||||
|
N: addCount,
|
||||||
|
}
|
||||||
|
if code = this.module.DispenseRes(session, []*cfg.Gameatn{res}, true); code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
list.RecoveryTime = 0
|
||||||
|
}
|
||||||
|
mapData["recoveryTime"] = list.RecoveryTime
|
||||||
|
code = this.module.ModifyHuntingData(session.GetUserId(), mapData) //修改内存信息
|
||||||
|
// 发送难度
|
||||||
|
for k := range list.Boss {
|
||||||
|
list.Boss[k] += 1
|
||||||
|
}
|
||||||
|
session.SendMsg(string(this.module.GetType()), HuntingGetListResp, &pb.HuntingGetListResp{Data: list})
|
||||||
|
return
|
||||||
|
}
|
59
modules/enchant/api_ranklist.go
Normal file
59
modules/enchant/api_ranklist.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/sys/redis/pipe"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
//参数校验
|
||||||
|
func (this *apiComp) RankListCheck(session comm.IUserSession, req *pb.HuntingRankListReq) (code pb.ErrorCode) {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *apiComp) RankList(session comm.IUserSession, req *pb.HuntingRankListReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
var (
|
||||||
|
szRank []*pb.DBHuntingRank
|
||||||
|
rd *redis.StringSliceCmd
|
||||||
|
)
|
||||||
|
code = this.RankListCheck(session, req)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return // 参数校验失败直接返回
|
||||||
|
}
|
||||||
|
if !req.Friend {
|
||||||
|
var (
|
||||||
|
pipe *pipe.RedisPipe = this.module.modelHunting.Redis.RedisPipe(context.TODO())
|
||||||
|
)
|
||||||
|
rd = pipe.ZRange("huntingRank"+strconv.Itoa(int(req.BoosType)), 0, -1)
|
||||||
|
|
||||||
|
if _, err := pipe.Exec(); err != nil {
|
||||||
|
this.module.Errorln(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_dataList := rd.Val()
|
||||||
|
for _, v := range _dataList {
|
||||||
|
result := &pb.DBHuntingRank{}
|
||||||
|
if err := this.module.modulerank.GetListObj(session.GetUserId(), v, result); err == nil {
|
||||||
|
szRank = append(szRank, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uids := this.friend.GetFriendList(session.GetUserId())
|
||||||
|
for _, id := range uids {
|
||||||
|
rankData := this.module.modulerank.getHuntingRankListByBossType(id, req.BoosType)
|
||||||
|
if rankData != nil {
|
||||||
|
szRank = append(szRank, rankData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
session.SendMsg(string(this.module.GetType()), HuntingRankListResp, &pb.HuntingRankListResp{Ranks: szRank})
|
||||||
|
return
|
||||||
|
}
|
112
modules/enchant/comp_configure.go
Normal file
112
modules/enchant/comp_configure.go
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/lego/sys/log"
|
||||||
|
"go_dreamfactory/modules"
|
||||||
|
"go_dreamfactory/sys/configure"
|
||||||
|
cfg "go_dreamfactory/sys/configure/structs"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
game_huntingboss = "game_huntingboss.json"
|
||||||
|
game_challenge = "game_huntingchallenge.json"
|
||||||
|
)
|
||||||
|
|
||||||
|
///配置管理基础组件
|
||||||
|
type configureComp struct {
|
||||||
|
hlock sync.RWMutex
|
||||||
|
modules.MCompConfigure
|
||||||
|
_huntingMap map[int64]*cfg.GameHuntingBossData
|
||||||
|
}
|
||||||
|
|
||||||
|
//组件初始化接口
|
||||||
|
func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
|
err = this.MCompConfigure.Init(service, module, comp, options)
|
||||||
|
|
||||||
|
this._huntingMap = make(map[int64]*cfg.GameHuntingBossData, 0)
|
||||||
|
configure.RegisterConfigure(game_huntingboss, cfg.NewGameHuntingBoss, func() {
|
||||||
|
if v, err := this.GetConfigure(game_huntingboss); err == nil {
|
||||||
|
if configure, ok := v.(*cfg.GameHuntingBoss); ok {
|
||||||
|
this.hlock.Lock()
|
||||||
|
defer this.hlock.Unlock()
|
||||||
|
for _, value := range configure.GetDataList() {
|
||||||
|
this._huntingMap[int64(value.Type<<16)+int64(value.Difficulty)] = value
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Errorf("get game_huntingboss conf err:%v", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
})
|
||||||
|
err = this.LoadConfigure(game_challenge, cfg.NewGameHuntingChallenge)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数: boss类型 难度
|
||||||
|
func (this *configureComp) GetHuntingBossConfigData(bossType int32, difficulty int32) (data *cfg.GameHuntingBossData) {
|
||||||
|
|
||||||
|
return this._huntingMap[int64(bossType<<16)+int64(difficulty)]
|
||||||
|
}
|
||||||
|
|
||||||
|
//加载多个配置文件
|
||||||
|
func (this *configureComp) LoadMultiConfigure(confs map[string]interface{}) (err error) {
|
||||||
|
for k, v := range confs {
|
||||||
|
err = configure.RegisterConfigure(k, v, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("配置文件:%s解析失败!", k)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//读取配置数据
|
||||||
|
func (this *configureComp) GetConfigure(name string) (v interface{}, err error) {
|
||||||
|
return configure.GetConfigure(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get boss Type
|
||||||
|
func (this *configureComp) GetHuntingBossTypeConfigData() (mapType map[int32]struct{}) {
|
||||||
|
|
||||||
|
mapType = make(map[int32]struct{}, 0)
|
||||||
|
if v, err := this.GetConfigure(game_huntingboss); err == nil {
|
||||||
|
if configure, ok := v.(*cfg.GameHuntingBoss); ok {
|
||||||
|
this.hlock.Lock()
|
||||||
|
defer this.hlock.Unlock()
|
||||||
|
for _, value := range configure.GetDataList() {
|
||||||
|
if _, ok := mapType[value.Type]; !ok {
|
||||||
|
mapType[value.Type] = struct{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *configureComp) GetBuyChallengeCount(index int32) (data *cfg.GameHuntingChallengeData) {
|
||||||
|
if v, err := this.GetConfigure(game_challenge); err == nil {
|
||||||
|
if configure, ok := v.(*cfg.GameHuntingChallenge); ok {
|
||||||
|
data = configure.Get(index)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Errorf("get game_challenge conf err:%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func (this *configureComp) GetMaxBuyChallengeCount() int32 {
|
||||||
|
if v, err := this.GetConfigure(game_challenge); err == nil {
|
||||||
|
if configure, ok := v.(*cfg.GameHuntingChallenge); ok {
|
||||||
|
return int32(len(configure.GetDataList()))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Errorf("get game_challenge conf err:%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
79
modules/enchant/model_hunting.go
Normal file
79
modules/enchant/model_hunting.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/lego/sys/mgo"
|
||||||
|
"go_dreamfactory/modules"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
|
"go.mongodb.org/mongo-driver/x/bsonx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type modelHunting struct {
|
||||||
|
modules.MCompModel
|
||||||
|
module *Hunting
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *modelHunting) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
|
this.TableName = string(comm.TableHunting)
|
||||||
|
err = this.MCompModel.Init(service, module, comp, options)
|
||||||
|
this.module = module.(*Hunting)
|
||||||
|
// uid 创建索引
|
||||||
|
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
|
||||||
|
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *modelHunting) modifyHuntingDataByObjId(uid string, data map[string]interface{}) error {
|
||||||
|
return this.Change(uid, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取列表信息
|
||||||
|
func (this *modelHunting) getHuntingList(uid string) (result *pb.DBHunting, err error) {
|
||||||
|
result = &pb.DBHunting{
|
||||||
|
Id: primitive.NewObjectID().Hex(),
|
||||||
|
Uid: uid,
|
||||||
|
Boss: make(map[int32]int32),
|
||||||
|
BossTime: make(map[string]int32),
|
||||||
|
}
|
||||||
|
if err = this.Get(uid, result); err != nil && mgo.MongodbNil != err {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if mgo.MongodbNil == err {
|
||||||
|
if len(result.Boss) == 0 {
|
||||||
|
_cfg := this.module.configure.GetHuntingBossTypeConfigData()
|
||||||
|
for k := range _cfg {
|
||||||
|
result.Boss[k] = 0
|
||||||
|
str := strconv.Itoa(int(k)) + "_1"
|
||||||
|
result.BossTime[str] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Add(uid, result)
|
||||||
|
}
|
||||||
|
err = nil
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 红点检测
|
||||||
|
func (this *modelHunting) checkReddot32(uid string) bool {
|
||||||
|
|
||||||
|
conf := this.module.configure.GetGlobalConf()
|
||||||
|
if conf == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
costRes := conf.HuntingCos
|
||||||
|
if costRes == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
amount := int32(this.module.ModuleItems.QueryItemAmount(uid, costRes.T)) // 获取当前数量
|
||||||
|
if amount > 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
82
modules/enchant/model_rank.go
Normal file
82
modules/enchant/model_rank.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/lego/sys/redis/pipe"
|
||||||
|
"go_dreamfactory/modules"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/db"
|
||||||
|
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ModelRank struct {
|
||||||
|
modules.MCompModel
|
||||||
|
moduleHunting *Hunting
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ModelRank) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
|
this.TableName = comm.TableHuntingRecord // 挑战记录
|
||||||
|
err = this.MCompModel.Init(service, module, comp, options)
|
||||||
|
this.moduleHunting = module.(*Hunting)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ModelRank) AddRankList(uId string, objId string, data *pb.DBHuntingRank) (err error) {
|
||||||
|
|
||||||
|
if err = this.AddList(uId, objId, data); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ModelRank) getHuntingRankList(uid string) []*pb.DBHuntingRank {
|
||||||
|
ranks := make([]*pb.DBHuntingRank, 0)
|
||||||
|
err := this.GetList(uid, &ranks)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return ranks
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ModelRank) getHuntingRankListByBossType(uid string, bossType int32) *pb.DBHuntingRank {
|
||||||
|
ranks := make([]*pb.DBHuntingRank, 0)
|
||||||
|
err := this.GetList(uid, &ranks)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, v := range ranks {
|
||||||
|
if v.Bosstype == bossType {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排行数据写跨服
|
||||||
|
func (this *ModelRank) SetRankListData(tableName string, score int32, uid string) {
|
||||||
|
if !db.IsCross() {
|
||||||
|
if conn, err := db.Cross(); err == nil {
|
||||||
|
var (
|
||||||
|
pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
|
||||||
|
menbers *redis.Z
|
||||||
|
)
|
||||||
|
|
||||||
|
menbers = &redis.Z{Score: float64(score), Member: uid}
|
||||||
|
|
||||||
|
if cmd := pipe.ZAdd(tableName, menbers); cmd != nil {
|
||||||
|
|
||||||
|
dock, err1 := cmd.Result()
|
||||||
|
if err1 != nil {
|
||||||
|
this.moduleHunting.Errorln(dock, err1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, err := pipe.Exec(); err != nil {
|
||||||
|
this.moduleHunting.Errorln(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
181
modules/enchant/module.go
Normal file
181
modules/enchant/module.go
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
package enchant
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/modules"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
"go_dreamfactory/sys/db"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Hunting struct {
|
||||||
|
modules.ModuleBase
|
||||||
|
modelHunting *modelHunting
|
||||||
|
api *apiComp
|
||||||
|
configure *configureComp
|
||||||
|
modulerank *ModelRank
|
||||||
|
battle comm.IBattle
|
||||||
|
service core.IService
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewModule() core.IModule {
|
||||||
|
return &Hunting{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Hunting) GetType() core.M_Modules {
|
||||||
|
return comm.ModuleHunting
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Hunting) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
||||||
|
err = this.ModuleBase.Init(service, module, options)
|
||||||
|
this.service = service
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Hunting) Start() (err error) {
|
||||||
|
err = this.ModuleBase.Start()
|
||||||
|
var module core.IModule
|
||||||
|
if module, err = this.service.GetModule(comm.ModuleBattle); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.battle = module.(comm.IBattle)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Hunting) OnInstallComp() {
|
||||||
|
this.ModuleBase.OnInstallComp()
|
||||||
|
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
|
||||||
|
this.modelHunting = this.RegisterComp(new(modelHunting)).(*modelHunting)
|
||||||
|
this.modulerank = this.RegisterComp(new(ModelRank)).(*ModelRank)
|
||||||
|
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接口信息
|
||||||
|
func (this *Hunting) ModifyHuntingData(uid string, data map[string]interface{}) (code pb.ErrorCode) {
|
||||||
|
err := this.modelHunting.modifyHuntingDataByObjId(uid, data)
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Hunting) CheckUserBaseHuntingInfo(uid string) (data []*pb.DBHuntingRank) {
|
||||||
|
list, err := this.modelHunting.getHuntingList(uid)
|
||||||
|
if err != nil {
|
||||||
|
for k := range list.Boss {
|
||||||
|
_d := this.modulerank.getHuntingRankListByBossType(uid, k)
|
||||||
|
if _d != nil {
|
||||||
|
data = append(data, _d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func (this *Hunting) CheckRank(uid string, boosID int32, difficulty int32, hunting *pb.DBHunting, report *pb.BattleReport) {
|
||||||
|
costTime := report.Costtime
|
||||||
|
key := strconv.Itoa(int(boosID)) + "_" + strconv.Itoa(int(difficulty))
|
||||||
|
|
||||||
|
if hunting.BossTime[key] > costTime || hunting.BossTime[key] == 0 && difficulty >= hunting.Boss[boosID] { // 刷新记录
|
||||||
|
hunting.BossTime[key] = costTime
|
||||||
|
szLine := make([]*pb.LineUp, 5)
|
||||||
|
Leadpos := 0
|
||||||
|
if report != nil && report.Info != nil && len(report.Info.Redflist) > 0 {
|
||||||
|
costTime = report.Costtime
|
||||||
|
Leadpos = int(report.Info.Redflist[0].Leadpos)
|
||||||
|
for i, v := range report.Info.Redflist[0].Team {
|
||||||
|
if v != nil {
|
||||||
|
szLine[i] = &pb.LineUp{
|
||||||
|
Cid: v.HeroID,
|
||||||
|
Star: v.Star,
|
||||||
|
Lv: v.Lv,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 写入排行榜
|
||||||
|
objID := ""
|
||||||
|
bFind := false
|
||||||
|
ranks := this.modulerank.getHuntingRankList(uid)
|
||||||
|
for _, v := range ranks {
|
||||||
|
if v.Bosstype == boosID {
|
||||||
|
mapRankData := make(map[string]interface{}, 0)
|
||||||
|
mapRankData["difficulty"] = difficulty
|
||||||
|
mapRankData["bosstype"] = boosID
|
||||||
|
mapRankData["Leadpos"] = Leadpos
|
||||||
|
mapRankData["line"] = szLine
|
||||||
|
mapRankData["costTime"] = costTime
|
||||||
|
conn_, _ := db.Cross()
|
||||||
|
dbModel := db.NewDBModel(comm.TableHuntingRank, time.Hour, conn_)
|
||||||
|
dbModel.ChangeList(uid, v.Id, mapRankData)
|
||||||
|
objID = v.Id
|
||||||
|
bFind = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !bFind {
|
||||||
|
userinfo := this.ModuleUser.GetUser(uid)
|
||||||
|
new := &pb.DBHuntingRank{
|
||||||
|
Id: primitive.NewObjectID().Hex(),
|
||||||
|
Uid: uid,
|
||||||
|
Difficulty: difficulty,
|
||||||
|
Bosstype: boosID,
|
||||||
|
Nickname: userinfo.Name,
|
||||||
|
Icon: "",
|
||||||
|
Lv: userinfo.Lv,
|
||||||
|
Leadpos: int32(Leadpos),
|
||||||
|
Line: szLine,
|
||||||
|
CostTime: costTime,
|
||||||
|
}
|
||||||
|
objID = new.Id
|
||||||
|
conn_, _ := db.Cross()
|
||||||
|
dbModel := db.NewDBModel(comm.TableHuntingRank, time.Hour, conn_)
|
||||||
|
dbModel.AddList(uid, new.Id, new)
|
||||||
|
}
|
||||||
|
this.modulerank.SetRankListData("huntingRank"+strconv.Itoa(int(boosID)), difficulty<<16+costTime, objID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//红点查询
|
||||||
|
func (this *Hunting) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]bool) {
|
||||||
|
reddot = make(map[comm.ReddotType]bool)
|
||||||
|
for _, v := range rid {
|
||||||
|
switch v {
|
||||||
|
case comm.Reddot32:
|
||||||
|
reddot[comm.Reddot32] = this.modelHunting.checkReddot32(session.GetUserId())
|
||||||
|
break
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解锁远征所有难度
|
||||||
|
func (this *Hunting) CompleteAllLevel(session comm.IUserSession) (code pb.ErrorCode) {
|
||||||
|
list, err := this.modelHunting.getHuntingList(session.GetUserId())
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mapData := make(map[string]interface{}, 0)
|
||||||
|
// 查配置获取每个Boss的最大难度
|
||||||
|
for k := range list.Boss {
|
||||||
|
for i := 1; ; i++ {
|
||||||
|
conf := this.configure.GetHuntingBossConfigData(k, int32(i))
|
||||||
|
if conf == nil {
|
||||||
|
list.Boss[k] = int32(i - 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mapData["boss"] = list.Boss
|
||||||
|
code = this.ModifyHuntingData(session.GetUserId(), mapData)
|
||||||
|
for k := range list.Boss {
|
||||||
|
list.Boss[k] += 1
|
||||||
|
}
|
||||||
|
session.SendMsg(string(this.GetType()), HuntingGetListResp, &pb.HuntingGetListResp{Data: list})
|
||||||
|
return
|
||||||
|
}
|
42
sys/configure/structs/Game.EnchantBoss.go
Normal file
42
sys/configure/structs/Game.EnchantBoss.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
package cfg
|
||||||
|
|
||||||
|
type GameEnchantBoss struct {
|
||||||
|
_dataMap map[int32]*GameEnchantBossData
|
||||||
|
_dataList []*GameEnchantBossData
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGameEnchantBoss(_buf []map[string]interface{}) (*GameEnchantBoss, error) {
|
||||||
|
_dataList := make([]*GameEnchantBossData, 0, len(_buf))
|
||||||
|
dataMap := make(map[int32]*GameEnchantBossData)
|
||||||
|
for _, _ele_ := range _buf {
|
||||||
|
if _v, err2 := DeserializeGameEnchantBossData(_ele_); err2 != nil {
|
||||||
|
return nil, err2
|
||||||
|
} else {
|
||||||
|
_dataList = append(_dataList, _v)
|
||||||
|
dataMap[_v.Id] = _v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &GameEnchantBoss{_dataList:_dataList, _dataMap:dataMap}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantBoss) GetDataMap() map[int32]*GameEnchantBossData {
|
||||||
|
return table._dataMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantBoss) GetDataList() []*GameEnchantBossData {
|
||||||
|
return table._dataList
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantBoss) Get(key int32) *GameEnchantBossData {
|
||||||
|
return table._dataMap[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
143
sys/configure/structs/Game.EnchantBossData.go
Normal file
143
sys/configure/structs/Game.EnchantBossData.go
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
package cfg
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
type GameEnchantBossData struct {
|
||||||
|
Id int32
|
||||||
|
Bossid int32
|
||||||
|
Name string
|
||||||
|
Grade string
|
||||||
|
ScoreLow int32
|
||||||
|
ScoreUp int32
|
||||||
|
RewardDrop []int32
|
||||||
|
Dropshow1 []*Gameatn
|
||||||
|
Dropshow2 []*Gameatn
|
||||||
|
Dropshow3 []*Gameatn
|
||||||
|
Dropshow []int32
|
||||||
|
Bossmodel int32
|
||||||
|
MainText string
|
||||||
|
StrategyText string
|
||||||
|
BossSkill int32
|
||||||
|
Boss []int32
|
||||||
|
}
|
||||||
|
|
||||||
|
const TypeId_GameEnchantBossData = -287548876
|
||||||
|
|
||||||
|
func (*GameEnchantBossData) GetTypeId() int32 {
|
||||||
|
return -287548876
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_v *GameEnchantBossData)Deserialize(_buf map[string]interface{}) (err error) {
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bossid"].(float64); !_ok_ { err = errors.New("bossid error"); return }; _v.Bossid = int32(_tempNum_) }
|
||||||
|
{var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["name"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Name error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Name, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
|
||||||
|
{ var _ok_ bool; if _v.Grade, _ok_ = _buf["grade"].(string); !_ok_ { err = errors.New("grade error"); return } }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["score_low"].(float64); !_ok_ { err = errors.New("score_low error"); return }; _v.ScoreLow = int32(_tempNum_) }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["score_up"].(float64); !_ok_ { err = errors.New("score_up error"); return }; _v.ScoreUp = int32(_tempNum_) }
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["reward_drop"].([]interface{}); !_ok_ { err = errors.New("reward_drop error"); return }
|
||||||
|
|
||||||
|
_v.RewardDrop = make([]int32, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ int32
|
||||||
|
{ var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
|
||||||
|
_v.RewardDrop = append(_v.RewardDrop, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["dropshow1"].([]interface{}); !_ok_ { err = errors.New("dropshow1 error"); return }
|
||||||
|
|
||||||
|
_v.Dropshow1 = make([]*Gameatn, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ *Gameatn
|
||||||
|
{ var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
|
||||||
|
_v.Dropshow1 = append(_v.Dropshow1, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["dropshow2"].([]interface{}); !_ok_ { err = errors.New("dropshow2 error"); return }
|
||||||
|
|
||||||
|
_v.Dropshow2 = make([]*Gameatn, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ *Gameatn
|
||||||
|
{ var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
|
||||||
|
_v.Dropshow2 = append(_v.Dropshow2, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["dropshow3"].([]interface{}); !_ok_ { err = errors.New("dropshow3 error"); return }
|
||||||
|
|
||||||
|
_v.Dropshow3 = make([]*Gameatn, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ *Gameatn
|
||||||
|
{ var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
|
||||||
|
_v.Dropshow3 = append(_v.Dropshow3, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["dropshow"].([]interface{}); !_ok_ { err = errors.New("dropshow error"); return }
|
||||||
|
|
||||||
|
_v.Dropshow = make([]int32, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ int32
|
||||||
|
{ var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
|
||||||
|
_v.Dropshow = append(_v.Dropshow, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["bossmodel"].(float64); !_ok_ { err = errors.New("bossmodel error"); return }; _v.Bossmodel = int32(_tempNum_) }
|
||||||
|
{var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["main_text"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.MainText error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.MainText, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
|
||||||
|
{var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["strategy_text"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.StrategyText error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.StrategyText, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } }
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["boss_skill"].(float64); !_ok_ { err = errors.New("boss_skill error"); return }; _v.BossSkill = int32(_tempNum_) }
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["boss"].([]interface{}); !_ok_ { err = errors.New("boss error"); return }
|
||||||
|
|
||||||
|
_v.Boss = make([]int32, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ int32
|
||||||
|
{ var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
|
||||||
|
_v.Boss = append(_v.Boss, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeserializeGameEnchantBossData(_buf map[string]interface{}) (*GameEnchantBossData, error) {
|
||||||
|
v := &GameEnchantBossData{}
|
||||||
|
if err := v.Deserialize(_buf); err == nil {
|
||||||
|
return v, nil
|
||||||
|
} else {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
42
sys/configure/structs/Game.EnchantShop.go
Normal file
42
sys/configure/structs/Game.EnchantShop.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
package cfg
|
||||||
|
|
||||||
|
type GameEnchantShop struct {
|
||||||
|
_dataMap map[int32]*GameEnchantShopData
|
||||||
|
_dataList []*GameEnchantShopData
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGameEnchantShop(_buf []map[string]interface{}) (*GameEnchantShop, error) {
|
||||||
|
_dataList := make([]*GameEnchantShopData, 0, len(_buf))
|
||||||
|
dataMap := make(map[int32]*GameEnchantShopData)
|
||||||
|
for _, _ele_ := range _buf {
|
||||||
|
if _v, err2 := DeserializeGameEnchantShopData(_ele_); err2 != nil {
|
||||||
|
return nil, err2
|
||||||
|
} else {
|
||||||
|
_dataList = append(_dataList, _v)
|
||||||
|
dataMap[_v.Buynum] = _v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &GameEnchantShop{_dataList:_dataList, _dataMap:dataMap}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantShop) GetDataMap() map[int32]*GameEnchantShopData {
|
||||||
|
return table._dataMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantShop) GetDataList() []*GameEnchantShopData {
|
||||||
|
return table._dataList
|
||||||
|
}
|
||||||
|
|
||||||
|
func (table *GameEnchantShop) Get(key int32) *GameEnchantShopData {
|
||||||
|
return table._dataMap[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
50
sys/configure/structs/Game.EnchantShopData.go
Normal file
50
sys/configure/structs/Game.EnchantShopData.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
package cfg
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
type GameEnchantShopData struct {
|
||||||
|
Buynum int32
|
||||||
|
Need []*Gameatn
|
||||||
|
}
|
||||||
|
|
||||||
|
const TypeId_GameEnchantShopData = 1535577405
|
||||||
|
|
||||||
|
func (*GameEnchantShopData) GetTypeId() int32 {
|
||||||
|
return 1535577405
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_v *GameEnchantShopData)Deserialize(_buf map[string]interface{}) (err error) {
|
||||||
|
{ var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["buynum"].(float64); !_ok_ { err = errors.New("buynum error"); return }; _v.Buynum = int32(_tempNum_) }
|
||||||
|
{
|
||||||
|
var _arr_ []interface{}
|
||||||
|
var _ok_ bool
|
||||||
|
if _arr_, _ok_ = _buf["need"].([]interface{}); !_ok_ { err = errors.New("need error"); return }
|
||||||
|
|
||||||
|
_v.Need = make([]*Gameatn, 0, len(_arr_))
|
||||||
|
|
||||||
|
for _, _e_ := range _arr_ {
|
||||||
|
var _list_v_ *Gameatn
|
||||||
|
{ var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } }
|
||||||
|
_v.Need = append(_v.Need, _list_v_)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeserializeGameEnchantShopData(_buf map[string]interface{}) (*GameEnchantShopData, error) {
|
||||||
|
v := &GameEnchantShopData{}
|
||||||
|
if err := v.Deserialize(_buf); err == nil {
|
||||||
|
return v, nil
|
||||||
|
} else {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user