All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
feat(service): 宠物添加功能增加销售计数参数并优化价格更新逻辑 - 修改PetAdd方法签名,增加salecount参数用于追踪宠物销售次数 - 在多个控制器中统一调用PetAdd方法时传入0作为初始销售次数 - 临时禁用寒流枪活动中的宠物发放功能 - 优化UPdatePrice方法,添加错误处理和价格范围验证逻辑 - 调整宠物购买逻辑,使用免费金币系统并计算递增购买
148 lines
3.6 KiB
Go
148 lines
3.6 KiB
Go
package controller
|
|
|
|
import (
|
|
"blazing/common/data"
|
|
"blazing/common/socket/errorcode"
|
|
"blazing/logic/service/common"
|
|
"blazing/logic/service/player"
|
|
"blazing/logic/service/task"
|
|
"blazing/modules/player/model"
|
|
|
|
"github.com/pointernil/bitset32"
|
|
)
|
|
|
|
func (h Controller) DASHIbei(data *C2s_MASTER_REWARDS, c *player.Player) (result *S2C_MASTER_REWARDS, err errorcode.ErrorCode) {
|
|
result = &S2C_MASTER_REWARDS{}
|
|
//草","水","火","电","战斗","飞行","机械","地面","冰"
|
|
// 按顺序:草、水、火、电、战斗、飞行、机械、地面、冰
|
|
var ElementTypeNumbers = []int{1, 2, 3, 5, 11, 4, 6, 7, 9}
|
|
items := c.Service.Item.Get(80000000, 80000000+15)
|
|
result.Reward = make([]uint32, 9)
|
|
for i := 0; i < 9; i++ {
|
|
|
|
for _, v1 := range items {
|
|
if ElementTypeNumbers[i]+80000000 == int(v1.ItemId) {
|
|
result.Reward[i] = uint32(v1.ItemCnt)
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
func (h Controller) DASHIbeiR(data *C2s_MASTER_REWARDSR, c *player.Player) (result *S2C_MASTER_REWARDSR, err errorcode.ErrorCode) {
|
|
result = &S2C_MASTER_REWARDSR{}
|
|
|
|
//ids := []uint32{8, 7, 1, 9, 14, 15, 16, 17, 18, 2, 3, 4, 5, 6, 10, 11, 12, 13}
|
|
|
|
tt, ok := nedds[data.ElementType]
|
|
if !ok {
|
|
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
|
|
}
|
|
|
|
taskInfo := task.GetTaskInfo(int(111), int(data.ElementType))
|
|
if taskInfo == nil {
|
|
return nil, errorcode.ErrorCodes.ErrNeedCompleteTaskForPrize
|
|
}
|
|
|
|
for _, v := range tt {
|
|
|
|
if c.Service.Item.CheakItem(v.ItemId) < int64(v.ItemCnt) {
|
|
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrInsufficientItems)
|
|
|
|
}
|
|
|
|
}
|
|
c.Service.Task.Exec(uint32(111), func(te *model.Task) bool {
|
|
|
|
r := bitset32.From(te.Data)
|
|
// 分支未完成时,标记完成并发放奖励
|
|
if !r.Test(uint(data.ElementType)) {
|
|
for _, v := range tt {
|
|
|
|
c.Service.Item.UPDATE(v.ItemId, -int(v.ItemCnt))
|
|
|
|
}
|
|
r.Set(uint(data.ElementType))
|
|
te.Data = r.Bytes()
|
|
|
|
if taskInfo.Pet != nil {
|
|
|
|
c.Service.Pet.PetAdd(taskInfo.Pet, 0)
|
|
result.CaptureTime = taskInfo.Pet.CatchTime
|
|
result.PetTypeId = taskInfo.Pet.ID
|
|
}
|
|
|
|
for _, item := range taskInfo.ItemList {
|
|
success := c.ItemAdd(item.ItemId, item.ItemCnt)
|
|
if success {
|
|
result.ItemList = append(result.ItemList, item)
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
} else {
|
|
err = errorcode.ErrorCode(errorcode.ErrorCodes.ErrAwardAlreadyClaimed)
|
|
}
|
|
return false
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
var nedds = map[uint32][]ItemS{
|
|
8: []ItemS{
|
|
{ItemId: 80000001, ItemCnt: 100},
|
|
{ItemId: 80000002, ItemCnt: 20},
|
|
{ItemId: 80000003, ItemCnt: 20},
|
|
{ItemId: 80000005, ItemCnt: 20},
|
|
{ItemId: 80000011, ItemCnt: 20}},
|
|
7: []ItemS{
|
|
{ItemId: 80000001, ItemCnt: 20},
|
|
{ItemId: 80000002, ItemCnt: 20},
|
|
{ItemId: 80000003, ItemCnt: 100},
|
|
{ItemId: 80000005, ItemCnt: 20},
|
|
{ItemId: 80000011, ItemCnt: 20}},
|
|
1: []ItemS{
|
|
{ItemId: 80000001, ItemCnt: 20},
|
|
{ItemId: 80000002, ItemCnt: 100},
|
|
{ItemId: 80000003, ItemCnt: 20},
|
|
{ItemId: 80000005, ItemCnt: 20},
|
|
{ItemId: 80000011, ItemCnt: 20}},
|
|
}
|
|
|
|
type NeddItemS struct {
|
|
index uint32
|
|
needitem []ItemS
|
|
}
|
|
type ItemS struct {
|
|
ItemId uint32
|
|
ItemCnt uint32
|
|
}
|
|
|
|
type C2s_MASTER_REWARDS struct {
|
|
Head common.TomeeHeader `cmd:"2611" struc:"skip"` //玩家登录
|
|
|
|
}
|
|
|
|
// OutInfo 表示地图热度的出站消息
|
|
type S2C_MASTER_REWARDS struct {
|
|
ReLen uint32 `struc:"sizeof=Reward"`
|
|
Reward []uint32 `json:"Reward"`
|
|
}
|
|
type C2s_MASTER_REWARDSR struct {
|
|
Head common.TomeeHeader `cmd:"2612" struc:"skip"` //玩家登录
|
|
ElementType uint32
|
|
}
|
|
|
|
// OutInfo 表示地图热度的出站消息
|
|
type S2C_MASTER_REWARDSR struct {
|
|
BounsID uint32
|
|
PetTypeId uint32
|
|
CaptureTime uint32
|
|
|
|
ItemListLen uint32 `struc:"sizeof=ItemList"`
|
|
ItemList []data.ItemInfo `json:"Reward"`
|
|
}
|