角色突破功能

This commit is contained in:
UnKownOwO
2023-02-03 22:02:38 +08:00
parent 34b87fadfc
commit 849fcdf93d
12 changed files with 436 additions and 155 deletions

View File

@@ -1,8 +1,6 @@
package model
import (
"hk4e/common/constant"
)
import "hk4e/common/constant"
type Item struct {
ItemId uint32 `bson:"itemId"` // 道具id
@@ -26,8 +24,8 @@ func (p *Player) GetItemGuid(itemId uint32) uint64 {
}
func (p *Player) GetItemCount(itemId uint32) uint32 {
isVirtualItem, prop := p.GetVirtualItemProp(itemId)
if isVirtualItem {
prop, ok := constant.ItemConstantConst.VIRTUAL_ITEM_PROP[itemId]
if ok {
value := p.PropertiesMap[prop]
return value
} else {
@@ -39,73 +37,28 @@ func (p *Player) GetItemCount(itemId uint32) uint32 {
}
}
// 虚拟道具如下 实际值存在玩家的属性上
// 原石 201
// 摩拉 202
// 创世结晶 203
// 树脂 106
// 传说任务钥匙 107
// 洞天宝钱 204
func (p *Player) GetVirtualItemProp(itemId uint32) (isVirtualItem bool, prop uint16) {
switch itemId {
case 106:
return true, constant.PlayerPropertyConst.PROP_PLAYER_RESIN
case 107:
return true, constant.PlayerPropertyConst.PROP_PLAYER_LEGENDARY_KEY
case 201:
return true, constant.PlayerPropertyConst.PROP_PLAYER_HCOIN
case 202:
return true, constant.PlayerPropertyConst.PROP_PLAYER_SCOIN
case 203:
return true, constant.PlayerPropertyConst.PROP_PLAYER_MCOIN
case 204:
return true, constant.PlayerPropertyConst.PROP_PLAYER_HOME_COIN
default:
return false, 0
}
}
func (p *Player) AddItem(itemId uint32, count uint32) {
isVirtualItem, prop := p.GetVirtualItemProp(itemId)
if isVirtualItem {
value := p.PropertiesMap[prop]
value += count
p.PropertiesMap[prop] = value
} else {
itemInfo := p.ItemMap[itemId]
if itemInfo == nil {
itemInfo = &Item{
ItemId: itemId,
Count: 0,
Guid: p.GetNextGameObjectGuid(),
}
itemInfo := p.ItemMap[itemId]
if itemInfo == nil {
itemInfo = &Item{
ItemId: itemId,
Count: 0,
Guid: p.GetNextGameObjectGuid(),
}
itemInfo.Count += count
p.ItemMap[itemId] = itemInfo
}
itemInfo.Count += count
p.ItemMap[itemId] = itemInfo
}
func (p *Player) CostItem(itemId uint32, count uint32) {
isVirtualItem, prop := p.GetVirtualItemProp(itemId)
if isVirtualItem {
value := p.PropertiesMap[prop]
if value < count {
value = 0
} else {
value -= count
}
p.PropertiesMap[prop] = value
} else {
itemInfo := p.ItemMap[itemId]
if itemInfo == nil {
return
}
if itemInfo.Count < count {
itemInfo.Count = 0
} else {
itemInfo.Count -= count
}
p.ItemMap[itemId] = itemInfo
itemInfo := p.ItemMap[itemId]
if itemInfo == nil {
return
}
if itemInfo.Count < count {
itemInfo.Count = 0
} else {
itemInfo.Count -= count
}
p.ItemMap[itemId] = itemInfo
}