package player import ( "blazing/common/socket/errorcode" "blazing/common/utils" "blazing/logic/service/common" "blazing/logic/service/fight/info" spaceinfo "blazing/logic/service/space/info" "blazing/modules/player/model" "github.com/gogf/gf/v2/util/grand" ) type baseplayer struct { //Fightinfo info.Fightinfo Info *model.PlayerInfo //canFight uint32 FightC common.FightI //绑定战斗标识 替代本身的是否战斗标记 //IsFighting bool *info.PlayerCaptureContext Prop [6]int8 } // NewPlayerCaptureContext 创建用户捕捉上下文(每次登录调用) func newbaseplayer() baseplayer { ret := baseplayer{} return ret } // GetInfo 获取玩家基础信息 func (p *baseplayer) GetInfo() *model.PlayerInfo { return p.Info } func ApplyPetLevelLimit(pet model.PetInfo, limitlevel uint32) model.PetInfo { originalHP := pet.Hp pet.CalculatePetPane(limitlevel) pet.Hp = utils.Min(originalHP, pet.MaxHp) return pet } func (p *baseplayer) GetPetInfo(limitlevel uint32) []model.PetInfo { ret := make([]model.PetInfo, 0, len(p.Info.PetList)) for _, pet := range p.Info.PetList { ret = append(ret, ApplyPetLevelLimit(pet, limitlevel)) } return ret } func (p *baseplayer) AddBattleProp(index int, level int8) { if p == nil || index < 0 || index >= len(p.Prop) || level == 0 { return } p.Prop[index] += level if p.Prop[index] > 6 { p.Prop[index] = 6 } if p.Prop[index] < -6 { p.Prop[index] = -6 } } func (p *baseplayer) ApplyBattleProps(target *model.AttackValue) { if p == nil || target == nil { return } target.Prop = p.Prop } func (f *baseplayer) InvitePlayer(ff common.PlayerI) { } func (p *baseplayer) CanFight() errorcode.ErrorCode { return 0 } func (p *baseplayer) QuitFight() { } // SetFightC 设置玩家战斗控制器 func (f *baseplayer) SetFightC(fightController common.FightI) { f.FightC = fightController } // GetPlayerCaptureContext 获取玩家捕捉上下文 func (f *baseplayer) GetPlayerCaptureContext() *info.PlayerCaptureContext { return f.PlayerCaptureContext } func (f *baseplayer) Roll(numerator, denominator int) (bool, float64, float64) { if denominator <= 0 { return false, 0, 0 } if numerator < 0 { numerator = 0 } if numerator > denominator { numerator = denominator } base := float64(numerator) / float64(denominator) * 100 return grand.Intn(denominator) < numerator, base, 0 } // FindPet 根据捕捉时间查找宠物 // 返回值: (索引, 宠物信息, 是否找到) func (f *baseplayer) FindPet(catchTime uint32) (int, *model.PetInfo, bool) { return utils.FindWithIndex(f.Info.PetList, func(item model.PetInfo) bool { return item.CatchTime == catchTime }) } func (p *baseplayer) Getfightinfo() info.Fightinfo { return info.Fightinfo{} } func (f *baseplayer) SendPack(b []byte) error { return nil } func (f *baseplayer) MessWin(b bool) { } func (f *baseplayer) SendPackCmd(_ uint32, _ any) { //fmt.Println("战斗结束") } func (p *baseplayer) ItemAdd(ItemId, ItemCnt int64) (result bool) { return true } func (lw *baseplayer) SendLoadPercent(info.LoadPercentOutboundInfo) { } func (p *baseplayer) ApplyPetDisplayInfo(out *spaceinfo.SimpleInfo) {}