龙之谷-完整的源代码,可以解压龙之谷资源包,打包,定制定,制作自动补丁

 

完整的源代码,可以解压龙之谷资源包,打包,定制定,制作自动补丁

严重声明:技术仅用于交流,请勿用于破坏游戏平衡性或谋利。违反者所造成的经济责任与法律责任与本人一概无关,由其承担一切后果

  1. Global _OpenResName$
  2. Global _SaveResName$
  3. Global _OpenResPath$
  4. Global _SaveResPath$
  5. Global _IsUnPackRun
  6. Global _IsPackRun
  7. Global _IsCloseWin100
  8. Global _IsCloseWin200
  9. ;虚拟文件的结构
  10. Structure TypeVirFile
  11.    VirName$          ; 虚拟文件的虚拟全路径
  12.    VirSize.l         ; 虚拟文件的大小
  13.    ExtSize.l         ; 虚拟文件解压后的大小
  14.    KeepSize.l        ; 虚拟文件占用的空间的大小
  15.    VirAddress.l      ; 虚拟文件内容在资源中的指针地址
  16.    IdxAddress.l      ; 虚拟文件索引在资源文件的指针地址
  17. EndStructure
  18. ;虚拟文件的结构
  19. Structure TypeVirFolder
  20.    VirPath$          ; 虚拟文件的虚拟路径
  21.    StartList.l       ; 符合虚拟路径的虚拟文件的开始索引号
  22.    EndList.l         ; 符合虚拟路径的虚拟文件的结束索引号
  23. EndStructure
  24. Global NewList _ListAllVirFile.TypeVirFile()             ;虚拟文件的索引集
  25. Global NewList _ListAllVirFolder.TypeVirFolder()         ;虚拟文件的路径集
  26. Global NewList _ResFilesToPacking$()             ;虚拟文件的索引集
  27. Global _CountResFilesToPacking              ;虚拟文件的索引集
  28. ;- 设置集———————————————————————————————————
  29. Procedure UseParserRes_ReadUIPrefs()                                          ;<<<<<<<<<<OK
  30.    OnErrorResume()    ;出错继续运行程序
  31.    OpenPreferences(“set.prefs”)
  32.       PreferenceGroup(“FileName”)
  33.          _OpenResName$ = ReadPreferenceString (“OpenResName”“”)
  34.          _SaveResName$ = ReadPreferenceString (“SaveResName”“”)
  35.          _OpenResPath$ = ReadPreferenceString (“OpenResPath”“”)
  36.          _SaveResPath$ = ReadPreferenceString (“SaveResPath”“”)
  37.    ClosePreferences()
  38. EndProcedure
  39. ;保存UI设置
  40. Procedure UseParserRes_SaveUIPrefs()                                          ;<<<<<<<<<<OK
  41.    OnErrorResume()    ;出错继续运行程序
  42.    If CreatePreferences(“set.prefs”)
  43.       PreferenceGroup(“FileName”)
  44.          WritePreferenceString (“OpenResName”, _OpenResName$)
  45.          WritePreferenceString (“SaveResName”, _SaveResName$)
  46.          WritePreferenceString (“OpenResPath”, _OpenResPath$)
  47.          WritePreferenceString (“SaveResPath”, _SaveResPath$)
  48.       ClosePreferences()
  49.    EndIf
  50. EndProcedure
  51. ;- 构建控件———————————————————————————————————
  52. ; 构建主窗体控件
  53. Procedure CreateWin_MainWindow()
  54.    WinFlags.l = #PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
  55.    WinHwnd = OpenWindow(0, 0, 0, 620, 200, “迷路[龙之谷]客户端解析器 V1.00”, WinFlags )
  56.    If WinHwnd = 0                        : ProcedureReturn #True : EndIf        ;构建主窗体
  57.    If CreateGadgetList(WindowID(0)) = 0 : ProcedureReturn #True : EndIf        ;构建主窗体
  58.    UseParserRes_ReadUIPrefs()
  59.    Frame3DGadget(100, 010, 010+000, 600, 080,“解析成明文文件库”)
  60.    TextGadget   (101, 025, 033+000, 080, 020, “资 源 地址:”)
  61.    StringGadget (103, 100, 030+000, 400, 020, “”)
  62.    ButtonGadget (105, 510, 030+000, 020, 020, “..”)
  63.    TextGadget   (102, 025, 063+000, 080, 020, “明文库地址:”)
  64.    StringGadget (104, 100, 060+000, 400, 020, “”)
  65.    ButtonGadget (106, 510, 060+000, 020, 020, “..”)
  66.    ButtonGadget (107, 540, 030+000, 055, 050, “解析”)
  67.    Frame3DGadget(200, 010, 010+100, 600, 080,“打包成资源文件”)
  68.    TextGadget   (201, 025, 033+100, 080, 020, “明文库地址:”)
  69.    StringGadget (203, 100, 030+100, 400, 020, “”)
  70.    ButtonGadget (205, 510, 030+100, 020, 020, “..”)
  71.    TextGadget   (202, 025, 063+100, 080, 020, “新资源地址:”)
  72.    StringGadget (204, 100, 060+100, 400, 020, “”)
  73.    ButtonGadget (206, 510, 060+100, 020, 020, “..”)
  74.    ButtonGadget (207, 540, 030+100, 055, 050, “打包”)
  75.    ;ProgressBarGadget(300, 010, 200, 600, 20, 0, 100 )
  76.    SetGadgetText(103, _OpenResName$)
  77.    SetGadgetText(104, _SaveResPath$)
  78.    SetGadgetText(203, _OpenResPath$)
  79.    SetGadgetText(204, _SaveResName$)
  80.    ;SetGadgetState   (300, 100)
  81. EndProcedure
  82. Procedure CreateWin_UnPackingWindow()
  83.    WinFlags.l = #PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
  84.    WinHwnd = OpenWindow(100, 0, 0, 400, 110, “正在解析[“+GetFilePart(_OpenResName$) + “]资源”, WinFlags )
  85.    If WinHwnd = 0                        : ProcedureReturn #True : EndIf        ;构建主窗体
  86.    If CreateGadgetList(WindowID(100)) = 0 : ProcedureReturn #True : EndIf        ;构建主窗体
  87.       Text$ = “[共有: “ + Str(CountList(_ListAllVirFolder())) + “个文件夹] 正在创建文件夹…”
  88.       TextGadget(1000, 10, 20, 270, 20, Text$)
  89.       TextGadget(1001, 280, 20, 110, 20, “[耗时 ms] 0%”,#PB_Text_Right)
  90.       ProgressBarGadget(1002, 10, 40, 380, 20, 0, 100 )
  91.       ButtonGadget     (1003, 300, 70, 80, 30, “取消” )
  92.       SetGadgetState   (1002,0)
  93.       DisableWindow(0, 1)
  94.       DisableGadget(1003, 1)
  95. EndProcedure
  96. Procedure CreateWin_PackingWindow()
  97.    WinFlags.l = #PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
  98.    WinHwnd = OpenWindow(200, 0, 0, 400, 110, “正在打包[“+GetFilePart(_SaveResName$) + “]资源库”, WinFlags )
  99.    If WinHwnd = 0                        : ProcedureReturn #True : EndIf        ;构建主窗体
  100.    If CreateGadgetList(WindowID(200)) = 0 : ProcedureReturn #True : EndIf        ;构建主窗体
  101.       Text$ = “正在检测资源库文件…”
  102.       TextGadget(2000, 10, 20, 270, 20, Text$)
  103.       TextGadget(2001, 280, 20, 110, 20, “[耗时 ms]”,#PB_Text_Right)
  104.       ProgressBarGadget(2002, 10, 40, 380, 20, 0, 100 )
  105.       ButtonGadget     (2003, 300, 70, 80, 30, “打包” )
  106.       ButtonGadget     (2004, 300, 70, 80, 30, “取消” )
  107.       CheckBoxGadget   (2005, 10, 70, 200, 30, “打包空文件” )
  108.       SetGadgetState   (2002,0)
  109.       DisableWindow(0, 1)
  110.       HideGadget(2003, 1) : HideGadget(2004, 1)
  111. EndProcedure
  112. 严重声明:技术仅用于交流,请勿用于破坏游戏平衡性或谋利。违反者所造成的经济责任与法律责任与本人一概无关,由其承担一切后果。
  113. ;-次级功能——————————————————————————————————–
  114. Procedure CreateWin_EventGadget_107_CheckFolder()
  115.    ResSize = FileSize(_OpenResName$)
  116.    If ResSize <1 : MessageRequester(“出错提示”“指定的资源文件不存在,或被另一程序占用 “, 0) : EndIf
  117.    ResPath$ = GetGadgetText(104 )
  118.    If FileSize(ResPath$) = -1
  119.       If CreateDirectory(ResPath$)
  120.          _SaveResPath$ = ResPath$
  121.       Else
  122.          MessageRequester(“出错提示”“1.文件夹不存在.” + Chr(13)+Chr(10) + “2.自动创建文件夹失败,只能自动创建最后一级的文件夹. “, 0)
  123.          ProcedureReturn 1
  124.       EndIf
  125.    EndIf
  126.    UseParserRes_SaveUIPrefs()
  127. EndProcedure
  128. Procedure CreateWin_EventGadget_107_CheckResource()
  129.    ResSize = FileSize(_OpenResName$)
  130.    *MemTempID = AllocateMemory( ResSize )
  131.    FileHandle = CreateFile_( _OpenResName$, $40000000 | $80000000, 3, 0, 3, 0, 0 )
  132.    If FileHandle < 0 : ProcedureReturn 1 : EndIf
  133.       Paddress = SetFilePointer_(FileHandle, $100, 0, 0 )            ;获取资源文件起始地址的指针
  134.       ReadFile_( FileHandle, *MemTempID, $10, @Paddress, 0 )     ;加载资源文件
  135.       FileCount      = PeekL(*MemTempID + $4)                     ;获取文件的数量
  136.       IndexAddress   = PeekL(*MemTempID + $8)                     ;获取文件索引的起始位置
  137.       Size           = FileCount * $13C
  138.       *MemTempID = ReAllocateMemory(*MemTempID,Size )
  139.       Paddress = SetFilePointer_(FileHandle, IndexAddress, 0, 0 )             ;获取资源文件起始地址的指针
  140.       ReadFile_( FileHandle, *MemTempID, Size, @Paddress, 0 )                 ;加载资源文件
  141.    CloseHandle_( FileHandle )
  142.    ClearList( _ListAllVirFile() )                  ;清空用于存放所有虚拟文件的链表
  143.    ClearList( _ListAllVirFolder() )                ;清空用于存放某指定文件夹内虚拟文件的链表
  144.    ;======== 加载资源中所有虚拟文件的信息
  145.    For i = 1 To FileCount
  146.       AddElement( _ListAllVirFile() )
  147.       _ListAllVirFile()\VirName$   = PeekS(*MemTempID + Pos, $100)           ;获取虚拟文件的全名称
  148.       ;_ListAllVirFile()\IdxAddress = IndexAddress + Pos                       ;获取虚拟文件解压所的大小
  149.       CopyMemory_(@_ListAllVirFile()\VirSize, *MemTempID + Pos + $100, $10 )
  150.       Pos = Pos + $13C
  151.    Next
  152.    SortStructuredList( _ListAllVirFile(), 0, OffsetOf(TypeVirFile\VirName$), #PB_Sort_String ) ;按 VirName$进行链表排序;
  153.    ;======== 整理文件夹路径;指出文件夹包含的文件的相对起始索引;加速打开文件夹里面的虚拟文件
  154.    Index=0
  155.    ForEach _ListAllVirFile()
  156.       PathPart$ = GetPathPart(_ListAllVirFile()\VirName$)                     ;获取虚拟文件的路径
  157.       If TempPath$ <> PathPart$                                               ;对比虚拟文件的路径与上一个虚拟文件的路径是否一样
  158.          AddElement( _ListAllVirFolder() )                                    ;添加虚拟文件的路径
  159.          _ListAllVirFolder()\VirPath$ = PathPart$
  160.          _ListAllVirFolder()\StartList = Index
  161.          TempPath$ = PathPart$
  162.       EndIf
  163.       Index + 1
  164.       If _ListAllVirFile()\VirName$ <> “” : _ListAllVirFolder()\EndList = Index : EndIf
  165.    Next
  166. EndProcedure
  167. Procedure CreateWin_EventGadget_107_CreateFolders()
  168.    Dim TempFolderPath$(9)
  169.    GetTickCount = GetTickCount_()
  170.    PerFolders = CountList(_ListAllVirFolder())/100 + 1 : Folder = 0 : CountPer = 0
  171.    If Right(_SaveResPath$,1) <> “\” : _SaveResPath$ + “\” : EndIf 
  172.    ForEach _ListAllVirFolder()
  173.       Folder + 1
  174.       For i = 2 To CountString(_ListAllVirFolder()\VirPath$,”\“)
  175.          If TempFolderPath$(i) = StringField(_ListAllVirFolder()\VirPath$, i, “\“) : Continue : EndIf    ;如果节点一样,则转到下一个节点
  176.          For k = i To 9                                                             ;如果节点不一样,就对剩下的节点进行操作
  177.             TempFolderPath$(k) = StringField(_ListAllVirFolder()\VirPath$, k, “\“) ;重新组织一下[临时节点]的内容
  178.             If TempFolderPath$(k)<>””                                               ;节点内容不为空,进行节点加载与着对应的链表也进行加载
  179.                TempVirFolderNode$ = _SaveResPath$ : Count + 1
  180.                For x = 2 To k : TempVirFolderNode$ = TempVirFolderNode$ + TempFolderPath$(x) +”\” : Next   ;获取节点全路径
  181.                If CheckFilename(TempVirFolderNode$) = 0 : CreateDirectory( TempVirFolderNode$ ): EndIf 
  182.                If Folder >= PerFolders
  183.                   CountPer+1 : Folder = 0
  184.                   SetGadgetState(1002,CountPer)
  185.                   SetGadgetText(1001, “[耗时 ” +Str( GetTickCount_() – GetTickCount ) + “ms] ” + Str(CountPer) + “%” )
  186.                EndIf 
  187.             EndIf
  188.          Next
  189.          Break                         ;如遇有节点不一样,就将后面的节点内容加载到临时节点上,所以此处应当退出
  190.       Next
  191.    Next
  192.    SetGadgetState(1002,100)
  193.    SetGadgetText(1001, “[耗时 ” +Str( GetTickCount_() – GetTickCount ) + “ms] 100%” )
  194.    
  195. EndProcedure
  196. Procedure CreateWin_EventGadget_107_ParserResource()
  197.    
  198.    OnErrorResume()   ;出错继续运行程序
  199.    CreateWin_EventGadget_107_CreateFolders()
  200.    ;MessageRequester(““,”OK“):End 
  201.    DisableGadget(1003, 0) 
  202.    Text$ = “[共有: ” + Str(CountList(_ListAllVirFolder())) + “个文件夹/” + Str(CountList(_ListAllVirFile())) + “个文件.] 解析中…” 
  203.    SetGadgetText(1000, Text$)
  204.    GetTickCount = GetTickCount_() 
  205.    PerFiles = CountList(_ListAllVirFile())/100 + 1 : Files = 0 : CountPer = 0
  206.    If OpenLibrary(0, “zlib.dll“)
  207.       *uncompdll = GetFunction(0, “uncompress“)
  208.       *MemTempID = AllocateMemory( $100 ) : *MemVirFile = AllocateMemory( $100 )
  209.       FileHandle = CreateFile_( _OpenResName$, $40000000 | $80000000, 3, 0, 3, 0, 0 )
  210.       If FileHandle < 0 : ProcedureReturn 1 : EndIf 
  211.       
  212.       ForEach _ListAllVirFile()
  213.        ; If GetFilePart(_ListAllVirFile()\VirName$) = “colbuild.ini” Or GetFilePart(_ListAllVirFile()\VirName$) = “heightattribute.ini” 
  214.       
  215.          VirSize = _ListAllVirFile()\VirSize : ExtSize = _ListAllVirFile()\ExtSize : Files +1
  216.          If _ListAllVirFile()\VirAddress And VirSize And ExtSize 
  217.             *MemTempID = ReAllocateMemory(*MemTempID, VirSize )
  218.             Paddress = SetFilePointer_(FileHandle, _ListAllVirFile()\VirAddress, 0, 0 )          ;获取资源文件起始地址的指针
  219.             ReadFile_( FileHandle, *MemTempID, VirSize, @Paddress, 0 )          ;加载资源文件 
  220.             ExtSize = _ListAllVirFile()\ExtSize : *MemVirFile = ReAllocateMemory(*MemVirFile, ExtSize )
  221.             CallFunctionFast( *uncompdll, *MemVirFile , @ExtSize, *MemTempID, VirSize)
  222.             VirSize = ExtSize : Swap *MemTempID, *MemVirFile: Count+1
  223.     
  224.          Else 
  225.             VirSize = 0
  226.          EndIf
  227.          FileName$ = _SaveResPath$ + _ListAllVirFile()\VirName$
  228.          If CreateFile(1, FileName$ ): WriteData(1, *MemTempID, VirSize ) : CloseFile(1) : EndIf
  229.          If Files >= PerFiles
  230.             CountPer+1 : Files = 0
  231.             SetGadgetState(1002,CountPer)
  232.             SetGadgetText(1001, “[耗时 ” +StrF(( GetTickCount_() – GetTickCount)/1000,2 ) + “s] ” + Str(CountPer) + “%” )
  233.          EndIf 
  234.          If _IsUnPackRun = #False : Break : EndIf 
  235.             
  236.         ;EndIf
  237.       Next
  238.    EndIf 
  239.       
  240.    SetGadgetState(1002,100)
  241.    SetGadgetText(1001, “[耗时 ” +StrF(( GetTickCount_() – GetTickCount)/1000,2 ) + “s] 100%” )
  242.    _IsUnPackRun = #False : _IsCloseWin100 = #True
  243.    CloseHandle_( FileHandle ) 
  244.    CloseLibrary(0) 
  245.    
  246. EndProcedure
  247. Procedure CreateWin_EventGadget_207_CheckParserFolder(Dir$)
  248.    Protected ID.l, files.l 
  249.    If Right(Dir$, 1) <> “\” : Dir$ + “\” : EndIf 
  250.    ID = ExamineDirectory(#PB_Any, Dir$, ““) 
  251.    If ID 
  252.       While NextDirectoryEntry(ID) 
  253.          Select DirectoryEntryType(ID) 
  254.             Case 0 
  255.                Break 
  256.             Case #PB_DirectoryEntry_File 
  257.                files + 1 : AddElement( _ResFilesToPacking$()) : _ResFilesToPacking$() = Dir$ + DirectoryEntryName(ID)
  258.                
  259.             Case #PB_DirectoryEntry_Directory 
  260.                If DirectoryEntryName(ID) <> “.” And DirectoryEntryName(ID) <> “..” 
  261.                   files + CreateWin_EventGadget_207_CheckParserFolder(Dir$ + DirectoryEntryName(ID)) 
  262.                EndIf 
  263.          EndSelect 
  264.       Wend 
  265.    EndIf 
  266.    ProcedureReturn files
  267. EndProcedure
  268. Procedure CreateWin_EventGadget_207_CreateParserHeader()
  269.    HeaderMsg$ = “EyedentityGames Packing File 0.1
  270.    *MemTemp = AllocateMemory($400)
  271.    PokeS(*MemTemp, HeaderMsg$)
  272.    PokeL(*MemTemp+$100, $B)
  273.    
  274.    If CreateFile(0, _SaveResName$)
  275.       WriteData(0, *MemTemp,$400)
  276.       CloseFile(0)
  277.    EndIf 
  278.    FreeMemory(*MemTemp)
  279.    
  280. EndProcedure
  281. Procedure CreateWin_EventGadget_207_PackParser()
  282.    GetTickCount = GetTickCount_() 
  283.    PerFiles = _CountResFilesToPacking/100 + 1 : Files = 0 : CountPer = 0 
  284.       ResIndexAddress = $400
  285.       ResIndexSize = 0 
  286.       ResDataSize = 0 
  287.       ResIndexCount = 0
  288.           
  289.    SetGadgetState(2002,CountPer)       
  290.           
  291.    If OpenLibrary(0, “zlib.dll“)
  292.       *compdll = GetFunction(0, “compress2“)
  293.       *MemTempID = AllocateMemory( $100 ) : *MemVirFile = AllocateMemory( $100 ): *MemIndex = AllocateMemory( $100 )
  294.       
  295.       FileHandle = CreateFile_( _SaveResName$, $40000000 | $80000000, 3, 0, 3, 0, 0 )
  296.       If FileHandle < 0 : ProcedureReturn 1 : EndIf 
  297.       ForEach _ResFilesToPacking$()
  298.          FileSize = FileSize(_ResFilesToPacking$()) 
  299.          If FileSize > 0 
  300.              *MemTempID = ReAllocateMemory(*MemTempID,FileSize) 
  301.          Else 
  302.             If GetGadgetState(2005) = 0 : Continue : EndIf 
  303.          EndIf 
  304.          
  305.          
  306.          Pos = IndexSize : IndexSize + $13C : *MemIndex = ReAllocateMemory(*MemIndex,IndexSize): 
  307.          ResDataAddress = ResIndexAddress
  308.          VirSize = FileSize + $13 : *MemVirFile = ReAllocateMemory(*MemVirFile,VirSize)         
  309.           
  310.          If FileSize > 0 
  311.             If ReadFile(0, _ResFilesToPacking$()) : ReadData(0,*MemTempID,FileSize) : CloseFile(0) : EndIf
  312.             CallFunctionFast( *compdll, *MemVirFile, @VirSize, *MemTempID, FileSize, 1)
  313.          Else 
  314.             VirSize = 0 
  315.          EndIf 
  316.          
  317.          
  318.          ResVirFileName$ = ReplaceString(_ResFilesToPacking$(),_OpenResPath$,”\” )
  319.          PokeS( *MemIndex+Pos, ResVirFileName$ )
  320.          PokeL( *MemIndex+Pos+$100, VirSize)          ;打包文件的大小
  321.          PokeL( *MemIndex+Pos+$104, FileSize)         ;明件文件的大小         
  322.          PokeL( *MemIndex+Pos+$108, VirSize)          ;预留大小         
  323.          PokeL( *MemIndex+Pos+$10C, ResDataAddress)   ;预留大小            
  324.          ResIndexAddress + VirSize
  325.          
  326.          FFFFF = 0
  327.          If FileSize > 0 
  328.             
  329.                Paddress = SetFilePointer_( FileHandle, ResDataAddress, 0, 0)    ;获取资源文件起始地址的指针
  330.                WriteFile_(FileHandle, *MemVirFile, VirSize, @Paddress, 0)     ;向资源文件写入内容           
  331.                WriteFile_(FileHandle, @FFFFF, VirSize, @Paddress, 0)     ;向资源文件写入内容 
  332.             
  333.          EndIf 
  334.          
  335.          Paddress = SetFilePointer_( FileHandle, ResIndexAddress, 0, 0)    ;获取资源文件起始地址的指针
  336.          WriteFile_(FileHandle, *MemIndex, IndexSize, @Paddress, 0)     ;向资源文件写入内容   
  337.          
  338.          ResIndexCount+1
  339.          Paddress = SetFilePointer_( FileHandle, $104, 0, 0)    ;获取资源文件起始地址的指针
  340.          WriteFile_(FileHandle, @ResIndexCount, 4, @Paddress, 0)     ;向资源文件写入内容 
  341.          
  342.          Paddress = SetFilePointer_( FileHandle, $108, 0, 0)    ;获取资源文件起始地址的指针
  343.          WriteFile_(FileHandle, @ResIndexAddress, 4, @Paddress, 0)     ;向资源文件写入内容   
  344.                           
  345.          FlushFileBuffers_(FileHandle) 
  346.          PackedFiles + 1 : Files + 1
  347.           If Files >= PerFiles
  348.             CountPer+1 : Files = 0 
  349.             SetGadgetState(2002,CountPer)
  350.             
  351.          EndIf             
  352.            
  353.             SetGadgetText(2000, “[已打包: ” + Str(PackedFiles) + “/” + Str(_CountResFilesToPacking) + “个文件] 正在打包中…“) 
  354.             SetGadgetText(2001, “[耗时 ” +StrF(( GetTickCount_() – GetTickCount)/1000,2 ) + “s] ” + Str(CountPer) + “%” )
  355.          If _IsPackRun = #False : Break : EndIf 
  356.       Next 
  357.       
  358.    EndIf 
  359.    SetGadgetState(2002,100)
  360.    SetGadgetText(2001, “[耗时 ” +StrF(( GetTickCount_() – GetTickCount)/1000,2 ) + “s] 100%” )
  361.    _IsPackRun = #False : _IsCloseWin200 = #True
  362.    CloseHandle_( FileHandle ) 
  363.    CloseLibrary(0) 
  364.    
  365. EndProcedure
  366. ;- 事件过程———————————————————————————————————
  367. Procedure CreateWin_EventGadget_105()
  368.    StandardFile$ = _OpenResName$
  369.    Pattern$ = “*.Pak|*.Pak
  370.    Pattern = 0    
  371.    _OpenResName$ = OpenFileRequester(“请选择[龙之谷]资源文件“, StandardFile$, Pattern$, Pattern)
  372.         
  373.    If _OpenResName$
  374.       SetGadgetText(103, _OpenResName$)
  375.    Else
  376.       MessageRequester(“出错提示“, “文件不存在.“, 0) 
  377.    EndIf
  378. EndProcedure
  379. Procedure CreateWin_EventGadget_106()
  380.    InitialPath$ = _SaveResPath$
  381.    _SaveResPath$ = PathRequester(“请选择明文文件的路径“, InitialPath$)
  382.    If _SaveResPath$
  383.       SetGadgetText(104,_SaveResPath$)
  384.    Else
  385.       MessageRequester(“出错提示“, “文件夹不存在.“, 0) 
  386.    EndIf
  387. EndProcedure
  388. Procedure CreateWin_EventGadget_107()
  389.    If CreateWin_EventGadget_107_CheckFolder() : ProcedureReturn : EndIf 
  390.    If CreateWin_EventGadget_107_CheckResource() : ProcedureReturn : EndIf 
  391.    CreateWin_UnPackingWindow()
  392.    _IsUnPackRun = #True
  393.    CreateThread(@CreateWin_EventGadget_107_ParserResource(), 154)
  394. EndProcedure
  395. Procedure CreateWin_EventGadget_205()
  396.    InitialPath$ = _OpenResPath$
  397.    _OpenResPath$ = PathRequester(“请选择明文库的路径“, InitialPath$)
  398.    If _OpenResPath$
  399.       SetGadgetText(203,_OpenResPath$)
  400.    Else
  401.       MessageRequester(“出错提示“, “文件夹不存在.“, 0) 
  402.    EndIf
  403. EndProcedure
  404. Procedure CreateWin_EventGadget_206()
  405.    StandardFile$ = _SaveResName$
  406.    Pattern$ = “*.Pak|*.Pak
  407.    Pattern = 0    
  408.    _SaveResName$ = SaveFileRequester(“请选择[龙之谷]资源文件“, StandardFile$, Pattern$, Pattern)
  409.         
  410.    If _SaveResName$
  411.       If GetExtensionPart(_SaveResName$) <> “pak” : _SaveResName$ + “.pak” : EndIf 
  412.       SetGadgetText(204,_SaveResName$)
  413.    Else
  414.       MessageRequester(“出错提示“, “文件不存在.“, 0) 
  415.    EndIf
  416. EndProcedure
  417. Procedure CreateWin_EventGadget_207()
  418.    UseParserRes_SaveUIPrefs() 
  419.    CreateWin_PackingWindow()
  420.    ClearList(_ResFilesToPacking$() )
  421.    _CountResFilesToPacking = CreateWin_EventGadget_207_CheckParserFolder(_OpenResPath$) : GetTickCount = GetTickCount_() 
  422.    SetGadgetState   (2002,100): DisableGadget(2003, 0) 
  423.    SetGadgetText(2000, “[共扫描到: ” + Str(_CountResFilesToPacking) + “个文件] ” )   
  424.    SetGadgetText(2001, “[耗时 ” +Str( GetTickCount_() – GetTickCount ) + “ms] “)
  425.    HideGadget(2003, 0)
  426. EndProcedure
  427. Procedure CreateWin_EventGadget_1003()
  428.    If _IsUnPackRun = #False : CloseWindow(100) : DisableWindow(0, 0) : SetActiveWindow(0): Else : _IsUnPackRun = #False : EndIf
  429. EndProcedure
  430. Procedure CreateWin_EventGadget_2003()
  431.    GetTickCount = GetTickCount_() 
  432.    HideGadget(2003, 1)
  433.    SetGadgetText(2000, “正在创建资源文件… ” )   
  434.    SetGadgetText(2001, “[耗时 ” +Str( GetTickCount_() – GetTickCount ) + “ms] “)
  435.    CreateWin_EventGadget_207_CreateParserHeader()
  436.    SetGadgetText(2000, “资源文件创建完成.” )   
  437.    SetGadgetText(2001, “[耗时 ” +Str( GetTickCount_() – GetTickCount ) + “ms] “)
  438.    HideGadget(2004, 0)
  439.    _IsPackRun = #True
  440.    CreateThread(@CreateWin_EventGadget_207_PackParser(), 155)
  441. EndProcedure
  442. Procedure CreateWin_EventGadget_2004()
  443.    If _IsPackRun = #False : CloseWindow(200) : DisableWindow(0, 0) : SetActiveWindow(0): Else : _IsPackRun = #False : EndIf
  444. EndProcedure
  445. Procedure CreateWin_EventGadget()
  446.    Select EventGadget()
  447.       Case 105 : CreateWin_EventGadget_105()
  448.       Case 106 : CreateWin_EventGadget_106()
  449.       Case 107 : CreateWin_EventGadget_107()
  450.       Case 205 : CreateWin_EventGadget_205()
  451.       Case 206 : CreateWin_EventGadget_206()
  452.       Case 207 : CreateWin_EventGadget_207()
  453.       Case 1003 : CreateWin_EventGadget_1003()
  454.       Case 2003 : CreateWin_EventGadget_2003()
  455.       Case 2004 : CreateWin_EventGadget_2004()
  456.    EndSelect
  457. EndProcedure
  458. ;总的窗体关闭变事件
  459. Procedure CreateWin_CloseWindow(WindowID)
  460.    OnErrorResume()   ;出错继续运行程序
  461.    Select WindowID
  462.       Case 0
  463.          UseParserRes_SaveUIPrefs()
  464.          End
  465.       Case 100
  466.          CreateWin_EventGadget_1003()
  467.       Case 200
  468.          CreateWin_EventGadget_2004()
  469.       Default   : CloseWindow(WindowID)
  470.    EndSelect
  471. EndProcedure
  472. ;- 主程序———————————————————————
  473. CreateWin_MainWindow(); 构建主窗体控件
  474. Repeat
  475.    WinEventID = WaitWindowEvent()   : WindowID = EventWindow()
  476.    If _IsCloseWin100 = #True And IsWindow(100)
  477.       CloseWindow(100)
  478.       DisableWindow(0, 0)
  479.       SetActiveWindow(0)
  480.       _IsCloseWin100 = #False
  481.    EndIf
  482.    If _IsCloseWin200 = #True And IsWindow(200)
  483.       CloseWindow(200)
  484.       DisableWindow(0, 0)
  485.       SetActiveWindow(0)
  486.       _IsCloseWin200 = #False
  487.    EndIf
  488.    Select WinEventID
  489.       Case #PB_Event_CloseWindow
  490.          CreateWin_CloseWindow(WindowID)
  491.       Case #PB_Event_SizeWindow
  492.       Case #PB_Event_Menu
  493.       Case #PB_Event_Gadget
  494.          CreateWin_EventGadget()
  495.    EndSelect
  496. ForEver
© 版权声明
THE END
喜欢就支持一下吧