挖矿奖励优化

This commit is contained in:
hahwu 2026-03-06 16:14:16 +08:00
parent db3a30b61d
commit 4fcae1b8f0
7 changed files with 90 additions and 13 deletions

View File

@ -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
}

View File

@ -186,6 +186,13 @@ 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),
@ -196,6 +203,7 @@ func (p *Player) MiningBackData() {
Gem: GoUtil.IntToInt32(MiningMod.GetGem()),
Map: MiningMod.GetMap(),
Mining: int32(MiningMod.GetMining()),
PassReward: resPassRewardList,
})
}

View File

@ -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 {

View File

@ -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

View File

@ -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()
}

View File

@ -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,

View File

@ -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()
}