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) 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"` }