设为首页收藏本站官方微博

汉化资料 WinterMute Engine 汉化教程

[复制链接]
查看: 5623|回复: 11
打印 上一主题 下一主题

[汉化资料] WinterMute Engine 汉化教程

跳转到指定楼层
楼主
发表于 2014-3-22 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

WinterMute Engine 汉化教程

本帖最后由 weiyun 于 2014-3-24 19:11 编辑
! Y  B8 S$ |0 I+ T  J, e. q3 b# Y3 |% B# V
Winter Mute这个引擎是专门用来开发点击式冒险游戏的,下面我来讲一下这个引擎的汉化方法。& k( T- R0 {# g% u9 R# T7 M
使用此引擎的游戏比较多,而且汉化非常容易,论坛之前有很多相关资料,但没有完整格式分析等
; N" {! u0 x6 d9 F& j7 w# t: e& H- W
5 X- F3 s6 \& V8 y" U以下是官方主页:http://dead-code.org/home/& Y5 Z& P1 j: O: H1 ?# t" m
注意本引擎是开源的,源码可以在这里查看:. R) c! n1 g) e+ c: [3 H
https://bitbucket.org/MnemonicWME/wme1/
8 D! e) I, o# Z
$ U0 |: K- |' ^) ]# S下面开始正文
( ]/ {/ V5 `3 }- m, g8 a, R3 a
3 a. x5 \% l+ b包格式' B/ H) ?3 J" g  G4 \, X, V# c3 J6 E" M
游戏的包格式为dcp格式,文件标志是0xDEC0ADDE也就是DEADCODE。5 K6 w, p* E# e, R

8 T  W9 j, F$ ?* k/ B! ?* z格式分析:
  1. struct{
    / J, y2 i& a( G
  2.         DWORD Magic1; // 0xDEC0ADDE  DEADCODE
    ; f1 l9 e6 S9 M: t
  3.         DWORD Magic2;  // 0x4B4E554A          "JUNK"2 I- `: @4 m9 v6 ?0 s5 @
  4.         DWORD PackageVersion; // 0x00000200 包版本
    ; r0 Q" S8 G% J
  5.         DWORD GameVersion; //游戏版本
    9 h  G* y! _2 K: R1 {6 T1 Q' ]
  6.         BYTE Priority; //优先级& |  @' ]9 s6 g! S/ y+ z
  7.         BYTE CD;
    : ?$ p: t! }, B+ b
  8.         bool MasterIndex;
    ) F" \, ~$ m, P# E
  9.         __time32_t CreationTime;, E5 @: C* e( B+ ?7 p) c( J. I4 |
  10.         char Desc[100]; //包描述# x! u+ g/ H' r9 f' }' _+ r
  11.         DWORD NumDirs;  //目录数
    1 O$ B6 Z6 _/ [; l! B2 D; r
  12. } PackageHeader;
    5 B* K0 m6 U4 \6 s0 Z: V' ~  n
  13. if (PackageHeader.PackageVersion >=0x200)
    ' @+ E. D, d  R
  14. DWORD DirOffset //目录偏移量: \/ E' Q/ o" O, `" _% Y
  15. struct Dir{
    8 e& @0 X4 I" f+ G! h
  16. BYTE NameLength;5 D0 E& ^8 {% m) i. r
  17.          char Name [NameLength];   //文件名% i. f" u$ f' `$ \) u& ~% }% C
  18.          BYTE CD;8 C) r, J* c% o; \! o
  19.          DWORD NumEntries;//文件数$ D& X& U$ Z/ i0 S$ ?5 C
  20.      struct Entry{. `1 Q& f* s7 K4 m. U
  21. BYTE NameLength;: |; x' R& l6 Q3 b7 F) ]
  22.        char Name [NameLength];
    5 [/ @! p. d* _6 _' d. J. ?
  23.        DWORD Offset; //文件位置
    4 p* e8 w" Y- t6 l$ Y5 q0 L) l
  24.        DWORD Length;//文件大小
    ' {/ r7 g1 ]6 @& {9 w- Z, _
  25.            DWORD CompLength;//压缩大小
    ! @' b2 o" H, K# V. f6 w# u3 ?
  26.        DWORD Flags;
    0 ^# `% F7 L) H# \1 W! v
  27. if (PackageHeader.PackageVersion >=0x200)" }. ]4 v/ e# D0 d3 F9 |
  28. {      DWORD TimeDate1
    , {; x7 T; f7 n7 Q$ Q' b4 l5 d
  29.        DWORD TimeDate2        // not used7 m1 p5 ?( p. |2 `. N
  30. }
    0 c5 i# `; g$ C4 X  }) _
  31. } Entries[NumEntries];4 h3 ~: ?" V; b* N. s' w* D
  32. }  Dirs[NumDirs];
复制代码
解包;
1 K8 _9 c1 P6 m/ z8 ]可选解包工具 GOBREAD,UNPAKKE,Quickbms 脚本,引擎自带的专用解包器。
! I0 V/ B, [* b0 U0 b2 K  g* \0 ?1 A8 t( _% y  c2 p$ ]3 t4 O4 l
打包:
  d7 f6 Y3 J3 }) z可以不打包,打包工具可选UNPAKKE和引擎自带的工具。" s! |1 w. ^# O" f* A/ T& N
+ R/ ^1 p/ U( g, K
文本:
$ ^  i. Z1 u$ P语言表格式如下:
2 X6 l$ |. ~4 G/ P* }SYSENG0001        Game settings
1 R* H" p  l+ `SYSENG0002        Display
  f; [% [" ?' v4 JSYSENG0003        Sound
1 Z7 a" a- E, P) H/ k7 m8 ASYSENG0004        Use hardware acceleration
7 N# L+ A! I, J: R) d: F7 pSYSENG0005        Display device:
, s. _0 `8 ?) d: L; TSYSENG0006        Colors:
! e$ c4 y) `7 a8 O5 p" QSYSENG0007        Run in window
. c0 {6 e5 H& P5 ?8 c语言表可以互相引用
% P. n# F8 Y/ j! u4 `" K. USYSENG0001        Game settings" y$ T6 k% N$ X; [% p. Z: Z
SYSENG0008        /SYSENG0001/
2 M6 L4 v6 _7 |9 K0 M甚至能支持阿拉伯语等从右向左的语言,只要文本里加上这个标记就行6 d  u9 c- I1 R( z$ h
@right-to-left
6 ~- L; Y6 r# p) H/ ~5 g3 L( ]语言表一般为String.xls,这是csv文件,而不是真正的xls格式,直接翻译即可,注意编码选择可选简体中文(GBK编码,非中文系统将无法显示),和utf8编码,注意如果文本编码有BOM将自动切换为UTF8格式。6 A$ k# `: U9 S, C- v

: t/ s) B  D( o/ [; ~3 v* N字库:
4 ?3 K" ~0 V4 q游戏支持两种字库,图片字库和ttf字库,注意只有ttf字库支持中文。3 x; O# z( Y& ~2 k, I
字库都需要描述文件,因为图片字库不支持中文,所以此处略过,有需要请看官网。( H4 B/ ]" W  l  J# `( V
http://docs.dead-code.org/wme/inside_ui_fonts_bitmap.html
" j' }0 y- c( h" w8 O要注意的是ttf字库是不能打包的。, l& x6 P7 {* u( R# d
TTF格式字库的描述文件:
/ Y& T; p5 ~. ]TTFONT
0 r/ T9 F  |" K5 f8 ]9 \5 r1 V{2 W/ j" F0 z6 H( Q
  SIZE = 12  ' i: u9 [7 I$ l; d7 o5 ?
  FACE = "Arial"
& X7 s* z2 \/ ^2 O2 ]$ L: Y  FILENAME = "fonts\arial.ttf"; s6 ~# F3 }1 [( n, v2 s9 K0 V

# R6 j1 B6 z5 l+ I2 Z6 x( {  BOLD = TRUE
9 ~9 T5 u4 q) J, q2 K: W. Q  ITALIC = FALSE. ^; I( d  e1 g' I
  UNDERLINE = FALSE0 g$ G6 I" A& f7 m
  STRIKE = FALSE. \2 _7 ~3 Q" ]5 c8 f
  d. v% ^! O0 V( M
  CHARSET = 1
% ~6 V! ~, j9 z$ A  U
) w3 q0 s- W1 A' T* p9 W  COLOR { 255, 0, 0 }$ W+ K; F+ b8 L/ m
  ALPHA = 255$ O; f" K0 L9 @9 H# F. d
  LAYER
, r8 m! s6 v7 |* j+ `7 z/ \  {
6 R" m) ]* Q+ C6 {. ?/ g) H1 i    OFFSET_X = 18 y* n! U# r4 D7 v7 C
    OFFSET_Y = 13 Q" u9 s7 b! t3 Z5 O1 R
    COLOR { 0, 0, 0 }
9 v# O0 J( e* n3 @2 o! I& _/ W    ALPHA = 255
: @, j7 @: Z9 X) Z* i& H# ]; a  }, O1 ]* W+ `5 K! F( h% p: A

7 m9 C7 K0 x3 @  LAYER. w: C9 C6 V+ T; F" v- M
  {0 N- d4 ?, N! ]9 R" k  F
    OFFSET_X = -1* a- K6 W, [+ `, Z- U3 l0 R* W
    OFFSET_Y = -1
' P" k8 n( a. }7 Z" X# ?$ \    COLOR { 0, 0, 0 }( S, M1 Z. X6 x) {5 d- F
    ALPHA = 2555 F2 v% d# R) T
  }# \; a- O3 V0 j/ X1 A0 h. z1 n

* [4 B! j; D, G) F- k  LAYER
0 u8 i9 h) y7 y7 `( H, x' m0 E  {. o+ `6 a4 k1 a" |7 r9 t% T2 }' l* ?
    OFFSET_X = -1; L' u3 z, B5 y4 D/ V, G3 ~
    OFFSET_Y = 1
. P7 w8 V+ B0 a5 s    COLOR { 0, 0, 0 }( _3 r7 N1 p; G! c9 i8 J8 |5 r% @
    ALPHA = 255
8 ?/ K2 `- r7 s' g& p  }
* @& w/ P" b( s3 T3 o
" b1 `& e0 [4 ~2 Z) \  n7 W  LAYER5 a6 l- E) J0 L8 N
  {
) l* W$ u5 D" \    OFFSET_X = 1
1 \8 t  W$ D) k  ~9 c& H  F9 q7 A/ Y    OFFSET_Y = -16 Z" I* j6 G0 m9 }9 i) G
    COLOR { 0, 0, 0 }* [- |' C% c0 A2 s" h
    ALPHA = 255
6 o! O" |5 y: M( E5 {  a  v$ D6 j' p  }
1 }% M* ~( z) ?9 G, C/ Z1 ]0 K+ ?% h7 s. E0 g
  LAYER% A- g2 U1 V% f. R
  {- u1 Y8 y8 A; m3 K+ r5 O2 O  V
    OFFSET_X = 0
/ e. E# T8 I. N+ ~2 U1 J    OFFSET_Y = 0& |9 z  B9 U! x7 q7 S, d
    COLOR { 255, 0, 0 }
5 S& X& p3 c5 w2 i# t' p! G    ALPHA = 2550 s7 A% y( s. a0 R  F9 s! y
  }
; W4 `2 s2 ~6 q. G7 x: s/ L}# v. ?5 ^' g% @, Y% F$ Y8 B. Y0 c  y
各参数说明
) O. T/ V& Y; B4 y# Q+ A$ C& j•        SIZE – 字库的大小,一般根据英文来选择。4 H" Q( R4 a  c$ k" Y
•        FACE – 字库的名称,注意是显示名称,比如系统自带宋体SimSun 。建议不要写中文,容易出现问题。7 _2 L. w/ F. R3 G2 m
•        FILENAME – 字体文件名称,就是ttf的文件名,如果要直接使用系统自带字库可以留空。
- M6 ^5 F9 L0 n4 o6 l•        BOLD – 为TRUE则以粗体显示。0 V7 p% h6 y7 u
•        ITALIC -为TRUE则以斜体显示。
: ~, O  |- r, t$ y& H/ N0 H/ v•        UNDERLINE -为TRUE则显示下划线。. m" x8 w" c% ^8 T
•        STRIKE -为TRUE则显示删除线。
5 o6 q; e( b3 `2 q! C7 R. K- r; a•        CHARSET – 字符集,简体中文要选6,繁体要选4.2 L& O- J3 c$ O% X
•        COLOR – 文字颜色(RGB)显示7 t  @5 Z' |+ y0 L8 n8 x# U% `
•        ALPHA – 透明度, (0 到 255),一般选255.2 w5 {9 u" W6 Z  F  a* k6 z, Y
注意这个定义文件下面的Layer就是按层绘制,可以实现模拟的描边效果,就是左移,右移,上移,下移1像素各绘制一次,颜色不同。如果不需要描边效果只需要1曾就够了。
0 y: C1 L  z/ h1 Z4 L
3 J  e0 b; P4 x& N7 i6 f以下是字符集,注意和windows的GDI中LOGFONT的值是一样的,游戏本身也是用GDI处理文本绘制的。
" n/ J0 |* x7 u* u8 }  Y详细内容请看MSDN
0 y) D) m. B% R: p5 o3 D( vhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd145037(v=vs.85).aspx3 H9 v0 ]% Z: Y7 E
WME 字符集编号        解释- }* c3 r' i& X" d! Y/ Z
0        ANSI 字符集(注意这是英文字符集)1 a( V3 R" V; m" K. J. `
1        默认字符集,根据系统语言变化。/ E( }) |. o% J
2        OEM 字符集,根据系统变化。& n: Y' W( W" u) U% ?1 x+ I7 V' B% \
3        波罗的海。, Z) }+ C4 m5 z1 ^
4        繁体中文。
: M: O9 ]' t, e7 g0 Z( j5        中欧及东欧语言。
3 j6 b5 ^8 l- V8 X5 {! W: l  f1 R6        简体中文。
+ H; f3 f) _5 V7 G3 T, M7        希腊语。
" j1 i" t4 S+ ?' M" r8        韩语(Wansung)。3 Y" [, E  L; t" E0 m* o
9        Mac字符。
+ m( u9 _9 ~, N& W/ N& i% _, L10        西里尔字符(俄文)。5 W  S4 f1 Z) R  ^1 y
11        日文 shift-jis 字符。! c  y& a1 o/ l( B
12        标准符号集。" `+ k' H  }- t# B# h) S/ |
13        土耳其语。5 T: }$ q3 v" e. x2 }7 y
14        越南语。
* d: J+ Q2 @6 p3 k- x# s/ |15        韩语(Johab) 。
* B% q; O  Z! m- l16        阿拉伯语。; K7 S0 O" h! q% _  C& j
17        希伯来语。5 [5 }: S! I: ?7 [6 @: d
18        泰语。
3 P/ n7 P8 G- t& T) h) X/ X: X  O8 W( w! n) P
图片:
% O! y' c# e4 s) t7 y本游戏图片格式为PNG,直接处理即可。
& j7 l# ^4 x5 Z1 m* z3 l) D8 |9 C9 l/ o) i( `
脚本:
7 E/ ~8 b! M! [$ g# J: C2 q; P一般不需修改,除非遇到文本保存在脚本中。. X) b4 _4 v& [+ O5 W* |9 y

  i# g. Z) q0 o9 W" E% ^脚本格式分析(不含虚拟机分析):
  1. DWORD magic; //DEADC0DE
    . V  E4 q1 j& Y. ]' O0 t
  2. DWORD version; //当前版本为0102/ h1 _, Y! U, h
  3. DWORD code_start ;//代码地址
    ! p, I2 c, Y' H
  4. DWORD function_table_start; //函数表地址5 r8 o3 R' }- O; Y- q' r# {9 A
  5. DWORD string_table_start; //字符串表地址,修改字符串表后需要更新后面的偏移, p8 R( `  {1 h6 b  W4 H; V3 _4 c- j
  6. DWORD event_table_start; //函数表地址
    ) v& ]+ q5 p/ J( }* l3 m( K
  7. if (verson >=0x0101)
    ! ?; \  P- r# N2 |* o
  8. DWORD dll_table_start;' e; c7 N1 n) O5 ?+ U
  9. if (verson >=0x0102)
    % c: c5 {0 m! W
  10. DWORD method_table_start;: Z6 G0 U5 J+ n, w! |0 Q4 w; n4 w2 s
  11. string source_name; //0结尾字符串
    " b+ i5 V8 ?, s4 l& v, K
  12. byte[]  code; //代码的字节码- |) R9 v" E: i9 n) O# p% M8 U

  13. ) _- |, y* r3 i0 c3 H# O
  14. struct {% H  u/ B/ K8 t' Q  d
  15. int num;& ~8 O( J/ N9 ]1 T+ q3 D, C$ t3 E
  16. struct {9 ]5 F$ I' F2 i& v5 R* T6 _! O3 ]+ E9 h
  17. int pos;9 l& l3 o+ S% I) o0 _# N
  18. string name;* m6 x6 ]9 K/ A9 H0 B# V
  19. } function[num];6 o/ Y& X5 H1 X( y# T) ?% D
  20. }  function_table ;
    - C3 K2 g- X$ R+ p- x  S9 H( e
  21. struct {
    * T! }' K# X% e; R' }
  22. int num;# C8 g5 C6 Q/ f  o  M
  23. struct {6 c7 j; q& I# ?, y
  24. int id;
    1 W; R9 A* U4 ~8 m" N
  25. string name;7 G+ K/ x' q% Y- ]" B# b# N( Z
  26. } string [num];% o8 s& a4 g$ ?1 p  _# H$ x: B
  27. }   string_table;: O/ ~# k/ I. U
  28. struct {9 F% W2 L" }! U' K% y, _0 y3 `
  29. int num;
    6 c" [1 S# Y; h  H6 F  I
  30. struct {
    $ ?3 E8 K! S+ |9 I1 a* ~) S9 u
  31. int id;, F$ X' D# b8 b/ ^% y( ^! l0 g
  32. string name;
    $ j  W+ M2 K4 H% P
  33. } event [num];
    3 p% Q4 p. [* N2 R

  34. & W% N; P; ?5 \9 m( ~
  35. }   event_table;5 v! E$ m4 N& Q4 n/ W0 l
  36. if (version >=0x0101)* M7 @! _9 F/ }
  37. struct {# y5 t0 W; j  W+ J- d
  38. int num;
    8 _) \% p# v4 H9 A6 Z& h
  39. struct {) ?) O4 t& Q: E  ]9 C: I/ {# `# L. \
  40. string dll;# v5 w# V; [6 x2 E" s
  41. string name;
    - P5 Q9 r# u/ r2 O  I
  42. int call;. x) Z6 R( s% m& k  I
  43. int returns;
    3 b/ b3 V* B& t  h% \- J+ Q
  44. int num_params;0 c6 x% x6 k+ e, ~6 m& C% k
  45. int params[num_params];
    ( W  z8 ]1 |0 _/ F) g* F
  46. } dll [num]; 7 _, V( a! Y# C2 Z* F% F- `1 m& o5 Y

  47. % L( j8 b1 s2 O+ Q4 _1 m, C, @
  48. } dll_table;( L7 t9 a4 }* e1 l. F0 S
  49. if (version >=0x0102)
    - R/ P# \# x8 _- p6 `
  50. struct {
    1 _8 k# _* E* W
  51. int num;
    + ]# n3 v+ C2 F: }
  52. struct {
    1 L' z% r( N) Q/ J" V2 u. Y! ^
  53. int pos;8 n( V9 {! u( s+ ]
  54. string name;
    5 T+ H( E$ H) G1 C' l
  55. } method [num]; , T0 Z' q4 H" \" E; V4 |& _& E' U
  56. }  method table;" w' v( g1 t+ K% H/ H

  57. ) z' u; d' q) F0 V0 u! q" S
复制代码
音频:
7 F4 t6 p) g) f) Y/ G0 a游戏音频格式是Ogg格式,Vorbis编码。  U0 G! C" [* `
6 L1 _% s2 d+ X+ W* C% p
视频:0 w( s& M1 {/ J# `( x
游戏视频是ogv格式,theora编码。9 D  t0 |! _) U8 Q

( F" [5 L& Z# M: a汉化流程:
0 }$ b2 o" l. x9 g1.        如果有dcp包,先解包
6 i3 j  d1 J9 i8 i% c2.        翻译字符串表
5 A% P# `! D  y7 j# I$ i, U$ Y3.        找到中文ttf字库放入游戏目录,并修改定义文件为ttf的定义,参数根据需要调整
% X) [$ N8 t: v. o- r! _4.        修改图片
" v* |/ n# \% s1 {+ M5.        改过的文件放到目录,或者打包
% ~( L; u  w; S, m6.        测试0 y- n, y& _* D# m6 F5 T

7 U8 P# d, D' r7 _3 b- E& A注意:) l2 v, w7 w  v) ^
换行问题,经测试ansi格式下换行有bug,中文超出行数会出现乱码,utf-8也会出现一些问题,如unicode码低位为00时会无法显示,可以采用自定义编码方法解决,需修改文本编码和ttf中的映射表,或修改引擎解决,较为麻烦。3 z* D, H9 U+ ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2014-3-22 22:20 | 只看该作者
感谢分享!沙发支持!
回复 支持 反对

使用道具 举报

板凳
发表于 2014-3-22 23:13 | 只看该作者
本帖最后由 davidgbl 于 2014-3-22 23:37 编辑
7 ]4 q# ?. V, T% O
/ X7 i5 V! A" q, s" U太好了 好好学习学习。avg用这个引擎开发的游戏很多。  k# y9 A7 |9 @$ m% I% ]9 A
不过遇到过一些问题,主要是一些动词在汉化文本中没有。比用use XXX with XXX $ T3 u5 T( r. d9 l' y; G6 u6 H
其中的XXX在翻译文本中是有的,但那些动词不知道藏在什么地方了。始终没有找到。5 z/ K8 g2 U+ c6 Z5 m+ w9 \
比如之前汉化的:409号黑夜童话,有这个问题; e1 j2 b0 E. r% q- C: i
(另外328号埃德娜&哈维:逃离疯人院也有类似问题,但我不记得是不是wme的游戏了,我几个应该是,老啦,呵呵呵)。8 {4 `: o2 C1 H/ `7 A5 g' |; [
还有一点可能需要注意:2 }4 ?- k6 f; i/ B. W) o
就是使用ttf的字库要用ttf字库的内部名称,尤其是中文的ttf字库。" F. v- k: }+ B/ d
不能简单用黑体.ttf啥的,最好用字库查看软件看一下字库的内部名称和字库名是否一致。
回复 支持 反对

使用道具 举报

地板
发表于 2014-3-22 23:23 | 只看该作者
牛贴必顶,强人必赞
回复 支持 反对

使用道具 举报

5#
发表于 2014-3-22 23:27 | 只看该作者
本帖最后由 setsail615 于 2014-3-22 23:35 编辑 : K8 |: d/ L8 N) b
) x9 v. X6 O; e% Y1 `+ V
不明觉厉啊~膜拜楼主~~9 |! m* h* ^1 ?- Z7 R4 F. `
PS 友谊哥,328好像不是wme的,我也不太清楚……
回复 支持 反对

使用道具 举报

6#
发表于 2014-3-22 23:31 | 只看该作者
嗯,很详细,值得学习
回复 支持 反对

使用道具 举报

7#
发表于 2014-3-23 09:54 | 只看该作者
支持楼主的处女贴
回复 支持 反对

使用道具 举报

8#
发表于 2014-3-23 18:12 | 只看该作者
不明觉厉。。。:D
回复 支持 反对

使用道具 举报

9#
发表于 2014-3-24 23:47 | 只看该作者
感谢楼主秉承着热爱汉化之心所做的技术分享~
回复 支持 反对

使用道具 举报

10#
发表于 2014-3-24 23:58 | 只看该作者
突然感受到了大家对汉化技术的热情,顶weiyun。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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