extend_monster_group.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package data
  2. import (
  3. "f1-game/internal/pb"
  4. clog "github.com/cherry-game/cherry/logger"
  5. )
  6. var (
  7. monsterBattleSquadMap map[int32][]*MonsterSquad // 怪物战斗小队集合 key: 怪物组id, value: 小队列表
  8. )
  9. type (
  10. // 怪物小队
  11. MonsterSquad struct {
  12. TileIndex int32 `json:"tileIndex"`
  13. Fighter *MonsterFighter `json:"fighter"`
  14. TroopTypeID int32 `json:"troopTypeID"`
  15. Troop int32 `json:"troop"`
  16. }
  17. )
  18. func (p *monsterGroupConfig) OnAfterLoad(_ bool) {
  19. loadMap := map[int32][]*MonsterSquad{}
  20. for _, row := range p.list {
  21. monster, found := Monster.GetByID(row.MonsterID)
  22. if !found {
  23. clog.Warnf("monster not found, monsterGroupID: %d, lineupIndex: %d, monsterID: %d", row.ID, row.LineupIndex, row.MonsterID)
  24. continue
  25. }
  26. monsterSquad := &MonsterSquad{
  27. TileIndex: row.LineupIndex,
  28. Fighter: monster.buildMonsterFighter(row.ID, row.LineupIndex),
  29. TroopTypeID: row.TroopTypeID,
  30. Troop: row.Troop,
  31. }
  32. loadMap[row.ID] = append(loadMap[row.ID], monsterSquad)
  33. }
  34. monsterBattleSquadMap = loadMap
  35. clog.Infof("monsterGroupConfig load success, len: %v", len(monsterBattleSquadMap))
  36. }
  37. func (p *MonsterSquad) ToProto() *pb.BattleSquadParam {
  38. fighter, troopsAttrs := p.Fighter.ToProto()
  39. ret := &pb.BattleSquadParam{
  40. TileIndex: p.TileIndex,
  41. Fighter: fighter,
  42. TroopsID: p.TroopTypeID,
  43. TroopsNum: p.Troop,
  44. HeroTroopNum: p.Troop, // 怪物上限跟数量一致
  45. Attrs: troopsAttrs,
  46. }
  47. return ret
  48. }
  49. // 获取怪物战斗小队参数
  50. func GetBattleSquadParam(monsterGroupID int32) []*pb.BattleSquadParam {
  51. var ret []*pb.BattleSquadParam
  52. monsterSquads, found := monsterBattleSquadMap[monsterGroupID]
  53. if !found {
  54. clog.Warnf("monster squad not found, monsterGroupID: %d", monsterGroupID)
  55. return ret
  56. }
  57. for _, squad := range monsterSquads {
  58. ret = append(ret, squad.ToProto())
  59. }
  60. return ret
  61. }
  62. // 构建怪物战斗阵营参数
  63. func BuildBattleCampParam(monsterGroupID int32, camp int32) *pb.BattleCampParam {
  64. ret := &pb.BattleCampParam{
  65. Camp: camp,
  66. Squads: GetBattleSquadParam(monsterGroupID),
  67. }
  68. return ret
  69. }