pet_home_server/src/server/game/mod/friend/Friend.go
2025-02-17 11:16:45 +08:00

166 lines
3.4 KiB
Go

package friend
import (
"server/GoUtil"
cardCfg "server/conf/card"
"server/game/mod/card"
)
type FriendMod struct {
FriendList map[int]struct{} // 好友列表
ApplyList map[int]int64 // 请求列表
SendApply map[int]int64 // 发送的申请
Card map[string]*card.CardInfo // 收到的申请交换
Log []*LogInfo // 日志
AutoId int
Id int64 // 已同步msg ID
}
const (
LOG_TYPE_FRIEND_APPLY = 1 // 收到申请好友
LOG_TYPE_FRIEND_BECOME = 2 // 成为好友
LOG_TYPE_CARD_EX_SEND = 3 // 发起卡牌交换申请
LOG_TYPE_CARD_SEND = 4 // 赠送卡牌
LOG_TYPE_CARD_GIVE = 5 // 请求卡牌
LOG_TYPE_CARD_SELECT_GET = 6 // 选择卡牌交换
LOG_TYPE_CARD_ACCEPT_GIVE = 7 // 接受卡牌
LOG_TYPE_CARD_EX_GET = 8 // 收到卡牌交换申请
LOG_TYPE_CARD_SELECT_SEND = 9 // 选择卡牌交换
LOG_TYPE_CARD_EX_SUCCESS_1 = 10 // 卡牌交换成功
LOG_TYPE_CARD_EX_SUCCESS_2 = 11 // 卡牌交换成功
LOG_TYPE_FRIEND_DELETE = 14 // 删除好友
LOG_TYPE_PLAYROOM_VISIT = 15 // 拜访玩家
)
const (
FRIEND_NOTIFY_APPLY = 1
FRIEND_NOTIFY_AGREE = 2
FRIEND_NOTIFY_REFUSE = 3
FRIEND_NOTIFY_DEL = 4
)
type LogInfo struct {
Id int
Uid int
Type int
Time int64
Param string
}
func (f *FriendMod) InitData() {
if f.FriendList == nil {
f.FriendList = make(map[int]struct{})
}
if f.ApplyList == nil {
f.ApplyList = make(map[int]int64)
}
if f.Card == nil {
f.Card = make(map[string]*card.CardInfo)
}
if f.SendApply == nil {
f.SendApply = make(map[int]int64)
}
}
func (f *FriendMod) GetSyncId() int64 {
return f.Id
}
func (f *FriendMod) SetSyncId(Id int64) {
f.Id = Id
}
func (f *FriendMod) AddFriend(id int) {
f.FriendList[id] = struct{}{}
delete(f.ApplyList, id)
}
func (f *FriendMod) GetCardInfo(Id string) *card.CardInfo {
v, ok := f.Card[Id]
if !ok {
return nil
}
return v
}
func (f *FriendMod) SetCardInfo(CardInfo *card.CardInfo) {
f.Card[CardInfo.Id] = CardInfo
}
func (f *FriendMod) DelCardInfo(Id string) {
delete(f.Card, Id)
}
func (f *FriendMod) DelFriend(id int) {
delete(f.FriendList, id)
}
func (f *FriendMod) CheckFriend(Uid int) bool {
_, ok := f.FriendList[Uid]
return ok
}
func (f *FriendMod) RefuseApply(id int) {
delete(f.ApplyList, id)
}
func (f *FriendMod) CheckApply(id int) bool {
_, ok := f.ApplyList[id]
return ok
}
func (f *FriendMod) GetFriendNum() int {
return len(f.FriendList)
}
func (f *FriendMod) GetFriendList() []int {
var list []int
for k := range f.FriendList {
list = append(list, k)
}
return list
}
// 收到申请
func (f *FriendMod) AddFriendApply(Uid int) {
f.ApplyList[Uid] = GoUtil.Now()
}
// 发送申请
func (f *FriendMod) AddSendApply(Uid int) bool {
if _, ok := f.SendApply[Uid]; ok {
return true
}
f.SendApply[Uid] = GoUtil.Now()
return false
}
func (f *FriendMod) CheckSendApply(Id int) bool {
_, ok := f.SendApply[Id]
return ok
}
func (f *FriendMod) AgreeApply(UId int) {
f.AddFriend(UId)
delete(f.SendApply, UId)
delete(f.ApplyList, UId)
}
func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
f.AutoId++
f.Log = append(f.Log, &LogInfo{
Id: f.AutoId,
Uid: Uid,
Type: Type,
Time: GoUtil.Now(),
Param: Param,
})
return f.AutoId
}
func (f *FriendMod) ResetGoldCardEx() {
for _, v := range f.Card {
if cardCfg.CheckCardIsGold(v.CardId) || cardCfg.CheckCardIsGold(v.ExId) {
v.EndTime = 1
}
}
}