Drat, beaten by Khris 
Without looking further at your code:
Code: AGS

Without looking further at your code:
function cNPC_UseInv()
{
if (player.HasInventory(iCoupon)) // THIS PART SHOULD BE:
if (player.ActiveInventory==iCoupon)// ------as if giving iCoupon inventory to NPC otherwise Dialog options will start because you put if player HAS iCoupon.
{
dCoupon.Start();
}
else
{
cNPC.Say("This is not the free coupon..");
player.Say("I'll try to find it A.S.A.P.");
cNPC.Say("Best of Luck.");
}
}