151 lines
3.5 KiB
Go
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
|
|
}
|
|
}
|