Current collected state Current
Observed since 20 Oct, 19:44 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
为 ADOFAI 游戏的 .adofai 关卡文件提供读写、查找、增删改等操作的库
ADOBase 是一个专为 ADOFAI 游戏 .adofai 关卡文件设计的 Python 库,支持关卡文件的读取、写入、格式转换、信息提取、事件查找与批量编辑等操作。
pip install ADOBase
from adobase import ADOFAILevel
# 读取关卡文件(自动处理 BOM 和非标准 JSON)
level = ADOFAILevel.load('main.adofai')
# 获取关卡信息
all_info = level.get_level_info() # 获取全部关卡信息
basic_info = level.get_level_info('levelbase') # 获取基础信息(曲名、曲师、谱师)
bpm = level.get_level_info('bpm') # 获取单个值
specific = level.get_level_info('bpm', 'difficulty') # 获取多个指定字段
# 打印关卡信息(兼容旧版本)
level.print_level_info('levelbase') # 打印基础信息
level.print_level_info('bpm', 'difficulty') # 打印指定字段
# 编辑关卡信息(如修改版本号和 BPM)
level.edit_level_info(version=15, bpm=180)
# 验证修改
print(level.get_level_info('version', 'bpm'))
# 获取某砖块的所有事件
events = level.get_tile_event(1) # 获取1号砖块的所有事件
move_events = level.get_tile_event(1, 'MoveDecorations') # 获取1号砖块所有MoveDecorations事件
# 获取某砖块某类型事件的详细信息
info = level.get_event_info(1, 'MoveDecorations', 0) # 获取第一个MoveDecorations事件的全部信息
props = level.get_event_info(1, 'MoveDecorations', 0, 'duration', 'tag') # 获取指定属性
# 编辑某砖块某类型事件的属性
level.edit_event_info(1, 'MoveDecorations', 0, duration=2, tag='newtag')
# 批量修改所有某类型事件的属性
level.batch_edit_event('MoveDecorations', duration=1, tag='2')
level.batch_edit_event('MoveDecorations', floor=3, duration=2) # 只修改3号砖块
# 获取某砖块的所有装饰物
decorations = level.get_tile_decoration(1) # 获取1号砖块的所有装饰物
add_decorations = level.get_tile_decoration(1, 'AddDecoration') # 获取1号砖块所有AddDecoration装饰物
# 获取某砖块某类型装饰物的详细信息
deco_info = level.get_decoration_info(1, 'AddDecoration', 0) # 获取第一个AddDecoration装饰物的全部信息
deco_props = level.get_decoration_info(1, 'AddDecoration', 0, 'scale', 'tag') # 获取指定属性
# 编辑某砖块某类型装饰物的属性
level.edit_decoration_info(1, 'AddDecoration', 0, scale=1.5, tag='newtag')
# 批量修改所有某类型装饰物的属性
level.batch_edit_decoration('AddDecoration', scale=1.5, tag='background')
level.batch_edit_decoration('AddDecoration', floor=2, scale=2.0) # 只修改2号砖块
# 批量获取所有某类型事件的完整信息
all_move_events = level.batch_get_event_info('MoveDecorations')
# 批量获取所有某类型事件的某个属性
move_durations = level.batch_get_event_info('MoveDecorations', 'duration')
# 批量获取所有某类型装饰物的完整信息
all_add_decos = level.batch_get_decoration_info('AddDecoration')
# 批量获取所有某类型装饰物的某个属性
add_scales = level.batch_get_decoration_info('AddDecoration', 'scale')
# 新增事件
level.add_event(1, "MoveTrack", "default") # 在1号砖块插入一个默认MoveTrack事件
level.add_event(2, "Twirl", duration=1.5, tag="mytag") # 在2号砖块插入自定义Twirl事件
# 删除事件
level.remove_event(1) # 删除1号砖块的所有事件
level.remove_event(1, "MoveTrack") # 删除1号砖块所有MoveTrack事件
level.remove_event(1, "MoveTrack", 0) # 删除1号砖块第一个MoveTrack事件
level.remove_event(event_type="Twirl") # 删除全关卡所有Twirl事件
level.remove_event() # 删除所有事件(清空actions)
# 新增装饰物
level.add_decoration(2, "AddDecoration", "default") # 在2号砖块插入一个默认AddDecoration装饰物
level.add_decoration(3, "AddDecoration", scale=2.0, tag="mytag") # 在3号砖块插入自定义AddDecoration装饰物
# 删除装饰物
level.remove_decoration(2) # 删除2号砖块的所有装饰物
level.remove_decoration(2, "AddDecoration") # 删除2号砖块所有AddDecoration装饰物
level.remove_decoration(2, "AddDecoration", 0) # 删除2号砖块第一个AddDecoration装饰物
level.remove_decoration(decoration_type="AddDecoration") # 删除全关卡所有AddDecoration装饰物
level.remove_decoration() # 删除所有装饰物(清空decorations)
# 导出为标准 JSON 文件(无 BOM,adodai 风格缩进)
level.export('output.json', as_original=False)
# 导出为 adofai 文件(加 BOM,adodai 风格缩进)
level.export('output.adofai', as_original=True)
# 统计事件数量
all_event_count = level.get_event_count() # 全关卡事件总数
move_event_count = level.get_event_count(event_type='MoveDecorations') # 全关卡某类型事件数
floor_event_count = level.get_event_count(floor=1) # 1号砖块所有事件数
floor_move_event_count = level.get_event_count(floor=1, event_type='MoveDecorations') # 1号砖块某类型事件数
# 统计装饰物数量
all_deco_count = level.get_decoration_count() # 全关卡装饰物总数
add_deco_count = level.get_decoration_count(decoration_type='AddDecoration') # 全关卡某类型装饰物数
floor_deco_count = level.get_decoration_count(floor=1) # 1号砖块所有装饰物数
floor_add_deco_count = level.get_decoration_count(floor=1, decoration_type='AddDecoration') # 1号砖块某类型装饰物数
ADOFAILevel.load(filepath)ADOFAILevel 实例。ADOFAILevel.export(filepath, as_original=False)as_original=True:导出为 adofai 文件(加 BOM,adodai 风格缩进)as_original=False:导出为标准 JSON 文件(无 BOM,adodai 风格缩进)ADOFAILevel.save(filepath)ADOFAILevel.get_level_info(*fields)'levelbase' 时,返回关卡基础信息字典(曲名 song、曲师 artist、谱师 author)ADOFAILevel.print_level_info(*fields)get_level_info() 获取数据并打印ADOFAILevel.edit_level_info(**kwargs)level.edit_level_info(version=15, bpm=180)ADOFAILevel.get_tile_event(floor, event_type=None)floor,返回该砖块的所有事件(列表)floor 和 event_type,返回该砖块所有该类型事件(列表)ADOFAILevel.get_event_info(floor, event_type, index=0, *attrs)attrs,返回事件完整字典ADOFAILevel.edit_event_info(floor, event_type, index=0, **kwargs)edit_event_info(1, 'MoveDecorations', 0, duration=2, tag='newtag')ADOFAILevel.batch_edit_event(event_type, floor=None, **kwargs)event_type,全关卡批量修改该类型事件event_type 和 floor,只修改该砖块上的该类型事件ADOFAILevel.get_tile_decoration(floor, decoration_type=None)floor,返回该砖块的所有装饰物(列表)floor 和 decoration_type,返回该砖块所有该类型装饰物(列表)ADOFAILevel.get_decoration_info(floor, decoration_type, index=0, *attrs)attrs,返回装饰物完整字典ADOFAILevel.edit_decoration_info(floor, decoration_type, index=0, **kwargs)edit_decoration_info(1, 'AddDecoration', 0, scale=1.5, tag='newtag')ADOFAILevel.batch_edit_decoration(decoration_type, floor=None, **kwargs)decoration_type,全关卡批量修改该类型装饰物decoration_type 和 floor,只修改该砖块上的该类型装饰物ADOFAILevel.batch_get_event_info(event_type, attr=None)event_type,返回所有该类型事件的完整信息列表event_type 和 attr,返回所有该类型事件的该属性值列表(如 [{attr: value}, ...])ADOFAILevel.batch_get_decoration_info(decoration_type, attr=None)decoration_type,返回所有该类型装饰物的完整信息列表decoration_type 和 attr,返回所有该类型装饰物的该属性值列表(如 [{attr: value}, ...])ADOFAILevel.add_event(floor, event_type, *args, **kwargs)floor:砖块编号(int)event_type:事件类型(如 "MoveTrack"、"Twirl" 等)*args:可选,若为 'default',则使用默认事件属性(需配置 defaults.json)**kwargs:自定义事件属性(如 duration=1.5, tag="mytag")ADOFAILevel.remove_event(floor=None, event_type=None, index=None)remove_event(1):删除1号砖块的所有事件remove_event(1, "MoveTrack"):删除1号砖块所有MoveTrack事件remove_event(1, "MoveTrack", 0):删除1号砖块第一个MoveTrack事件remove_event(event_type="Twirl"):删除全关卡所有Twirl事件remove_event():删除所有事件(清空actions)ADOFAILevel.get_event_count(floor=None, event_type=None)ADOFAILevel.get_decoration_count(floor=None, decoration_type=None)ADOFAILevel.add_decoration(floor, decoration_type, *args, **kwargs)floor:砖块编号(int)decoration_type:装饰物类型(如 "AddDecoration" 等)*args:可选,若为 'default',则使用默认装饰物属性(需配置 defaults.json)**kwargs:自定义装饰物属性(如 scale=2.0, tag="mytag")ADOFAILevel.remove_decoration(floor=None, decoration_type=None, index=None)remove_decoration(2):删除2号砖块的所有装饰物remove_decoration(2, "AddDecoration"):删除2号砖块所有AddDecoration装饰物remove_decoration(2, "AddDecoration", 0):删除2号砖块第一个AddDecoration装饰物remove_decoration(decoration_type="AddDecoration"):删除全关卡所有AddDecoration装饰物remove_decoration():删除所有装饰物(清空decorations)运行:
python -m adobase.tests.test_level
即可弹窗选择输入输出文件,体验关卡格式转换与信息查看。
MIT License
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.0 | 25 May 2025 | 0 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 19:44 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:7b5a7cc1619a352333dbc1978c8fb347896ef5502271508677dff2e44bedb1fe