Nittbone 发表于 2024-7-15 12:00:29

【茶余杂谈】论坛积分进阶篇

本帖最后由 Nittbone 于 2024-7-15 23:48 编辑

大多数坛友对论坛的各项功能不太了解,有时也会陷入误区,这当然一方面是体系设计并不是十全十美(discuz框架设计、gamemale体系设计)。


另一方面,坛友有时也缺少对gamemale功能的探索精神。


来,看黑板,今天我们的课程就是论坛积分功能的讲解。
====================================
分类篇                         
我们常规意义将论坛的积分分成两类:系统积分(credits)和自定义积分(extcredits)。
注:这并非我自己的命名,而是代码层面的定义,根据使用界面的不同也可以称为标准积分和扩展积分。但以上两类积分用英文来说可以统称为“积分(credits)”。


所谓系统积分,即我们常规意义上的与等级相关的”积分“,这个积分的命名不能修改。
(注:从操作层面是可以,但即使修改后,在论坛不定期的版本更新后,亦会将这些内置的变量统一还原,这也是为什么我们的评分comments一直不变,我此前也曾在该帖提到系统更新后会还原。)


那么自定义积分是什么呢?Nit老师的历史课上曾提到了不同版本的积分构成。从早期我们的论坛借鉴诸如巴哈姆特、3dm等论坛设定的积分,再到如今具有GM特色的积分体系。

现如今我们的自定义积分有8个(上限只有8个),按照设置的顺序extcredits1-8分别为:旅程、金币、血液、追随、咒术、知识、灵魂、堕落。
关系篇                                       
他们在本质上无任何区别,但我们的角色扮演体系赋予了他们不同的涵义与功能。


首先,每种扩展积分都能够设置相同的配置,其中重要的是:积分名称、初始积分、兑换比率、积分兑出、积分兑入。
我们以金币这一扩展积分为例,它的积分名称是“金币”,它的初始积分是“0”,它的兑换比率是“0”,它不能兑出,也不能兑入。
而另一常用的扩展积分血液,它的积分名称是“血液”,它的初始积分是“0”,它的兑换比率是“0”,它能兑出,但不能兑入。
我们再看一个扩展积分旅程,它的积分名称是“旅程”,它的初始积分是“0”,它的兑换比率是“30”,它不能兑出,但能兑入。


同时我们设置了“积分交易税(损失率)”,用于用户在利用积分进行转让(未启用)、兑换、买卖(未启用)时扣除的税率,范围为 0~1 之间的浮点数。目前这一税率为0.15。


那么我们的系统积分之间的关系是什么呢?


系统积分可以通过任意指定的常规变量的数学关系进行计算,它也是任何论坛的等级体系的基石。
它可以通过发帖数 (主题 + 回复数)(posts),主题数(threads);精华帖数(digestposts);总在线时间(小时)(oltime ),好友数(friends),发表的记录数(doings ), 日志数(blogs);相册数(albums),投票数(polls);发表的分享数(sharings ),自定义积分extcredits1~extcredits8这些变量以及+,-,*,/,()这些数学关系组合而成。


那么我出一道题:请写出我们GM系统积分现在的计算公式(中英文皆可),前10位答对的用户将获得某一自定义积分奖励。
组件篇                              
接下来我们进入扩展阶段,来更深层次地讨论积分在各项组件中的应用。
我们一般将论坛的组件分为两种:官方组件(mods)与社区组件/插件(plugins)。


所谓组件是什么?即使离开了这些组件或插件,我们的论坛仍然能够正常使用,它们并不是论坛构成的必要内容。


我们常见的官方组件有:自定义头像、道具商店、自定义用户信息、评分等。
我们常用的社区插件有:数值化的勋章、头衔、你画我猜等。


我们经常可以发现,不同组件之间的冲突、有时甚至涉及到代码运行上的冲突。这是正常的,由于论坛开源的作用,所有人都能编写相关内容,但并没有明确的规范和审核来限制这些,所以许多用户更多基于自己的使用习惯进行编码。


甚至官方组件之间也存在变量命名上的冲突:例如我们的扩展积分(extcredits1~8),在评分组件中的命名即为(score1~8)。
而常用的勋章插件,则比较好地直接使用系统内置的变量名,即 (主题 + 回复数)(posts),主题数(threads);精华帖数(digestposts);总在线时间(小时)(oltime ),好友数(friends),发表的记录数(doings ), 日志数(blogs);相册数(albums),投票数(polls);发表的分享数(sharings ),自定义积分extcredits1~extcredits8。


有意思的是,你可以了解一点,勋章插件中只有自定义积分是可以消耗的,其他的变量是不允许消耗的,了解这点,你可能会对一些勋章的升级条件有所明悟。
对勋章插件的详解不在此次课程中,并且内容复杂,暂时先不开放。

冷知识:论坛所有赞助不经过任何管理之手、并直接投入服务器运维,所以所有运营、组件购买都是管理小花自费。
总结篇                              
本节课程主要讲述了构成论坛体系的核心之一“积分”功能,相信对积分的了解能让你更好地理解GM论坛建设体系,你也可以发散思维,猜测每一代积分体系对应的背景设定。




泥潭療養院

GMagels 发表于 2024-7-15 16:24:06

本帖最后由 GMagels 于 2024-7-15 16:30 编辑

感谢Nit大佬的科普,上完课条理更清晰了!针对课后作业,给出以下答案:

总积分=旅程 + 追随 / 5 + 发帖数 / 10

首先公式应该是这个,针对12楼提出的,首次发帖只需要5帖,总积分就能+1,乱搜了一些资料。
以下都是个人猜想,不是论证,看看就好:

Discuz!论坛的系统设置里,正如帖子里所说确实是允许积分计算的,在系统设置中,可以通过输入规则来计算代码。
在Discuz!应用中心的使用教程的示例图片中,
总计分数的设置为 发帖数+精华帖数*5+威望*2+金钱+贡献
对应的代码写成了
posts+digestposts*5+extcredits1*2+extcredits2+extcredits3图片中除了各种积分名称可供选择之外,只有+-*/以及()的运算符,并没有类似round或者什么其他奇怪的函数可以使用,说明答案可能并不在这里。

于是,去找了DiscuzX 论坛的开源代码(Gitee)一探究竟
在DiscuzX 3.5的代码中,通过查询credit相关的代码,找到了一个名为creditsformula的变量,可能正是上述计算公式。
在install_data.sql中,发现以下代码证实了这一点:
INSERT INTO pre_common_setting VALUES ('creditsformula','posts+digestposts*5+extcredits1*2+extcredits2+extcredits3');
然后顺藤摸瓜,在admincp_members.php找到了这样一句计算公式:eval("\$membercredit = @round({$_G['setting']['creditsformula']});");其作用是根据creditsformula计算结果,并将结果通过round()的四舍五入换算为整数,最后将结果赋值给membercredit

这个round()的四舍五入很有可能就是发帖只需要5帖,总积分就能+1的原因。

如果以上结论成立,那么课后作业从代码层面应该是:

总积分= round( 旅程 + 追随 / 5 + 发帖数 / 10 )

再次声明:以上内容均是乱猜,并非严格论证,当个乐子看就好!如果有错误属于正常现象,请大佬们指正!

参考资料
Discuz!4.0积分完整详细教程:https://discuz.dismall.com/thread-222709-1-1.html
1.17. 积分设置:https://addon.dismall.com/library/x3/admincp/setting/credits.html
DiscuzX 3.5 Gitee开源仓库:https://gitee.com/Discuz/DiscuzX

凯诺斯 发表于 2024-7-15 12:07:14

好详细的科普,有关组件篇的内容了解到了很多{:6_200:}

silencedonkey 发表于 2024-7-15 12:08:32

感谢nit的科普,不知能不能从积分系统里窥见后续超等级用户组设定的可能形式呢;P
捉虫:笨笨nit没改过来,这里应该是旅程吧
我们再看一个扩展积分旅程,它的积分名称是“血液”,它的初始积分是“0”,它的兑换比率是“30”,它不能兑入,但能兑出。

nuomici 发表于 2024-7-15 12:14:45

总积分=旅程 + 追随 / 5 + 发帖数 / 10是这个吗{:6_200:}

user_login 发表于 2024-7-15 12:14:51

昨天以为这次活动是更新了论坛配置,增设了“人性”的临时拓展积分用以自行选择兑换活动勋章了。

DiederichYH 发表于 2024-7-15 12:18:04

讲得很详细,辛苦了!新来的时候确实不太清楚,后来慢慢摸索就更加了解了

novel054748 发表于 2024-7-15 12:18:42

感谢 好详细的科普:o

XLK 发表于 2024-7-15 12:19:15

很详细的科普,对不了解的坛友们有很大的帮助了

li漠北 发表于 2024-7-15 12:23:23

血液差不多就是积分的通用货币,除了换金币,所以血液也挺重要的

you9632587 发表于 2024-7-15 12:26:26

泥潭积分公式里没加在线时间这个变量真的已经很友好了,有的论坛积分公式里有在线时间就把升级速度卡的慢很多

娱乐法师火布偶 发表于 2024-7-15 12:26:31

本帖最后由 娱乐法师火布偶 于 2024-7-15 12:42 编辑

勋章插件中只有自定义积分是可以消耗的,其他的变量是不允许消耗的,了解这点,你可能会对一些勋章的升级条件有所明悟
一个消耗主题数或者回帖数的勋章不仅是不符合插件设计的,而且其实也是反常识的

static/image/hrline/3.gif

严格来说,我认为总积分应该是extcredits1(旅程)+(posts-5)/10 + 1 + extcredits4(追随)/5

Burry 发表于 2024-7-15 12:28:40

挺详细的科普内容呢,积分我一般只知道跟追随和旅程和回帖数有关。

susymon 发表于 2024-7-15 12:35:41

超详细的科普,就是积分获取起来有些难,E人真的很努力的在攒积分

lostorage 发表于 2024-7-15 12:36:41

系统积分=旅程 + 追随 / 5 + 发帖数 / 10这个吗。。
感谢nit佬科普

xvyi 发表于 2024-7-15 13:14:15

本帖最后由 xvyi 于 2024-7-15 13:15 编辑


答:( 总积分=旅程 + 追随 / 5 + 发帖数 / 10 )
提问:所谓系统积分,即我们常规意义上的与等级相关的”积分“,这个积分的命名不能修改。
(注:从操作层面是可以,但即使修改后,在论坛不定期的版本更新后,亦会将这些内置的变量统一还原,这也是为什么我们的评分comments一直不变,我此前也曾在该帖提到系统更新后会还原。)
和等级有关的这个系统积分,除了评分(comments)之外,还有决定用户组的积分,但这个积分受到旅程(自定义积分)影响(见答案计算式),在某些情况下旅程的减少也会导致用户组等级降低,而并不会随“版本更新”统一还原,是否可以问问这类系统积分在“版本更新”时有豁免权

不好好读题的毛病又犯了,撤回一条提问

wdhgzdhcxb 发表于 2024-7-15 13:15:10

总积分=旅程 + 追随 / 5 + 发帖数 / 10(嘿嘿,捡漏了。)
话说楼上火布偶老师说先减5再+1是啥意思啊,是四舍五入吗

黑达克 发表于 2024-7-15 13:50:01

( 总积分=旅程 + 追随 / 5 + 发帖数 / 10 ),我来拿评分了{:6_188:}
顺带一提,我还在等堕落街区的卫星落地。

cdcai 发表于 2024-7-15 13:53:39

原来代码层面还有这些说法,学到了

KA7 发表于 2024-7-15 13:55:21

虽然在你坛呆了几年了,但是还是第一次读到这么全面的积分说明,有心了

justright 发表于 2024-7-15 14:08:06

感谢科普!感觉对论坛更加了解了!对积分的功能也有了了解、
页: [1] 2 3 4
查看完整版本: 【茶余杂谈】论坛积分进阶篇