l := ts.Data.EXP * (ts.EXPDist[i].Dmg) div total;
式の計算は左から行われます。
つまり、まず、敵の経験値に各自の与えたダメージが掛けられ、
その後に全員の与えたダメージの合計(ほんとはMAXHPなんだけど、
途中で死んだ人が与えた分のダメージは除外しないといけないため)
で割られます。
ここで、HPとEXPの高い敵を倒した場合、かけ算が発生した瞬間、
数値が32ビット整数値の限界(4Gか2Gくらい)を超えてエラーになります。
つまり、経験値とMVP経験値の部分をそれぞれ
l := 100 * (ts.EXPDist[i].Dmg) div total;
l := ts.Data.EXP * l div 100;
これに置き換えればエラーがでないはずです。