ecs/servers/game/handler/player_item.go

121 lines
2.9 KiB
Go
Raw Normal View History

2025-06-04 18:17:39 +08:00
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)
2025-06-04 18:17:39 +08:00
return
}
if req.ItemId == 0 || req.ItemNum == 0 {
_ = player.TipNotice(proto.TipParameterError)
2025-06-04 18:17:39 +08:00
return
}
var item = player.Item[req.ItemId]
if item == nil {
_ = player.TipNotice(proto.TipItemNotFound)
2025-06-04 18:17:39 +08:00
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)
2025-06-04 18:17:39 +08:00
return
}
if req.EquipUid == 0 {
this.logger.Error("Parameter error, req.EquipUid == 0")
_ = player.TipNotice(proto.TipParameterError)
2025-06-04 18:17:39 +08:00
return
}
if req.Times != 1 && req.Times != 5 {
this.logger.Error("Parameter error, req.Level: ", req.Times)
_ = player.TipNotice(proto.TipParameterError)
2025-06-04 18:17:39 +08:00
return
}
var equip = player.Equip[req.EquipUid]
if equip == nil {
_ = player.TipNotice(proto.TipEquipNotFound)
2025-06-04 18:17:39 +08:00
return
}
var equipTable = this.tables.Equip.Get(int(equip.Id))
if equipTable == nil {
_ = player.TipNotice(proto.TipDataTablesError)
2025-06-04 18:17:39 +08:00
return
}
if equip.Level >= uint32(equipTable.Levels) {
_ = player.TipNotice(proto.TipLevelAlreadyMax)
2025-06-04 18:17:39 +08:00
return
}
var level = equip.Level
var consumeItems = map[uint32]uint32{}
levelLoop:
for range req.Times {
2025-06-04 18:17:39 +08:00
var equipLevelTable = this.tables.EquipLevel.Find3(int(equip.Id), int(equip.Level))
if equipLevelTable == nil {
_ = player.TipNotice(proto.TipDataTablesError)
2025-06-04 18:17:39 +08:00
return
}
for i := range equipLevelTable.ConsumeItems {
if ok, _ := player.CheckItem(uint32(equipLevelTable.ConsumeItems[i]), consumeItems[uint32(equipLevelTable.ConsumeItems[i])]+uint32(equipLevelTable.ConsumeNums[i])); !ok {
2025-06-04 18:17:39 +08:00
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
}
}