圣遗物装备卸下功能

This commit is contained in:
UnKownOwO
2023-02-12 22:28:15 +08:00
parent 8a39ca4d42
commit 0b3c075402
12 changed files with 414 additions and 99 deletions

View File

@@ -9,30 +9,30 @@ import (
)
type Avatar struct {
AvatarId uint32 // 角色id
LifeState uint16 // 存活状态
Level uint8 // 等级
Exp uint32 // 经验值
Promote uint8 // 突破等阶
Satiation uint32 // 饱食度
SatiationPenalty uint32 // 饱食度溢出
CurrHP float64 // 当前生命值
CurrEnergy float64 // 当前元素能量值
FetterList []uint32 // 资料解锁条目
SkillLevelMap map[uint32]uint32 // 技能等级数据
SkillDepotId uint32 // 技能库id
FlyCloak uint32 // 当前风之翼
Costume uint32 // 当前衣装
BornTime int64 // 获得时间
FetterLevel uint8 // 好感度等级
FetterExp uint32 // 好感度经验
PromoteRewardMap map[uint32]bool // 突破奖励 map[突破等级]是否已被领取
Guid uint64 `bson:"-" msgpack:"-"`
EquipGuidMap map[uint64]uint64 `bson:"-" msgpack:"-"`
EquipWeapon *Weapon `bson:"-" msgpack:"-"`
EquipReliquaryList []*Reliquary `bson:"-" msgpack:"-"`
FightPropMap map[uint32]float32 `bson:"-" msgpack:"-"`
ExtraAbilityEmbryos map[string]bool `bson:"-" msgpack:"-"`
AvatarId uint32 // 角色id
LifeState uint16 // 存活状态
Level uint8 // 等级
Exp uint32 // 经验值
Promote uint8 // 突破等阶
Satiation uint32 // 饱食度
SatiationPenalty uint32 // 饱食度溢出
CurrHP float64 // 当前生命值
CurrEnergy float64 // 当前元素能量值
FetterList []uint32 // 资料解锁条目
SkillLevelMap map[uint32]uint32 // 技能等级数据
SkillDepotId uint32 // 技能库id
FlyCloak uint32 // 当前风之翼
Costume uint32 // 当前衣装
BornTime int64 // 获得时间
FetterLevel uint8 // 好感度等级
FetterExp uint32 // 好感度经验
PromoteRewardMap map[uint32]bool // 突破奖励 map[突破等级]是否已被领取
Guid uint64 `bson:"-" msgpack:"-"`
EquipGuidMap map[uint64]uint64 `bson:"-" msgpack:"-"`
EquipWeapon *Weapon `bson:"-" msgpack:"-"`
EquipReliquaryMap map[uint8]*Reliquary `bson:"-" msgpack:"-"`
FightPropMap map[uint32]float32 `bson:"-" msgpack:"-"`
ExtraAbilityEmbryos map[string]bool `bson:"-" msgpack:"-"`
}
func (p *Player) InitAllAvatar() {
@@ -129,7 +129,7 @@ func (p *Player) AddAvatar(avatarId uint32) {
Guid: 0,
EquipGuidMap: nil,
EquipWeapon: nil,
EquipReliquaryList: nil,
EquipReliquaryMap: nil,
FightPropMap: nil,
ExtraAbilityEmbryos: make(map[string]bool),
PromoteRewardMap: make(map[uint32]bool, len(avatarDataConfig.PromoteRewardMap)),
@@ -183,6 +183,32 @@ func (p *Player) SetCurrEnergy(avatar *Avatar, value float64, max bool) {
}
}
func (p *Player) WearReliquary(avatarId uint32, reliquaryId uint64) {
avatar := p.AvatarMap[avatarId]
reliquary := p.ReliquaryMap[reliquaryId]
reliquaryConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
if reliquaryConfig == nil {
logger.Error("reliquary config error, itemId: %v", reliquary.ItemId)
return
}
avatar.EquipReliquaryMap[uint8(reliquaryConfig.ReliquaryType)] = reliquary
reliquary.AvatarId = avatarId
avatar.EquipGuidMap[reliquary.Guid] = reliquary.Guid
}
func (p *Player) TakeOffReliquary(avatarId uint32, reliquaryId uint64) {
avatar := p.AvatarMap[avatarId]
reliquary := p.ReliquaryMap[reliquaryId]
reliquaryConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
if reliquaryConfig == nil {
logger.Error("reliquary config error, itemId: %v", reliquary.ItemId)
return
}
delete(avatar.EquipReliquaryMap, uint8(reliquaryConfig.ReliquaryType))
reliquary.AvatarId = 0
delete(avatar.EquipGuidMap, reliquary.Guid)
}
func (p *Player) WearWeapon(avatarId uint32, weaponId uint64) {
avatar := p.AvatarMap[avatarId]
weapon := p.WeaponMap[weaponId]

View File

@@ -6,26 +6,32 @@ import (
)
type Reliquary struct {
ReliquaryId uint64 // 圣遗物的唯一id
ItemId uint32 // 圣遗物的道具id
Level uint8 // 等级
Exp uint32 // 当前经验值
Promote uint8 // 突破等阶
Lock bool // 锁定状态
AffixIdList []uint32 // 词缀
MainPropId uint32 // 主词条id
AvatarId uint32 // 装备角色id
Guid uint64 `bson:"-" msgpack:"-"`
ReliquaryId uint64 // 圣遗物的唯一id
ItemId uint32 // 圣遗物的道具id
Level uint8 // 等级
Exp uint32 // 当前经验值
Promote uint8 // 突破等阶
Lock bool // 锁定状态
AppendPropIdList []uint32 // 追加词条id
MainPropId uint32 // 主词条id
AvatarId uint32 // 装备角色id
Guid uint64 `bson:"-" msgpack:"-"`
}
func (p *Player) InitReliquary(reliquary *Reliquary) {
// 获取圣遗物配置表
reliquaryConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
if reliquaryConfig == nil {
logger.Error("reliquary config error, itemId: %v", reliquary.ItemId)
return
}
reliquary.Guid = p.GetNextGameObjectGuid()
p.GameObjectGuidMap[reliquary.Guid] = GameObject(reliquary)
p.ReliquaryMap[reliquary.ReliquaryId] = reliquary
if reliquary.AvatarId != 0 {
avatar := p.AvatarMap[reliquary.AvatarId]
avatar.EquipGuidMap[reliquary.Guid] = reliquary.Guid
avatar.EquipReliquaryList = append(avatar.EquipReliquaryList, reliquary)
avatar.EquipReliquaryMap[uint8(reliquaryConfig.ReliquaryType)] = reliquary
}
}
@@ -35,18 +41,39 @@ func (p *Player) InitAllReliquary() {
}
}
func (p *Player) GetReliquaryGuid(reliquaryId uint64) uint64 {
reliquaryInfo := p.ReliquaryMap[reliquaryId]
if reliquaryInfo == nil {
return 0
}
return reliquaryInfo.Guid
}
func (p *Player) GetReliquaryIdByGuid(guid uint64) uint64 {
for reliquaryId, reliquary := range p.ReliquaryMap {
if guid == reliquary.Guid {
return reliquaryId
}
}
return 0
}
func (p *Player) GetReliquary(reliquaryId uint64) *Reliquary {
return p.ReliquaryMap[reliquaryId]
}
func (p *Player) AddReliquary(itemId uint32, reliquaryId uint64, mainPropId uint32) {
reliquary := &Reliquary{
ReliquaryId: reliquaryId,
ItemId: itemId,
Level: 1,
Exp: 0,
Promote: 0,
Lock: false,
AffixIdList: make([]uint32, 0),
MainPropId: mainPropId,
AvatarId: 0,
Guid: 0,
ReliquaryId: reliquaryId,
ItemId: itemId,
Level: 1,
Exp: 0,
Promote: 0,
Lock: false,
AppendPropIdList: make([]uint32, 0),
MainPropId: mainPropId,
AvatarId: 0,
Guid: 0,
}
itemDataConfig := gdconf.GetItemDataById(int32(itemId))
if itemDataConfig == nil {
@@ -57,3 +84,12 @@ func (p *Player) AddReliquary(itemId uint32, reliquaryId uint64, mainPropId uint
p.InitReliquary(reliquary)
p.ReliquaryMap[reliquaryId] = reliquary
}
func (p *Player) CostReliquary(reliquaryId uint64) uint64 {
reliquary := p.ReliquaryMap[reliquaryId]
if reliquary == nil {
return 0
}
delete(p.ReliquaryMap, reliquaryId)
return reliquary.Guid
}