diff --git a/logic/controller/item.go b/logic/controller/item.go index 3718d31a..63ee1c0a 100644 --- a/logic/controller/item.go +++ b/logic/controller/item.go @@ -4,10 +4,28 @@ import ( "blazing/common/socket/errorcode" "blazing/logic/service" "blazing/logic/service/item" + "blazing/modules/blazing/model" ) func (h Controller) UserItemList(data *item.ItemListInboundInfo, c *service.Player) (result *item.ItemListOutboundInfo, err errorcode.ErrorCode) { result = &item.ItemListOutboundInfo{} + result.ItemList = make([]model.SingleItemInfo, 0) + + re := c.Service.ItemCheak() + + for _, v := range re { + if int32(v.ItemId) > int32(data.Param1) && int32(v.ItemId) < int32(data.Param2) { + v.LeftTime = 360000 + result.ItemList = append(result.ItemList, v) + } + } return result, 0 } +func (h Controller) PlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *service.Player) (result *item.GoldOnlineRemainOutboundInfo, err errorcode.ErrorCode) { + + return &item.GoldOnlineRemainOutboundInfo{ + + uint32(c.Info.GoldBean) * 100, + }, 0 +} diff --git a/logic/controller/login.go b/logic/controller/login.go index 2ae5600a..02efe6a5 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -35,26 +35,29 @@ func (h *Controller) Login(data *login.InInfo, c *service.Conn) (result *login.O h.RPCClient.Kick(data.Head.UserID) //先踢人 t := socket.GetPlayer(c, data.Head.UserID) - t.Info = blservice.NewUserService(data.Head.UserID).Person() + t.Service = blservice.NewUserService(data.Head.UserID) + t.Info = t.Service.Person() t.Info.UserID = data.Head.UserID - t.Onlinetime = uint32(time.Now().Unix()) //保存时间戳 + t.Onlinetime = uint32(time.Now().Unix()) //保存时间戳 + share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器 if !IsToday(t.Info.LastResetTime) { //判断是否是今天 t.Info.LastResetTime = time.Now() //每天login时候检查重置时间,然后把电池,任务,挖矿重置 t.Info.TimeToday = 0 //重置电池 - taskservice := blservice.NewUserService(t.ID()) - for i := 400; i < 500; i++ { //每日任务区段 - t.Info.TaskList[i] = 0 //重置每日任务 + go func() { + for i := 400; i < 500; i++ { //每日任务区段 + t.Info.TaskList[i] = 0 //重置每日任务 - _, ok := taskservice.TaskInfo((uint32(i))) - if ok { - taskservice.TaskSet((uint32(i)), model.TaskInfo{ - Info: []uint32{}, - }) + _, ok := t.Service.TaskInfo((uint32(i))) + if ok { + t.Service.TaskSet((uint32(i)), model.TaskInfo{ + Info: []uint32{}, + }) + } } - } + }() } if t.MapID() > 10000 { @@ -68,8 +71,6 @@ func (h *Controller) Login(data *login.InInfo, c *service.Conn) (result *login.O result = login.NewOutInfo() //设置登录消息 result.PlayerInfo = *t.Info - //result.TaskList = blservice.NewUserService(t.Info.UserID).GenTask() - //result.PetList = blservice.NewUserService(t.Info.UserID).GetPetList(1) tt := maps.NewOutInfo() //copier.Copy(t.Info, tt) diff --git a/logic/controller/pet.go b/logic/controller/pet.go index da9081e8..ad8984d8 100644 --- a/logic/controller/pet.go +++ b/logic/controller/pet.go @@ -1,11 +1,12 @@ package controller import ( + "blazing/common/data/xmlres" "blazing/common/socket/errorcode" "blazing/logic/service" "blazing/logic/service/pet" - blservice "blazing/modules/blazing/service" + "blazing/modules/blazing/model" "github.com/jinzhu/copier" ) @@ -15,11 +16,15 @@ func (h *Controller) GetPetInfo( data *pet.InInfo, c *service.Player) (result *pet.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 + for _, pi := range c.Info.PetList { + if pi.CatchTime == data.CatchTime { + return &pet.OutInfo{ + PetInfo: pi, + }, 0 + } - t := blservice.NewUserService(c.Info.UserID).GetPetInfo(data.CatchTime) - return &pet.OutInfo{ - PetInfo: t, - }, 0 + } + return result, errorcode.ErrorCodes.ErrNoPrerequisiteFacility } // 获取仓库列表 @@ -29,7 +34,7 @@ func (h *Controller) GetPetList( err errorcode.ErrorCode) { //这个时候player应该是空的 result = &pet.GetPetListOutboundInfo{} - tt := blservice.NewUserService(c.Info.UserID).GetPetList(0) //获得未放生的精灵 + tt := c.Service.GetPetList(0) //获得未放生的精灵 result.ShortInfoList = make([]pet.PetShortInfo, len(tt)) for i, v := range tt { @@ -51,7 +56,7 @@ func (h *Controller) PetRelease( result = &pet.PetReleaseOutboundInfo{} result.Flag = uint32(data.Flag) - t := blservice.NewUserService(c.Info.UserID).PetM(int(data.CatchTime), int(data.Flag)) + t := c.Service.PetM(int(data.CatchTime), int(data.Flag)) switch data.Flag { case 0: @@ -79,3 +84,53 @@ func (h *Controller) PetRelease( //service.NewUserService(c.Info.UserID).PetAdd( *r) return result, 0 } + +// 精灵展示 +func (h *Controller) PlayerShowPet( + data *pet.PetShowInboundInfo, c *service.Player) (result *pet.PetShowOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 + results := pet.PetShowOutboundInfo{} + + for _, pi := range c.Info.PetList { + if pi.CatchTime == data.CatchTime { + copier.Copy(&results, pi) + results.Flag = data.Flag + results.UserID = data.Head.UserID + data.Broadcast(c.Info.MapID, results) //同步广播 + } + + } + return result, -1 + +} +func (h *Controller) PetOneCure( + data *pet.PetOneCureInboundInfo, c *service.Player) (result *pet.PetOneCureOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 + result = &pet.PetOneCureOutboundInfo{ + data.CatchTime, + } + var temp []model.PetInfo + + for _, pi := range c.Info.PetList { + if pi.CatchTime == data.CatchTime { + pi.Hp = pi.MaxHp + // 恢复技能PP值 + var skillList [4]model.SkillInfo + for i, skill := range pi.SkillList { + // 跳过无效技能 + if skill.ID == 0 { + continue + } + // 恢复至最大PP值(从配置表获取) + if maxPP, ok := xmlres.SkillMap[int(skill.ID)]; ok { + skill.PP = uint32(maxPP.MaxPP) + skillList[i] = skill + } + } + pi.SkillList = skillList + } + temp = append(temp, pi) + } + + c.Info.PetList = temp + return result, 0 + +} diff --git a/logic/controller/task.go b/logic/controller/task.go index 8e42c41e..0b2721cb 100644 --- a/logic/controller/task.go +++ b/logic/controller/task.go @@ -5,7 +5,6 @@ import ( "blazing/logic/service" "blazing/logic/service/task" "blazing/modules/blazing/model" - blservice "blazing/modules/blazing/service" "math/rand" "time" ) @@ -37,14 +36,14 @@ func (h Controller) AddTaskBuf(data *task.AddTaskBufInboundInfo, c *service.Play // isdaliy = true // } result = &task.AddTaskBufOutboundInfo{} - taskservice := blservice.NewUserService(c.Info.UserID) - _, ok := taskservice.TaskInfo(data.TaskId) + + _, ok := c.Service.TaskInfo(data.TaskId) if ok { - taskservice.TaskSet(data.TaskId, model.TaskInfo{ + c.Service.TaskSet(data.TaskId, model.TaskInfo{ Info: data.TaskList, }) } else { - taskservice.TaskADD(data.TaskId, model.TaskInfo{ + c.Service.TaskADD(data.TaskId, model.TaskInfo{ Info: data.TaskList, }) @@ -94,7 +93,7 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *service r := model.GenPetInfo(1, []int{0, 31}, []int{0, 24}, []int{0}, []int{0}, []int{5}) result.CaptureTime = r.CatchTime result.PetTypeId = r.ID - blservice.NewUserService(c.Info.UserID).PetAdd(*r) + c.Service.PetAdd(*r) } if data.TaskId == 87 { //新手注册任务 @@ -107,6 +106,11 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *service result.ItemList = append(result.ItemList, task.ItemInfo{ItemId: 1, ItemCount: 5000}) } + var ttt []model.SingleItemInfo + for _, v := range result.ItemList { + ttt = append(ttt, model.SingleItemInfo{ItemId: v.ItemId, ItemCnt: v.ItemCount}) + } + c.ItemAdd(ttt) return result, 0 } @@ -114,7 +118,7 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *service * 获取任务状态 */ func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *service.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) { - info, _ := blservice.NewUserService(c.Info.UserID).TaskInfo(data.TaskId) + info, _ := c.Service.TaskInfo(data.TaskId) result = &task.GetTaskBufOutboundInfo{} result.TaskId = data.TaskId result.TaskList = info.Info diff --git a/logic/service/SocketHandler_Tomee.go b/logic/service/SocketHandler_Tomee.go index 6f659682..de1d8a98 100644 --- a/logic/service/SocketHandler_Tomee.go +++ b/logic/service/SocketHandler_Tomee.go @@ -58,7 +58,7 @@ func (h *TomeeHandler) Handle(c gnet.Conn, data []byte) { //处理接收到的 header.Result, _ = tempdata.ReadUInt32() header.Data = tempdata.BytesAvailable() - fmt.Println("接收封包", header) + //fmt.Println("接收封包", header) h.Callback(NewConn(c), header) //return header } diff --git a/logic/service/fightc.go b/logic/service/fightc.go index 3f1f6efb..943cca4d 100644 --- a/logic/service/fightc.go +++ b/logic/service/fightc.go @@ -516,6 +516,7 @@ func (f *FightC) enterturn(fattack, sattack info.BattleActionI) { "自身剩余血量:", attacker.CurrentPet.Info.Hp, "对手剩余血量:", defender.CurrentPet.Info.Hp, ) + skill.Skill.Info.PP-- //减少PP if defender.CurrentPet.Info.Hp == 0 { defender.CanChange = true //被打死就可以切精灵了 if attacker.IsWin(defender.CurrentPet.Info.CatchTime) { //然后检查是否战斗结束 @@ -527,35 +528,7 @@ func (f *FightC) enterturn(fattack, sattack info.BattleActionI) { } defer f.Broadcast(func(ff *Input) { //todo 将血量和技能pp传回enterturn - pl, ok := ff.Player.(*Player) - if ok { //说明是玩家,需要传回数据 - var temp []model.PetInfo //先初始化一个临时的数据 - for _, pi := range pl.Info.PetList { - - for _, v := range attacker.AllPet { - if v.Info.CatchTime == pi.CatchTime { //如果找到精灵 - pi.Hp = v.Info.Hp - - for i, v := range v.Skills { - - for _, v1 := range pi.SkillList { - - if v1.ID == uint32(v.ID) { - pi.SkillList[i].PP = uint32(v.PP) - } - - } - - } - - } - - } - temp = append(temp, pi) - } - pl.Info.PetList = temp - } ff.Player.SendFightEndInfo(info.FightOverInfo{ WinnerId: WinnerId, }) diff --git a/logic/service/item/item.go b/logic/service/item/item.go index 696a76db..be2a9a74 100644 --- a/logic/service/item/item.go +++ b/logic/service/item/item.go @@ -1,6 +1,9 @@ package item -import "blazing/logic/service" +import ( + "blazing/logic/service" + "blazing/modules/blazing/model" +) // 实现了入站消息接口(Go中通过方法集隐式实现) type ItemListInboundInfo struct { @@ -15,18 +18,20 @@ type ItemListInboundInfo struct { type ItemListOutboundInfo struct { // 物品列表, - ItemListLen uint32 `struc:"sizeof=ItemList"` - ItemList []SingleItemInfo `autoCodec:"true" messageType:"Item_List" fieldDesc:"物品列表"` + ItemListLen uint32 `struc:"sizeof=ItemList"` + ItemList []model.SingleItemInfo `autoCodec:"true" messageType:"Item_List" fieldDesc:"物品列表"` } // SingleItemInfo 单个物品信息结构体,对应Java的SingleItemInfo类 -type SingleItemInfo struct { - // 物品Id, - ItemId uint32 - // 物品数量, - ItemCnt uint32 - // 固定值360000, - LeftTime uint32 - // 固定值0, - ItemLevel uint32 + +type GoldOnlineRemainInboundInfo struct { + Head service.TomeeHeader `cmd:"1106" struc:"[0]pad"` +} + +// GoldOnlineRemainOutboundInfo 对应Java的GoldOnlineRemainOutboundInfo +// 实现OutboundMessage接口,包含金豆数量信息 +type GoldOnlineRemainOutboundInfo struct { + // GoldNumber 金豆数量(后端返回实际数量需要*100) + // 对应Java的@UInt long类型,使用uint64 + GoldNumber uint32 `json:"goldNumber" fieldDescription:"金豆数量, 后端返回实际数量需要*100" uint:"true"` } diff --git a/logic/service/pet/pet.go b/logic/service/pet/pet.go index 6dbfdb9f..3a18f9e3 100644 --- a/logic/service/pet/pet.go +++ b/logic/service/pet/pet.go @@ -2,6 +2,7 @@ package pet import ( "blazing/logic/service" + "blazing/logic/service/space" "blazing/modules/blazing/model" ) @@ -29,3 +30,38 @@ type PetReleaseInboundInfo struct { CatchTime uint32 `json:"catch_time" fieldDescription:"精灵生成时间" autoCodec:"true" uint:"true"` Flag uint32 `json:"flag" fieldDescription:"0为放入仓库,1为放入背包" autoCodec:"true" uint:"true"` } + +type PetShowInboundInfo struct { + Head service.TomeeHeader `cmd:"2305" struc:"[0]pad"` + + CatchTime uint32 `codec:"catchTime" inboundMessageType:"Pet_Show"` + Flag uint32 `codec:"flag"` +} + +func (t *PetShowInboundInfo) Broadcast(mapid uint32, o PetShowOutboundInfo) { + + space.GetSpace(mapid).Range(func(playerID uint32, player service.PlayerI) bool { + t.Head.Result = 0 + + player.SendPack(t.Head.Pack(&o)) + return true + }) +} + +type PetShowOutboundInfo struct { + UserID uint32 `codec:"UserID" description:"米米号"` + CatchTime uint32 `codec:"CatchTime" description:"精灵获得的时间"` + ID uint32 `codec:"PetID" description:"精灵编号"` + Flag uint32 `codec:"flag" description:"1为显示 0为收回"` + Dv uint32 `codec:"dv" description:"个体"` + Shiny uint32 `codec:"shiny" description:"闪光状态标识"` + SkinID uint32 `codec:"skinID" description:"皮肤ID"` + Reserved1 [3]uint32 +} +type PetOneCureInboundInfo struct { + Head service.TomeeHeader `cmd:"2310" struc:"[0]pad"` + CatchTime uint32 `json:"catchTime" fieldDescription:"精灵捕捉时间" uint:"true"` +} // PetOneCureOutboundInfo 宠物单个治疗出站消息 +type PetOneCureOutboundInfo struct { + CatchTime uint32 `json:"catchTime" fieldDescription:"精灵捕捉时间" uint:"true"` +} diff --git a/logic/service/player.go b/logic/service/player.go index 449d2078..4242b0e2 100644 --- a/logic/service/player.go +++ b/logic/service/player.go @@ -96,6 +96,7 @@ type Player struct { Onlinetime uint32 //当前登录时间 OgreInfo *OgreInfo FightC *FightC //绑定战斗标识 替代本身的是否战斗标记 //IsFighting bool + Service *blservice.UserService //FightInfo info.NoteReadyToFightInfo } @@ -129,6 +130,19 @@ func (p *Player) GetAction() { return } +// 添加物品 +func (p *Player) ItemAdd(t []model.SingleItemInfo) { + var ttt []model.SingleItemInfo + for _, v := range t { + if v.ItemId > 10000 { + ttt = append(ttt, v) + } + + } + p.Service.ItemAdd(ttt) + return +} + func (p *Player) ID() uint32 { return p.Info.UserID @@ -195,7 +209,7 @@ func (p *Player) Save() { p.Info.TimeToday = p.Info.TimeToday + uint32(time.Now().Unix()) - uint32(p.Onlinetime) //保存电池时间 p.Onlinetime = uint32(time.Now().Unix()) - blservice.NewUserService(p.Info.UserID).Save(p.Info) + p.Service.Save(p.Info) } diff --git a/modules/blazing/model/item.go b/modules/blazing/model/item.go index 2997b862..838f824f 100644 --- a/modules/blazing/model/item.go +++ b/modules/blazing/model/item.go @@ -12,20 +12,24 @@ type Item struct { PlayerID uint64 `gorm:"not null;index:idx_player_bag_item_by_player_id;comment:'所属玩家ID'" json:"player_id"` Data string `gorm:"type:text;not null;comment:'全部数据'" json:"data"` } -type ItemE struct { - ID int32 `gorm:"not null;comment:'道具唯一编号'" json:"item_id"` - Count int32 `gorm:"not null;default:0;comment:'拥有数量 '" json:"count"` - Max int32 `gorm:"not null;default:0;comment:'最大数量 '" json:"max"` - Total int32 `gorm:"not null;default:0;comment:'使用次数'" json:"total"` +type SingleItemInfo struct { + // 物品Id, + ItemId uint32 `json:"itemId"` + // 物品数量, + ItemCnt uint32 `json:"itemCnt"` + // 固定值360000, + LeftTime uint32 `json:"leftTime"` + // 固定值0, + ItemLevel uint32 `json:"itemLevel"` } // TableName PlayerBagItem's table name -func (*ItemE) TableName() string { +func (*Item) TableName() string { return TableNamePlayerBagItem } // GroupName PlayerBagItem's table group -func (*ItemE) GroupName() string { +func (*Item) GroupName() string { return "default" } diff --git a/modules/blazing/service/item.go b/modules/blazing/service/item.go index a2b2b5ab..ae841e2a 100644 --- a/modules/blazing/service/item.go +++ b/modules/blazing/service/item.go @@ -6,12 +6,12 @@ import ( "encoding/json" ) -func (s *UserService) ItemExec(t func([]model.ItemE) []model.ItemE) { +func (s *UserService) ItemExec(t func([]model.SingleItemInfo) []model.SingleItemInfo) { //todo待测试 var player model.Item m1 := cool.DBM(s.reg.Model).Where("player_id", s.userid) m1.Scan(&player) - var tt []model.ItemE + var tt []model.SingleItemInfo json.Unmarshal([]byte(player.Data), &tt) t(tt) tmep, _ := json.Marshal(tt) @@ -19,3 +19,46 @@ func (s *UserService) ItemExec(t func([]model.ItemE) []model.ItemE) { m1.Save(player) } +func (s *UserService) ItemCheak() []model.SingleItemInfo { + + //todo待测试 + var player model.Item + m1 := cool.DBM(s.item.Model).Where("player_id", s.userid) + var rer []model.SingleItemInfo + m1.Scan(&player) + json.Unmarshal([]byte(player.Data), &rer) + //return gjson.Parse(player.Data) + return rer +} +func (s *UserService) ItemAdd(t []model.SingleItemInfo) { + + //todo待测试 + var player model.Item + m1 := cool.DBM(s.item.Model).Where("player_id", s.userid) + var rer []model.SingleItemInfo + + m1.Scan(&player) + json.Unmarshal([]byte(player.Data), &rer) + player.PlayerID = uint64(s.userid) + if len(rer) == 0 { + fff, _ := json.Marshal(append(rer, t...)) + player.Data = string(fff) + + _, err := m1.Insert(player) + if err != nil { + panic(err) + } + + return + } + + fff, _ := json.Marshal(append(rer, t...)) + player.Data = string(fff) + + _, err := m1.Update(player) + if err != nil { + panic(err) + } + //return gjson.Parse(player.Data) + +} diff --git a/modules/blazing/service/task.go b/modules/blazing/service/task.go index a35ade5b..8445fb79 100644 --- a/modules/blazing/service/task.go +++ b/modules/blazing/service/task.go @@ -82,6 +82,15 @@ func (s *UserService) TaskSet(id uint32, ret model.TaskInfo) { //gg.TaskID = id cool.DBM(s.task.Model).Where("player_id", s.userid).Where("task_id", id).Update(gg) +} +func (s *UserService) TaskReset() { + var gg model.Task + + tt, _ := json.Marshal(&model.TaskInfo{}) + gg.Data = string(tt) + //gg.TaskID = id + cool.DBM(s.task.Model).Where("player_id", s.userid).Update(gg) + } func (s *UserService) TaskADD(id uint32, ret model.TaskInfo) { var gg model.Task