ecs/servers/game/handler/player_item.go

126 lines
3.1 KiB
Go

package handler
import (
"ecs/proto"
"ecs/proto/pb"
"ecs/servers/game/logic"
"github.com/oylshe1314/framework/net"
)
func (this *PlayerHandler) ItemUse(player *logic.Player, msg *net.Message) {
var req = new(pb.ItemUseReq)
var err = msg.Read(req)
if err != nil {
this.logger.Error("Read message failed, ", err)
_ = player.TipNotice(proto.TipMessageError)
return
}
if req.ItemId == 0 || req.ItemNum == 0 {
_ = player.TipNotice(proto.TipParameterError)
return
}
var item = player.Item[req.ItemId]
if item == nil {
_ = player.TipNotice(proto.TipItemNotFound)
return
}
}
func (this *PlayerHandler) EquipUpgrade(player *logic.Player, msg *net.Message) {
var req = new(pb.EquipUpgradeReq)
var err = msg.Read(req)
if err != nil {
this.logger.Error("Read message failed, ", err)
_ = player.TipNotice(proto.TipMessageError)
return
}
if req.EquipUid == 0 {
this.logger.Error("Parameter error, req.EquipUid == 0")
_ = player.TipNotice(proto.TipParameterError)
return
}
if req.Times != 1 && req.Times != 5 {
this.logger.Error("Parameter error, req.Level: ", req.Times)
_ = player.TipNotice(proto.TipParameterError)
return
}
var equip = player.Equip[req.EquipUid]
if equip == nil {
_ = player.TipNotice(proto.TipEquipNotFound)
return
}
var equipTable = this.tables.Equip.Get(int(equip.Id))
if equipTable == nil {
_ = player.TipNotice(proto.TipDataTablesError)
return
}
if equip.Level >= uint32(equipTable.Levels) {
_ = player.TipNotice(proto.TipLevelAlreadyMax)
return
}
if player.CheckFunctionOpen(pb.ModId_ModuleItem, pb.FuncType_EquipUpgrade, int(equip.Level+1)) {
_ = player.TipNotice(proto.TipLevelAlreadyMax)
return
}
var level = equip.Level
var consumeItems = map[uint32]uint32{}
levelLoop:
for range req.Times {
var equipLevelTable = this.tables.EquipLevel.Find3(int(equip.Id), int(equip.Level))
if equipLevelTable == nil {
_ = player.TipNotice(proto.TipDataTablesError)
return
}
for i := range equipLevelTable.ConsumeItems {
if ok, _ := player.CheckItem(uint32(equipLevelTable.ConsumeItems[i]), consumeItems[uint32(equipLevelTable.ConsumeItems[i])]+uint32(equipLevelTable.ConsumeNums[i])); !ok {
break levelLoop
}
consumeItems[uint32(equipLevelTable.ConsumeItems[i])] += uint32(equipLevelTable.ConsumeNums[i])
}
level += 1
}
if level == equip.Level {
return
}
equip.Level = level
for itemId, itemNum := range consumeItems {
player.ReduceItem(itemId, itemNum, logic.LogTypeItemConsumeByEquipUpgrade)
}
_ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), pb.EquipChangeListAck{
ChangeList: []*pb.EquipChange{{Equip: equip.BuildMsgEquip(), ChangeType: pb.ChangeType_Add}},
})
return
}
func (this *PlayerHandler) EquipRefine(player *logic.Player, msg *net.Message) {
var req = new(pb.EquipUpgradeReq)
var err = msg.Read(req)
if err != nil {
this.logger.Error("Read message failed, ", err)
_ = player.TipNotice(proto.TipMessageError)
return
}
if req.EquipUid == 0 {
this.logger.Error("Parameter error, req.EquipUid == 0")
_ = player.TipNotice(proto.TipParameterError)
return
}
}