diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 6e49ffda..7881f73c 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -8,6 +8,7 @@ import ( "server/game/mod/item" GoUtil "server/game_util" "server/msg" + "sort" ) type FriendMod struct { @@ -76,7 +77,6 @@ type Interact struct { type ApplyInfo struct { Type int Time int64 - Uid int64 } const ( @@ -231,10 +231,25 @@ func (f *FriendMod) version() { f.Version = 1 for k := range f.ApplyList { f.NewApplyList[k] = &ApplyInfo{ - Type: APPLY_TYPE_FRIEND_CODE, Time: f.ApplyList[k], } } + type sortData struct { + Uid int + Time int64 + } + PlayerList := make([]sortData, 0) + for k, v := range f.NewApplyList { + PlayerList = append(PlayerList, sortData{k, v.Time}) + } + sort.Slice(PlayerList, func(i, j int) bool { + return PlayerList[i].Time > PlayerList[j].Time + }) + for i := 0; i < len(PlayerList); i++ { + if i >= friendCfg.GetApplyListLimit() { + delete(f.NewApplyList, PlayerList[i].Uid) + } + } } } @@ -316,7 +331,7 @@ func (f *FriendMod) AddFriend(id int) { f.NewFriendList[id] = &FriendInfo{ AddTime: GoUtil.Now(), } - delete(f.ApplyList, id) + delete(f.NewApplyList, id) } // 获取卡牌交换信息 @@ -356,13 +371,13 @@ func (f *FriendMod) GetFriendLen() int { // 拒绝好友申请 func (f *FriendMod) RefuseApply(id int) { - delete(f.ApplyList, id) + delete(f.NewApplyList, id) delete(f.SendApply, id) } // 检查好友申请 func (f *FriendMod) CheckApply(id int) bool { - _, ok := f.ApplyList[id] + _, ok := f.NewApplyList[id] return ok } func (f *FriendMod) GetFriendNum() int { @@ -436,7 +451,6 @@ func (f *FriendMod) AddFriendApply(Uid, Type int) bool { f.NewApplyList[Uid] = &ApplyInfo{ Type: Type, Time: GoUtil.Now(), - Uid: int64(Uid), } f.DailyGetApply++ return false @@ -465,7 +479,7 @@ func (f *FriendMod) GetSendApplyTime(Id int) int64 { func (f *FriendMod) AgreeApply(UId int) { f.AddFriend(UId) delete(f.SendApply, UId) - delete(f.ApplyList, UId) + delete(f.NewApplyList, UId) } // 增加好友日志 @@ -589,16 +603,7 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) { // 增加心愿单申请 func (f *FriendMod) AddWishApply(Uid int64) error { - for _, v := range f.Apply { - if v.Type == APPLY_TYPE_WISH && v.Uid == Uid { - return fmt.Errorf("wish apply already exist") - } - } - f.Apply = append(f.Apply, &ApplyInfo{ - Type: APPLY_TYPE_WISH, - Uid: Uid, - Time: GoUtil.Now(), - }) + return nil } @@ -615,12 +620,7 @@ func (f *FriendMod) GetWishApply() []*ApplyInfo { // 同意心愿单申请 func (f *FriendMod) ApplyWish(Uid int64) error { - for k, v := range f.Apply { - if v.Type == APPLY_TYPE_WISH && v.Uid == Uid { - f.Apply = append(f.Apply[:k], f.Apply[k+1:]...) - return nil - } - } + return fmt.Errorf("wish apply not exist") } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index 502d5ed1..d2ad38bc 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -7,6 +7,7 @@ import ( "server/game/mod/chess" "server/game/mod/decorate" "server/game/mod/endless" + "server/game/mod/friend" "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" @@ -62,3 +63,7 @@ func (p *Player) GetOrderMod() *order.OrderMod { func (p *Player) GetFurMod() *fur.FurMod { return p.PlayMod.getFurMod() } + +func (p *Player) GetFriendMod() *friend.FriendMod { + return p.PlayMod.getFriendMod() +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 546f8620..b235419c 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4791,6 +4791,7 @@ func ReqSendWishBeg(player *Player, buf []byte) error { return nil } +// TODO 心愿单功能 待开发 func ReqWishApplyList(player *Player, buf []byte) error { req := &msg.ReqWishApplyList{} err := proto.Unmarshal(buf, req) @@ -4801,7 +4802,7 @@ func ReqWishApplyList(player *Player, buf []byte) error { List := FriendMod.GetWishApply() rs := make([]*msg.ResFriendApplyInfo, 0) for _, v := range List { - PD := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.Uid)) + PD := G_GameLogicPtr.GetResSimplePlayerByUid(0) if PD == nil { continue } diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go new file mode 100644 index 00000000..0fd36df3 --- /dev/null +++ b/src/server/test/friend_test.go @@ -0,0 +1,15 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestFriendInit(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + FriendMod := p1.GetFriendMod() + if FriendMod == nil { + t.Error("FriendMod init failed") + } +}