package mapPlayer import ( "f1-game/internal/code" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" "f1-game/nodes/map/internal/db" ) func (p *actorPlayer) initHero() { p.Remote().Register(nameRemote.MapPlayer_HeroCheckBusy, p.checkHeroBusy) p.Remote().Register(nameRemote.MapPlayer_HeroDelete, p.heroDelete) } func (p *actorPlayer) checkHeroBusy(req *pb.I64List) int32 { var ( playerTable = db.GetMapPlayerTable(p.playerID) heroList = req.List ) if len(heroList) <= 0 { return code.IllegalArgument } for _, heroGUID := range heroList { hero, found := playerTable.Heroes.Get(heroGUID) if !found || hero.TeamID <= 0 { continue } team, found := playerTable.Teams.GetTeam(hero.TeamID) if !found { return code.MapTeamNotFound } if team.IsNotStandby() { return code.HeroIsBusy } } return code.OK } // 英雄删除 func (p *actorPlayer) heroDelete(req *pb.I64List) int32 { var ( playerTable = db.GetMapPlayerTable(p.playerID) heroGUIDs = req.List deleteHeros = []int64{} ) for _, heroGUID := range heroGUIDs { heroEntity, found := playerTable.Heroes.Get(heroGUID) if !found { continue } // 判断是否上阵 如果上阵 则不能被删除 if heroEntity.TeamID > 0 { return code.HeroIsBusy } deleteHeros = append(deleteHeros, heroGUID) } if len(deleteHeros) > 0 { playerTable.Heroes.Remove(deleteHeros...) playerTable.Save2Queue() } return code.OK }