2025-06-04 18:17:39 +08:00
|
|
|
package handler
|
|
|
|
|
2025-06-06 18:31:44 +08:00
|
|
|
import (
|
|
|
|
"ecs/proto"
|
|
|
|
"ecs/proto/pb"
|
|
|
|
"ecs/servers/game/logic"
|
|
|
|
"github.com/oylshe1314/framework/net"
|
2025-06-07 18:31:00 +08:00
|
|
|
"github.com/oylshe1314/framework/util"
|
2025-06-14 18:49:31 +08:00
|
|
|
"sort"
|
2025-06-06 18:31:44 +08:00
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (this *PlayerHandler) RoleChangeLanguage(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.RoleChangeLanguageReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if player.Language != req.Language {
|
|
|
|
player.Language = req.Language
|
|
|
|
player.SaveField("language", player.Language)
|
|
|
|
}
|
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleChangeLanguage), &pb.RoleChangeLanguageAck{Language: player.Language})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) RoleChangeName(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.RoleChangeRoleNameReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var roleName = strings.TrimSpace(req.RoleName)
|
|
|
|
|
|
|
|
if roleName == "" {
|
|
|
|
this.logger.Error("Parameter error, req.Name == \"\"")
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if roleName != player.RoleName {
|
|
|
|
//if !this.tables.WordBanExtend.Check(roleName) {
|
|
|
|
// this.logger.Error("Illegal role name, roleName: ", roleName)
|
|
|
|
// _ = player.TipNotice(proto.ErrIllegalRoleName)
|
|
|
|
// return
|
|
|
|
//}
|
|
|
|
|
|
|
|
existing, err := this.playerManager.ExistsRoleName(roleName)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Check role name exist failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipServerError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if existing {
|
|
|
|
this.logger.Error("Role name already exists, roleName: ", roleName)
|
|
|
|
_ = player.TipNotice(proto.TipExistedRoleName)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
player.RoleName = roleName
|
|
|
|
player.SaveField("role_name", player.RoleName)
|
|
|
|
}
|
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleChangeRoleName), &pb.RoleChangeRoleNameAck{RoleName: player.RoleName})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) RolePropertyChange(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.RolePropertyChangeReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
switch req.Property.Type {
|
2025-06-09 18:33:52 +08:00
|
|
|
case pb.RolePropertyType_AvatarFrame,
|
|
|
|
pb.RolePropertyType_ChatBubble,
|
|
|
|
pb.RolePropertyType_NamePrefix,
|
|
|
|
pb.RolePropertyType_NameTitle,
|
|
|
|
pb.RolePropertyType_RoleTitle:
|
|
|
|
player.ChangeProperty(util.NewPair(req.Property.Type, req.Property.Value))
|
2025-06-06 18:31:44 +08:00
|
|
|
default:
|
2025-06-09 18:33:52 +08:00
|
|
|
this.logger.Error("Parameter error, req.Property.Type: ", req.Property.Type)
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *PlayerHandler) LineupHeroChange(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupHeroChangeReq)
|
2025-06-06 18:31:44 +08:00
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if req.LineupUid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.LineupUid: ", req.LineupUid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
if req.Index >= 8 {
|
|
|
|
this.logger.Error("Parameter error, req.Index: ", req.Index)
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.HeroUid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.HeroUid: ", req.HeroUid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
if !player.CheckFunctionOpen(pb.ModId_ModuleRole, pb.FuncType_FuncLineupHeroes, int(req.Index)) {
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipFunctionNotUnlocked)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineup = player.Lineup[req.LineupUid]
|
|
|
|
if lineup == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup not found, req.LineupUid: ", req.LineupUid)
|
2025-06-09 18:33:52 +08:00
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-06 18:31:44 +08:00
|
|
|
var hero = player.Hero[req.HeroUid]
|
|
|
|
if hero == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup not found, req.LineupUid: ", req.LineupUid)
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipHeroNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var setups [7]bool
|
|
|
|
for i := 0; i < 8; i++ {
|
2025-06-14 11:51:06 +08:00
|
|
|
if lineup.Heroes[i] == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if hero.Uid == lineup.Heroes[i].HeroUid {
|
2025-06-09 18:33:52 +08:00
|
|
|
this.logger.Errorf("The hero has set into the lineup, hero.Uid: %d, index: %d", hero.Uid, i)
|
|
|
|
_ = player.TipNotice(proto.TipLineupHeroHasSet)
|
|
|
|
return
|
|
|
|
}
|
2025-06-14 11:51:06 +08:00
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if i < 6 {
|
|
|
|
if lineup.Heroes[i].Position > 0 {
|
|
|
|
setups[lineup.Heroes[i].Position] = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
var heroChangeList []*pb.HeroChange
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineupHero = lineup.Heroes[req.Index]
|
|
|
|
if lineupHero == nil {
|
|
|
|
lineupHero = &logic.PlayerLineupHero{
|
2025-06-06 18:31:44 +08:00
|
|
|
HeroUid: hero.Uid,
|
|
|
|
}
|
2025-06-09 18:33:52 +08:00
|
|
|
|
|
|
|
for position := 1; position < 7; position++ {
|
|
|
|
if !setups[position] {
|
|
|
|
lineupHero.Position = uint32(position)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
lineup.Heroes[req.Index] = lineupHero
|
2025-06-06 18:31:44 +08:00
|
|
|
} else {
|
2025-06-13 17:19:56 +08:00
|
|
|
var preHero = player.Hero[lineupHero.HeroUid]
|
|
|
|
if preHero != nil {
|
|
|
|
preHero.InLineup = false
|
|
|
|
player.SaveModel(preHero)
|
|
|
|
player.UpdateHeroAttrs(preHero)
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: preHero.BuildMsgHero()})
|
|
|
|
}
|
2025-06-09 18:33:52 +08:00
|
|
|
lineupHero.HeroUid = hero.Uid
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
player.SaveArray("lineup.heroes", int(req.Index), lineupHero)
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
hero.InLineup = true
|
|
|
|
player.SaveModel(hero)
|
2025-06-06 18:31:44 +08:00
|
|
|
player.UpdateHeroAttrs(hero)
|
2025-06-13 17:19:56 +08:00
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()})
|
2025-06-09 18:33:52 +08:00
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
//TODO lineup hero capacity
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
2025-06-09 18:33:52 +08:00
|
|
|
})
|
2025-06-13 17:19:56 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), &pb.HeroChangeListAck{
|
|
|
|
ChangeList: heroChangeList,
|
|
|
|
})
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupHeroPosition(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupHeroPositionReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if len(req.PositionList) != 6 {
|
|
|
|
this.logger.Errorf("Parameter error, len(req.IndexList) != 6, len(req.IndexList) = %d", len(req.PositionList))
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
2025-06-07 18:31:00 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineup = player.Lineup[req.LineupUid]
|
|
|
|
if lineup == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup not found, req.LineupUid: ", req.LineupUid)
|
2025-06-09 18:33:52 +08:00
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var setups [7]bool
|
|
|
|
for i := range req.PositionList {
|
|
|
|
if req.PositionList[i] < 1 || req.PositionList[i] > 6 {
|
|
|
|
this.logger.Errorf("Parameter error, req.PositionList[%d]: %d", i, req.PositionList[i])
|
2025-06-07 18:31:00 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-09 18:33:52 +08:00
|
|
|
|
|
|
|
if setups[req.PositionList[i]] {
|
|
|
|
this.logger.Errorf("Parameter error, repeated hero battle position, position: %d, index: %d", req.PositionList[i], i)
|
2025-06-07 18:31:00 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-09 18:33:52 +08:00
|
|
|
|
|
|
|
setups[req.PositionList[i]] = true
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
|
2025-06-14 11:51:06 +08:00
|
|
|
for i := range 6 {
|
|
|
|
if lineup.Heroes[i] != nil {
|
|
|
|
lineup.Heroes[i].Position = req.PositionList[i]
|
2025-06-09 18:33:52 +08:00
|
|
|
}
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
player.SaveField("lineup.heroes", lineup.Heroes)
|
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
|
|
|
})
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupHeroEquipReq)
|
2025-06-06 18:31:44 +08:00
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if req.LineupUid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.LineupUid: ", req.LineupUid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
if req.Index >= 8 {
|
|
|
|
this.logger.Error("Parameter error, req.Index: ", req.Index)
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.EquipType < pb.EquipType_Weapon || req.EquipType > pb.EquipType_Shoe {
|
|
|
|
this.logger.Error("Parameter error, req.EquipType: ", req.EquipType)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
if !player.CheckFunctionOpen(pb.ModId_ModuleRole, 1, int(req.Index)) {
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipFunctionNotUnlocked)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineup = player.Lineup[req.LineupUid]
|
|
|
|
if lineup == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup not found, req.LineupUid: ", req.LineupUid)
|
2025-06-09 18:33:52 +08:00
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineupHero = lineup.Heroes[req.Index]
|
|
|
|
if lineupHero == nil {
|
|
|
|
_ = player.TipNotice(proto.TipLineupHeroNotSet)
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-06 18:49:30 +08:00
|
|
|
var equip *logic.PlayerEquip
|
|
|
|
if req.EquipUid != 0 {
|
|
|
|
equip = player.Equip[req.EquipUid]
|
|
|
|
if equip == nil {
|
|
|
|
_ = player.TipNotice(proto.TipEquipNotFound)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
var equipTable = this.tables.Equip.Find1(int(equip.Id))
|
2025-06-06 18:49:30 +08:00
|
|
|
if equipTable == nil {
|
|
|
|
_ = player.TipNotice(proto.TipDataTablesError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-06 18:49:30 +08:00
|
|
|
if req.EquipType != pb.EquipType(equipTable.Type) {
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineupHeroList []*pb.LineupHero
|
2025-06-14 18:49:31 +08:00
|
|
|
var heroChangeList []*pb.HeroChange
|
2025-06-06 18:31:44 +08:00
|
|
|
var equipChangeList []*pb.EquipChange
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if lineupHero.Equip[req.EquipType] != 0 {
|
|
|
|
var preEquip = player.Equip[lineupHero.Equip[req.EquipType]]
|
2025-06-06 18:49:30 +08:00
|
|
|
if preEquip != nil && preEquip.HeroUid != 0 {
|
|
|
|
preEquip.HeroUid = 0
|
|
|
|
player.SaveModel(preEquip)
|
2025-06-06 18:31:44 +08:00
|
|
|
equipChangeList = append(equipChangeList, &pb.EquipChange{
|
|
|
|
ChangeType: pb.ChangeType_Changed,
|
2025-06-06 18:49:30 +08:00
|
|
|
Equip: preEquip.BuildMsgEquip(),
|
2025-06-06 18:31:44 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
lineupHero.Equip[req.EquipType] = req.EquipUid
|
|
|
|
player.SaveArray("lineup.heroes", int(req.Index), lineupHero)
|
|
|
|
lineupHeroList = append(lineupHeroList, lineupHero.BuildMsgLineupHero(req.Index))
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
if hero, ok := player.Hero[lineupHero.HeroUid]; ok {
|
|
|
|
if player.UpdateHeroAttrs(hero) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-06 18:49:30 +08:00
|
|
|
if equip != nil {
|
|
|
|
if equip.HeroUid != 0 {
|
2025-06-14 11:51:06 +08:00
|
|
|
util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
|
|
|
if lineup.Heroes[i] == nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if lineup.Heroes[i].HeroUid == equip.HeroUid {
|
|
|
|
var preLineupHero = lineup.Heroes[i]
|
|
|
|
if preLineupHero.Equip[req.EquipType] != 0 {
|
|
|
|
preLineupHero.Equip[req.EquipType] = 0
|
|
|
|
player.SaveArray("lineup.heroes", i, preLineupHero)
|
|
|
|
lineupHeroList = append(lineupHeroList, preLineupHero.BuildMsgLineupHero(uint32(i)))
|
2025-06-14 18:49:31 +08:00
|
|
|
if preHero, ok := player.Hero[preLineupHero.HeroUid]; ok {
|
|
|
|
if player.UpdateHeroAttrs(preHero) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: preHero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
}
|
2025-06-06 18:49:30 +08:00
|
|
|
}
|
2025-06-14 11:51:06 +08:00
|
|
|
return true
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
2025-06-14 11:51:06 +08:00
|
|
|
return false
|
|
|
|
})
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
equip.HeroUid = lineupHero.HeroUid
|
2025-06-06 18:49:30 +08:00
|
|
|
player.SaveModel(equip)
|
|
|
|
equipChangeList = append(equipChangeList, &pb.EquipChange{
|
|
|
|
ChangeType: pb.ChangeType_Changed,
|
|
|
|
Equip: equip.BuildMsgEquip(),
|
|
|
|
})
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
|
|
|
})
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), &pb.EquipChangeListAck{ChangeList: equipChangeList})
|
2025-06-14 18:49:31 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), &pb.HeroChangeListAck{ChangeList: heroChangeList})
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *PlayerHandler) LineupHeroTreasure(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupHeroTreasureReq)
|
2025-06-06 18:31:44 +08:00
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if req.LineupUid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.LineupUid: ", req.LineupUid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
if req.Index >= 8 {
|
|
|
|
this.logger.Error("Parameter error, req.Index: ", req.Index)
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.TreasureType < pb.TreasureType_WarBook || req.TreasureType > pb.TreasureType_WarToken {
|
|
|
|
this.logger.Error("Parameter error, req.TreasureType: ", req.TreasureType)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
if !player.CheckFunctionOpen(pb.ModId_ModuleRole, pb.FuncType_FuncLineupHeroes, int(req.Index)) {
|
2025-06-06 18:31:44 +08:00
|
|
|
_ = player.TipNotice(proto.TipFunctionNotUnlocked)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineup = player.Lineup[req.LineupUid]
|
|
|
|
if lineup == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup not found, req.LineupUid: ", req.LineupUid)
|
2025-06-09 18:33:52 +08:00
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineupHero = lineup.Heroes[req.Index]
|
|
|
|
if lineupHero == nil {
|
|
|
|
_ = player.TipNotice(proto.TipLineupHeroNotSet)
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-06 18:49:30 +08:00
|
|
|
var treasure *logic.PlayerTreasure
|
|
|
|
if req.TreasureUid != 0 {
|
|
|
|
treasure = player.Treasure[req.TreasureUid]
|
|
|
|
if treasure == nil {
|
|
|
|
_ = player.TipNotice(proto.TipTreasureNotFound)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-13 17:19:56 +08:00
|
|
|
var equipTable = this.tables.Treasure.Find1(int(treasure.Id))
|
2025-06-09 18:33:52 +08:00
|
|
|
if equipTable == nil {
|
2025-06-06 18:49:30 +08:00
|
|
|
_ = player.TipNotice(proto.TipDataTablesError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if req.TreasureType != pb.TreasureType(equipTable.Type) {
|
2025-06-06 18:49:30 +08:00
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
var lineupHeroList []*pb.LineupHero
|
2025-06-14 18:49:31 +08:00
|
|
|
var heroChangeList []*pb.HeroChange
|
2025-06-09 18:33:52 +08:00
|
|
|
var equipChangeList []*pb.TreasureChange
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if lineupHero.Treasure[req.TreasureType] != 0 {
|
|
|
|
var preTreasure = player.Treasure[lineupHero.Treasure[req.TreasureType]]
|
2025-06-06 18:49:30 +08:00
|
|
|
if preTreasure != nil && preTreasure.HeroUid != 0 {
|
|
|
|
preTreasure.HeroUid = 0
|
|
|
|
player.SaveModel(preTreasure)
|
2025-06-09 18:33:52 +08:00
|
|
|
equipChangeList = append(equipChangeList, &pb.TreasureChange{
|
2025-06-06 18:31:44 +08:00
|
|
|
ChangeType: pb.ChangeType_Changed,
|
2025-06-06 18:49:30 +08:00
|
|
|
Treasure: preTreasure.BuildMsgTreasure(),
|
2025-06-06 18:31:44 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
lineupHero.Treasure[req.TreasureType] = req.TreasureUid
|
|
|
|
player.SaveArray("lineup.heroes", int(req.Index), lineupHero)
|
|
|
|
lineupHeroList = append(lineupHeroList, lineupHero.BuildMsgLineupHero(req.Index))
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
if hero, ok := player.Hero[lineupHero.HeroUid]; ok {
|
|
|
|
if player.UpdateHeroAttrs(hero) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: hero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-06 18:49:30 +08:00
|
|
|
if treasure != nil {
|
|
|
|
if treasure.HeroUid != 0 {
|
2025-06-14 11:51:06 +08:00
|
|
|
util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
|
|
|
if lineup.Heroes[i] == nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
if lineup.Heroes[i].HeroUid == treasure.HeroUid {
|
|
|
|
var preLineupHero = lineup.Heroes[i]
|
|
|
|
if preLineupHero.Treasure[req.TreasureType] != 0 {
|
|
|
|
preLineupHero.Treasure[req.TreasureType] = 0
|
|
|
|
player.SaveArray("lineup.heroes", i, preLineupHero)
|
|
|
|
lineupHeroList = append(lineupHeroList, preLineupHero.BuildMsgLineupHero(uint32(i)))
|
2025-06-14 18:49:31 +08:00
|
|
|
|
|
|
|
if preHero, ok := player.Hero[preLineupHero.HeroUid]; ok {
|
|
|
|
if player.UpdateHeroAttrs(preHero) {
|
|
|
|
heroChangeList = append(heroChangeList, &pb.HeroChange{ChangeType: pb.ChangeType_Changed, Hero: preHero.BuildMsgHero()})
|
|
|
|
}
|
|
|
|
}
|
2025-06-06 18:49:30 +08:00
|
|
|
}
|
2025-06-14 11:51:06 +08:00
|
|
|
return true
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
2025-06-14 11:51:06 +08:00
|
|
|
return false
|
|
|
|
})
|
2025-06-06 18:31:44 +08:00
|
|
|
}
|
|
|
|
|
2025-06-09 18:33:52 +08:00
|
|
|
treasure.HeroUid = lineupHero.HeroUid
|
2025-06-06 18:49:30 +08:00
|
|
|
player.SaveModel(treasure)
|
2025-06-09 18:33:52 +08:00
|
|
|
equipChangeList = append(equipChangeList, &pb.TreasureChange{
|
2025-06-06 18:49:30 +08:00
|
|
|
ChangeType: pb.ChangeType_Changed,
|
|
|
|
Treasure: treasure.BuildMsgTreasure(),
|
|
|
|
})
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
|
|
|
})
|
2025-06-09 18:33:52 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemTreasureChange), &pb.TreasureChangeListAck{ChangeList: equipChangeList})
|
2025-06-14 18:49:31 +08:00
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), &pb.HeroChangeListAck{ChangeList: heroChangeList})
|
2025-06-06 18:31:44 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *PlayerHandler) LineupHeroArtifact(player *logic.Player, msg *net.Message) {}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupHeroMounts(player *logic.Player, msg *net.Message) {}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupHeroGeneral(player *logic.Player, msg *net.Message) {}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupHeroOrnament(player *logic.Player, msg *net.Message) {}
|
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
func (this *PlayerHandler) LineupHelperChange(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupHelperChangeReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.LineupUid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.LineupUid: ", req.LineupUid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.Index >= 8 {
|
|
|
|
this.logger.Error("Parameter error, req.Index: ", req.Index)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var lineup = player.Lineup[req.LineupUid]
|
|
|
|
if lineup == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, lineup was not found, req.LineupUid: ", req.LineupUid)
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var hero = player.Hero[req.HeroUid]
|
|
|
|
if hero == nil {
|
2025-06-13 17:19:56 +08:00
|
|
|
this.logger.Error("Parameter error, hero was not found, req.HeroUid: ", req.HeroUid)
|
2025-06-11 17:00:00 +08:00
|
|
|
_ = player.TipNotice(proto.TipHeroNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
lineup.Helper[req.Index] = hero.Uid
|
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
|
|
|
})
|
2025-06-14 18:49:31 +08:00
|
|
|
|
|
|
|
player.SendLineupHeroChange(lineup)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupEquipInlay(player *logic.Player, msg *net.Message) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupTreasureInlay(player *logic.Player, msg *net.Message) {
|
|
|
|
|
2025-06-11 17:00:00 +08:00
|
|
|
}
|
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
func (this *PlayerHandler) LineupCreate(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupCreateReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(req.Name) == 0 {
|
|
|
|
this.logger.Error("Parameter error, name is empty")
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(player.Lineup) > 5 {
|
|
|
|
_ = player.TipNotice(proto.TipLineupsAlreadyMax)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 11:51:06 +08:00
|
|
|
var previous = util.MapFindValue(player.Lineup, func(v *logic.PlayerLineup) bool {
|
|
|
|
return v.Active
|
|
|
|
})
|
2025-06-07 18:31:00 +08:00
|
|
|
if previous == nil {
|
|
|
|
_ = player.TipNotice(proto.TipServerError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var newLineup = &logic.PlayerLineup{
|
|
|
|
Uid: util.RandomUid(),
|
|
|
|
Name: req.Name,
|
|
|
|
Active: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, hero := range previous.Heroes {
|
|
|
|
newLineup.Heroes[i] = new(logic.PlayerLineupHero)
|
|
|
|
if hero != nil {
|
|
|
|
*newLineup.Heroes[i] = *hero
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var changeList []*pb.LineupChange
|
|
|
|
|
|
|
|
previous.Active = false
|
|
|
|
player.SaveModel(previous)
|
|
|
|
|
|
|
|
changeList = append(changeList, &pb.LineupChange{ChangeType: pb.ChangeType_Changed, Lineup: previous.BuildMsgLineup()})
|
|
|
|
|
|
|
|
player.Lineup[newLineup.Uid] = newLineup
|
|
|
|
player.SaveModel(newLineup)
|
|
|
|
|
|
|
|
changeList = append(changeList, &pb.LineupChange{ChangeType: pb.ChangeType_Add, Lineup: newLineup.BuildMsgLineup()})
|
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ChangeList: changeList})
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupChangeName(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupChangeNameReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.Uid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(req.Name) == 0 {
|
|
|
|
this.logger.Error("Parameter error, name is empty")
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var lineup = player.Lineup[req.Uid]
|
|
|
|
if lineup == nil {
|
|
|
|
this.logger.Error("Player lineup not found, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
lineup.Name = req.Name
|
|
|
|
|
|
|
|
player.SaveModel(lineup)
|
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
2025-06-14 18:49:31 +08:00
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Add, Lineup: lineup.BuildMsgLineup()}},
|
2025-06-07 18:31:00 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupActivate(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupActivateReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if req.Uid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var lineup = player.Lineup[req.Uid]
|
|
|
|
if lineup == nil {
|
|
|
|
this.logger.Error("Player lineup not found, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
if lineup.Active {
|
|
|
|
return
|
|
|
|
}
|
2025-06-07 18:31:00 +08:00
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
var lineupChangeList []*pb.LineupChange
|
|
|
|
|
|
|
|
var preLineup *logic.PlayerLineup
|
|
|
|
for _, v := range player.Lineup {
|
|
|
|
if v.Active {
|
|
|
|
preLineup = v
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if preLineup != nil {
|
|
|
|
preLineup.Active = false
|
|
|
|
player.SaveModel(lineup)
|
|
|
|
lineupChangeList = append(lineupChangeList, &pb.LineupChange{ChangeType: pb.ChangeType_Changed, Lineup: preLineup.BuildMsgLineup()})
|
|
|
|
}
|
|
|
|
|
|
|
|
lineup.Active = true
|
2025-06-07 18:31:00 +08:00
|
|
|
player.SaveModel(lineup)
|
2025-06-14 18:49:31 +08:00
|
|
|
lineupChangeList = append(lineupChangeList, &pb.LineupChange{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()})
|
2025-06-07 18:31:00 +08:00
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
|
|
|
ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}},
|
|
|
|
})
|
2025-06-14 18:49:31 +08:00
|
|
|
|
|
|
|
player.SendLineupHeroChange(preLineup, lineup)
|
|
|
|
return
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (this *PlayerHandler) LineupDelete(player *logic.Player, msg *net.Message) {
|
|
|
|
var req = new(pb.LineupDeleteReq)
|
|
|
|
var err = msg.Read(req)
|
|
|
|
if err != nil {
|
|
|
|
this.logger.Error("Read message failed, ", err)
|
|
|
|
_ = player.TipNotice(proto.TipMessageError)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-07 18:31:00 +08:00
|
|
|
if req.Uid == 0 {
|
|
|
|
this.logger.Error("Parameter error, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
var delLineup = player.Lineup[req.Uid]
|
|
|
|
if delLineup == nil {
|
2025-06-07 18:31:00 +08:00
|
|
|
this.logger.Error("Player lineup not found, req.Uid: ", req.Uid)
|
|
|
|
_ = player.TipNotice(proto.TipLineupNotFound)
|
|
|
|
return
|
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
if len(player.Lineup) == 1 {
|
|
|
|
this.logger.Error("Player lineup can not delete, len(player.Lineup) == 1")
|
|
|
|
_ = player.TipNotice(proto.TipLineupCanNotDelete)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
var lineupChangeList []*pb.LineupChange
|
|
|
|
|
|
|
|
delLineup.Active = false
|
|
|
|
delete(player.Lineup, delLineup.Uid)
|
|
|
|
player.WipeModel(delLineup)
|
|
|
|
lineupChangeList = append(lineupChangeList, &pb.LineupChange{ChangeType: pb.ChangeType_Delete, Lineup: delLineup.BuildMsgLineup()})
|
|
|
|
|
|
|
|
var lineupList = make([]*logic.PlayerLineup, 0, len(player.Lineup))
|
|
|
|
for _, v := range player.Lineup {
|
|
|
|
lineupList = append(lineupList, v)
|
|
|
|
}
|
|
|
|
|
|
|
|
sort.Slice(lineupList, func(i, j int) bool {
|
|
|
|
return lineupList[i].Uid < lineupList[j].Uid
|
|
|
|
})
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-14 18:49:31 +08:00
|
|
|
var lineup = lineupList[0]
|
|
|
|
lineup.Active = true
|
2025-06-07 18:31:00 +08:00
|
|
|
player.WipeModel(lineup)
|
2025-06-14 18:49:31 +08:00
|
|
|
lineupChangeList = append(lineupChangeList, &pb.LineupChange{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()})
|
2025-06-07 18:31:00 +08:00
|
|
|
|
|
|
|
_ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{
|
2025-06-14 18:49:31 +08:00
|
|
|
ChangeList: lineupChangeList,
|
2025-06-07 18:31:00 +08:00
|
|
|
})
|
2025-06-14 18:49:31 +08:00
|
|
|
|
|
|
|
player.SendLineupHeroChange(delLineup, lineup)
|
2025-06-07 18:31:00 +08:00
|
|
|
}
|
2025-06-06 18:31:44 +08:00
|
|
|
|
2025-06-04 18:17:39 +08:00
|
|
|
//
|
|
|
|
//func (this *PlayerHandler) RoleTalentUpgrade(player *logic.Player, msg *net.Message) {
|
|
|
|
// var req = new(proto.MsgRoleTalentUpgradeReq)
|
|
|
|
// var err = msg.Read(req)
|
|
|
|
// if err != nil {
|
|
|
|
// this.logger.Error("Read message failed, ", err)
|
|
|
|
// _ = player.TipNotice(proto.ErrMessageError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if req.Id == 0 {
|
|
|
|
// this.logger.Error("Parameter error, req.Id == 0")
|
|
|
|
// _ = player.TipNotice(proto.ErrParameterError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// var talent = player.RoleTalent[req.Id]
|
|
|
|
//
|
|
|
|
// var nextLevelTable *data.TalentLevel
|
|
|
|
// if talent != nil {
|
|
|
|
// var talentTreeTable = this.tables.TalentTree.Get(int(talent.Id))
|
|
|
|
// if talentTreeTable == nil {
|
|
|
|
// this.logger.Error("Data error, TalentTree not found, id: ", talent.Id)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// var talentLevelTable = this.tables.TalentLevel.Get(int(talent.LevelId))
|
|
|
|
// if talentLevelTable == nil {
|
|
|
|
// this.logger.Error("Data error, TalentLevel not found, levelId: ", talent.LevelId)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if talentLevelTable.Level >= talentTreeTable.MaxLevel {
|
|
|
|
// this.logger.Errorf("Talent level alreay max, level: %d, maxLevel: %d", talentLevelTable.Level, talentTreeTable.MaxLevel)
|
|
|
|
// _ = player.TipNotice(proto.ErrLevelAlreadyMax)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// nextLevelTable = this.tables.TalentLevelExtend.Get(talentTreeTable.Id, talentLevelTable.Level+1)
|
|
|
|
// if talentLevelTable == nil {
|
|
|
|
// this.logger.Errorf("Data error, TalentLevel not found, treeId: %d, nextLevel: %d", talentTreeTable.Id, talentLevelTable.Level+1)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// } else {
|
|
|
|
// var talentTreeTable = this.tables.TalentTree.Get(int(req.Id))
|
|
|
|
// if talentTreeTable == nil {
|
|
|
|
// this.logger.Error("Data error, TalentTree not found, id: ", req.Id)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if len(talentTreeTable.Parents) > 0 {
|
|
|
|
// for _, parentId := range talentTreeTable.Parents {
|
|
|
|
// if parentId == 0 {
|
|
|
|
// continue
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// var parent = player.RoleTalent[uint32(parentId)]
|
|
|
|
// if parent == nil {
|
|
|
|
// this.logger.Error("Parent not found, parentId: ", parentId)
|
|
|
|
// _ = player.TipNotice(proto.ErrTalentNeedParentMax)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// var parentTreeTable = this.tables.TalentTree.Get(int(parent.Id))
|
|
|
|
// if parentTreeTable == nil {
|
|
|
|
// this.logger.Error("Data error, TalentTree not found, parentId: ", parent.Id)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// var parentLevelTable = this.tables.TalentLevel.Get(int(parent.LevelId))
|
|
|
|
// if parentLevelTable == nil {
|
|
|
|
// this.logger.Error("Data error, TalentLevel not found, parentLevelId: ", parent.LevelId)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if parentLevelTable.Level < parentTreeTable.MaxLevel {
|
|
|
|
// this.logger.Errorf("Parent not level max, parentLevel: %d, maxLevel: %d", parentLevelTable.Level, parentTreeTable.MaxLevel)
|
|
|
|
// _ = player.TipNotice(proto.ErrTalentNeedParentMax)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// nextLevelTable = this.tables.TalentLevelExtend.Get(talentTreeTable.Id, 1)
|
|
|
|
// if nextLevelTable == nil {
|
|
|
|
// this.logger.Errorf("Data error, TalentLevel not found, treeId: %d, nextLevel: %d", talentTreeTable.Id, 1)
|
|
|
|
// _ = player.TipNotice(proto.ErrDataTablesError)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// talent = &logic.PlayerRoleTalent{Id: uint32(talentTreeTable.Id)}
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// err = player.CheckMoney(proto.MoneyType(nextLevelTable.MoneyType), uint32(nextLevelTable.MoneyNum))
|
|
|
|
// if err != nil {
|
|
|
|
// this.logger.Errorf("%s, moneyType: %d, moneyNum: %d", err.Error(), nextLevelTable.MoneyType, nextLevelTable.MoneyNum)
|
|
|
|
// _ = player.TipNotice(err)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// player.ReduceMoney(proto.MoneyType(nextLevelTable.MoneyType), uint32(nextLevelTable.MoneyNum), logic.LogTypeItemConsumeByTalentUpgrade)
|
|
|
|
//
|
|
|
|
// talent.LevelId = uint32(nextLevelTable.Id)
|
|
|
|
//
|
|
|
|
// player.RoleTalent[talent.Id] = talent
|
|
|
|
// player.SaveModel(talent)
|
|
|
|
//
|
|
|
|
// _ = player.Send(proto.ModIdRole, proto.MsgIdRoleTalentUpgrade, &proto.MsgRoleTalentUpgradeAck{RoleTalent: talent.BuildMsgRoleTalent()})
|
|
|
|
//
|
|
|
|
// player.UpdateRigAttrs()
|
|
|
|
// return
|
|
|
|
//}
|
|
|
|
//
|
|
|
|
//func (this *PlayerHandler) RoleTalentReset(player *logic.Player, _ *net.Message) {
|
|
|
|
// var monies = map[uint32]uint32{}
|
|
|
|
// for _, talent := range player.RoleTalent {
|
|
|
|
// var level = 0
|
|
|
|
// for {
|
|
|
|
// level++
|
|
|
|
// var talentLevelTable = this.tables.TalentLevelExtend.Get(int(talent.Id), level)
|
|
|
|
// if talentLevelTable == nil {
|
|
|
|
// continue
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// monies[uint32(talentLevelTable.MoneyType)] += uint32(talentLevelTable.MoneyNum)
|
|
|
|
//
|
|
|
|
// if uint32(talentLevelTable.Id) == talent.LevelId {
|
|
|
|
// break
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// player.RoleTalent = map[uint32]*logic.PlayerRoleTalent{}
|
|
|
|
// player.SaveField("role_talent", player.RoleTalent)
|
|
|
|
//
|
|
|
|
// for moneyType, moneyNum := range monies {
|
|
|
|
// player.AddMoney(proto.MoneyType(moneyType), moneyNum, logic.LogTypeItemObtainByTalentReturn)
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// _ = player.Send(proto.ModIdRole, proto.MsgIdRoleTalentReset, nil)
|
|
|
|
//
|
|
|
|
// player.UpdateRigAttrs()
|
|
|
|
// return
|
|
|
|
//}
|