时限类道具功能修改
This commit is contained in:
parent
a0884972d3
commit
73b3337888
|
|
@ -102,7 +102,21 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e
|
||||||
logger.Logger.Tracef("SCUpBagInfo: %v", pack)
|
logger.Logger.Tracef("SCUpBagInfo: %v", pack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemConfig := srvdata.GameItemMgr.Get(p.Platform, msg.ItemId)
|
||||||
|
if itemConfig == nil {
|
||||||
|
send()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
item := BagMgrSingleton.GetItem(p.SnId, msg.ItemId)
|
item := BagMgrSingleton.GetItem(p.SnId, msg.ItemId)
|
||||||
|
if itemConfig.Type != common.ItemTypeSeasonPicket {
|
||||||
|
// 先找一个
|
||||||
|
strItemUnique, bFind := BagMgrSingleton.FindItemUniqueByType(p.SnId, common.ItemTypeSeasonPicket)
|
||||||
|
if bFind {
|
||||||
|
item = BagMgrSingleton.GetItemByUniqueId(p.SnId, strItemUnique)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if item == nil || msg.ItemNum <= 0 || item.ItemNum < int64(msg.ItemNum) || len(item.Effect) != ItemMax || p.SnId == msg.AcceptSnId {
|
if item == nil || msg.ItemNum <= 0 || item.ItemNum < int64(msg.ItemNum) || len(item.Effect) != ItemMax || p.SnId == msg.AcceptSnId {
|
||||||
send()
|
send()
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -454,6 +454,7 @@ func (this *BagMgr) GetItem(snid, itemId int32) *Item {
|
||||||
item := &Item{
|
item := &Item{
|
||||||
ItemId: itemId,
|
ItemId: itemId,
|
||||||
}
|
}
|
||||||
|
|
||||||
f := func() {
|
f := func() {
|
||||||
itemX := srvdata.GameItemMgr.Get(p.Platform, itemId)
|
itemX := srvdata.GameItemMgr.Get(p.Platform, itemId)
|
||||||
if itemX != nil {
|
if itemX != nil {
|
||||||
|
|
@ -488,15 +489,74 @@ func (this *BagMgr) GetItem(snid, itemId int32) *Item {
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
// Range 遍历背包
|
// GetItemByUniqueId 按照唯一道具ID获取个人的指定道具信息
|
||||||
func (this *BagMgr) Range(snid int32, fn func(item *Item) bool) {
|
func (this *BagMgr) GetItemByUniqueId(snid int32, itemUniqueIdId string) *Item {
|
||||||
if v, exist := this.PlayerBag[snid]; exist {
|
p := PlayerMgrSington.GetPlayerBySnId(snid)
|
||||||
for k := range v.BagItem {
|
if p == nil {
|
||||||
itemId, err := strconv.Atoi(k)
|
return nil
|
||||||
if err != nil {
|
}
|
||||||
|
|
||||||
|
item := &Item{}
|
||||||
|
if bagItem, ok := this.PlayerBag[snid]; ok {
|
||||||
|
if bagItem != nil {
|
||||||
|
findItem := bagItem.BagItem[itemUniqueIdId]
|
||||||
|
if findItem == nil {
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
itemX := srvdata.GameItemMgr.Get(p.Platform, findItem.ItemId)
|
||||||
|
if itemX != nil {
|
||||||
|
item.ItemId = findItem.ItemId
|
||||||
|
item.Name = findItem.Name
|
||||||
|
item.Effect0 = findItem.Effect
|
||||||
|
item.Effect = findItem.Effect
|
||||||
|
item.SaleType = findItem.SaleType
|
||||||
|
item.SaleGold = findItem.SaleGold
|
||||||
|
}
|
||||||
|
if findItem != nil {
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindItemUniqueByType 按照道具类型获取背包内道具唯一ID
|
||||||
|
func (this *BagMgr) FindItemUniqueByType(snid int32, itemType int32) (string, bool) {
|
||||||
|
if p, exist := this.PlayerBag[snid]; exist {
|
||||||
|
for k, itemInfo := range p.BagItem {
|
||||||
|
|
||||||
|
itemX := srvdata.GameItemMgr.Get(p.Platform, itemInfo.ItemId)
|
||||||
|
if itemX == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
e := this.GetItem(snid, int32(itemId))
|
|
||||||
|
if itemX.Type == itemType {
|
||||||
|
return k, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Range 遍历背包
|
||||||
|
func (this *BagMgr) Range(snid int32, fn func(item *Item) bool) {
|
||||||
|
if p, exist := this.PlayerBag[snid]; exist {
|
||||||
|
for k, itemInfo := range p.BagItem {
|
||||||
|
|
||||||
|
itemX := srvdata.GameItemMgr.Get(p.Platform, itemInfo.ItemId)
|
||||||
|
if itemX == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var e *Item
|
||||||
|
if itemX.Type != common.ItemTypeSeasonPicket {
|
||||||
|
e = this.GetItem(snid, itemInfo.ItemId)
|
||||||
|
} else {
|
||||||
|
e = this.GetItemByUniqueId(snid, k)
|
||||||
|
}
|
||||||
|
|
||||||
if e == nil {
|
if e == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -519,12 +579,8 @@ func (this *BagMgr) GetBagInfo(snid int32) *BagInfo {
|
||||||
ret.Ts = v.Ts
|
ret.Ts = v.Ts
|
||||||
ret.dirty = v.dirty
|
ret.dirty = v.dirty
|
||||||
ret.LogId = v.LogId
|
ret.LogId = v.LogId
|
||||||
for k := range v.BagItem {
|
for k, v := range v.BagItem {
|
||||||
itemId, err := strconv.Atoi(k)
|
ret.BagItem[k] = this.GetItem(snid, v.ItemId)
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ret.BagItem[k] = this.GetItem(snid, int32(itemId))
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.PlayerBag[snid] = NewBagInfo(p.Platform, p.SnId)
|
this.PlayerBag[snid] = NewBagInfo(p.Platform, p.SnId)
|
||||||
|
|
@ -562,11 +618,12 @@ func (this *BagMgr) SyncBagData(snid int32, changeItemIds ...int32) {
|
||||||
|
|
||||||
// AddItemCheck 校验道具是否充足
|
// AddItemCheck 校验道具是否充足
|
||||||
// 返回道具变化,操作结果,是否成功
|
// 返回道具变化,操作结果,是否成功
|
||||||
func (this *BagMgr) AddItemCheck(param *model.AddItemParam) ([]*model.Item, bag.OpResultCode, bool) {
|
func (this *BagMgr) AddItemCheck(param *model.AddItemParam) ([]*model.Item, bag.OpResultCode, bool, string) {
|
||||||
var items []*model.Item // 道具变化
|
var items []*model.Item // 道具变化
|
||||||
|
var findItemUniqueId string
|
||||||
p := PlayerMgrSington.GetPlayerBySnId(param.SnId)
|
p := PlayerMgrSington.GetPlayerBySnId(param.SnId)
|
||||||
if p == nil {
|
if p == nil {
|
||||||
return items, bag.OpResultCode_OPRC_NotPlayer, false
|
return items, bag.OpResultCode_OPRC_NotPlayer, false, findItemUniqueId
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取背包
|
// 获取背包
|
||||||
|
|
@ -585,17 +642,26 @@ func (this *BagMgr) AddItemCheck(param *model.AddItemParam) ([]*model.Item, bag.
|
||||||
}
|
}
|
||||||
item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
|
item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
|
||||||
if item == nil {
|
if item == nil {
|
||||||
return items, bag.OpResultCode_OPRC_IdErr, false
|
return items, bag.OpResultCode_OPRC_IdErr, false, findItemUniqueId
|
||||||
}
|
}
|
||||||
|
|
||||||
strItemId := strconv.Itoa(int(v.ItemId))
|
strItemId := strconv.Itoa(int(v.ItemId))
|
||||||
if itm, exist := newBagInfo.BagItem[strItemId]; exist {
|
if itm, exist := newBagInfo.BagItem[strItemId]; exist {
|
||||||
if v.ItemNum < 0 && itm.ItemNum < -v.ItemNum {
|
if v.ItemNum < 0 && itm.ItemNum < -v.ItemNum {
|
||||||
return items, bag.OpResultCode_OPRC_UseUp, false
|
if item.Type == common.ItemTypeSeasonPicket {
|
||||||
|
// 找一个还在时效内的道具
|
||||||
|
for itemUniqueId, findItem := range newBagInfo.BagItem {
|
||||||
|
if findItem.ItemId == v.ItemId && ((v.ObtainTime + int64(item.Time*3600)) <= time.Now().Unix()) {
|
||||||
|
return items, bag.OpResultCode_OPRC_UseUp, false, itemUniqueId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return items, bag.OpResultCode_OPRC_UseUp, false, findItemUniqueId
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if v.ItemNum < 0 {
|
if v.ItemNum < 0 {
|
||||||
return items, bag.OpResultCode_OPRC_UseUp, false
|
return items, bag.OpResultCode_OPRC_UseUp, false, findItemUniqueId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
items = append(items, &model.Item{
|
items = append(items, &model.Item{
|
||||||
|
|
@ -604,7 +670,7 @@ func (this *BagMgr) AddItemCheck(param *model.AddItemParam) ([]*model.Item, bag.
|
||||||
ObtainTime: v.ObtainTime,
|
ObtainTime: v.ObtainTime,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return items, bag.OpResultCode_OPRC_Sucess, true
|
return items, bag.OpResultCode_OPRC_Sucess, true, findItemUniqueId
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddItems 修改道具,玩家需在线
|
// AddItems 修改道具,玩家需在线
|
||||||
|
|
@ -665,7 +731,7 @@ func (this *BagMgr) AddItems(param *model.AddItemParam) (*BagInfo, bag.OpResultC
|
||||||
}
|
}
|
||||||
// 非道具
|
// 非道具
|
||||||
|
|
||||||
items, code, ok := this.AddItemCheck(param)
|
items, code, ok, findItemUniqueId := this.AddItemCheck(param)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, code, ok
|
return nil, code, ok
|
||||||
}
|
}
|
||||||
|
|
@ -710,12 +776,15 @@ func (this *BagMgr) AddItems(param *model.AddItemParam) (*BagInfo, bag.OpResultC
|
||||||
ItemNum: v.ItemNum, // 数量
|
ItemNum: v.ItemNum, // 数量
|
||||||
ObtainTime: time.Now().Unix(),
|
ObtainTime: time.Now().Unix(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findItemUniqueId = itemUniqueId
|
||||||
}
|
}
|
||||||
} else if v.ItemNum < 0 {
|
} else if v.ItemNum < 0 {
|
||||||
// 找到这类道具减一个
|
// 找到这类道具增减
|
||||||
|
if itm, exist := newBagInfo.BagItem[findItemUniqueId]; exist {
|
||||||
|
itm.ItemNum += v.ItemNum
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
num := v.ItemNum
|
num := v.ItemNum
|
||||||
|
|
@ -767,9 +836,16 @@ func (this *BagMgr) AddItems(param *model.AddItemParam) (*BagInfo, bag.OpResultC
|
||||||
Cost: param.Cost,
|
Cost: param.Cost,
|
||||||
})
|
})
|
||||||
|
|
||||||
itemInfo := this.GetItem(p.SnId, v.ItemId)
|
if itemData.Type != common.ItemTypeSeasonPicket {
|
||||||
if itemInfo != nil {
|
itemInfo := this.GetItem(p.SnId, v.ItemId)
|
||||||
itemInfos = append(itemInfos, v.ItemId)
|
if itemInfo != nil {
|
||||||
|
itemInfos = append(itemInfos, v.ItemId)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
itemInfo := this.GetItemByUniqueId(p.SnId, findItemUniqueId)
|
||||||
|
if itemInfo != nil {
|
||||||
|
itemInfos = append(itemInfos, v.ItemId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -396,7 +396,14 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
||||||
dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
|
dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
|
||||||
for _, dbItem := range dbItemArr {
|
for _, dbItem := range dbItemArr {
|
||||||
msg.Items[dbItem.Id] = 0
|
msg.Items[dbItem.Id] = 0
|
||||||
itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id)
|
|
||||||
|
var itemInfo *Item
|
||||||
|
if dbItem.Type != common.ItemTypeSeasonPicket {
|
||||||
|
itemInfo = BagMgrSingleton.GetItem(p.SnId, dbItem.Id)
|
||||||
|
} else {
|
||||||
|
//itemInfo = Bag
|
||||||
|
}
|
||||||
|
|
||||||
if itemInfo != nil {
|
if itemInfo != nil {
|
||||||
msg.Items[dbItem.Id] = itemInfo.ItemNum
|
msg.Items[dbItem.Id] = itemInfo.ItemNum
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue