То что 3 меньше 4 это я догадался
Фишка не в том.
if( myself->HaveMemo(c1,360) == 1 && gg->Rand(100) < 5 ) Это условие срабатывает, кода тебе выпал новый кусок документа. При этом если у тебя уже есть 4 куска (переход по условию else) у тебя забирают 4 куска и не дают тот 1 который выпал.
Т.е. в итоге если у тебя 3 куска - тебе дают четвертый.
Если у тебя уже есть 4 куска то ПЯТЫЙ тебе просто в инвентарь не ложат, а сразу ложат Receipt of Supply и забирают куски из инвентаря.