次の関数では、異常な値を受け取っています。
(ハンガリー語表記は考慮しないでください。私は古い情報源の規則に従っています)
int nMaxHP = m_pDefender->GetMaxHitPoint();
u_long nPercentHP = 0;
if( nMaxHP > 0 )
nPercentHP = ( nHP * 100 ) / nMaxHP;
CString show;
show.Format( "%u %d %d", nPercentHP, nMaxHP, nHP );
pUserAttacker->AddTextD3D( show, 0xffff0000 );
これはゲーム クライアントのダメージ コードの一部でありm_pDefender
、大きなライオンの柱でnHP
あり、ダメージを受けた後のヒットポイントであり、一目瞭然nMaxHP
です。
AddTextD3D( CString format, DWORD color )
画像でわかるように、メッセージを表示します。
つまり、
34.000.000 = nMaxHP
33.999.999 = nHP
33.999.999 * 100 = 3.399.999.900
3.399.999.900 / 34.000.000 = 99 (倍精度では 99.99999705882353)
問題は、なぜnPercentHP
4294967270 なのかということです。