I know it's complicated, but add this after EVERYTHING is done on the monster
that will receive the delivery.
Change any foos that are noted to be removed and replaced.  Also, the things
the monster says can be changed...those are in the force_me()s.
NOTE:  It is vital that you make sure it includes <daemons.h>...thanks.
void catch_tell(string str) {
    object ob, obbit, obbofoo;
    string abba, bobo, cats;
    int foo1, foo2, foo3, foo4, foo5, foo6;
    if(sscanf(str, "%s gives you %sfoo%s", abba, bobo ,cats) == 3) {
// Replace the foo with any single important word in the object's
// short description.
        if(!(ob=present((abba=lower_case(abba)), environment(this_object()))))
return;
        if(!present("foo", this_object())) return;
        obbit = present("foo", this_object());
// Give a UNIQUE id to the 'foo's.  Not 'sword'  ..something like..
// deliv_sword..
        foo1 = obbit->query_devtimestart(); 
        foo2 = obbit->query_devtimeperiod();
        foo3 = foo1 + foo2;
        foo4 = obbit->query_dev_value();
        foo5 = obbit->query_dev_exp();
        foo6 = foo3 - time();
        obbit->remove();
       //These foos can remain the way they are, however.
   if(foo6<0){
        force_me("say Why, you're late!  I shall not pay you for
such vile service!");
        say(this_object()->query_cap_name()+" hands
"+this_player()->query_cap_name()+"  a receipt.");
        write(this_object()->query_cap_name()+" hands you a receipt.");
        obbofoo = new("/std/object.c");
        obbofoo->set_name("receipt");
        obbofoo->set_id(({ "receipt_deliv", "delivery receipt" }));
        obbofoo->set_short("a delivery receipt");
        obbofoo->set_long("A delivery receipt.  It is marked LATE.  It must"
 " be returned to the headmaster before any more deliveries can be made.");
        obbofoo->set_property("late", 1);
        obbofoo->move(this_player());
        return;
        }
   if(foo6>0){
        force_me("say Oooh..my delivery!  Thanks!");
        say(this_object()->query_cap_name()+" hands
"+this_player()->query_cap_name()+" some cash and a receipt.");
obbofoo = new("/std/object.c");
        obbofoo->set_name("receipt");
        obbofoo->set_id(({ "receipt_deliv", "delivery receipt" }));
        obbofoo->set_short("a delivery receipt");
        obbofoo->set_long("A delivery receipt.  It is marked ON TIME.  It must"
 " be returned to the headmaster before any more deliveries can be made.");
        obbofoo->set_property("late", 0);
        obbofoo->move(this_player());
        write(this_object()->query_cap_name()+" hands you some cash and a receipt.");
        this_player()->add_exp(foo5+(foo6/5));
        this_player()->add_money("foo", foo4+(foo6/5));
// Replace the foo with the type of currency.
        return;
}
    }
}
