You can do that adding an event handler for each civilian. To do that in no time you should make an area trigger as big as the mission area, activated by the civilian.
Then in the onActivation field write
{_x addEventHandler["killed", {_this exec "money.sqs"}]} forEach thisList
After that, create a script named "money.sqs" containing the following code
_moneyTaken = false
_killed = _this select 0
_killer = _this select 1
_killedPos = getPos _killed
;wait unitil the player is close enough to take money
@(_killer distance _killedPos < 4)
;add "take money" action if the killed civilian has money (60% of chance)
_rnd = random(1)
? (_rnd <= 0.6): goto "hasMoney"
goto "end"
#hasMoney
#takeMoney
;store the money owned by player before taking more from the corpse
_currentMoney = playerMoney
;stop until the player is within the action range
@(_killer distance _killedPos < 4)
_moneyAction = _killer addAction["Take the money", "takeMoney.sqs"]
;the script stops until the player is too far from the target or
;he takes the money
@((_killer distance _killedPos >= 4) or (playerMoney > _currentMoney))
;if the player is too far from the corpse remove the action and restart the loop
? (_killer distance _killedPos >= 4): goto "removeAction"
;else the player has taken the money and exit the loop
goto "endLoop"
#removeAction
_killer removeAction _moneyAction
goto "takeMoney"
#endLoop
_killer removeAction _moneyAction
goto "end"
#end
exit
and create a second script named "takeMoney.sqs" (while the first script name can be wathever you want, you just need to change the event handler parameters in the trigger, the name of this script is important or nothing will work!!!!)
_money = 5 + floor(random(46))
playerMoney = playerMoney + _money
(_this select 1) removeAction (_this select 2)
exit
I tested it in Armed Assault since I don't have OFP installed but since it is written in SQS syntax and I used only OFP commands it should work in that game too.
There is only one known problem: if you killed a civilian which drops money, then go far enough from its location to have your action removed and then kill another civilian who also drops money and you take them from this last dead guy, your action will be removed also for the first guy you killed because the script waits until whether you're not too far from the corpse or you've already taken the money and the check is performed on the playerMoney. So if you take the money from the second guy your amount raises but, doing so, also the script for the other guy detects your money has raised and interrupt the script.
Unfortunately OFP doesn't allow to define custom object variable like ArmA, so I can't make a check for example on an object variable for each civilian called for example "civilianMoney". If I could do this I could check if the civilian has still it's money after the player will have taken it. If someone can find a way to do this also in OFP is welcome, otherwise I suggest you immediately take the money from the corpse as soon as you have the chance before approaching another corpse and take its money.