物品、阵容、英雄列表、装备、宝物
This commit is contained in:
parent
570f9a57fd
commit
09538cc2ba
@ -67,13 +67,13 @@ message ItemSaleReq {
|
||||
|
||||
message Equip {
|
||||
uint64 Uid = 1; //玩家装备在列表中的唯一ID,列表中会有多个相同装备, 故不能用Id做为键
|
||||
uint32 Id = 2;
|
||||
uint32 Level = 3;
|
||||
uint32 RefineExp = 4;
|
||||
uint32 RefineLevel = 5;
|
||||
repeated uint32 Holes1 = 6;
|
||||
repeated uint32 Holes2 = 7;
|
||||
uint64 HeroUid = 8;
|
||||
uint32 Id = 2; //配置表ID
|
||||
uint32 Level = 3; //等级经验
|
||||
uint32 RefineExp = 4; //强化等级
|
||||
uint32 RefineLevel = 5; //精炼等级
|
||||
repeated uint64 Holes1 = 6; //普通孔镶嵌
|
||||
repeated uint64 Holes2 = 7; //特殊孔镶嵌
|
||||
uint64 HeroUid = 8; //装备的英雄
|
||||
}
|
||||
|
||||
// MsgId.ModEquipList: 6011
|
||||
@ -109,8 +109,13 @@ message EquipRefineReq {
|
||||
|
||||
message Treasure {
|
||||
uint64 Uid = 1; //玩家宝物在列表中的唯一ID,列表中会有多个相同宝物, 故不能用Id做为键
|
||||
uint32 Id = 2;
|
||||
uint64 HeroUid = 7;
|
||||
uint32 Id = 2; //配置表ID
|
||||
uint32 Exp = 3; //等级经验
|
||||
uint32 Level = 4; //强化等级
|
||||
uint32 RefineLevel = 5; //精炼等级
|
||||
repeated uint64 Holes1 = 6; //普通孔镶嵌
|
||||
repeated uint64 Holes2 = 7; //特殊孔镶嵌
|
||||
uint64 HeroUid = 8; //装备的英雄
|
||||
}
|
||||
|
||||
// MsgId.ModItemTreasureList = 6021;
|
||||
|
@ -156,7 +156,7 @@ func (this *PlayerHandler) EquipUpgrade(player *logic.Player, msg *net.Message)
|
||||
ChangeList: []*pb.EquipChange{{Equip: equip.BuildMsgEquip(), ChangeType: pb.ChangeType_Add}},
|
||||
})
|
||||
|
||||
player.CheckUpgradeMaster(pb.UpgradeMasterType_MasterEquipUpgrade, preLevel, equip.Level, equip.HeroUid)
|
||||
player.SendUpgradeMaster(pb.UpgradeMasterType_MasterEquipUpgrade, preLevel, equip.Level, equip.HeroUid)
|
||||
return
|
||||
}
|
||||
|
||||
@ -294,7 +294,7 @@ func (this *PlayerHandler) EquipRefine(player *logic.Player, msg *net.Message) {
|
||||
})
|
||||
|
||||
if equip.RefineLevel != preLevel {
|
||||
player.CheckUpgradeMaster(pb.UpgradeMasterType_MasterEquipRefine, preLevel, equip.RefineLevel, equip.HeroUid)
|
||||
player.SendUpgradeMaster(pb.UpgradeMasterType_MasterEquipRefine, preLevel, equip.RefineLevel, equip.HeroUid)
|
||||
}
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ func (this *PlayerHandler) TreasureUpgrade(player *logic.Player, msg *net.Messag
|
||||
})
|
||||
|
||||
if treasure.Level != preLevel {
|
||||
player.CheckUpgradeMaster(pb.UpgradeMasterType_MasterTreasureUpgrade, preLevel, treasure.Level, treasure.HeroUid)
|
||||
player.SendUpgradeMaster(pb.UpgradeMasterType_MasterTreasureUpgrade, preLevel, treasure.Level, treasure.HeroUid)
|
||||
}
|
||||
}
|
||||
|
||||
@ -506,6 +506,6 @@ func (this *PlayerHandler) TreasureRefine(player *logic.Player, msg *net.Message
|
||||
ChangeList: []*pb.TreasureChange{{Treasure: equip.BuildMsgTreasure(), ChangeType: pb.ChangeType_Add}},
|
||||
})
|
||||
|
||||
player.CheckUpgradeMaster(pb.UpgradeMasterType_MasterTreasureRefine, preLevel, equip.Level, equip.HeroUid)
|
||||
player.SendUpgradeMaster(pb.UpgradeMasterType_MasterTreasureRefine, preLevel, equip.Level, equip.HeroUid)
|
||||
return
|
||||
}
|
||||
|
@ -143,11 +143,16 @@ func (this *PlayerHandler) LineupHeroChange(player *logic.Player, msg *net.Messa
|
||||
|
||||
var setups [7]bool
|
||||
for i := 0; i < 8; i++ {
|
||||
if lineup.Heroes[i] != nil && hero.Uid == lineup.Heroes[i].HeroUid {
|
||||
if lineup.Heroes[i] == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if hero.Uid == lineup.Heroes[i].HeroUid {
|
||||
this.logger.Errorf("The hero has set into the lineup, hero.Uid: %d, index: %d", hero.Uid, i)
|
||||
_ = player.TipNotice(proto.TipLineupHeroHasSet)
|
||||
return
|
||||
}
|
||||
|
||||
if i < 6 {
|
||||
if lineup.Heroes[i].Position > 0 {
|
||||
setups[lineup.Heroes[i].Position] = true
|
||||
@ -236,16 +241,10 @@ func (this *PlayerHandler) LineupHeroPosition(player *logic.Player, msg *net.Mes
|
||||
setups[req.PositionList[i]] = true
|
||||
}
|
||||
|
||||
for i, lineupHero := range lineup.Heroes {
|
||||
if i > 5 {
|
||||
break
|
||||
for i := range 6 {
|
||||
if lineup.Heroes[i] != nil {
|
||||
lineup.Heroes[i].Position = req.PositionList[i]
|
||||
}
|
||||
|
||||
if lineupHero == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
lineupHero.Position = req.PositionList[i]
|
||||
}
|
||||
|
||||
player.SaveField("lineup.heroes", lineup.Heroes)
|
||||
@ -341,7 +340,11 @@ func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Messag
|
||||
|
||||
if equip != nil {
|
||||
if equip.HeroUid != 0 {
|
||||
for i := range lineup.Heroes {
|
||||
util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
||||
if lineup.Heroes[i] == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if lineup.Heroes[i].HeroUid == equip.HeroUid {
|
||||
var preLineupHero = lineup.Heroes[i]
|
||||
if preLineupHero.Equip[req.EquipType] != 0 {
|
||||
@ -349,8 +352,10 @@ func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Messag
|
||||
player.SaveArray("lineup.heroes", i, preLineupHero)
|
||||
lineupHeroList = append(lineupHeroList, preLineupHero.BuildMsgLineupHero(uint32(i)))
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
}
|
||||
|
||||
equip.HeroUid = lineupHero.HeroUid
|
||||
@ -454,7 +459,11 @@ func (this *PlayerHandler) LineupHeroTreasure(player *logic.Player, msg *net.Mes
|
||||
|
||||
if treasure != nil {
|
||||
if treasure.HeroUid != 0 {
|
||||
for i := range lineup.Heroes {
|
||||
util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
||||
if lineup.Heroes[i] == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if lineup.Heroes[i].HeroUid == treasure.HeroUid {
|
||||
var preLineupHero = lineup.Heroes[i]
|
||||
if preLineupHero.Treasure[req.TreasureType] != 0 {
|
||||
@ -462,8 +471,10 @@ func (this *PlayerHandler) LineupHeroTreasure(player *logic.Player, msg *net.Mes
|
||||
player.SaveArray("lineup.heroes", i, preLineupHero)
|
||||
lineupHeroList = append(lineupHeroList, preLineupHero.BuildMsgLineupHero(uint32(i)))
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
}
|
||||
|
||||
treasure.HeroUid = lineupHero.HeroUid
|
||||
@ -551,14 +562,9 @@ func (this *PlayerHandler) LineupCreate(player *logic.Player, msg *net.Message)
|
||||
return
|
||||
}
|
||||
|
||||
var previous *logic.PlayerLineup
|
||||
for _, v := range player.Lineup {
|
||||
if v.Active {
|
||||
previous = v
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
var previous = util.MapFindValue(player.Lineup, func(v *logic.PlayerLineup) bool {
|
||||
return v.Active
|
||||
})
|
||||
if previous == nil {
|
||||
_ = player.TipNotice(proto.TipServerError)
|
||||
return
|
||||
|
@ -213,6 +213,10 @@ func (this *Player) initLineup(cur *GameTime) {
|
||||
|
||||
var i = uint32(1)
|
||||
for _, hero := range this.Hero {
|
||||
if i > 5 {
|
||||
break
|
||||
}
|
||||
|
||||
var lineupHero = &PlayerLineupHero{
|
||||
HeroUid: hero.Uid,
|
||||
Position: i + 1,
|
||||
|
@ -12,8 +12,8 @@ type PlayerEquip struct {
|
||||
Level uint32 `bson:"level"`
|
||||
RefineExp uint32 `bson:"refine_exp"`
|
||||
RefineLevel uint32 `bson:"refine_level"`
|
||||
Holes1 []uint32 `bson:"holes"`
|
||||
Holes2 []uint32 `bson:"holes"`
|
||||
Holes1 []uint64 `bson:"holes"`
|
||||
Holes2 []uint64 `bson:"holes"`
|
||||
HeroUid uint64 `bson:"hero_id"`
|
||||
}
|
||||
|
||||
@ -49,8 +49,8 @@ func (this *Player) addEquip(equipTable *data.Equip, logType LogType) bool {
|
||||
Level: uint32(levelTable.Level),
|
||||
RefineExp: 0,
|
||||
RefineLevel: uint32(refineTable.RefineLevel),
|
||||
Holes1: make([]uint32, equipTable.Holes1),
|
||||
Holes2: make([]uint32, equipTable.Holes2),
|
||||
Holes1: make([]uint64, equipTable.Holes1),
|
||||
Holes2: make([]uint64, equipTable.Holes2),
|
||||
HeroUid: 0,
|
||||
}
|
||||
|
||||
@ -105,15 +105,15 @@ func (this *Player) AddEquips(equipId, nums uint32, logType LogType) bool {
|
||||
Level: uint32(levelTable.Level),
|
||||
RefineExp: 0,
|
||||
RefineLevel: uint32(refineTable.RefineLevel),
|
||||
Holes1: make([]uint32, equipTable.Holes1),
|
||||
Holes2: make([]uint32, equipTable.Holes2),
|
||||
Holes1: make([]uint64, equipTable.Holes1),
|
||||
Holes2: make([]uint64, equipTable.Holes2),
|
||||
HeroUid: 0,
|
||||
}
|
||||
|
||||
this.Equip[equip.Uid] = equip
|
||||
this.SaveModel(equip)
|
||||
|
||||
changeList = append(changeList, &pb.EquipChange{Equip: equip.BuildMsgEquip(), ChangeType: pb.ChangeType_Add})
|
||||
changeList = append(changeList, &pb.EquipChange{ChangeType: pb.ChangeType_Add, Equip: equip.BuildMsgEquip()})
|
||||
|
||||
//this.CheckAchievement(proto.AchievementTypeEquipLevel, uint32(equipTable.Level), 1)
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ func (this *Player) UpdateHeroAttrs(hero *PlayerHero) bool {
|
||||
for _, lineup := range this.Lineup {
|
||||
if lineup.Active {
|
||||
for _, lineupHero := range lineup.Heroes {
|
||||
if lineupHero.HeroUid == hero.Uid {
|
||||
if lineupHero != nil && lineupHero.HeroUid == hero.Uid {
|
||||
return this.updateHeroAttrs(hero, lineup, lineupHero)
|
||||
}
|
||||
}
|
||||
@ -336,16 +336,12 @@ func (this *Player) reduceHero(hero *PlayerHero, logType LogType) *pb.HeroChange
|
||||
this.WipeModel(hero)
|
||||
|
||||
//if logType > LogTypeNone {
|
||||
// this.manager.eventManager.PlayerHeroConsume(this, logType, itemId, itemNum)
|
||||
// this.manager.eventManager.PlayerHeroConsume(this, logType, hero.Id, itemNum)
|
||||
//}
|
||||
|
||||
return &pb.HeroChange{ChangeType: pb.ChangeType_Delete, Hero: hero.BuildMsgHero()}
|
||||
}
|
||||
|
||||
func (this *Player) ReduceHero(hero *PlayerHero, logType LogType) {
|
||||
_ = this.Send(uint16(pb.ModId_ModuleHero), uint16(pb.MsgId_ModHeroChange), &pb.HeroChangeListAck{ChangeList: []*pb.HeroChange{this.reduceHero(hero, logType)}})
|
||||
}
|
||||
|
||||
func (this *Player) ReduceHeroes(heroes map[uint64]*PlayerHero, logType LogType) {
|
||||
var changeList = make([]*pb.HeroChange, 0, len(heroes))
|
||||
for _, hero := range heroes {
|
||||
|
@ -157,8 +157,13 @@ func (this *Player) CheckItem(itemId, itemNum uint32) (bool, proto.TipError) {
|
||||
return true, nil
|
||||
}
|
||||
return false, proto.TipItemNotEnough
|
||||
case pb.ItemType_ItemHero:
|
||||
case pb.ItemType_ItemEquip:
|
||||
case pb.ItemType_ItemTreasure:
|
||||
if this.CheckTreasure(uint32(itemTable.Value), itemNum) {
|
||||
return true, nil
|
||||
}
|
||||
return false, proto.TipItemNotEnough
|
||||
case pb.ItemType_ItemArtifact:
|
||||
case pb.ItemType_ItemSack:
|
||||
case pb.ItemType_ItemOrnament:
|
||||
@ -221,8 +226,10 @@ func (this *Player) ReduceItem(itemId, itemNum uint32, logType LogType) {
|
||||
this.ReduceMoney(pb.MoneyType(itemTable.SubType), itemNum, logType)
|
||||
case pb.ItemType_ItemProp:
|
||||
this.reduceItem(itemId, itemNum, logType)
|
||||
case pb.ItemType_ItemHero:
|
||||
case pb.ItemType_ItemEquip:
|
||||
case pb.ItemType_ItemTreasure:
|
||||
this.ReduceTreasure(uint32(itemTable.Value), itemNum, logType)
|
||||
case pb.ItemType_ItemArtifact:
|
||||
case pb.ItemType_ItemSack:
|
||||
case pb.ItemType_ItemOrnament:
|
||||
|
@ -3,6 +3,7 @@ package logic
|
||||
import (
|
||||
"ecs/proto/pb"
|
||||
"ecs/servers/game/data"
|
||||
"github.com/oylshe1314/framework/util"
|
||||
"sort"
|
||||
)
|
||||
|
||||
@ -30,7 +31,7 @@ func (this *PlayerLineup) BuildMsgLineup() *pb.Lineup {
|
||||
return msg
|
||||
}
|
||||
|
||||
func (this *Player) CheckUpgradeMaster(masterType pb.UpgradeMasterType, preLevel, curLevel uint32, heroUid uint64) {
|
||||
func (this *Player) SendUpgradeMaster(masterType pb.UpgradeMasterType, preLevel, curLevel uint32, heroUid uint64) {
|
||||
if heroUid == 0 {
|
||||
return
|
||||
}
|
||||
@ -59,24 +60,16 @@ func (this *Player) CheckUpgradeMaster(masterType pb.UpgradeMasterType, preLevel
|
||||
return
|
||||
}
|
||||
|
||||
var lineup *PlayerLineup
|
||||
for _, v := range this.Lineup {
|
||||
if v.Active {
|
||||
lineup = v
|
||||
}
|
||||
}
|
||||
|
||||
var lineup = util.MapFindValue(this.Lineup, func(v *PlayerLineup) bool {
|
||||
return v.Active
|
||||
})
|
||||
if lineup == nil {
|
||||
return
|
||||
}
|
||||
|
||||
var lineupHero *PlayerLineupHero
|
||||
for _, v := range lineup.Heroes {
|
||||
if v.HeroUid == heroUid {
|
||||
lineupHero = v
|
||||
}
|
||||
}
|
||||
|
||||
var lineupHero = util.SliceFindValue(lineup.Heroes[:], func(i int) bool {
|
||||
return lineup.Heroes[i] != nil && lineup.Heroes[i].HeroUid == heroUid
|
||||
})
|
||||
if lineupHero == nil {
|
||||
return
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
package logic
|
||||
|
||||
import "ecs/proto/pb"
|
||||
import (
|
||||
"ecs/proto/pb"
|
||||
"github.com/oylshe1314/framework/util"
|
||||
)
|
||||
|
||||
type PlayerTreasure struct {
|
||||
Uid uint64 `bson:"uid" key:"1"`
|
||||
@ -8,6 +11,8 @@ type PlayerTreasure struct {
|
||||
Exp uint32 `bson:"exp"`
|
||||
Level uint32 `bson:"level"`
|
||||
RefineLevel uint32 `bson:"refine_level"`
|
||||
Holes1 []uint64 `bson:"holes"`
|
||||
Holes2 []uint64 `bson:"holes"`
|
||||
HeroUid uint64 `bson:"hero_id"`
|
||||
}
|
||||
|
||||
@ -15,12 +20,108 @@ func (this *PlayerTreasure) BuildMsgTreasure() *pb.Treasure {
|
||||
return &pb.Treasure{
|
||||
Uid: this.Uid,
|
||||
Id: this.Id,
|
||||
Exp: this.Exp,
|
||||
Level: this.Level,
|
||||
RefineLevel: this.RefineLevel,
|
||||
Holes1: this.Holes1,
|
||||
Holes2: this.Holes2,
|
||||
HeroUid: this.HeroUid,
|
||||
}
|
||||
}
|
||||
|
||||
func (this *Player) AddTreasures(equipId, nums uint32, logType LogType) bool {
|
||||
func (this *Player) AddTreasures(treasureId, nums uint32, logType LogType) bool {
|
||||
var treasureTable = this.manager.tables.Treasure.Find1(int(treasureId))
|
||||
if treasureTable == nil {
|
||||
this.manager.logger.Errorf("Table 'Treasure' was not found, treasureId: %d, level: %d", treasureId, 1)
|
||||
return false
|
||||
}
|
||||
|
||||
var levelTable = this.manager.tables.TreasureLevel.Find3(treasureTable.Id, 1)
|
||||
if levelTable == nil {
|
||||
this.manager.logger.Errorf("Table 'TreasureLevel' was not found, treasureId %d, level: %d", treasureTable.Id, 1)
|
||||
return false
|
||||
}
|
||||
|
||||
var refineTable = this.manager.tables.TreasureRefine.Find3(treasureTable.Id, 0)
|
||||
if refineTable == nil {
|
||||
this.manager.logger.Errorf("Table 'EquipRefine' was not fount, treasureId %d, level: %d", treasureTable.Id, 1)
|
||||
return false
|
||||
}
|
||||
|
||||
if nums < 1 {
|
||||
nums = 1
|
||||
}
|
||||
|
||||
var changeList []*pb.TreasureChange
|
||||
for range nums {
|
||||
var treasure = &PlayerTreasure{
|
||||
Uid: util.RandomUid(),
|
||||
Id: uint32(treasureTable.Id),
|
||||
Exp: 0,
|
||||
Level: uint32(levelTable.Level),
|
||||
RefineLevel: uint32(refineTable.RefineLevel),
|
||||
Holes1: make([]uint64, treasureTable.Holes1),
|
||||
Holes2: make([]uint64, treasureTable.Holes2),
|
||||
HeroUid: 0,
|
||||
}
|
||||
|
||||
this.Treasure[treasure.Uid] = treasure
|
||||
this.SaveModel(treasure)
|
||||
|
||||
changeList = append(changeList, &pb.TreasureChange{ChangeType: pb.ChangeType_Add, Treasure: treasure.BuildMsgTreasure()})
|
||||
|
||||
//this.CheckAchievement(proto.AchievementTypeEquipLevel, uint32(treasureTable.Level), 1)
|
||||
}
|
||||
|
||||
_ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemTreasureChange), &pb.TreasureChangeListAck{
|
||||
ChangeList: changeList,
|
||||
})
|
||||
return true
|
||||
}
|
||||
|
||||
func (this *Player) CheckTreasure(treasureId uint32, nums uint32) bool {
|
||||
for _, treasure := range this.Treasure {
|
||||
if treasure.Id == treasureId && treasure.Level <= 1 && treasure.RefineLevel == 0 && treasure.HeroUid == 0 {
|
||||
nums -= 1
|
||||
if nums == 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (this *Player) reduceTreasure(treasure *PlayerTreasure, logType LogType) *pb.TreasureChange {
|
||||
delete(this.Treasure, treasure.Uid)
|
||||
this.WipeModel(treasure)
|
||||
|
||||
//if logType > LogTypeNone {
|
||||
// this.manager.eventManager.PlayerTreasureConsume(this, logType, treasure.Id, itemNum)
|
||||
//}
|
||||
|
||||
return &pb.TreasureChange{ChangeType: pb.ChangeType_Delete, Treasure: treasure.BuildMsgTreasure()}
|
||||
}
|
||||
|
||||
func (this *Player) ReduceTreasures(treasures map[uint64]*PlayerTreasure, logType LogType) {
|
||||
var changeList = make([]*pb.TreasureChange, 0, len(treasures))
|
||||
for _, treasure := range treasures {
|
||||
changeList = append(changeList, this.reduceTreasure(treasure, logType))
|
||||
}
|
||||
_ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemTreasureChange), &pb.TreasureChangeListAck{ChangeList: changeList})
|
||||
}
|
||||
|
||||
func (this *Player) ReduceTreasure(treasureId uint32, nums uint32, logType LogType) {
|
||||
var treasures = map[uint64]*PlayerTreasure{}
|
||||
for _, treasure := range this.Treasure {
|
||||
if treasure.Id == treasureId && treasure.Level <= 1 && treasure.RefineLevel == 0 && treasure.HeroUid == 0 {
|
||||
treasures[treasure.Uid] = treasure
|
||||
if uint32(len(treasures)) == nums {
|
||||
this.ReduceTreasures(treasures, logType)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
this.manager.logger.Error("Reduce treasure out of range, did not check before deducting?")
|
||||
}
|
||||
|
||||
func (this *Player) BuildMsgTreasureListAck() *pb.TreasureListAck {
|
||||
|
Loading…
x
Reference in New Issue
Block a user