"我不太记得那天具体是几月几号,只记得那是个很普通的周三晚上。
处理完两起举报,回了三封申诉邮件,给一个新人通过了试用权限申请。日志里没有异常,服务器TPS稳定在19.8左右,没有人在管理群里吵架。
很平常的一天,平常到我本来以为它不值得被记住。
直到三个月后,我翻到一条格式畸形的封禁记录。操作对象是我自己,天数是一个不可能被系统接受的极限值,执行时间恰好对应那个周三晚上——那个我刚刚依法封禁某人的时间点。
那一刻我才意识到,那个普通的周三,对另一个人来说,是她整个世界崩塌的起点。
而我甚至不知道她在那一刻之后,独自经历了什么。"
——耿淮,第二次叙述
真相从来不会缺席,它只是藏在日志的第8471行。
举报频道里的消息又刷了一条:“主城三号仓库门口有人卡bug穿墙偷东西,管理呢?都在睡觉?”
我盯着这条消息,往下拖了拖鼠标,把当前时间瞥了一眼——凌晨一点四十。玩家举报从来不看时间,也不管管理是不是人,是不是也需要睡觉。
我把工单系统打开,点进那个仓库区域的坐标,拉出最近半小时的日志。翻了两分钟,没发现什么穿墙记录,倒是看到那个报案的玩家自己半小时前试图用命令方块刷东西失败了三次,中间还摔死过一回,摔死记录里附带的伤害来源写着“fall”,跟“有人穿墙偷东西”半点关系都扯不上。
我心想,行吧,多半是他自己没刷成功,转头就来举报别人,这种事这半年见得不少了,大多是玩家自己没弄明白规则,先入为主觉得吃了亏,第一反应就是甩锅给别人。
我在工单里写了一行处理意见:“坐标核查无异常记录,暂无法证实穿墙行为,建议报案人提供更具体证据,如有视频录屏可补充举报。”写完盯着这行字又看了一眼,删掉了原本想加的一句“建议先熟悉游戏机制”——太像说教了,容易激化情绪,还是留白比较好。
提交完,我伸了个懒腰,肩膀咯咯响了两声,扭头看了看窗外,天还是黑的,路灯把楼道那一小片影子照得发白。这份试用管理员的活儿,说重要也重要,说琐碎也真是琐碎——大部分时间不是在抓什么惊天大案,是在这种真假难辨的鸡毛蒜皮里来回打转,十条举报里能有八条是玩家自己记错了、或者单纯想找茬,剩下两条才是真出了问题,值得认真核查。
我这个身份说起来也挺尴尬。技术组挂名试用,权限范围窄得可怜,连封禁都没有,只能提交建议给正式管理员审核,由他们决定要不要采纳。挂名试用也快有一段时间了,久到我自己都快忘了当初递交申请那阵子的紧张——那时候我每天上线第一件事就是刷新有没有回复,现在这份紧张早就磨没了,取而代之的是一种熟稔的、近乎麻木的耐心。
处理完那条穿墙举报,我顺手把当天积压的其他几条也扫了一遍:一起交易纠纷,双方各执一词,我拉了聊天记录和物品栏日志,判断是买方自己没看清描述,写了个协调建议;一起噪音投诉,某个玩家的红石钟半夜还在响,我发了条提醒,附上了静音的操作指引。忙完这一轮,天边已经开始泛出一点灰白。
我合上电脑,去睡了几个小时,中午起来接着上线。刚打开后台,就看见谷彻在管理群里发了一条消息:“今天有个新人递补丁申请,澄昕,写的东西看着还行,晚上安排面试。”
我瞥了一眼这条消息,没往心里去。管理组这半年来来去去也见过几个申请者,大多数面试完就没了后续,留下来的凑不满一只手数得过来的人。前两个月还有个说自己精通反作弊算法的,面试聊了十分钟,露了怯,后来再没上线过。
晚上快十点半,面试应该已经结束了,我照常在后台巡查的时候,看到面试记录被单宁存了档,标题写着“澄昕——补丁贡献+权限申请”。我随手点开扫了一眼,没细看,只留意到附件里那份代码写得确实工整,注释也齐全,看得出是花了心思的,比之前那几个申请者的水平明显高出一截。
我把窗口关掉,继续去处理手头那堆举报——今天有点反常地多,一条接一条地弹,我这边光是核查坐标和时间戳,就耗掉了一个多小时,中间起身接了杯水,又坐回来接着看。
处理到一半,谷彻在管理群里发了一句:“澄昕这边先给个试用权限观察,具体范围我跟单宁对一下。”
我瞥了一眼这条消息,随手回了个“好”的表情,没多想。管理组给新人权限一贯是这个流程,先小范围试观察期,谁都一样,我自己当初也是这么过来的,倒也没觉得这次有什么特别的地方。
那天晚上下线之前,我又刷了一眼公共频道,看到有几个老玩家在讨论澄昕那份补丁申请,说写得挺规整,问是不是要正式转正做管理。底下有人回了句“看着挺靠谱的,比某些人强”,我看了一眼没接话,把窗口关了,下线睡觉。
日子照旧往前走,一条举报接一条举报,一次核查接一次核查。我没觉得这天有什么特别,一切都跟平常一样。
(本章完)
面试是单宁主持的,谷彻在旁边记录,我没有参加——面试那会儿我正忙着核实一起举报,等我忙完那批工单,回头才在管理群的存档里翻到了记录摘要。
面试记录不长,大概二十分钟。澄昕对答挺流畅,说起自己写补丁的思路,条理也清楚。单宁在记录末尾写了一句评语:“基础不错,态度积极,先给试用权限观察一段时间。”
我看到这句话的时候,没觉得有什么特别——这就是单宁一贯的作风。我自己当初进管理组,走的也是这条路。单宁对新人从来不是一上来就全权放开,她信一句话,说了不知道多少次:“信任是攒出来的,不是一次给的。”我当年听她说这句话的时候还有点不服气,觉得自己也是花了心思才走到这一步,凭什么要被慢慢试探,现在自己也在这个位置上待久了,倒是能理解这么做的道理——权限一次性给多了,出了岔子谁都兜不住。
试用权限的清单第二天就发在了内部频道,我扫了一眼:后台只读权限、审计日志查阅权限、LuckPerms 编辑权限限制在 helper 到 mod_trial 这两档,其余全部锁死——没有封禁、没有禁言、没有冻结账号,更没有什么“神权”。
这份权限清单说实话挺寒酸,跟外面玩家传的“新人一进来就飞升”完全不是一回事。我记得自己当初拿到的试用权限,比这份还要窄一点,连审计日志都得申请才能看,那时候我为了核实一起举报,还得先给单宁发消息要临时查阅权限,等她批复了才能看,麻烦得要命。
单宁在给澄昕这份权限之前,单独在语音里跟她聊了几句,我当时正好在隔壁频道处理事情,隔着一道墙断断续续听见几句——单宁说的是“这边规矩你多熟悉熟悉,有不懂的多问,别自己瞎琢磨带偏了方向”。
我听完只当是句寻常的入职提醒。单宁对每个新人差不多都会说类似的话,意思是别自己乱猜规则、多问问老人,免得走弯路。我们组里有句玩笑话,叫“新人三大死法”:瞎猜规则、闷头硬干、死不问人。单宁这句提醒,翻译过来大概就是这个意思——上一个新人就是典型的闷头硬干,自己瞎判了个案子,判错了还不承认,最后闹得挺不愉快,单宁大概是不想再重复一次。
我把这事在心里过了一遍,没觉得有什么值得多想的,转头继续去核查那堆积压的举报——手头一份关于领地边界纠纷的工单还没写完,我把它拉出来接着弄,一直忙到那天下线前才算清完。
过了两天,澄昕在内部工作群里发了第一条自己核查过的记录,是一起小范围的权限异常排查,写得挺细,附了截图和坐标。我看的时候正在啃一个苹果,随手回了句“细节挺全,可以”,就没再多说什么,继续啃苹果去了。
我们俩当时几乎没有直接交流,各自忙各自的。她盯着后台看数据,我在外面跑现场处理举报,中间隔着一层,谁也没往谁那边多迈一步。有那么一两次在内部频道里同时在线,她发个技术问题,我顺手回一句,也就仅此而已,说不上有什么深入的接触。
我记得那段时间自己心里对她的印象,其实挺模糊的——就是“技术组新来的一个人,做事挺细致”,仅此而已。没有更多,也没有更少。倒是有一次,我在处理一起举报的时候顺手翻了一眼她提交的那份权限异常排查报告,注意到里面用来核对坐标的方法跟我自己惯用的那套不太一样,效率还挺高,心想着改天可以问问她具体怎么弄的,不过忙起来也就忘了这事,一直没问出口。
(本章完)
那份被忘掉的问题一直没找到机会问出口,倒是没过几天,我这边接到一份新的举报,占去了我接下来几天的大部分精力。
那名用延迟外挂的玩家那起事件,是我这段时间里处理得最完整的一起。
事情起于一份举报:主城边缘那片区域,好几个玩家反映建筑材料无故消失,怀疑是有人在搞破坏。我接到举报之后,先拉了那片区域最近六个小时的活动日志,一条条比对坐标和操作记录,慢慢筛出可疑的时间段。这份日志有几百条记录,我一条条往下看,眼睛看得发酸,中间起身去接了两次水,才算把可疑的那一批筛出来。
那个ID的操作记录里有个漏洞——他删除方块前,习惯性地先切换到旁观模式再切回来,这个操作序列在日志里留了痕,前后连起来看,跟被举报的破坏时间点完全吻合。我又核对了他当时的坐标轨迹,跟那几处被破坏的建筑位置一一对上,没有一处对不上的。
核对完这些,我又倒回去把整段日志重新过了一遍,确认没有别的玩家在同一时间段出现在那片区域,排除掉误判的可能。做完这一步,天已经黑透了,我这才发现自己坐了快四个小时没挪过地方。
我把这些证据整理成一份报告,附了坐标图、时间轴、操作序列比对,提交给单宁审核。单宁看完之后回了句:“证据链完整,没问题,按流程处理。”
封禁批下来那天,我顺手把这起案件的复盘发到了技术组内部频道,供大家参考核查流程——这也是我们组里的习惯,每处理完一起稍微复杂点的案子,都会写份复盘,方便新人对照着学流程。澄昕在下面回了一条评论,说她注意到日志里有一段大概四五秒的间隙,怀疑是不是有什么东西被刻意抹掉了。
我看到这条评论,愣了一下,回去把那段日志又拉出来核对了一遍——那四五秒的间隙我处理案件的时候就注意到了,是采样点之间的正常空隙,Spark 抽样本身就不是逐帧记录,隔几秒才采一次数据是常态,跟网络抖动叠在一起,间隙看起来会比平时长一点,但不影响整条证据链的完整性,我在报告里其实已经用坐标轨迹和操作序列做了交叉验证,不需要靠中间那几秒的画面。
我把这个解释回给了她,写得挺简单:“那段是采样间隙,加上网络抖动,正常现象,主要证据是坐标轨迹和操作序列的比对,那部分没有缺口。”
她回了个“好的,了解”,这事就算过去了。
不过说实话,我心里对她那条评论多留了一点印象——这个新人观察力挺不错,能注意到别人复盘时没提的细节,只是这个揣测的方向,稍微有点往坏处想的意思。我把这个念头随手记在了心里,没往深处去,也没觉得这算什么问题——谁做这行久了不多留一点疑心,这反而是个做技术审核该有的素质,我自己刚入行那两年,看什么记录都疑神疑鬼,后来处理案子多了才慢慢学会分辨哪些疑点值得深挖、哪些只是自己多想。
案件处理完,玩家群里的反应挺平淡,没什么波澜,该封的封了,该赔的材料也补了。我合上这份报告,转头去处理下一条举报——是一起关于领地权限继承的咨询,倒不算什么处罚案件,回复了几句就解决了,日子照旧往前走。
(本章完)
案件处理完那阵子的平静没能维持太久。澄昕转正之后没多久,我这边陆陆续续接到几起跟她有关的工单,都不大,但攒起来就有点意思。
第一起是禁言记录。有玩家申诉说自己被澄昕禁言十分钟,理由写的是“公共频道人身攻击”,但申诉里贴出来的原话只是一句带点情绪的调侃,“新官上任三把火”,够不上人身攻击的标准。我把两边的记录拉出来对比了一下——申诉人提交的聊天记录截图,跟系统后台自动存档的原始记录,一字不差,确认没有被人动过手脚,只是这句话本身的性质,确实和"人身攻击"这个理由不太匹配。
我写了一条备注挂在工单里:“禁言理由与实际言论不完全相符,建议提醒规范用词”,走了个提醒流程,没有往上升级处理,毕竟就十分钟的事,谁都有拿不准分寸的时候,我自己刚拿到禁言权限那半年,也把好几起本该走警告流程的小事直接禁言处理了,后来才慢慢学会分寸。
这条工单挂上去没几天,第二起就来了,是一次常规的权限审计——我们组每隔一段时间会抽查一批管理员账号的权限节点,看有没有跟当前所属组不匹配的异常。我做这次审计的时候,翻到澄昕的小号权限组是 mod_trial,但节点列表里多了一条 essentials.fly,这个节点不该出现在这个权限组里。
我核对了操作日志,是她自己手动加上去的,添加时间是三天前的深夜,附带的操作备注写的是"测试权限继承"。我又往后翻了几分钟的记录,看到这个权限被用来实际飞行了大概六七分钟,绕着主城飞了一圈,之后节点还留在那儿,没有被移除。
我把这条记录截了图,写了一份警告工单,提交给单宁:“检测到权限组异常节点,已确认为本人手动添加且实际使用过,建议正式警告并要求限期移除。”单宁批复"同意,按标准警告流程处理"。我把警告发给澄昕,她隔了半天回了句"好的,马上删",那个节点确实在当天就被移除了。
这两起单看都不算大事,我一贯是这么处理的:记录、核实、按流程走,该提醒的提醒,该警告的警告,不上升到更严重的处分,除非累积到一定次数——这也是单宁一贯强调的原则,处罚要讲比例,不能因为一件小事就把人一棍子打死。
第三起是审计记录本身出的问题——这个稍微麻烦一点。我们组里有条不成文的规矩,审计日志的时间戳一旦写入就不该再改动,这是整套追责机制的基础。我在核查一起管理员间的争执记录时,发现澄昕那边提交的聊天记录时间戳,跟对方提交的版本有出入,前后顺序被换了一下,效果上看起来像是对方先挑起争执。
我把两份记录并排放在一起看了很久,一行一行地比对时间戳的秒数,确认这不是系统误差,是被人工调整过的——差值正好是两分钟,太规整了,不像是系统抖动能造成的偏差。这种事严重一点,我把材料整理完整,附上两份记录的哈希值对比,提交给了单宁。
单宁看完之后没有立刻回复,隔了几个小时才说:“这个要走完整核实流程,先把她之前那两条记录也一起拉出来看看轨迹。”
我把之前那两起——禁言理由不符、权限组异常节点——一起打包,整理成一份完整的时间线报告提交上去。三件事单看都够不上什么大问题,但连起来看,是一条挺清晰的轨迹。
这份报告提交那天,我顺手处理了另一起不相干的案子——一个屡犯的老玩家,这是他今年第三次被判定恶意破坏,按管理组内部的处罚梯度表,第三次直接顶格。我记得那次判罚的时长填的是一个很大的数字,具体多少我没细想,反正系统接受了,判罚生效,那个玩家账号也确实进不来了。
倒是这次判罚里,我发现天数换算成毫秒时间戳的时候,数值有点奇怪——具体表现是解封日期显示成了一个格式很怪的年份,我盯着那串数字看了两秒,猜可能是判罚天数太大,换算过程中数值类型不太够用,出了个显示上的小毛病。我核对了一下这次填的天数,是个七位数,不算特别离谱,应该只是这一层的显示字段用了精度不够的类型去存,取的时候转换错了,但真正决定封禁生不生效的判断逻辑,走的是另一套字段,没受这个显示错误影响。这种事我以前零星见过一两次,一般不影响封禁本身是不是生效,我在心里琢磨了一下,随手在自己的工作笔记里记了一句"大数值天数换算可能存在显示异常,待观察,暂不影响实际生效",就转头去处理别的事了,没跟这次的判罚多想什么关联,也没往上报——毕竟这只是个显示问题,罪犯该被拦在外面,还是被拦在外面了。
澄昕那份报告提交上去以后,单宁审核了差不多两天,把三起事件的时间线摆在一起,最后给出的意见是:"累计三次违规,情节从轻微到较重,符合正式处分标准,同意执行封禁。"
我看到这条批复的时候,心里说不上有多少波动,就是照常准备取证材料——截图、坐标、时间戳、三份工单的编号——一样一样整理好,走标准流程,等着执行那一步。
(本章完)
取证材料准备完,我把三份工单编号、截图、坐标、时间戳又检查了一遍,确认都齐全,才把整份材料重新提交给单宁。
单宁回复得很快:"齐了,同意执行,7天。"
我看着这条批复,说实话手指在键盘上停了几秒。倒不是拿不准,材料摆在那儿,证据链完整,该走的流程一步都没少。只是这个人是自己带过一段时间的同事,虽然接触不算多,可到底也算共事过,真要按下执行键的时候,心里那种感觉跟处理陌生玩家还是有点不一样。
我把处罚原因栏填好:"权限滥用、记录篡改,累计三次,经审核批准执行处分。"处罚期限填的是7天,不是什么惊天数字,就是按内部处罚梯度表,第三次违规对应的标准时长。
填完这一栏,我又往上翻了翻三份工单的编号,一个字一个字地核对是不是都对应上了——禁言那份、权限节点那份、时间戳那份,顺序没有错。这种事我一贯谨慎,一个字段填错,日后要是有人翻旧账,说不定就会被抓住把柄,质疑整个处理流程站不站得住脚。
我盯着这几行字又看了一遍,确认没有错漏,按下了执行键。
系统提示弹出来:"封禁执行成功。目标玩家:澄昕。执行人:耿淮。审批人:单宁。"
我看着这条提示,没有觉得多痛快,也没觉得多难受,就是那种把一件该做的事做完之后的平常感觉,混杂着一点说不清的疲惫。这份工作干久了大概都这样——你知道自己做的是对的,可对的事情做起来,也不见得会让人心情轻松。
我往后靠了靠椅背,想起前段时间那份禁言警告工单她回复"好的,马上删"的语气,还挺干脆,没有多辩解。这个人做事细致,态度也算配合,只是这几件事凑在一起,性质就不轻了——单看每一件都够不上什么大问题,可放在一起看,就是一条能写进档案的轨迹,这也是单宁一贯强调的判罚逻辑:不看单次严重程度,看整体轨迹。
我把这次处罚的完整记录归了档,标注上三起前置事件的工单编号,方便以后查阅关联。这份归档花了我小半个小时,我把每一份截图重新核对了文件名和路径,确保以后有人要复核这起处分,能顺着这几个编号一路查到最初的证据源头,而不是只看到一个孤零零的处罚结果。
归档完,我看了看时间,已经不早了,把后台窗口一个个关掉,最后瞥了一眼公共频道——没什么异常动静,该刷的消息照常刷,跟平时没什么两样。倒是谷彻在管理群里发了一句"处理得挺细致",我回了个表情,没多说什么。
我下线的时候,脑子里想的是明天还有几份积压的举报要处理,还有澄昕那次事件后续的存档整理没做完。没有更多想法,这件事在我这边,就是走完流程的一起普通处分,跟以前处理过的其他案子没什么本质区别,顶多因为对方是个共事过的同事,多花了几分钟心思把材料整理得更周全一点。
我合上笔记本,起身去倒了杯水,站在厨房窗边喝了几口,看着楼下路灯底下没什么人影,这一天就这么过去了。
(本章完)
那杯水喝完,这件事在我这儿也就算过去了,接下来两天照常处理别的举报,澄昕那次处分没再被人提起。
过了两天,我抽了个空档,打算把之前记在工作笔记里的那句"大数值天数换算可能存在显示异常"彻底捋清楚——这事我惦记了几天,一直没找到整块的时间,正好手头没什么急件,就着手整理一份给技术组内部参考的文档,主题是"大数值天数换算的潜在风险"。
我把数据库里所有处罚时长超过一定阈值的记录都拉了出来,一条条核对解封日期是否正常显示。大部分都没问题,只有零星几条显示成了奇怪的年份,跟我之前处理那个屡犯玩家时留意到的情况差不多——这些记录我一条条截图存档,准备写进文档里当反面案例。
翻到倒数第二页的时候,我看到一条记录,愣了一下。
这条记录的执行人是我自己的账号,操作对象也是我自己的账号——耿淮。处罚天数是一个荒谬到不像真实数字的极限值,解封日期那一栏直接显示成了乱码。
我盯着这条记录看了几秒,第一反应是,这是不是数据库同步的时候串行错了,把别的记录的执行人字段写错了位置。
我心想,这种事以前倒是听说过,多表关联写入的时候偶尔会串位,先别急着当真,查查日志源头再说。
我把这条记录的原始日志拉了出来,时间戳精确到毫秒——操作发生的时间,正好是我执行完澄昕那次合法封禁之后没几分钟。
这个时间点让我心里咯噔了一下。
我心想,等等,那个时间点,我人是坐在电脑前的,账号也是登录状态,怎么会同时冒出一条我自己执行的、针对我自己的封禁指令,我自己完全不记得敲过这条命令。
我又把日志往下拉,看操作来源的会话 ID——竟然对不上我自己的登录会话,是一个我从没见过的临时会话标识,生命周期只存在了不到一秒钟,随即就断开了。
这不对,我心想,我的账号权限里根本没有对自己执行封禁的权限,系统层面应该会直接拒绝这种操作才对,怎么会留下一条执行记录。
我把这条记录的返回码翻出来看,那一栏写的不是"成功",也不是常见的"权限拒绝",是一串我从没见过的错误码,指向的是数值类型溢出。
我盯着这行错误码,脑子里那根线忽然接上了——之前那份笔记,"大数值天数换算可能存在显示异常"。
我心想,如果这条记录的天数值大到超出了系统能处理的范围,换算成毫秒时间戳的时候发生了真正的数值回绕,那这条指令在系统层面,压根就没有真正执行成功,返回的那个畸形错误码,就是回绕失败的痕迹。
也就是说,这条记录不是"我封禁了自己",而是有某个东西,试图用我的名义,对我自己发出了一条从未真正生效的封禁指令。
我盯着屏幕,一时间没想明白这到底是谁干的,或者说,这到底是不是"谁"干的——那个临时会话标识,生命周期不到一秒,跟一次正常的人为操作完全不像。我把这个念头在脑子里过了几遍,试着往几个方向想:会不会是有人拿到了我的临时凭证做了次恶意调用?可临时凭证被盗用的话,应该能查到调用来源的IP或者设备指纹,我又往下翻了几行,那两栏全是空的,什么都没记录下来,干净得不太正常。
会不会是某个后台脚本抽风了?我们组没有任何自动化脚本会去操作封禁指令,这条路也走不通。
我把这份异常记录连带原始日志、错误码解释,一起打包发给了单宁,只写了一句:"这个你得看一下,有点奇怪。"
单宁回复得很快:"马上看。"
我坐在屏幕前,等着她那边的消息,顺手把刚才那份"大数值天数换算的潜在风险"文档存了个草稿,先放到一边——比起写文档,眼前这条记录明显更要紧一点。
大概过了十来分钟,单宁发来一条消息:"这条记录的时间点,跟你执行澄昕那次封禁完全重合,中间就差了几分钟。你有没有觉得——这两件事可能不是巧合。"
我看着这句话,盯着屏幕又把两份时间戳并排摆在一起核对了一遍,确实分秒不差地衔接在一起,中间没有任何空隙。
我心想,如果这两件事真的有关联,那会是什么样的关联——一条从未真正生效的、针对我自己的封禁指令,偏偏在我刚封了澄昕之后冒出来,这背后要有个说得通的解释,我一时想不出来。
单宁又发来一条:"她那边现在什么状态,你有联系上吗?"
我打开澄昕的账号状态查了一下——显示的是离线,最后一次活动时间,就是被封禁生效的那一刻,之后再没有任何登录记录。
我盯着这个"离线"两个字,心里那种说不清楚的感觉又浮上来了一分——这条记录发生的时间点,紧贴着我刚刚执行完的那次封禁。这两件事之间,好像不该只是巧合。
(本章完)