package logic import ( "ecs/proto/pb" "ecs/servers/game/data" "github.com/oylshe1314/framework/util" ) type PlayerEquip struct { Uid uint64 `bson:"uid" key:"1"` Id uint32 `bson:"id"` Level uint32 `bson:"level"` RefineExp uint32 `bson:"refine_exp"` RefineLevel uint32 `bson:"refine_level"` Holes1 []uint64 `bson:"holes"` Holes2 []uint64 `bson:"holes"` HeroUid uint64 `bson:"hero_id"` } func (this *PlayerEquip) BuildMsgEquip() *pb.Equip { return &pb.Equip{ Uid: this.Uid, Id: this.Id, Level: this.Level, RefineExp: this.RefineExp, RefineLevel: this.RefineLevel, Holes1: this.Holes1, Holes2: this.Holes2, HeroUid: this.HeroUid, } } func (this *Player) addEquip(equipTable *data.Equip, logType LogType) bool { var levelTable = this.manager.tables.EquipLevel.Find3(equipTable.Id, 1) if levelTable == nil { this.manager.logger.Errorf("Table 'EquipLevel' was not fount, equipId %d, level: %d", equipTable.Id, 1) return false } var refineTable = this.manager.tables.EquipRefine.Find3(equipTable.Id, 0) if refineTable == nil { this.manager.logger.Errorf("Table 'EquipRefine' was not fount, equipId %d, level: %d", equipTable.Id, 1) return false } var equip = &PlayerEquip{ Uid: util.RandomUid(), Id: uint32(equipTable.Id), Level: uint32(levelTable.Level), RefineExp: 0, RefineLevel: uint32(refineTable.RefineLevel), Holes1: make([]uint64, equipTable.Holes1), Holes2: make([]uint64, equipTable.Holes2), HeroUid: 0, } this.Equip[equip.Uid] = equip this.SaveModel(equip) _ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), &pb.EquipChangeListAck{ ChangeList: []*pb.EquipChange{{Equip: equip.BuildMsgEquip(), ChangeType: pb.ChangeType_Add}}, }) //this.CheckAchievement(proto.AchievementTypeEquipLevel, uint32(equipTable.Level), 1) return true } func (this *Player) AddEquip(equipId uint32, logType LogType) bool { var equipTable = this.manager.tables.Equip.Find1(int(equipId)) if equipTable == nil { this.manager.logger.Errorf("Find equip table failed, equipId: %d, level: %d", equipId, 1) return false } return this.addEquip(equipTable, logType) } func (this *Player) AddEquips(equipId, nums uint32, logType LogType) bool { var equipTable = this.manager.tables.Equip.Find1(int(equipId)) if equipTable == nil { this.manager.logger.Errorf("Find equip table failed, equipId: %d, level: %d", equipId, 1) return false } var levelTable = this.manager.tables.EquipLevel.Find3(equipTable.Id, 1) if levelTable == nil { this.manager.logger.Errorf("Find equip level table failed, equipId %d, level: %d", equipTable.Id, 1) return false } var refineTable = this.manager.tables.EquipRefine.Find3(equipTable.Id, 0) if refineTable == nil { this.manager.logger.Errorf("Table 'EquipRefine' was not fount, equipId %d, level: %d", equipTable.Id, 1) return false } if nums < 1 { nums = 1 } var changeList []*pb.EquipChange for range nums { var equip = &PlayerEquip{ Uid: util.RandomUid(), Id: uint32(equipTable.Id), Level: uint32(levelTable.Level), RefineExp: 0, RefineLevel: uint32(refineTable.RefineLevel), 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{ChangeType: pb.ChangeType_Add, Equip: equip.BuildMsgEquip()}) //this.CheckAchievement(proto.AchievementTypeEquipLevel, uint32(equipTable.Level), 1) } _ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), &pb.EquipChangeListAck{ ChangeList: changeList, }) return true } func (this *Player) BuildMsgEquipListAck() *pb.EquipListAck { var list []*pb.Equip for _, equip := range this.Equip { list = append(list, equip.BuildMsgEquip()) } return &pb.EquipListAck{EquipList: list} }