player_hero.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package mapPlayer
  2. import (
  3. "f1-game/internal/code"
  4. nameRemote "f1-game/internal/name/remote"
  5. "f1-game/internal/pb"
  6. "f1-game/nodes/map/internal/db"
  7. )
  8. func (p *actorPlayer) initHero() {
  9. p.Remote().Register(nameRemote.MapPlayer_HeroCheckBusy, p.checkHeroBusy)
  10. p.Remote().Register(nameRemote.MapPlayer_HeroDelete, p.heroDelete)
  11. }
  12. func (p *actorPlayer) checkHeroBusy(req *pb.I64List) int32 {
  13. var (
  14. playerTable = db.GetMapPlayerTable(p.playerID)
  15. heroList = req.List
  16. )
  17. if len(heroList) <= 0 {
  18. return code.IllegalArgument
  19. }
  20. for _, heroGUID := range heroList {
  21. hero, found := playerTable.Heroes.Get(heroGUID)
  22. if !found || hero.TeamID <= 0 {
  23. continue
  24. }
  25. team, found := playerTable.Teams.GetTeam(hero.TeamID)
  26. if !found {
  27. return code.MapTeamNotFound
  28. }
  29. if team.IsNotStandby() {
  30. return code.HeroIsBusy
  31. }
  32. }
  33. return code.OK
  34. }
  35. // 英雄删除
  36. func (p *actorPlayer) heroDelete(req *pb.I64List) int32 {
  37. var (
  38. playerTable = db.GetMapPlayerTable(p.playerID)
  39. heroGUIDs = req.List
  40. deleteHeros = []int64{}
  41. )
  42. for _, heroGUID := range heroGUIDs {
  43. heroEntity, found := playerTable.Heroes.Get(heroGUID)
  44. if !found {
  45. continue
  46. }
  47. // 判断是否上阵 如果上阵 则不能被删除
  48. if heroEntity.TeamID > 0 {
  49. return code.HeroIsBusy
  50. }
  51. deleteHeros = append(deleteHeros, heroGUID)
  52. }
  53. if len(deleteHeros) > 0 {
  54. playerTable.Heroes.Remove(deleteHeros...)
  55. playerTable.Save2Queue()
  56. }
  57. return code.OK
  58. }