- 优化了 FightPetInfo 和 AttackValue 结构体,使用更合理的数据类型 - 重新定义了战斗流程中的各种消息结构体 - 改进了宠物信息生成和计算逻辑 - 重构了宠物相关服务和控制器方法 - 优化了数据库操作,提高了代码的可读性和维护性
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package controller
|
|
|
|
import (
|
|
"blazing/common/data/socket"
|
|
"blazing/common/socket/errorcode"
|
|
"blazing/common/socket/handler"
|
|
"blazing/logic/service/fight"
|
|
"blazing/logic/service/fight/info"
|
|
"blazing/modules/blazing/model"
|
|
|
|
"github.com/jinzhu/copier"
|
|
)
|
|
|
|
func (h Controller) OnPlayerFightNpcMonster(data *fight.FightNpcMonsterInboundInfo, c *socket.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
c.IsFighting = true
|
|
t1 := handler.NewTomeeHeader(2503, c.Info.UserID)
|
|
ttt := info.NoteReadyToFightInfo{
|
|
OwnerID: data.Head.UserID,
|
|
FightId: 3,
|
|
}
|
|
ttt.OurInfo = info.FightUserInfo{UserID: c.Info.UserID, Nick: c.Info.Nick}
|
|
|
|
len := len(c.Info.PetList)
|
|
ttt.OurPetList = make([]info.ReadyFightPetInfo, len)
|
|
for i := 0; i < len; i++ {
|
|
|
|
err := copier.CopyWithOption(&ttt.OurPetList[i], &c.Info.PetList[i], copier.Option{IgnoreEmpty: true, DeepCopy: true})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
ttt.OpponentInfo = info.FightUserInfo{UserID: 0}
|
|
ttt.OpponentPetList = []info.ReadyFightPetInfo{{ID: 1,
|
|
Level: 100,
|
|
MaxHp: 100,
|
|
SkillListLen: 4,
|
|
Hp: 100}}
|
|
for i := 0; i < 4; i++ {
|
|
ttt.OpponentPetList[0].SkillList[i] = model.SkillInfo{ID: 10001, Pp: 1}
|
|
}
|
|
c.SendPack(t1.Pack(&ttt))
|
|
return nil, -1
|
|
}
|
|
|
|
// 准备战斗
|
|
func (h Controller) OnReadyToFight(data *fight.ReadyToFightInboundInfo, c *socket.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
t1 := handler.NewTomeeHeader(2504, c.Info.UserID)
|
|
rett := fight.FightStartOutboundInfo{
|
|
IsCanAuto: 0,
|
|
|
|
Info2: fight.FightPetInfo{
|
|
UserID: 0,
|
|
ID: 1,
|
|
Hp: 1000,
|
|
MaxHp: 1000,
|
|
Level: 1,
|
|
CatchTime: 0,
|
|
Catchable: 1,
|
|
BattleLV: [6]byte{1, 1, 1, 1, 1, 1}},
|
|
}
|
|
copier.Copy(&rett.Info1, &c.Info.PetList[0])
|
|
rett.Info1.UserID = c.Info.UserID
|
|
c.SendPack(t1.Pack(&rett))
|
|
return nil, -1
|
|
}
|
|
|
|
// 接收战斗或者取消战斗的包
|
|
func (h Controller) OnPlayerHandleFightInvite(data *fight.HandleFightInviteInboundInfo, c *socket.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
return nil, -1
|
|
}
|
|
|
|
// 使用技能包
|
|
func (h Controller) UseSkill(data *fight.UseSkillInboundInfo, c *socket.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
return nil, 0
|
|
}
|
|
|
|
// 战斗逃跑
|
|
func (h Controller) Escape(data *fight.EscapeFightInboundInfo, c *socket.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
defer func() {
|
|
//战斗结束Escape
|
|
ttt := handler.NewTomeeHeader(2506, c.Info.UserID)
|
|
|
|
c.SendPack(ttt.Pack(&fight.FightOverInfo{
|
|
Reason: 0,
|
|
}))
|
|
c.IsFighting = false
|
|
}()
|
|
|
|
return nil, 0
|
|
}
|