me not needed concurents, but small can help.
i compare with original ch4 (0x888E10) and find differences and mistakes:
must be:
UINT nTargetID, nPledgeType = CPledge::MAIN_CLAN;
packet = Disassemble(packet, "d", &nTargetID);
if(pPledge->CanJoin(nPledgeType))
{
.
Point2...