This commit is contained in:
@@ -27,6 +27,11 @@ type SetHandler struct {
|
||||
Handler PetItemHandler
|
||||
}
|
||||
|
||||
var fallbackPetItemNewSeIdx = map[uint32]int{
|
||||
300741: 1103, // 瞬杀能量珠
|
||||
300854: 1103, // 瞬杀能量珠Ω
|
||||
}
|
||||
|
||||
// PetItemHandlerRegistry 道具处理器注册器
|
||||
type PetItemHandlerRegistry struct {
|
||||
exactHandlers map[uint32]PetItemHandler // 精确ID映射
|
||||
@@ -112,12 +117,29 @@ func nvfunc(itemid uint32, onpet *model.PetInfo) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func handleNewSeIdxPetItem(itemid uint32, onpet *model.PetInfo) errorcode.ErrorCode {
|
||||
itemCfg, ok := xmlres.ItemsMAP[int(itemid)]
|
||||
if !ok {
|
||||
return errorcode.ErrorCodes.ErrItemUnusable
|
||||
func resolvePetItemNewSeIdx(itemid uint32) (itemCfg xmlres.Item, newSeIdx int, ok bool) {
|
||||
itemCfg, ok = xmlres.ItemsMAP[int(itemid)]
|
||||
if ok && itemCfg.NewSeIdx != 0 {
|
||||
return itemCfg, itemCfg.NewSeIdx, true
|
||||
}
|
||||
if itemCfg.NewSeIdx == 0 {
|
||||
|
||||
if newSeIdx, ok = fallbackPetItemNewSeIdx[itemid]; ok {
|
||||
return itemCfg, newSeIdx, true
|
||||
}
|
||||
|
||||
for idx, effectCfg := range xmlres.EffectMAP {
|
||||
if effectCfg.ItemId == nil || gconv.Uint32(*effectCfg.ItemId) != itemid {
|
||||
continue
|
||||
}
|
||||
return itemCfg, idx, true
|
||||
}
|
||||
|
||||
return itemCfg, 0, false
|
||||
}
|
||||
|
||||
func handleNewSeIdxPetItem(itemid uint32, onpet *model.PetInfo) errorcode.ErrorCode {
|
||||
itemCfg, newSeIdx, ok := resolvePetItemNewSeIdx(itemid)
|
||||
if ok && newSeIdx == 0 {
|
||||
if itemCfg.MaxHPUp > 0 {
|
||||
if !onpet.AddMaxHPUpEffect(itemid, itemCfg.MaxHPUp) {
|
||||
return errorcode.ErrorCodes.ErrCannotInjectPillAgain
|
||||
@@ -126,14 +148,17 @@ func handleNewSeIdxPetItem(itemid uint32, onpet *model.PetInfo) errorcode.ErrorC
|
||||
}
|
||||
return errorcode.ErrorCodes.ErrItemUnusable
|
||||
}
|
||||
if !ok {
|
||||
return errorcode.ErrorCodes.ErrItemUnusable
|
||||
}
|
||||
|
||||
effectCfg, ok := xmlres.EffectMAP[itemCfg.NewSeIdx]
|
||||
effectCfg, ok := xmlres.EffectMAP[newSeIdx]
|
||||
if !ok {
|
||||
return errorcode.ErrorCodes.ErrSystemError
|
||||
}
|
||||
|
||||
effectStatus := byte(gconv.Int(effectCfg.Stat))
|
||||
effectIdx := uint16(itemCfg.NewSeIdx)
|
||||
effectIdx := uint16(newSeIdx)
|
||||
leftCount := 1
|
||||
if effectCfg.Times != nil && *effectCfg.Times != "" {
|
||||
leftCount = gconv.Int(*effectCfg.Times)
|
||||
|
||||
Reference in New Issue
Block a user