游戏服务端开发——好友系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38278878/article/details/84560531

开头

好友系统几乎是每个网络游戏都有的系统,以下分享一种好友系统的具体实现方式。

存储

存在公共ETS中,以RoleId为key,好友列表为value。
假设好友相关的信息存在角色的私有数据里面,在添加好友时,就需要修改对方已加载的数据和数据库中的数据,过程非常麻烦,因此存储在公共的ETS表中。

数据结构

%% 好友列表结构
-record(friend_list, {
    role_id     = 0,
    list        = [],
}).


%% 好友的数据结构
-record(friend_data, {
    role_id     = 0,    %% 好友RoleID
    type        = 0,    %% 类型
    data        = #{}   %% 扩展数据
}).

好友类型

-define(STRANGER,0).%% 陌生人
-define(GOOD,   1). %% 好友
-define(BLACK,  2). %% 黑名单
-define(APPLY,  3). %% 申请列表

每种类型都存在同一份好友列表,取出来的时候再进行分类。

操作

1、好友列表

根据RoleId获取在公共ETS中存储的好友列表信息,进行好友列表,申请列表,黑名单的简单分类。

2、申请好友

根据自己和对方的RoleId在公共ETS中获得对应的好友列表,
进行以下检测:

#1、RoleId是否合法(双方的RoleId是否相等,格式非法等)

#2、双方是否存在对方的黑名单中

#3、双方是否存在对方的好友列表中

#4、好友数量是否已到达上限

检测通过后,组成#friend_data{role_id=自己id, type=3}存入对方的好友列表,存公共ETS表。

3、删除好友

根据自己和对方的RoleId在公共ETS中获得对应的好友列表,
进行以下检测:

#1、双方是否存在对方的好友列表中

检测通过后,在双方列表互相删除对方好友,存公共ETS。

4、同意/拒绝好友申请

根据请方和对方的RoleId在公共ETS中获得对应的好友列表,
进行下检测:

#1、双方是否存在对方的申请列表中

#2、双方是否存在对方的黑名单中

#3、好友数量是否已到达上限

检测通过后,判断标志位是同意还是拒绝

#同意:组成#friend_data{role_id=双方id, type=1}以取代的方式存入各自的好友列表

#拒绝: 删除在自己在对方好友列表中的数据。

处理完成后,存公共ETS表。

5、加入黑名单

根据请方和对方的RoleId在公共ETS中获得对应的好友列表,
进行下检测:

#1、RoleId是否合法(双方的RoleId是否相等,格式非法等)

#2、对方是否在自己的黑名单中

#3、黑名单是否已到上限

检测通过后,将对方加入自己的好友列表,type为2;如果自己在对方的好友列表,则删除。
存公共ETS表。

6、取消黑名单

根据请方和对方的RoleId在公共ETS中获得对应的好友列表,
进行下检测:

#1、对方是否在自己的黑名单

检测通过后,自己的好友列表中移除对方。

7、查找好友

通过游戏昵称获取RoleId, 判断对方与自己的关系,返回信息。

猜你喜欢

转载自blog.csdn.net/weixin_38278878/article/details/84560531