使用说明 - Lost-MSth/Arcaea-server GitHub Wiki

服务端

以 Windows 系统为例,Linux 可以适当参考 #64

环境搭建

操作系统

本服务端只在 Windows 10 & Windows 11 平台上进行过测试,按理说可以在能够运行 python 代码的所有权限足够的平台上运行

Python 3

Python 3 的安装及环境变量配置在此略去

程序在 Python 3.7 下成功运行
Python 版本需大于等于 3.6

Python模块

使用Python自带的 pip 进行安装即可

pip install -r requirements.txt

仅中文: 因为网络问题,无法从国外下载模块,则可以使用国内镜像源,比如使用清华镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

运行

  1. 将文件夹放入电脑中任意位置,参考 config.example.pyConfig document 写一个 config.py 文件放在与 main.py 同层次的文件夹中,设置 HOST 为本机 IP 地址,PORT 为对外开放的端口号(建议为 80 或者 81 或者 8080),小心端口冲突
  2. 如果选择使用 Charles 等转发工具,请正确配置
  3. 点击 run.bat 运行,请不要点击界面,以免进入选择状态卡住服务器(按回车键取消选择即可)

无须在意 CMD 窗口里的其它信息,若是有 Running on ...... (Press CTRL+C to quit) 信息,说明服务端运行成功

以上属于服务端最简运行方式,若您需要部署方案请移至 Flask 官方文档

运行独立 Link Play 服务器

若不需要独立运行,保证端口正确即可

只需要 linkplay_server 文件夹和 run_linkplay_server.py 文件存在,Link Play 服务(下称“子服务”)就可以单独启动,此时需注意两个服务端的通信设定

  • 主服务端设置文件为 setting.py,请保证其中的设置值正确,包括主服务端连接子服务端的地址(LINKPLAY_HOST)、TCP端口、通信认证(LINKPLAY_AUTHENTICATION),子服务端对外开放的UDP端口和地址(LINKPLAY_DISPLAY_HOST

  • 子服务端设置文件为 linkplay_server/config.py,其中两个端口和通信认证(AUTHENTICATION)应与主服务端设置一致

初始化数据库

database 文件夹下,可以找到一个 py 文件,那是数据库初始化程序,若需要删除所有用户数据,可以删除 arcaea_database.db 文件后运行 database_initialize.py 文件

关于歌曲数据库

歌曲数据库 arcsong.dbdatabase 文件夹下,可以使用数据库操作软件修改它,比如 sqlite3,也可以使用其它有 GUI 界面的软件,比如 SQLiteSpy

sqlite3.exetools 文件夹下

歌曲数据导入

v2.9 开始,歌曲数据库 arcsong.db 合并入 arcaea_database.db,且不再提供初始数据,可以使用 tools 文件夹下的 update_song.py 来进行数据迁移和导入

目前支持新旧两种形式的 arcsong.db 文件

数据来源

数据来源 2

如何用 sqlite3

在 v1.2 及以后版本,可以使用管理页面进行更新和修改

  1. 把 exe 文件放在 database 文件夹下后运行它

  2. 首先输入 .open arcaea_database.db 来打开数据库

  3. 输入 insert into chart(song_id,name,rating_pst,rating_prs,rating_ftr,rating_byn) values('goodtek','GOODTEK (Arcaea Edit)',40,65,93,98); 把不在数据库里面的歌曲加进去(当然 GOODTEK 已经在数据库里了)

    song_id 是歌曲的唯一识别名(用''或者""来表示这是个文本值)

    rating_(pst/prs/ftr/byn) 表示歌曲定数(pst=past prs=present ftr=future byn=beyond)
    数值是歌曲定数的十倍(例如98的意思是9.8,如果这首歌没有beyond铺面,数值应该设为-1)

    name 并不重要,可以随便填一个(用''或者""来表示这是个文本值)

    只有歌曲定数和 song_id 是必须的,不需要加入其它的信息了 (歌曲数据库来自另一个 github 仓库,所以有许多服务器不需要的东西)

  4. 如果想要对数据库做其它操作,可以参考网上和书上的 sql 语言教程
    这里给出一些有用的语句: 删除一个: delete from chart where song_id='goodtek';
    改变一个: update chart set rating_byn=100 where song_id='goodtek';
    查找一个: select * from chart where song_id='goodtek';
    查找全部(最好别用): select * from chart;

关于世界模式

从 v1.3 版本开始,世界模式将可以使用,这里将介绍如何自定义地图
地图数据位于 database/map 下,以 json 格式保存,你可以使用文本编辑器修改它们,但请注意格式

关于歌曲下载

从 v1.4 版本开始,可以进行自定义的歌曲下载

对于那些需要下载的歌曲,可以从本地服务器上提供文件,当然可以添加自制谱与其它歌曲

将所需文件放入名称为歌曲 song_id 文件夹后,再放进 database/songs 文件夹即可,文件夹下有一个参考文件,是 dement 的 Past 难度的前面一小段

Arcaea 只会下载它缺少的文件

database/songs 文件夹下可选择性放入 songlist 文件,用来限制可下载文件,没有提到的曲目不会被限制

谱面文件

一定是 *.aff 文件,前面的数字代表难度,0 到 3 代表 Past 到 Beyond,4 代表 Eternal

歌曲文件

文件名一定是 base.ogg,请注意转换格式

附加文件

仅且仅有 3.oggvideo.mp4video_audio.ogg 可用

关于热更新内容捆绑包

  • 你可以使用子项目 Arcaea-Bundler 来生成内容捆绑包和元数据文件,或者直接使用官方数据
  • 数据总目录位于 database/bundle,允许建立子目录以方便人工管理
  • 成对的捆绑包与元数据文件名需要相同且在同一目录下,后缀必须分别为 .cb.json,同时这也意味着它们分别是二进制文件和 JSON 文件
  • 服务端将根据元数据中的 applicationVersionNumber 来限定此内容捆绑包适用的客户端版本号,并按照 versionNumber 从小到大进行排序,向客户端按需提供数据
  • 请注意,当适配客户端的内容捆绑包存在更高版本时,会强制要求用户更新
  • 在服务端运行过程中修改了内容捆绑包相关内容时,需要重启服务端或在后台进行数据刷新以获取最新数据

网页端

注意

  1. 文档可能过时
  2. 基于后端渲染的网页端可能不再更新,有些数据可直接修改数据库

v1.2版本加入了网页管理页面,可以进行一些辅助性操作,网页地址为 http://IP:PORT/web (例如,服务器端口为80,IP地址为192.168.1.2,那地址为http://192.168.1.2:80/web

登录

默认账号admin,密码admin

关于游戏方面

单个玩家成绩查询

输入用户名或者是UserCode便可以查到玩家所有最好成绩

单个玩家PTT详情查询

输入用户名或者是UserCode便可以查到玩家信息,以及Best30和Recent30数据

所有玩家信息查询

这里可以直接看到所有玩家的基础信息

铺面信息查询

这里可以直接看到所有歌曲的song_id和英文名,以及各个难度的铺面定数

角色信息查询

这里可以直接看到所有角色的ID、名称、技能和数值

物品信息查询

这里可以看到所有物品的ID、类型和可用性

购买信息查询

这里可以直接看到所有购买项目的name、价格、原价、打折时期和包含的物品

奖励信息查询

这里可以直接看到所有奖励的ID、到期时间、描述和包含的物品

兑换码信息查询

这里可以直接看到所有兑换码、类型、包含的物品和兑换人

单个铺面排行榜查询

输入歌曲部分song_id并选择难度后可以模糊查询排行榜(例如,BADTEK的song_id是badtek,输入bad是可以查到的)

关于系统方面

数据库更新

  • 这里可以将旧版本的数据库同步到新版本的数据库,并刷新用户拥有的全角色列表
    可上传文件: arcaea_database.db
    新数据库不存在的数据会被添加,存在的重复数据也会被改变
    更新的表有best_score,friend,recent30,user,user_world,item,user_item,purchase,purchase_item,user_save,login,present,user_present,present_item,redeem,user_redeem,redeem_item,role,user_role,power,power_role,api_auth,user_char,character

    如果先注册,recent30将会添加新用户,这时再做数据库更新将不会同步recent30

  • 这里可以刷新储存在数据库中的songs文件夹下所有文件的 Hash 值。目的是应对歌曲谱面文件的更新

  • 这里可以刷新内容捆绑包的缓存

  • 这里可以刷新数据库中所有成绩的评分。目的是应对歌曲谱面定数的更新

用户密码修改

这里可以修改用户的密码,注意密码长度为8到20位,而且没有进行后台检查,若输入了客户端无法输入的密码,可能导致无法登录

封禁用户

这里可以对特定用户进行封禁,也可以删除某个用户的所有成绩分数,包括best_score和recent30,以及recent数据,但不包括云端存档
修改用户密码可以解除用户封禁

成绩删除

这里可以清除成绩,比如清除某个用户的所有成绩,清除某个谱面的所有成绩等

用户存档更新

这里可以将游戏云存档同步到best_score表,请注意是覆盖,不会进行分数比较

歌曲修改

这里可以向数据库添加和删除指定song_id歌曲,其中铺面定数为浮点数,如9.8,若没有某个铺面,请填入-1

角色修改

这里可以向数据库修改角色技能,并进行用户所拥有角色的更新

物品信息修改

这里可以添加或删除物品

购买信息修改

这里可以向数据库修改购买项目,对于单曲,打折无效;对于曲包,可用性无效

购买信息的物品修改

这里可以给购买信息添加或删除物品

用户信息修改

这里可以修改用户的记忆源点数量

用户购买信息修改

这里可以整体性修改用户的购买情况

奖励修改

这里可以添加或删除奖励信息
ID是奖励的唯一标识;描述是显示在登录界面的信息,不宜太长;到期时间会限制奖励的分发,过期的奖励不会分发

奖励分发

这里可以单独或者是批量地向玩家发放某个奖励,奖励在客户端登录时领取,只能领取一次

兑换码修改

这里可以添加或删除兑换码,兑换码有两种类型,仅可以使用一次或每个用户可以使用一次
兑换码随机生成时长度固定为10位,指定生成时长度为10~20位
随机生成量不得太多,否则后台查询界面很可能卡顿