
ããªãé
ããŠãèšäºã®ãµã€ã¯ã«ã®ç¶ç¶ãå
¬éããŸãã
ç¥ãåãã®å ŽåïŒ
ãã®èšäºã§ã¯ãæ®ãã®ãã¡ã€ã«åœ¢åŒã«ã€ããŠèª¬æããŸãã
- BLOBã¯ããã€ããªããŒã¿ã®ã³ã³ãããšããŠæ©èœããå€ãããŒã¿åœ¢åŒã§ãã åºæ¬çãªãã©ã¡ãŒã¿ãŒïŒãµãŒããŒIPã¢ãã¬ã¹ãCRDã¬ã³ãŒããªã©ïŒãå«ãŸããŠããŸããã
- CDRïŒã³ã³ãã³ãèšè¿°ã¬ã³ãŒãïŒã¯ãã¢ããªã±ãŒã·ã§ã³ãšãã®ãã£ãã·ã¥ãã¡ã€ã«ã«é¢ããããŒã¿ãå«ããã€ããªãã¡ã€ã«ã§ãã çŸåšäœ¿çšãããŠããŸããã
- VDFã¯ãå€ãã®ããŒã¿ãå«ã¿ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿ããæ§é ãæã€ãã€ããª/ããã¹ããã¡ã€ã«ã§ãã BLOBããã³CDRã®ä»£æ¿ãšããŠèšèšãããŠããŸãã
- PAK-以åã¯Quake 1ã®å倧ãªéºç£ã§ããHalf-Life 1ã§äœ¿çšãããŠããŸãããããã䜿çšãããŠããŸããã
- VPK-ã²ãŒã èªäœã®å
éšã®ã²ãŒã ã¢ãŒã«ã€ãã®æ°ãã圢åŒã¯ãçŸåšç©æ¥µçã«äœ¿çšãããŠããŸãã ãã¡ã€ã«ã®è©³çްãªèª¬æã¯ã å
¬åŒãªãœãŒã¹ã§å
¥æã§ããŸãã ãã®èšäºã§ã¯ããã©ãŒãããã®æåã®ããŒãžã§ã³ã«ã€ããŠã®ã¿èª¬æããŸãã
é¢é£ããæ
å ±ãæ¯èŒçå°ãªããã¢ã«ãŽãªãºã ã®äŸãã»ãšãã©ãªãããããã®èšäºã¯æ
å ±æäŸã®ã¿ãç®çãšããŠ
ãããåè¿°ã®ãªããžããªã§ãã¹ãŠã衚瀺ã§ã
ãŸã ã
BLOBïŒãã€ããªã©ãŒãžãªããžã§ã¯ãïŒ
ã¯ã©ã€ã¢ã³ãã®ä»¥åã®ããŒãžã§ã³ã§ã¯ãSteamã¯ClienRegistry.blobãšããåäžã®ã³ããŒã§äœ¿çšãããŠããŸããã
æç¢ºãªããªãŒæ§é ãæã¡ãåã䜿ãæãããããŸã§ååž°çã«èªã¿åãããŸãã åå¥ã®ããããŒã¯ãããŸãã-å°ãªããšã1ã€ã®åå«ãæã€ã«ãŒãããŒããããã«ç§»åããŸãã 以äžã§ææããããã«ã
圢åŒã¯ããéç·åœ¢ã§ãã
ããŒãããããŒ
åããŒãã«ã¯ãããŒãèªäœã®ããããŒãšããŒãã®ããŒã¿ããããŒã®2ã€ã®ããããŒããããŸãã
ããŒãããããŒã®åœ¢åŒïŒ
struct TBLOBNodeHeader { UINT16 Magic; UINT32 Size; UINT32 SlackSize; };
ããžã㯠-ããŒãã®ã¿ã€ããèšè¿°ãããã£ãŒã«ãã å¯èœãªå€ïŒ
- 0x5001-åããŒããæã€åçŽãªããŒãã
- 0x4301ã¯å§çž®ãããããŒãã§ããããã®äžã®ããŒã¿ããã¬ãŒããééããåä¿¡ããããŒã¿ã®ããããŒãå床èªã¿åãå¿
èŠããããŸãïŒããã§ã¯ãéç·åœ¢æ§ããããŸãïŒïŒã
- ãã®ä»ã®å€ïŒéåžž0x0000ïŒ-åå«ãå«ãååä»ãããŒãã
ãµã€ãº -ããŒãã«ä¿åãããŠããããŒã¿ã®å®éã®ãµã€ãºïŒããããŒã¯å«ãŸããŸããïŒã
SlackSize-ãã¡ã€ã«å
ã®ã¢ã©ã€ã¡ã³ãçšã«æžã蟌ãŸããããŒã¿ãããã¯ã®ãµã€ãºã
å§çž®ããŒã¿ããããŒ
ããŒããå§çž®ãããŠããå Žåãå§çž®ããŒã¿ã®ããããŒã¯ããŒãã®ããããŒã®åŸã«ç¶ããŸãã
struct TBLOBCompressedDataHeader { UINT32 UncompressedSize; UINT32 unknown1; UINT16 unknown2; };
UncompressedSize-ã¡ã¢ãªãå²ãåœãŠãå¿
èŠããããçã®ãããŒã¿ã®ãµã€ãºã
unknown1ãunknown2-å®å
äžæãåžžã«0x00000001ãè§£æã«ã¯åœ±é¿ããŸããã
åè¿°ã®ããã«ãZLibããuncompressãåŒã³åºããåŸã«åä¿¡ããããŒã¿ã«ã€ããŠã¯ããã¹ãããããŒãåèªã¿åãããå¿
èŠããããŸãã
ããŒã¿è§£æ
ããŒãããããŒãèªã¿åããå¿
èŠã«å¿ããŠãã®å
容ãå±éãããšãæããæ¥œãããéšåãå
¥ããŸã-ããŒãã®å
容ãèªã¿åããŸãã ã¢ã«ãŽãªãºã ã¯å¯èœãªéãæé©åãããŸããããã®ããããã®ãããªæéã®åŸã«ãããææ¡ããããšã¯ããã»ã©å®¹æã§ã¯ãããŸããã§ããã
ããŒã¿ã®è§£æã¯TBLOBNodeHeader.Magicãã£ãŒã«ãã«äŸåããŸã-0x5001ã®å Žåãããã«åå«ããŒããèªã¿åããŸãã
ãã以å€ã®å Žåã¯ãããããŒTBLOBDataHeaderãèªã¿åããŸã
struct TBLOBDataHeader { UINT16 NameLen; UINT32 DataLen; };
ãã®ããããŒã®åŸã¯ããŒãã®ååã§ããããã®åŸã«ããŒã¿ãç¶ããŸãã
ããŒã¿ã§ã¯ãåå«ããŒãã®ããããŒãããã«èªã¿åãããããŒãã®ã¿ã€ãã«å¿ããŠåå²ãçºçããŸãã
- 0x5001ãŸãã¯0x4301ã®å Žå-æ°ããããŒããèªã¿åããŸãã
- ãã以å€ã®å Žåã¯ãããŒã¿ãåçŽãªãã®ãšããŠä¿åããŸãã
ããŒã¿è§£æC ++
void CBLOBNode::DeserializeFromMem(char *mem) { TBLOBNodeHeader *NodeHeader = (TBLOBNodeHeader*)mem; TBLOBDataHeader *DataHeader = (TBLOBDataHeader*)mem; char *data = NULL; if (NodeHeader->Magic == NODE_COMPRESSED_MAGIC) { mem += sizeof(TBLOBNodeHeader); TBLOBCompressedDataHeader *CompressedHeader = (TBLOBCompressedDataHeader*)mem; mem += sizeof(TBLOBCompressedDataHeader); UINT32 compSize = NodeHeader->Size, uncompSize = CompressedHeader->UncompressedSize; data = new char[uncompSize]; if (uncompress((Bytef*)data, (uLongf*)&uncompSize, (Bytef*)mem, compSize) != Z_OK) return; mem = data; NodeHeader = (TBLOBNodeHeader*)mem; DataHeader = (TBLOBDataHeader*)mem; } if (NodeHeader->Magic == NODE_MAGIC) { fIsData = false; fDataSize = NodeHeader->Size; fSlackSize = NodeHeader->SlackSize; fChildrensCount = GetChildrensCount(mem); fChildrens = new CBLOBNode*[fChildrensCount]; mem += sizeof(TBLOBNodeHeader); for (UINT i=0 ; i<fChildrensCount ; i++) { fChildrens[i] = new CBLOBNode(); fChildrens[i]->DeserializeFromMem(mem); NodeHeader = (TBLOBNodeHeader*)mem; DataHeader = (TBLOBDataHeader*)mem; if ((NodeHeader->Magic == NODE_MAGIC) || (NodeHeader->Magic == NODE_COMPRESSED_MAGIC)) mem += NodeHeader->Size + NodeHeader->SlackSize; else mem += sizeof(TBLOBDataHeader) + DataHeader->DataLen + DataHeader->NameLen; } } else { fIsData = true; fNameLen = DataHeader->NameLen; fDataSize = DataHeader->DataLen; mem += sizeof(TBLOBDataHeader); fName = new char[fNameLen+1]; memcpy(fName, mem, fNameLen); fName[fNameLen] = '\x00'; mem += fNameLen; UINT16 node; memcpy(&node, mem, 2); if ((node == NODE_MAGIC) || (node == NODE_COMPRESSED_MAGIC)) { DeserializeFromMem(mem); fData = NULL; } else { fData = new char[fDataSize]; memcpy(fData, mem, fDataSize); } } if (data != NULL) delete data; }
ãã«ãã¡ã€
procedure TBLOBNode.DeserializeFromMem(Mem: pByte); var NodeHeader: pBLOBNodeHeader; DataHeader: pBLOBDataHeader; CompressedHeader: TBLOBCompressedDataHeader; compSize, uncompSize: uint32; Data: Pointer; ChildrensCount, i: integer;
CDRïŒã³ã³ãã³ãèšè¿°ã¬ã³ãŒãïŒ
ããã¯blobã³ã³ããã«å«ãŸããã«ãŒãããŒãã«ããã€ãã®äž»èŠãªåå«ãããããã®å Žæã¯ããŒãã³ãŒããããŠããŸãïŒåå«ã«ã€ããŠãåãã§ãïŒã
- 0-ãã¡ã€ã«ããŒãžã§ã³ïŒæ°å€ã16ãããïŒ;
- 1-ã¢ããªã±ãŒã·ã§ã³ã¬ã³ãŒãã
- 2-ã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžã®èª¬æã
- 3ã4-ç®çãæ±ºå®ãããŠããªããããåã«ç¡èŠãããŸãã
- 5-å
¬éã¢ããªã±ãŒã·ã§ã³ããŒã
- 6-æå·åãããç§å¯éµã
å€ãã®ãéåžžã«éå±ã§é·ããªã¹ããããªãã¯èªãããšããã§ããŸããã äžéšã®ãã£ãŒã«ãã®ç®çã¯ãŸã äžæã§ããç³è«èšé²
ãã£ãŒã«ãïŒã€ã³ããã¯ã¹ã«ããBLOBããŒããïŒïŒ
- 1-ã¢ããªã±ãŒã·ã§ã³IDã
- 2-ã¢ããªã±ãŒã·ã§ã³ã®ååã
- 3-ã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªã
- 4-ãã£ãã·ã¥ãã¡ã€ã«ã®æå°ãµã€ãºã
- 5-ãã£ãã·ã¥ãã¡ã€ã«ã®æå€§ãµã€ãºã
- 6-èµ·åãã©ã¡ãŒã¿ãŒã®ãªã¹ããå«ãŸããŠããŸãã
- 7-ã¢ããªã±ãŒã·ã§ã³ã¢ã€ã³ã³ã®ãªã¹ããå«ãŸããŠããŸãã
- 8-ã¢ããªã±ãŒã·ã§ã³IDã æåã®èµ·åæã«èµ·åããå¿
èŠããããŸãã
- 9-垯åå¹
貪欲ã®ãã©ã°;
- 10-ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã®ãªã¹ãã
- 11-ã¢ããªã±ãŒã·ã§ã³ã®çŸåšã®ããŒãžã§ã³ã®IDã
- 12-ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ãã¡ã€ã«ã®ãªã¹ãã
- 13-ãã¹ãããŒãžã§ã³ã®çªå·ã
- 14-ååãšå€ã®ãã¢ã®ãªã¹ã圢åŒã®è¿œå ãã£ãŒã«ãã
- 15-ãã¹ãããŒãžã§ã³ã®ãã¹ã¯ãŒãã
- 16-ãã¹ãããŒãžã§ã³ã®IDã
- 17-ã²ãŒã ã®å
ã®ãã©ã«ããŒã
- 18-SkipMFPOverwriteãã©ã°ã
- 19-UseFilesystemDvrãã©ã°ã
èµ·åãã©ã¡ãŒã¿ãŒïŒ
- 1-説æã
- 2-ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã
- 3-ã¢ã€ã³ã³çªå·ã
- 4-ãã¹ã¯ãããã«ã·ã§ãŒãã«ãããååšããªãããšã瀺ããã©ã°ã
- 5-[ã¹ã¿ãŒã]ã¡ãã¥ãŒã«ã·ã§ãŒãã«ããããªãããšã瀺ããã©ã°ã
- 6-é·æéå®è¡ç¡äººã®ãã©ã°ã
ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ïŒ
- 1-ããŒãžã§ã³ã®èª¬æã
- 2-ããŒãžã§ã³çªå·ã
- 3-ãã®ããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšã§ããªãããšã瀺ããã©ã°ã
- 4-ãã®ããŒãžã§ã³ã®èµ·åãã©ã¡ãŒã¿ãŒIDã®ãªã¹ãã
- 5-ã³ã³ãã³ãã®åŸ©å·åããŒã
- 6-埩å·åããŒã®ååšã瀺ããã©ã°ã
- 7-IsRebasedãã©ã°ã
- 8-IsLongVersionRollã®ãã©ã°ã
ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ãã¡ã€ã«ïŒ
- 1-ãã£ãã·ã¥ãã¡ã€ã«IDã
- 2-ããŠã³ãããããã£ãã·ã¥ãã¡ã€ã«ã®ååã
- 3-ãã®ãã£ãã·ã¥ãã¡ã€ã«ã®ãªãã·ã§ã³æ§ãæ
åœãããã©ã°ã
ã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžã®èª¬æ
1-ãã±ããIDã
2-ããã±ãŒãžåã
3-ããã±ãŒãžã¿ã€ãã
4-ã»ã³ãåäœã®äŸ¡æ Œã
5-æ°åã®æéããããŸãã
6-ãã®ããã±ãŒãžã®ã¢ããªã±ãŒã·ã§ã³IDã®ãªã¹ãã
7-èµ·åãããã¢ããªã±ãŒã·ã§ã³ã®IDïŒWTFïŒïŒ;
8-ãã©ã°OnSubscribeRunLaunchOptionIndex;
9-ãªã¹ãRateLimitRecord;
10-å²åŒã®ãªã¹ãã
11-äºçŽæ³šæãã©ã°ã
12-ãã€ã€ãŒã®äœæã®èŠä»¶ã瀺ããã©ã°ã
13-åœå
äŸ¡æ ŒïŒã»ã³ãïŒã
14-åœéäŸ¡æ ŒïŒã»ã³ãïŒã
15-å¿
èŠãªããŒã®ã¿ã€ãã
16-ãã®ããã±ãŒãžããµã€ããŒã«ãã§å°çšã§ããããšã瀺ããã©ã°ã
17-ç¹å®ã®ã²ãŒã ã³ãŒãã
18-ãã®ã³ãŒãã®èª¬æã
19-ããã±ãŒãžãå©çšã§ããªãããšã瀺ããã©ã°ã
20-ã²ãŒã ã§ãã£ã¹ã¯ã®èŠä»¶ã«ãã©ã°ãç«ãŠãŸãã
21-åžå€å±çªã ãã®ã²ãŒã ãå©çšå¯èœã§ã;
22-ããã±ãŒãžãããŒãžã§ã³3ã§äœ¿çšå¯èœã§ããããšã瀺ããã©ã°ã
23-ååãšå€ã®ãã¢ã®ãªã¹ããšããŠã®è¿œå ãã£ãŒã«ãã
VDF
ã¯ã©ã€ã¢ã³ãèšå®ã¯ãã®åœ¢åŒã®ãã¡ã€ã«ã«ä¿åãããçŸåšã®ããŒãžã§ã³ã§ã¯ã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ããããŸãã ãã€ããªãã¡ã€ã«ãŸãã¯ããã¹ããã¡ã€ã«ã®ããããã§ãã
BLOBãšåæ§ã«ãããªãŒæ§é ã«ãªã£ãŠããŸãã
ãã€ããªãã¡ã€ã«ãæ€èšããŸãã æ§é ãšããããŒãç°ãªããã¡ã€ã«ã«ã¯ããã€ãã®çš®é¡ããããŸãããããŒãã®åœ¢åŒã¯åãã§ãã
åããŒãã¯ãããŒãã®ã¿ã€ãã説æãããã€ãã§å§ãŸãããã®åŸã«ããŒãã®ååãå«ãNULLã§çµããæååãç¶ããŸãã
ããŒãã®çš®é¡ïŒ
- 0-ãµãããŒãã®ã¿ãå«ãŸããŸãã
- 1-æååããŒã¿ã
- 2ã¯æŽæ°ã§ãã
- 3-å°æ°;
- 4-ãã€ã³ã¿ãŒïŒäœ??ïŒ;
- 5-Unicodeæååã
- 6-è²;
- 7-64ãããæŽæ°ã
- 8-ããŒãã®ãªã¹ãã®çµããã®ããŒã«ãŒã
ããŒãã®åå«ã®ãªã¹ããèªã¿åãå Žåãã¿ã€ãã8ã«ãªããŸã§ããŒããèªã¿åãããŸãã
VDF圢åŒã®ãã€ããªããŒãžã§ã³ã䜿çšããã¡ã€ã³ãã€ããªãã¡ã€ã«ãæ€èšããŸãã
appcache / appinfo.vdf
æåã«ã次ã®å
容ã®èŠåºãããããŸãã
struct TVDFHeader { uint8_t version1; uint16_t type; uint8_t version2; uint32_t version3; };
version1ããã³
version2ãã£ãŒã«ãã¯ã以åã¯çœ²åã®äžéšãšèŠãªãããŠããŸããããæéãçµã€ã«ã€ããŠå€æŽãããŸããã以åã¯0x24ãš0x06ã§ããããçŸåšã¯ãããã0x26ãš0x07ã§ãã
ã¿ã€ããã£ãŒã«ãã¯çœ²åã§ããã0x4456ïŒ 'DV'ïŒãå«ãŸããŸãã
version3ãã£ãŒã«ãã«ã¯åžžã«0x00000001ãå«ãŸããŸãã
ã¿ã€ãã«ãã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ã®ãªã¹ãã«ãªã£ãåŸãåèŠçŽ ã«ã¯ç¬èªã®ã¿ã€ãã«ããããŸãã
struct TVDFAppHeader { uint32_t AppID; uint32_t DataSize; };
ããããŒã®åŸã«ã¯ããªã¹ãã®æ«å°Ÿã®ã©ãã«ïŒæ«å°Ÿã®å Žåã¯0x00ïŒã®1ãã€ããšVDFããªãŒã®èŠçŽ ãå«ãããŒããã©ã¡ãŒã¿ãŒã®ãªã¹ãããããŸãã
appcache / packageinfo.vdf
ã¿ã€ãã«ã¯åã®ãã®ãšäŒŒãŠããŸãããæåã®3ã€ã®ãã£ãŒã«ãã®ã¿ãç°ãªããŸãã
- version1ãšversion2ã«ã¯ä»¥åã¯0x25ãš0x06ãå«ãŸããŠããŸããããçŸåšã¯0x27ãš0x06ã§ãã
- ã¿ã€ã -0x5556ïŒ 'UV'ïŒã
ããããŒã®åŸã«ã¯ãã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžãèšè¿°ããããŒãã®ãªã¹ãããããŸãã ãªã¹ãã®åèŠçŽ ã®åã«ã¯4ãã€ãã®æ°åãããããªã¹ãã®æåŸã«å°éãããš0xFFFFFFFFã«ãªããŸãã
ãµã³ãã«VDFããã¹ããã¡ã€ã« ã
PAK
Half-Life 1ã®æåã®ããŒãžã§ã³ã§äœ¿çšãããŠããå€ãã¢ãŒã«ã€ã圢åŒãå§çž®ã¯è¡ããããåãªããã¡ã€ã«ã®ã³ã³ãããŒã§ãã
ãã¡ã€ã«ããããŒïŒ
struct TPAKHeader { char Sign[4]; uint32_t DirectoryOffset; uint32_t DirectoryLength; };
眲å-眲åããPACKããå«ãŸããŸãã
DirectoryOffset-ã¢ã€ãã ã®ãªã¹ãã®å
é ã®ãªãã»ããã
DirectoryLength-ã¢ã€ãã ã®ãªã¹ãã®ãµã€ãºã
æå®ããããªãã»ããã«ã¯ãã¢ãŒã«ã€ãã«å«ãŸããèŠçŽ ã®ããããŒã®é
åããããŸãã
struct TPAKDirectoryItem { char ItemName[56]; uint32_t ItemOffset; uint32_t ItemLength; };
ããã§èª¬æããããšã¯äœããªããšæããŸãããã¹ãŠãæç¢ºã§ãã
VPK
ã²ãŒã ãã¡ã€ã«ã®ã¢ãŒã«ã€ãã®åœ¢åŒãäžé£ã®ãã¡ã€ã«ã®åœ¢åŒã§è¡šç€ºããããã®ãã¡ã®1ã€ã«ã¯ãã¡ã€ã«ã®å Žæã®èª¬æãå«ãŸããæ®ãã«ã¯ãã¡ã€ã«èªäœãå«ãŸããŸãã ã«ãŒããã¡ã€ã«ã®ååã¯ã<ã¢ãŒã«ã€ãå> _dir.vpkããšãã圢åŒã§ãæ®ãã¯ã<ã¢ãŒã«ã€ãå> _ <ã¢ãŒã«ã€ãçªå·> .vpkãã§ãã
次ã®ããããŒããå§ãŸãã«ãŒããã¡ã€ã«ã®æ§é ãæ€èšããŸãã
struct TVPKHeader { uint32_t Signature; uint32_t PaksCount; uint32_t DirSize; }
眲å -åžžã«0x55aa1234ãå«ãŸããŸãã
PaksCount-ãã¡ã€ã«ã®å
容ãå«ãã¢ãŒã«ã€ãã®æ°ã
DirSize-ãã¡ã€ã«ã«é¢ããã¡ã¿æ
å ±ãå«ãããŒã¿ãµã€ãºã
ããããŒã®åŸã¯ãèŠçŽ ãå«ãéå±€ãªã¹ãã§ãã ããã«ããªã¹ãæ§é ã¯ãã¡ã€ã«æ¡åŒµåãšããããžã®ãã¹ã§ãœãŒããããŸãã
ã€ãŸããæåã«ãã¡ã€ã«æ¡åŒµåãæã€NULLã§çµããè¡ã次ã«ãã®ãããªãã¡ã€ã«ãååšãããã¹ãæã€NULLã§çµããè¡ã次ã«ãã¡ã€ã«ã«é¢ããæ
å ±ãæã€ãã¡ã€ã«åïŒæ¡åŒµåãªãïŒãæã€NULLã§çµããè¡ãç¶ããŸãã ãªã¹ãã®åã¬ãã«ã®çµããã¯ç©ºã®æååã§ãã
æ¬äŒŒæ§é ã®äŸãæååéšåã®ã¿å€§ãã
hl2 /ããã
map1
map2
map3
wav
é³/ amb
amb1
amb2
é³/声
声1
voice2
ãã¡ã€ã«æ
å ±åœ¢åŒïŒ
struct TVPKDirectoryEntry { uint32_t CRC; uint16_t PreloadBytes; uint16_t ArchiveIndex; uint32_t EntryOffset uint32_t EntryLength uint16_t Dummy1; };
CRC-ãã¡ã€ã«ã®ãã§ãã¯ãµã ã
PreloadBytes-ãã®æ§é ã®åŸã®ã«ãŒããã¡ã€ã«ã«å«ãŸãããã¡ã€ã«ã®å
é ã®ããŒã¿ã®ãµã€ãºã
ArchiveIndex-ãããã®ãã¡ã€ã«ãå«ãã¢ãŒã«ã€ãçªå·ã
EntryOffset-ã¢ãŒã«ã€ãå
ã®ããŒã¿ãªãã»ããã
EntryLength-ããŒã¿ãµã€ãºã
ãããã«
ããã¯ãç§ãèªåã§éããããŸãã¯cs.rin.ruãã©ãŒã©ã ã®è³æã®å©ããåããŠéãããã¹ãŠã®Steamãã¡ã€ã«åœ¢åŒã®èª¬æã§ãã ãã®èšäºã远å ããŠåããŠãç§ã¯ãããåã®èšäºã«å®å
šã«å«ããããšãã§ããããšã«æ°ä»ããŸãã-ããªã¥ãŒã ã¯ããã»ã©å¢ãããå°ããªã¹ã¿ãããã³ã°ããŸã...
次ã®èšäºã§ã¯ããã¹ãŠã®ãµãŒããŒïŒã«ãŒããèªèšŒãã³ã³ãã³ããªã©ïŒã§ã®Steamã®åäœã«ã€ããŠèª¬æããŸãã ãã§ã«æä»£é
ãã®SteamNetwork2ãããã³ã«ãæ€èšãããŸãïŒHTTPSã«åºã¥ã3çªç®ã®ããŒãžã§ã³ã¯çŸåšåäœããŠããŸãïŒã