Kliens levédés utáni hiba.

Indította TheSLESH, 2019-08-30, 10:13:42

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á:)
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

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é).

C++ programmer at Gameloft

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?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

egyszerűen csak szar vagy és annyi..."publikus" védelmet nme tudsz be rakni xdd
Véletlennek azt nevezzük, amikor a számításaink kudarcot vallanak.

Igazából ez csak 2 tömb, a C++ kódot rakd ide, abból látom, hogy mi történik.

C++ programmer at Gameloft

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?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

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?

C++ programmer at Gameloft

2019-09-05, 11:44:32 #7 Utolsó szerkesztés: 2019-09-05, 11:51:46 Szerző: TheSLESH
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;
}
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

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.

C++ programmer at Gameloft