3.2 积分体系与勋章设置

让积分真的能换来东西,而不是一个涨了三年还没用过的数字。

四个积分项,先搞清楚它们各管什么

积分不是一锅粥,是四个独立的口袋,后台「用户 → 积分」里能改的是它们各自的用途和升级公式。

项目 主要用途 能不能花
经验值 决定用户组、发帖与阅读权限 不能,只涨
金钱 兑换道具、积分升级、上传扣费 能
威望 用户名后方的身份标识 不能
扩展积分 商城、勋章兑换、自定义玩法 能

关键区别在「能不能花」。经验值和威望是只进不出的荣誉,给了就收不回;金钱和扩展积分是可流通资产,规则设错直接出现刷分套利。所以能用扩展积分表达的,别动经验值——经验值一旦跟上传这类可批量刷的行为挂上,账号生意的门槛就降到零了。

新增一个扩展积分项

后台 → 用户 → 积分管理,点「新增积分」,填三样:积分名称、积分单位、积分类别。名称给用户看,单位给数值看(比如「贡献豆」「枚」),填完记得更新缓存。积分类别定义在 pre_common_* 系列里,用户与积分的对应值在 pre_member_* 系列的积分表里,字段以官方《X5.0 开源版数据字典》为准。

想在插件里给人加积分,别直接写 SQL,走系统自带的更新函数:

<?php
// 放 source/plugin/xxx/xxx.inc.php 里,动作触发处调用
function ops_add_credit($uid, $fid, $num, $rule = 'post') {
    global $_G, $discuz;
    if (!$uid || !$fid || !$num) {
        return false;
    }
    // 系统自带的积分更新入口,会同步写积分明细表
    updatecreditbyaction($uid, $rule, array('fid' => $fid, 'num' => $num));
    return true;
}

任务完成、发优质内容被加精时调一次就够了。不要绕过它直接改表,否则积分明细对不上,出了纠纷你没法解释一个数字是怎么来的。

想知道某个用户的积分怎么攒出来的,去后台的积分明细里按用户名筛。前台显示积分走模板变量,字段名随模板不同而不同,以你的版本为准:

&lt;!--{loop $postlist $pid $post}--&gt;
    &lt;span class="credit"&gt;{$post[author]}{$post[message]}&lt;/span&gt;
&lt;!--{/loop}--&gt;

积分的获取途径

获取途径设计有个反直觉的原则:越容易触发的行为,给越少的分。

行为 建议给分 为什么
每日首次回帖 少量 门槛最低,最容易被刷
回帖被赞 中等 需要别的用户付出动作,成本高
加精、被推荐 较多 审核员人工判定,基本可信
完成指定任务 中等 有明确完成条件,可控
附件被下载 中等 有真实使用价值
签到 极少量 纯仪式性质,防刷意义大于激励

签到每天给固定积分,一年下来是笔不小的数字,如果它同时能兑换东西,就会出现「批量注册小号签到」的生意。这类积分要么给上限,要么不给可兑换的用途。

积分的消耗途径

至少要开两条消耗口。只进不出是最常见的坏味道——用户攒了三年发现什么都换不到,干脆把积分体系关了。

  • 积分商城:后台 → 运营 → 积分商城,配商品、价格、库存、每人限购数,主力消耗口。
  • 用户组升级:把扩展积分设进升级公式,用户用它换权限,消耗量最大也最稳定。
  • 道具与勋章:勋章需要积分或金钱才能获得;签到、抽奖这类插件自带消耗逻辑。

设消耗口时记得把「每天最多消耗多少」也设上。没有上限的消耗口遇上外挂,一夜之间能把全站流通量打穿。## 积分与用户组联动

联动做的是:某项积分达到阈值,用户组自动变化,随之变化的是他继承的所有权限。后台「用户 → 用户组」里配置,一个用户组可挂多条积分规则,满足任意一条即升级。

配置前先理清权限继承关系。管理员、超级版主、版主这几组是内置组,改权限要格外小心;自定义组可以随便建,但一个用户同时属于多个组时,权限取并集而不是交集。升级阈值要留弹性,给同一层权限配两到三个组、用不同积分区间区分,让用户有「再攒一点就能进版主组」的奔头。阈值定死就别频繁调,预期被打乱,积分的信用也就没了。

勋章:三种来源

勋章(也常被叫做成就)是挂在资料页上的一枚小图标,标记「这个人干过什么」。

类型 怎么获得 数量限制 能不能撤销
论坛勋章 达成站内条件自动发放 一般一次性 条件消失时可撤销
任务勋章 完成任务链发放 一般一次性 不能
管理员发放 后台手动指定用户 可重复给同一枚 能,且应能撤销

后台 → 运营 → 勋章管理,新增时填名称、图片、描述,再选授予方式。选自动发放的要写清达成条件(比如「发帖数达到 100」),选手动的直接填用户名。显示位置建议只放两处——资料页固定展示,帖子里按需展示;正文区上方挂满勋章会挤掉内容。图片按最小尺寸准备,48×48 的 PNG 足够,1 万用户规模下这是几万个文件的差别。

积分项设计表

动手前先把每个积分项的规则写成表,贴在站务文档里。这一步花两小时,能省掉后面无数次「到底是谁给了这个积分」的扯皮。核心是两列:每日上限和防刷策略,任何积分项这两列写不出来,说明它还没想清楚该不该存在。

积分项 获取方式 消耗方式 每日上限 防刷策略
经验值 发帖、回帖被赞、任务 无 不限 只跟内容行为挂钩
贡献豆 加精、被推荐、优质回复 兑换勋章、申请权限 不限 审核员人工发放
签到积分 每日签到 兑换小道具 每日 1 次 不与权限挂钩
下载点数 附件被他人下载 下载他人附件 每日 20 点 单文件每日下载封顶
邀请点数 通过审核的邀请码 兑换邀请码 不限 与实名绑定,一号一码

上线检查表

  • [ ] 经验值只挂在内容行为上,没被上传、注册这类可批量刷的动作触发
  • [ ] 每个扩展积分项至少有一条消耗途径,消耗口设置了单日上限
  • [ ] 论坛内置组权限未被误改,不存在「用低权限组抵消高权限组」的预期
  • [ ] 勋章图片已按最小尺寸压缩,帖子里的勋章展示不超过两处
  • [ ] 积分插件全部走系统更新函数,后台积分明细能与实际数字对上