全站通知:
模块:ExcludeChecker/doc
刷
历
编
跳到导航
跳到搜索
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
星露谷物语 Objects.json 处理脚本 - 简化版
从Objects.json中提取具有排除属性的物品ID,按类型分组导出为简化的Lua table格式
"""
import json
import os
def load_objects_json(file_path):
"""加载Objects.json文件"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
print(f"错误:找不到文件 {file_path}")
return None
except json.JSONDecodeError as e:
print(f"错误:JSON解析失败 - {e}")
return None
def extract_excluded_ids(objects_data):
"""
提取具有排除属性的物品ID
返回按排除类型分组的字典
"""
excluded_groups = {
'ExcludeFromFishingCollection': [],
'ExcludeFromShippingCollection': [],
'ExcludeFromRandomSale': []
}
for object_id, object_data in objects_data.items():
# 检查每个排除属性
for exclude_type in excluded_groups.keys():
if object_data.get(exclude_type, False):
excluded_groups[exclude_type].append(object_id)
return excluded_groups
def format_simple_lua_table(excluded_groups):
"""将ID分组数据格式化为简化的Lua table字符串"""
lua_lines = ['-- 星露谷物语排除物品ID表 - 简化版', '-- 生成时间: ' +
__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '']
lua_lines.append('local excluded_object_ids = {')
for group_name, ids in excluded_groups.items():
if ids: # 只处理非空的分组
lua_lines.append(f' {group_name} = {{')
# 将ID分组,每行最多10个
for i in range(0, len(ids), 10):
chunk = ids[i:i+10]
id_list = ', '.join(f'"{id_}"' for id_ in chunk)
lua_lines.append(f' {id_list},')
lua_lines.append(' },')
lua_lines.append('')
lua_lines.append('}')
lua_lines.append('')
lua_lines.append('return excluded_object_ids')
return '\n'.join(lua_lines)
def save_lua_file(lua_content, output_path):
"""保存Lua文件"""
try:
with open(output_path, 'w', encoding='utf-8') as f:
f.write(lua_content)
print(f"成功导出Lua文件: {output_path}")
return True
except Exception as e:
print(f"错误:保存文件失败 - {e}")
return False
def print_statistics(excluded_groups):
"""打印统计信息"""
print("\n=== 统计信息 ===")
total_items = 0
for group_name, ids in excluded_groups.items():
count = len(ids)
total_items += count
print(f"{group_name}: {count} 个物品")
if ids:
print(" ID列表:")
# 显示所有ID
for i in range(0, len(ids), 10):
chunk = ids[i:i+10]
print(f" {', '.join(chunk)}")
print()
print(f"总计: {total_items} 个物品")
def main():
"""主函数"""
# 文件路径
objects_json_path = "Objects.json"
output_lua_path = "excluded_object_ids.lua"
# 检查文件是否存在
if not os.path.exists(objects_json_path):
print(f"错误:找不到 {objects_json_path} 文件")
print("请确保脚本在包含Objects.json的目录中运行")
return
print("正在加载Objects.json...")
objects_data = load_objects_json(objects_json_path)
if objects_data is None:
return
print(f"成功加载 {len(objects_data)} 个物品数据")
print("正在提取排除物品ID...")
excluded_groups = extract_excluded_ids(objects_data)
# 打印统计信息
print_statistics(excluded_groups)
print("正在生成简化Lua代码...")
lua_content = format_simple_lua_table(excluded_groups)
# 保存文件
if save_lua_file(lua_content, output_lua_path):
print(f"\n处理完成!输出文件: {output_lua_path}")
else:
print("\n处理失败!")
if __name__ == "__main__":
main()