修复战斗
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
@@ -3,8 +3,10 @@ package controller
|
|||||||
import (
|
import (
|
||||||
"blazing/common/data/xmlres"
|
"blazing/common/data/xmlres"
|
||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
|
|
||||||
"blazing/logic/service/fight"
|
"blazing/logic/service/fight"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
|
|
||||||
@@ -20,7 +22,18 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla
|
|||||||
var petid int
|
var petid int
|
||||||
var mo *model.PetInfo
|
var mo *model.PetInfo
|
||||||
moinfo := &model.PlayerInfo{}
|
moinfo := &model.PlayerInfo{}
|
||||||
|
// 新手任务2(选择不同精灵)
|
||||||
|
// <Map ID="8" Name="机械舱" InitX="456" InitY="143">
|
||||||
|
// <Bosses>
|
||||||
|
// <Boss TaskID="4" AppearTime="0 23" BossVisible="0" >
|
||||||
|
// <BossMon MonID="1 4 7" Hp="10" Lv="2" />
|
||||||
|
// </Boss>
|
||||||
|
// <Boss AppearTime="0 23" BossVisible="0" >
|
||||||
|
// <!--boss for task 526 -->
|
||||||
|
// <BossMon MonID="506" Hp="55" Lv="18" NewSeIdxs="80 157 158" />
|
||||||
|
// </Boss>
|
||||||
|
// </Bosses>
|
||||||
|
// </Map>
|
||||||
if c.Info.MapID == 515 && data.BossId == 0 { //说明是新手,随机生成
|
if c.Info.MapID == 515 && data.BossId == 0 { //说明是新手,随机生成
|
||||||
switch c.Info.PetList[0].ID {
|
switch c.Info.PetList[0].ID {
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
|
|
||||||
"blazing/logic/service/fight"
|
"blazing/logic/service/fight"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
|
|
||||||
"blazing/logic/service/fight"
|
"blazing/logic/service/fight"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
|
|
||||||
"blazing/logic/service/fight"
|
"blazing/logic/service/fight"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ import (
|
|||||||
|
|
||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
|
||||||
"blazing/logic/service/user"
|
"blazing/logic/service/user"
|
||||||
|
|
||||||
"blazing/logic/service/maps"
|
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
"blazing/logic/service/space"
|
"blazing/logic/service/space"
|
||||||
blservice "blazing/modules/blazing/service"
|
blservice "blazing/modules/blazing/service"
|
||||||
@@ -19,7 +17,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/os/gtime"
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
"github.com/jinzhu/copier"
|
|
||||||
"github.com/panjf2000/gnet/v2"
|
"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 = user.NewOutInfo() //设置登录消息
|
||||||
|
|
||||||
result.PlayerInfo = *t.Info
|
result.PlayerInfo = *t.Info
|
||||||
|
go space.GetSpace(t.Info.MapID).EnterMap(t)
|
||||||
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)
|
|
||||||
}()
|
|
||||||
|
|
||||||
return result, 0
|
return result, 0
|
||||||
|
|
||||||
|
|||||||
@@ -6,24 +6,24 @@ import (
|
|||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/maphot"
|
"blazing/logic/service/maphot"
|
||||||
"blazing/logic/service/maps"
|
"blazing/logic/service/maps"
|
||||||
|
"blazing/logic/service/maps/info"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
"blazing/logic/service/space"
|
"blazing/logic/service/space"
|
||||||
|
|
||||||
"github.com/jinzhu/copier"
|
"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 //登录地图
|
c.Info.MapID = data.MapId //登录地图
|
||||||
space.GetSpace(c.Info.MapID).User.Store(c.Info.UserID, c) //添加玩家
|
space.GetSpace(c.Info.MapID).User.Store(c.Info.UserID, c) //添加玩家
|
||||||
|
|
||||||
result = maps.NewOutInfo()
|
result = info.NewOutInfo()
|
||||||
c.Info.Pos = data.Point
|
c.Info.Pos = data.Point
|
||||||
copier.Copy(result, c.Info)
|
copier.Copy(result, c.Info)
|
||||||
|
|
||||||
data.Broadcast(c.Info.MapID, *result) //同步广播
|
go space.GetSpace(c.Info.MapID).EnterMap(c) //玩家进入地图
|
||||||
|
return result, -1
|
||||||
return nil, -1
|
|
||||||
}
|
}
|
||||||
func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *maphot.OutInfo, err errorcode.ErrorCode) {
|
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
|
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()}
|
//result = &maps.LeaveMapOutboundInfo{UserID: c.GetUserID()}
|
||||||
c.Canmon = false
|
c.Canmon = false
|
||||||
c.Changemap = true //可以刷怪
|
c.Changemap = true //可以刷怪
|
||||||
data.Broadcast(c.Info.MapID, space.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播
|
//data.Broadcast(c.Info.MapID, info.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播
|
||||||
space.GetSpace(c.Info.MapID).User.Delete(c.Info.UserID)
|
go space.GetSpace(c.Info.MapID).LeaveMap(c) //玩家离开地图
|
||||||
// 如果有正在运行的刷怪协程,发送停止信号
|
// 如果有正在运行的刷怪协程,发送停止信号
|
||||||
|
|
||||||
c.Info.MapID = 0 // 重置当前地图
|
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应该是空的
|
func (h *Controller) MapList(data *maps.ListMapPlayerInboundInfo, c *player.Player) (result *maps.ListMapPlayerOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的
|
||||||
|
|
||||||
result = &maps.ListMapPlayerOutboundInfo{}
|
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 {
|
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})
|
copier.CopyWithOption(result1, player.GetInfo(), copier.Option{DeepCopy: true})
|
||||||
result.Player = append(result.Player, *result1)
|
result.Player = append(result.Player, *result1)
|
||||||
result.Player = LastFourElements(result.Player)
|
result.Player = LastFourElements(result.Player)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
"blazing/logic/service/task"
|
"blazing/logic/service/task"
|
||||||
"blazing/modules/blazing/model"
|
"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
|
c.Info.TaskList[data.TaskId-1] = 3
|
||||||
result = &task.CompleteTaskOutboundInfo{}
|
result = &task.CompleteTaskOutboundInfo{
|
||||||
result.ItemList = make([]task.ItemInfo, 0)
|
TaskId: data.TaskId,
|
||||||
result.TaskId = data.TaskId
|
ItemList: make([]task.ItemInfo, 0),
|
||||||
// 根据任务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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提交任务
|
||||||
|
//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
|
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)
|
||||||
|
|
||||||
}
|
copier.Copy(result.ItemList, c.ItemAdd(ttt...))
|
||||||
result.ItemList = tempItemList //临时变量为了防止报错的时候返回数据没问题
|
|
||||||
return result, 0
|
return result, -1 //通过PUB/SUB回包
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package common
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
maps "blazing/logic/service/maps/info"
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,4 +20,6 @@ type PlayerI interface {
|
|||||||
SendUsePetItemInfo(info.UsePetIteminfo)
|
SendUsePetItemInfo(info.UsePetIteminfo)
|
||||||
SendLoadPercent(info.LoadPercentOutboundInfo)
|
SendLoadPercent(info.LoadPercentOutboundInfo)
|
||||||
SetFightC(FightI)
|
SetFightC(FightI)
|
||||||
|
SendLeaveMapInfo(b maps.LeaveMapOutboundInfo)
|
||||||
|
SendEnterMapInfo(b maps.OutInfo)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package fight
|
|||||||
import (
|
import (
|
||||||
"blazing/common/data/xmlres"
|
"blazing/common/data/xmlres"
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package fight
|
|||||||
import (
|
import (
|
||||||
_ "blazing/logic/service/fight/effect"
|
_ "blazing/logic/service/fight/effect"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ func (e *EffectDefeatTrigger) triggerHealSelfOnDefeat(at info.AttackValue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// triggerReduceNextHPOnDefeat:击败对方后,减少对方下次出战精灵最大体力的1/n(对应Effect67)
|
// triggerReduceNextHPOnDefeat:击败对方后,减少对方下次出战精灵最大体力的1/n(对应Effect67)
|
||||||
func (e *EffectDefeatTrigger) triggerReduceNextHPOnDefeat(at info.AttackValue) {
|
func (e *EffectDefeatTrigger) triggerReduceNextHPOnDefeat(_ info.AttackValue) {
|
||||||
// 计算伤害量:对方下只精灵最大体力 / n(n=SideEffectArgs[0])
|
// 计算伤害量:对方下只精灵最大体力 / n(n=SideEffectArgs[0])
|
||||||
nextMaxHP := e.Ctx().Opp.CurrentPet.Info.MaxHp // 假设CurrentPet为下次出战精灵
|
nextMaxHP := e.Ctx().Opp.CurrentPet.Info.MaxHp // 假设CurrentPet为下次出战精灵
|
||||||
damageAmount := decimal.NewFromInt(int64(nextMaxHP)).Div(decimal.NewFromInt(int64(e.SideEffectArgs[0])))
|
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[0] = m(触发概率,如30=30%)
|
||||||
// SideEffectArgs[1] = XX等级类型(如1=攻击等级,对应info.LevelType枚举)
|
// SideEffectArgs[1] = XX等级类型(如1=攻击等级,对应info.LevelType枚举)
|
||||||
// SideEffectArgs[2] = n(提升的等级值,如1=+1级)
|
// SideEffectArgs[2] = n(提升的等级值,如1=+1级)
|
||||||
func (e *EffectDefeatTrigger) triggerLevelUpOnDefeat(at info.AttackValue) {
|
func (e *EffectDefeatTrigger) triggerLevelUpOnDefeat(_ info.AttackValue) {
|
||||||
// 1. 检查参数是否足够
|
// 1. 检查参数是否足够
|
||||||
if len(e.SideEffectArgs) < 3 {
|
if len(e.SideEffectArgs) < 3 {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ type Effect35 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *Effect35) Skill_Hit() bool {
|
func (e *Effect35) Skill_Hit() bool {
|
||||||
s
|
|
||||||
|
|
||||||
if e.Ctx().SkillEntity == nil {
|
if e.Ctx().SkillEntity == nil {
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package fight
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
|
|
||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"blazing/logic/service/fight/input"
|
"blazing/logic/service/fight/input"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package fight
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package input
|
package input
|
||||||
|
|
||||||
import (
|
import "blazing/logic/service/fight/info"
|
||||||
"blazing/logic/service/fight/info"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Ctx struct {
|
type Ctx struct {
|
||||||
Our *Input //施加方
|
Our *Input //施加方
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package input
|
|||||||
import (
|
import (
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
element "blazing/common/data/Element"
|
element "blazing/common/data/Element"
|
||||||
"blazing/common/data/xmlres"
|
"blazing/common/data/xmlres"
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
|
|
||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package input
|
|||||||
import (
|
import (
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package fight
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/data/xmlres"
|
"blazing/common/data/xmlres"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|||||||
135
logic/service/maps/info/info.go
Normal file
135
logic/service/maps/info/info.go
Normal file
@@ -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"`
|
||||||
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
package maps
|
package maps
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/logic/service/common"
|
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
"blazing/logic/service/space"
|
|
||||||
|
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
|
|
||||||
"github.com/creasty/defaults"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type LeaveMapInboundInfo struct {
|
||||||
|
Head player.TomeeHeader `cmd:"2002" struc:"[0]pad"` //切换地图
|
||||||
|
}
|
||||||
|
|
||||||
type InInfo struct {
|
type InInfo struct {
|
||||||
Head player.TomeeHeader `cmd:"2001" struc:"[0]pad"` //切换地图
|
Head player.TomeeHeader `cmd:"2001" struc:"[0]pad"` //切换地图
|
||||||
// 地图类型
|
// 地图类型
|
||||||
@@ -22,138 +22,3 @@ type InInfo struct {
|
|||||||
// Reverse2: 暂定 占位字符2
|
// Reverse2: 暂定 占位字符2
|
||||||
//Reverse2 string `struc:"[2]byte"`
|
//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
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package maps
|
package maps
|
||||||
|
|
||||||
import "blazing/logic/service/player"
|
import (
|
||||||
|
"blazing/logic/service/maps/info"
|
||||||
|
"blazing/logic/service/player"
|
||||||
|
)
|
||||||
|
|
||||||
type ListMapPlayerInboundInfo struct {
|
type ListMapPlayerInboundInfo struct {
|
||||||
Head player.TomeeHeader `cmd:"2003" struc:"[0]pad"` //切换地图
|
Head player.TomeeHeader `cmd:"2003" struc:"[0]pad"` //切换地图
|
||||||
@@ -10,5 +13,5 @@ type ListMapPlayerOutboundInfo struct {
|
|||||||
PlayersLen uint32 `struc:"sizeof=Player" json:"player_len"`
|
PlayersLen uint32 `struc:"sizeof=Player" json:"player_len"`
|
||||||
|
|
||||||
// 穿戴装备的信息
|
// 穿戴装备的信息
|
||||||
Player []OutInfo ` json:"player"`
|
Player []info.OutInfo ` json:"player"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -2,6 +2,7 @@ package player
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
maps "blazing/logic/service/maps/info"
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -16,7 +17,12 @@ func (f *AI_player) SendPack(b []byte) error {
|
|||||||
return nil
|
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) {
|
func (f *AI_player) SendReadyToFightInfo(gg info.FightStartOutboundInfo) {
|
||||||
|
|
||||||
//fmt.Println(gg)
|
//fmt.Println(gg)
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ func (f *baseplayer) GetPlayerCaptureContext() *info.PlayerCaptureContext {
|
|||||||
return f.PlayerCaptureContext
|
return f.PlayerCaptureContext
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算整数的二进制1的个数(Integer.bitCount)
|
// // 计算整数的二进制1的个数(Integer.bitCount)
|
||||||
func bitsCount(n int) int {
|
// func bitsCount(n int) int {
|
||||||
count := 0
|
// count := 0
|
||||||
for n > 0 {
|
// for n > 0 {
|
||||||
count += n & 1
|
// count += n & 1
|
||||||
n >>= 1
|
// n >>= 1
|
||||||
}
|
// }
|
||||||
return count
|
// return count
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package player
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
maps "blazing/logic/service/maps/info"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *Player) SendAttackValue(b info.AttackValueS) {
|
func (p *Player) SendAttackValue(b info.AttackValueS) {
|
||||||
@@ -10,7 +11,18 @@ func (p *Player) SendAttackValue(b info.AttackValueS) {
|
|||||||
p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样
|
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) {
|
func (p *Player) SendChangePet(b info.ChangePetInfo) {
|
||||||
t1 := NewTomeeHeader(2407, p.Info.UserID)
|
t1 := NewTomeeHeader(2407, p.Info.UserID)
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package player
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
|
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
"blazing/logic/service/space"
|
"blazing/logic/service/space"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
"blazing/common/utils/bytearray"
|
"blazing/common/utils/bytearray"
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
"encoding/binary"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"context"
|
"context"
|
||||||
@@ -236,17 +237,23 @@ func (h *ClientData) OnEvent(v []byte) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
header := TomeeHeader{}
|
var header TomeeHeader
|
||||||
|
// 解析Len(0-3字节)
|
||||||
tempdata := bytearray.CreateByteArray(v)
|
header.Len = binary.BigEndian.Uint32(v[0:4])
|
||||||
header.Len, _ = tempdata.ReadUInt32()
|
// 解析Version(第4字节)
|
||||||
header.Version, _ = tempdata.ReadByte()
|
header.Version = v[4]
|
||||||
header.CMD, _ = tempdata.ReadUInt32()
|
// 解析CMD(5-8字节)
|
||||||
//header.CMD = cmd.EnumCommandID(_CMD)
|
header.CMD = binary.BigEndian.Uint32(v[5:9])
|
||||||
header.UserID, _ = tempdata.ReadUInt32()
|
// 解析UserID(9-12字节)
|
||||||
|
header.UserID = binary.BigEndian.Uint32(v[9:13])
|
||||||
header.Result, _ = tempdata.ReadUInt32()
|
// 解析Result(13-16字节)
|
||||||
header.Data = XORDecrypt(tempdata.BytesAvailable(), "CWF")
|
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 header.CMD > 1001 {
|
||||||
if h.Conn.Context().(*ClientData).Player == nil {
|
if h.Conn.Context().(*ClientData).Player == nil {
|
||||||
cool.Loger.Error(context.TODO(), header.UserID, "账号未注册")
|
cool.Loger.Error(context.TODO(), header.UserID, "账号未注册")
|
||||||
|
|||||||
@@ -5,14 +5,10 @@ import (
|
|||||||
"blazing/common/socket/errorcode"
|
"blazing/common/socket/errorcode"
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
"blazing/logic/service/fight/info"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
|
||||||
|
|
||||||
"blazing/logic/service/fight/info"
|
|
||||||
"blazing/logic/service/space"
|
|
||||||
|
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
blservice "blazing/modules/blazing/service"
|
blservice "blazing/modules/blazing/service"
|
||||||
"context"
|
"context"
|
||||||
@@ -220,7 +216,7 @@ func replaceOneNumber(original [3]int) ([3]int, int, int) {
|
|||||||
return newNumbers, removedNum, newNum
|
return newNumbers, removedNum, newNum
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加物品
|
// 添加物品 返回成功添加的物品
|
||||||
func (p *Player) ItemAdd(t ...model.SingleItemInfo) (result []model.SingleItemInfo) {
|
func (p *Player) ItemAdd(t ...model.SingleItemInfo) (result []model.SingleItemInfo) {
|
||||||
var ttt []model.SingleItemInfo
|
var ttt []model.SingleItemInfo
|
||||||
for _, v := range t {
|
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)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package player
|
|||||||
import (
|
import (
|
||||||
"blazing/common/data/share"
|
"blazing/common/data/share"
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
"blazing/logic/service/space"
|
||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -45,7 +47,8 @@ func (p *Player) Save() {
|
|||||||
p.Info.OnlineTime = (newtime - uint32(p.Logintime)) / 60 //每次退出时候保存已经在线的分钟数
|
p.Info.OnlineTime = (newtime - uint32(p.Logintime)) / 60 //每次退出时候保存已经在线的分钟数
|
||||||
|
|
||||||
p.Service.Save(p.Info)
|
p.Service.Save(p.Info)
|
||||||
LeaveMap(p)
|
space.GetSpace(p.Info.MapID).LeaveMap(p)
|
||||||
|
|
||||||
p.StopChan.Stop() //停止刷怪
|
p.StopChan.Stop() //停止刷怪
|
||||||
|
|
||||||
p.IsLogin = false
|
p.IsLogin = false
|
||||||
@@ -67,8 +70,8 @@ func (lw *Player) CompleteLogin() {
|
|||||||
lw.Info.MapID = 1
|
lw.Info.MapID = 1
|
||||||
|
|
||||||
}
|
}
|
||||||
if lw.IsNewPlayer() { //重置新手地图
|
if lw.IsNewPlayer() { //重置新手地图,放到机械仓
|
||||||
lw.Info.MapID = 515
|
lw.Info.MapID = 8
|
||||||
}
|
}
|
||||||
lw.IsLogin = true
|
lw.IsLogin = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ func (w *WsCodec) Decode(c gnet.Conn) (outs []wsutil.Message, err error) {
|
|||||||
logging.Errorf("Error reading message! %v", err)
|
logging.Errorf("Error reading message! %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if messages == nil || len(messages) <= 0 { //没有读到完整数据 不处理
|
if len(messages) <= 0 { //没有读到完整数据 不处理
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, message := range messages {
|
for _, message := range messages {
|
||||||
@@ -188,4 +188,4 @@ func (w *WsCodec) readWsMessages() (messages []wsutil.Message, err error) {
|
|||||||
}
|
}
|
||||||
msgBuf.curHeader = nil
|
msgBuf.curHeader = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
package space
|
|
||||||
45
logic/service/space/in_out.go
Normal file
45
logic/service/space/in_out.go
Normal file
@@ -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)
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package space
|
|||||||
import (
|
import (
|
||||||
"blazing/common/data/xmlres"
|
"blazing/common/data/xmlres"
|
||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
|
|
||||||
"blazing/logic/service/common"
|
"blazing/logic/service/common"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
|
|
||||||
@@ -124,7 +125,3 @@ func GetSpace(id uint32) *Space {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var planetmap = &utils.SyncMap[uint32, *Space]{} //玩家数据
|
var planetmap = &utils.SyncMap[uint32, *Space]{} //玩家数据
|
||||||
type LeaveMapOutboundInfo struct {
|
|
||||||
// 米米号
|
|
||||||
UserID uint32 `struc:"uint32" fieldDesc:"米米号" json:"user_id"`
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import "blazing/logic/service/player"
|
|||||||
type CompleteTaskInboundInfo struct {
|
type CompleteTaskInboundInfo struct {
|
||||||
Head player.TomeeHeader `cmd:"2202|2233" struc:"[0]pad"`
|
Head player.TomeeHeader `cmd:"2202|2233" struc:"[0]pad"`
|
||||||
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
||||||
OutState uint32 `json:"outState" 分支"` // 当前状态,1表示完成任务,
|
OutState uint32 `json:"outState" ` // 当前状态,1表示完成任务,
|
||||||
}
|
}
|
||||||
type CompleteTaskOutboundInfo struct {
|
type CompleteTaskOutboundInfo struct {
|
||||||
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
||||||
|
|||||||
347
logic/service/task/list.go
Normal file
347
logic/service/task/list.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
46
logic/service/task/list_daily.go
Normal file
46
logic/service/task/list_daily.go
Normal file
@@ -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: ...}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user