feat(fight_boss): 新增怪物ID处理逻辑,支持随机选择与过滤空值
新增 `processMonID` 函数用于处理 BOSS 战斗中怪物 ID 的字符串分割、 过滤空值,并在多个 ID 中随机选取一个。优化新手任务 BOSS 战逻辑, 使其更灵活地适配不同的配置输入。 --- refactor(map): 使用 ants 协程池优化地图进出逻辑并移除无用导入 将原本通过
This commit is contained in:
@@ -3,6 +3,8 @@ package controller
|
||||
import (
|
||||
"blazing/common/data/xmlres"
|
||||
"blazing/common/socket/errorcode"
|
||||
"math/rand"
|
||||
"strings"
|
||||
|
||||
"blazing/logic/service/fight"
|
||||
"blazing/logic/service/fight/info"
|
||||
@@ -13,13 +15,41 @@ import (
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
func processMonID(bm string) string {
|
||||
// 按空格分割字符串
|
||||
monid := strings.Split(bm, " ")
|
||||
|
||||
// 过滤分割后可能的空字符串(如连续空格导致的空元素)
|
||||
filtered := make([]string, 0, len(monid))
|
||||
for _, m := range monid {
|
||||
if m != "" {
|
||||
filtered = append(filtered, m)
|
||||
}
|
||||
}
|
||||
monid = filtered
|
||||
|
||||
var selected string
|
||||
switch len(monid) {
|
||||
case 0:
|
||||
// 无元素时,可返回空或默认值(根据业务需求调整)
|
||||
selected = ""
|
||||
case 1:
|
||||
// 长度为1时,取第一个(唯一的元素)
|
||||
selected = monid[0]
|
||||
default:
|
||||
// 长度大于1时,随机选取一个
|
||||
randomIdx := rand.Intn(len(monid))
|
||||
selected = monid[randomIdx]
|
||||
}
|
||||
return selected
|
||||
}
|
||||
|
||||
// 挑战地图boss
|
||||
func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
||||
if !c.CanFight() {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotEligible
|
||||
}
|
||||
|
||||
var petid int
|
||||
var mo *model.PetInfo
|
||||
moinfo := &model.PlayerInfo{}
|
||||
// 新手任务2(选择不同精灵)
|
||||
@@ -34,61 +64,35 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla
|
||||
// </Boss>
|
||||
// </Bosses>
|
||||
// </Map>
|
||||
if c.Info.MapID == 515 && data.BossId == 0 { //说明是新手,随机生成
|
||||
switch c.Info.PetList[0].ID {
|
||||
|
||||
case 1:
|
||||
petid = 4
|
||||
mdata, ok := xmlres.MonsterMap[int(c.Info.MapID)]
|
||||
if !ok {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
if len(mdata.Bosses) == 0 {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
for _, bc := range mdata.Bosses {
|
||||
if (bc.Id == nil && data.BossId == 0) || uint32(*bc.Id) == data.BossId { //打默认第一个boss
|
||||
|
||||
case 7:
|
||||
petid = 1
|
||||
for _, bm := range bc.BossMon {
|
||||
|
||||
case 4:
|
||||
petid = 7
|
||||
}
|
||||
mo = c.GenPetInfo(
|
||||
gconv.Int(processMonID(bm.MonID)), 24, //24个体
|
||||
-1,
|
||||
0, //野怪没特性
|
||||
0,
|
||||
bm.Lv)
|
||||
|
||||
mo = c.GenPetInfo(
|
||||
int(petid), 24, //24个体
|
||||
-1,
|
||||
0, //野怪没特性
|
||||
0,
|
||||
50)
|
||||
moinfo.Nick = xmlres.PetMAP[int(mo.ID)].DefName
|
||||
moinfo.PetList = append(moinfo.PetList, *mo)
|
||||
} else {
|
||||
|
||||
mdata, ok := xmlres.MonsterMap[int(c.Info.MapID)]
|
||||
if !ok {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
if len(mdata.Bosses) == 0 {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
for _, bc := range mdata.Bosses {
|
||||
if bc.Id == nil {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
// mo.Level = uint32(bm.Lv)
|
||||
mo.CalculatePetPane()
|
||||
mo.Hp = uint32(bm.Hp)
|
||||
mo.MaxHp = uint32(bm.Hp)
|
||||
moinfo.PetList = append(moinfo.PetList, *mo)
|
||||
|
||||
}
|
||||
if uint32(*bc.Id) == data.BossId {
|
||||
for _, bm := range bc.BossMon {
|
||||
mo = c.GenPetInfo(
|
||||
gconv.Int(bm.MonID), 24, //24个体
|
||||
-1,
|
||||
0, //野怪没特性
|
||||
0,
|
||||
bm.Lv)
|
||||
|
||||
// mo.Level = uint32(bm.Lv)
|
||||
mo.CalculatePetPane()
|
||||
mo.Hp = uint32(bm.Hp)
|
||||
mo.MaxHp = uint32(bm.Hp)
|
||||
moinfo.PetList = append(moinfo.PetList, *mo)
|
||||
|
||||
}
|
||||
moinfo.Nick = xmlres.PetMAP[int(mo.ID)].DefName
|
||||
break
|
||||
}
|
||||
|
||||
moinfo.Nick = xmlres.PetMAP[int(mo.ID)].DefName
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user