go_dreamfactory/modules/smithy/module.go
2024-02-23 13:44:42 +08:00

344 lines
8.8 KiB
Go

/*
模块名:Smithy
描述:美食家模块
开发:梅雄风
*/
package smithy
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
cfg "go_dreamfactory/sys/configure/structs"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
)
var _ comm.ISmithy = (*Smithy)(nil)
type Smithy struct {
modules.ModuleBase
service base.IRPCXService
modelTrade *modelTrade
api *apiComp
configure *configureComp
modelStove *modelStove
modelAtlas *modelAtlas
modelTask *modelTask
reddot comm.IReddot
}
func NewModule() core.IModule {
return &Smithy{}
}
func (this *Smithy) GetType() core.M_Modules {
return comm.ModuleSmithy
}
func (this *Smithy) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
if err = this.ModuleBase.Init(service, module, options); err != nil {
return
}
this.service = service.(base.IRPCXService)
if module, err = this.service.GetModule(comm.ModuleReddot); err != nil {
return
}
this.reddot = module.(comm.IReddot)
return
}
func (this *Smithy) OnInstallComp() {
this.ModuleBase.OnInstallComp()
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
this.modelTrade = this.RegisterComp(new(modelTrade)).(*modelTrade)
this.modelStove = this.RegisterComp(new(modelStove)).(*modelStove)
this.modelAtlas = this.RegisterComp(new(modelAtlas)).(*modelAtlas)
this.modelTask = this.RegisterComp(new(modelTask)).(*modelTask)
}
func (this *Smithy) CheckActivateAtlasCollect(uid string, id string) {
atlasConf, err := this.configure.GetSmithyAtlasConf(id)
if err != nil || atlasConf.TypeId != 2 {
return
}
if this.IsCross() {
atlas := &pb.DBAtlas{}
if model, err := this.GetDBModelByUid(uid, this.modelAtlas.TableName); err == nil {
if err := model.Get(uid, atlas); err != nil { // 防止数据没有初始化情况
if mongo.ErrNoDocuments == err {
atlas.Id = primitive.NewObjectID().Hex()
atlas.Uid = uid
atlas.Atlas = make(map[string]*pb.ForgeList, 0)
atlas.Collect = make(map[string]*pb.CollectData, 0)
atlas.Award = 1 // 初始1级
atlas.Collect[id] = &pb.CollectData{
Id: id,
Score: atlasConf.AtlasScore,
Time: configure.Now().Unix(),
Activate: false,
}
update := make(map[string]interface{}, 0)
update["collect"] = atlas.Collect
if err := model.Add(uid, update); err != nil {
this.Errorf("err:%v", err)
}
return
} else {
this.Errorf("err:%v", err)
return
}
}
if _, ok := atlas.Collect[id]; !ok {
atlas.Collect[id] = &pb.CollectData{
Id: id,
Score: atlasConf.AtlasScore,
Time: configure.Now().Unix(),
Activate: false,
}
update := make(map[string]interface{}, 0)
update["collect"] = atlas.Collect
if err := model.Change(uid, update); err != nil {
this.Errorf("err:%v", err)
return
}
}
}
} else {
if list, err := this.modelAtlas.getSmithyAtlasList(uid); err == nil {
if _, ok := list.Collect[id]; !ok {
list.Collect[id] = &pb.CollectData{
Id: id,
Score: atlasConf.AtlasScore,
Time: configure.Now().Unix(),
Activate: false,
}
update := make(map[string]interface{}, 0)
update["collect"] = list.Collect
this.modelAtlas.modifySmithyAtlasList(uid, update) // 更新信息
return
}
}
}
return
}
func (this *Smithy) Reddot(session comm.IUserSession, rid map[comm.ReddotType]struct{}) (items map[comm.ReddotType]*pb.ReddotItem) {
var (
selfrid []comm.ReddotType = []comm.ReddotType{comm.Reddot6, comm.Reddot29101}
ok bool
)
items = make(map[comm.ReddotType]*pb.ReddotItem)
for _, v := range selfrid {
if _, ok = rid[v]; ok {
break
}
}
if ok {
return
}
for _, v := range selfrid {
if _, ok = rid[v]; ok {
switch v {
case comm.Reddot17102: // 铁匠铺手册台
items[comm.Reddot17102] = &pb.ReddotItem{
Rid: int32(comm.Reddot17102),
Activated: this.modelAtlas.checkReddot17102(session.GetUserId()),
}
break
case comm.Reddot17107: // 铁匠铺手册台收藏家奖励按钮上
items[comm.Reddot17107] = &pb.ReddotItem{
Rid: int32(comm.Reddot17107),
Activated: this.modelTask.checkReddot17107(session.GetUserId()),
}
break
case comm.Reddot17108: // 铁匠铺炉温恢复
items[comm.Reddot17108] = &pb.ReddotItem{
Rid: int32(comm.Reddot17108),
Nextchanagetime: this.modelStove.checkReddot17108(session.GetUserId()),
}
break
}
}
}
return
}
func (this *Smithy) BuriedsNotify(session comm.IUserSession, conds []*pb.ConIProgress) {
// this.Debug("铁匠铺任务通知", log.Field{Key: "uid", Value: session.GetUserId()}, log.Field{Key: "conds", Value: conds})
// confList, err := this.configure.GetSmithyTasks()
// if err != nil {
// this.Error(err.Error())
// return
// }
// condMap := make(map[int32]*pb.ConIProgress)
// for _, conf := range confList {
// for _, cond := range conds {
// if cond.Conid == conf.TypeId {
// condMap[conf.Key] = cond
// }
// }
// }
// update := make(map[string]interface{})
// dt, err := this.modelTask.getTaskRecord(session.GetUserId())
// if err != nil {
// if err == mongo.ErrNoDocuments {
// for k, v := range condMap {
// tt := &pb.TujianTask{
// TaskId: k,
// Cond: v,
// }
// if v.State == pb.BuriedItemFinishState_buried_finish {
// tt.Received = 1
// this.reddot.PushReddot(session, &pb.ReddotItem{
// Rid: int32(comm.Reddot17107),
// Activated: true,
// Nextchanagetime: 0,
// })
// }
// dt.Tasks = append(dt.Tasks, tt)
// if err := this.modelTask.Add(session.GetUserId(), dt); err != nil {
// this.Error(err.Error())
// return
// }
// return
// }
// } else {
// this.Error(err.Error())
// return
// }
// }
// if dt.Tasks == nil {
// for k, v := range condMap {
// tt := &pb.TujianTask{
// TaskId: k,
// Cond: v,
// }
// if v.State == pb.BuriedItemFinishState_buried_finish {
// tt.Received = 1
// }
// dt.Tasks = append(dt.Tasks, tt)
// }
// update["tasks"] = dt.Tasks
// if err := this.modelTask.Change(session.GetUserId(), update); err != nil {
// this.Error(err.Error())
// return
// }
// return
// }
// var newTask []*pb.TujianTask
// existTaskMap := make(map[int32]*pb.TujianTask)
// for _, task := range dt.Tasks {
// existTaskMap[task.TaskId] = task
// }
// for k, v := range condMap {
// if task, ok := existTaskMap[k]; ok {
// task.Cond = v
// if v.State == pb.BuriedItemFinishState_buried_finish {
// task.Received = 1
// }
// } else {
// nt := &pb.TujianTask{
// TaskId: k,
// Cond: v,
// }
// if v.State == pb.BuriedItemFinishState_buried_finish {
// nt.Received = 1
// }
// newTask = append(newTask, nt)
// }
// }
// dt.Tasks = append(dt.Tasks, newTask...)
// update["tasks"] = dt.Tasks
// if len(update) > 0 {
// if err := this.modelTask.Change(session.GetUserId(), update); err != nil {
// this.Error(err.Error())
// return
// }
// }
}
// gm 不管性能
func (this *Smithy) GmProficiency(uid string) {
stove, err := this.modelStove.getSmithyStoveList(uid)
if err != nil {
return
}
conf := this.configure.GmGetProficileData()
for k, v := range conf {
if c := this.configure.GetSmithyProficileData(k, v); c != nil {
stove.Data[k] = &pb.Mastery{
Lv: v,
Value: c.Proficiency,
}
}
}
update := make(map[string]interface{})
update["data"] = stove.Data
this.modelStove.updateSmithyStove(uid, update)
}
// gm 新增图鉴信息
func (this *Smithy) GmSmithyAtlas(session comm.IUserSession) {
var (
res []*cfg.Gameatn
szLibrary []string
)
conf := this.configure.GmGetAllAtlasConf()
for _, v := range conf {
if v.TypeId == 1 {
for _, v1 := range this.configure.GetAllEquipmentConfigure() {
if v1.AtlasId == v.Id {
res = append(res, &cfg.Gameatn{
A: "equi",
T: v1.Id,
N: 1,
})
break
}
}
} else if v.TypeId == 2 {
szLibrary = append(szLibrary, v.Id)
}
}
if errdata, atno := this.DispenseAtno(session, res, true); errdata == nil {
ids := make([]string, 0)
for _, v := range atno {
ids = append(ids, v.O)
}
if equip, errdata := this.ModuleEquipment.QueryEquipment(session.GetUserId(), ids...); errdata == nil {
this.modelAtlas.CheckActivateEquipAtlas(session.GetUserId(), equip, 1)
}
go this.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
this.WriteUserLog(session.GetUserId(), "gm", 0, "GmSmithyAtlas", atno)
})
}
if len(szLibrary) > 0 {
for _, v := range szLibrary {
this.CheckActivateAtlasCollect(session.GetUserId(), v)
}
}
}