I think the GiveReward function should try to give the item first and then give the currency. Players with a full inventory get the currency added and if their inventory is full the quest can't be completed. This allows them to keep trying to complete quest and gain infinite currency rewards delivered since there is no withdraw of it back on error. 

Not sure if quests should only give currency OR an item instead of both.