From 502d497dce9db4035413e58210c22643441ce170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Wed, 24 Dec 2025 19:03:11 +0800 Subject: [PATCH] =?UTF-8?q?```=20refactor(controller):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E6=8E=A7=E5=88=B6=E5=99=A8=E5=87=BD=E6=95=B0=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E4=BB=A3=E7=A0=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重命名 EGG 函数为 EggGamePlay,更新宠物生成逻辑 - 重命名 Leiyi 函数为 GetLeiyiTrainStatus - 重命名 Cacthpet 函数为 CatchPet,添加详细函数注释 - 为 ArenaSetOwner、ArenaFightOwner、ArenaGetInfo、ArenaUpfight、ArenaOwnerAcce 等擂台相关函数添加注释前缀 - 重命名 PETKing 函数为 PetKing - 重命名 FRESH_CHOICE_FIGHT_LEVEL 函数为 FreshChoiceFightLevel,添加详细参数说明 - 重命名 BuyMItem 函数为 BuyMultipleItems - 重命名 ITEM_S --- logic/controller/action_egg.go | 8 +- logic/controller/activce_leiyi.go | 2 +- logic/controller/active_xiyou_in1.go | 7 +- logic/controller/fight_leitai.go | 12 +- logic/controller/fight_pvp_king.go | 2 +- logic/controller/fight_tawor.go | 13 +- logic/controller/item_buy.go | 4 +- logic/controller/item_sale.go | 12 +- logic/controller/item_use.go | 74 +++---- logic/controller/login_getserver.go | 4 +- logic/controller/login_main.go | 33 ++-- logic/controller/map.go | 10 +- logic/controller/nono.go | 4 +- logic/controller/pet_COLLECT.go | 2 +- logic/controller/pet_ev.go | 39 ++-- logic/controller/pet_info.go | 146 +++++++------- logic/controller/pet_skill.go | 20 +- logic/controller/room_buy.go | 17 +- logic/controller/room_info.go | 65 +++--- logic/controller/room_set.go | 42 ++-- logic/controller/user_action.go | 14 +- logic/controller/user_create.go | 12 +- logic/controller/user_friend.go | 6 +- logic/controller/user_info.go | 12 +- logic/controller/user_talk.go | 18 +- logic/controller/user_task.go | 59 +++--- logic/controller/walk.go | 2 +- logic/service/fight/fightc.go | 282 ++++++++++----------------- logic/service/player/base.go | 28 +-- logic/service/player/fight.go | 49 ++--- logic/service/player/pet.go | 86 ++++---- logic/service/player/player.go | 64 +++--- 32 files changed, 533 insertions(+), 615 deletions(-) diff --git a/logic/controller/action_egg.go b/logic/controller/action_egg.go index 211c503d8..727d6d9ad 100644 --- a/logic/controller/action_egg.go +++ b/logic/controller/action_egg.go @@ -7,10 +7,10 @@ import ( "blazing/modules/blazing/model" ) -func (h Controller) EGG(data *egg.C2S_EGG_GAME_PLAY, c *player.Player) (result *egg.S2C_EGG_GAME_PLAY, err errorcode.ErrorCode) { - r := model.GenPetInfo(1, -1, -1, -1, 0, nil) - c.Service.Pet.PetAdd(r) - result = &egg.S2C_EGG_GAME_PLAY{HadTime: r.CatchTime, ListInfo: []model.ItemInfo{}, PetID: r.ID} +func (h Controller) EggGamePlay(data *egg.C2S_EGG_GAME_PLAY, c *player.Player) (result *egg.S2C_EGG_GAME_PLAY, err errorcode.ErrorCode) { + newPet := model.GenPetInfo(1, -1, -1, -1, 1, nil) + c.Service.Pet.PetAdd(newPet) + result = &egg.S2C_EGG_GAME_PLAY{HadTime: newPet.CatchTime, ListInfo: []model.ItemInfo{}, PetID: newPet.ID} return diff --git a/logic/controller/activce_leiyi.go b/logic/controller/activce_leiyi.go index c4b01d9f2..a0873b8b8 100644 --- a/logic/controller/activce_leiyi.go +++ b/logic/controller/activce_leiyi.go @@ -6,7 +6,7 @@ import ( "blazing/logic/service/player" ) -func (h Controller) Leiyi(data *leiyi.C2s_LEIYI_TRAIN_GET_STATUS, c *player.Player) (result *leiyi.S2C_LEIYI_TRAIN_GET_STATUS, err errorcode.ErrorCode) { +func (h Controller) GetLeiyiTrainStatus(data *leiyi.C2s_LEIYI_TRAIN_GET_STATUS, c *player.Player) (result *leiyi.S2C_LEIYI_TRAIN_GET_STATUS, err errorcode.ErrorCode) { result = &leiyi.S2C_LEIYI_TRAIN_GET_STATUS{} for i := 0; i < 6; i++ { diff --git a/logic/controller/active_xiyou_in1.go b/logic/controller/active_xiyou_in1.go index 75ca1d37a..4ca129e86 100644 --- a/logic/controller/active_xiyou_in1.go +++ b/logic/controller/active_xiyou_in1.go @@ -8,8 +8,11 @@ import ( "github.com/gogf/gf/v2/util/grand" ) -// Cacthpet 传送仓抓稀有 -func (h Controller) Cacthpet(data *pet.C2S_9756, c *player.Player) (result *pet.S2C_9756, err errorcode.ErrorCode) { +// CatchPet 传送仓抓稀有宠物 +// data: 空输入结构 +// c: 当前玩家对象 +// 返回: 捕捉结果(消耗的EV值)和错误码 +func (h Controller) CatchPet(data *pet.C2S_9756, c *player.Player) (result *pet.S2C_9756, err errorcode.ErrorCode) { result = &pet.S2C_9756{ UseEV: uint32(grand.N(1, 13)), } diff --git a/logic/controller/fight_leitai.go b/logic/controller/fight_leitai.go index 10f51099e..9b986231e 100644 --- a/logic/controller/fight_leitai.go +++ b/logic/controller/fight_leitai.go @@ -15,7 +15,7 @@ import ( // 如果星际擂台上无人,站到星际擂台的包 // 前端到后端无数据内容 空包 // 后端到前端无数据内容 空包 -// 都需要通过2419包广播更新擂台状态 +// ArenaSetOwner 都需要通过2419包广播更新擂台状态 func (h Controller) ArenaSetOwner(data *fight.ARENA_SET_OWENR, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { if !c.CanFight() { @@ -37,7 +37,7 @@ func (h Controller) ArenaSetOwner(data *fight.ARENA_SET_OWENR, c *player.Player) // 前端到后端无数据内容 空包 // 后端到前端无数据内容 空包 // 还是后端主动发送2503的包给双方前端后 等待前端加载完毕 主动发送2404包通知后端开始战斗 -// 并不会通知对方是否接受挑战。只要有人挑战就直接进入对战 +// ArenaFightOwner 并不会通知对方是否接受挑战。只要有人挑战就直接进入对战 func (h Controller) ArenaFightOwner(data *fight.ARENA_FIGHT_OWENR, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { if !c.CanFight() { @@ -107,7 +107,7 @@ func (h Controller) ArenaFightOwner(data *fight.ARENA_FIGHT_OWENR, c *player.Pla // ArenaGetInfo 获取星际擂台信息的包 进入空间站地图前端会发送请求包 或者 有人站到星际擂台上后 广播回包 // 前端到后端无数据内容 -// 后端到前端 +// ArenaGetInfo 后端到前端 func (h Controller) ArenaGetInfo(data *fight.ARENA_GET_INFO, c *player.Player) (result *space.ARENA, err errorcode.ErrorCode) { result = &c.GetSpace().Owner @@ -117,7 +117,7 @@ func (h Controller) ArenaGetInfo(data *fight.ARENA_GET_INFO, c *player.Player) ( // ArenaUpfight 放弃擂台挑战的包 // 前端到后端无数据内容 // 后端到前端无数据内容 -// 都需要通过2419包广播更新擂台状态 +// ArenaUpfight 都需要通过2419包广播更新擂台状态 func (h Controller) ArenaUpfight(data *fight.ARENA_UPFIGHT, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //原子操作,修改擂台状态 if atomic.LoadUint32(&c.GetSpace().Owner.UserID) != c.GetInfo().UserID { //说明已经有人了 @@ -139,7 +139,7 @@ func (h Controller) ArenaUpfight(data *fight.ARENA_UPFIGHT, c *player.Player) (r // 前端到后端无数据内容 // 后端到前端无数据内容 // public static const ARENA_OWENR_OUT:uint = 2423; -// 此包不清楚具体怎么触发 但已知此包为后端主动发送。不清楚什么情况下回用到 +// ArenaOwnerAcce 此包不清楚具体怎么触发 但已知此包为后端主动发送。不清楚什么情况下回用到 func (h Controller) ArenaOwnerAcce(data *fight.ARENA_OWENR_ACCE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { s := c.GetSpace() @@ -155,4 +155,4 @@ func (h Controller) ArenaOwnerAcce(data *fight.ARENA_OWENR_ACCE, c *player.Playe c.SendPackCmd(2419, &c.GetSpace().Owner) return nil, -1 -} \ No newline at end of file +} diff --git a/logic/controller/fight_pvp_king.go b/logic/controller/fight_pvp_king.go index becf45493..696bcfe1f 100644 --- a/logic/controller/fight_pvp_king.go +++ b/logic/controller/fight_pvp_king.go @@ -34,7 +34,7 @@ func (h Controller) PetMelee(data *fight.StartPetWarInboundInfo, c *player.Playe return } -func (h Controller) PETKing(data *fight.PetKingJoinInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { +func (h Controller) PetKing(data *fight.PetKingJoinInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { c.Fightinfo.Status = info.BattleMode.PET_TOPLEVEL diff --git a/logic/controller/fight_tawor.go b/logic/controller/fight_tawor.go index 3eb45cd99..90557d832 100644 --- a/logic/controller/fight_tawor.go +++ b/logic/controller/fight_tawor.go @@ -11,7 +11,15 @@ import ( "github.com/jinzhu/copier" ) -func (h Controller) FRESH_CHOICE_FIGHT_LEVEL(data *fight.C2S_FRESH_CHOICE_FIGHT_LEVEL, c *player.Player) (result *fight.S2C_FreshChoiceLevelRequestInfo, err errorcode.ErrorCode) { +// FreshChoiceFightLevel 处理玩家选择挑战模式(试炼之塔或勇者之塔) +// 根据不同的CMD值设置玩家的挑战状态和地图信息,并返回当前挑战层级信息 +// 参数: +// data: 客户端发送的挑战层级选择请求数据,包含CMD和挑战层级 +// c: 玩家对象,包含玩家的详细信息 +// 返回值: +// result: 服务器返回给客户端的挑战层级信息,包含当前战斗层级和Boss ID +// err: 错误码,表示处理过程中是否出现错误 +func (h Controller) FreshChoiceFightLevel(data *fight.C2S_FRESH_CHOICE_FIGHT_LEVEL, c *player.Player) (result *fight.S2C_FreshChoiceLevelRequestInfo, err errorcode.ErrorCode) { result = &fight.S2C_FreshChoiceLevelRequestInfo{} @@ -25,8 +33,11 @@ func (h Controller) FRESH_CHOICE_FIGHT_LEVEL(data *fight.C2S_FRESH_CHOICE_FIGHT_ c.Info.MapID = 600 result.CurFightLevel = uint(c.Info.CurrentStage) } + // 设置Boss ID为固定值10 result.BossId = []uint32{10} + // 重置玩家的Canmon标志位为0,表示可以刷怪 atomic.StoreUint32(&c.Canmon, 0) + // 在函数结束时将玩家传送到对应地图 defer c.GetSpace().EnterMap(c) return result, 0 } diff --git a/logic/controller/item_buy.go b/logic/controller/item_buy.go index 08d08c8fe..71932bd91 100644 --- a/logic/controller/item_buy.go +++ b/logic/controller/item_buy.go @@ -53,8 +53,8 @@ func (h Controller) BuyItem(data *item.BuyInboundInfo, c *player.Player) (result return &item.BuyOutboundInfo{Coins: c.Info.Coins}, 0 } -// BuyMItem 批量购买道具 -func (h Controller) BuyMItem(data *item.BuyMultiInboundInfo, c *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) { +// BuyMultipleItems 批量购买道具 +func (h Controller) BuyMultipleItems(data *item.BuyMultiInboundInfo, c *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) { for _, itemID := range data.ItemIds { itemInfo, exists := xmlres.ItemsMAP[int(itemID)] if !exists { diff --git a/logic/controller/item_sale.go b/logic/controller/item_sale.go index c2a9960d6..b3fbbb6c8 100644 --- a/logic/controller/item_sale.go +++ b/logic/controller/item_sale.go @@ -10,14 +10,18 @@ import ( "github.com/gogf/gf/v2/util/gconv" ) -func (h Controller) ITEM_SALE(data *item.C2S_ITEM_SALE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { +// ItemSale 出售道具 +// data: 包含道具ID和数量的输入信息 +// c: 当前玩家对象 +// 返回: 空结果和错误码 +func (h Controller) ItemSale(data *item.C2S_ITEM_SALE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { if c.Service.Item.CheakItem(data.ItemId) < data.Amount { return nil, errorcode.ErrorCodes.ErrSystemError } - if xmlres.ItemsMAP[int(data.ItemId)].SellPrice != 0 { - c.Info.Coins += uint32(int64(data.Amount) * int64(xmlres.ItemsMAP[int(data.ItemId)].SellPrice)) - + itemConfig := xmlres.ItemsMAP[int(data.ItemId)] + if itemConfig.SellPrice != 0 { + c.Info.Coins += uint32(int64(data.Amount) * int64(itemConfig.SellPrice)) } c.Service.Item.UPDATE(data.ItemId, -gconv.Int(data.Amount)) return result, 0 diff --git a/logic/controller/item_use.go b/logic/controller/item_use.go index 23172564e..0e70da1c2 100644 --- a/logic/controller/item_use.go +++ b/logic/controller/item_use.go @@ -10,28 +10,34 @@ import ( "github.com/jinzhu/copier" ) -func (h Controller) UserItemList(data *item.ItemListInboundInfo, c *player.Player) (result *item.ItemListOutboundInfo, err errorcode.ErrorCode) { +// GetUserItemList 获取用户道具列表 +// data: 包含分页参数的输入信息 +// c: 当前玩家对象 +// 返回: 道具列表和错误码 +func (h Controller) GetUserItemList(data *item.ItemListInboundInfo, c *player.Player) (result *item.ItemListOutboundInfo, err errorcode.ErrorCode) { result = &item.ItemListOutboundInfo{} result.ItemList = make([]model.SingleItemInfo, 0) - item := c.Service.Item.Get(data.Param1, data.Param2) - for _, v := range item { - var vv model.SingleItemInfo - vv.ItemId = v.ItemId - vv.ItemCnt = v.ItemCnt - vv.LeftTime = 360000 - if vv.ItemCnt != 0 { - result.ItemList = append(result.ItemList, vv) + items := c.Service.Item.Get(data.Param1, data.Param2) + for _, itemData := range items { + var itemInfo model.SingleItemInfo + itemInfo.ItemId = itemData.ItemId + itemInfo.ItemCnt = itemData.ItemCnt + itemInfo.LeftTime = 360000 + if itemInfo.ItemCnt != 0 { + result.ItemList = append(result.ItemList, itemInfo) } - } - return result, 0 } -func (h Controller) ItemUsePet(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *player.Player) (result *item.S2C_USE_PET_ITEM_OUT_OF_FIGHT, err errorcode.ErrorCode) { - _, onpet, ok := c.FindPet(data.CatchTime) - if !ok { +// UsePetItemOutOfFight 战斗外使用宠物道具 +// data: 包含道具ID和宠物捕获时间的输入信息 +// c: 当前玩家对象 +// 返回: 使用后的宠物信息和错误码 +func (h Controller) UsePetItemOutOfFight(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *player.Player) (result *item.S2C_USE_PET_ITEM_OUT_OF_FIGHT, err errorcode.ErrorCode) { + _, currentPet, found := c.FindPet(data.CatchTime) + if !found { return nil, errorcode.ErrorCodes.Err10401 } @@ -40,48 +46,50 @@ func (h Controller) ItemUsePet(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *play } if data.ItemID == 300036 { - //神经元需要特殊处理 - - if onpet.OldCatchTime == 0 { + // 神经元需要特殊处理 + if currentPet.OldCatchTime == 0 { return nil, errorcode.ErrorCodes.ErrSystemError } - oldpetc := onpet.CatchTime - oldpet := c.Service.Pet.PetInfo_One_Unscoped(onpet.OldCatchTime) + oldPetCatchTime := currentPet.CatchTime + oldPet := c.Service.Pet.PetInfo_One_Unscoped(currentPet.OldCatchTime) - copier.CopyWithOption(onpet, oldpet.Data, copier.Option{DeepCopy: true}) - onpet.CatchTime = oldpetc - onpet.EffectInfo = oldpet.Data.EffectInfo + copier.CopyWithOption(currentPet, oldPet.Data, copier.Option{DeepCopy: true}) + currentPet.CatchTime = oldPetCatchTime + currentPet.EffectInfo = oldPet.Data.EffectInfo } else { - hd := item.PetItemRegistry.GetHandler(data.ItemID) - if hd == nil { + handler := item.PetItemRegistry.GetHandler(data.ItemID) + if handler == nil { return nil, errorcode.ErrorCodes.ErrSystemError } - r := hd(data.ItemID, onpet) - if !r { + success := handler(data.ItemID, currentPet) + if !success { return nil, errorcode.ErrorCodes.ErrSystemError } - } c.Service.Item.UPDATE(data.ItemID, -1) result = &item.S2C_USE_PET_ITEM_OUT_OF_FIGHT{} - onpet.CalculatePetPane(false) - copier.Copy(&result, onpet) + currentPet.CalculatePetPane(false) + copier.Copy(&result, currentPet) return result, 0 } +// ResetNature 重置宠物性格 +// data: 包含道具ID和宠物捕获时间的输入信息 +// c: 当前玩家对象 +// 返回: 无数据和错误码 func (h Controller) ResetNature(data *item.C2S_PET_RESET_NATURE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { if c.Service.Item.CheakItem(data.ItemId) <= 0 { return nil, errorcode.ErrorCodes.ErrSystemError } - _, onpet, ok := c.FindPet(data.CatchTime) - if !ok { + _, currentPet, found := c.FindPet(data.CatchTime) + if !found { return nil, errorcode.ErrorCodes.Err10401 } - onpet.Nature = data.Nature - onpet.CalculatePetPane(false) + currentPet.Nature = data.Nature + currentPet.CalculatePetPane(false) c.Service.Item.UPDATE(data.ItemId, -1) return result, 0 } diff --git a/logic/controller/login_getserver.go b/logic/controller/login_getserver.go index a0e2180b5..4d7b2f169 100644 --- a/logic/controller/login_getserver.go +++ b/logic/controller/login_getserver.go @@ -20,8 +20,8 @@ func fetchData() (any, error) { return ServerList, nil } -// 处理命令: 105 -func (h *Controller) COMMEND_ONLINE(data *user.SidInfo, c gnet.Conn) (result *rpc.CommendSvrInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +// GetServerOnline 处理命令: 105 +func (h Controller) GetServerOnline(data *user.SidInfo, c gnet.Conn) (result *rpc.CommendSvrInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 result = rpc.NewInInfo() if service.NewBaseSysUserService().GetPerson(data.Head.UserID).Debug == 1 { diff --git a/logic/controller/login_main.go b/logic/controller/login_main.go index afb195196..bbf08bc0c 100644 --- a/logic/controller/login_main.go +++ b/logic/controller/login_main.go @@ -18,48 +18,47 @@ import ( "github.com/panjf2000/gnet/v2" ) -// 处理命令: 1001 -func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user.LoginMSInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - tt := data.CheakSession() - if !tt { +// Login 处理命令: 1001 +func (h Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user.LoginMSInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 + isSessionValid := data.CheakSession() + if !isSessionValid { defer c.Close() return } - err1 := h.RPCClient.Kick(data.Head.UserID) //先踢人 - if err1 != nil { + kickErr := h.RPCClient.Kick(data.Head.UserID) //先踢人 + if kickErr != nil { fmt.Println("踢人失败", err) } cool.Loger.Info(context.TODO(), "踢人请求完成,继续登录流程") share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器 - t := player.GetPlayer(c, data.Head.UserID) - if t == nil { + currentPlayer := player.GetPlayer(c, data.Head.UserID) + if currentPlayer == nil { cool.Loger.Error(context.Background(), "获取玩家失败", data.Head.UserID) defer c.Close() return } - t.Service = blservice.NewUserService(data.Head.UserID) + currentPlayer.Service = blservice.NewUserService(data.Head.UserID) - t.Info = t.Service.Info.Personself() + currentPlayer.Info = currentPlayer.Service.Info.Personself() - if t.Info == nil { + if currentPlayer.Info == nil { defer c.Close() return } - t.Info.UserID = data.Head.UserID - t.Logintime = uint32(time.Now().Unix()) //保存时间戳 - + currentPlayer.Info.UserID = data.Head.UserID + currentPlayer.Logintime = uint32(time.Now().Unix()) //保存时间戳 - t.CompleteLogin() //通知客户端登录成功 + currentPlayer.CompleteLogin() //通知客户端登录成功 result = user.NewOutInfo() //设置登录消息 - result.PlayerInfo = *t.Info - defer space.GetSpace(t.Info.MapID).EnterMap(t) + result.PlayerInfo = *currentPlayer.Info + defer space.GetSpace(currentPlayer.Info.MapID).EnterMap(currentPlayer) return result, 0 diff --git a/logic/controller/map.go b/logic/controller/map.go index 356d354e4..92814a3f5 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -15,7 +15,7 @@ import ( "github.com/jinzhu/copier" ) -func (h *Controller) MapEnter(data *space.InInfo, c *player.Player) (result *info.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h Controller) EnterMap(data *space.InInfo, c *player.Player) (result *info.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 c.Info.MapID = data.MapId //登录地图 c.GetSpace().User.Store(c.Info.UserID, c) //添加玩家 @@ -28,7 +28,7 @@ func (h *Controller) MapEnter(data *space.InInfo, c *player.Player) (result *inf return result, 0 } -func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *maphot.OutInfo, err errorcode.ErrorCode) { +func (h Controller) GetMapHot(data *maphot.InInfo, c *player.Player) (result *maphot.OutInfo, err errorcode.ErrorCode) { result = &maphot.OutInfo{ @@ -37,7 +37,7 @@ func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *mapho return } -func (h *Controller) MapLeave(data *space.LeaveMapInboundInfo, c *player.Player) (result *info.LeaveMapOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h Controller) LeaveMap(data *space.LeaveMapInboundInfo, c *player.Player) (result *info.LeaveMapOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 atomic.StoreUint32(&c.Canmon, 0) //data.Broadcast(c.Info.MapID, info.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播 @@ -51,7 +51,7 @@ func (h *Controller) MapLeave(data *space.LeaveMapInboundInfo, c *player.Player) //c.Info.MapID = 0 // 重置当前地图 return } -func (h *Controller) MapList(data *space.ListMapPlayerInboundInfo, c *player.Player) (result *info.ListMapPlayerOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h Controller) GetMapPlayerList(data *space.ListMapPlayerInboundInfo, c *player.Player) (result *info.ListMapPlayerOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 atomic.StoreUint32(&c.Canmon, 2) c.MapNPC.Reset(5 * time.Second) result = &info.ListMapPlayerOutboundInfo{ @@ -60,7 +60,7 @@ func (h *Controller) MapList(data *space.ListMapPlayerInboundInfo, c *player.Pla return } -func (h *Controller) Attack_Boss(data *space.AttackBossInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h Controller) AttackBoss(data *space.AttackBossInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 if atomic.LoadInt32(&c.GetSpace().MapBossInfo.Hp) > 0 { atomic.AddInt32(&c.GetSpace().MapBossInfo.Hp, -1) diff --git a/logic/controller/nono.go b/logic/controller/nono.go index 811e8e6a1..4696a9ab8 100644 --- a/logic/controller/nono.go +++ b/logic/controller/nono.go @@ -8,7 +8,7 @@ import ( "github.com/jinzhu/copier" ) -func (h *Controller) NonoFollowOrHome(data *nono.NonoFollowOrHomeInInfo, c *player.Player) (result *nono.NonoFollowOutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h Controller) NonoFollowOrHome(data *nono.NonoFollowOrHomeInInfo, c *player.Player) (result *nono.NonoFollowOutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 c.Info.NONO.Flag = data.Flag result = &nono.NonoFollowOutInfo{ @@ -23,7 +23,7 @@ func (h *Controller) NonoFollowOrHome(data *nono.NonoFollowOrHomeInInfo, c *play return } -// 获取nono信息 +// GetNonoInfo 获取nono信息 func (h *Controller) GetNonoInfo(data *nono.NonoInboundInfo, c *player.Player) (result *nono.NonoOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 result = &nono.NonoOutboundInfo{} diff --git a/logic/controller/pet_COLLECT.go b/logic/controller/pet_COLLECT.go index 3579d8864..402cbb877 100644 --- a/logic/controller/pet_COLLECT.go +++ b/logic/controller/pet_COLLECT.go @@ -6,7 +6,7 @@ import ( "blazing/logic/service/player" ) -func (h *Controller) IS_COLLECT( +func (h Controller) IsCollect( data *pet.C2S_IS_COLLECT, c *player.Player) (result *pet.S2C_IS_COLLECT, err errorcode.ErrorCode) { //这个时候player应该是空的 result = &pet.S2C_IS_COLLECT{ ID: data.Type, diff --git a/logic/controller/pet_ev.go b/logic/controller/pet_ev.go index 089e95a98..ce8435b78 100644 --- a/logic/controller/pet_ev.go +++ b/logic/controller/pet_ev.go @@ -8,41 +8,44 @@ import ( "github.com/samber/lo" ) -func (h Controller) PetEVdiy(data *pet.PetEV, c *player.Player) (result *pet.S2C_50001, err errorcode.ErrorCode) { - _, onpet, ok := c.FindPet(data.CacthTime) - if !ok { +// PetEVDiy 自定义分配宠物努力值(EV) +// data: 包含宠物捕获时间和EV分配数据的输入信息 +// c: 当前玩家对象 +// 返回: 分配结果和错误码 +func (h Controller) PetEVDiy(data *pet.PetEV, c *player.Player) (result *pet.S2C_50001, err errorcode.ErrorCode) { + _, currentPet, found := c.FindPet(data.CacthTime) + if !found { return nil, errorcode.ErrorCodes.Err10401 } - //分配超过510的数据 + // 分配超过510的数据 if lo.Sum(data.EVs[:]) > 510 { return nil, errorcode.ErrorCodes.Err10401 } - for i, v := range data.EVs { - - //分配超过255的数据 - if v > 255 { + for i, evValue := range data.EVs { + // 分配超过255的数据 + if evValue > 255 { return nil, errorcode.ErrorCodes.Err10401 } - //分配比之前点数少的 - if v < onpet.Ev[i] { + // 分配比之前点数少的 + if evValue < currentPet.Ev[i] { return nil, errorcode.ErrorCodes.Err10401 } } - if lo.Sum(data.EVs[:]) < lo.Sum(onpet.Ev[:]) { + if lo.Sum(data.EVs[:]) < lo.Sum(currentPet.Ev[:]) { return nil, errorcode.ErrorCodes.Err10401 } - USEEV1 := lo.Sum(data.EVs[:]) - lo.Sum(onpet.Ev[:]) - //加的比池子还多 - if USEEV1 > c.Info.EVPool { + usedEV := lo.Sum(data.EVs[:]) - lo.Sum(currentPet.Ev[:]) + // 加的比池子还多 + if usedEV > c.Info.EVPool { return nil, errorcode.ErrorCodes.Err10401 } - onpet.Ev = data.EVs - onpet.CalculatePetPane(false) - c.Info.EVPool -= USEEV1 + currentPet.Ev = data.EVs + currentPet.CalculatePetPane(false) + c.Info.EVPool -= usedEV result = &pet.S2C_50001{} - result.UseEV = USEEV1 + result.UseEV = usedEV return result, 0 } diff --git a/logic/controller/pet_info.go b/logic/controller/pet_info.go index 8f4e07c68..167fecdcb 100644 --- a/logic/controller/pet_info.go +++ b/logic/controller/pet_info.go @@ -12,96 +12,96 @@ import ( "github.com/jinzhu/copier" ) -// 获取精灵信息 -func (h *Controller) GetPetInfo( +// GetPetInfo 获取精灵信息 +// data: 包含精灵捕获时间的输入信息 +// c: 当前玩家对象 +// 返回: 精灵信息和错误码 +func (h Controller) GetPetInfo( data *pet.InInfo, c *player.Player) (result *pet.OutInfo, - err errorcode.ErrorCode) { //这个时候player应该是空的 - _, tet, ok := c.FindPet(data.CatchTime) + err errorcode.ErrorCode) { + _, petInfo, found := c.FindPet(data.CatchTime) - if ok { + if found { result = &pet.OutInfo{ - PetInfo: *tet, + PetInfo: *petInfo, } return result, 0 - } else { - result = &pet.OutInfo{ - PetInfo: c.Service.Pet.PetInfo_One(data.CatchTime).Data, - } - } - + result = &pet.OutInfo{ + PetInfo: c.Service.Pet.PetInfo_One(data.CatchTime).Data, + } return result, 0 } -// 获取仓库列表 -func (h *Controller) GetPetList( +// GetPetList 获取仓库列表 +// data: 空输入结构 +// c: 当前玩家对象 +// 返回: 精灵列表和错误码 +func (h Controller) GetPetList( data *pet.GetPetListInboundEmpty, c *player.Player) (result *pet.GetPetListOutboundInfo, - err errorcode.ErrorCode) { //这个时候player应该是空的 + err errorcode.ErrorCode) { result = &pet.GetPetListOutboundInfo{} - tt := c.Service.Pet.PetInfo(0) //获得未放生的精灵 - result.ShortInfoList = make([]pet.PetShortInfo, len(tt)) - for i, v := range tt { - - copier.Copy(&result.ShortInfoList[i], &v.Data) - + petList := c.Service.Pet.PetInfo(0) // 获取未放生的精灵 + result.ShortInfoList = make([]pet.PetShortInfo, len(petList)) + for i, petItem := range petList { + copier.Copy(&result.ShortInfoList[i], &petItem.Data) } return result, 0 - } -// 获取放生列表 -func (h *Controller) PET_ROWEI_LIST( +// GetPetReleaseList 获取放生列表 +// data: 空输入结构 +// c: 当前玩家对象 +// 返回: 放生精灵列表和错误码 +func (h Controller) GetPetReleaseList( data *pet.GetPetListFreeInboundEmpty, c *player.Player) (result *pet.GetPetListOutboundInfo, - err errorcode.ErrorCode) { //这个时候player应该是空的 + err errorcode.ErrorCode) { result = &pet.GetPetListOutboundInfo{} - tt := c.Service.Pet.PetInfo(1) //获得未放生的精灵 - result.ShortInfoList = make([]pet.PetShortInfo, len(tt)) - for i, v := range tt { - - copier.Copy(&result.ShortInfoList[i], &v.Data) - + petList := c.Service.Pet.PetInfo(1) // 获取已放生的精灵 + result.ShortInfoList = make([]pet.PetShortInfo, len(petList)) + for i, petItem := range petList { + copier.Copy(&result.ShortInfoList[i], &petItem.Data) } return result, 0 - } -// 放生包 -func (h *Controller) PET_ROWEI( - data *pet.PET_ROWEI, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - - c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { - - _, _, ok := c.FindPet(data.CatchTime) - r := xmlres.PetMAP[int(data.ID)].FreeForbidden - //如果背包没找到,再放入背包 - if !ok && t.CatchTime != 0 && r == 0 { - t.Free = 1 +// PetReleaseToWarehouse 将精灵从仓库包中放生 +// data: 包含精灵ID和捕获时间的输入信息 +// c: 当前玩家对象 +// 返回: 无数据和错误码 +func (h Controller) PetReleaseToWarehouse( + data *pet.PET_ROWEI, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { + c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(pet *model.PetEX) { + _, _, inBag := c.FindPet(data.CatchTime) + freeForbidden := xmlres.PetMAP[int(data.ID)].FreeForbidden + // 如果背包没找到,再放入背包 + if !inBag && pet.CatchTime != 0 && freeForbidden == 0 { + pet.Free = 1 } else { err = errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse } - }) return nil, err } -// 领回包 -func (h *Controller) PET_RETRIEVE( +// PetRetrieveFromWarehouse 领回包 +func (h Controller) PetRetrieveFromWarehouse( data *pet.PET_RETRIEVE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { + c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(pet *model.PetEX) { _, _, ok := c.FindPet(data.CatchTime) //如果背包没找到,再放入背包 - if !ok && t.CatchTime != 0 { - t.Free = 0 + if !ok && pet.CatchTime != 0 { + pet.Free = 0 } }) @@ -110,8 +110,8 @@ func (h *Controller) PET_RETRIEVE( } -// 精灵背包仓库切换 -func (h *Controller) PetRelease( +// TogglePetBagWarehouse 精灵背包仓库切换 +func (h Controller) TogglePetBagWarehouse( data *pet.PetReleaseInboundInfo, c *player.Player) ( result *pet.PetReleaseOutboundInfo, @@ -128,10 +128,10 @@ func (h *Controller) PetRelease( switch data.Flag { case 0: - index, v, ok := c.FindPet(data.CatchTime) + index, pet, ok := c.FindPet(data.CatchTime) if ok { - c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { - t.Data = *v + c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petData *model.PetEX) { + petData.Data = *pet //t.InBag = 0 }) @@ -142,15 +142,15 @@ func (h *Controller) PetRelease( case 1: if len(c.Info.PetList) < 6 { //todo 背包 - c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { + c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petData *model.PetEX) { _, _, ok := c.FindPet(data.CatchTime) //如果背包没找到,再放入背包 - if !ok && t.CatchTime != 0 { + if !ok && petData.CatchTime != 0 { //t.InBag = 1 - c.Info.PetList = append(c.Info.PetList, t.Data) - result.PetInfo = t.Data + c.Info.PetList = append(c.Info.PetList, petData.Data) + result.PetInfo = petData.Data } }) @@ -165,14 +165,14 @@ func (h *Controller) PetRelease( return result, 0 } -// 精灵展示 -func (h *Controller) PlayerShowPet( +// PlayerShowPet 精灵展示 +func (h Controller) PlayerShowPet( data *pet.PetShowInboundInfo, c *player.Player) (result *pet.PetShowOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 result = &pet.PetShowOutboundInfo{} - _, onpet, ok := c.FindPet(data.CatchTime) + _, currentPet, ok := c.FindPet(data.CatchTime) if ok { - copier.Copy(&result, onpet) + copier.Copy(&result, currentPet) result.Flag = data.Flag result.UserID = data.Head.UserID defer c.GetSpace().Broadcast(c, data.Head.CMD, result) @@ -181,16 +181,16 @@ func (h *Controller) PlayerShowPet( } -// 单体治疗 -func (h *Controller) PetOneCure( +// PetOneCure 单体治疗 +func (h Controller) PetOneCure( data *pet.PetOneCureInboundInfo, c *player.Player) (result *pet.PetOneCureOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 if c.GetSpace().Owner.UserID == c.Info.UserID { return result, errorcode.ErrorCodes.ErrChampionCannotHeal } - _, onpet, ok := c.FindPet(data.CatchTime) + _, currentPet, ok := c.FindPet(data.CatchTime) if ok { - defer onpet.Cure() + defer currentPet.Cure() } @@ -200,8 +200,8 @@ func (h *Controller) PetOneCure( } -// 精灵首发 -func (h *Controller) PetFirst( +// PetFirst 精灵首发 +func (h Controller) PetFirst( data *pet.PetDefaultInboundInfo, c *player.Player) (result *pet.PetDefaultOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 //擂台住不能换精灵 if c.GetSpace().Owner.UserID == c.Info.UserID { @@ -226,10 +226,10 @@ func (h *Controller) PetFirst( // 返回:索引、元素指针、是否找到 func (h Controller) SetPetExp(data *pet.PetSetExpInboundInfo, c *player.Player) (result *pet.PetSetExpOutboundInfo, err errorcode.ErrorCode) { - _, onpet, ok := c.FindPet(data.CatchTime) - if ok && onpet.Level < 100 { + _, currentPet, ok := c.FindPet(data.CatchTime) + if ok && currentPet.Level < 100 { - c.AddPetExp(onpet, data.Exp) + c.AddPetExp(currentPet, data.Exp) return &pet.PetSetExpOutboundInfo{ Exp: c.Info.ExpPool, }, 0 @@ -240,8 +240,8 @@ func (h Controller) SetPetExp(data *pet.PetSetExpInboundInfo, c *player.Player) }, errorcode.ErrorCodes.ErrSystemError } -// 精灵图鉴 -func (h Controller) PetBargeList(data *pet.PetBargeListInboundInfo, c *player.Player) (result *pet.PetBargeListOutboundInfo, err errorcode.ErrorCode) { +// GetPetBargeList 精灵图鉴 +func (h Controller) GetPetBargeList(data *pet.PetBargeListInboundInfo, c *player.Player) (result *pet.PetBargeListOutboundInfo, err errorcode.ErrorCode) { return &pet.PetBargeListOutboundInfo{ PetBargeList: make([]pet.PetBargeListInfo, 0), diff --git a/logic/controller/pet_skill.go b/logic/controller/pet_skill.go index b67124447..919a0b687 100644 --- a/logic/controller/pet_skill.go +++ b/logic/controller/pet_skill.go @@ -20,13 +20,13 @@ func (h Controller) SetPetSkill(data *pet.ChangeSkillInfo, c *player.Player) (re c.Info.Coins -= setSkillCost - _, onpet, ok := c.FindPet(data.CatchTime) + _, currentPet, ok := c.FindPet(data.CatchTime) if !ok { return nil, errorcode.ErrorCodes.ErrSystemBusy } // 检查要替换的技能是否已存在 - _, _, exists := utils.FindWithIndex(onpet.SkillList, func(item model.SkillInfo) bool { + _, _, exists := utils.FindWithIndex(currentPet.SkillList, func(item model.SkillInfo) bool { return item.ID == data.ReplaceSkill }) if exists { @@ -34,12 +34,12 @@ func (h Controller) SetPetSkill(data *pet.ChangeSkillInfo, c *player.Player) (re } // 查找要学习的技能并替换 - _, hasSkill, ok := utils.FindWithIndex(onpet.SkillList, func(item model.SkillInfo) bool { + _, targetSkill, ok := utils.FindWithIndex(currentPet.SkillList, func(item model.SkillInfo) bool { return item.ID == data.HasSkill }) if ok { - hasSkill.ID = data.ReplaceSkill - hasSkill.PP = uint32(xmlres.SkillMap[int(hasSkill.ID)].MaxPP) + targetSkill.ID = data.ReplaceSkill + targetSkill.PP = uint32(xmlres.SkillMap[int(targetSkill.ID)].MaxPP) } return &pet.ChangeSkillOutInfo{ @@ -47,8 +47,8 @@ func (h Controller) SetPetSkill(data *pet.ChangeSkillInfo, c *player.Player) (re }, 0 } -// SkillSort 排序宠物技能,消耗50赛尔豆 -func (h Controller) SkillSort(data *pet.C2S_Skill_Sort, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { +// SortPetSkills 排序宠物技能,消耗50赛尔豆 +func (h Controller) SortPetSkills(data *pet.C2S_Skill_Sort, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { const skillSortCost = 50 if !c.UseCoins(skillSortCost) { @@ -57,18 +57,18 @@ func (h Controller) SkillSort(data *pet.C2S_Skill_Sort, c *player.Player) (resul c.Info.Coins -= skillSortCost - _, onpet, ok := c.FindPet(data.CapTm) + _, currentPet, ok := c.FindPet(data.CapTm) if ok { var newSkillList []model.SkillInfo for _, skillID := range data.Skill { - _, skill, found := utils.FindWithIndex(onpet.SkillList, func(item model.SkillInfo) bool { + _, skill, found := utils.FindWithIndex(currentPet.SkillList, func(item model.SkillInfo) bool { return item.ID == skillID }) if found { newSkillList = append(newSkillList, *skill) } } - onpet.SkillList = newSkillList + currentPet.SkillList = newSkillList } return nil, 0 diff --git a/logic/controller/room_buy.go b/logic/controller/room_buy.go index 004d22337..81193bd11 100644 --- a/logic/controller/room_buy.go +++ b/logic/controller/room_buy.go @@ -7,21 +7,22 @@ import ( "blazing/logic/service/room" ) -// 购买家具 -func (h Controller) BUY_FITMENT(data *room.C2S_BUY_FITMENT, c *player.Player) (result *room.S2C_BUY_FITMENT, err errorcode.ErrorCode) { - +// BuyFitment 购买基地家具 +// data: 包含家具ID和购买数量的输入信息 +// c: 当前玩家对象 +// 返回: 购买结果和错误码 +func (h Controller) BuyFitment(data *room.C2S_BUY_FITMENT, c *player.Player) (result *room.S2C_BUY_FITMENT, err errorcode.ErrorCode) { result = &room.S2C_BUY_FITMENT{} - used := xmlres.ItemsMAP[int(data.ID)].Price * int(data.Count) + itemConfig := xmlres.ItemsMAP[int(data.ID)] + totalCost := itemConfig.Price * int(data.Count) - if !c.UseCoins(uint32(used)) { + if !c.UseCoins(uint32(totalCost)) { return nil, errorcode.ErrorCodes.ErrSunDouInsufficient10016 - } c.Service.Room.Add(data.ID, data.Count) - c.Info.Coins -= uint32(used) + c.Info.Coins -= uint32(totalCost) result.ID = data.ID result.Coins = c.Info.Coins - return } diff --git a/logic/controller/room_info.go b/logic/controller/room_info.go index 514b1fc9f..2bb49863f 100644 --- a/logic/controller/room_info.go +++ b/logic/controller/room_info.go @@ -11,60 +11,65 @@ import ( "github.com/jinzhu/copier" ) -// 获取基地物品 -func (h Controller) OnFitmentUsering(data *room.FitmentUseringInboundInfo, c *player.Player) (result *room.FitmentUseringOutboundInfo, err errorcode.ErrorCode) { - +// GetFitmentUsing 获取基地展示的家具物品 +// data: 包含目标用户ID的输入信息 +// c: 当前玩家对象 +// 返回: 基地家具信息和错误码 +func (h Controller) GetFitmentUsing(data *room.FitmentUseringInboundInfo, c *player.Player) (result *room.FitmentUseringOutboundInfo, err errorcode.ErrorCode) { result = &room.FitmentUseringOutboundInfo{UserId: c.Info.UserID, RoomId: data.TargetUserID} result.Fitments = make([]model.FitmentShowInfo, 0) result.Fitments = append(result.Fitments, model.FitmentShowInfo{Id: 500001, Status: 1, X: 1, Y: 1, Dir: 1}) - r := c.Service.Room.Get(data.TargetUserID) - result.Fitments = append(result.Fitments, r.PlacedItems...) - + roomInfo := c.Service.Room.Get(data.TargetUserID) + result.Fitments = append(result.Fitments, roomInfo.PlacedItems...) return } -// 获取基地展示精灵 -func (h Controller) OnGetRoomPetShowInfo(data *room.PetRoomListInboundInfo, c *player.Player) (result *room.PetRoomListOutboundInfo, err errorcode.ErrorCode) { +// GetRoomPetShowInfo 获取基地展示的精灵列表 +// data: 包含目标用户ID的输入信息 +// c: 当前玩家对象 +// 返回: 精灵展示列表和错误码 +func (h Controller) GetRoomPetShowInfo(data *room.PetRoomListInboundInfo, c *player.Player) (result *room.PetRoomListOutboundInfo, err errorcode.ErrorCode) { result = &room.PetRoomListOutboundInfo{} result.Pets = make([]pet.PetShortInfo, 0) - r := c.Service.Room.Get(data.TargetUserID) - for _, v := range r.ShowPokemon { - pet12 := c.Service.Pet.PetInfo_One_ohter(data.TargetUserID, v) - if pet12.Data.ID == 0 { + roomInfo := c.Service.Room.Get(data.TargetUserID) + for _, catchTime := range roomInfo.ShowPokemon { + petInfo := c.Service.Pet.PetInfo_One_ohter(data.TargetUserID, catchTime) + if petInfo.Data.ID == 0 { continue } - var pet1 pet.PetShortInfo - copier.Copy(&pet1, &pet12.Data) - if pet12.ID != 0 { - result.Pets = append(result.Pets, pet1) + var petShortInfo pet.PetShortInfo + copier.Copy(&petShortInfo, &petInfo.Data) + if petInfo.ID != 0 { + result.Pets = append(result.Pets, petShortInfo) } - } - return } -// 获取自己房间的家具 -func (h Controller) OnGetFitmentAll(data *room.FitmentAllInboundEmpty, c *player.Player) (result *room.FitmentAllOutboundInfo, err errorcode.ErrorCode) { +// GetAllFurniture 获取玩家的所有家具 +// data: 空输入结构 +// c: 当前玩家对象 +// 返回: 玩家所有家具列表和错误码 +func (h Controller) GetAllFurniture(data *room.FitmentAllInboundEmpty, c *player.Player) (result *room.FitmentAllOutboundInfo, err errorcode.ErrorCode) { result = &room.FitmentAllOutboundInfo{} result.Fitments = make([]room.FitmentItemInfo, 0) - r := c.Service.Room.Get(c.Info.UserID) - - for k, v := range r.OwnedItems { - - result.Fitments = append(result.Fitments, room.FitmentItemInfo{Id: k, AllCount: v, UsedCount: r.UserItems[k]}) + roomData := c.Service.Room.Get(c.Info.UserID) + for itemID, count := range roomData.OwnedItems { + result.Fitments = append(result.Fitments, room.FitmentItemInfo{Id: itemID, AllCount: count, UsedCount: roomData.UserItems[itemID]}) } - return } -func (h Controller) RoomPetInfo(data *room.C2S_RoomPetInfo, c *player.Player) (result *pet.RoomPetInfo, err errorcode.ErrorCode) { - r := c.Service.Pet.PetInfo_One_ohter(data.UserID, data.CatchTime) +// GetRoomPetInfo 获取玩家跟随精灵的信息 +// data: 包含用户ID和精灵捕获时间的输入信息 +// c: 当前玩家对象 +// 返回: 精灵详细信息和错误码 +func (h Controller) GetRoomPetInfo(data *room.C2S_RoomPetInfo, c *player.Player) (result *pet.RoomPetInfo, err errorcode.ErrorCode) { + petInfo := c.Service.Pet.PetInfo_One_ohter(data.UserID, data.CatchTime) result = &pet.RoomPetInfo{} - copier.CopyWithOption(result, &r.Data, copier.Option{DeepCopy: true}) + copier.CopyWithOption(result, &petInfo.Data, copier.Option{DeepCopy: true}) result.OwnerId = data.UserID - return } diff --git a/logic/controller/room_set.go b/logic/controller/room_set.go index 0252244fb..c998b3ad7 100644 --- a/logic/controller/room_set.go +++ b/logic/controller/room_set.go @@ -9,35 +9,37 @@ import ( "github.com/jinzhu/copier" ) -// 基地设置 -func (h Controller) SET_FITMENT(data *room.SET_FITMENT, c *player.Player) (result *room.NullInfo, err errorcode.ErrorCode) { - +// SetFitment 设置基地家具摆放 +// data: 包含家具列表的输入信息 +// c: 当前玩家对象 +// 返回: 空结果和错误码 +func (h Controller) SetFitment(data *room.SET_FITMENT, c *player.Player) (result *room.NullInfo, err errorcode.ErrorCode) { c.Service.Room.Set(data.Fitments) - return } -func (h Controller) SET_Pet(data *room.C2S_PET_ROOM_SHOW, c *player.Player) (result *room.S2C_PET_ROOM_SHOW, err errorcode.ErrorCode) { - var showpet []uint32 - for _, v := range data.PetShowList { - if v.CatchTime != 0 { - showpet = append(showpet, v.CatchTime) +// SetPet 设置基地展示的精灵 +// data: 包含精灵展示列表的输入信息 +// c: 当前玩家对象 +// 返回: 精灵展示列表和错误码 +func (h Controller) SetPet(data *room.C2S_PET_ROOM_SHOW, c *player.Player) (result *room.S2C_PET_ROOM_SHOW, err errorcode.ErrorCode) { + var showPetCatchTimes []uint32 + for _, petShowInfo := range data.PetShowList { + if petShowInfo.CatchTime != 0 { + showPetCatchTimes = append(showPetCatchTimes, petShowInfo.CatchTime) } - } - c.Service.Room.Show(showpet) + c.Service.Room.Show(showPetCatchTimes) result = &room.S2C_PET_ROOM_SHOW{} - - result.PetShowList = make([]pet.PetShortInfo, len(showpet)) - for _, v := range showpet { - r1 := c.Service.Pet.PetInfo_One(v) - if r1.Data.ID == 0 { + result.PetShowList = make([]pet.PetShortInfo, len(showPetCatchTimes)) + for _, catchTime := range showPetCatchTimes { + petInfo := c.Service.Pet.PetInfo_One(catchTime) + if petInfo.Data.ID == 0 { continue - } - var r12 pet.PetShortInfo - copier.Copy(&r12, &r1.Data) - result.PetShowList = append(result.PetShowList, r12) + var petShortInfo pet.PetShortInfo + copier.Copy(&petShortInfo, &petInfo.Data) + result.PetShowList = append(result.PetShowList, petShortInfo) } return } diff --git a/logic/controller/user_action.go b/logic/controller/user_action.go index 8484657d5..1d699573e 100644 --- a/logic/controller/user_action.go +++ b/logic/controller/user_action.go @@ -10,8 +10,8 @@ import ( "blazing/modules/blazing/model" ) -// 射击 -func (h Controller) Aimat(data *user.AimatInboundInfo, c *player.Player) (result *user.AimatOutboundInfo, err errorcode.ErrorCode) { +// PlayerAim 射击 +func (h Controller) PlayerAim(data *user.AimatInboundInfo, c *player.Player) (result *user.AimatOutboundInfo, err errorcode.ErrorCode) { result = &user.AimatOutboundInfo{ ItemId: data.ItemId, @@ -23,7 +23,7 @@ func (h Controller) Aimat(data *user.AimatInboundInfo, c *player.Player) (result return } -func (h Controller) Chat(data *user.ChatInboundInfo, c *player.Player) (result *user.ChatOutboundInfo, err errorcode.ErrorCode) { +func (h Controller) PlayerChat(data *user.ChatInboundInfo, c *player.Player) (result *user.ChatOutboundInfo, err errorcode.ErrorCode) { result = &user.ChatOutboundInfo{ @@ -92,7 +92,7 @@ func (h Controller) ChangeNONOColor(data *user.ChangeNONOColorInboundInfo, c *pl c.GetSpace().Broadcast(c, data.Head.CMD, result) return } -func (h Controller) DANCE_ACTION(data *user.C2SDanceAction, c *player.Player) (result *user.S2CDanceAction, err errorcode.ErrorCode) { +func (h Controller) DanceAction(data *user.C2SDanceAction, c *player.Player) (result *user.S2CDanceAction, err errorcode.ErrorCode) { result = &user.S2CDanceAction{ Type: data.Type, @@ -101,7 +101,7 @@ func (h Controller) DANCE_ACTION(data *user.C2SDanceAction, c *player.Player) (r c.GetSpace().Broadcast(c, data.Head.CMD, result) return } -func (h Controller) PEOPLE_TRANSFROM(data *user.C2SPEOPLE_TRANSFROM, c *player.Player) (result *user.S2CPEOPLE_TRANSFROM, err errorcode.ErrorCode) { +func (h Controller) PeopleTransform(data *user.C2SPEOPLE_TRANSFROM, c *player.Player) (result *user.S2CPEOPLE_TRANSFROM, err errorcode.ErrorCode) { result = &user.S2CPEOPLE_TRANSFROM{ SuitID: data.SuitID, @@ -117,8 +117,8 @@ func (h Controller) ChangePlayerCloth(data *item.ChangePlayerClothInboundInfo, c ClothList: make([]model.PeopleItemInfo, 0), } - for _, v := range data.ClothList { - result.ClothList = append(result.ClothList, model.PeopleItemInfo{ID: v, Level: 1}) + for _, clothID := range data.ClothList { + result.ClothList = append(result.ClothList, model.PeopleItemInfo{ID: clothID, Level: 1}) } c.Info.Clothes = result.ClothList diff --git a/logic/controller/user_create.go b/logic/controller/user_create.go index cd9e46b3d..76fe04fa3 100644 --- a/logic/controller/user_create.go +++ b/logic/controller/user_create.go @@ -12,19 +12,19 @@ import ( "github.com/panjf2000/gnet/v2" ) -// 处理命令: 1001 -func (h *Controller) CreatePlayer(data *user.CreatePlayerInboundInfo, c gnet.Conn) (result *user.CreatePlayerOutInfo, err errorcode.ErrorCode) { +// CreatePlayer 处理命令: 1001 +func (h Controller) CreatePlayer(data *user.CreatePlayerInboundInfo, c gnet.Conn) (result *user.CreatePlayerOutInfo, err errorcode.ErrorCode) { data.Nickname = strings.Trim(data.Nickname, "\x00") blservice.NewUserService(data.Head.UserID).Info.Reg(cool.Filter.Replace(data.Nickname, '*'), data.Color) return result, 0 } -func (h *Controller) ChangePlayerName(data *user.ChangePlayerNameInboundInfo, c *player.Player) (result *user.ChangePlayerNameOutboundInfo, err errorcode.ErrorCode) { - newnice := cool.Filter.Replace(strings.Trim(data.Nickname, "\x00"), '*') +func (h Controller) ChangePlayerName(data *user.ChangePlayerNameInboundInfo, c *player.Player) (result *user.ChangePlayerNameOutboundInfo, err errorcode.ErrorCode) { + newNickname := cool.Filter.Replace(strings.Trim(data.Nickname, "\x00"), '*') - c.Info.Nick = newnice + c.Info.Nick = newNickname result = &user.ChangePlayerNameOutboundInfo{ - Nickname: newnice, + Nickname: newNickname, UserID: c.Info.UserID, } c.GetSpace().Broadcast(c, data.Head.CMD, result) diff --git a/logic/controller/user_friend.go b/logic/controller/user_friend.go index 9c387cdfa..0dd6e6506 100644 --- a/logic/controller/user_friend.go +++ b/logic/controller/user_friend.go @@ -6,7 +6,11 @@ import ( "blazing/logic/service/player" ) -func (h Controller) OnSeeOnline(data *friend.SeeOnlineInboundInfo, c *player.Player) (result *friend.SeeOnlineOutboundInfo, err errorcode.ErrorCode) { +// GetOnlineFriends 获取在线好友列表 +// data: 包含用户ID列表的输入信息 +// c: 当前玩家对象 +// 返回: 好友在线信息和错误码 +func (h Controller) GetOnlineFriends(data *friend.SeeOnlineInboundInfo, c *player.Player) (result *friend.SeeOnlineOutboundInfo, err errorcode.ErrorCode) { result = &friend.SeeOnlineOutboundInfo{} result.Friends = make([]friend.OnlineInfo, 0) return diff --git a/logic/controller/user_info.go b/logic/controller/user_info.go index 4951c3389..8928d0d05 100644 --- a/logic/controller/user_info.go +++ b/logic/controller/user_info.go @@ -12,8 +12,8 @@ import ( // UserSimInfo 根据用户ID获取模拟用户信息 // data: 包含用户ID的输入信息 // c: 玩家对象 -// 返回: 模拟用户信息及错误码 -func (h Controller) UserSimInfo(data *user.SimUserInfoInboundInfo, c *player.Player) (result *user.SimUserInfoOutboundInfo, err errorcode.ErrorCode) { +// GetUserSimInfo 返回: 模拟用户信息及错误码 +func (h Controller) GetUserSimInfo(data *user.SimUserInfoInboundInfo, c *player.Player) (result *user.SimUserInfoOutboundInfo, err errorcode.ErrorCode) { ret := &user.SimUserInfoOutboundInfo{} copier.Copy(ret, c.Service.Info.Person(data.UserId)) @@ -23,8 +23,8 @@ func (h Controller) UserSimInfo(data *user.SimUserInfoInboundInfo, c *player.Pla // UserMoreInfo 获取用户的更多信息。 // data: 包含用户ID的输入信息。 // c: 当前玩家对象。 -// 返回: 包含用户更多信息的输出结果和错误码。 -func (h Controller) UserMoreInfo(data *user.MoreUserInfoInboundInfo, c *player.Player) (result *user.MoreUserInfoOutboundInfo, err errorcode.ErrorCode) { +// GetUserMoreInfo 返回: 包含用户更多信息的输出结果和错误码。 +func (h Controller) GetUserMoreInfo(data *user.MoreUserInfoInboundInfo, c *player.Player) (result *user.MoreUserInfoOutboundInfo, err errorcode.ErrorCode) { ret := &user.MoreUserInfoOutboundInfo{} info := c.Service.Info.Person(data.UserId) copier.CopyWithOption(ret, info, copier.Option{IgnoreEmpty: true, DeepCopy: true}) @@ -33,7 +33,7 @@ func (h Controller) UserMoreInfo(data *user.MoreUserInfoInboundInfo, c *player.P return ret, 0 } -func (h Controller) PlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *player.Player) (result *item.GoldOnlineRemainOutboundInfo, err errorcode.ErrorCode) { +func (h Controller) GetPlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *player.Player) (result *item.GoldOnlineRemainOutboundInfo, err errorcode.ErrorCode) { return &item.GoldOnlineRemainOutboundInfo{ @@ -41,7 +41,7 @@ func (h Controller) PlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *p Coin: c.Info.Coins, }, 0 } -func (h Controller) PlayerExp(data *item.ExpTotalRemainInboundInfo, c *player.Player) (result *item.ExpTotalRemainOutboundInfo, err errorcode.ErrorCode) { +func (h Controller) GetPlayerExp(data *item.ExpTotalRemainInboundInfo, c *player.Player) (result *item.ExpTotalRemainOutboundInfo, err errorcode.ErrorCode) { return &item.ExpTotalRemainOutboundInfo{ diff --git a/logic/controller/user_talk.go b/logic/controller/user_talk.go index 5de4cd99b..411bd3a56 100644 --- a/logic/controller/user_talk.go +++ b/logic/controller/user_talk.go @@ -7,20 +7,20 @@ import ( "blazing/modules/config/service" ) -func (h Controller) Talk(data *item.TalkCountInboundInfo, c *player.Player) (result *item.TalkCountOutboundInfo, err errorcode.ErrorCode) { +func (h Controller) GetTalkCount(data *item.TalkCountInboundInfo, c *player.Player) (result *item.TalkCountOutboundInfo, err errorcode.ErrorCode) { result = &item.TalkCountOutboundInfo{} - cid, ok := c.Service.Talk.Cheak(c.Info.MapID, int(data.ID)) + talkCount, ok := c.Service.Talk.Cheak(c.Info.MapID, int(data.ID)) if !ok { return result, 0 } - result.GiftCount = uint32(cid) + result.GiftCount = uint32(talkCount) return result, 0 } //var talkcacche = make(map[string]uint32) -func (h Controller) TalkCate(data *item.TalkCateInboundInfo, c *player.Player) (result *item.DayTalkInfo, err errorcode.ErrorCode) { +func (h Controller) GetTalkCategory(data *item.TalkCateInboundInfo, c *player.Player) (result *item.DayTalkInfo, err errorcode.ErrorCode) { result = &item.DayTalkInfo{} result.OutList = make([]item.CateInfo, 0) @@ -33,11 +33,11 @@ func (h Controller) TalkCate(data *item.TalkCateInboundInfo, c *player.Player) ( //service.NewItemService().GetItemCount(config.ItemID) - for _, itemid := range config.ItemID { - ritemcount := service.NewItemService().GetItemCount(itemid) - ret := c.ItemAdd(uint32(itemid), uint32(ritemcount)) - if ret { - result.OutList = append(result.OutList, item.CateInfo{ID: itemid, Count: uint32(ritemcount)}) + for _, itemID := range config.ItemID { + itemCount := service.NewItemService().GetItemCount(itemID) + success := c.ItemAdd(uint32(itemID), uint32(itemCount)) + if success { + result.OutList = append(result.OutList, item.CateInfo{ID: itemID, Count: uint32(itemCount)}) } } diff --git a/logic/controller/user_task.go b/logic/controller/user_task.go index c99d0e0d9..14e9d652e 100644 --- a/logic/controller/user_task.go +++ b/logic/controller/user_task.go @@ -31,25 +31,24 @@ func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *player.Playe } // AddTaskBuf 更新任务步骤 +// data: 包含任务ID和任务步骤列表的输入信息 +// c: 当前玩家对象 +// 返回: 空输出结果和错误码 func (h Controller) AddTaskBuf(data *task.AddTaskBufInboundInfo, c *player.Player) (result *task.AddTaskBufOutboundInfo, err errorcode.ErrorCode) { - // isdaliy := false - // if data.Head.CMD != 2204 { //判断是每日任务 - // isdaliy = true - // } - - c.Service.Task.Exec(data.TaskId, func(te *model.TaskEX) bool { - te.Data = data.TaskList + c.Service.Task.Exec(data.TaskId, func(taskEx *model.TaskEX) bool { + taskEx.Data = data.TaskList return true }) - return result, 0 } -// Complete_Task 完成任务 -func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *player.Player) (result *task.CompleteTaskOutboundInfo, err errorcode.ErrorCode) { - if c.Info.GetTask(int(data.TaskId)) != model.Accepted { //如果任务没有接受或者已经完成Complete_Task +// CompleteTask 完成任务 +// data: 包含任务ID的输入信息 +// c: 当前玩家对象 +// 返回: 任务完成结果和错误码 +func (h Controller) CompleteTask(data *task.CompleteTaskInboundInfo, c *player.Player) (result *task.CompleteTaskOutboundInfo, err errorcode.ErrorCode) { + if c.Info.GetTask(int(data.TaskId)) != model.Accepted { return result, 0 - } c.Info.SetTask(int(data.TaskId), model.Completed) @@ -59,26 +58,22 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *player. ItemList: make([]model.ItemInfo, 0), } - //提交任务 - //task.Tasktopic.Pub(*data) - - tt := task.Get_Task_Info(*data) - if tt == nil { - return result, 0 //通过PUB/SUB回包 + taskInfo := task.Get_Task_Info(*data) + if taskInfo == nil { + return result, 0 } - if tt.PetTypeId != 0 { - r := model.GenPetInfo(int(tt.PetTypeId), 31, -1, 0, 50, nil) - - result.PetTypeId = r.ID - c.Service.Pet.PetAdd(r) - result.CaptureTime = r.CatchTime //这个写到后面,方便捕捉时间被修改后造成的时间不对问题 + if taskInfo.PetTypeId != 0 { + newPet := model.GenPetInfo(int(taskInfo.PetTypeId), 31, -1, 0, 50, nil) + result.PetTypeId = newPet.ID + c.Service.Pet.PetAdd(newPet) + result.CaptureTime = newPet.CatchTime } - for _, v := range tt.ItemList { - ret := c.ItemAdd(v.ItemId, v.ItemCnt) //获取成功的条目 - if ret { - result.ItemList = append(result.ItemList, v) + for _, item := range taskInfo.ItemList { + success := c.ItemAdd(item.ItemId, item.ItemCnt) + if success { + result.ItemList = append(result.ItemList, item) } } @@ -86,8 +81,8 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *player. return result, 0 //通过PUB/SUB回包 } -// Get_Task_Buf 获取任务状态 -func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *player.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) { +// GetTaskBuf 获取任务状态 +func (h Controller) GetTaskBuf(data *task.GetTaskBufInboundInfo, c *player.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) { result = &task.GetTaskBufOutboundInfo{ TaskId: data.TaskId, } @@ -100,8 +95,8 @@ func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *player.Pla return result, 0 } -// Delete_Task 删除任务 -func (h Controller) Delete_Task(data *task.DeleteTaskInboundInfo, c *player.Player) (result *task.DeleteTaskOutboundInfo, err errorcode.ErrorCode) { +// DeleteTask 删除任务 +func (h Controller) DeleteTask(data *task.DeleteTaskInboundInfo, c *player.Player) (result *task.DeleteTaskOutboundInfo, err errorcode.ErrorCode) { if c.Info.GetTask(int(data.TaskId)) == model.Accepted { c.Info.SetTask(int(data.TaskId), model.Unaccepted) diff --git a/logic/controller/walk.go b/logic/controller/walk.go index 64739c52b..bcc217715 100644 --- a/logic/controller/walk.go +++ b/logic/controller/walk.go @@ -7,7 +7,7 @@ import ( "blazing/logic/service/space/info" ) -func (h Controller) Walk(data *space.WalkInInfo, c *player.Player) (result *info.WalkOutInfo, err errorcode.ErrorCode) { +func (h Controller) PlayerWalk(data *space.WalkInInfo, c *player.Player) (result *info.WalkOutInfo, err errorcode.ErrorCode) { result = &info.WalkOutInfo{ Flag: data.Flag, Point: data.Point, diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index bca373963..e8dd57fbc 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -15,102 +15,77 @@ import ( "github.com/gogf/gf/v2/util/grand" ) -// 处理技能攻击逻辑 -func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.SkillEntity) { - //oldpet := f.copypet(attacker.CurrentPet) - - a.AttackTimeC(attacker.GetProp(5, true)) //计算命中 - - defender.Exec(func(t input.Effect) bool { //计算闪避 ,然后修改对方命中),同时相当于计算属性无效这种 - - t.Ctx().SkillEntity = a - t.Skill_Hit_ex() +// processSkillAttack 处理技能攻击逻辑 +func (f *FightC) processSkillAttack(attacker, defender *input.Input, skill *info.SkillEntity) { + skill.AttackTimeC(attacker.GetProp(5, true)) //计算命中 + defender.Exec(func(effect input.Effect) bool { //计算闪避,然后修改对方命中),同时相当于计算属性无效这种 + effect.Ctx().SkillEntity = skill + effect.Skill_Hit_ex() return true }) - var oldprop [2][6]int8 - var oldinfo [2]model.PetInfo - oldprop[0], oldprop[1] = attacker.Prop, defender.Prop //先复制能力提升 - oldinfo[0], oldinfo[1] = attacker.CurrentPet.Info, defender.CurrentPet.Info + var originalProps [2][6]int8 + var originalPetInfo [2]model.PetInfo + originalProps[0], originalProps[1] = attacker.Prop, defender.Prop //先复制能力提升 + originalPetInfo[0], originalPetInfo[1] = attacker.CurrentPet.Info, defender.CurrentPet.Info - attacker.Exec(func(t input.Effect) bool { + attacker.Exec(func(effect input.Effect) bool { //计算变威力 - t.Ctx().SkillEntity = a - t.Skill_Hit() //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 - + effect.Ctx().SkillEntity = skill + effect.Skill_Hit() //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 return true }) //技能命中+效果失效 这里就是修改效果命中为false //技能miss+效果生效 这里属于强制改命中效果,但是正常来说,技能miss掉后效果也应该失效 //技能失效+效果失效 - // 记录技能信息 - //如果miss或者失效 - - attacker.AttackTime = a.AttackTime - attacker.SkillID = uint32(a.ID) //获取技能ID - if a.AttackTime != 0 { //如果命中 - - attacker.CalculateCrit(defender, a) //暴击计算 - attacker.IsCritical = a.Crit - - attacker.SumDamage = attacker.CalculatePower(defender, a) - //睡眠受击消除 - + attacker.AttackTime = skill.AttackTime + attacker.SkillID = uint32(skill.ID) //获取技能ID + if skill.AttackTime != 0 { //如果命中 + attacker.CalculateCrit(defender, skill) //暴击计算 + attacker.IsCritical = skill.Crit + attacker.SumDamage = attacker.CalculatePower(defender, skill) } - attacker.Prop, defender.Prop = oldprop[0], oldprop[1] //先复制能力提升 - attacker.CurrentPet.Info, defender.CurrentPet.Info = oldinfo[0], oldinfo[1] + attacker.Prop, defender.Prop = originalProps[0], originalProps[1] + attacker.CurrentPet.Info, defender.CurrentPet.Info = originalPetInfo[0], originalPetInfo[1] if attacker.IsCritical == 1 { //命中了才有暴击 //暴击破防 - if a.Category() == info.Category.PHYSICAL && defender.Prop[1] > 0 { - + if skill.Category() == info.Category.PHYSICAL && defender.Prop[1] > 0 { defender.Prop[1] = 0 - } else if a.Category() == info.Category.SPECIAL && defender.Prop[3] > 0 { + } else if skill.Category() == info.Category.SPECIAL && defender.Prop[3] > 0 { defender.Prop[3] = 0 } - //暴击翻倍 attacker.SumDamage = attacker.SumDamage.Mul(alpacadecimal.NewFromInt(2)) - } - if !a.Side { //|| attacker.AttackTime == 0 { - + if !skill.Side { //这时候将被覆盖的效果全部装回来enterturn - for _, e := range attacker.Effect_Lost { - if e.Duration() > 0 || e.Duration() == -1 { - e.Alive(true) + for _, effect := range attacker.Effect_Lost { + if effect.Duration() > 0 || effect.Duration() == -1 { + effect.Alive(true) } - } } else { - // attacker.AddEffects(attacker.EffectCache...) //命中再添加效果 - for _, e := range attacker.EffectCache { - //这里实现应该参考本地技能是否命中,然后 - e.Hit(true) //我方效果命中 + for _, effect := range attacker.EffectCache { + effect.Hit(true) //我方效果命中 } - } // 扣减防御方血量 - attacker.Exec(func(t input.Effect) bool { - t.Ctx().SkillEntity = a - - t.OnSkill() //调用伤害计算 - + attacker.Exec(func(effect input.Effect) bool { + effect.Ctx().SkillEntity = skill + effect.OnSkill() //调用伤害计算 return true }) defender.Damage(attacker, &info.DamageZone{ - Damage: attacker.SumDamage, - }, - ) - //这里其实是受到致死伤害 - //然后先触发死亡效果,消除所有buff - //然后触发回神效果 + }) } + +// IsNil 检查值是否为nil func IsNil(x interface{}) bool { if x == nil { return true @@ -118,23 +93,24 @@ func IsNil(x interface{}) bool { rv := reflect.ValueOf(x) return rv.Kind() == reflect.Ptr && rv.IsNil() } -func (f *FightC) copyskill(t *action.SelectSkillAction) *info.SkillEntity { - if t == nil { + +// copySkill 复制技能实体 +func (f *FightC) copySkill(action *action.SelectSkillAction) *info.SkillEntity { + if action == nil { return nil } - if t.SkillEntity == nil { + if action.SkillEntity == nil { return nil - } - oldskill, _ := deepcopy.Anything(t.SkillEntity) //备份技能 - oldskill.(*info.SkillEntity).Rand = f.rand //拷贝后随机数丢失 - return oldskill.(*info.SkillEntity) + originalSkill, _ := deepcopy.Anything(action.SkillEntity) //备份技能 + originalSkill.(*info.SkillEntity).Rand = f.rand //拷贝后随机数丢失 + return originalSkill.(*info.SkillEntity) } -//回合有先手方和后手方,同时有攻击方和被攻击方 - -func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { +// enterturn 处理战斗回合逻辑 +// 回合有先手方和后手方,同时有攻击方和被攻击方 +func (f *FightC) enterturn(firstAttack, secondAttack *action.SelectSkillAction) { //双方首发精灵登场时,依挑战方机制:房主方先判定,挑战方后判定 //双方非首发精灵登场时,根据切换先后判定(看手速) // 神罗、圣华登场时魂免,“登场时xx”等效果 @@ -145,171 +121,134 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } f.Broadcast(func(ff *input.Input) { - ff.Exec(func(t input.Effect) bool { //回合开始前 - - //结算状态 - t.Turn_Start(fattack, sattack) + ff.Exec(func(effect input.Effect) bool { //回合开始前 + effect.Turn_Start(firstAttack, secondAttack) return true }) }) - if fattack != nil { //如果首技能是空的,说明都空过了 - - if fattack.GetPlayerID() == f.ownerID { + if firstAttack != nil { //如果首技能是空的,说明都空过了 + if firstAttack.GetPlayerID() == f.ownerID { //是否miss都应该施加解析effect - f.Our.Parseskill(fattack) //解析到临时数据 - - f.Opp.Parseskill(sattack) //解析到临时数据 + f.Our.Parseskill(firstAttack) //解析到临时数据 + f.Opp.Parseskill(secondAttack) //解析到临时数据 } else { - f.Opp.Parseskill(fattack) - f.Our.Parseskill(sattack) + f.Opp.Parseskill(firstAttack) + f.Our.Parseskill(secondAttack) } } - f.Broadcast(func(ff *input.Input) { - ff.Exec(func(t input.Effect) bool { //回合开始前 - - //结算状态 - t.Compare_Pre(fattack, sattack) //先结算技能的优先级 + f.Broadcast(func(fighter *input.Input) { + fighter.Exec(func(effect input.Effect) bool { //回合开始前 + effect.Compare_Pre(firstAttack, secondAttack) //先结算技能的优先级 return true }) - - ff.ResetAttackValue() + fighter.ResetAttackValue() }) f.First, f.Second = f.Our, f.Opp - // 根据攻击方归属设置当前战斗的主/次攻击方属性 - if fattack != nil { - if fattack.GetPlayerID() != f.ownerID { - + if firstAttack != nil { + if firstAttack.GetPlayerID() != f.ownerID { f.First, f.Second = f.Opp, f.Our // 攻击方为对方时,主攻击方是对方 - } } - if fattack != nil && sattack != nil { + if firstAttack != nil && secondAttack != nil { switch { - - case fattack.SkillEntity.Priority < sattack.SkillEntity.Priority: - - fattack, sattack = sattack, fattack //互换先手权 + case firstAttack.SkillEntity.Priority < secondAttack.SkillEntity.Priority: + firstAttack, secondAttack = secondAttack, firstAttack //互换先手权 f.First, f.Second = f.Second, f.First - case fattack.SkillEntity.Priority == sattack.SkillEntity.Priority: - + case firstAttack.SkillEntity.Priority == secondAttack.SkillEntity.Priority: if f.Second.GetProp(4, false) > f.First.GetProp(4, false) { - fattack, sattack = sattack, fattack //互换先手权 + firstAttack, secondAttack = secondAttack, firstAttack //互换先手权 f.First, f.Second = f.Second, f.First } if f.Second.GetProp(4, false) == f.First.GetProp(4, false) { - if grand.Meet(1, 2) { //随机出手 - fattack, sattack = sattack, fattack //互换先手权 + firstAttack, secondAttack = secondAttack, firstAttack //互换先手权 f.First, f.Second = f.Second, f.First } - } - } } - if fattack == nil && sattack == nil { - fattack, sattack = sattack, fattack //互换先手权 + if firstAttack == nil && secondAttack == nil { + firstAttack, secondAttack = secondAttack, firstAttack //互换先手权 f.First, f.Second = f.Second, f.First } var attacker, defender *input.Input //开始回合操作 for i := 0; i < 2; i++ { - var oldskill *info.SkillEntity //原始技能 - var currentskill *info.SkillEntity //当前技能 - if i == 0 { // + var originalSkill *info.SkillEntity //原始技能 + var currentSkill *info.SkillEntity //当前技能 + if i == 0 { attacker, defender = f.First, f.Second - oldskill = f.copyskill(fattack) + originalSkill = f.copySkill(firstAttack) //先手阶段,先修复后手效果 f.Second.RecoverEffect() } else { attacker, defender = f.Second, f.First - oldskill = f.copyskill(sattack) + originalSkill = f.copySkill(secondAttack) f.Second.ReactvieEffect() } - currentskill = oldskill - defender.Exec(func(t input.Effect) bool { //这个是能否使用技能 - //结算状态 - //然后这里还可以处理自爆类 - t.Ctx().SkillEntity = currentskill - return t.Action_start_ex(fattack, sattack) //返回本身结算,如果false,说明不能使用技能了 - + currentSkill = originalSkill + defender.Exec(func(effect input.Effect) bool { //这个是能否使用技能 + effect.Ctx().SkillEntity = currentSkill + return effect.Action_start_ex(firstAttack, secondAttack) }) - canuseskill := attacker.Exec(func(t input.Effect) bool { //这个是能否使用技能 - //结算状态 - //然后这里还可以处理自爆类 - t.Ctx().SkillEntity = currentskill - return t.Action_start(fattack, sattack) //返回本身结算,如果false,说明不能使用技能了 - + canUseSkill := attacker.Exec(func(effect input.Effect) bool { //这个是能否使用技能 + effect.Ctx().SkillEntity = currentSkill + return effect.Action_start(firstAttack, secondAttack) }) - canuse := canuseskill && // - action.CanUse(currentskill) && //pp还在 - attacker.CurrentPet.Info.Hp > 0 + canUse := canUseSkill && action.CanUse(currentSkill) && attacker.CurrentPet.Info.Hp > 0 - if !canuse { + if !canUse { attacker.RecoverEffect() - currentskill = nil + currentSkill = nil } else { - - f.processSkillAttack(attacker, defender, currentskill) - currentskill = oldskill //还原技能 + f.processSkillAttack(attacker, defender, currentSkill) + currentSkill = originalSkill //还原技能 _, skill, ok := utils.FindWithIndex(attacker.CurrentPet.Info.SkillList, func(item model.SkillInfo) bool { - return item.ID == currentskill.Info.ID + return item.ID == currentSkill.Info.ID }) if ok { - skill.PP-- } - } - //0血不触发 if defender.CurrentPet.Info.Hp > 0 { //技能使用后 - defender.Exec(func(t input.Effect) bool { - t.Ctx().SkillEntity = currentskill - - t.Skill_Use_ex() - + defender.Exec(func(effect input.Effect) bool { + effect.Ctx().SkillEntity = currentSkill + effect.Skill_Use_ex() return true }) } //技能使用后 - attacker.Exec(func(t input.Effect) bool { //技能使用后的我方效果 - t.Ctx().SkillEntity = currentskill - - t.Skill_Useed() - + attacker.Exec(func(effect input.Effect) bool { //技能使用后的我方效果 + effect.Ctx().SkillEntity = currentSkill + effect.Skill_Useed() return true }) - defender.Exec(func(t input.Effect) bool { - t.Ctx().SkillEntity = currentskill - - t.Action_end_ex() - + defender.Exec(func(effect input.Effect) bool { + effect.Ctx().SkillEntity = currentSkill + effect.Action_end_ex() return true }) if !attacker.CurrentPet.NotAlive { //技能使用后 - attacker.Exec(func(t input.Effect) bool { //技能使用后的我方效果 - t.Ctx().SkillEntity = currentskill - - t.Action_end() - + attacker.Exec(func(effect input.Effect) bool { //技能使用后的我方效果 + effect.Ctx().SkillEntity = currentSkill + effect.Action_end() return true }) } fmt.Println(i, - // "玩家技能:", oldskill.(*info.SkillEntity).ID, "玩家技能伤害:", attacker.SumDamage, "自身剩余血量:", attacker.CurrentPet.Info.Hp, "对手剩余血量:", defender.CurrentPet.Info.Hp, @@ -368,33 +307,26 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { ff.GenInfo() }) - ret := info.AttackValueS{ - + attackValueResult := info.AttackValueS{ FAttack: *f.First.AttackValue, SAttack: *f.Second.AttackValue, } //因为切完才能广播,所以必须和回合结束分开结算 - f.Broadcast(func(ff *input.Input) { - for _, v := range f.Switch { - - if ff.Player.GetInfo().UserID != v.Reason.UserId { - - println("切精灵", v.Reason.UserId, v.Reason.ID) - - ff.Player.SendPackCmd(2407, &v.Reason) + f.Broadcast(func(fighter *input.Input) { + for _, switchAction := range f.Switch { + if fighter.Player.GetInfo().UserID != switchAction.Reason.UserId { + println("切精灵", switchAction.Reason.UserId, switchAction.Reason.ID) + fighter.Player.SendPackCmd(2407, &switchAction.Reason) } - } - }) f.Switch = make(map[uint32]*action.ActiveSwitchAction) if f.closefight && f.Info.Mode == info.BattleMode.PET_MELEE { return } - f.Broadcast(func(ff *input.Input) { - - ff.Player.SendPackCmd(2505, &ret) - ff.CanChange = 0 + f.Broadcast(func(fighter *input.Input) { + fighter.Player.SendPackCmd(2505, &attackValueResult) + fighter.CanChange = 0 }) println("回合结束") if f.Info.Status == info.BattleMode.FIGHT_WITH_NPC { diff --git a/logic/service/player/base.go b/logic/service/player/base.go index 9d1ec60dd..b9a11c446 100644 --- a/logic/service/player/base.go +++ b/logic/service/player/base.go @@ -31,35 +31,39 @@ func newbaseplayer() baseplayer { } return ret } -func (p *baseplayer) GetInfo() *model.PlayerInfo { +// GetInfo 获取玩家基础信息 +func (p *baseplayer) GetInfo() *model.PlayerInfo { return p.Info } -func (f *baseplayer) SetFightC(ff common.FightI) { - f.FightC = ff +// SetFightC 设置玩家战斗控制器 +func (f *baseplayer) SetFightC(fightController common.FightI) { + f.FightC = fightController } +// GetPlayerCaptureContext 获取玩家捕捉上下文 func (f *baseplayer) GetPlayerCaptureContext() *info.PlayerCaptureContext { return f.PlayerCaptureContext } -func (f *baseplayer) FindPet(CatchTime uint32) (int, *model.PetInfo, bool) { - +// 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 + return item.CatchTime == catchTime }) } -func (f *Player) Pet_del(CatchTime uint32) { - //println("删除精灵1", CatchTime) - index, _, ok := f.FindPet(CatchTime) + +// Pet_del 删除指定宠物 +// catchTime: 宠物的捕捉时间戳 +func (f *Player) Pet_del(catchTime uint32) { + index, _, ok := f.FindPet(catchTime) if ok { - // println("删除精灵", CatchTime) copy(f.Info.PetList[index:], f.Info.PetList[index+1:]) f.Info.PetList = f.Info.PetList[:len(f.Info.PetList)-1] - f.Service.Pet.Pet_del(CatchTime) + f.Service.Pet.Pet_del(catchTime) } - } // // 计算整数的二进制1的个数(Integer.bitCount) diff --git a/logic/service/player/fight.go b/logic/service/player/fight.go index c0804625f..fa64ec40f 100644 --- a/logic/service/player/fight.go +++ b/logic/service/player/fight.go @@ -7,59 +7,34 @@ import ( "sync/atomic" ) -func (p *Player) JoinFight(fn func(p common.PlayerI) bool) errorcode.ErrorCode { +// JoinFight 加入战斗队列 +func (p *Player) JoinFight(handler func(p common.PlayerI) bool) errorcode.ErrorCode { //加入队列前就开始判断一次 if !p.CanFight() { - return errorcode.ErrorCodes.ErrNoEligiblePokemon - } if p.GetSpace().Owner.UserID == p.Info.UserID { return errorcode.ErrorCodes.ErrSystemError } - //修复发包进入,如果此时是擂台主 - p.GetSpace().User.Range(func(key uint32, v common.PlayerI) bool { - - if v.GetInfo().UserID != p.Info.UserID { + p.GetSpace().User.Range(func(key uint32, opponent common.PlayerI) bool { + if opponent.GetInfo().UserID != p.Info.UserID { //确认是乱斗模式 - - if v.Getfightinfo() == p.Getfightinfo() && p.CanFight() { - - // p.Fightinfo = nil //先将自身的准备信息置空 - // //value.PVPinfo = nil - ttt := fn(v) - if ttt { - - atomic.StoreUint32(&v.(*Player).Fightinfo.Mode, 0) + if opponent.Getfightinfo() == p.Getfightinfo() && p.CanFight() { + success := handler(opponent) + if success { + atomic.StoreUint32(&opponent.(*Player).Fightinfo.Mode, 0) atomic.StoreUint32(&p.Fightinfo.Mode, 0) - } - - // lw = value - return ttt //如果发起成功就停止,否则继续遍历队列 + return success //如果发起成功就停止,否则继续遍历队列 } - } return false }) return 0 } -func (p *Player) SendLoadPercent(b info.LoadPercentOutboundInfo) { - - p.SendPack(common.NewTomeeHeader(2441, p.Info.UserID).Pack(&b)) //准备包由各自发,因为协议不一样 +// SendLoadPercent 发送加载进度 +func (p *Player) SendLoadPercent(loadInfo info.LoadPercentOutboundInfo) { + p.SendPack(common.NewTomeeHeader(2441, p.Info.UserID).Pack(&loadInfo)) } - -// 同意对战 -// AgreeBattle 处理战斗邀请响应(同意/拒绝) -// 参数: -// -// userid:邀请者ID -// flag:0-拒绝,1-同意 -// mode:战斗模式 -// -// 返回: -// -// bool:是否成功(仅同意且符合条件时为true) -// common.PlayerI:对应的邀请者玩家(成功时有效) diff --git a/logic/service/player/pet.go b/logic/service/player/pet.go index ec6c5d78e..82b596d49 100644 --- a/logic/service/player/pet.go +++ b/logic/service/player/pet.go @@ -11,82 +11,64 @@ import ( "github.com/jinzhu/copier" ) -// 主函数实现 -// 添加经验 -// 禁止发包 -func (p *Player) AddPetExp(petinfo *model.PetInfo, addExp uint32) { +// AddPetExp 添加宠物经验 +func (p *Player) AddPetExp(petInfo *model.PetInfo, addExp uint32) { addExp = utils.Min(addExp, p.Info.ExpPool) - originalLevel := petinfo.Level - Exp := petinfo.Exp + addExp + originalLevel := petInfo.Level + exp := petInfo.Exp + addExp p.Info.ExpPool -= addExp //减去已使用的经验 - gainexp := Exp //已获得的经验 - for Exp >= petinfo.NextLvExp { + gainedExp := exp //已获得的经验 + for exp >= petInfo.NextLvExp { - petinfo.Level++ + petInfo.Level++ - Exp -= petinfo.LvExp - petinfo.Update(true) - if originalLevel < 100 && petinfo.Level == 100 { //升到100了 - p.Info.ExpPool += Exp //减去已使用的经验 - gainexp -= Exp - Exp = 0 + exp -= petInfo.LvExp + petInfo.Update(true) + if originalLevel < 100 && petInfo.Level == 100 { //升到100了 + p.Info.ExpPool += exp //减去已使用的经验 + gainedExp -= exp + exp = 0 break //停止升级 } } - petinfo.Exp = Exp + petInfo.Exp = exp // 重新计算面板 - if originalLevel != petinfo.Level { - petinfo.CalculatePetPane(false) + if originalLevel != petInfo.Level { + petInfo.CalculatePetPane(false) - petinfo.Cure() - p.Info.PetMaxLevel = utils.Max(petinfo.Level, p.Info.PetMaxLevel) + petInfo.Cure() + p.Info.PetMaxLevel = utils.Max(petInfo.Level, p.Info.PetMaxLevel) // 处理技能学习 - canLearnSkillList := utils.LastFourElements(petinfo.GetLevelRangeCanLearningSkills(originalLevel, petinfo.Level), 4) //获取最后四个技能,如果不足,那就取全部技能 + learnableSkills := utils.LastFourElements(petInfo.GetLevelRangeCanLearningSkills(originalLevel, petInfo.Level), 4) //获取最后四个技能,如果不足,那就取全部技能 for i := 0; i < 4; i++ { - if len(canLearnSkillList) != 0 { - skid := canLearnSkillList[len(canLearnSkillList)-1] - petinfo.SkillList = append(petinfo.SkillList, model.SkillInfo{ + if len(learnableSkills) != 0 { + skillID := learnableSkills[len(learnableSkills)-1] + petInfo.SkillList = append(petInfo.SkillList, model.SkillInfo{ - ID: skid, - PP: uint32(xmlres.SkillMap[int(skid)].MaxPP), + ID: skillID, + PP: uint32(xmlres.SkillMap[int(skillID)].MaxPP), }) - canLearnSkillList = canLearnSkillList[:len(canLearnSkillList)-1] + learnableSkills = learnableSkills[:len(learnableSkills)-1] } } - if len(petinfo.SkillList) > 4 { - petinfo.SkillList = petinfo.SkillList[:4] //归正到4 + if len(petInfo.SkillList) > 4 { + petInfo.SkillList = petInfo.SkillList[:4] //归正到4 } } - t1 := common.NewTomeeHeader(2508, p.Info.UserID) - rrr := &info.PetUpdateOutboundInfo{} + header := common.NewTomeeHeader(2508, p.Info.UserID) + updateOutbound := &info.PetUpdateOutboundInfo{} - var petinfwo info.UpdatePropInfo + var petUpdateInfo info.UpdatePropInfo - copier.Copy(&petinfwo, petinfo) - petinfwo.Exp = gainexp - rrr.Data = append(rrr.Data, petinfwo) - p.SendPack(t1.Pack(rrr)) //准备包由各自发,因为协议不一样 - // 发送经验更新消息 - //player.SendMessage(generatePetUpdateInfo(petEntity, originalExp+addExp-exp, addition)) - - // // 发送技能更新消息 - // updateSkillInfo := UpdateSkillInfo{ - // PetCatchTime: petEntity.captureTime, - // ActiveSkillNum: activeSkillNum, - // UnActiveSkillNum: unActiveSkillNum, - // SkillArray: canLearnSkillList, - // } - - // player.SendMessage(UpdateSkillOutboundInfo{ - // InfoArray: []UpdateSkillInfo{updateSkillInfo}, - // }) - - // return exp + copier.Copy(&petUpdateInfo, petInfo) + petUpdateInfo.Exp = gainedExp + updateOutbound.Data = append(updateOutbound.Data, petUpdateInfo) + p.SendPack(header.Pack(updateOutbound)) //准备包由各自发,因为协议不一样 } diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 398576ec8..50d34943c 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -22,8 +22,8 @@ import ( "github.com/panjf2000/gnet/v2" ) -func ConutPlayer() int { - +// CountPlayer 统计在线玩家数量 +func CountPlayer() int { count := 0 Mainplayer.Range(func(uint32, *Player) bool { count++ @@ -32,7 +32,8 @@ func ConutPlayer() int { return count } -var Mainplayer = &utils.SyncMap[uint32, *Player]{} //玩家数据 +// Mainplayer 全局玩家数据存储映射 +var Mainplayer = &utils.SyncMap[uint32, *Player]{} type OgreInfo struct { Data [9]OgrePetInfo @@ -86,9 +87,9 @@ type Player struct { MapNPC timer.TimeNoder context.Context - Fightinfo info.Fightinfo //当前邀请的玩家ID + Fightinfo info.Fightinfo // 当前邀请的玩家ID - Logintime uint32 //当前登录时间 + Logintime uint32 // 当前登录时间 OgreInfo OgreInfo Service *blservice.UserService @@ -96,41 +97,39 @@ type Player struct { // PVP被邀请信息 HavePVPinfo []common.PlayerI monsters [3]int - //0 无,1可以刷怪,2是切换过地图 - Canmon uint32 //可以刷怪 - // Changemap bool //是否切换过地图 + // 0 无,1可以刷怪,2是切换过地图 + Canmon uint32 // 可以刷怪 } // PlayerOption 定义配置 Player 的函数类型 type PlayerOption func(*Player) +// WithConn 设置玩家连接的配置选项 func WithConn(c gnet.Conn) PlayerOption { return func(p *Player) { p.MainConn = c } } -func (p *Player) UseCoins(t uint32) bool { - if p.Info.Coins < t { +func (p *Player) UseCoins(amount uint32) bool { + if p.Info.Coins < amount { return false } - return true - } -func (p *Player) UseGold(t uint32) bool { - if p.User.GetGold(uint(p.Info.UserID)) < t { +func (p *Player) UseGold(amount uint32) bool { + if p.User.GetGold(uint(p.Info.UserID)) < amount { return false } - //p.Info.GoldBean = p.Info.GoldBean - t return true - } + func (p *Player) GetAction() { } +// InvitePlayer 邀请玩家进行对战 func (f *Player) InvitePlayer(ff common.PlayerI) { f.HavePVPinfo = append(f.HavePVPinfo, ff) tt := common.NewTomeeHeader(2501, f.GetInfo().UserID) @@ -139,51 +138,46 @@ func (f *Player) InvitePlayer(ff common.PlayerI) { Nick: ff.GetInfo().Nick, Mode: ff.Getfightinfo().Mode, })) - } + +// Getfightinfo 获取玩家的战斗信息 func (p *Player) Getfightinfo() info.Fightinfo { return p.Fightinfo } + +// QuitFight 退出战斗 func (p *Player) QuitFight() { - p.FightC = nil - atomic.StoreUint32(&p.Fightinfo.Mode, 0) - } + +// GetSpace 获取玩家所在的空间 func (p *Player) GetSpace() *space.Space { return space.GetSpace(p.Info.MapID) } +// CanFight 检查玩家是否可以进行战斗 // 0无战斗,1PVP,2,BOOS,3PVE func (p *Player) CanFight() bool { - if len(p.Info.PetList) == 0 { atomic.StoreUint32(&p.Fightinfo.Mode, 0) return false - } if p.FightC != nil { atomic.StoreUint32(&p.Fightinfo.Mode, 0) return false - } - // if p.GetSpace().ARENA.ChallengerID == p.Info.UserID || p.GetSpace().ARENA.Id == p.Info.UserID { - // return false - // } - for _, v := range p.Info.PetList { - if v.Hp > 0 { // 只要找到一个血量大于0的宠物,就可以战斗 + + for _, pet := range p.Info.PetList { + if pet.Hp > 0 { // 只要找到一个血量大于0的宠物,就可以战斗 return true } } + // 遍历完所有宠物,都没有血量大于0的,才不能战斗 atomic.StoreUint32(&p.Fightinfo.Mode, 0) return false - // } - - // return false - } func (p *Player) SendPack(b []byte) error { @@ -192,17 +186,13 @@ func (p *Player) SendPack(b []byte) error { } _, ok := p.MainConn.Context().(*ClientData) if ok { - return p.MainConn.Context().(*ClientData).SendPack(b) } - return nil - } -// 添加物品 返回成功添加的物品 +// 添加物品 返回成功添加的物品 func (p *Player) ItemAdd(ItemId, ItemCnt uint32) (result bool) { - switch ItemId { case 1: //塞尔豆 p.Info.Coins = p.Info.Coins + ItemCnt