```
feat(friend): 添加好友系统功能实现 完善好友管理功能,包括添加好友、回复好友请求、删除好友等操作, 同时优化了相关数据结构和接口定义。 BREAKING CHANGE: 调整了黑名单数据结构,将BlackInfo从结构体改为uint32数组 ```
This commit is contained in:
@@ -29,7 +29,7 @@ func (s *BargeService) Update(petid uint32, isskill bool) {
|
||||
cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
return
|
||||
}
|
||||
if t, _ := s.PModel(s.Model).Where("pet_id", petid).Count(); t != 0 {
|
||||
if t, _ := s.PModel(s.Model).Where("pet_id", petid).Exist(); t {
|
||||
if isskill {
|
||||
s.PModel(s.Model).Where("pet_id", petid).Increment("killed_count", 1)
|
||||
} else {
|
||||
|
||||
71
modules/player/service/friend.go
Normal file
71
modules/player/service/friend.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"blazing/cool"
|
||||
"blazing/modules/player/model"
|
||||
"fmt"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type FriendService struct {
|
||||
BaseService
|
||||
}
|
||||
|
||||
func (s *FriendService) Get() ([]uint32, []uint32) {
|
||||
m1 := s.TestModel(s.Model)
|
||||
|
||||
var talks *model.Friend
|
||||
|
||||
m1.Scan(&talks)
|
||||
if talks == nil {
|
||||
return []uint32{}, []uint32{}
|
||||
}
|
||||
return talks.Friend, talks.Black
|
||||
}
|
||||
|
||||
func (s *FriendService) Add(id uint32) bool {
|
||||
m1, _ := s.TestModel(s.Model).Exist()
|
||||
|
||||
if !m1 {
|
||||
m := s.TestModel(s.Model)
|
||||
data := g.Map{
|
||||
"player_id": s.userid,
|
||||
"friend": []uint32{},
|
||||
"black": []uint32{},
|
||||
"is_vip": cool.Config.ServerInfo.IsVip,
|
||||
}
|
||||
|
||||
m.Data(data).Insert()
|
||||
return true
|
||||
}
|
||||
m := s.TestModel(s.Model)
|
||||
|
||||
m.Data(g.Map{
|
||||
"friend": gdb.Raw(fmt.Sprintf("friend|| '%d'::jsonb", id)),
|
||||
}).Update()
|
||||
|
||||
return true
|
||||
}
|
||||
func (s *FriendService) Del(id uint32) bool {
|
||||
|
||||
m := s.TestModel(s.Model)
|
||||
|
||||
m.Data(g.Map{
|
||||
"friend": gdb.Raw(fmt.Sprintf("jsonb_array_remove(friend, '%d'::jsonb)", id)),
|
||||
}).Update()
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func NewFriendService(id uint32) *FriendService {
|
||||
return &FriendService{
|
||||
|
||||
BaseService: BaseService{userid: id,
|
||||
|
||||
Service: &cool.Service{Model: model.NewFriend()},
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
@@ -25,14 +25,9 @@ func (s *InfoService) IsReg() bool {
|
||||
|
||||
m := s.PModel(s.Model)
|
||||
|
||||
record, err := m.One()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
if record != nil {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
record, _ := m.Exist()
|
||||
|
||||
return record
|
||||
}
|
||||
|
||||
// 实现注册,id+昵称+颜色
|
||||
|
||||
@@ -9,13 +9,12 @@ import (
|
||||
)
|
||||
|
||||
func (s *ItemService) Get(min, max uint32) []model.Item {
|
||||
m := s.TestModel(s.Model).Where(g.Map{
|
||||
"item_id <=": max,
|
||||
"item_id >=": min,
|
||||
})
|
||||
|
||||
var ttt []model.Item
|
||||
m.Scan(&ttt)
|
||||
s.TestModel(s.Model).Where(g.Map{
|
||||
"item_id <=": max,
|
||||
"item_id >=": min,
|
||||
}).Scan(&ttt)
|
||||
|
||||
return ttt
|
||||
|
||||
|
||||
@@ -48,9 +48,9 @@ func (s *PetService) UPdateFree(ctime uint32, free uint32) {
|
||||
func (s *PetService) UPdate(t model.PetInfo) {
|
||||
|
||||
m := s.TestModel(s.Model).Where("player_id", s.userid).Where("catch_time", t.CatchTime)
|
||||
var tt model.PetEX
|
||||
var tt *model.PetEX
|
||||
m.Scan(&tt)
|
||||
if tt.CatchTime == 0 {
|
||||
if tt == nil {
|
||||
return
|
||||
}
|
||||
tt.Data = t
|
||||
|
||||
@@ -31,10 +31,6 @@ func (s *TalkService) Cheak(mapid uint32, flag int) (int, bool) {
|
||||
var talks *model.Talk
|
||||
m1.Where("talk_id", flag).Scan(&talks)
|
||||
if talks == nil {
|
||||
talks = model.NewTalk()
|
||||
talks.PlayerID = uint64(s.userid)
|
||||
talks.TalkID = uint32(flag)
|
||||
s.PModel(s.Model).Data(talks).FieldsEx("id").Insert()
|
||||
|
||||
return 0, true //如果表里没有记载数据,那么就可以直接挖矿
|
||||
}
|
||||
@@ -61,15 +57,14 @@ func (s *TalkService) Update(flag int) {
|
||||
cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
return
|
||||
}
|
||||
m := s.PModel(s.Model).Where("talk_id", flag)
|
||||
if condition, _ := m.Exist(); !condition {
|
||||
talks := model.NewTalk()
|
||||
talks.PlayerID = uint64(s.userid)
|
||||
talks.TalkID = uint32(flag)
|
||||
s.PModel(s.Model).Data(talks).FieldsEx("id").Insert()
|
||||
}
|
||||
|
||||
m1 := s.PModel(s.Model)
|
||||
|
||||
var talks model.Talk
|
||||
m1.Where("talk_id", flag).Scan(&talks)
|
||||
|
||||
//talks.PlayerID = uint64(s.userid)
|
||||
//talks.TalkID = uint32(flag)
|
||||
talks.Count += 1
|
||||
m1.Save(talks)
|
||||
s.PModel(s.Model).Where("talk_id", flag).Increment("count", 1)
|
||||
|
||||
}
|
||||
|
||||
@@ -3,9 +3,10 @@ package service
|
||||
import (
|
||||
"blazing/cool"
|
||||
"blazing/modules/player/model"
|
||||
"fmt"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
type TitleService struct {
|
||||
@@ -27,27 +28,15 @@ func (s *TitleService) Get() []uint32 {
|
||||
func (s *TitleService) Can(id uint32) bool {
|
||||
m1 := s.TestModel(s.Model)
|
||||
|
||||
var talks *model.Title
|
||||
ok, _ := m1.Wheref(`available_title @> ?::jsonb`, id).Exist()
|
||||
|
||||
m1.Scan(&talks)
|
||||
if talks == nil {
|
||||
return false
|
||||
}
|
||||
_, ok := lo.Find(talks.AvailableTitle, func(item uint32) bool {
|
||||
return item == id
|
||||
|
||||
})
|
||||
return ok
|
||||
}
|
||||
|
||||
func (s *TitleService) Give(id uint32) bool {
|
||||
m1 := s.TestModel(s.Model)
|
||||
m1, _ := s.TestModel(s.Model).Exist()
|
||||
|
||||
var talks *model.Title
|
||||
|
||||
m1.Scan(&talks)
|
||||
|
||||
if talks == nil {
|
||||
if !m1 {
|
||||
m := s.TestModel(s.Model)
|
||||
data := g.Map{
|
||||
"player_id": s.userid,
|
||||
@@ -58,8 +47,12 @@ func (s *TitleService) Give(id uint32) bool {
|
||||
m.Data(data).Insert()
|
||||
return true
|
||||
}
|
||||
talks.AvailableTitle = append(talks.AvailableTitle, id)
|
||||
m1.Save()
|
||||
m := s.TestModel(s.Model)
|
||||
|
||||
m.Data(g.Map{
|
||||
"available_title": gdb.Raw(fmt.Sprintf("available_title|| '%d'::jsonb", id)),
|
||||
}).Update()
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -11,31 +11,33 @@ type BaseService struct {
|
||||
*cool.Service
|
||||
}
|
||||
type UserService struct {
|
||||
Talk *TalkService //挖矿
|
||||
Task *TaskService //任务
|
||||
Info *InfoService //信息
|
||||
Pet *PetService //精灵
|
||||
Item *ItemService //物品
|
||||
Done *DoneService //完成
|
||||
Room *RoomService
|
||||
Barge *BargeService
|
||||
Title *TitleService
|
||||
Cdk *CdkService
|
||||
Talk *TalkService //挖矿
|
||||
Task *TaskService //任务
|
||||
Info *InfoService //信息
|
||||
Pet *PetService //精灵
|
||||
Item *ItemService //物品
|
||||
Done *DoneService //完成
|
||||
Room *RoomService
|
||||
Barge *BargeService
|
||||
Title *TitleService
|
||||
Cdk *CdkService
|
||||
Friend *FriendService
|
||||
}
|
||||
|
||||
func NewUserService(id uint32) *UserService {
|
||||
return &UserService{
|
||||
|
||||
Task: NewTaskService(id),
|
||||
Info: NewInfoService(id),
|
||||
Pet: NewPetService(id),
|
||||
Item: NewItemService(id),
|
||||
Talk: NewTalkService(id),
|
||||
Done: NewDoneService(id),
|
||||
Room: NewRoomService(id),
|
||||
Barge: NewBargeService(id),
|
||||
Title: NewTitleService(id),
|
||||
Cdk: NewCdkService(id),
|
||||
Task: NewTaskService(id),
|
||||
Info: NewInfoService(id),
|
||||
Pet: NewPetService(id),
|
||||
Item: NewItemService(id),
|
||||
Talk: NewTalkService(id),
|
||||
Done: NewDoneService(id),
|
||||
Room: NewRoomService(id),
|
||||
Barge: NewBargeService(id),
|
||||
Title: NewTitleService(id),
|
||||
Cdk: NewCdkService(id),
|
||||
Friend: NewFriendService(id),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user