
联邦统计局 - 服务器统计
为您的服务器编写一个自包含的HTML页面:显示谁在线、在线时长排行榜(挂机时间单独统计)、等级排名、服务器实际繁忙时段热力图,以及一个月未上线的玩家。仅只读且仅限服务器端——您的玩家无需安装任何内容。
查看大图功能说明
监视你的服务器,生成一个自包含的 HTML 页面,可在浏览器中打开、部署到网站服务器,或从 Discord 分享链接。
- 当前在线玩家
- 游戏时长排行榜,挂机时间单独统计
- 等级排名
- 服务器实际繁忙时段热力图(按小时和星期)
- 一个月内无人见过的玩家,帮你找出“占着茅坑不拉屎”的人
- 峰值在线人数及其发生时间
同时也会生成一个包含相同数据的 JSON 文件,方便你自己搭建页面或为 Discord 机器人提供数据。
只读。 它从不修改玩家、物品或世界。它只会触碰三个文件:自己的两个输出文件和一个状态文件。它不会损坏存档,可以与其他任何插件安全共存。
仅服务器端——你的玩家无需安装任何东西,跨平台联机不受影响。
游戏时间 vs 活跃时间
排行榜显示两个数字。总计是连接时间。活跃是其中玩家实际进行游戏的时间。
玩家站立不动且 90 秒内未移动镜头,将被记为离开状态。转动镜头会被刻意计为活动——钓鱼或在工作台旁操作会让你待在原地,但你确实是在玩游戏。
关键在于,通宵挂机的玩家不会排在真正游玩的玩家前面。
安装
- 在服务器上为 Palworld 安装 UE4SS。
- 将
Statistik文件夹复制到Pal/Binaries/Win64/ue4ss/Mods/中。 - 编辑
Statistik/Scripts/config.lua——至少需要设置 ServerName。 - 重启服务器。
检查 Pal/Binaries/Win64/ue4ss/UE4SS.log:
[Statistik] v1.0.1 loading
[Statistik] state loaded: 0 known player(s)
[Statistik] polling every 15s, report -> Statistik_report.html
报告会在启动时立即生成,因此文件在第一个玩家加入前就已存在。打开它,你应该会看到一个空白但完整的页面。
报告输出位置
相对路径会落在服务器可执行文件旁边,即 Pal/Binaries/Win64 中,与你的存档和其他模组的状态文件在同一位置。下载并双击——它会在任何浏览器中打开,无需联网,因为所有内容都在这一个文件中。
也支持绝对路径,这正是关键所在。直接指向网站服务器目录,页面会自动更新:
config.ReportFile = "C:/nginx/html/palworld.html"
config.ReportFile = "/var/www/html/palworld.html"
页面不会发出任何外部请求——不加载字体、脚本或任何来源的图片。它可以在离线环境和防火墙后正常工作。
配置
输出
ServerName "Palworld Server" 页面标题
ReportFile "Statistik_report.html"
JsonFile "Statistik_report.json" "" 表示关闭
WriteSeconds 60 文件重写频率
无论设置如何,采样都会每隔 PollSeconds 进行一次。WriteSeconds 仅控制磁盘写入。
追踪内容
TrackAfk true 单独统计挂机时间
AfkSeconds 90 站立不动且不环顾四周达到此时长
AfkMoveUnits 50 低于此移动量不计为活动
AfkTurnDegrees 5 低于此转动角度不计为活动
TrackGuilds true 从实时公会列表中读取公会成员关系
TrackHeatmap true 繁忙时段网格
报告内容
TopPlaytime 25 游戏时长排行榜行数
TopLevels 25 等级排名行数
InactiveDays 30 列出这么久未见的玩家。0 表示移除该功能。
ForgetAfterDays 0 完全移除玩家。0 = 永远记住所有人。
其他
PollSeconds 15 采样间隔
Verbose false 在日志中输出每次采样的详细信息
StateFile "Statistik_state.lua"
常见问题
这会拖慢服务器吗? 采样是每 15 秒遍历一次已连接的玩家,这与任何玩家追踪模组的做法相同。文件默认每分钟才重写一次。在 32 人服务器上,这几乎无法察觉。
有游戏内界面吗? 没有。服务器端模组可以写入文件和发送聊天消息,但无法绘制窗口——这需要每个玩家都安装模组。HTML 页面就是界面。
我可以把页面放到我的网站上吗? 可以,这正是 ReportFile 的用途。指向你的网站根目录即可。
公会列没有显示内容。 自你安装模组以来未曾连接过的玩家还没有公会记录——成员关系是从实时公会列表中读取的,所以他们下次登录时才会显示。将 TrackGuilds 设为 false 可完全跳过该列。
我可以重置统计数据吗?
删除服务器可执行文件旁边的 Statistik_state.lua。它是纯 Lua 文件,你也可以直接打开并手动编辑或删除单个玩家。
热力图是空的。 它需要几天的采样数据才能形成有意义的模式。它会自行填充。
它能与 Hartz 4 或 Kindergeld 一起使用吗? 可以,与两者同时使用也没问题。此模组不涉及经验值,所以不会与它们发生冲突。
已知限制
- 游戏时间从你安装时开始计算。无法恢复此前未曾记录的历史数据。
- 不追踪死亡、击杀和物品。在 1.0 版本中没有可用的钩子能同时携带事件及其归属者。
- 没有游戏内界面,原因如上所述。
给其他模组作者的提示
有两件事在 1.0 版本上耗费了我很多时间,希望它们能帮你节省一些。
公会成员列表并不在你以为的地方。PalGroupGuild.PlayerInfoRepInfoArray 是一个 UScriptStruct,而不是数组。成员在其 Items 字段中。直接遍历该结构体本身不会报错——它只是什么也得不到,所以你会得到空结果,却没有任何错误可追查。
PalGroupGuild
PlayerInfoRepInfoArray : StructProperty
Items : TArray <- 成员在这里
[i].PlayerUId : Struct {A,B,C,D}
[i].PlayerInfo.PlayerName : StrProperty
GuildName : StrProperty <- 这才是公会名称
**pcall 并不能保护你免受一切错误。**从活动对象上读取任意属性值可能会触发无法捕获的原生访问违规。请先列出名称和类型,并且只读取普通的标量类型值。
我的其他模组
Hartz 4 会减缓那些跑得远超服务器其余玩家的速度。 Kindergeld 会加速那些落后的玩家,直到他们赶上。
本模组只做监视,不会干扰上述任何一个。
需求
服务器端需要 UE4SS。客户端无需任何东西。
许可证
MIT。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。