Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Игры » Strategy » Empire: Total War

Модерирует : Cossack, RapSoldier, VdV

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Haktar



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

 
Статья от Лиса из Тарговиска
 
Распаковщик от Alpaca и Sinople:
Распаковать удалось с легкостью, на скрине трапперы сражаются на стороне британцев (также известных, как лоялисты) :
 
Ссылка на распаковщик
Открывать файл архиватором (Лис: у меня винрар 3.5, открыл без труда)
Пользоваться:
1.Перенести распаковщик в data папку, запустить .bat файл.
2. Все распакованное будет в папке unpacked
*Требуется Python (Лис: библиотека языка, можно взять здесь )
 
Провел тест на работоспособность.
Необходимо:
1. Установить Python. Ссылка выше.
2. Перенести файлы распаковщика по адресу (у меня) C:\Program Files\Steam\steamapps\common\empire total war demo\data
3. Открыть файл emp_unpacker.py, кликнув на него правой кнопкой мыши и выбрав Edit with IDLE.
Откроется два окна. Python Shell не трогайте. Из второго окна стираете все, заменив на:
[spoiler]
Цитата:
import struct, os, sys, re
 
# For easy file reading and writing interactions
def readLong(fhandle):
    return struct.unpack('l', fhandle.read(4))[0]
def readShort(fhandle):
    return struct.unpack('h', fhandle.read(2))[0]
def readByte(fhandle):
    return struct.unpack('B', fhandle.read(1))[0]
def readBool(fhandle):
    val = fhandle.read(1)
    if val == "00":
        return False
    else:
        return True
     
def writeLong(fhandle, value):
    fhandle.write(struct.pack('l',value))
def writeShort(fhandle, value):
    fhandle.write(struct.pack('h',value))
def writeByte(fhandle, value):
    fhandle.write(struct.pack('B',value))
def writeBool(fhandle, value):
    if value:
        fhandle.write('\x01')
    else:
        fhandle.write('\x00')
         
def removeDir(path):
    # remove all files in a folder
    if not (os.path.isdir(path)):
  return True
    
    files = os.listdir(path)
    
    for x in files:
  fullpath=os.path.join(path, x)
  if os.path.isfile(fullpath):
   os.remove(fullpath)
  elif os.path.isdir(fullpath):
   removeDir(fullpath)
    os.rmdir(path)
 
def parseArgs(args):
    pack = packFile('demo1.pack','unpacked')
    
    # create argument tree
    argtree = []
    for arg in args[1:]:
  if arg.startswith('-'):
   argtree.append([arg,[]])
  else:
   argtree[-1][1].append(arg)
    
    # wander the tree, top level always has hyphenated arguments
    for arg in argtree:
  # case 1: list
  if arg[0] == '-l':
   if len(arg[1]) > 0:
    for file in arg[1]:
     pack.printEyeCandy(str(file))
   else:
    pack.printEyeCandy('./list.txt')
  # case 2: unpack
  elif arg[0] == '-u':
   for file in arg[1]:
    if file == 'all':
     for i in range(len(pack.files)):
      pack.exportFile(i)
    else:
     pack.exportFile(file)
  # case 3: unpack (regexp)
  elif arg[0] == '-ur':
   for file in arg[1]:
    pack.exportFile(file, True)
  # case 4: change pack
  elif arg[0] == '-p':
   for file in arg[1]:
    print()
    print('Changing pack to '+file)
    print()
    pack.newPack(file,pack.outputdir)
  # case 5: change output directory
  elif arg[0] == '-o':
   for file in arg[1]:
    print()
    print('Changing output directory to '+file)
    print()
    pack.changeOutputDir(file)
    
 
class packFile:
    def __init__(self, path='', outputdir=None):
  self.handle = None
  if outputdir:
   removeDir(outputdir)
  self.newPack(path,outputdir)
    
    def newPack(self,path,outputdir=None):
  # safely open new pack
  if self.handle:
   self.handle.close()
   self.handle = None
  self.files = []
  self.numFiles = 0
  self.arr = 0
  self.outputdir = outputdir
  self.defLength = 0
  self.path = path
  self.readPackDefinition()
    
    def changeOutputDir(self,path):
  self.outputdir = path
  if self.outputdir != None:
   removeDir(self.outputdir)
    
    def packOpen(self):
  if not self.handle:
   self.handle = open(self.path,"rb")
  return self.handle
   
    def packClose(self):
  self.handle.close()
   
    def readPackDefinition(self):      
  pack = self.packOpen()
   
  # skip empty bytes and stuff at the start
  pack.seek(16)
  self.defLength += 16
 
  # read number of files
  self.numFiles = readLong(pack)
  self.defLength += 4
   
  # read ??
  self.arr = readLong(pack)
  self.defLength += 4
   
  # store the offset of a certain file
  offset = 0
  # read file metadata
  for i in range(self.numFiles):
   
   # read length of file
   length = readLong(pack)
   self.defLength += 4
   
   # read file name
   char = ''
   filename = ''
   while char != b'\x00':
    char = pack.read(1)
    if (char != b'\x00'):
     filename += char.decode()
    self.defLength += 1
   self.files.append((filename,length,offset))
   offset += length
   
    def exportFile(self, arg, regexp = False):
  try:  
   arg = int(arg)
   # option a: arg is an index
   list = [self.files[arg]]
  except:
   # option b: arg is a string
   if regexp:
    list = filter(lambda x: re.search(str(arg),x[0]),self.files)
   else:
    list = filter(lambda x: arg in x[0],self.files)
  for (path,length,offset) in list:
   print('Exporting '+path+', length: '+str(length)+', at offset: '+str(offset))
   
   # create output directory    
   dir = os.path.split(os.path.join(self.outputdir,path))[0]
   if not os.path.isdir(dir):
    os.makedirs(dir)
   output = open(os.path.join(self.outputdir,path),'wb')
   
   # open pack and go to offset
   pack = self.packOpen()
   pack.seek(self.defLength+offset)
   # copy content
   i = 0
   # read MB-sized chunks as long as possible
   j = length//(2**20)
   while i < j:
    output.write(pack.read(2**20))
    i+=1
   i = 0
   j = (length%(2**20))//(2**10)
   # read KB-sized chunks
   while i < j:
    output.write(pack.read(2**10))
    i+=1
   i = 0
   j = length%(2**10)
   # read byte-sized chunks
   while i < j:
    output.write(pack.read(1))
    i+=1
   output.close()
  return True
   
   
    
    def printEyeCandy(self, outfile):
  output = open(outfile,'w')
  for (path,length,offset) in self.files:
   output.write(str(path)+'\r\n')
  output.close()
   
 
# main
parseArgs(sys.argv)
[/spoiler]
4. Сохраняете, запускаете бат-файл emp_unpacker.py -u all.bat
 
После распаковки не забудьте переименовать demo1.pack в demo1.pack_backup, затем перенести файлы в корневую директорию, здесь вы уже сможете их модифицировать.
 
Небольшие видоизменения игры:
 
Пехота стреляет тремя рядами:
 
Найдите юнита, который вы хотите изменить

Цитата:
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>fire_volley</firing_drill>  

Измените на:

Цитата:
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>rank_fire</firing_drill>  

У вас не хватает двух букв, так как rank_fire короче, чем fire_volley. Рекомендуют добавить две буквы к имени генерала. (Лис: как это сделать вы поймете далее)
 
Изменить количество солдат в отряде:
Найти:

Цитата:
<unit unit_category="infantry" num_soldiers="45" script_name="britain_euro_grenadiers_bearskin">

и заменить на

Цитата:
<unit unit_category="infantry" num_soldiers="145" script_name="britain_euro_grenadiers_bearskin">  

 
Затем найти:

Цитата:
<general>
<name>William Howe</name>  

и заменить на

Цитата:
<general>
<name>William How</name>  

 
Опыт отряда:
Найти:

Цитата:
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>rank_fire</firing_drill>
<special_ability>square_formation</special_ability>
<bayonet_type>ring_bayonets</bayonet_type>
</unit_capabilities>
<unit_experience level="0"/>  

 
Ноль изменить на 3. Никаких иных изменений не требуется.
 
Добавление кораблей в игру:
Во втором посте показывают добавление кораблей в игру. Делается это в файле battle_of_lagos.xml
Мануала нет, видимо это делается элементарно копи-пастом.

Цитата:
<faction>britain</faction>
<deployment_area>
<centre x="0.0" y="0.0"/>
<width metres="2000.0"/>
<height metres="2000.0"/>
<orientation radians="0"/>
</deployment_area>
<camera_start_position x="-122" y="33.2" z="566.6" />
<camera_target_position x="-156" y="-31.7" z="384.4" />

 
Упрощённый вариант распаковки архивов pack
 
1. Скачиваем программу Python - Скачать
2. Скачиваем архив распаковщика - Скачать
3. Распаковываем архив распаковщика, и копируем из него файлы emp_unpacker.py и emp_unpacker.py -u all.bat в папку C:\Program Files\Steam\steamapps\common\empire total war demo\data
4. Запускаем файл emp_unpacker.py -u all.bat, ждём распаковки. Распакованные файлы находяться в папке unpacked
 
Как распаковать другие файлы с расширением .pack?
 
1. Повторяем 1-й, 2-й и 3-й пункт инструкции Упрощённый вариант распаковки архивов pack
2. Открываем файл emp_unpacker.py с помощью Блокнота. Ищём demo1. Заменяем эту строку на demo2, demo3 или другой пак, который вам надо распаковать. Запускаем emp_unpacker.py -u all.bat, ждём распаковки.
Небольшой нюанс - перед тем как распаковывать, если вы уже распаковали demo1.pack, то папку unpacked переименуйте например в unpacked1
 
Со всеми вопросами по этому посту сюда: Моддинг и Тюнинг для ETW, Делимся опытом, туторами, советами
 
Другиии инструкции по моддингу Empire: Total War: Пособие для моддера ETW, Инструкции для начинающего моддера




Если требуется разместить в сообщение большое количество текста, то обязательным является использование тега more (Подробнее...).

Ссылки на торренты, порталы с торрентами и клиенты запрещены в этом форуме, для этого есть другой форум (Игры и Фильмы).

Будьте добры ознакомится с правилами на будущее.

Всего записей: 15 | Зарегистр. 01-03-2009 | Отправлено: 01:21 01-03-2009 | Исправлено: RapSoldier, 12:24 01-03-2009
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Игры » Strategy » Empire: Total War


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru