挖矿奖励优化
This commit is contained in:
parent
db3a30b61d
commit
4fcae1b8f0
@ -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
|
||||
}
|
||||
|
||||
@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
20
src/server/test/mining_test.go
Normal file
20
src/server/test/mining_test.go
Normal 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()
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user