Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

 















La più grande comunità italiana sui videogiochi Total War di Creative Assembly
  

Total War: Warhammer | Total War: Attila | Total War: Rome 2 | Total War: Shogun 2
Napoleon: Total War | Empire: Total War | Medieval II: Total War | Rome: Total War

LEGGETE IL NOSTRO REGOLAMENTO PRIMA DI PARTECIPARE. PER FARE RICHIESTE DI SUPPORTO, LEGGETE PRIMA QUESTA DISCUSSIONE.

 

 
Stampa | Notifica email    
Autore

Come usare l'unpacker

Ultimo Aggiornamento: 12/03/2009 18:32
25/02/2009 23:06
OFFLINE
Post: 70
Registrato il: 29/01/2009
Città: CUNEO
Età: 37
Sesso: Maschile
Miles
Siccome molti lo chiedono, spero che non dispiaccia se riporto in itaGliano quello scritto sul forum inglese (o americano, comunque anglofono)^^

1- Cosa mi serve?
E' necessario che installi Python3.01, che trovi qui -> www.python.org/download/releases/3.0.1/ (se utilizzate un processore a 32bit scaricate il file x86, se a 64 bit AMD64)
Non sono necessari particolari accrgimenti, installalo come qualsiasi altro programma.

2- Creare i file di backup
Pen non dover riscaricare la demo se commettiamo dei pasticci (e per altre ragioni) è meglio salvare da parte questi file, ovvero COPIARE l'intera cartella \data in un altro luogo (dove meglio preferite, non è importante basta che ve ne ricordiate dove l'avete messa)

3- Si ma dove sono?
Sull'icona sul desktop di empire cliccate con il tasto delstro, scegliete proprietà in fondo al menù, qui cliccate sul tasto "trova destinazione". Vi ritroverete nella cartella principale di stream, ora aprite la cartella SteamApps e poi common, qui c'è la directory "empire total war demo" dove troverete la cartella \data.

4- Ok, ho preso la cartella data, l'ho copiata per intero da un'altra parte, ora che faccio?
Ora andiamo nella cartella \data, non quella di backup che avete copiato, e andiamo a creare un file chiamato "emp_unpacker.py" (basta fare tasto destro-> crea file di testo e rinominarlo come vi ho postato, selezionate si nel messaggio che vi compare) e sullo stesso file selezionamo dal menù del tasto desto "edit whith IDLE":
seleziona tutto il testo che trovi qui sotto, lo copi nel file appena creato, lo salvi e chiudi il programma.

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)

Ora premete Strat->esegui e digitate cmd e date l'invio, qui utilizzate questo comando "cd" + l'intero percorso della catrella data (il mio è "C:\Programmi\Steam\SteamApps\common\empire total war demo\data"), ovvero scrivete (esempio) "cd C:\Programmi\Steam\SteamApps\common\empire total war demo\data".
Siete arrivati vivi fin qui (si spera), ora digitate ESATTAMENTE questo comando "emp_unpacker.py -u all" rispettando anche gli spazi.
Ora aspettate che l'unpacker faccia il suo lavoro.

5- E ho finito!
No, ora tornate nella cartella data e troverete un'altra directory chiamata \unpacked, con all'interno altri file e altre cartelle, bene copiate tutte queste cartelle e file dentro la cartella \data selezionando si ai messaggi che compaiono.

6- Evvai, ora ho finito!
No, devi ancora fare un'ultimo passo importantissimo: devi rinominare il file "demo1.pack" come vuoi (esempio demo1pack_backup"), l'importante è che NON abbia un'estensione, ovvero non sia un ".qualcosa".

Ecco quà, spero di esser stato chiaro ;P

PS. come faccio a ridurre le dimensioni della finestra testo? Insomma fare una cosa simile a quello che c'è sul fourm di TWCenter?
[Modificato da Arma_87 26/02/2009 10:54]
26/02/2009 17:06
OFFLINE
Post: 154
Registrato il: 14/12/2008
Città: CATANIA
Età: 30
Sesso: Maschile
Immunes
ottima guida [SM=g8119]
[Modificato da Milite95 26/02/2009 17:25]
26/02/2009 23:59
OFFLINE
Post: 5.573
Registrato il: 29/10/2007
Sesso: Maschile
Praefectus Castrorum
Il padrino
ottima guida ;D messa in evidenza ;D
____________________________________________________




27/02/2009 14:19
OFFLINE
Post: 12.569
Registrato il: 17/10/2005
Sesso: Maschile
- Amministratore -
Praefectus Legionis
Deus ex machina
Fantastico, mi era sfuggita questa guida!
27/02/2009 17:22
OFFLINE
Post: 1.763
Registrato il: 14/04/2007
Città: ACCIANO
Età: 32
Sesso: Maschile
Tribunus
mi da un errore....dice errore alla linea 7 def readlong<fhandle> unaxpected indent.....nn riesco a scompattarlo uff.....io scrivo cd e tutto il percorso, poi invio e poi scrivo il comando ma niente....puù essere che uso la versione a 32 bit e magari io ho il processore a 64 bit??? (nn so dove vederlo, da hardwere nn si vede O_O )
--------------------------------------------------------




Forum King's mountain


27/02/2009 17:45
OFFLINE
Post: 70
Registrato il: 29/01/2009
Città: CUNEO
Età: 37
Sesso: Maschile
Miles
Re:
=DO=, 27/02/2009 17.22:

mi da un errore....dice errore alla linea 7 def readlong<fhandle> unaxpected indent.....nn riesco a scompattarlo uff.....io scrivo cd e tutto il percorso, poi invio e poi scrivo il comando ma niente....puù essere che uso la versione a 32 bit e magari io ho il processore a 64 bit??? (nn so dove vederlo, da hardwere nn si vede O_O )




Può essere, scaricati la versione 64bit, lo reinstalli e provi. Il codice che ho postato è corretto, l'ho rincontrollato, per cui ti consiglio di reinstallare python 64bit ;)
27/02/2009 21:36
OFFLINE
Post: 1.763
Registrato il: 14/04/2007
Città: ACCIANO
Età: 32
Sesso: Maschile
Tribunus
non è quello, il mio è 32 bit infatti nn me lo fa installare.....
--------------------------------------------------------




Forum King's mountain


27/02/2009 21:45
OFFLINE
Post: 1.763
Registrato il: 14/04/2007
Città: ACCIANO
Età: 32
Sesso: Maschile
Tribunus
mi dice che l'errore è qui


def readLong(fhandle):
--------------------------------------------------------




Forum King's mountain


27/02/2009 23:41
OFFLINE
Post: 5.573
Registrato il: 29/10/2007
Sesso: Maschile
Praefectus Castrorum
Il padrino
lol DO devi scaricarti la versione di pyton per i processori 64 bit :D

e non è detto manco che funzioni poichè il codice potrebbe essere diverso
[Modificato da siculo-calabrese 27/02/2009 23:42]
____________________________________________________




28/02/2009 11:18
OFFLINE
Post: 70
Registrato il: 29/01/2009
Città: CUNEO
Età: 37
Sesso: Maschile
Miles
Re:
=DO=, 27/02/2009 21.45:

mi dice che l'errore è qui


def readLong(fhandle):




Prova ad andare qui www.twcenter.net/forums/showthread.php?t=227839
In fondo al primo post c'è il codice che devi inserire, ho notato che è cambiato leggermente (hanno semplicemente tolto alcune righe vuote, non dovrebbe cambiar nulla ma prova).

PS gentilmente i mod potrebbero ricopiare/incollare il codice che c'è nel forum TWCenter e sostituirlo con quello che ho postato io? E' per sicurezza. Grazie ^^
01/03/2009 19:56
OFFLINE
Post: 2.289
Registrato il: 04/08/2007
Sesso: Maschile
Tribunus Angusticlavius
Ho un problema: io non capisco perchè dopo aver cleato il file testo nuovo non mi da quando clicco con il destroEdit Whith Idle

E poi a me dice che il comando non è riconosciuto come interno o esterno...

Perchè????Dove è che sbaglio?

Io ho Vista 64 bit ed ho scaricato AMD64


________________________________________________________________________________________________
Rome2 è uno strategico! Altrimenti sarebbe stato un ammazzali tutti e scappaaaaaaaaaaa scappaaaaaaaaaaaaaa!
01/03/2009 21:41
OFFLINE
Post: 5.573
Registrato il: 29/10/2007
Sesso: Maschile
Praefectus Castrorum
Il padrino
ma il primo post mi sembra scritto in italiano non in arabao, se non lo salvi con l'estensione .py (quella di pyton e scritta all'inizio del topic) non puoi editarlo come un file di pyton
____________________________________________________




01/03/2009 22:47
OFFLINE
Post: 1.763
Registrato il: 14/04/2007
Città: ACCIANO
Età: 32
Sesso: Maschile
Tribunus
quella 62 bit nn mi va visto che nn ho processore a 62 bit cmq ci ho rinunciato xD
--------------------------------------------------------




Forum King's mountain


02/03/2009 10:10
OFFLINE
Post: 2.289
Registrato il: 04/08/2007
Sesso: Maschile
Tribunus Angusticlavius
Re:
siculo-calabrese, 01/03/2009 21.41:

ma il primo post mi sembra scritto in italiano non in arabao, se non lo salvi con l'estensione .py (quella di pyton e scritta all'inizio del topic) non puoi editarlo come un file di pyton




Ti sbagli,se lo nomini .py non cambia niente,sempre documento di testo rimane....



________________________________________________________________________________________________
Rome2 è uno strategico! Altrimenti sarebbe stato un ammazzali tutti e scappaaaaaaaaaaa scappaaaaaaaaaaaaaa!
02/03/2009 12:08
OFFLINE
Post: 1.855
Registrato il: 29/04/2008
Città: TORINO
Età: 31
Sesso: Maschile
Tribunus
Re: Re:
Arma_87, 28/02/2009 11.18:




Prova ad andare qui www.twcenter.net/forums/showthread.php?t=227839
In fondo al primo post c'è il codice che devi inserire, ho notato che è cambiato leggermente (hanno semplicemente tolto alcune righe vuote, non dovrebbe cambiar nulla ma prova).

PS gentilmente i mod potrebbero ricopiare/incollare il codice che c'è nel forum TWCenter e sostituirlo con quello che ho postato io? E' per sicurezza. Grazie ^^




ragazzi, attivatevi, cambiate il txt allegato! quello vecchio confonde la gente!
ps
tanti altri hanno lo stesso problema di =DO=, nn penso che sia dovuto a qualche suo errore.
02/03/2009 14:17
OFFLINE
Post: 70
Registrato il: 29/01/2009
Città: CUNEO
Età: 37
Sesso: Maschile
Miles
Se avete problemi con il file .py guardate questa immagine

dovrebbe essere abbastanza esplicativa.
Se persistono i problemi, usate questo file -> uploaded.to/?id=ntxwpe
è il mio e funziona sicuramente ;)
[Modificato da Arma_87 02/03/2009 16:00]
03/03/2009 10:17
OFFLINE
Post: 1.855
Registrato il: 29/04/2008
Città: TORINO
Età: 31
Sesso: Maschile
Tribunus
LOL, HO TROVATO DOVE SBAGLIAVI!!!! IL TUO FILE SI CHIAMA UNPAKER! NN UNPACKER!!!! LOLL CORREGGA IL MODERATORE! SENNO APRO UN NUOVO TOPIC VERGINE DOVE RIFACCIO TUTTO IN MANIERA CORRETTA
03/03/2009 17:03
OFFLINE
Post: 70
Registrato il: 29/01/2009
Città: CUNEO
Età: 37
Sesso: Maschile
Miles
Re:
Sean Cappone, 03/03/2009 10.17:

LOL, HO TROVATO DOVE SBAGLIAVI!!!! IL TUO FILE SI CHIAMA UNPAKER! NN UNPACKER!!!! LOLL CORREGGA IL MODERATORE! SENNO APRO UN NUOVO TOPIC VERGINE DOVE RIFACCIO TUTTO IN MANIERA CORRETTA




Evvabbe' ragazzi, potevate anche dirmelo prima che era una cavolata simile XD
Be' il topic aspetta ad aprirlo, domani esce il gioco completo e quasi sicuramente questa guida andrà rifatta o modificata ^_^
03/03/2009 17:19
OFFLINE
Post: 1.855
Registrato il: 29/04/2008
Città: TORINO
Età: 31
Sesso: Maschile
Tribunus
io è gia tre gg che gioco alla campagna lol! a domani sui server, vi aspetto!
PS

uno spettacvolo i francesi e i prussiani
05/03/2009 10:02
OFFLINE
Post: 65
Registrato il: 13/03/2006
Città: GENOVA
Età: 56
Sesso: Maschile
Miles
non mi da "edit with IDLE"
CHE STRANO. ho installato il programmino pyton e ho messo la versione x86 in quanto ho VISTA a 32 b. ma non mi da quell'opzione e se provo a fare apri e selezione l'applicativo pyton non mi da nulla? mumble mumble dove sbaglio???
Simulare il disordine presume una perfetta disciplina, simulare paura .... il coraggio, simulare debolezza ....la forza
12/03/2009 18:32
OFFLINE
Post: 5.573
Registrato il: 29/10/2007
Sesso: Maschile
Praefectus Castrorum
Il padrino
Chiudo e tolgo l'evidenza poichè il treadh con l'uscita del gioco completo e i tool per modificarlo è diventato inutile
____________________________________________________




Amministra Discussione: | Riapri | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi

Feed | Forum | Bacheca | Utenti | Cerca | Login | Registrati | Amministra
Crea forum gratis, gestisci la tua comunità! Iscriviti a FreeForumZone
FreeForumZone [v.6.1] - Leggendo la pagina si accettano regolamento e privacy
Tutti gli orari sono GMT+01:00. Adesso sono le 19:24. Versione: Stampabile | Mobile
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com


© The Creative Assembly Limited.
All trade marks and game content are the property of The Creative Assembly Limited and its group companies.
All rights reserved.