From fcb55d3a46880f3589cd1aeab791e2db2a2b61df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <12574910+72wo@users.noreply.github.com> Date: Tue, 20 Jan 2026 04:40:36 +0800 Subject: [PATCH] =?UTF-8?q?```=20refactor(controller):=20=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2BossCompletedTask=E4=B8=BA=E4=B8=93=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在战斗控制器中将p.BossCompletedTask替换为p.SptCompletedTask, 以及在塔沃控制器中将BossCompletedTask相关调用替换为TawerCompletedTask, 以更好地区分不同的任务完成逻辑。 --- fix(item_use): 添加nil检查防止程序崩溃 在处理神经元道具时,增加对oldPet对象的nil检查, 如果为空则返回系统错误码,避免程序出现 --- logic/controller/fight_boss.go | 2 +- logic/controller/fight_tawor.go | 6 +++--- logic/controller/item_use.go | 3 +++ logic/controller/{pet_breed.go => pet_egg.go} | 15 +++++++++++++-- logic/controller/pet_fusion.go | 6 +++--- logic/controller/pet_info.go | 6 +++++- logic/service/common/pack.go | 2 +- logic/service/fight/action.go | 2 +- logic/service/pet/egg.go | 4 ++-- logic/service/player/boss.go | 11 ++++++++++- modules/player/service/pet.go | 8 ++++++-- modules/player/service/room.go | 4 ++++ 12 files changed, 52 insertions(+), 17 deletions(-) rename logic/controller/{pet_breed.go => pet_egg.go} (91%) diff --git a/logic/controller/fight_boss.go b/logic/controller/fight_boss.go index 2c2b47639..178505390 100644 --- a/logic/controller/fight_boss.go +++ b/logic/controller/fight_boss.go @@ -137,7 +137,7 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, p *pla fight.NewFight(p, ai, func(foi info.FightOverInfo) { if taskID != 0 { if foi.Reason == 0 && foi.WinnerId == p.Info.UserID { - p.BossCompletedTask(taskID, 1) + p.SptCompletedTask(taskID, 1) } } diff --git a/logic/controller/fight_tawor.go b/logic/controller/fight_tawor.go index 1200c70d9..023b31806 100644 --- a/logic/controller/fight_tawor.go +++ b/logic/controller/fight_tawor.go @@ -188,20 +188,20 @@ func (h Controller) PetTawor(data *fight.StartTwarInboundInfo, c *player.Player) if foi.Reason == 0 && foi.WinnerId == c.Info.UserID { //我放获胜 switch data.Head.CMD { case 2429: //试炼之塔 - c.BossCompletedTask(600, int(c.Info.CurrentFreshStage)) + c.TawerCompletedTask(600, int(c.Info.CurrentFreshStage)) c.Info.CurrentFreshStage++ if c.Info.CurrentFreshStage >= c.Info.MaxFreshStage { c.Info.MaxFreshStage = c.Info.CurrentFreshStage } case 2415: //勇者之塔 - c.BossCompletedTask(500, int(c.Info.CurrentStage)) + c.TawerCompletedTask(500, int(c.Info.CurrentStage)) c.Info.CurrentStage++ if c.Info.CurrentStage >= c.Info.MaxStage { c.Info.MaxStage = c.Info.CurrentStage } case 2425: - c.BossCompletedTask(110, int(c.CurDark)) + c.TawerCompletedTask(110, int(c.CurDark)) } } diff --git a/logic/controller/item_use.go b/logic/controller/item_use.go index a3911c784..2eaf6c2f3 100644 --- a/logic/controller/item_use.go +++ b/logic/controller/item_use.go @@ -79,6 +79,9 @@ func (h Controller) handleNeuronItem(currentPet *model.PetInfo, c *player.Player originalCatchTime := currentPet.CatchTime oldPet := c.Service.Pet.PetInfo_One_Unscoped(currentPet.OldCatchTime) + if oldPet == nil { + return errorcode.ErrorCodes.ErrSystemError + } copier.CopyWithOption(currentPet, oldPet.Data, copier.Option{DeepCopy: true}) currentPet.CatchTime = originalCatchTime diff --git a/logic/controller/pet_breed.go b/logic/controller/pet_egg.go similarity index 91% rename from logic/controller/pet_breed.go rename to logic/controller/pet_egg.go index 823ae1bad..2ed762915 100644 --- a/logic/controller/pet_breed.go +++ b/logic/controller/pet_egg.go @@ -13,6 +13,14 @@ func (ctl Controller) GetBreedInfo( data *pet.C2S_GET_BREED_INFO, playerObj *player.Player) (result *pet.S2C_GET_BREED_INFO, err errorcode.ErrorCode) { //这个时候player应该是空的 result = &pet.S2C_GET_BREED_INFO{} + result.BreedLeftTime = 5000 + result.HatchLeftTime = 5000 + result.HatchState = 1 + result.BreedState = 1 + result.EggID = 1 + result.Intimacy = 1 + result.FeMalePetID = 1 + result.MalePetID = 3 // TODO: 实现获取繁殖信息的具体逻辑 return result, 0 @@ -53,7 +61,10 @@ func (ctl Controller) GetEggList( result = &pet.S2C_GET_EGG_LIST{} // TODO: 实现获取精灵蛋列表的逻辑 // 示例数据,实际应从玩家数据中获取 - result.EggList = append(result.EggList, pet.EggInfo{EggID: 1, OwnerID: 10001, EggCatchTime: 122123}) + result.EggList = append(result.EggList, pet.EggInfo{EggID: 1, OwnerID: 10001, EggCatchTime: 122123, + MalePetID: 1, + FeMalePetID: 3, + }) return result, 0 } @@ -92,4 +103,4 @@ func (ctl Controller) GetHatchPet( result.CatchTime = 0 return result, 0 -} \ No newline at end of file +} diff --git a/logic/controller/pet_fusion.go b/logic/controller/pet_fusion.go index 9f48eb3b7..e40a0bf0c 100644 --- a/logic/controller/pet_fusion.go +++ b/logic/controller/pet_fusion.go @@ -109,11 +109,11 @@ func (h Controller) PetFusion(data *pet.C2S_PetFusion, c *player.Player) (result c.PetDel(data.Mcatchtime) _, ok2 := lo.Find(data.GoldItem1[:], func(item uint32) bool { - return item == 300044 + return item == 300043 }) - if c.Service.Item.CheakItem(300044) > 0 && ok2 { - c.Service.Item.UPDATE(300044, -1) + if c.Service.Item.CheakItem(300043) > 0 && ok2 { + c.Service.Item.UPDATE(300043, -1) } else { c.PetDel(data.Auxcatchtime) diff --git a/logic/controller/pet_info.go b/logic/controller/pet_info.go index cf79d6db8..53302601a 100644 --- a/logic/controller/pet_info.go +++ b/logic/controller/pet_info.go @@ -3,6 +3,7 @@ package controller import ( "blazing/common/data/xmlres" "blazing/common/socket/errorcode" + "blazing/cool" "blazing/logic/service/fight" "blazing/logic/service/pet" "blazing/logic/service/player" @@ -119,7 +120,10 @@ func (h Controller) TogglePetBagWarehouse( index, pet, ok := player.FindPet(data.CatchTime) if ok { - player.Service.Pet.UPdate(*pet) + if cool.Config.ServerInfo.IsVip == 0 { //正式服才会真正放会精灵 + player.Service.Pet.UPdate(*pet) + } + player.Info.PetList = append(player.Info.PetList[:index], player.Info.PetList[index+1:]...) } diff --git a/logic/service/common/pack.go b/logic/service/common/pack.go index 10027d06e..931d122df 100644 --- a/logic/service/common/pack.go +++ b/logic/service/common/pack.go @@ -44,7 +44,7 @@ func (h *TomeeHeader) Pack(data any) []byte { } if len(data1.Bytes()) == 0 { - fmt.Println("数据为空") + // fmt.Println("数据为空") } //datar = data1.Bytes() diff --git a/logic/service/fight/action.go b/logic/service/fight/action.go index 80aede645..07efa0841 100644 --- a/logic/service/fight/action.go +++ b/logic/service/fight/action.go @@ -67,7 +67,7 @@ func (f *FightC) ChangePet(c common.PlayerI, id uint32) { BaseAction: action.NewBaseAction(c.GetInfo().UserID), Cid: id, } - println("切精灵", c.GetInfo().UserID, id) + f.actionChan <- ret } diff --git a/logic/service/pet/egg.go b/logic/service/pet/egg.go index f18dae959..3ea49190b 100644 --- a/logic/service/pet/egg.go +++ b/logic/service/pet/egg.go @@ -67,8 +67,8 @@ type EggInfo struct { OwnerID uint32 `json:"ownerID"` // 所属人ID EggCatchTime uint32 `json:"eggCatchTime"` // 精灵蛋获得时间 EggID uint32 `json:"eggID"` // 精灵蛋ID - Male uint32 `json:"male"` // 雄性精灵ID - Female uint32 `json:"female"` // 雌性精灵ID + MalePetID uint32 `json:"male"` // 雄性精灵ID + FeMalePetID uint32 `json:"female"` // 雌性精灵ID } // C2S_START_HATCH 开始孵化精灵蛋协议 diff --git a/logic/service/player/boss.go b/logic/service/player/boss.go index 2d63e363e..dd0fef4e6 100644 --- a/logic/service/player/boss.go +++ b/logic/service/player/boss.go @@ -8,9 +8,18 @@ import ( "github.com/pointernil/bitset32" ) +func (p *Player) SptCompletedTask(taskID int, ot int) { + //完成每日 + if p.Info.GetTask(taskID) == model.Unaccepted { + p.Info.SetTask(taskID, model.Completed) //设置完成任务 + p.bossgive(taskID, ot) + } + +} + // 这个是通过总任务去完成,还可以去实现完成分支 // boss的完成时限,所以先完成默认的分支,然后完成指定分支 -func (p *Player) BossCompletedTask(taskID int, ot int) { +func (p *Player) TawerCompletedTask(taskID int, ot int) { //完成每日 if p.Info.GetTask(taskID) == model.Unaccepted { p.Info.SetTask(taskID, model.Completed) //设置完成任务 diff --git a/modules/player/service/pet.go b/modules/player/service/pet.go index 8e18fdcc1..38ca5021a 100644 --- a/modules/player/service/pet.go +++ b/modules/player/service/pet.go @@ -77,12 +77,16 @@ func (s *PetService) PetInfo_One_ohter(userid, cachetime uint32) model.PetEX { tt.Data.CatchTime = tt.CatchTime return tt } -func (s *PetService) PetInfo_One_Unscoped(cachetime uint32) model.PetEX { +func (s *PetService) PetInfo_One_Unscoped(cachetime uint32) *model.PetEX { m := s.TestModel(s.Model).Where("player_id", s.userid).Where("catch_time", cachetime).Unscoped() - var tt model.PetEX + var tt *model.PetEX m.Scan(&tt) + if tt == nil { + return nil + + } tt.Data.CatchTime = tt.CatchTime return tt } diff --git a/modules/player/service/room.go b/modules/player/service/room.go index 2c46ca1c7..8539d3363 100644 --- a/modules/player/service/room.go +++ b/modules/player/service/room.go @@ -40,6 +40,10 @@ func (s *RoomService) Get(userid uint32) model.BaseHouseEx { // } func (s *RoomService) Set(id []model.FitmentShowInfo) { //todo待测试 + if cool.Config.ServerInfo.IsVip != 0 { + cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid) + return + } var ttt model.BaseHouseEx m := s.TestModel(s.Model)