Files
bl/logic/service/fight/input/Capture.go

130 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package input
import (
"blazing/common/data/xmlres"
"github.com/gogf/gf/v2/util/gconv"
)
// 异常状态常量定义(对应数组索引)
const (
StatusParalysis = 0 // 麻痹
StatusPoison = 1 // 中毒
StatusSleep = 8 // 睡眠
StatusFreeze = 3 // 冰冻
// 预留其他状态到19
)
// getItemBonus 获取道具倍率
func getItemBonus(itemID uint32) float64 {
if bonus, ok := xmlres.ItemsMAP[int(itemID)]; ok {
return gconv.Float64(bonus.Bonus)
}
return 1.0
}
// CaptureDetails 捕捉详情
type CaptureDetails struct {
Success bool
Mode string
BaseRate float64
ModifiedRate float64
GuaranteeBonus float64 // 百分比
StatusBonus float64 // 状态倍率
Details string
}
// func main() {
// ctx := NewPlayerCaptureContext()
// fmt.Println("=== 精灵捕捉系统测试(状态数组版) ===")
// // 测试1不同异常状态组合
// fmt.Println("\n--- 异常状态测试 ---")
// // 无异常状态
// var noStatus [20]byte
// // 中毒状态
// var poisonStatus [20]byte
// poisonStatus[StatusPoison] = 1
// // 睡眠+冰冻状态取最高倍率2.0
// var multipleStatus [20]byte
// multipleStatus[StatusSleep] = 1
// multipleStatus[StatusFreeze] = 1
// statusTests := []struct {
// name string
// status [20]byte
// }{
// {"无异常状态", noStatus},
// {"中毒状态", poisonStatus},
// {"睡眠+冰冻状态", multipleStatus},
// }
// for _, test := range statusTests {
// params := CaptureParams{
// PetID: 1001,
// MaxHP: 100,
// CurrentHP: 10,
// CatchRate: 50,
// CatchDenom: 100,
// ItemID: 300001,
// Statuses: test.status,
// OwnedCount: -1,
// }
// _, details := ctx.Capture(params)
// fmt.Printf("%s: 状态倍率=%.1f | 基础成功率=%.2f%%\n",
// test.name, details.StatusBonus, details.BaseRate)
// }
// // 测试2无敌胶囊
// fmt.Println("\n--- 无敌胶囊测试 ---")
// invincibleParams := CaptureParams{
// PetID: 9999,
// MaxHP: 1000,
// CurrentHP: 1000,
// CatchRate: 1,
// CatchDenom: 1000,
// ItemID: 300006,
// Statuses: noStatus,
// OwnedCount: -1,
// }
// success, details := ctx.Capture(invincibleParams)
// fmt.Printf("捕捉结果: %v | 模式: %s | 成功率: %.2f%%\n",
// success, details.Mode, details.ModifiedRate)
// // 测试3锁定模式
// fmt.Println("\n--- 锁定模式测试 ---")
// lockParams := CaptureParams{
// PetID: 1002,
// MaxHP: 50,
// CurrentHP: 1,
// CatchRate: 100,
// CatchDenom: 100,
// ItemID: 300003,
// Statuses: poisonStatus,
// OwnedCount: 0,
// }
// success, details = ctx.Capture(lockParams)
// fmt.Printf("捕捉结果: %v | 模式: %s | 成功率: %.2f%%\n",
// success, details.Mode, details.ModifiedRate)
// // 测试4衰减模式
// fmt.Println("\n--- 衰减模式测试 ---")
// decayParams := CaptureParams{
// PetID: 1003,
// MaxHP: 100,
// CurrentHP: 10,
// CatchRate: 50,
// CatchDenom: 100,
// ItemID: 300002,
// Statuses: multipleStatus,
// OwnedCount: 1,
// }
// for i := 1; i <= 5; i++ {
// decayParams.OwnedCount = i
// success, details := ctx.Capture(decayParams)
// fmt.Printf("拥有%d只 - 结果: %v | 基础成功率: %.2f%% | 实际成功率: %.2f%%\n",
// i, success, details.BaseRate, details.ModifiedRate)
// }
// }