121 lines
2.9 KiB
Go
121 lines
2.9 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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
}
|