3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 1903|回复: 14
打印 上一主题 下一主题

[讨论] pac解包方法

[复制链接]

526

主题

1万

帖子

2万

积分

骨灰玩家

Rank: 10Rank: 10Rank: 10

贡献度
1498
金元
176540
积分
23686
精华
4
注册时间
2020-7-6
跳转到指定楼层
主题
发表于 2025-8-24 09:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
安装python,新建extractpac.py,输入以下内容保存,然后把pac直接拖到py上

import struct, glob, os, sys

def read_null_terminated_string (f, start_offset):
    current_loc = f.tell()
    f.seek(start_offset)
    null_term_string = f.read(1)
    while null_term_string[-1] != 0:
        null_term_string += f.read(1)
    f.seek(current_loc)
    return(null_term_string[:-1].decode())

def process_pac (pac_file):
    print("Processing {}...".format(pac_file))
    with open(pac_file, 'rb') as f:
        magic = f.read(4)
        if magic == b'FPAC':
            count, header_size, unk = struct.unpack("<3I", f.read(12))
            files = []
            for i in range(count):
                entry_dat = struct.unpack("<4Q", f.read(32))
                files.append({'name': read_null_terminated_string (f, entry_dat[1]),
                    'location': entry_dat[3],
                    'size': entry_dat[2],
                    'hash': entry_dat[0]})
            for i in range(count):
                f.seek(files[i]['location'])
                f_data = f.read(files[i]['size'])
                filedir = os.path.dirname(files[i]['name'])
                if not filedir == '' and not os.path.exists(filedir):
                    os.makedirs(filedir)
                with open(files[i]['name'], 'wb') as f2:
                    f2.write(f_data)
    return

if __name__ == "__main__":
    # Set current directory
    if getattr(sys, 'frozen', False):
        os.chdir(os.path.dirname(sys.executable))
    else:
        os.chdir(os.path.abspath(os.path.dirname(__file__)))

    # If argument given, attempt to extract from file in argument
    if len(sys.argv) > 1:
        import argparse
        parser = argparse.ArgumentParser()
        parser.add_argument('pac_filename', help="Name of pac file to extract from (required).")
        args = parser.parse_args()
        if os.path.exists(args.pac_filename) and args.pac_filename[-4:].lower() == '.pac':
            process_pac(args.pac_filename)
    else:
        pac_files = glob.glob('*.pac')
        for i in range(len(pac_files)):
            process_pac(pac_files[i])

评分

3

查看全部评分

回复

使用道具 举报

3

主题

309

帖子

1005

积分

游戏狂人

Rank: 6Rank: 6

贡献度
25
金元
9054
积分
1005
精华
0
注册时间
2012-10-17
舒服的沙发
发表于 2025-8-24 11:28 | 只看该作者
感谢,礼貌问下,解包出来的tbl文件如何处理
回复 支持 反对

使用道具 举报

6

主题

447

帖子

831

积分

超级玩家

Rank: 5Rank: 5

贡献度
25
金元
7309
积分
831
精华
0
注册时间
2014-6-16
硬硬的板凳
发表于 2025-8-24 12:28 | 只看该作者
谢谢大佬分享,还有怎么打包回去。
回复 支持 反对

使用道具 举报

526

主题

1万

帖子

2万

积分

骨灰玩家

Rank: 10Rank: 10Rank: 10

贡献度
1498
金元
176540
积分
23686
精华
4
注册时间
2020-7-6
冰凉的地板
 楼主| 发表于 2025-8-24 13:15 | 只看该作者
不用打包,能读零散文件,把原pac删了就行
回复 支持 反对

使用道具 举报

6

主题

447

帖子

831

积分

超级玩家

Rank: 5Rank: 5

贡献度
25
金元
7309
积分
831
精华
0
注册时间
2014-6-16
5#
发表于 2025-8-24 15:02 | 只看该作者
Geminize 发表于 2025-8-24 13:15
不用打包,能读零散文件,把原pac删了就行

好的谢谢大大。
回复 支持 反对

使用道具 举报

0

主题

372

帖子

567

积分

高级玩家

Rank: 4

贡献度
0
金元
5671
积分
567
精华
0
注册时间
2015-10-17
6#
发表于 2025-8-24 17:15 | 只看该作者
谢谢大佬  每次的轨迹修改指导
回复 支持 反对

使用道具 举报

3498

主题

1万

帖子

3万

积分

游戏天王

Rank: 11Rank: 11Rank: 11Rank: 11

贡献度
2661
金元
199765
积分
30631
精华
1
注册时间
2006-8-24
7#
发表于 2025-8-24 19:06 | 只看该作者
存档呢···
回复 支持 反对

使用道具 举报

526

主题

1万

帖子

2万

积分

骨灰玩家

Rank: 10Rank: 10Rank: 10

贡献度
1498
金元
176540
积分
23686
精华
4
注册时间
2020-7-6
8#
 楼主| 发表于 2025-8-24 19:24 | 只看该作者
回复 支持 反对

使用道具 举报

4

主题

479

帖子

807

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
8068
积分
807
精华
0
注册时间
2014-12-28
9#
发表于 2025-8-28 00:07 | 只看该作者
Geminize 发表于 2025-8-24 13:15
不用打包,能读零散文件,把原pac删了就行

大佬,把tbl和pac放一个文件夹;tbl放在文件夹再把这个文件夹和pac放一起?我两种都试了,游戏打不开QAQ。
回复 支持 反对

使用道具 举报

6

主题

447

帖子

831

积分

超级玩家

Rank: 5Rank: 5

贡献度
25
金元
7309
积分
831
精华
0
注册时间
2014-6-16
10#
发表于 2025-8-29 10:03 | 只看该作者
本帖最后由 1170759450 于 2025-8-29 10:04 编辑
Mr.冷水先森 发表于 2025-8-28 00:07
大佬,把tbl和pac放一个文件夹;tbl放在文件夹再把这个文件夹和pac放一起?我两种都试了,游戏打不开QAQ ...

把解包后的文件夹放到exe文件同级的目录里不是pac文件夹里,还要把解包前的文件删除了。
回复 支持 反对

使用道具 举报

4

主题

479

帖子

807

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
8068
积分
807
精华
0
注册时间
2014-12-28
11#
发表于 2025-8-29 17:47 | 只看该作者
1170759450 发表于 2025-8-29 10:03
把解包后的文件夹放到exe文件同级的目录里不是pac文件夹里,还要把解包前的文件删除了。 ...

谢谢大佬!!!爱您!!感恩!
回复 支持 反对

使用道具 举报

0

主题

121

帖子

193

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1930
积分
193
精华
0
注册时间
2008-9-5
12#
发表于 2025-9-20 23:02 | 只看该作者
感谢教程,看来只能自己动手了
回复 支持 反对

使用道具 举报

16

主题

464

帖子

646

积分

超级玩家

Rank: 5Rank: 5

贡献度
6
金元
6219
积分
646
精华
0
注册时间
2015-3-24
13#
发表于 2025-9-22 17:03 | 只看该作者
可以把bgm的资源解出来嘛?想要新版默认的音频资源
回复 支持 反对

使用道具 举报

424

主题

5751

帖子

1万

积分

骨灰玩家

Rank: 10Rank: 10Rank: 10

贡献度
2107
金元
97700
积分
18198
精华
0
注册时间
2011-11-3
14#
发表于 2025-9-26 09:57 | 只看该作者
谢谢!真是太棒了!
回复 支持 反对

使用道具 举报

0

主题

42

帖子

114

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1136
积分
114
精华
0
注册时间
2015-10-12
15#
发表于 2025-10-10 21:12 | 只看该作者
大佬问一下 怎么我的PAC不能放到解包软件上啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-5-11 11:28 , Processed in 0.048171 second(s), 22 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表