diff --git a/common/utils/task_test.go b/common/utils/task_test.go deleted file mode 100644 index 5a0017a6..00000000 --- a/common/utils/task_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package utils - -import ( - "fmt" - "sync" - "testing" - - "github.com/badu/bus" -) - -func Test_event(b *testing.T) { - - topic := bus.NewTopic[*Task]() //直接注册到用户 - for i := 0; i < 1; i++ { - isdone := false - t := topic.Sub(func(v *Task) { //用户初始化时注册里程碑 - if v.done { //如果任务完成 - isdone = true - fmt.Println(v.id, "任务完成") - return - } - - if v.cfunc != nil { - v.cont = v.cfunc(v.cont) //增加计数 - } - - if v.cont > 5 { //如果计数达到,标记任务完成 - v.done = true - } - fmt.Println(v.id, "当前任务计数", v.cont, "是否完成", v.done) - - }) - if isdone { //如果任务完成,取消注册 - t.Cancel() - } - - } - task1 := &Task{id: 1, cfunc: func(t uint32) uint32 { //满足任务1后推定 - - //fmt.Println(1, "当前任务计数", t) - //实现自定义逻辑 - //增加用户计数 - //增加服务器总计数 - return t + 1 - - }} - topic.Pub(task1) - topic.Pub(task1) - topic.Pub(&Task{id: 2, done: true}) - - topic.Pub(task1) //发送事件 - task1.Complete() - - fmt.Println("当前任务状态", task1.IsDone()) -} - -type TaskTree struct { - AllTasks []*Task //任务集合 - mu sync.Mutex -} - -// Various event types -const EventA = 0x01 - -type Task struct { - id uint32 - cfunc func(uint32) uint32 - cont uint32 - done bool -} - -func (e *Task) IsDone() bool { - return e.done -} -func (e *Task) Complete() { - e.done = true -} -func (e *Task) EventID() string { - return "YourInterestingEventName" -} - -// Event type for testing purposes -type Event struct { - Data string - type1 uint32 -} - -// Type returns the event type -func (ev Event) Type() uint32 { - return ev.type1 -} diff --git a/logic/controller/fight_boss.go b/logic/controller/fight_boss.go index b1624a5d..adb005aa 100644 --- a/logic/controller/fight_boss.go +++ b/logic/controller/fight_boss.go @@ -3,8 +3,10 @@ package controller import ( "blazing/common/data/xmlres" "blazing/common/socket/errorcode" + "blazing/logic/service/fight" "blazing/logic/service/fight/info" + "blazing/logic/service/player" "blazing/modules/blazing/model" @@ -20,7 +22,18 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla var petid int var mo *model.PetInfo moinfo := &model.PlayerInfo{} - + // 新手任务2(选择不同精灵) + // + // + // + // + // + // + // + // + // + // + // if c.Info.MapID == 515 && data.BossId == 0 { //说明是新手,随机生成 switch c.Info.PetList[0].ID { diff --git a/logic/controller/fight_leitai.go b/logic/controller/fight_leitai.go index ee0bf88d..96236102 100644 --- a/logic/controller/fight_leitai.go +++ b/logic/controller/fight_leitai.go @@ -2,6 +2,7 @@ package controller import ( "blazing/common/socket/errorcode" + "blazing/logic/service/fight" "blazing/logic/service/fight/info" "blazing/logic/service/player" diff --git a/logic/controller/fight_pvp_king.go b/logic/controller/fight_pvp_king.go index 312b3603..34e2912a 100644 --- a/logic/controller/fight_pvp_king.go +++ b/logic/controller/fight_pvp_king.go @@ -2,6 +2,7 @@ package controller import ( "blazing/common/socket/errorcode" + "blazing/logic/service/fight" "blazing/logic/service/fight/info" "blazing/logic/service/player" diff --git a/logic/controller/fight_pvp_withplayer.go b/logic/controller/fight_pvp_withplayer.go index e0b9e90c..f6f317bc 100644 --- a/logic/controller/fight_pvp_withplayer.go +++ b/logic/controller/fight_pvp_withplayer.go @@ -2,6 +2,7 @@ package controller import ( "blazing/common/socket/errorcode" + "blazing/logic/service/fight" "blazing/logic/service/fight/info" "blazing/logic/service/player" diff --git a/logic/controller/login.go b/logic/controller/login.go index e10db008..a0248a54 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -8,10 +8,8 @@ import ( "blazing/common/socket/errorcode" - "blazing/logic/service/common" "blazing/logic/service/user" - "blazing/logic/service/maps" "blazing/logic/service/player" "blazing/logic/service/space" blservice "blazing/modules/blazing/service" @@ -19,7 +17,6 @@ import ( "time" "github.com/gogf/gf/v2/os/gtime" - "github.com/jinzhu/copier" "github.com/panjf2000/gnet/v2" ) @@ -99,19 +96,8 @@ func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user. result = user.NewOutInfo() //设置登录消息 result.PlayerInfo = *t.Info - - defer func() { - tt := maps.NewOutInfo() - copier.CopyWithOption(tt, t.Info, copier.Option{DeepCopy: true}) - //copier.Copy(t.Info, tt) - t1 := player.NewTomeeHeader(2001, t.Info.UserID) - - space.GetSpace(t.Info.MapID).User.Range(func(playerID uint32, player common.PlayerI) bool { - player.SendPack(t1.Pack(tt)) - return false - }) - space.GetSpace(t.Info.MapID).User.Store(t.Info.UserID, t) - }() +go space.GetSpace(t.Info.MapID).EnterMap(t) + return result, 0 diff --git a/logic/controller/map.go b/logic/controller/map.go index 9e06f19a..5bf660bc 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -6,24 +6,24 @@ import ( "blazing/logic/service/common" "blazing/logic/service/maphot" "blazing/logic/service/maps" + "blazing/logic/service/maps/info" "blazing/logic/service/player" "blazing/logic/service/space" "github.com/jinzhu/copier" ) -func (h *Controller) MapEnter(data *maps.InInfo, c *player.Player) (result *maps.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h *Controller) MapEnter(data *maps.InInfo, c *player.Player) (result *info.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 c.Info.MapID = data.MapId //登录地图 space.GetSpace(c.Info.MapID).User.Store(c.Info.UserID, c) //添加玩家 - result = maps.NewOutInfo() + result = info.NewOutInfo() c.Info.Pos = data.Point copier.Copy(result, c.Info) - data.Broadcast(c.Info.MapID, *result) //同步广播 - - return nil, -1 + go space.GetSpace(c.Info.MapID).EnterMap(c) //玩家进入地图 + return result, -1 } func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *maphot.OutInfo, err errorcode.ErrorCode) { @@ -34,23 +34,23 @@ func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *mapho return } -func (h *Controller) MapLeave(data *maps.LeaveMapInboundInfo, c *player.Player) (result *space.LeaveMapOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 +func (h *Controller) MapLeave(data *maps.LeaveMapInboundInfo, c *player.Player) (result *info.LeaveMapOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 //result = &maps.LeaveMapOutboundInfo{UserID: c.GetUserID()} c.Canmon = false - c.Changemap = true //可以刷怪 - data.Broadcast(c.Info.MapID, space.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播 - space.GetSpace(c.Info.MapID).User.Delete(c.Info.UserID) + c.Changemap = true //可以刷怪 + //data.Broadcast(c.Info.MapID, info.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播 + go space.GetSpace(c.Info.MapID).LeaveMap(c) //玩家离开地图 // 如果有正在运行的刷怪协程,发送停止信号 c.Info.MapID = 0 // 重置当前地图 - return nil, -1 + return &info.LeaveMapOutboundInfo{UserID: c.Info.UserID}, -1 } func (h *Controller) MapList(data *maps.ListMapPlayerInboundInfo, c *player.Player) (result *maps.ListMapPlayerOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 result = &maps.ListMapPlayerOutboundInfo{} - result.Player = make([]maps.OutInfo, 0) + result.Player = make([]info.OutInfo, 0) space.GetSpace(c.Info.MapID).User.Range(func(playerID uint32, player common.PlayerI) bool { - result1 := maps.NewOutInfo() + result1 := info.NewOutInfo() copier.CopyWithOption(result1, player.GetInfo(), copier.Option{DeepCopy: true}) result.Player = append(result.Player, *result1) result.Player = LastFourElements(result.Player) diff --git a/logic/controller/task.go b/logic/controller/task.go index ee0aa2de..e9e52a4e 100644 --- a/logic/controller/task.go +++ b/logic/controller/task.go @@ -6,6 +6,8 @@ import ( "blazing/logic/service/player" "blazing/logic/service/task" "blazing/modules/blazing/model" + + "github.com/jinzhu/copier" ) /** @@ -59,507 +61,31 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *player. } c.Info.TaskList[data.TaskId-1] = 3 - result = &task.CompleteTaskOutboundInfo{} - result.ItemList = make([]task.ItemInfo, 0) - result.TaskId = data.TaskId - // 根据任务ID和选择分支(OutState)处理奖励 - switch data.TaskId { - // 新手任务1 - case 85: - - // out_id=1(默认分支)的奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 100027, ItemCount: 1}, // 新手帽(默认数量1) - task.ItemInfo{ItemId: 100028, ItemCount: 1}, // 新手腰带 - task.ItemInfo{ItemId: 500001, ItemCount: 1}, // 精灵仓库 - task.ItemInfo{ItemId: 500502, ItemCount: 1}, // 精灵恢复仓 - //task.ItemInfo{ItemId: 500503, ItemCount: 1}, // 分子转化仪 - ) - - // 新手任务2(选择不同精灵) - case 86: - var petType int - // 根据out_id(data.OutState)选择宠物类型 - switch data.OutState { - case 1: - petType = 1 // 布布种子 - case 2: - petType = 7 // 小火猴 - case 3: - petType = 4 // 伊优 - default: - // 默认给布布种子(或日志告警) - petType = 1 - // log.Printf("任务86未知分支out_id=%d,默认奖励布布种子", data.OutState) - } - // 生成宠物(pet_dv=31,锁个体) - r := c.GenPetInfo(petType, 31, -1, 0, 0, 50) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - - // 新手任务3 - case 87: - // out_id=1的奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 300001, ItemCount: 5}, // 普通胶囊x5 - task.ItemInfo{ItemId: 300011, ItemCount: 5}, // 初级体力药剂x3 - ) - - // 新手任务4 - case 88: - // out_id=1的奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 1, ItemCount: 50000}, // 赛尔豆x50000 - task.ItemInfo{ItemId: 3, ItemCount: 50000}, // 累积经验x50000 - task.ItemInfo{ItemId: 5, ItemCount: 20}, // 金豆x20 - task.ItemInfo{ItemId: 300650, ItemCount: 3}, // 全能学习力遗忘器x3 - task.ItemInfo{ItemId: 300651, ItemCount: 6}, // 全能学习力注入器x6 - ) - - // 克洛斯星的皮皮 - case 90: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 经验x1000 - ) - - // 西塔的珍贵回忆 - case 8: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 500510, ItemCount: 1}, // 记忆晶体x1 - ) - - // 进入神秘通道 - case 9: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 100059, ItemCount: 1}, // 电能锯子x1 - ) - - // 神秘通道拼图(无奖励物品) - case 10: - // 无物品奖励,无需处理 - - // 精灵广场拿石头(无奖励物品) - case 12: - // 无物品奖励,无需处理 - - // 先锋队招募 - case 19: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 积累经验x3000 - ) - - // 新船员的考验 - case 25: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 400501, ItemCount: 10}, // 神奇扭蛋牌x10 - ) - - // 遗迹中的精灵信号(奖励奇塔) - case 28: - // out_id=1,宠物类型102(奇塔) - r := c.GenPetInfo(102, 31, -1, 0, 0, 5) // pet_dv默认-1(随机个体) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - - // 帕诺星系星球测绘 - case 37: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - task.ItemInfo{ItemId: 700452, ItemCount: 1}, // 中型智慧芯片x1 - task.ItemInfo{ItemId: 100178, ItemCount: 1}, // 勘察头盔x1 - task.ItemInfo{ItemId: 100179, ItemCount: 1}, // 勘察护腕x1 - task.ItemInfo{ItemId: 100180, ItemCount: 1}, // 勘察腰带x1 - task.ItemInfo{ItemId: 100181, ItemCount: 1}, // 勘察军靴x1 - ) - - // 时空之门(奖励迪卢卡) - case 40: - // out_id=1,宠物类型139(迪卢卡) - r := c.GenPetInfo(139, 31, -1, 0, 0, 5) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - - // 突围磁风暴 - case 47: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 5000}, // 累积经验x5000 - task.ItemInfo{ItemId: 1, ItemCount: 5000}, // 赛尔豆x5000 - task.ItemInfo{ItemId: 500585, ItemCount: 1}, // 磁力光束枪台x1 - ) - - // 神秘失踪的爱丽丝 - case 48: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - task.ItemInfo{ItemId: 700452, ItemCount: 2}, // 中型智慧芯片x2 - ) - - // 密林中的托尼(奖励托尼+物品) - case 49: - // 1. 奖励宠物:托尼(类型158) - r := c.GenPetInfo(158, 31, -1, 0, 0, 5) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - // 2. 奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 700452, ItemCount: 2}, // 中型智慧芯片x2 - ) - - // 谁偷走了雪球能源? - case 52: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 400021, ItemCount: 10}, // 雪球能源x10 - task.ItemInfo{ItemId: 100254, ItemCount: 1}, // 斯诺纪念x1 - ) - - // 米鲁族的两个小不点 - case 54: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 5000}, // 累积经验x5000 - task.ItemInfo{ItemId: 400021, ItemCount: 10}, // 雪球能源x10 - ) - - // 米鲁族食王选拔赛 - case 57: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 斯诺岩洞的不解之谜 - case 58: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - task.ItemInfo{ItemId: 400021, ItemCount: 10}, // 雪球能源x10 - ) - - // 新型试作机SR-01同步调试 - case 63: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 铸造斯诺冰冠 - case 64: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - task.ItemInfo{ItemId: 400021, ItemCount: 10}, // 雪球能源x10 - ) - - // 露希欧星勘察 - case 65: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 合金强化试验 - case 66: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 资料室的神秘事件 - case 68: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 宇宙遭遇站 - case 69: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 船体紧急修复 - case 70: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 赛尔号大整修(奖励TOE+物品) - case 71: - // 1. 奖励宠物:TOE(类型213) - r := c.GenPetInfo(213, 31, -1, 0, 0, 5) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - // 2. 奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 累积经验x1000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 船长搜救任务 - case 72: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 秘制改良机SR-02 - case 73: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 100303, ItemCount: 1}, // SR-02铠甲x1 - task.ItemInfo{ItemId: 400055, ItemCount: 30}, // 变形能量块x30 - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - ) - - // 露希欧星历险 - case 74: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 积累经验x3000 - ) - - // 哈莫的童年片段一 - case 75: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 100324, ItemCount: 1}, // 龙之纪念x1 - ) - - // 寻找哈莫雷特的族人 - case 79: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 3000}, // 累积经验x3000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - ) - - // 重铸贾斯丁站长 - case 80: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 3000}, // 赛尔豆x3000 - ) - - // 守候宿命的追随者 - case 81: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 累积经验x1000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 光暗之迷 - case 83: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 累积经验x1000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 星球改造计划 - case 84: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - ) - - // 试炼之塔的磨练 - case 89: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 500}, // 累积经验x500 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 月光下的约定 - case 91: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - task.ItemInfo{ItemId: 400124, ItemCount: 1}, // 艾贝多芬的精元x1 - ) - - // 站长归来(奖励尼布+物品) - case 92: - // 1. 奖励宠物:尼布(类型95) - r := c.GenPetInfo(95, 31, -1, 0, 0, 5) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - // 2. 奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - ) - - // 云霄星的新来客 - case 93: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 累积经验x1000 - task.ItemInfo{ItemId: 1, ItemCount: 500}, // 赛尔豆x500 - ) - - // 初识星球能源 - case 94: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 500}, // 累积经验x500 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 宇宙中的黑色旋涡(两个奖励分支) - case 95: - switch data.OutState { - case 1: // 分支1:刺蜂套装 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 4000}, // 累积经验x4000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - task.ItemInfo{ItemId: 100346, ItemCount: 1}, // 刺蜂重盔x1 - task.ItemInfo{ItemId: 100347, ItemCount: 1}, // 刺蜂护肩x1 - task.ItemInfo{ItemId: 100348, ItemCount: 1}, // 刺蜂腰带x1 - task.ItemInfo{ItemId: 100349, ItemCount: 1}, // 刺蜂滚轮x1 - ) - case 2: // 分支2:锡蝶套装 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 4000}, // 累积经验x4000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - task.ItemInfo{ItemId: 100350, ItemCount: 1}, // 锡蝶重盔x1 - task.ItemInfo{ItemId: 100351, ItemCount: 1}, // 锡蝶护肩x1 - task.ItemInfo{ItemId: 100352, ItemCount: 1}, // 锡蝶腰带x1 - task.ItemInfo{ItemId: 100353, ItemCount: 1}, // 锡蝶滚轮x1 - ) - default: - // 默认给分支1奖励 - // log.Printf("任务95未知分支out_id=%d,默认奖励刺蜂套装", data.OutState) - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 4000}, - task.ItemInfo{ItemId: 1, ItemCount: 2000}, - task.ItemInfo{ItemId: 100346, ItemCount: 1}, - task.ItemInfo{ItemId: 100347, ItemCount: 1}, - task.ItemInfo{ItemId: 100348, ItemCount: 1}, - task.ItemInfo{ItemId: 100349, ItemCount: 1}, - ) - } - - // 旅途中的伙伴 - case 96: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 500}, // 累积经验x500 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 我是音乐小麦霸 - case 97: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 1000}, // 累积经验x1000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 尼布守卫战 - case 98: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 1000}, // 赛尔豆x1000 - ) - - // 寻找迷失的心(奖励史空+物品) - case 133: - // 1. 奖励宠物:史空(类型381) - r := c.GenPetInfo(381, 31, -1, 0, 0, 5) - result.CaptureTime = r.CatchTime - result.PetTypeId = r.ID - c.Service.PetAdd(*r) - // 2. 奖励物品 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 2000}, // 累积经验x2000 - task.ItemInfo{ItemId: 1, ItemCount: 2000}, // 赛尔豆x2000 - ) - - // 教官考核 - case 201: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 100062, ItemCount: 1}, // 教官指挥棒x1 - ) - - // 领取谱尼真身(需校验物品,奖励谱尼精元) - case 300: - // 注意:此处省略“check节点”的物品校验逻辑(需先检查玩家背包是否有7个裂片) - // 实际业务中需先校验,通过后再发奖励 - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 400150, ItemCount: 1}, // 谱尼的精元x1 - ) - - // 每日任务之毛毛 - case 401: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x2000 - ) - - // 每日任务之小火猴 - case 402: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x20000 - ) - - // 每日任务之布布种子 - case 403: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x20000 - ) - - // 每日任务之依优 - case 404: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x20000 - ) - - // 每日任务之比比鼠 - case 405: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x2000 - ) - - // 每日任务之幽浮 - case 406: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x2000 - ) - - // 每日任务之利牙鱼 - case 407: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 3, ItemCount: 20000}, // 积累经验x2000 - ) - - // 每日任务之谱尼扭蛋牌 - case 462: - result.ItemList = append(result.ItemList, - task.ItemInfo{ItemId: 400501, ItemCount: 5}, // 神奇扭蛋牌x5 - ) - - default: - // 未定义的任务ID,可添加日志 - // log.Printf("未处理的任务ID: %d", data.TaskId) + result = &task.CompleteTaskOutboundInfo{ + TaskId: data.TaskId, + ItemList: make([]task.ItemInfo, 0), } + + //提交任务 + //task.Tasktopic.Pub(*data) + + tt := task.Get_Task_Info(*data) + result.ItemList = tt.ItemList + + if tt.PetTypeId != 0 { + r := c.GenPetInfo(int(tt.PetTypeId), 31, -1, 0, 0, 50) + result.CaptureTime = r.CatchTime + result.PetTypeId = r.ID + c.Service.PetAdd(*r) + } + var ttt []model.SingleItemInfo - for _, v := range result.ItemList { - ttt = append(ttt, model.SingleItemInfo{ItemId: v.ItemId, ItemCnt: v.ItemCount}) - } - r := c.ItemAdd(ttt...) - tempItemList := make([]task.ItemInfo, 0) - for _, v := range result.ItemList { - for _, v1 := range r { - if v1.ItemId == v.ItemId { - tempItemList = append(tempItemList, task.ItemInfo{ItemId: v.ItemId, ItemCount: v.ItemCount}) - } - } + copier.Copy(ttt, result.ItemList) - } - result.ItemList = tempItemList //临时变量为了防止报错的时候返回数据没问题 - return result, 0 + copier.Copy(result.ItemList, c.ItemAdd(ttt...)) + + return result, -1 //通过PUB/SUB回包 } /** diff --git a/logic/service/common/playeri.go b/logic/service/common/playeri.go index dd6b9585..7dd596cf 100644 --- a/logic/service/common/playeri.go +++ b/logic/service/common/playeri.go @@ -2,6 +2,7 @@ package common import ( "blazing/logic/service/fight/info" + maps "blazing/logic/service/maps/info" "blazing/modules/blazing/model" ) @@ -19,4 +20,6 @@ type PlayerI interface { SendUsePetItemInfo(info.UsePetIteminfo) SendLoadPercent(info.LoadPercentOutboundInfo) SetFightC(FightI) + SendLeaveMapInfo(b maps.LeaveMapOutboundInfo) + SendEnterMapInfo(b maps.OutInfo) } diff --git a/logic/service/fight/action.go b/logic/service/fight/action.go index 9940b70b..ac2f5618 100644 --- a/logic/service/fight/action.go +++ b/logic/service/fight/action.go @@ -3,6 +3,7 @@ package fight import ( "blazing/common/data/xmlres" "blazing/cool" + "blazing/logic/service/common" "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" diff --git a/logic/service/fight/cmd.go b/logic/service/fight/cmd.go index 0a49966b..6cf67db0 100644 --- a/logic/service/fight/cmd.go +++ b/logic/service/fight/cmd.go @@ -3,6 +3,7 @@ package fight import ( _ "blazing/logic/service/fight/effect" "blazing/logic/service/fight/info" + "blazing/logic/service/player" ) diff --git a/logic/service/fight/effect/EffectDefeatTrigger.go b/logic/service/fight/effect/EffectDefeatTrigger.go index f117ef23..91717c20 100644 --- a/logic/service/fight/effect/EffectDefeatTrigger.go +++ b/logic/service/fight/effect/EffectDefeatTrigger.go @@ -107,7 +107,7 @@ func (e *EffectDefeatTrigger) triggerHealSelfOnDefeat(at info.AttackValue) { } // triggerReduceNextHPOnDefeat:击败对方后,减少对方下次出战精灵最大体力的1/n(对应Effect67) -func (e *EffectDefeatTrigger) triggerReduceNextHPOnDefeat(at info.AttackValue) { +func (e *EffectDefeatTrigger) triggerReduceNextHPOnDefeat(_ info.AttackValue) { // 计算伤害量:对方下只精灵最大体力 / n(n=SideEffectArgs[0]) nextMaxHP := e.Ctx().Opp.CurrentPet.Info.MaxHp // 假设CurrentPet为下次出战精灵 damageAmount := decimal.NewFromInt(int64(nextMaxHP)).Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) @@ -123,7 +123,7 @@ func (e *EffectDefeatTrigger) triggerReduceNextHPOnDefeat(at info.AttackValue) { // SideEffectArgs[0] = m(触发概率,如30=30%) // SideEffectArgs[1] = XX等级类型(如1=攻击等级,对应info.LevelType枚举) // SideEffectArgs[2] = n(提升的等级值,如1=+1级) -func (e *EffectDefeatTrigger) triggerLevelUpOnDefeat(at info.AttackValue) { +func (e *EffectDefeatTrigger) triggerLevelUpOnDefeat(_ info.AttackValue) { // 1. 检查参数是否足够 if len(e.SideEffectArgs) < 3 { return diff --git a/logic/service/fight/effect/effect_35.go b/logic/service/fight/effect/effect_35.go index 3711b057..c63b9daf 100644 --- a/logic/service/fight/effect/effect_35.go +++ b/logic/service/fight/effect/effect_35.go @@ -13,7 +13,6 @@ type Effect35 struct { } func (e *Effect35) Skill_Hit() bool { - s if e.Ctx().SkillEntity == nil { return true diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 60e51f99..64730cb4 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -2,6 +2,7 @@ package fight import ( "blazing/common/utils" + "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" diff --git a/logic/service/fight/input.go b/logic/service/fight/input.go index e172c674..3baa7b0c 100644 --- a/logic/service/fight/input.go +++ b/logic/service/fight/input.go @@ -2,6 +2,7 @@ package fight import ( "blazing/cool" + "blazing/logic/service/common" "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" diff --git a/logic/service/fight/input/ctx.go b/logic/service/fight/input/ctx.go index c9a5197e..5d3ebc8b 100644 --- a/logic/service/fight/input/ctx.go +++ b/logic/service/fight/input/ctx.go @@ -1,8 +1,6 @@ package input -import ( - "blazing/logic/service/fight/info" -) +import "blazing/logic/service/fight/info" type Ctx struct { Our *Input //施加方 diff --git a/logic/service/fight/input/effect.go b/logic/service/fight/input/effect.go index de7bef3b..e499a958 100644 --- a/logic/service/fight/input/effect.go +++ b/logic/service/fight/input/effect.go @@ -3,6 +3,7 @@ package input import ( "blazing/common/utils" "blazing/logic/service/fight/info" + "fmt" "blazing/modules/blazing/model" diff --git a/logic/service/fight/input/fight.go b/logic/service/fight/input/fight.go index 2a372443..49e890fc 100644 --- a/logic/service/fight/input/fight.go +++ b/logic/service/fight/input/fight.go @@ -4,6 +4,7 @@ import ( element "blazing/common/data/Element" "blazing/common/data/xmlres" "blazing/common/utils" + "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" "math/rand" diff --git a/logic/service/fight/input/prop.go b/logic/service/fight/input/prop.go index 12322b9f..b9ff03ac 100644 --- a/logic/service/fight/input/prop.go +++ b/logic/service/fight/input/prop.go @@ -3,6 +3,7 @@ package input import ( "blazing/common/utils" "blazing/logic/service/fight/info" + "fmt" ) diff --git a/logic/service/fight/loop.go b/logic/service/fight/loop.go index b4473e01..932f8207 100644 --- a/logic/service/fight/loop.go +++ b/logic/service/fight/loop.go @@ -2,6 +2,7 @@ package fight import ( "blazing/common/data/xmlres" + "blazing/logic/service/common" "blazing/logic/service/fight/action" "blazing/logic/service/fight/info" diff --git a/logic/service/maps/info/info.go b/logic/service/maps/info/info.go new file mode 100644 index 00000000..b3f33298 --- /dev/null +++ b/logic/service/maps/info/info.go @@ -0,0 +1,135 @@ +package info + +import ( + "blazing/modules/blazing/model" + + "github.com/creasty/defaults" +) + +// 这里存储星球的map +//var planetmap utils.SyncMap[] //= space.NewSyncMap() + +// PeopleInfo PeopleInfo类,实现OutboundMessage接口 +type OutInfo struct { + UserID uint32 `struc:"uint32" fieldDesc:"米米号" json:"user_id"` + + // 16字节昵称 + Nick string `struc:"[16]byte" fieldDesc:"16字节昵称" json:"nick"` + + // 机器人人物颜色 00 rgb + Color uint32 `struc:"uint32" fieldDesc:"机器人人物颜色 00 rgb" json:"color"` + + // 固定值0 + Texture uint32 `struc:"uint32" fieldDesc:"固定值0" json:"texture"` + + // 暂时不明建议先给固定值0 + Vip uint16 ` json:"vip"` + + // 暂时不明建议先给固定值15 + Viped uint16 ` default:"15" json:"viped"` + + // 暂时不明建议先给固定值1 + VipStage uint32 `struc:"uint32" fieldDesc:"暂时不明建议先给固定值1" json:"vip_stage"` + + // 人物状态 =0 步行 !=0 飞行 + ActionType uint32 `struc:"uint32" fieldDesc:"人物状态 =0 步行 !=0 飞行" json:"action_type"` + + // 上线的地图id + Pos model.Pos `fieldDesc:"上线的地图id" json:"pos"` + + // 动作, 大于10000时为蹲下 + Action uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"action"` + + // 动作, 默认情况下为2, 蹲下为3 + Direction uint32 `struc:"uint32" default:"2" fieldDesc:"暂时不明给2" json:"direction"` + + // 变形套装ID + ChangeShape uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"change_shape"` + + // 暂时不明给0 + SpiritTime uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"spirit_time"` + + // 暂时不明给0 + SpiritID uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"spirit_id"` + + // 宠物 ID 暂时无法测试,给 0 + PetDV uint32 `struc:"uint32" fieldDesc:"宠物ID暂时无法测试, 给0" json:"pet_dv"` + // 宠物闪光暂时无法测试,给 0 + PetShiny uint32 `struc:"uint32" fieldDesc:"宠物闪光暂时无法测试, 给0" json:"pet_shiny"` + // 宠物皮肤暂时无法测试,给 0 + PetSkin uint32 `struc:"uint32" fieldDesc:"宠物皮肤暂时无法测试, 给0" json:"pet_skin"` + // 填充字符 + Reserved uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved"` + // 填充字符 + Reserved1 uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved1"` + // 填充字符 + Reserved2 uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved2"` + + // 暂时不明给0 + FightFlag uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"fight_flag"` + + // 教官ID + TeacherID uint32 `struc:"uint32" fieldDesc:"教官ID" json:"teacher_id"` + + // 学员ID + StudentID uint32 `struc:"uint32" fieldDesc:"学员ID" json:"student_id"` + + // nono状态 固定值-1 + NonoState uint32 `struc:"uint32" default:"0xFFFFFFFF" fieldDesc:"nono状态 固定值-1" json:"nono_state"` + + // nono颜色 00 FF FF FF + NonoColor uint32 `struc:"uint32" fieldDesc:"nono颜色 00 FF FF FF" json:"nono_color"` + + // 是不是超能nono 固定值1 + SuperNono uint32 `struc:"uint32" default:"1" fieldDesc:"是不是超能nono 固定值1" json:"super_nono"` + + // 暂时不明给0 + PlayerForm uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"player_form"` + + // 暂时不明给0 + TransTime uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"trans_time"` + + // 暂时不明给0 + TeamID uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_id"` + + // 暂时不明给0 + TeamCoreCount uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_core_count"` + + // 暂时不明给0 + TeamIsShow uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_is_show"` + + // 暂时不明给0 + LogoBg uint16 `json:"logo_bg"` + + // 暂时不明给0 + LogoIcon uint16 ` json:"logo_icon"` + + // 暂时不明给0 + LogoColor uint16 `json:"logo_color"` + + // 暂时不明给0 + TxtColor uint16 `json:"txt_color"` + + // 4字节 + LogoWord [4]byte `struc:"[4]byte" fieldDesc:"4字节" json:"logo_word"` + ClothesLen uint32 `struc:"sizeof=Clothes" fieldDesc:"穿戴装备的信息" json:"clothes_len"` + + // 穿戴装备的信息 + Clothes []model.PeopleItemInfo `fieldDesc:"穿戴装备的信息" json:"clothes"` +} + +func NewOutInfo() *OutInfo { + l := &OutInfo{} + + // 自动填充 struct tag 里的 default 值 + if err := defaults.Set(l); err != nil { + panic(err) // 方便发现 default 设置错误 + } + + return l +} + +type LeaveMapOutboundInfo struct { + // 米米号 + UserID uint32 `struc:"uint32" fieldDesc:"米米号" json:"user_id"` +} diff --git a/logic/service/maps/mapin.go b/logic/service/maps/mapin.go index 7924335c..e58399c1 100644 --- a/logic/service/maps/mapin.go +++ b/logic/service/maps/mapin.go @@ -1,15 +1,15 @@ package maps import ( - "blazing/logic/service/common" "blazing/logic/service/player" - "blazing/logic/service/space" "blazing/modules/blazing/model" - - "github.com/creasty/defaults" ) +type LeaveMapInboundInfo struct { + Head player.TomeeHeader `cmd:"2002" struc:"[0]pad"` //切换地图 +} + type InInfo struct { Head player.TomeeHeader `cmd:"2001" struc:"[0]pad"` //切换地图 // 地图类型 @@ -22,138 +22,3 @@ type InInfo struct { // Reverse2: 暂定 占位字符2 //Reverse2 string `struc:"[2]byte"` } - -func (t *InInfo) Broadcast(mapid uint32, o OutInfo) { - - space.GetSpace(mapid).User.Range(func(k uint32, v common.PlayerI) (stop bool) { - - t.Head.Result = 0 - - v.SendPack(t.Head.Pack(&o)) - return false - }) - -} - -// 这里存储星球的map -//var planetmap utils.SyncMap[] //= space.NewSyncMap() - -// PeopleInfo PeopleInfo类,实现OutboundMessage接口 -type OutInfo struct { - UserID uint32 `struc:"uint32" fieldDesc:"米米号" json:"user_id"` - - // 16字节昵称 - Nick string `struc:"[16]byte" fieldDesc:"16字节昵称" json:"nick"` - - // 机器人人物颜色 00 rgb - Color uint32 `struc:"uint32" fieldDesc:"机器人人物颜色 00 rgb" json:"color"` - - // 固定值0 - Texture uint32 `struc:"uint32" fieldDesc:"固定值0" json:"texture"` - - // 暂时不明建议先给固定值0 - Vip uint16 ` json:"vip"` - - // 暂时不明建议先给固定值15 - Viped uint16 ` default:"15" json:"viped"` - - // 暂时不明建议先给固定值1 - VipStage uint32 `struc:"uint32" fieldDesc:"暂时不明建议先给固定值1" json:"vip_stage"` - - // 人物状态 =0 步行 !=0 飞行 - ActionType uint32 `struc:"uint32" fieldDesc:"人物状态 =0 步行 !=0 飞行" json:"action_type"` - - // 上线的地图id - Pos model.Pos `fieldDesc:"上线的地图id" json:"pos"` - - // 动作, 大于10000时为蹲下 - Action uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"action"` - - // 动作, 默认情况下为2, 蹲下为3 - Direction uint32 `struc:"uint32" default:"2" fieldDesc:"暂时不明给2" json:"direction"` - - // 变形套装ID - ChangeShape uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"change_shape"` - - // 暂时不明给0 - SpiritTime uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"spirit_time"` - - // 暂时不明给0 - SpiritID uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"spirit_id"` - - // 宠物 ID 暂时无法测试,给 0 - PetDV uint32 `struc:"uint32" fieldDesc:"宠物ID暂时无法测试, 给0" json:"pet_dv"` - // 宠物闪光暂时无法测试,给 0 - PetShiny uint32 `struc:"uint32" fieldDesc:"宠物闪光暂时无法测试, 给0" json:"pet_shiny"` - // 宠物皮肤暂时无法测试,给 0 - PetSkin uint32 `struc:"uint32" fieldDesc:"宠物皮肤暂时无法测试, 给0" json:"pet_skin"` - // 填充字符 - Reserved uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved"` - // 填充字符 - Reserved1 uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved1"` - // 填充字符 - Reserved2 uint32 `struc:"uint32" fieldDesc:"填充字符" json:"reserved2"` - - // 暂时不明给0 - FightFlag uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"fight_flag"` - - // 教官ID - TeacherID uint32 `struc:"uint32" fieldDesc:"教官ID" json:"teacher_id"` - - // 学员ID - StudentID uint32 `struc:"uint32" fieldDesc:"学员ID" json:"student_id"` - - // nono状态 固定值-1 - NonoState uint32 `struc:"uint32" default:"0xFFFFFFFF" fieldDesc:"nono状态 固定值-1" json:"nono_state"` - - // nono颜色 00 FF FF FF - NonoColor uint32 `struc:"uint32" fieldDesc:"nono颜色 00 FF FF FF" json:"nono_color"` - - // 是不是超能nono 固定值1 - SuperNono uint32 `struc:"uint32" default:"1" fieldDesc:"是不是超能nono 固定值1" json:"super_nono"` - - // 暂时不明给0 - PlayerForm uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"player_form"` - - // 暂时不明给0 - TransTime uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"trans_time"` - - // 暂时不明给0 - TeamID uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_id"` - - // 暂时不明给0 - TeamCoreCount uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_core_count"` - - // 暂时不明给0 - TeamIsShow uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"team_is_show"` - - // 暂时不明给0 - LogoBg uint16 `json:"logo_bg"` - - // 暂时不明给0 - LogoIcon uint16 ` json:"logo_icon"` - - // 暂时不明给0 - LogoColor uint16 `json:"logo_color"` - - // 暂时不明给0 - TxtColor uint16 `json:"txt_color"` - - // 4字节 - LogoWord [4]byte `struc:"[4]byte" fieldDesc:"4字节" json:"logo_word"` - ClothesLen uint32 `struc:"sizeof=Clothes" fieldDesc:"穿戴装备的信息" json:"clothes_len"` - - // 穿戴装备的信息 - Clothes []model.PeopleItemInfo `fieldDesc:"穿戴装备的信息" json:"clothes"` -} - -func NewOutInfo() *OutInfo { - l := &OutInfo{} - - // 自动填充 struct tag 里的 default 值 - if err := defaults.Set(l); err != nil { - panic(err) // 方便发现 default 设置错误 - } - - return l -} diff --git a/logic/service/maps/maplist.go b/logic/service/maps/maplist.go index 848298f0..fe620c69 100644 --- a/logic/service/maps/maplist.go +++ b/logic/service/maps/maplist.go @@ -1,6 +1,9 @@ package maps -import "blazing/logic/service/player" +import ( + "blazing/logic/service/maps/info" + "blazing/logic/service/player" +) type ListMapPlayerInboundInfo struct { Head player.TomeeHeader `cmd:"2003" struc:"[0]pad"` //切换地图 @@ -10,5 +13,5 @@ type ListMapPlayerOutboundInfo struct { PlayersLen uint32 `struc:"sizeof=Player" json:"player_len"` // 穿戴装备的信息 - Player []OutInfo ` json:"player"` + Player []info.OutInfo ` json:"player"` } diff --git a/logic/service/maps/mapout.go b/logic/service/maps/mapout.go deleted file mode 100644 index d37354b1..00000000 --- a/logic/service/maps/mapout.go +++ /dev/null @@ -1,21 +0,0 @@ -package maps - -import ( - "blazing/logic/service/common" - "blazing/logic/service/player" - "blazing/logic/service/space" -) - -type LeaveMapInboundInfo struct { - Head player.TomeeHeader `cmd:"2002" struc:"[0]pad"` //切换地图 -} - -func (t *LeaveMapInboundInfo) Broadcast(mapid uint32, o space.LeaveMapOutboundInfo) { - space.GetSpace(mapid).User.Range(func(playerID uint32, player common.PlayerI) bool { - t.Head.Result = 0 - - player.SendPack(t.Head.Pack(&o)) - return false - }) - -} diff --git a/logic/service/player/ai.go b/logic/service/player/ai.go index 013637b2..d884ba8d 100644 --- a/logic/service/player/ai.go +++ b/logic/service/player/ai.go @@ -2,6 +2,7 @@ package player import ( "blazing/logic/service/fight/info" + maps "blazing/logic/service/maps/info" "blazing/modules/blazing/model" ) @@ -16,7 +17,12 @@ func (f *AI_player) SendPack(b []byte) error { return nil } +func (p *AI_player) SendLeaveMapInfo(b maps.LeaveMapOutboundInfo) { +} +func (p *AI_player) SendEnterMapInfo(b maps.OutInfo) { + +} func (f *AI_player) SendReadyToFightInfo(gg info.FightStartOutboundInfo) { //fmt.Println(gg) diff --git a/logic/service/player/base.go b/logic/service/player/base.go index 1d39e6a3..353942b9 100644 --- a/logic/service/player/base.go +++ b/logic/service/player/base.go @@ -39,12 +39,12 @@ func (f *baseplayer) GetPlayerCaptureContext() *info.PlayerCaptureContext { return f.PlayerCaptureContext } -// 计算整数的二进制1的个数(Integer.bitCount) -func bitsCount(n int) int { - count := 0 - for n > 0 { - count += n & 1 - n >>= 1 - } - return count -} +// // 计算整数的二进制1的个数(Integer.bitCount) +// func bitsCount(n int) int { +// count := 0 +// for n > 0 { +// count += n & 1 +// n >>= 1 +// } +// return count +// } diff --git a/logic/service/player/cmd.go b/logic/service/player/cmd.go index 60662d47..4e8042c4 100644 --- a/logic/service/player/cmd.go +++ b/logic/service/player/cmd.go @@ -2,6 +2,7 @@ package player import ( "blazing/logic/service/fight/info" + maps "blazing/logic/service/maps/info" ) func (p *Player) SendAttackValue(b info.AttackValueS) { @@ -10,7 +11,18 @@ func (p *Player) SendAttackValue(b info.AttackValueS) { p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样 } +func (p *Player) SendLeaveMapInfo(b maps.LeaveMapOutboundInfo) { + t1 := NewTomeeHeader(2002, p.Info.UserID) + p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样 + +} +func (p *Player) SendEnterMapInfo(b maps.OutInfo) { + t1 := NewTomeeHeader(2001, p.Info.UserID) + + p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样 + +} func (p *Player) SendChangePet(b info.ChangePetInfo) { t1 := NewTomeeHeader(2407, p.Info.UserID) diff --git a/logic/service/player/fight.go b/logic/service/player/fight.go index ae8c67b5..198becb1 100644 --- a/logic/service/player/fight.go +++ b/logic/service/player/fight.go @@ -2,8 +2,8 @@ package player import ( "blazing/logic/service/common" - "blazing/logic/service/fight/info" + "blazing/logic/service/space" ) diff --git a/logic/service/player/pack.go b/logic/service/player/pack.go index 1215a4fa..2484ecde 100644 --- a/logic/service/player/pack.go +++ b/logic/service/player/pack.go @@ -4,6 +4,7 @@ import ( "blazing/common/socket/errorcode" "blazing/common/utils/bytearray" "blazing/cool" + "encoding/binary" "sync" "context" @@ -236,17 +237,23 @@ func (h *ClientData) OnEvent(v []byte) { } }() - header := TomeeHeader{} - - tempdata := bytearray.CreateByteArray(v) - header.Len, _ = tempdata.ReadUInt32() - header.Version, _ = tempdata.ReadByte() - header.CMD, _ = tempdata.ReadUInt32() - //header.CMD = cmd.EnumCommandID(_CMD) - header.UserID, _ = tempdata.ReadUInt32() - - header.Result, _ = tempdata.ReadUInt32() - header.Data = XORDecrypt(tempdata.BytesAvailable(), "CWF") + var header TomeeHeader + // 解析Len(0-3字节) + header.Len = binary.BigEndian.Uint32(v[0:4]) + // 解析Version(第4字节) + header.Version = v[4] + // 解析CMD(5-8字节) + header.CMD = binary.BigEndian.Uint32(v[5:9]) + // 解析UserID(9-12字节) + header.UserID = binary.BigEndian.Uint32(v[9:13]) + // 解析Result(13-16字节) + header.Result = binary.BigEndian.Uint32(v[13:17]) + // 解析数据部分(17字节之后) + if len(v) > 17 { + header.Data = XORDecrypt(v[17:], "CWF") + } else { + header.Data = []byte{} // 数据部分为空时显式初始化 + } if header.CMD > 1001 { if h.Conn.Context().(*ClientData).Player == nil { cool.Loger.Error(context.TODO(), header.UserID, "账号未注册") diff --git a/logic/service/player/player.go b/logic/service/player/player.go index a9878c9d..03bb58d3 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -5,14 +5,10 @@ import ( "blazing/common/socket/errorcode" "blazing/common/utils" "blazing/cool" + "blazing/logic/service/fight/info" "math/rand" "strings" - "blazing/logic/service/common" - - "blazing/logic/service/fight/info" - "blazing/logic/service/space" - "blazing/modules/blazing/model" blservice "blazing/modules/blazing/service" "context" @@ -220,7 +216,7 @@ func replaceOneNumber(original [3]int) ([3]int, int, int) { return newNumbers, removedNum, newNum } -// 添加物品 +// 添加物品 返回成功添加的物品 func (p *Player) ItemAdd(t ...model.SingleItemInfo) (result []model.SingleItemInfo) { var ttt []model.SingleItemInfo for _, v := range t { @@ -298,27 +294,3 @@ func (p *Player) Cheak(b error) { } } - -func LeaveMap(c common.PlayerI) { - if c == nil { - return - } - if c.GetInfo() == nil { - return - } - if c.GetInfo().MapID == 0 { - return - } - - t := NewTomeeHeader(2002, c.GetInfo().UserID) - space.GetSpace(c.GetInfo().MapID).UP_ARENA(c, 0) //退出擂台 - space.GetSpace(c.GetInfo().MapID).User.Range(func(k uint32, v common.PlayerI) (stop bool) { - - if k != c.GetInfo().UserID { - v.SendPack(t.Pack(&space.LeaveMapOutboundInfo{UserID: c.GetInfo().UserID})) - } - return false - }) - - space.GetSpace(c.GetInfo().MapID).User.Delete(c.GetInfo().UserID) -} diff --git a/logic/service/player/save.go b/logic/service/player/save.go index 2696fc28..58030d49 100644 --- a/logic/service/player/save.go +++ b/logic/service/player/save.go @@ -3,7 +3,9 @@ package player import ( "blazing/common/data/share" "blazing/cool" + "blazing/logic/service/fight/info" + "blazing/logic/service/space" "context" "time" ) @@ -45,7 +47,8 @@ func (p *Player) Save() { p.Info.OnlineTime = (newtime - uint32(p.Logintime)) / 60 //每次退出时候保存已经在线的分钟数 p.Service.Save(p.Info) - LeaveMap(p) + space.GetSpace(p.Info.MapID).LeaveMap(p) + p.StopChan.Stop() //停止刷怪 p.IsLogin = false @@ -67,8 +70,8 @@ func (lw *Player) CompleteLogin() { lw.Info.MapID = 1 } - if lw.IsNewPlayer() { //重置新手地图 - lw.Info.MapID = 515 + if lw.IsNewPlayer() { //重置新手地图,放到机械仓 + lw.Info.MapID = 8 } lw.IsLogin = true } diff --git a/logic/service/player/wscodec.go b/logic/service/player/wscodec.go index b9b9a682..e8c4e421 100644 --- a/logic/service/player/wscodec.go +++ b/logic/service/player/wscodec.go @@ -109,7 +109,7 @@ func (w *WsCodec) Decode(c gnet.Conn) (outs []wsutil.Message, err error) { logging.Errorf("Error reading message! %v", err) return nil, err } - if messages == nil || len(messages) <= 0 { //没有读到完整数据 不处理 + if len(messages) <= 0 { //没有读到完整数据 不处理 return } for _, message := range messages { @@ -188,4 +188,4 @@ func (w *WsCodec) readWsMessages() (messages []wsutil.Message, err error) { } msgBuf.curHeader = nil } -} \ No newline at end of file +} diff --git a/logic/service/space/arena.go b/logic/service/space/arena.go deleted file mode 100644 index 805be00c..00000000 --- a/logic/service/space/arena.go +++ /dev/null @@ -1 +0,0 @@ -package space diff --git a/logic/service/space/in_out.go b/logic/service/space/in_out.go new file mode 100644 index 00000000..05c484d3 --- /dev/null +++ b/logic/service/space/in_out.go @@ -0,0 +1,45 @@ +package space + +import ( + "blazing/logic/service/common" + "blazing/logic/service/maps/info" + + "github.com/jinzhu/copier" +) + +func (s *Space) LeaveMap(c common.PlayerI) { + if c == nil { + return + } + if c.GetInfo() == nil { + return + } + if c.GetInfo().MapID == 0 { + return + } + + s.UP_ARENA(c, 0) //退出擂台 + s.User.Range(func(k uint32, v common.PlayerI) (stop bool) { + + if k != c.GetInfo().UserID { + v.SendLeaveMapInfo(info.LeaveMapOutboundInfo{UserID: c.GetInfo().UserID}) + + } + return false + }) + + s.User.Delete(c.GetInfo().UserID) +} + +func (s *Space) EnterMap(c common.PlayerI) { + + out := info.NewOutInfo() + copier.CopyWithOption(out, c.GetInfo(), copier.Option{DeepCopy: true}) + s.User.Range(func(k uint32, v common.PlayerI) (stop bool) { + + v.SendEnterMapInfo(*out) + + return false + }) + s.User.Store(c.GetInfo().UserID, c) +} diff --git a/logic/service/space/space.go b/logic/service/space/space.go index 6aa367f6..1c4b4dfa 100644 --- a/logic/service/space/space.go +++ b/logic/service/space/space.go @@ -3,6 +3,7 @@ package space import ( "blazing/common/data/xmlres" "blazing/common/utils" + "blazing/logic/service/common" "blazing/logic/service/fight/info" @@ -124,7 +125,3 @@ func GetSpace(id uint32) *Space { } var planetmap = &utils.SyncMap[uint32, *Space]{} //玩家数据 -type LeaveMapOutboundInfo struct { - // 米米号 - UserID uint32 `struc:"uint32" fieldDesc:"米米号" json:"user_id"` -} diff --git a/logic/service/task/CompleteTask.go b/logic/service/task/CompleteTask.go index 71e2ce09..80a5900e 100644 --- a/logic/service/task/CompleteTask.go +++ b/logic/service/task/CompleteTask.go @@ -5,7 +5,7 @@ import "blazing/logic/service/player" type CompleteTaskInboundInfo struct { Head player.TomeeHeader `cmd:"2202|2233" struc:"[0]pad"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID, - OutState uint32 `json:"outState" 分支"` // 当前状态,1表示完成任务, + OutState uint32 `json:"outState" ` // 当前状态,1表示完成任务, } type CompleteTaskOutboundInfo struct { TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID, diff --git a/logic/service/task/list.go b/logic/service/task/list.go new file mode 100644 index 00000000..4ae9dd7e --- /dev/null +++ b/logic/service/task/list.go @@ -0,0 +1,347 @@ +package task + +import ( + "sync" + + "github.com/badu/bus" +) + +// RegisterTask 注册任务奖励 +// 参数:任务ID、分支(OutState)、物品列表、精灵类型(0=无) +func RegisterTask(taskID uint32, outState uint32, items []ItemInfo, petType uint32) { + if _, ok := TaskResultMap[taskID]; !ok { + TaskResultMap[taskID] = make(map[uint32]TaskResult) + } + TaskResultMap[taskID][outState] = TaskResult{ + ItemList: items, + PetTypeId: petType, + } +} + +func init() { + // -------------------------- 新手任务 -------------------------- + RegisterTask(85, 1, []ItemInfo{ // 新手任务1(默认分支1) + {100027, 1}, // 新手帽 + {100028, 1}, // 新手腰带 + {500001, 1}, // 精灵仓库 + {500502, 1}, // 精灵恢复仓 + }, 0) + + RegisterTask(86, 1, []ItemInfo{}, 1) // 新手任务2(分支1:布布种子) + RegisterTask(86, 2, []ItemInfo{}, 7) // 新手任务2(分支2:小火猴) + RegisterTask(86, 3, []ItemInfo{}, 4) // 新手任务2(分支3:伊优) + RegisterTask(86, 0, []ItemInfo{}, 1) // 新手任务2(默认分支:布布种子) + + RegisterTask(87, 0, []ItemInfo{ // 新手任务3(默认分支) + {300001, 5}, // 普通胶囊x5 + {300011, 3}, // 初级体力药剂x3 + }, 0) + + RegisterTask(88, 0, []ItemInfo{ // 新手任务4(默认分支) + {1, 50000}, // 赛尔豆x50000 + {3, 50000}, // 累积经验x50000 + {5, 20}, // 金豆x20 + {300650, 3}, // 全能学习力遗忘器x3 + {300651, 6}, // 全能学习力注入器x6 + }, 0) + + // -------------------------- 普通任务(无精灵奖励) -------------------------- + RegisterTask(90, 0, []ItemInfo{ // 克洛斯星的皮皮 + {1, 1000}, // 赛尔豆x1000 + {3, 1000}, // 经验x1000 + }, 0) + + RegisterTask(8, 0, []ItemInfo{{500510, 1}}, 0) // 西塔的珍贵回忆(记忆晶体x1) + RegisterTask(9, 0, []ItemInfo{{100059, 1}}, 0) // 进入神秘通道(电能锯子x1) + RegisterTask(10, 0, []ItemInfo{}, 0) // 神秘通道拼图(无奖励) + RegisterTask(12, 0, []ItemInfo{}, 0) // 精灵广场拿石头(无奖励) + RegisterTask(19, 0, []ItemInfo{{3, 3000}}, 0) // 先锋队招募(积累经验x3000) + RegisterTask(25, 0, []ItemInfo{{400501, 10}}, 0) // 新船员的考验(神奇扭蛋牌x10) + + RegisterTask(37, 0, []ItemInfo{ // 帕诺星系星球测绘 + {1, 3000}, // 赛尔豆x3000 + {700452, 1}, // 中型智慧芯片x1 + {100178, 1}, // 勘察头盔x1 + {100179, 1}, // 勘察护腕x1 + {100180, 1}, // 勘察腰带x1 + {100181, 1}, // 勘察军靴x1 + }, 0) + + RegisterTask(47, 0, []ItemInfo{ // 突围磁风暴 + {3, 5000}, // 累积经验x5000 + {1, 5000}, // 赛尔豆x5000 + {500585, 1}, // 磁力光束枪台x1 + }, 0) + + RegisterTask(48, 0, []ItemInfo{ // 神秘失踪的爱丽丝 + {3, 3000}, // 累积经验x3000 + {1, 2000}, // 赛尔豆x2000 + {700452, 2}, // 中型智慧芯片x2 + }, 0) + + RegisterTask(52, 0, []ItemInfo{ // 谁偷走了雪球能源? + {3, 3000}, // 累积经验x3000 + {400021, 10}, // 雪球能源x10 + {100254, 1}, // 斯诺纪念x1 + }, 0) + + RegisterTask(54, 0, []ItemInfo{ // 米鲁族的两个小不点 + {3, 5000}, // 累积经验x5000 + {400021, 10}, // 雪球能源x10 + }, 0) + + RegisterTask(57, 0, []ItemInfo{ // 米鲁族食王选拔赛 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(58, 0, []ItemInfo{ // 斯诺岩洞的不解之谜 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + {400021, 10}, // 雪球能源x10 + }, 0) + + RegisterTask(63, 0, []ItemInfo{ // 新型试作机SR-01同步调试 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(64, 0, []ItemInfo{ // 铸造斯诺冰冠 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + {400021, 10}, // 雪球能源x10 + }, 0) + + RegisterTask(65, 0, []ItemInfo{ // 露希欧星勘察 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(66, 0, []ItemInfo{ // 合金强化试验 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(68, 0, []ItemInfo{ // 资料室的神秘事件 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(69, 0, []ItemInfo{ // 宇宙遭遇站 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(70, 0, []ItemInfo{ // 船体紧急修复 + {3, 3000}, // 累积经验x3000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(72, 0, []ItemInfo{ // 船长搜救任务 + {3, 2000}, // 累积经验x2000 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(73, 0, []ItemInfo{ // 秘制改良机SR-02 + {100303, 1}, // SR-02铠甲x1 + {400055, 30}, // 变形能量块x30 + {3, 3000}, // 累积经验x3000 + }, 0) + + RegisterTask(74, 0, []ItemInfo{{3, 3000}}, 0) // 露希欧星历险(积累经验x3000) + + RegisterTask(75, 0, []ItemInfo{ // 哈莫的童年片段一 + {3, 3000}, // 累积经验x3000 + {100324, 1}, // 龙之纪念x1 + }, 0) + + RegisterTask(79, 0, []ItemInfo{ // 寻找哈莫雷特的族人 + {3, 3000}, // 累积经验x3000 + {1, 2000}, // 赛尔豆x2000 + }, 0) + + RegisterTask(80, 0, []ItemInfo{ // 重铸贾斯丁站长 + {3, 2000}, // 累积经验x2000 + {1, 3000}, // 赛尔豆x3000 + }, 0) + + RegisterTask(81, 0, []ItemInfo{ // 守候宿命的追随者 + {3, 1000}, // 累积经验x1000 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(83, 0, []ItemInfo{ // 光暗之迷 + {3, 1000}, // 累积经验x1000 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(84, 0, []ItemInfo{ // 星球改造计划 + {3, 2000}, // 累积经验x2000 + {1, 2000}, // 赛尔豆x2000 + }, 0) + + RegisterTask(89, 0, []ItemInfo{ // 试炼之塔的磨练 + {3, 500}, // 累积经验x500 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(91, 0, []ItemInfo{ // 月光下的约定 + {3, 2000}, // 累积经验x2000 + {1, 2000}, // 赛尔豆x2000 + }, 0) + + RegisterTask(93, 0, []ItemInfo{ // 云霄星的新来客 + {3, 1000}, // 累积经验x1000 + {1, 500}, // 赛尔豆x500 + }, 0) + + RegisterTask(94, 0, []ItemInfo{ // 初识星球能源 + {3, 500}, // 累积经验x500 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(96, 0, []ItemInfo{ // 旅途中的伙伴 + {3, 500}, // 累积经验x500 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(97, 0, []ItemInfo{ // 我是音乐小麦霸 + {3, 1000}, // 累积经验x1000 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(98, 0, []ItemInfo{ // 尼布守卫战 + {3, 2000}, // 累积经验x2000 + {1, 1000}, // 赛尔豆x1000 + }, 0) + + RegisterTask(201, 0, []ItemInfo{{100062, 1}}, 0) // 教官考核(教官指挥棒x1) + RegisterTask(300, 0, []ItemInfo{{400150, 1}}, 0) // 领取谱尼真身(谱尼的精元x1) + + // -------------------------- 带精灵奖励的任务 -------------------------- + RegisterTask(28, 0, []ItemInfo{}, 102) // 遗迹中的精灵信号(奇塔,类型102) + RegisterTask(40, 0, []ItemInfo{}, 139) // 时空之门(迪卢卡,类型139) + + RegisterTask(49, 0, []ItemInfo{ // 密林中的托尼(托尼+物品) + {700452, 2}, // 中型智慧芯片x2 + }, 158) // 托尼(类型158) + + RegisterTask(71, 0, []ItemInfo{ // 赛尔号大整修(TOE+物品) + {3, 1000}, // 累积经验x1000 + {1, 1000}, // 赛尔豆x1000 + }, 213) // TOE(类型213) + + RegisterTask(92, 0, []ItemInfo{ // 站长归来(尼布+物品) + {3, 2000}, // 累积经验x2000 + {1, 2000}, // 赛尔豆x2000 + }, 95) // 尼布(类型95) + + RegisterTask(133, 0, []ItemInfo{ // 寻找迷失的心(史空+物品) + {3, 2000}, // 累积经验x2000 + {1, 2000}, // 赛尔豆x2000 + }, 381) // 史空(类型381) + + // -------------------------- 多分支任务 -------------------------- + RegisterTask(95, 1, []ItemInfo{ // 宇宙中的黑色旋涡(分支1:刺蜂套装) + {3, 4000}, // 累积经验x4000 + {1, 2000}, // 赛尔豆x2000 + {100346, 1}, // 刺蜂重盔x1 + {100347, 1}, // 刺蜂护肩x1 + {100348, 1}, // 刺蜂腰带x1 + {100349, 1}, // 刺蜂滚轮x1 + }, 0) + + RegisterTask(95, 2, []ItemInfo{ // 宇宙中的黑色旋涡(分支2:锡蝶套装) + {3, 4000}, // 累积经验x4000 + {1, 2000}, // 赛尔豆x2000 + {100350, 1}, // 锡蝶重盔x1 + {100351, 1}, // 锡蝶护肩x1 + {100352, 1}, // 锡蝶腰带x1 + {100353, 1}, // 锡蝶滚轮x1 + }, 0) + +} + +// 任务触发里程碑 +var Tasktopic = bus.NewTopic[CompleteTaskInboundInfo]() //直接注册到用户 +// func Test_event(b *testing.T) { + +// topic := bus.NewTopic[*Task]() //直接注册到用户 +// for i := 0; i < 1; i++ { +// isdone := false +// t := topic.Sub(func(v *Task) { //用户初始化时注册里程碑 +// if v.done { //如果任务完成 +// isdone = true +// fmt.Println(v.id, "任务完成") +// return +// } + +// // if v.cfunc != nil { +// // v.cont = v.cfunc(v.cont) //增加计数 +// // } + +// if v.cont > 5 { //如果计数达到,标记任务完成 +// v.done = true +// } +// fmt.Println(v.id, "当前任务计数", v.cont, "是否完成", v.done) + +// }) +// if isdone { //如果任务完成,取消注册 +// t.Cancel() +// } + +// } +// // task1 := &Task{id: 1, cfunc: func(t uint32) uint32 { //满足任务1后推定 + +// // //fmt.Println(1, "当前任务计数", t) +// // //实现自定义逻辑 +// // //增加用户计数 +// // //增加服务器总计数 +// // return t + 1 + +// // }} +// topic.Pub(task1) +// topic.Pub(task1) +// topic.Pub(&Task{id: 2, done: true}) + +// topic.Pub(task1) //发送事件 +// task1.Complete() + +// fmt.Println("当前任务状态", task1.IsDone()) +// } + +type TaskTree struct { + AllTasks []*Task //任务集合 + mu sync.Mutex +} + +// Various event types +const EventA = 0x01 + +type Task struct { + id uint32 + //cfunc func(uint32) uint32 + cont uint32 + done bool +} + +func (e *Task) IsDone() bool { + return e.done +} +func (e *Task) Complete() { + e.done = true +} +func (e *Task) EventID() string { + return "Task" +} + +// Event type for testing purposes +type Event struct { + Data string + type1 uint32 +} + +// Type returns the event type +func (ev Event) Type() uint32 { + return ev.type1 +} diff --git a/logic/service/task/list_daily.go b/logic/service/task/list_daily.go new file mode 100644 index 00000000..0ed568fd --- /dev/null +++ b/logic/service/task/list_daily.go @@ -0,0 +1,46 @@ +package task + + +type TaskResult struct { + PetTypeId uint32 `json:"petTypeId" description:"发放的精灵ID"` // 发放的精灵ID, + + ItemList []ItemInfo `json:"itemList" description:"发放物品的数组"` // 发放物品的数组, +} + +var TaskResultMap = make(map[uint32]map[uint32]TaskResult) + +func Get_Task_Info(v CompleteTaskInboundInfo) *TaskResult { + + t, ok := TaskResultMap[v.TaskId][v.OutState] + if ok { + return &t + } + return nil +} +func init() { + // 定义通用奖励:经验奖励(ItemId:3,数量20000) + expReward := []ItemInfo{{ItemId: 3, ItemCount: 20000}} + // 定义扭蛋牌奖励(ItemId:400501,数量5) + eggReward := []ItemInfo{{ItemId: 400501, ItemCount: 5}} + + // 批量初始化任务ID 401-407(奖励均为经验) + for taskID := 401; taskID <= 407; taskID++ { + // 为每个任务ID初始化内层map + TaskResultMap[uint32(taskID)] = make(map[uint32]TaskResult) + // 设置状态0对应的奖励(与401格式一致) + TaskResultMap[uint32(taskID)][0] = TaskResult{ + ItemList: expReward, + } + } + + // 单独初始化任务462(奖励为扭蛋牌) + TaskResultMap[462] = make(map[uint32]TaskResult) + TaskResultMap[462][0] = TaskResult{ + ItemList: eggReward, + } + + // 后续若有其他任务,按相同格式添加即可 + // 例如: + // TaskResultMap[xxx] = make(map[uint32]TaskResult) + // TaskResultMap[xxx][0] = TaskResult{ItemList: ...} +}