home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 9869 / gits_unpacker1.1.py.7z / gits_unpacker1.1.py
Encoding:
Python Source  |  2015-10-16  |  2.4 KB  |  84 lines

  1. #!/usr/bin/env python
  2. # -*- coding: utf_8 -*-
  3.  
  4.  
  5. import struct
  6. import os
  7.  
  8.  
  9.  
  10. path_BaseDirectory = "J:\\GITSU\\"
  11. unpack_file = "D:\\Program Files (x86)\\Nexon\\gits\\appdata\\Data\\worldEnv.dat"
  12.  
  13. print ("Directory:  "+path_BaseDirectory)
  14.  
  15. r_bytes = [0, 0, 0, 0, 0, 0, 0, 0]
  16. r_bytes_l = [0xDD, 0x88, 0x55, 0x22, 0x14, 0, 0, 0]
  17.  
  18. dat_file = open(unpack_file, 'rb')
  19.  
  20. dat_file.seek(0,os.SEEK_END)
  21. dat_file_size=dat_file.tell()
  22. dat_file.seek(0,os.SEEK_SET)
  23.  
  24. file_name = ""
  25. previouse_offset = 0
  26.  
  27. print  ("dat_file_size: " + str(dat_file_size))
  28.  
  29. while ( dat_file.tell() <  dat_file_size):
  30.  
  31.     if (r_bytes == r_bytes_l):
  32.         back_offset = dat_file.tell()
  33.         dat_file.seek(0x12,os.SEEK_CUR)
  34.         file_name_size = struct.unpack('I', dat_file.read(4))[0]
  35.         if (file_name_size < 0xFF):
  36.             if (file_name != "") : ##╤ç╨╕╤é╨░╨╡╨╝ ╤ä╨░╨╣╨╗
  37.                 back_offset2 = dat_file.tell()
  38.                 (dirName, fileName) = os.path.split(path_BaseDirectory + file_name)
  39.                 if ((os.path.exists(dirName) ) == False):
  40.                     os.makedirs(dirName)
  41.                 file_size = back_offset - 8 - previouse_offset
  42.                 dat_file.seek(previouse_offset,os.SEEK_SET)
  43.                 byte_data=dat_file.read(file_size)
  44.                 Ufile = open((path_BaseDirectory + file_name), 'wb')
  45.                 Ufile.write(byte_data)
  46.                 Ufile.close()
  47.                 dat_file.seek(back_offset2,os.SEEK_SET)
  48.             file_name =   dat_file.read(file_name_size)
  49.             print("File discriptor offset: " + str(back_offset - 8) + " " +file_name)
  50.             previouse_offset = dat_file.tell()
  51.             r_bytes = [0, 0, 0, 0, 0, 0, 0, 0]
  52.         else:
  53.             dat_file.seek(back_offset,os.SEEK_SET)
  54.     else:
  55.         i = 0
  56.         while (i < 7) :
  57.             r_bytes[i] = r_bytes[i+1]
  58.             i += 1
  59.         r_bytes[7] = file_name_size = struct.unpack('B', dat_file.read(1))[0]
  60.        ## print(r_bytes)
  61.  
  62.  
  63.  
  64. back_offset = dat_file.tell()
  65. (dirName, fileName) = os.path.split(path_BaseDirectory + file_name)
  66. if ((os.path.exists(dirName) ) == False):
  67.     os.makedirs(dirName)
  68. file_size = back_offset - previouse_offset
  69. dat_file.seek(previouse_offset,os.SEEK_SET)
  70. byte_data=dat_file.read(file_size)
  71. Ufile = open((path_BaseDirectory + file_name), 'wb')
  72. Ufile.write(byte_data)
  73. Ufile.close()
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.