挖矿奖励优化
This commit is contained in:
parent
db3a30b61d
commit
4fcae1b8f0
@ -88,10 +88,35 @@ func GetRandItem() []*item.Item {
|
|||||||
return gamedata.GetItemList(Info, "Items")
|
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)
|
data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 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)
|
Status := p.GetActivityStatus(activity.ACT_TYPE_MINING)
|
||||||
Template := miningCfg.GetTemplate(ActivityInfo.Id)
|
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()
|
MiningMod := p.PlayMod.getMiningMod()
|
||||||
p.PushClientRes(&msg.ResMining{
|
p.PushClientRes(&msg.ResMining{
|
||||||
Id: int32(ActivityInfo.Id),
|
Id: int32(ActivityInfo.Id),
|
||||||
@ -196,6 +203,7 @@ func (p *Player) MiningBackData() {
|
|||||||
Gem: GoUtil.IntToInt32(MiningMod.GetGem()),
|
Gem: GoUtil.IntToInt32(MiningMod.GetGem()),
|
||||||
Map: MiningMod.GetMap(),
|
Map: MiningMod.GetMap(),
|
||||||
Mining: int32(MiningMod.GetMining()),
|
Mining: int32(MiningMod.GetMining()),
|
||||||
|
PassReward: resPassRewardList,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -162,6 +162,22 @@ func ItemToMsg(items []*Item) []*msg.ItemInfo {
|
|||||||
return itemList
|
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 {
|
func Merge(Item1, Item2 []*Item) []*Item {
|
||||||
if Item1 == nil {
|
if Item1 == nil {
|
||||||
|
|||||||
@ -81,12 +81,12 @@ func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) {
|
|||||||
return Items, nil
|
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)
|
GemList := miningCfg.GetPassGem(m.Pass)
|
||||||
if len(m.Gem) < len(GemList) {
|
if len(m.Gem) < len(GemList) {
|
||||||
return nil, 0, fmt.Errorf("gem is not full")
|
return nil, 0, fmt.Errorf("gem is not full")
|
||||||
}
|
}
|
||||||
Items := miningCfg.GetPassItem(m.Pass)
|
Items := miningCfg.GetPassItem(m.Pass, needStar)
|
||||||
m.Pass++
|
m.Pass++
|
||||||
Ming := m.Mining
|
Ming := m.Mining
|
||||||
m.Mining = 0
|
m.Mining = 0
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import (
|
|||||||
"server/game/mod/fur"
|
"server/game/mod/fur"
|
||||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||||
"server/game/mod/mail"
|
"server/game/mod/mail"
|
||||||
|
"server/game/mod/mining"
|
||||||
"server/game/mod/order"
|
"server/game/mod/order"
|
||||||
"server/game/mod/playroom"
|
"server/game/mod/playroom"
|
||||||
sevenLogin "server/game/mod/seven_login"
|
sevenLogin "server/game/mod/seven_login"
|
||||||
@ -80,3 +81,7 @@ func (p *Player) GetFaceMod() *face.FaceMod {
|
|||||||
func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod {
|
func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod {
|
||||||
return p.PlayMod.getLimitedTimeEventMod()
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
itemList, err := MiningMod.Take(req.Map, int(req.Gem))
|
itemList, err := MiningMod.Take(req.Map, int(req.Gem))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
player.SendErrClienRes(&msg.ResMiningTake{
|
player.SendErrClienRes(&msg.ResMiningTake{
|
||||||
@ -3157,7 +3158,9 @@ func ReqMiningReward(player *Player, buf []byte) error {
|
|||||||
})
|
})
|
||||||
return fmt.Errorf("activity not start")
|
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 {
|
if err != nil {
|
||||||
player.SendErrClienRes(&msg.ResMiningReward{
|
player.SendErrClienRes(&msg.ResMiningReward{
|
||||||
Code: msg.RES_CODE_FAIL,
|
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