From 4fcae1b8f0b2432f56f4bb7874958dbe97d5e16d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:14:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=96=E7=9F=BF=E5=A5=96=E5=8A=B1=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mining/mining_cfg.go | 29 ++++++++++++++++++++++-- src/server/game/activity_func.go | 24 +++++++++++++------- src/server/game/mod/item/Item.go | 16 +++++++++++++ src/server/game/mod/mining/mining.go | 4 ++-- src/server/game/mod_factory.go | 5 ++++ src/server/game/register_network_func.go | 5 +++- src/server/test/mining_test.go | 20 ++++++++++++++++ 7 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 src/server/test/mining_test.go diff --git a/src/server/conf/mining/mining_cfg.go b/src/server/conf/mining/mining_cfg.go index 3e4d3784..6ce840f3 100644 --- a/src/server/conf/mining/mining_cfg.go +++ b/src/server/conf/mining/mining_cfg.go @@ -88,10 +88,35 @@ func GetRandItem() []*item.Item { return gamedata.GetItemList(Info, "Items") } -func GetPassItem(Id int) []*item.Item { +func GetPassItem(Id int, needStar int) []*item.Item { data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) if err != nil { return nil } - return gamedata.GetItemList(data, "Items") + items := gamedata.GetItemList(data, "Items") + starReward := gamedata.GetIntValue(data, "StarReward") + var starnum int + if starReward > 0 { + starnum = int(needStar * starReward / 100) + if starnum > 0 { + items = append(items, &item.Item{ + Id: item.ITEM_STAR_ID, + Num: starnum, + }) + } + } + return items +} + +func GetPassItemList(needStar int) map[int][]*item.Item { + data, err := gamedata.GetData(CFG_MINING_PASS) + if err != nil { + return nil + } + result := make(map[int][]*item.Item) + for k := range data { + Id := GoUtil.Int(k) + result[Id] = GetPassItem(Id, needStar) + } + return result } diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index dce8cf2d..2d917909 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -186,16 +186,24 @@ func (p *Player) MiningBackData() { } Status := p.GetActivityStatus(activity.ACT_TYPE_MINING) Template := miningCfg.GetTemplate(ActivityInfo.Id) + DecorateMod := p.PlayMod.getDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + passRewardList := miningCfg.GetPassItemList(needStar) + resPassRewardList := make(map[int32]*msg.ItemList) + for k, v := range passRewardList { + resPassRewardList[int32(k)] = item.ItemListToMsg(v) + } MiningMod := p.PlayMod.getMiningMod() p.PushClientRes(&msg.ResMining{ - Id: int32(ActivityInfo.Id), - Status: int32(Status), - EndTime: int32(ActivityInfo.EndT), - Template: int32(Template), - Pass: int32(MiningMod.GetPass()), - Gem: GoUtil.IntToInt32(MiningMod.GetGem()), - Map: MiningMod.GetMap(), - Mining: int32(MiningMod.GetMining()), + Id: int32(ActivityInfo.Id), + Status: int32(Status), + EndTime: int32(ActivityInfo.EndT), + Template: int32(Template), + Pass: int32(MiningMod.GetPass()), + Gem: GoUtil.IntToInt32(MiningMod.GetGem()), + Map: MiningMod.GetMap(), + Mining: int32(MiningMod.GetMining()), + PassReward: resPassRewardList, }) } diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 8b7918f1..f015881f 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -162,6 +162,22 @@ func ItemToMsg(items []*Item) []*msg.ItemInfo { return itemList } +func ItemListToMsg(items []*Item) *msg.ItemList { + if items == nil { + return nil + } + itemList := make([]*msg.ItemInfo, 0, len(items)) + for _, v := range items { + itemList = append(itemList, &msg.ItemInfo{ + Id: int32(v.Id), + Num: int32(v.Num), + }) + } + return &msg.ItemList{ + List: itemList, + } +} + // 道具叠加 func Merge(Item1, Item2 []*Item) []*Item { if Item1 == nil { diff --git a/src/server/game/mod/mining/mining.go b/src/server/game/mod/mining/mining.go index 4bcaf668..8a020f0d 100644 --- a/src/server/game/mod/mining/mining.go +++ b/src/server/game/mod/mining/mining.go @@ -81,12 +81,12 @@ func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) { return Items, nil } -func (m *MiningMod) GetReward() ([]*item.Item, int, error) { +func (m *MiningMod) GetReward(needStar int) ([]*item.Item, int, error) { GemList := miningCfg.GetPassGem(m.Pass) if len(m.Gem) < len(GemList) { return nil, 0, fmt.Errorf("gem is not full") } - Items := miningCfg.GetPassItem(m.Pass) + Items := miningCfg.GetPassItem(m.Pass, needStar) m.Pass++ Ming := m.Mining m.Mining = 0 diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index d6dc6dcb..b9da4fae 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -13,6 +13,7 @@ import ( "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" + "server/game/mod/mining" "server/game/mod/order" "server/game/mod/playroom" sevenLogin "server/game/mod/seven_login" @@ -80,3 +81,7 @@ func (p *Player) GetFaceMod() *face.FaceMod { func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod { return p.PlayMod.getLimitedTimeEventMod() } + +func (p *Player) GetMiningMod() *mining.MiningMod { + return p.PlayMod.getMiningMod() +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 3d5fcef4..5561b571 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3123,6 +3123,7 @@ func ReqMiningTake(player *Player, buf []byte) error { }) return err } + itemList, err := MiningMod.Take(req.Map, int(req.Gem)) if err != nil { player.SendErrClienRes(&msg.ResMiningTake{ @@ -3157,7 +3158,9 @@ func ReqMiningReward(player *Player, buf []byte) error { }) return fmt.Errorf("activity not start") } - itemList, Mining, err := MiningMod.GetReward() + DecorateMod := player.PlayMod.getDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + itemList, Mining, err := MiningMod.GetReward(needStar) if err != nil { player.SendErrClienRes(&msg.ResMiningReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/mining_test.go b/src/server/test/mining_test.go new file mode 100644 index 00000000..35b7b500 --- /dev/null +++ b/src/server/test/mining_test.go @@ -0,0 +1,20 @@ +package test + +import ( + miningCfg "server/conf/mining" + "server/game" + "testing" +) + +func TestGetPassReward(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + MiningMod := player.GetMiningMod() + DecorateMod := player.GetDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + Items := miningCfg.GetPassItem(3, needStar) + if len(Items) == 0 { + t.Errorf("GetPassReward failed, pass: %d, needStar: %d", MiningMod.Pass, needStar) + } + player.MiningBackData() +}