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;
}
任务完成、发优质内容被加精时调一次就够了。不要绕过它直接改表,否则积分明细对不上,出了纠纷你没法解释一个数字是怎么来的。
想知道某个用户的积分怎么攒出来的,去后台的积分明细里按用户名筛。前台显示积分走模板变量,字段名随模板不同而不同,以你的版本为准:
<!--{loop $postlist $pid $post}-->
<span class="credit">{$post[author]}{$post[message]}</span>
<!--{/loop}-->
积分的获取途径
获取途径设计有个反直觉的原则:越容易触发的行为,给越少的分。
| 行为 | 建议给分 | 为什么 |
|---|---|---|
| 每日首次回帖 | 少量 | 门槛最低,最容易被刷 |
| 回帖被赞 | 中等 | 需要别的用户付出动作,成本高 |
| 加精、被推荐 | 较多 | 审核员人工判定,基本可信 |
| 完成指定任务 | 中等 | 有明确完成条件,可控 |
| 附件被下载 | 中等 | 有真实使用价值 |
| 签到 | 极少量 | 纯仪式性质,防刷意义大于激励 |
签到每天给固定积分,一年下来是笔不小的数字,如果它同时能兑换东西,就会出现「批量注册小号签到」的生意。这类积分要么给上限,要么不给可兑换的用途。
积分的消耗途径
至少要开两条消耗口。只进不出是最常见的坏味道——用户攒了三年发现什么都换不到,干脆把积分体系关了。
- 积分商城:后台 → 运营 → 积分商城,配商品、价格、库存、每人限购数,主力消耗口。
- 用户组升级:把扩展积分设进升级公式,用户用它换权限,消耗量最大也最稳定。
- 道具与勋章:勋章需要积分或金钱才能获得;签到、抽奖这类插件自带消耗逻辑。
设消耗口时记得把「每天最多消耗多少」也设上。没有上限的消耗口遇上外挂,一夜之间能把全站流通量打穿。## 积分与用户组联动
联动做的是:某项积分达到阈值,用户组自动变化,随之变化的是他继承的所有权限。后台「用户 → 用户组」里配置,一个用户组可挂多条积分规则,满足任意一条即升级。
配置前先理清权限继承关系。管理员、超级版主、版主这几组是内置组,改权限要格外小心;自定义组可以随便建,但一个用户同时属于多个组时,权限取并集而不是交集。升级阈值要留弹性,给同一层权限配两到三个组、用不同积分区间区分,让用户有「再攒一点就能进版主组」的奔头。阈值定死就别频繁调,预期被打乱,积分的信用也就没了。
勋章:三种来源
勋章(也常被叫做成就)是挂在资料页上的一枚小图标,标记「这个人干过什么」。
| 类型 | 怎么获得 | 数量限制 | 能不能撤销 |
|---|---|---|---|
| 论坛勋章 | 达成站内条件自动发放 | 一般一次性 | 条件消失时可撤销 |
| 任务勋章 | 完成任务链发放 | 一般一次性 | 不能 |
| 管理员发放 | 后台手动指定用户 | 可重复给同一枚 | 能,且应能撤销 |
后台 → 运营 → 勋章管理,新增时填名称、图片、描述,再选授予方式。选自动发放的要写清达成条件(比如「发帖数达到 100」),选手动的直接填用户名。显示位置建议只放两处——资料页固定展示,帖子里按需展示;正文区上方挂满勋章会挤掉内容。图片按最小尺寸准备,48×48 的 PNG 足够,1 万用户规模下这是几万个文件的差别。
积分项设计表
动手前先把每个积分项的规则写成表,贴在站务文档里。这一步花两小时,能省掉后面无数次「到底是谁给了这个积分」的扯皮。核心是两列:每日上限和防刷策略,任何积分项这两列写不出来,说明它还没想清楚该不该存在。
| 积分项 | 获取方式 | 消耗方式 | 每日上限 | 防刷策略 |
|---|---|---|---|---|
| 经验值 | 发帖、回帖被赞、任务 | 无 | 不限 | 只跟内容行为挂钩 |
| 贡献豆 | 加精、被推荐、优质回复 | 兑换勋章、申请权限 | 不限 | 审核员人工发放 |
| 签到积分 | 每日签到 | 兑换小道具 | 每日 1 次 | 不与权限挂钩 |
| 下载点数 | 附件被他人下载 | 下载他人附件 | 每日 20 点 | 单文件每日下载封顶 |
| 邀请点数 | 通过审核的邀请码 | 兑换邀请码 | 不限 | 与实名绑定,一号一码 |
上线检查表
- [ ] 经验值只挂在内容行为上,没被上传、注册这类可批量刷的动作触发
- [ ] 每个扩展积分项至少有一条消耗途径,消耗口设置了单日上限
- [ ] 论坛内置组权限未被误改,不存在「用低权限组抵消高权限组」的预期
- [ ] 勋章图片已按最小尺寸压缩,帖子里的勋章展示不超过两处
- [ ] 积分插件全部走系统更新函数,后台积分明细能与实际数字对上
