Betettem a Publikált Eter védelmet, átírtam a Tea ROUND-ot, bontóban, indítóban, és dump-ban is, újra csomagoltam az egész klienst, és egy érdekes hibám lett.
CEffectManager::RegisterEffect - LoadScript(d:/ymir work/effect/etc/dropitem/dropitem.mse) Error
továbbá a kliens indulásakor, egy ilyen hibaablak ugrik fel:
Cannot load image (filename: D:/Ymir Work/UI/Cursor/cursor_hvsize.sub)
Természetesen, minden a helyén van, és próbáltam azt is, hogy át csomagoltam egy másik fájlba az érintett mse-t, és sub-ot.
Kerestem a neten is, két témát találtam, pont ezzel a hibával, (http://metin2hungary.net/index.php?topic=199087.0) csak sajnos, ott a srác nem kapott segítséget.
Ha valaki tudja a megoldást, azt szívesen várom nagy szükségem lenne rá:)
Elég generikus hibaüzenet, nem tudja beolvasni. Bárhol elronthattad a kódot, ebből hogy találná ki bárki? Másold ide az összes részt, amit módosítottál (meg az eredetiket is mellé).
A hiba nem a kliens védésnél történt, hanem a csomagolásnál valami... Pár napja próbálgatom, de sajnos ugyan úgy hibádzik, és már ötletem sincsen... Ha visszarakom a tea-t 32-re, akkor is, tehát a csomagolás közben rontottam el valamit..
List SecurityExtNameList
{
"txt"
"msk"
"msa"
"msm"
"py"
"mss"
"mse"
"msf"
"spt"
"atr"
"dds"
"raw"
"wtr"
"mde"
"tga"
"sub"
"jpg"
"gr2"
}
List CompressExtNameList
{
"txt"
"msk"
"msa"
"msm"
"py"
"mss"
"mse"
"msf"
"spt"
"atr"
"dds"
"raw"
"wtr"
"mde"
"tga"
"sub"
"jpg"
"gr2"
}
lehet itt?
egyszerűen csak szar vagy és annyi..."publikus" védelmet nme tudsz be rakni xdd
Igazából ez csak 2 tömb, a C++ kódot rakd ide, abból látom, hogy mi történik.
a két tömörítési eljárás (type 2 és type1) használható együtt, vagy csak külön-külön működőképesek?
Nem emlékszem már hogyan néz ki ez konkrétan a Metinben, mert jó ideje nincs még egy kliens se a gépemen, de működniük kell szerintem. Ha jól értelmezem, kétszer tömöríted a fájlokat. Arra figyeltél, hogy kicsomagoláskor fordított sorrendben fusson le a két kitömörítő algoritmus?
Az egér hibát sikerült orvosolnom, viszont azt még mindig nem, hogy nem tudja "kibontani" az ui fájlokat (corner, bottom stb)
SYSERR: CResourceManager::GetResourcePointer: File not exist d:/ymir work/ui/pattern/Board_Corner_LeftTop.tga
SYSERR: CANNOT_FIND_PACK_FILE [d:/ymir work/ui/pattern/board_corner_lefttop.tga]
CResource::Load file not exist d:\ymir work\ui\pattern\board_corner_lefttop.tga
SYSERR: CResourceManager::GetResourcePointer: File not exist d:/ymir work/ui/pattern/Board_Corner_LeftBottom.tga
SYSERR: CANNOT_FIND_PACK_FILE [d:/ymir work/ui/pattern/board_corner_leftbottom.tga]
CResource::Load file not exist d:\ymir work\ui\pattern\board_corner_leftbottom.tga
SYSERR: CResourceManager::GetResourcePointer: File not exist d:/ymir work/ui/pattern/Board_Corner_RightTop.tga
SYSERR: CANNOT_FIND_PACK_FILE [d:/ymir work/ui/pattern/board_corner_righttop.tga]
CResource::Load file not exist d:\ymir work\ui\pattern\board_corner_righttop.tga
SYSERR: CResourceManager::GetResourcePointer: File not exist d:/ymir work/ui/pattern/Board_Corner_RightBottom.tga
SYSERR: CANNOT_FIND_PACK_FILE [d:/ymir work/ui/pattern/board_corner_rightbottom.tga]
CResource::Load file not exist d:\ymir work\ui\pattern\board_corner_rightbottom.tga
Természetesen, ott van a helyén, illetve megpróbáltam újra csomagolni egy másik fájlba, hátha az sérült, de ugyan az... Ezért kérdeztem, hogy hátha az a hiba, hogy a két tömörítési algoritmus nem fér meg egymás mellett, most viszont újra csomagoltam az egész klienst, elöbb type2-vel, most csak type1-el, viszont a hiba ugyan az még mindig... Mintha nem lennének becsomagolva a board részek, megnéztem kicsomagolva is, ott vannak, megnéztem becsomagolás elött az mbscypt fájlt, abban is benne vannak... Érdekes minden esetre.
CResource * CResourceManager::GetResourcePointer(const char * c_szFileName)
{
if (!c_szFileName || !*c_szFileName)
{
TraceError("CResourceManager::GetResourcePointer: filename error!");
return NULL;
}
const char * c_pszFile;
DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
CResource * pResource = FindResourcePointer(dwFileCRC);
if (pResource) // 이미 리소스가 있으면 리턴 한다.
return pResource;
const char * pcFileExt = strrchr(c_pszFile, '.');
#ifdef _DEBUG
if (!IsFileExist(c_szFileName) )
{
if( pcFileExt == NULL || (stricmp( pcFileExt, ".fnt" ) != 0) ) {
TraceError("CResourceManager::GetResourcePointer: File not exist %s", c_szFileName);
}
}
#endif
CResource * (*newFunc) (const char *) = NULL;
if (pcFileExt)
{
static char s_szFileExt[8 + 1];
strncpy(s_szFileExt, pcFileExt + 1, 8);
TResourceNewFunctionPointerMap::iterator f = m_pResNewFuncMap.find(s_szFileExt);
if (m_pResNewFuncMap.end() != f)
newFunc = f->second;
}
if (!newFunc)
{
TraceError("ResourceManager::GetResourcePointer: NOT SUPPORT FILE %s", c_pszFile);
return NULL;
}
pResource = InsertResourcePointer(dwFileCRC, newFunc(c_pszFile));
return pResource;
}
Üzenet összefésülés: 2019-09-05, 11:49:15
bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
{
FinderLock lock(m_csFinder);
static std::string strFileName;
if (0 == ConvertFileName(c_szFileName, strFileName))
{
LPCVOID Protect;
return m_RootPack.Get(rMappedFile, strFileName.c_str(), pData, &Protect);
}
else
{
DWORD dwFileNameHash = GetCRC32(strFileName.c_str(), strFileName.length());
SCache* pkCache = __FindCache(dwFileNameHash);
if (pkCache)
{
rMappedFile.Link(pkCache->m_dwBufSize, pkCache->m_abBufData);
return true;
}
CEterFileDict::Item* pkFileItem = m_FileDict.GetItem(dwFileNameHash, strFileName.c_str());
if (pkFileItem)
if (pkFileItem->pkPack)
{
LPCVOID Protect;
bool r = pkFileItem->pkPack->Get2(rMappedFile, strFileName.c_str(), pkFileItem->pkInfo, pData, &Protect);
//pkFileItem->pkPack->ClearDataMemoryMap();
return r;
}
}
#ifdef _DEBUG
TraceError("CANNOT_FIND_PACK_FILE [%s]", strFileName.c_str());
#endif
return false;
}
a CANNOT_FIND_PACK_FILE hiba pedig ide vezet vissza, (protect-et adtam itt hozzá)
Üzenet összefésülés: 2019-09-05, 11:51:46
Ez pedig a Get2 függvény, a Get függvényt is hasonló képpen módosítottam.
bool CEterPack::Get2(CMappedFile& out_file, const char * filename, TEterPackIndex * index, LPCVOID * data, LPCVOID * Protect)
{
if (!index)
{
return false;
}
out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size);
bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY ||
index->compressed_type == COMPRESSED_TYPE_PANAMA );
if( bIsSecurityCheckRequired )
{
#ifdef CHECKSUM_CHECK_MD5
MD5_CTX context;
GenerateMD5Hash( (BYTE*)(*data), index->data_size, context );
if( memcmp( index->MD5Digest, context.digest, 16 ) != 0 )
{
return false;
}
#else
DWORD dwCrc32 = GetCRC32((const char*)(*data), index->data_size);
if( index->data_crc != dwCrc32 )
{
return false;
}
#endif
}
if (COMPRESSED_TYPE_COMPRESS == index->compressed_type)
{
CLZObject * zObj = new CLZObject;
if (!CLZO::Instance().Decompress(*zObj, static_cast<const BYTE *>(*data)))
{
TraceError("Failed to decompress : %s", filename);
delete zObj;
return false;
}
out_file.BindLZObject(zObj);
*data = zObj->GetBuffer();
}
else if (COMPRESSED_TYPE_SECURITY == index->compressed_type)
{
CLZObject * zObj = new CLZObject;
if (!CLZO::Instance().Decompress(*zObj, static_cast<const BYTE *>(*data), s_adwEterPackSecurityKey))
{
TraceError("Failed to encrypt : %s", filename);
delete zObj;
return false;
}
out_file.BindLZObject(zObj);
*data = zObj->GetBuffer();
}
else if (COMPRESSED_TYPE_PANAMA == index->compressed_type)
{
CLZObject * zObj = new CLZObject;
__Decrypt_Panama(filename, static_cast<const BYTE*>(*data), index->data_size, *zObj);
out_file.BindLZObjectWithBufferedSize(zObj);
*data = zObj->GetBuffer();
}
else if (COMPRESSED_TYPE_HYBRIDCRYPT == index->compressed_type || COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
{
#ifdef __THEMIDA__
VM_START
#endif
CLZObject * zObj = new CLZObject;
if( !m_pCSHybridCryptPolicy->DecryptMemory(string(filename), static_cast<const BYTE*>(*data), index->data_size, *zObj) )
{
return false;
}
out_file.BindLZObjectWithBufferedSize(zObj);
if( COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
{
BYTE* pSDBData;
int iSDBSize;
if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock(string(filename), pSDBData, iSDBSize) )
{
return false;
}
*data = out_file.AppendDataBlock( pSDBData, iSDBSize );
}
else
{
*data = zObj->GetBuffer();
}
#ifdef __THEMIDA__
VM_END
#endif
}
*Protect = *data;
return true;
}
A __GetFileCRC és a FindResourcePointer függvényeket is másold be. Legelőször azok közül hasal el valamelyiknél. Bár kelleni fog valószínűleg még jópár függvény majd, mire eljutunk a hibához.