TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 6499|回复: 15
打印 上一主题 下一主题

[完整特效] [youkaze]019_Vividred·Operation_OP [复制链接]

Moderator

youkaze

Rank: 5Rank: 5

跳转到指定楼层
楼主
发表于 2013-3-8 23:19:27 |只看该作者 |倒序浏览
本帖最后由 四月一日 君寻 于 2013-3-8 23:23 编辑
  1. from tcaxPy import *
  2. from gdiFont import *

  3. def tcaxPy_Init():
  4.     global _FD
  5.     global _Fs
  6.     global _TextLength
  7.     global _ResolutionX
  8.     global GdiFont   #GDIfont
  9.     global Font
  10.    
  11.     _FD = 1000 / GetVal(val_FXFPS)
  12.     _Fs = GetVal(val_FontSize)
  13.     _TextLength   = GetVal(val_TextLength)
  14.     _ResolutionX  = GetVal(val_ResolutionX)
  15.     _FontFileName = GetVal(val_FontFileName)
  16.     _FaceID       = GetVal(val_FaceID)
  17.     GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0, False)    #GDIfont
  18.     Font = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)   
  19.    

  20. def tcaxPy_Fin():
  21.     gfFinFont(GdiFont)    #GDIfont
  22.     FinFont(Font)
  23.    
  24. def tcaxPy_User():
  25.     # 创建ASS文件
  26.     file_name  = GetVal(val_OutFile) + '.ass'
  27.     ass_header = GetVal(val_AssHeader)
  28.     ASS_FILE   = CreateAssFile(file_name, ass_header)
  29.     # 创建TCAS文件
  30.     file_name  = GetVal(val_OutFile) + '.tcas'
  31.     fx_width   = GetVal(val_ResolutionX)
  32.     fx_height  = GetVal(val_ResolutionY)
  33.     fx_fps     = GetVal(val_FXFPS)
  34.     TCAS_FILE  = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  35.     # 基本数据, 如果需要查看含义, 请取消下面两行代码的注释
  36.     #GetHelp()
  37.     #Pause()
  38.     fontSize   = GetVal(val_FontSize)
  39.     marginX    = GetVal(val_OffsetX)
  40.     marginY    = GetVal(val_OffsetY)
  41.     spacing    = GetVal(val_Spacing)
  42.     lineNum    = GetVal(val_nLines)
  43.     textNum    = GetVal(val_nTexts)
  44.     start      = GetVal(val_BegTime)
  45.     end        = GetVal(val_EndTime)
  46.     kar        = GetVal(val_KarTime)
  47.     elapKar    = GetVal(val_KarTimeDiff)
  48.     text       = GetVal(val_Text)
  49.     textLength = GetVal(val_TextLength)
  50.     advance    = GetVal(val_TextAdvance)
  51.     advDiff    = GetVal(val_TextAdvanceDiff)
  52.     # 主循环
  53.     for i in range(lineNum):#lineNum
  54.         #initPosX = marginX                                         # an 7, 4, 1
  55.         initPosX = (fx_width - textLength[i]) / 2 + marginX        # an 8, 5, 2
  56.         #initPosX = fx_width - textLength[i] - marginX              # an 9, 6, 3
  57.         initPosY = marginY                                          # an 7, 8, 9
  58.         #initPosY = fx_height / 2 - marginY                         # an 4, 5, 6
  59.         #initPosY = fx_height - fontSize - marginY                  # an 1, 2, 3
  60.         for j in range(textNum[i]):
  61.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  62.             posY = initPosY + fontSize / 2
  63.             # Fake1 一直有效
  64.             if text[i][j] == ' ': #text[i][j] == '' text[i][j] == ' '  
  65.                 continue
  66.             ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake1(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j])
  67.             if len(ASS_BUF) > 0:
  68.                 WriteAssFile(ASS_FILE, ASS_BUF)
  69.             if len(TCAS_BUF) > 0:
  70.                 WriteTcasFile(TCAS_FILE, TCAS_BUF)
  71.             Progress(i, j)      # 显示进度
  72.     FinAssFile(ASS_FILE)
  73.     FinTcasFile(TCAS_FILE)
  74.    

  75. def tcaxPy_Main_Fake1(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt):

  76.     ASS_BUF  = []        # 保存ASS特效
  77.     TCAS_BUF = []        # 保存TCAS特效

  78.     ##### 主要特效编写操作 #####

  79.     dx = _x - int(_a / 2 + 0.5)         # 一个固定操作, 将an5的坐标转换为an7
  80.     dy = _y - int(_Fs / 2 + 0.5)        # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  81.    
  82.     for i in range(0,_a):
  83.         ass_main(ASS_BUF, SubL(_BT+_SK+int(i*_KT/_a),_BT+_SK+int(i*_KT/_a)+30,1), pos(dx+i,_y-8)+fscy(400)+fscx(400)+fad(0,200)+color1('1815FD')+bord(0)+blur(1.5), PixPt())
  84.         ass_main(ASS_BUF, SubL(_BT+_SK+int(i*_KT/_a),_BT+_SK+int(i*_KT/_a)+30,1), pos(dx+i,_y-4)+fscy(400)+fscx(400)+fad(0,200)+color1('05F6FA')+bord(0)+blur(1.5), PixPt())
  85.         ass_main(ASS_BUF, SubL(_BT+_SK+int(i*_KT/_a),_BT+_SK+int(i*_KT/_a)+30,1), pos(dx+i,_y)+fscy(400)+fscx(400)+fad(0,200)+color1('33CF11')+bord(0)+blur(1.5), PixPt())
  86.         ass_main(ASS_BUF, SubL(_BT+_SK+int(i*_KT/_a),_BT+_SK+int(i*_KT/_a)+30,1), pos(dx+i,_y+4)+fscy(400)+fscx(400)+fad(0,200)+color1('D1D415')+bord(0)+blur(1.5), PixPt())
  87.         ass_main(ASS_BUF, SubL(_BT+_SK+int(i*_KT/_a),_BT+_SK+int(i*_KT/_a)+30,1), pos(dx+i,_y+8)+fscy(400)+fscx(400)+fad(0,200)+color1('DD4433')+bord(0)+blur(1.5), PixPt())


  88.     for i in range(0,14):
  89.         if _i == i:
  90.             global stat
  91.             stat = _ET
  92.             if _n == _j + 1:
  93.                 global POS
  94.                 POS = [_x,_y]
  95.         if _i == i+1:
  96.             global edat
  97.             edat = _BT
  98.             if _j == 0:
  99.                 global POS2
  100.                 POS2 = [_x,_y]
  101.                 num = _TextLength[_i]
  102.                 EKT = edat-stat
  103.                 points1 = Bezier1(num, POS[0]+_a/2, _y-8, POS2[0]-_a/2, _y-8)
  104.                 points2 = Bezier1(num, POS[0]+_a/2, _y-4, POS2[0]-_a/2, _y-4)
  105.                 points3 = Bezier1(num, POS[0]+_a/2, _y, POS2[0]-_a/2, _y)
  106.                 points4 = Bezier1(num, POS[0]+_a/2, _y+4, POS2[0]-_a/2, _y+4)
  107.                 points5 = Bezier1(num, POS[0]+_a/2, _y+8, POS2[0]-_a/2, _y+8)
  108.                 for i in range(num):
  109.                     POS1 = pos(points1[i][0], points1[i][1])
  110.                     POS2 = pos(points2[i][0], points2[i][1])
  111.                     POS3 = pos(points3[i][0], points3[i][1])
  112.                     POS4 = pos(points4[i][0], points4[i][1])
  113.                     POS5 = pos(points5[i][0], points5[i][1])
  114.                     ass_main(ASS_BUF, SubL(stat+int(i*EKT/num),stat+int(i*EKT/num)+30,1), POS1+fscy(400)+fscx(400)+fad(0,200)+color1('1815FD')+bord(0)+blur(1.5), PixPt())
  115.                     ass_main(ASS_BUF, SubL(stat+int(i*EKT/num),stat+int(i*EKT/num)+30,1), POS2+fscy(400)+fscx(400)+fad(0,200)+color1('05F6FA')+bord(0)+blur(1.5), PixPt())
  116.                     ass_main(ASS_BUF, SubL(stat+int(i*EKT/num),stat+int(i*EKT/num)+30,1), POS3+fscy(400)+fscx(400)+fad(0,200)+color1('33CF11')+bord(0)+blur(1.5), PixPt())
  117.                     ass_main(ASS_BUF, SubL(stat+int(i*EKT/num),stat+int(i*EKT/num)+30,1), POS4+fscy(400)+fscx(400)+fad(0,200)+color1('D1D415')+bord(0)+blur(1.5), PixPt())
  118.                     ass_main(ASS_BUF, SubL(stat+int(i*EKT/num),stat+int(i*EKT/num)+30,1), POS5+fscy(400)+fscx(400)+fad(0,200)+color1('DD4433')+bord(0)+blur(1.5), PixPt())  
  119.                     
  120.     if _i == 0 and _j == 0:
  121.         global POSR
  122.         POSR = [_x,_y]
  123.         global statr
  124.         statr = _BT-50
  125.         global edatr
  126.         edatr = _BT
  127.         num = _TextLength[_i]+300
  128.         EKTR = edatr-statr
  129.         pr1 = Bezier1(num, _x-_ResolutionX+_TextLength[_i]-60, _y-8, POSR[0]-_a/2, _y-8)
  130.         pr2 = Bezier1(num, _x-_ResolutionX+_TextLength[_i]-60, _y-4, POSR[0]-_a/2, _y-4)
  131.         pr3 = Bezier1(num, _x-_ResolutionX+_TextLength[_i]-60, _y, POSR[0]-_a/2, _y)
  132.         pr4 = Bezier1(num, _x-_ResolutionX+_TextLength[_i]-60, _y+4, POSR[0]-_a/2, _y+4)
  133.         pr5 = Bezier1(num, _x-_ResolutionX+_TextLength[_i]-60, _y+8, POSR[0]-_a/2, _y+8)
  134.         for i in range(num):
  135.             POSR1 = pos(pr1[i][0], pr1[i][1])
  136.             POSR2 = pos(pr2[i][0], pr2[i][1])
  137.             POSR3 = pos(pr3[i][0], pr3[i][1])
  138.             POSR4 = pos(pr4[i][0], pr4[i][1])
  139.             POSR5 = pos(pr5[i][0], pr5[i][1])
  140.             ass_main(ASS_BUF, SubL(statr+int(i*EKTR/num),statr+int(i*EKTR/num)+30,1), POSR1+fscy(400)+fscx(400)+fad(0,200)+color1('1815FD')+bord(0)+blur(1.5), PixPt())
  141.             ass_main(ASS_BUF, SubL(statr+int(i*EKTR/num),statr+int(i*EKTR/num)+30,1), POSR2+fscy(400)+fscx(400)+fad(0,200)+color1('05F6FA')+bord(0)+blur(1.5), PixPt())
  142.             ass_main(ASS_BUF, SubL(statr+int(i*EKTR/num),statr+int(i*EKTR/num)+30,1), POSR3+fscy(400)+fscx(400)+fad(0,200)+color1('33CF11')+bord(0)+blur(1.5), PixPt())
  143.             ass_main(ASS_BUF, SubL(statr+int(i*EKTR/num),statr+int(i*EKTR/num)+30,1), POSR4+fscy(400)+fscx(400)+fad(0,200)+color1('D1D415')+bord(0)+blur(1.5), PixPt())
  144.             ass_main(ASS_BUF, SubL(statr+int(i*EKTR/num),statr+int(i*EKTR/num)+30,1), POSR5+fscy(400)+fscx(400)+fad(0,200)+color1('DD4433')+bord(0)+blur(1.5), PixPt())  
  145.             
  146.     if _i == 14 and _n == _j + 1:
  147.         global POSC
  148.         POSC = [_x,_y]
  149.         global statc
  150.         statc = _ET
  151.         global edatc
  152.         edatc = _ET+50
  153.         num = _TextLength[_i]+300
  154.         EKTC = edatc-statc
  155.         pc1 = Bezier1(num, POSC[0]+_a/2, _y-8, _x+_ResolutionX+_TextLength[_i]+60, _y-8)
  156.         pc2 = Bezier1(num, POSC[0]+_a/2, _y-4, _x+_ResolutionX+_TextLength[_i]+60, _y-4)
  157.         pc3 = Bezier1(num, POSC[0]+_a/2, _y, _x+_ResolutionX+_TextLength[_i]+60, _y)
  158.         pc4 = Bezier1(num, POSC[0]+_a/2, _y+4, _x+_ResolutionX+_TextLength[_i]+60, _y+4)
  159.         pc5 = Bezier1(num, POSC[0]+_a/2, _y+8, _x+_ResolutionX+_TextLength[_i]+60, _y+8)
  160.         for i in range(num):
  161.             POSC1 = pos(pc1[i][0], pc1[i][1])
  162.             POSC2 = pos(pc2[i][0], pc2[i][1])
  163.             POSC3 = pos(pc3[i][0], pc3[i][1])
  164.             POSC4 = pos(pc4[i][0], pc4[i][1])
  165.             POSC5 = pos(pc5[i][0], pc5[i][1])
  166.             ass_main(ASS_BUF, SubL(statc+int(i*EKTC/num),statc+int(i*EKTC/num)+30,1), POSC1+fscy(400)+fscx(400)+fad(0,200)+color1('1815FD')+bord(0)+blur(1.5), PixPt())
  167.             ass_main(ASS_BUF, SubL(statc+int(i*EKTC/num),statc+int(i*EKTC/num)+30,1), POSC2+fscy(400)+fscx(400)+fad(0,200)+color1('05F6FA')+bord(0)+blur(1.5), PixPt())
  168.             ass_main(ASS_BUF, SubL(statc+int(i*EKTC/num),statc+int(i*EKTC/num)+30,1), POSC3+fscy(400)+fscx(400)+fad(0,200)+color1('33CF11')+bord(0)+blur(1.5), PixPt())
  169.             ass_main(ASS_BUF, SubL(statc+int(i*EKTC/num),statc+int(i*EKTC/num)+30,1), POSC4+fscy(400)+fscx(400)+fad(0,200)+color1('D1D415')+bord(0)+blur(1.5), PixPt())
  170.             ass_main(ASS_BUF, SubL(statc+int(i*EKTC/num),statc+int(i*EKTC/num)+30,1), POSC5+fscy(400)+fscx(400)+fad(0,200)+color1('DD4433')+bord(0)+blur(1.5), PixPt())  
  171.             
  172.                  

  173.     for i in range(50):
  174.             ass_main(ASS_BUF, SubL(_BT-8+_j*5,_BT+(_j+1)*5,1), mov(_x+30+i,_y,_x,_y)+fad(0,70)+color1('71412B')+blur(1)+bord(1.5)+alpha(220+i), _txt)
  175.    
  176.     ass_main(ASS_BUF, SubL(_BT+(_j+1)*5,_BT+_SK,1), pos(_x,_y)+color1('71412B')+alpha(155)+bord(1.5), _txt)
  177.     ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,1), pos(_x,_y)+color1('71412B')+alpha(155)+bord(1.5), _txt)

  178.     ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,1), pos(_x,_y)+clip(dx-10,dy-20,dx-10,dy+_Fs+20)+t(clip(dx-10,dy-20,dx+10+_a,dy+_Fs+20))+alpha1(255)+color3('000000')+bord(2)+blur(0.5), _txt)
  179.     ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,1), pos(_x,_y)+clip(dx-10,dy-20,dx-10,dy+_Fs+20)+t(clip(dx-10,dy-20,dx+10+_a,dy+_Fs+20))+color1('FFFFFF')+bord(0), _txt)

  180.     for i in range(10):
  181.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,1), pos(_x,_y)+clip(dx-10-i,dy-20,dx-10+i,dy+_Fs+20)+alpha(0+(i*30))+t(clip(dx+10+_a-i,dy-20,dx+10+_a+i,dy+_Fs+20))+alpha1(255)+bord(3)+blur(1), _txt)
  182.         ass_main(ASS_BUF, SubL(_BT+_SK,_BT+_SK+_KT,3), pos(_x,_y)+clip(dx-10-i,dy-20,dx-10+i,dy+_Fs+20)+alpha(0+(i*30))+t(clip(dx+10+_a-i,dy-20,dx+10+_a+i,dy+_Fs+20))+color1('000000')+bord(0)+blur(1), _txt)
  183.    
  184.     ass_main(ASS_BUF, SubL(_BT+_SK+_KT,_ET-8+_j*5,3), pos(_x,_y)+color3('000000')+bord(2)+blur(0.5)+fad(0,250), _txt)





  185.     return (ASS_BUF, TCAS_BUF)
复制代码
19号  这个OP要被撸出血了 嗯 没什么特别的 就是这样……


预览下载地址:
http://pan.baidu.com/share/link?shareid=316422&uk=900964
2

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2013-3-8 23:35:31 |只看该作者
你们太能那啥了...这算是群P么...

Moderator

疯子

Rank: 5Rank: 5

板凳
发表于 2013-3-9 00:03:15 |只看该作者
哎哈哈,这个脚本也发布了啊,支持下

Rank: 4

地板
发表于 2013-3-21 03:28:32 |只看该作者
太厉害了啊

Rank: 4

5#
发表于 2013-4-2 16:10:23 |只看该作者
恩恩~~不错的说~~

Rank: 4

6#
发表于 2013-4-5 12:27:51 |只看该作者
请问gdiFont在哪呢?

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

7#
发表于 2013-4-5 12:54:48 |只看该作者
shinkouha 发表于 2013-4-5 12:27
请问gdiFont在哪呢?

修改第2行代码为 from util.gdiFont import * 就可以了.

Rank: 4

8#
发表于 2013-4-21 16:25:38 |只看该作者
前辈太强了!!!

Rank: 4

9#
发表于 2013-9-4 15:04:56 |只看该作者
好好看哟~但是代码神马滴完全看不懂

Rank: 4

10#
发表于 2013-9-23 20:14:38 |只看该作者
本帖最后由 yyxxlc 于 2013-9-23 20:17 编辑

游风大人 我想问下 您在这个脚本和016_Hyouka_OP2 中使用 tcaxPy_User() 有什么特别的用处么? 我试了下吧user函数给去掉了
  1. def tcaxPy_Main_Fake1(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt):
复制代码
改成
  1. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt):
复制代码
生成出来的效果貌似没什么区别。那自定义的函数是用来做什么的?
好困惑 一直以为tcaxPy_User() 是用在tcas特效里的


Rank: 4

11#
发表于 2013-9-23 20:52:23 |只看该作者
本帖最后由 yyxxlc 于 2013-9-23 20:56 编辑

还、还有个问题。
在tcaxPy_User()里 大人把
  1.            if text[i][j] == ' ' or text[i][j] == '' or text[i][j] == ' '  :

  2.                 continue
复制代码
只保留了第一个:
  1.            if text[i][j] == ' ': #text[i][j] == '' text[i][j] == ' '  

  2.                 continue
复制代码
事实上tcaxPy_User()里的这一串东西我都不是太懂 感觉用来定义(_i, _j, _n, _BT, _ET, _SK, _KT, _x, _y, _a, _txt)这些参数的,
关于
  1. text[i][j] ==  ‘后面一个字符or两个字符or三个字符'
复制代码
表示了什么呀,这个如果像游风大人这样只保留一个的话,后面效果运用到句子里好像会有限制,好像最多只能用加到5个句子里再多就会报错了。

可以问下为什么吗?

wrong.png (55.26 KB, 下载次数: 1868)

wrong.png

Rank: 4

12#
发表于 2013-9-23 23:13:27 |只看该作者
yyxxlc 发表于 2013-9-23 20:52
还、还有个问题。
在tcaxPy_User()里 大人把只保留了第一个:事实上tcaxPy_User()里的这一串东西我都不是太 ...

016_Hyouka_OP2 中 用了user是为了让空格也有效果
if text[j] == ' ' or text[j] == '' or text[j] == ' '  :

      continue

跳过 半角空格 “空字符” 全角空格


if text[j] == ' ': #text[j] == '' text[j] == ' '
只跳过全角空格还是半角忘记了 #后面的懒得删除就直接注释掉了


不知道你有没有看过这个关于user的帖子
http://www.tcax.org/forum.php?mo ... &extra=page%3D1

Rank: 4

13#
发表于 2013-9-24 07:02:57 |只看该作者
本帖最后由 yyxxlc 于 2013-9-24 07:06 编辑
youkaze 发表于 2013-9-23 23:13
016_Hyouka_OP2 中 用了user是为了让空格也有效果
if text[j] == ' ' or text[j] == '' or text[j] == ' ...


原来是这样的呀!  奶大的那个教程模板我看过了  不过看着就复杂所以我就啪啪啪的晃过了 我今天再去仔细的看看吧 O(∩_∩)O哈哈~ 谢谢大人啦

Rank: 4

14#
发表于 2013-9-24 22:58:06 |只看该作者
本帖最后由 yyxxlc 于 2013-9-24 23:01 编辑

那个大人 我想问问 我能不能在user函数里分情况来定义哪些句子跳哪些内容 比如说其中第7、8、9、10句全部将空格跳过,其他的句子只跳过为“空”的情况:
于是我把
  1. if text[i][j] == ' ' or text[i][j] == ' ' or text[i][j] == ' ':
  2.                 continue
复制代码
改成了:
  1.             if i == 6 or 7 or 8 or 9:
  2.                 if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':                     
  3.                     continue
  4.             else :
  5.                 if text[i][j] == '':
  6.                     continue
复制代码
但是却没有达到我想要的效果啊  写代码啥的我很苦手  是我哪里写错了么 ? 还是根本不能这么写 ?

Rank: 4

15#
发表于 2013-10-4 03:26:03 |只看该作者
yyxxlc 发表于 2013-9-24 22:58
那个大人 我想问问 我能不能在user函数里分情况来定义哪些句子跳哪些内容 比如说其中第7、8、9、10句全部将 ...


需要用到两个fake 类似这样

if 3 <= i or i <= 13:
                ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake2(i, j, textNum, start, end, elapKar[j], kar[j], posX, posY, advance[j], text[j])
                if len(ASS_BUF) > 0:
                    WriteAssFile(ASS_FILE, ASS_BUF)
                if len(TCAS_BUF) > 0:
                    WriteTcasFile(TCAS_FILE, TCAS_BUF)
            # Fake1 一直有效
            if text[j] == ' ':#text[j] == '' or text[j] == ' ' or
                continue
            ASS_BUF, TCAS_BUF = tcaxPy_Main_Fake1(i, j, textNum, start, end, elapKar[j], kar[j], posX, posY, advance[j], text[j])
            if len(ASS_BUF) > 0:
                WriteAssFile(ASS_FILE, ASS_BUF)
            if len(TCAS_BUF) > 0:
                WriteTcasFile(TCAS_FILE, TCAS_BUF)

可以参考一下这个
http://tcax.org/forum.php?mod=vi ... &extra=page%3D1

代码我好多都没做注释 自己都忘记哪段是写的啥效果了~汗

Rank: 4

16#
发表于 2013-10-4 20:56:57 |只看该作者
youkaze 发表于 2013-10-4 03:26
需要用到两个fake 类似这样

if 3  0:

噢噢  谢谢游风大大啦~~  忒强大鸟~   PS:节日快乐~~蹭
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-11-23 00:22

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH