2025-06-07 18:31:00 +08:00
|
|
|
package logic
|
|
|
|
|
|
|
|
import (
|
|
|
|
"ecs/proto/pb"
|
2025-06-13 17:19:56 +08:00
|
|
|
"ecs/servers/game/data"
|
2025-06-14 11:51:06 +08:00
|
|
|
"github.com/oylshe1314/framework/util"
|
2025-06-07 18:31:00 +08:00
|
|
|
"sort"
|
|
|
|
)
|
|
|
|
|
|
|
|
type PlayerLineup struct {
|
|
|
|
Uid uint64 `json:"uid" key:"1"`
|
|
|
|
Name string `bson:"name"`
|
|
|
|
Active bool `bson:"active"`
|
2025-06-11 17:00:00 +08:00
|
|
|
Heroes [8]*PlayerLineupHero `bson:"heroes"`
|
|
|
|
Helper [8]uint64 `bson:"helper"`
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
func (this *PlayerLineup) BuildMsgLineup(deleted ...bool) *pb.Lineup {
|
|
|
|
if len(deleted) > 0 && deleted[0] {
|
|
|
|
return &pb.Lineup{Uid: this.Uid}
|
|
|
|
}
|
2025-06-07 18:31:00 +08:00
|
|
|
var msg = &pb.Lineup{Uid: this.Uid, Name: this.Name, Active: this.Active}
|
|
|
|
if this.Active {
|
|
|
|
msg.HeroList = make([]*pb.LineupHero, 8)
|
|
|
|
for i, hero := range this.Heroes {
|
|
|
|
if hero != nil {
|
|
|
|
msg.HeroList[i] = hero.BuildMsgLineupHero(uint32(i))
|
|
|
|
}
|
|
|
|
}
|
2025-06-11 17:00:00 +08:00
|
|
|
for _, helper := range this.Helper {
|
|
|
|
msg.HelpList = append(msg.HelpList, helper)
|
|
|
|
}
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
return msg
|
|
|
|
}
|
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
func (this *Player) SendLineupHeroChange(lineups ...*PlayerLineup) {
|
|
|
|
var heroChangeList []*pb.HeroChange
|
|
|
|
for _, lineup := range lineups {
|
|
|
|
if lineup == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, lineupHero := range lineup.Heroes {
|
|
|
|
if lineupHero == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if hero, ok := this.Hero[lineupHero.HeroUid]; ok {
|
|
|
|
if lineup.Active {
|
|
|
|
if this.updateHeroAttrs(hero, lineup, lineupHero) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if this.updateHeroAttrs(hero, nil, nil) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_ = this.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), pb.HeroChangeListAck{
|
|
|
|
ChangeList: heroChangeList,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2025-06-14 11:51:06 +08:00
|
|
|
func (this *Player) SendUpgradeMaster(masterType pb.UpgradeMasterType, preLevel, curLevel uint32, heroUid uint64) {
|
2025-06-13 17:19:56 +08:00
|
|
|
if heroUid == 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
var hero = this.Hero[heroUid]
|
|
|
|
if hero == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
var masterTables = this.manager.tables.UpgradeMaster.Find1(int(masterType))
|
|
|
|
if len(masterTables) == 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var preMasterTable, curMasterTable *data.UpgradeMaster
|
|
|
|
for _, v := range masterTables {
|
|
|
|
if uint32(v.NeedLevel) <= preLevel {
|
|
|
|
preMasterTable = v
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if uint32(v.NeedLevel) > curLevel {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
curMasterTable = v
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
if curMasterTable == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 11:51:06 +08:00
|
|
|
var lineup = util.MapFindValue(this.Lineup, func(v *PlayerLineup) bool {
|
|
|
|
return v.Active
|
|
|
|
})
|
2025-06-13 17:19:56 +08:00
|
|
|
if lineup == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 11:51:06 +08:00
|
|
|
var lineupHero = util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
2025-06-14 18:49:31 +08:00
|
|
|
return lineup.Heroes[i] != nil && lineup.Heroes[i].HeroUid == hero.Uid
|
2025-06-14 11:51:06 +08:00
|
|
|
})
|
2025-06-13 17:19:56 +08:00
|
|
|
if lineupHero == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var ack *pb.UpgradeMasterAck
|
|
|
|
switch masterType {
|
|
|
|
case pb.UpgradeMasterType_MasterEquipUpgrade, pb.UpgradeMasterType_MasterEquipRefine:
|
|
|
|
for _, equipUid := range lineupHero.Equip {
|
|
|
|
var equip = this.Equip[equipUid]
|
|
|
|
if equip == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if masterType == pb.UpgradeMasterType_MasterEquipUpgrade {
|
|
|
|
if equip.Level < uint32(curMasterTable.NeedLevel) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if equip.RefineLevel < uint32(curMasterTable.NeedLevel) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ack = &pb.UpgradeMasterAck{
|
|
|
|
CurLevel: uint32(curMasterTable.Level),
|
|
|
|
}
|
|
|
|
case pb.UpgradeMasterType_MasterTreasureUpgrade, pb.UpgradeMasterType_MasterTreasureRefine:
|
|
|
|
for _, treasureUid := range lineupHero.Treasure {
|
|
|
|
var treasure = this.Treasure[treasureUid]
|
|
|
|
if treasure == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if masterType == pb.UpgradeMasterType_MasterTreasureUpgrade {
|
|
|
|
if treasure.Level < uint32(curMasterTable.NeedLevel) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if treasure.RefineLevel < uint32(curMasterTable.NeedLevel) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ack = &pb.UpgradeMasterAck{
|
|
|
|
CurLevel: uint32(curMasterTable.Level),
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if preMasterTable != nil {
|
|
|
|
ack.PreLevel = uint32(preMasterTable.Level)
|
|
|
|
}
|
|
|
|
|
|
|
|
_ = this.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleUpgradeMaster), ack)
|
2025-06-14 18:49:31 +08:00
|
|
|
|
|
|
|
if this.updateHeroAttrs(hero, lineup, lineupHero) {
|
|
|
|
_ = this.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), pb.HeroChangeListAck{
|
|
|
|
ChangeList: []*pb.HeroChange{{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()}},
|
|
|
|
})
|
|
|
|
}
|
2025-06-13 17:19:56 +08:00
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *Player) BuildMsgLineupListAck() *pb.LineupListAck {
|
|
|
|
var list []*pb.Lineup
|
|
|
|
for _, lineup := range this.Lineup {
|
|
|
|
list = append(list, lineup.BuildMsgLineup())
|
|
|
|
}
|
|
|
|
sort.Slice(list, func(i, j int) bool {
|
|
|
|
return list[i].Uid < list[j].Uid
|
|
|
|
})
|
|
|
|
return &pb.LineupListAck{LineupList: list}
|
|
|
|
}
|