使用说明 - 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
运行
- 将文件夹放入电脑中任意位置,参考
config.example.py
和 Config document 写一个config.py
文件放在与main.py
同层次的文件夹中,设置 HOST 为本机 IP 地址,PORT 为对外开放的端口号(建议为 80 或者 81 或者 8080),小心端口冲突 如果选择使用 Charles 等转发工具,请正确配置- 点击
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.db 在 database 文件夹下,可以使用数据库操作软件修改它,比如 sqlite3,也可以使用其它有 GUI 界面的软件,比如 SQLiteSpy
sqlite3.exe 在 tools 文件夹下
歌曲数据导入
从 v2.9
开始,歌曲数据库 arcsong.db
合并入 arcaea_database.db
,且不再提供初始数据,可以使用 tools
文件夹下的 update_song.py
来进行数据迁移和导入
目前支持新旧两种形式的 arcsong.db
文件
如何用 sqlite3
在 v1.2 及以后版本,可以使用管理页面进行更新和修改
-
把 exe 文件放在
database
文件夹下后运行它 -
首先输入
.open arcaea_database.db
来打开数据库 -
输入
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 仓库,所以有许多服务器不需要的东西) -
如果想要对数据库做其它操作,可以参考网上和书上的 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.ogg
、video.mp4
、video_audio.ogg
可用
关于热更新内容捆绑包
- 你可以使用子项目 Arcaea-Bundler 来生成内容捆绑包和元数据文件,或者直接使用官方数据
- 数据总目录位于
database/bundle
,允许建立子目录以方便人工管理 - 成对的捆绑包与元数据文件名需要相同且在同一目录下,后缀必须分别为
.cb
和.json
,同时这也意味着它们分别是二进制文件和 JSON 文件 - 服务端将根据元数据中的
applicationVersionNumber
来限定此内容捆绑包适用的客户端版本号,并按照versionNumber
从小到大进行排序,向客户端按需提供数据 - 请注意,当适配客户端的内容捆绑包存在更高版本时,会强制要求用户更新
- 在服务端运行过程中修改了内容捆绑包相关内容时,需要重启服务端或在后台进行数据刷新以获取最新数据
网页端
注意:
- 文档可能过时
- 基于后端渲染的网页端可能不再更新,有些数据可直接修改数据库
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位
随机生成量不得太多,否则后台查询界面很可能卡顿