		long long nLevelCount = 0;
		long long levelSpan = 0;
		int ckind = m_pMyHuman->Is2stClass();
		int CurLevel = pMobData->CurrentScore.Level;
		if (ckind == 2)
		{
			if (CurLevel >= 399)
				CurLevel = 399;
			nLevelCount = (g_pNextLevel_G2[CurLevel + 1] + g_pNextLevel_G2[CurLevel]) / 10;
			levelSpan = g_pNextLevel_G2[CurLevel + 1] - g_pNextLevel_G2[CurLevel];
		}
		else
		{
			if (CurLevel >= 401)
				CurLevel = 401;
			nLevelCount = (g_pNextLevel[CurLevel + 1] + g_pNextLevel[CurLevel]) / 10;
			levelSpan = g_pNextLevel[CurLevel + 1] - g_pNextLevel[CurLevel];
		}
		if (levelSpan <= 0)
			levelSpan = nLevelCount;

		// Menu C "Pontos": strdef[304] = "C. POINT %14d / %d%%"
		// Esquerda = Chaos Point; direita = HOLD % (FakeExp).
		// Fonte canônica: Inv[63].EF1 (Carry[63].stEffect[0].cEffect), raw 1..150.
		// NÃO usar m_ucChaosLevel / MobName[12] aqui: GetCreateMob zera ChaosPoints
		// quando Guilty>0 (fúria) para nameplate PK → 0-75 = -75 e quebrava o Menu C pós-kill.
		int rawCp = 0;
		if (pMobData && pMobData->Carry[63].sIndex > 0)
			rawCp = static_cast<unsigned char>(pMobData->Carry[63].stEffect[0].cEffect);
		if (rawCp < 1 || rawCp > 150)
		{
			unsigned char nameplateCp = 0;
			if (m_pMyHuman)
				nameplateCp = m_pMyHuman->m_ucChaosLevel;
			else if (pMobData)
				nameplateCp = static_cast<unsigned char>(pMobData->MobName[12]);
			if (nameplateCp >= 1 && nameplateCp <= 150)
				rawCp = nameplateCp;
			else
				rawCp = 75; // neutro — evita -75 absurdo
		}
		int chaosDisplay = rawCp - 75;

		// HOLD %: fração da faixa de XP do level atual (span).
		// Denominador clássico (sum/10) zera o % em level>=99 (onde HOLD existe) com 15k/50k.
		int holdPct = 0;
		if (g_pObjectManager->m_nFakeExp > 0)
		{
			if (levelSpan > 0)
				holdPct = static_cast<int>(((double)g_pObjectManager->m_nFakeExp * 100.0) / (double)levelSpan);
			if (holdPct < 1)
				holdPct = 1; // dívida ativa nunca mostra 0%
			if (holdPct > 999)
				holdPct = 999;
		}

		sprintf(szStr, g_pMessageStringTable[304], chaosDisplay, holdPct);
		if (m_pGridCharFace)
		{
			m_pGridCharFace->m_GCPanel.nTextureSetIndex = 541;
			m_pGridCharFace->m_GCPanel.nTextureIndex = ckind + 3 * pMobData->Class;
		}
		if (m_pCIFakeExp)
		{
			m_pCIFakeExp->SetText(szStr, 0);
			if (holdPct < 80)
				m_pCIFakeExp->SetTextColor(0xFFFFFFFF);
			else
				m_pCIFakeExp->SetTextColor(0xFFFF0000);
		}
		if (m_pExpHold)
		{
			if (g_pObjectManager->m_nFakeExp <= 0)
				m_pExpHold->SetVisible(0);
			else
				m_pExpHold->SetVisible(1);
		}

		sprintf(szStr, "%d", pMobData->CurrentScore.Level + 1);
		m_Level = pMobData->CurrentScore.Level + 1;
		if (m_pCLevel)
			m_pCLevel->SetText(szStr, 0);
