go_dreamfactory/modules/passon/module.go
2023-11-07 20:42:08 +08:00

151 lines
3.5 KiB
Go

package passon
import (
"go_dreamfactory/comm"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sort"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
cfg "go_dreamfactory/sys/configure/structs"
)
const moduleName = "传功塔"
/*
模块名:PassOn
描述:传功系统
开发:李伟
*/
func NewModule() core.IModule {
m := new(Passon)
return m
}
type Passon struct {
modules.ModuleBase
api *apiComp
modelPasson *modelPasson
configure *Configure_Comp
service base.IRPCXService
}
func (this *Passon) GetType() core.M_Modules {
return comm.ModulePasson
}
func (this *Passon) OnInstallComp() {
this.ModuleBase.OnInstallComp()
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
this.modelPasson = this.RegisterComp(new(modelPasson)).(*modelPasson)
this.configure = this.RegisterComp(new(Configure_Comp)).(*Configure_Comp)
}
func (this *Passon) 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)
return
}
func (this *Passon) Start() (err error) {
if err = this.ModuleBase.Start(); err != nil {
return
}
return
}
// 英雄升级
func (this *Passon) HeroUpLv(session comm.IUserSession, heroid string, lv int32) {
var (
passon *pb.DBPasson
heros []*pb.DBHero
change map[string]bool = make(map[string]bool)
maxlv int32
errdata *pb.ErrorData
conf_i, conf_j *cfg.GameHeroData
err error
)
if passon, err = this.modelPasson.getUserPasson(session.GetUserId()); err != nil {
this.Error("getUserPasson err", log.Field{Key: "err", Value: err.Error()})
return
}
if lv <= passon.Passonlv {
return
}
for _, v := range passon.Teacher {
if v == heroid {
return
}
}
heros = this.ModuleHero.GetHeroList(session.GetUserId())
// 使用sort.Slice进行排序
sort.Slice(heros, func(i, j int) bool {
if heros[i].Lv != heros[j].Lv {
return heros[i].Lv > heros[j].Lv
} else {
if conf_i, err = this.ModuleTools.GetHeroConfig(heros[i].HeroID); err != nil {
this.Errorln(err)
return false
}
if conf_j, err = this.ModuleTools.GetHeroConfig(heros[j].HeroID); err != nil {
this.Errorln(err)
return true
}
return conf_i.Color > conf_j.Color
}
})
if len(heros) < 5 {
for i, v := range heros {
passon.Teacher[i] = v.Id
}
if err = this.modelPasson.updateUserPasson(session.GetUserId(), passon); err != nil {
this.Errorln(err)
return
}
return
}
maxlv = this.ModuleTools.GetGlobalConf().Passlvmax
for i := 0; i < 5; i++ {
if heros[i].Ispasson {
change[heros[i].Id] = false
for ii, v := range passon.Student {
if v.Heroid == heros[i].Id {
passon.Student[ii].State = 0
passon.Student[ii].Cdtime = 0
passon.Student[ii].Heroid = ""
}
}
}
passon.Teacher[i] = heros[i].Id
}
if len(change) > 0 {
if errdata = this.ModuleHero.PassonHero(session, change); errdata != nil {
this.Errorln(errdata)
return
}
}
if passon.Passonlv < maxlv && passon.Passonlv != heros[4].Lv {
passon.Passonlv = heros[4].Lv
if passon.Passonlv > maxlv {
passon.Passonlv = maxlv
}
this.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{
"passonlv": passon.Passonlv,
})
session.SendMsg(string(this.GetType()), "lvchange", &pb.PassonLvChangePush{Lv: passon.Passonlv})
}
if err = this.modelPasson.updateUserPasson(session.GetUserId(), passon); err != nil {
this.Errorln(err)
return
}
}