好友一多,列表就成了流水账:矿友、行会兄弟、摆摊摊主混在一起。好友分组框架让玩家自建分组:挖矿组、攻城组、生意伙伴各归各位,私聊与提醒按组过滤,换设备分组不丢。框架要处理分组建立、成员归属与跨组管理三种操作。
分组支持自定义命名与成员拖拽归属,一名好友可同时属于多个分组;分组数量上限十个,每组成员上限五十,防止无限膨胀。示例代码如下:
-- 好友分组:建组与归属
local player = class(actor)
local MAX_GROUP, GROUP_CAP = 10, 50
local function addToGroup(player, groupId, friendName)
if groupId > MAX_GROUP then
sendmsg(player, 1, 0, "分组数量已达上限 " .. MAX_GROUP .. " 个。")
return
end
local memberKey = "GroupMember_" .. groupId
local members = getplayvar(player, "HUMAN", memberKey) or ""
local cnt = 0
for _ in string.gmatch(members, "[^,]+") do cnt = cnt + 1 end
if cnt >= GROUP_CAP then
sendmsg(player, 1, 0, "该分组已满 " .. GROUP_CAP .. " 人。")
return
end
setplayvar(player, "HUMAN", memberKey, members .. friendName .. ",", true)
sendmsg(player, 1, 0, friendName .. " 已加入分组 " .. groupId .. "。")
end
私聊与上线提醒按分组路由:免打扰组上线不弹提醒,重点组上线即高亮;过滤规则挂在消息出口,分组配置改动即时生效。示例代码如下:
-- 按组过滤:私聊路由与免打扰
local player = class(actor)
local MUTED = {["挂机组"] = true}
local function routeChat(player, fromName, text)
local group = getplayvar(player, "HUMAN", "FriendGroup_" .. fromName) or "默认"
if MUTED[group] then
sendmsg(player, 1, 0, "【免打扰】" .. fromName .. " 发来一条消息。")
return
end
sendmsg(player, 1, 0, fromName .. ":" .. text)
end
验证三条链路:建组上限与成员上限拦截、一名好友双组归属双处可见、免打扰组消息降级为提醒条;换设备后分组与归属完整恢复。线上监控分组使用率与人均分组数,使用率低于一成半把入口从好友二级菜单提到列表长按;单组分员长期为零的分组提示玩家清理,让分组始终是活的。
分组归属曾按名字存,改名后成员在分组里“消失”,归属改按角色编号存储。免打扰曾全组静音,组内关键交易信息也被吞,免打扰只压提醒保留消息本体。分组上限曾不设防,有玩家建了两百个空分组,上限加空组清理提醒,社交数据膨胀的口子要在功能上线时一并堵住。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…