2025-09-01 01:03:46 +08:00
|
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-10-23 01:02:19 +08:00
|
|
|
|
"blazing/common/data/xmlres"
|
2025-09-01 01:03:46 +08:00
|
|
|
|
"blazing/common/socket/errorcode"
|
2025-10-23 01:02:19 +08:00
|
|
|
|
"math/rand"
|
|
|
|
|
|
"time"
|
2025-09-14 01:35:16 +08:00
|
|
|
|
|
2025-10-23 01:02:19 +08:00
|
|
|
|
"blazing/logic/service/common"
|
2025-09-01 01:03:46 +08:00
|
|
|
|
"blazing/logic/service/item"
|
2025-09-14 01:35:16 +08:00
|
|
|
|
"blazing/logic/service/player"
|
2025-10-23 01:02:19 +08:00
|
|
|
|
"blazing/logic/service/space"
|
2025-09-11 01:07:00 +08:00
|
|
|
|
"blazing/modules/blazing/model"
|
2025-09-01 01:03:46 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2025-09-14 01:35:16 +08:00
|
|
|
|
func (h Controller) UserItemList(data *item.ItemListInboundInfo, c *player.Player) (result *item.ItemListOutboundInfo, err errorcode.ErrorCode) {
|
2025-09-01 01:03:46 +08:00
|
|
|
|
result = &item.ItemListOutboundInfo{}
|
2025-09-11 01:07:00 +08:00
|
|
|
|
result.ItemList = make([]model.SingleItemInfo, 0)
|
|
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
item := c.Service.Item(data.Param1, data.Param2)
|
|
|
|
|
|
for _, v := range item {
|
|
|
|
|
|
var vv model.SingleItemInfo
|
|
|
|
|
|
vv.ItemId = v.ItemId
|
|
|
|
|
|
vv.ItemCnt = v.ItemCnt
|
|
|
|
|
|
vv.LeftTime = 360000
|
|
|
|
|
|
result.ItemList = append(result.ItemList, vv)
|
|
|
|
|
|
}
|
2025-09-01 01:03:46 +08:00
|
|
|
|
|
|
|
|
|
|
return result, 0
|
|
|
|
|
|
}
|
2025-09-14 01:35:16 +08:00
|
|
|
|
func (h Controller) PlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *player.Player) (result *item.GoldOnlineRemainOutboundInfo, err errorcode.ErrorCode) {
|
2025-09-11 01:07:00 +08:00
|
|
|
|
|
|
|
|
|
|
return &item.GoldOnlineRemainOutboundInfo{
|
|
|
|
|
|
|
2025-09-23 16:48:40 +00:00
|
|
|
|
GoldNumber: uint32(c.Info.GoldBean) * 100,
|
2025-11-02 23:52:06 +08:00
|
|
|
|
Coin: c.Info.Coins,
|
2025-09-11 01:07:00 +08:00
|
|
|
|
}, 0
|
|
|
|
|
|
}
|
2025-09-26 13:33:55 +08:00
|
|
|
|
func (h Controller) PlayerExp(data *item.ExpTotalRemainInboundInfo, c *player.Player) (result *item.ExpTotalRemainOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
|
|
|
|
|
|
return &item.ExpTotalRemainOutboundInfo{
|
|
|
|
|
|
|
|
|
|
|
|
TotalExp: uint32(c.Info.ExpPool),
|
|
|
|
|
|
}, 0
|
|
|
|
|
|
}
|
2025-10-23 01:02:19 +08:00
|
|
|
|
|
|
|
|
|
|
func (h Controller) BuyItem(data *item.BuyInboundInfo, c *player.Player) (result *item.BuyOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
tt, ok := xmlres.ItemsMAP[int(data.ItemId)]
|
2025-11-02 23:52:06 +08:00
|
|
|
|
if ok && tt.Price != 0 {
|
2025-10-23 04:20:10 +00:00
|
|
|
|
if (data.Count * uint32(tt.Price)) <= c.Info.Coins {
|
|
|
|
|
|
c.Info.Coins -= data.Count * uint32(tt.Price)
|
|
|
|
|
|
|
2025-10-25 15:06:05 +08:00
|
|
|
|
r := c.ItemAdd(model.SingleItemInfo{ItemId: data.ItemId, ItemCnt: data.Count})
|
|
|
|
|
|
if len(r) != 0 {
|
|
|
|
|
|
return &item.BuyOutboundInfo{
|
|
|
|
|
|
ItemId: data.ItemId,
|
|
|
|
|
|
Level: 1,
|
|
|
|
|
|
Count: data.Count,
|
|
|
|
|
|
Coins: c.Info.Coins,
|
|
|
|
|
|
}, 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-23 04:20:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-23 01:02:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &item.BuyOutboundInfo{
|
|
|
|
|
|
|
|
|
|
|
|
Coins: c.Info.Coins,
|
|
|
|
|
|
}, 0
|
|
|
|
|
|
}
|
|
|
|
|
|
func (h Controller) ChangePlayerCloth(data *item.ChangePlayerClothInboundInfo, c *player.Player) (result *item.ChangePlayerClothOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
|
|
|
|
|
|
result = &item.ChangePlayerClothOutboundInfo{
|
|
|
|
|
|
UserID: c.Info.UserID,
|
|
|
|
|
|
ClothList: make([]model.PeopleItemInfo, 0),
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for _, v := range data.ClothList {
|
|
|
|
|
|
result.ClothList = append(result.ClothList, model.PeopleItemInfo{ID: v, Level: 1})
|
|
|
|
|
|
}
|
|
|
|
|
|
c.Info.Clothes = result.ClothList
|
2025-10-25 15:06:05 +08:00
|
|
|
|
space.GetSpace(c.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) {
|
2025-10-23 01:02:19 +08:00
|
|
|
|
// fmt.Println("ChangePlayerCloth", playerID, data.Head.Pack(result))
|
2025-10-24 00:31:38 +08:00
|
|
|
|
data.Head.Result = 0
|
2025-10-23 01:02:19 +08:00
|
|
|
|
player.SendPack(data.Head.Pack(result))
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
return nil, -1
|
|
|
|
|
|
}
|
|
|
|
|
|
func (h Controller) Talk(data *item.TalkCountInboundInfo, c *player.Player) (result *item.TalkCountOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
result = &item.TalkCountOutboundInfo{}
|
|
|
|
|
|
c.Service.Talk(func(t map[uint32]uint32) bool {
|
|
|
|
|
|
|
|
|
|
|
|
tt, ok := t[data.ID]
|
|
|
|
|
|
if ok {
|
|
|
|
|
|
result.GiftCount = tt
|
|
|
|
|
|
}
|
|
|
|
|
|
return false
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
return result, 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var talkcacche = make(map[string]uint32)
|
|
|
|
|
|
|
|
|
|
|
|
func (h Controller) TalkCate(data *item.TalkCateInboundInfo, c *player.Player) (result *item.DayTalkInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
result = &item.DayTalkInfo{}
|
|
|
|
|
|
result.OutList = make([]item.CateInfo, 0)
|
|
|
|
|
|
for _, te := range xmlres.TalkConfig.Energies {
|
|
|
|
|
|
if te.MapID == uint64(c.Info.MapID) && te.Type == uint64(data.ID) { //
|
|
|
|
|
|
|
|
|
|
|
|
_, ok := talkcacche[te.Name]
|
|
|
|
|
|
if !ok {
|
|
|
|
|
|
for _, v := range xmlres.ItemsMAP {
|
|
|
|
|
|
if v.Name == te.Name {
|
|
|
|
|
|
talkcacche[te.Name] = uint32(v.ID)
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
rand.Seed(time.Now().UnixNano()) // UnixNano 精度更高,避免短时间内种子重复
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 生成 1-10 的随机数:rand.Intn(10) → 0-9,+1 后范围变为 1-10
|
|
|
|
|
|
randomNum := rand.Intn(10) + 1
|
2025-10-23 04:20:10 +00:00
|
|
|
|
c.Service.Talk(func(t map[uint32]uint32) bool {
|
2025-11-01 00:40:19 +08:00
|
|
|
|
if t == nil {
|
|
|
|
|
|
t = make(map[uint32]uint32)
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-10-23 04:20:10 +00:00
|
|
|
|
_, ok := t[data.ID]
|
2025-11-01 00:40:19 +08:00
|
|
|
|
if !ok {
|
|
|
|
|
|
t[data.ID] = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
t[data.ID] += 1
|
|
|
|
|
|
if t[data.ID] < uint32(te.CollectCnt) {
|
2025-10-23 04:20:10 +00:00
|
|
|
|
result.OutList = append(result.OutList, item.CateInfo{ID: uint32(talkcacche[te.Name]), Count: uint32(randomNum)})
|
|
|
|
|
|
c.ItemAdd(model.SingleItemInfo{ItemId: uint32(talkcacche[te.Name]), ItemCnt: uint32(randomNum)})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
})
|
|
|
|
|
|
|
2025-10-23 01:02:19 +08:00
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, 0
|
|
|
|
|
|
}
|
2025-10-25 15:06:05 +08:00
|
|
|
|
func (h Controller) BuyMItem(data *item.BuyMultiInboundInfo, c *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) {
|
|
|
|
|
|
var rrr []model.SingleItemInfo
|
|
|
|
|
|
for _, v := range data.ItemIds {
|
|
|
|
|
|
_, ok := xmlres.ItemsMAP[int(v)]
|
|
|
|
|
|
|
|
|
|
|
|
if ok {
|
|
|
|
|
|
rrr = append(rrr, model.SingleItemInfo{ItemId: uint32(v), ItemCnt: 1})
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
r := c.ItemAdd(rrr...)
|
|
|
|
|
|
if len(r) != 0 {
|
|
|
|
|
|
return &item.BuyMultiOutboundInfo{
|
|
|
|
|
|
|
|
|
|
|
|
Coins: c.Info.Coins,
|
|
|
|
|
|
}, 0
|
|
|
|
|
|
}
|
|
|
|
|
|
return &item.BuyMultiOutboundInfo{
|
|
|
|
|
|
|
|
|
|
|
|
Coins: c.Info.Coins,
|
|
|
|
|
|
}, 0
|
|
|
|
|
|
}
|