From 756edc1cddd7b379f6b9e02043520f4815306414 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 17 Feb 2026 22:36:18 +0800 Subject: [PATCH] 1 --- logic/controller/pet_fusion.go | 2 +- logic/service/fight/input.go | 9 ++++++++- logic/service/fight/input/fight.go | 4 ++-- login/internal/cmd/cmd.go | 2 +- modules/config/service/egg.go | 10 +++++++--- modules/config/service/shiny.go | 30 +++++++++++++++++++++++++++++- modules/player/model/pet.go | 25 +++++++++++++++++++++---- modules/player/service/egg.go | 6 +++--- 8 files changed, 72 insertions(+), 16 deletions(-) diff --git a/logic/controller/pet_fusion.go b/logic/controller/pet_fusion.go index cc01acf5f..33e71da16 100644 --- a/logic/controller/pet_fusion.go +++ b/logic/controller/pet_fusion.go @@ -108,7 +108,7 @@ func (h Controller) PetFusion(data *pet.C2S_PetFusion, c *player.Player) (result shinycont = 100 } if grand.Meet(shinycont, 100) { - r.FixShiny() + r.RandomByWeightShiny() } c.Service.Pet.PetAdd(r) diff --git a/logic/service/fight/input.go b/logic/service/fight/input.go index ac60e5012..55398bb88 100644 --- a/logic/service/fight/input.go +++ b/logic/service/fight/input.go @@ -13,6 +13,7 @@ import ( "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + "blazing/logic/service/player" "blazing/logic/service/user" "math/rand" "sync" @@ -138,7 +139,13 @@ func (f *FightC) initplayer(c common.PlayerI) (*input.Input, errorcode.ErrorCode in.AllPet = make([]*info.BattlePetEntity, 0) in.InitAttackValue() for i := 0; i < len(c.GetInfo().PetList); i++ { - in.AllPet = append(in.AllPet, info.CreateBattlePetEntity(c.GetInfo().PetList[i], f.rand)) + //玩家精灵重置到100等级 + pet := c.GetInfo().PetList[i] + if _, ok := c.(*player.Player); ok { + pet.Level = utils.Min(pet.Level, 100) + } + + in.AllPet = append(in.AllPet, info.CreateBattlePetEntity(pet, f.rand)) } diff --git a/logic/service/fight/input/fight.go b/logic/service/fight/input/fight.go index 1b7ff6165..f954d8755 100644 --- a/logic/service/fight/input/fight.go +++ b/logic/service/fight/input/fight.go @@ -221,8 +221,8 @@ func (our *Input) CalculatePower(deftype *Input, skill *info.SkillEntity) alpaca // 10. PwrDouble: 攻击时,若对方处于异常状态, 则威力翻倍; // 11. DmgBindHpDv: 造成的伤害等于自身剩余体力*1/2+潜力(个体值); 默认: 0 if skill.DmgBindLv != 0 { - level := utils.Min(deftype.CurrentPet.Info.Level, 100) - skill.Power = int(level) + //level := utils.Min(deftype.CurrentPet.Info.Level, 100) + skill.Power = int(deftype.CurrentPet.Info.Level) } if skill.PwrBindDv != 0 { diff --git a/login/internal/cmd/cmd.go b/login/internal/cmd/cmd.go index cdaa143d5..244391bfd 100644 --- a/login/internal/cmd/cmd.go +++ b/login/internal/cmd/cmd.go @@ -22,7 +22,7 @@ var ( Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { - // g.Dump(g.DB("test").GetConfig()) + r := parser.GetOpt("debug", false) if r.Bool() { g.DB().SetDebug(true) diff --git a/modules/config/service/egg.go b/modules/config/service/egg.go index 464618c74..aa845c446 100644 --- a/modules/config/service/egg.go +++ b/modules/config/service/egg.go @@ -35,7 +35,7 @@ func (s *EggService) GetData(p1 uint32) []int32 { return petIDs } -func (s *EggService) GetResult(m, f uint32) uint32 { +func (s *EggService) GetResult(m, f uint32) (uint32, bool) { //cacheKey := strings.Join([]string{fmt.Sprintf("%d", p1), fmt.Sprintf("%d", p2)}, ":") md := dbm_enable(s.Model) @@ -45,10 +45,14 @@ func (s *EggService) GetResult(m, f uint32) uint32 { if pet != nil { t, _ := utils.RandomByWeight(pet.OutputMons, pet.Probs) - return uint32(t) + if pet.OutputMons[len(pet.OutputMons)-1] == int32(t) { + return uint32(t), true + } else { + return uint32(t), false + } } - return 0 + return 0, false } diff --git a/modules/config/service/shiny.go b/modules/config/service/shiny.go index e941ceb73..f2a372e34 100644 --- a/modules/config/service/shiny.go +++ b/modules/config/service/shiny.go @@ -2,6 +2,7 @@ package service import ( "blazing/common/data" + "blazing/common/utils" "blazing/cool" "blazing/modules/config/model" "context" @@ -88,6 +89,34 @@ func (s *ShinyService) FixShiny(id uint32) *model.ColorfulSkin { return &v +} +func (s *ShinyService) RandomByWeightShiny(id uint32) *model.ColorfulSkin { + var ret []model.ColorfulSkin + + // 执行 Raw SQL 并扫描返回值 + dbm_enable(s.Model). + Wheref(`bind_elf_ids @> ?::jsonb`, id). + Wheref(`jsonb_typeof(bind_elf_ids) = ?`, "array").Scan(&ret) + if len(ret) == 0 { + return nil + } + var rets []model.ColorfulSkin + var props []int + + for _, v := range ret { + rets = append(rets, v) + props = append(props, int(v.ElfProbability)) + + } + + r, _ := utils.RandomByWeight(rets, props) + if cool.Config.ServerInfo.IsVip == 0 { + m := cool.DBM(s.Model).Where("id", r.ID) + m.Increment("usage_count", 1) + } + + return &r + } func (s *ShinyService) GetShiny(id int) *data.GlowFilter { var ret []model.ColorfulSkin @@ -102,5 +131,4 @@ func (s *ShinyService) GetShiny(id int) *data.GlowFilter { return &v.Color - return nil } diff --git a/modules/player/model/pet.go b/modules/player/model/pet.go index 699ccd9f5..879a77e5d 100644 --- a/modules/player/model/pet.go +++ b/modules/player/model/pet.go @@ -5,6 +5,7 @@ import ( "blazing/common/data/xmlres" "blazing/common/utils" "blazing/cool" + "blazing/logic/service/player" "blazing/modules/config/service" "errors" "fmt" @@ -222,15 +223,31 @@ func (pet *PetInfo) RandShiny() { //g.Dump(ttt.ShinyInfo) // ttt.Shiny = 0 //待确认是否刷新异色 } + +// 强制选色 func (pet *PetInfo) FixShiny() { co := service.NewShinyService().FixShiny(pet.ID) if co != nil { pet.ShinyInfo = append(pet.ShinyInfo, co.Color) + } else { + r := player.GenerateRandomOffspringMatrix() + var t data.GlowFilter + t.ColorMatrixFilter = r.Get() + pet.ShinyInfo = append(pet.ShinyInfo, t) + } - //o.ShinyInfo[0].ColorMatrixFilter = GenerateRandomOffspringMatrix().Get() - //g.Dump(ttt.ShinyInfo) - // ttt.Shiny = 0 //待确认是否刷新异色 + +} + +// 比重融合 +func (pet *PetInfo) RandomByWeightShiny() { + + co := service.NewShinyService().RandomByWeightShiny(pet.ID) + if co != nil { + pet.ShinyInfo = append(pet.ShinyInfo, co.Color) + } + } func (pet *PetInfo) IsShiny() bool { @@ -354,7 +371,7 @@ func calculateExperience(level uint32, baseValue uint32) int64 { // 总经验是两部分之和,并向上取整 totalExp := math.Ceil(partA + partB) - return int64(totalExp) + return int64(totalExp) } // PetEffectInfo 精灵特性信息结构 diff --git a/modules/player/service/egg.go b/modules/player/service/egg.go index d2fa8bf42..7ccd7278d 100644 --- a/modules/player/service/egg.go +++ b/modules/player/service/egg.go @@ -156,7 +156,7 @@ func (s *EggService) GetEgg() *model.PetInfo { return nil } - mpets := service.NewEggService().GetResult(tt.CurEgg.MalePetID, tt.CurEgg.FeMalePetID) + mpets, isshiny := service.NewEggService().GetResult(tt.CurEgg.MalePetID, tt.CurEgg.FeMalePetID) if mpets == 0 { return nil } @@ -164,10 +164,10 @@ func (s *EggService) GetEgg() *model.PetInfo { dv := grand.N(int(tt.Data.Intimacy+tt.CurEgg.EggID*2), 31) p := model.GenPetInfo(int(mpets), dv, -1, 0, 1, nil, -1) - if mpets != tt.CurEgg.MalePetID && mpets != tt.CurEgg.FeMalePetID { + if isshiny { shinycont := int(tt.CurEgg.EggID) * int(tt.CurEgg.EggID) if grand.Meet(shinycont, 100) { - p.FixShiny() + p.RandomByWeightShiny() } }