cdirt/ascii/
cdirt/data/BULL/
cdirt/data/ZONES/PENDING/
cdirt/pending/
cdirt/src/utils/
cdirt/utils/
/* ====================== Special cases for GIVE =========================== */

p = pl - max_players;

switch (p) {

#ifdef LOCMIN_FANTASY
   case MOB_FANTASY_SHOPKEEPERONE: 
     switch (ob) {
        case OBJ_FANTASY_GOLDNUGGET:
        case OBJ_QUARRY_NUGGET:
        case OBJ_QUARRY_NUGGET1: {
          bprintf ("The shopkeeper smiles at you as he places the golden "
             "sword on the counter\nfor you to take.\n\n");
          setobjstate (OBJ_FANTASY_GOLDSWORD, 0);
          break; 
        }
	 default:
	   bprintf("He doesn't seem to be interested in that.\n");
	   return; 
	   break;  
      }
      break;
    case MOB_FANTASY_SHOPKEEPERTWO:
      if (ob == OBJ_FANTASY_SILVER) {
        bprintf ("The shopkeeper smiles at you as he places the silver sword "
             "and the silver\narmor on the counter for you to take.\n\n");
        setobjstate (OBJ_FANTASY_SILVERSWORD, 0);
        setobjstate (OBJ_FANTASY_SILVERARMOR, 0); 
      }
      break; 
#endif


#ifdef LOCMIN_CATACOMB
  case MOB_CATACOMB_BEGGAR: 
    if (otstbit (ob, OFL_FOOD)) {
    bprintf("The Beggar thanks you and greedily devours the %s.\n",
             oname(ob));
    setpscore (mynum, pscore (mynum) + 50);
    eat (ob);
    bprintf ("After finishing his meal, the beggar stares at you and says '");
    switch (my_random () % 4) {
    case 0:
      bprintf ("Charity");
      o = OBJ_CATACOMB_PIT_NORTH;
      break;
    case 1:
      bprintf ("Faith");
      o = OBJ_CATACOMB_PIT_EAST;
      break;
    case 2:
      bprintf ("Wisdom");
      o = OBJ_CATACOMB_PIT_SOUTH;
      break;
    case 3:
      bprintf ("Courage");
      o = OBJ_CATACOMB_PIT_WEST;
      break;
    }
    bprintf ("'\n");

/* BUG here?
    for (i = 0; (j = pits[i++]) != -1;)
      setobjstate (j, 0);
*/
    setobjstate (o, 1);
    sendl(oloc(o), "A faint glow emanates from the pit.\n");
    return; }
    break;
  
#endif

#ifdef LOCMIN_FOREST
#ifdef LOCMIN_BLIZZARD
case MOB_BLIZZARD_SEAMAS:
  if (ob == OBJ_FOREST_PIPES) {
    setoloc (ob, pl, CARRIED_BY);
    setpscore (mynum, pscore (mynum) + 50);
    bprintf ("Seamas takes the pipes, thanks you, and begins to play a "
             "haunting melody.\n");
    broad ("A haunting pipe melody echoes through the air.\n");
    return; }
    break;
  
#endif
#endif

#ifdef LOCMIN_CAVE
#ifdef LOCMIN_VALLEY
case MOB_VALLEY_PIPER:
  if (ob == OBJ_CAVE_BAGPIPES)  {
    setoloc (ob, pl, CARRIED_BY);
    bprintf ("The Piper thanks you and begins to play.\n");
    setpscore (mynum, pscore (mynum) + 50);
    broad ("In the distance you hear a stirring bagpipe rendition of "
           "'Amazing Grace.'\n");
    return; }
    break;
  
#endif
#endif

#if defined(LOCMIN_START) && defined(LOCMIN_VALLEY)
case MOB_VALLEY_CHICKEN:
  if (ob == OBJ_START_UMBRELLA)  {
    setoloc (ob, pl, CARRIED_BY);
    bprintf ("It looks confused.\n");
    bprintf ("It probably doesn't know how to use it, but it takes the "
             "umbrella anyway.\n");
    setpscore (mynum, pscore (mynum) + 50);
    return;  
  }
	break;
#endif

#ifdef LOCMIN_CAVE
case MOB_CAVE_FORGEMASTER:
    if (ob == OBJ_CAVE_WARHAMMER || ob == OBJ_CAVE_ORE) {
    if (iscarrby(OBJ_CAVE_WARHAMMER, pl) ||
        iscarrby(OBJ_CAVE_ORE, pl)) {
          bprintf("With the Warhammer and Ore, The Forgemaster "
                  "creates and Axe of Mithril.\n");
          create(OBJ_CAVE_MITHRIL);
          destroy(OBJ_CAVE_ORE);
          broad("\001dThe ringing of metal being pounded can be "
                "heard in the distance.\n\003");
          set_quest(mynum, Q_MITHRIL);
        }
  }
break;

case MOB_CAVE_DIAMAR:
  if (ob == OBJ_CAVE_AXE)
    if (iswornby(OBJ_CAVE_WHISTLE, pl)) {
      bprintf("Diamar thanks you for returning his axe.\n"
              "In return he offers you his whistle as a reward.\n");
      setoloc(OBJ_CAVE_WHISTLE, mynum, CARRIED_BY);
      setoloc(OBJ_CAVE_AXE, pl, WIELDED_BY);
      return;
    }
break;
#endif

#ifdef LOCMIN_EVOLUTION
case MOB_EVOLUTION_PALAEONTOLOGIST: {
     int objs = 0;
     setoloc(ob, pl, CARRIED_BY);
     switch( ob )
       {
       default: return;  break;
       case OBJ_EVOLUTION_ASTRASPIS:
       case OBJ_EVOLUTION_DIPLOCAULUS:
       case OBJ_EVOLUTION_MEGAZOSTRODON:
       case OBJ_EVOLUTION_ARDEOSAURUS:
       case OBJ_EVOLUTION_GLEVOSAURUS:
       case OBJ_EVOLUTION_ICARONYCTERIS:
       case OBJ_EVOLUTION_HYLONOMUS:
       case OBJ_EVOLUTION_ARCHAEOPTERYX:
       case OBJ_EVOLUTION_ALPHADON:
       case OBJ_EVOLUTION_MICROTUS:
          if( iscarrby( OBJ_EVOLUTION_ASTRASPIS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_DIPLOCAULUS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_MEGAZOSTRODON, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_ARDEOSAURUS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_GLEVOSAURUS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_ICARONYCTERIS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_HYLONOMUS, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_ARCHAEOPTERYX, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_ALPHADON, pl) )
            objs++;
          if( iscarrby( OBJ_EVOLUTION_MICROTUS, pl) )
            objs++;
          if( objs >= 7)
	    {   
                bprintf( "He says \"Thank you!!  Now I can create my display case!!!\n" );
                strcpy(pname(pl), "");
                set_quest(mynum, Q_EVOLUTION);
	      }
        else
          {
          if( objs < 7 )
            bprintf( "He says \"Thank you, just what I needed, now if I just "
		    "had some more!!\"\n" );
          else
            {
	      bprintf("He says \"Thank you!  I'll add these to the others in "
		      "my display case.\n" );
            setpscore(mynum, pscore(mynum) + 200);
          }
        }
        break;
       }
      return;
   }
break;
#endif

#ifdef LOCMIN_OAKTREE
case MOB_OAKTREE_ENT:
  if (ob == OBJ_OAKTREE_WATER) {
    sendl(ploc(mynum), "The Ent says 'Ahhh! I needed that.  Thanks you. A "
      "word of advice to you:'\n             'Beware, to touch the silver "
      "spriti is death.'");
    setploc(pl, LOC_DEAD_DEAD);
    strcpy(pname(pl), "");
    eat(ob);
    dumpstuff(pl, ploc(pl));
    sendl(ploc(mynum), "The Ent makes like a tree and leaves east.\n");
    return;
  }
break;

case MOB_OAKTREE_DRYAD:
  if (ob == OBJ_BLIZZARD_GARLAND) {
    sendl(ploc(mynum), "The Dryad says 'Thank you!  It's very lovely.'\n");
    setobjstate(OBJ_OAKTREE_PORTAL1, 0);
    setploc(pl, LOC_DEAD_DEAD);
    strcpy(pname(pl), "");
    dumpstuff(pl, ploc(pl));
    destroy(ob);
    sendl(ploc(mynum),"The Dryad opens a portal in her tree and goes inside.\n");
    return;
  }
break;
  
case MOB_OAKTREE_VIOLA:
    if (ob == OBJ_OAKTREE_FAN) {
    bprintf("Viola kisses you%s.\n", psex (mynum) == 0 ? "" : " on the cheek");
    bprintf("Viola says 'Thank you, %s.  Won't you please come in?'\n",
             psex (mynum) == 0 ? "kind sir" : "madame");
    setpscore (mynum, pscore (mynum) + 50); }
    break;

#endif

#ifdef LOCMIN_GROVE
case MOB_GROVE_DINTHIAR:
  if (ob == OBJ_EFOREST_CROWN) {
    bprintf("Dinthiar says 'How kind of you for returning my crown! Please, "
           "let me give you\n"
            "something in return to help you find your way back.'\n"
            "Dinthiar gives you the elvencloak.\n"
            "He puts the crown upon his stately brow and smiles.\n");
    setoloc(OBJ_EFOREST_CROWN, MOB_GROVE_DINTHIAR+max_players, WORN_BY);
    create(OBJ_GROVE_ELVENCLOAK);
    setoloc(OBJ_GROVE_ELVENCLOAK, mynum, CARRIED_BY);
    return; }
break;
#endif

#ifdef LOCMIN_VOLCANO
case MOB_VOLCANO_MAYOR:
   if (ob == OBJ_VOLCANO_NOTICE) {
    sendl(ploc(mynum), "The Mayor says, 'You have decided to help us? Thank "
                       "you!  Here is something for your kindness!'\n" );
    create( OBJ_VOLCANO_GOLDPIECE );
    setoloc(OBJ_VOLCANO_GOLDPIECE, mynum, CARRIED_BY);
    destroy(ob);
    return;
  }
break;

case MOB_VOLCANO_DWARF:
   if ( ob == OBJ_VOLCANO_GOLDPIECE ) {
    sendl(ploc(mynum), "The Dwarf says, 'Take this in return.  It will "
                       "help you defeat the ant queen.'\n" );
    create( OBJ_VOLCANO_CRYSKNIFE );
    setoloc( OBJ_VOLCANO_CRYSKNIFE, mynum, CARRIED_BY );
    destroy(ob);
    return;
  }
break;
#endif /* LOCMIN_VOLCANO */

#ifdef LOCMIN_THYRANNEN
case MOB_THYRANNEN_BROTHER1: {
  if (ob == OBJ_THYRANNEN_POT && state (OBJ_THYRANNEN_POT) == 1) {
      bprintf ("He refuses.\n");
      return; }
  if (ob == OBJ_THYRANNEN_POT ||
      ob == OBJ_THYRANNEN_SOIL ||
      ob == OBJ_THYRANNEN_SPADE ||
      ob == OBJ_THYRANNEN_SEED) {
    int i = 0;    
    if( iscarrby( OBJ_THYRANNEN_POT, p+max_players) ) i++;
    if( iscarrby( OBJ_THYRANNEN_SOIL, p+max_players) ) i++;
    if( iscarrby( OBJ_THYRANNEN_SPADE, p+max_players) ) i++;
    if( iscarrby( OBJ_THYRANNEN_SEED, p+max_players) ) i++;
    
    if (i < 3)
      bprintf ("The old man thanks you.\n");
    else {                                     /* he has everything */
      setobjstate (OBJ_THYRANNEN_POT, 1);
      destroy (OBJ_THYRANNEN_SOIL);
      destroy (OBJ_THYRANNEN_SPADE);
      destroy (OBJ_THYRANNEN_SEED);
      setoloc (OBJ_THYRANNEN_POT, mynum, CARRIED_BY);
      send_msg (sendloc(pl), 0, LVL_MIN, LVL_MAX, pl, NOBODY,
		"\001p%s\003 smiles, and gently puts the soil, and the seed "
		"in the pot. Then he\npacks it with the spade, and waters "
		  "it.\n", pname(pl));
      bprintf ("\001p%s\003 gives you the %s.\n", pname(pl),
	       oname(OBJ_THYRANNEN_POT));
      send_msg (sendloc(pl), 0, LVL_MIN, LVL_MAX, pl, mynum,
		"\001p%s\003 gives \001p%s\003 the %s.\n",
		pname(pl), pname(mynum), oname(OBJ_THYRANNEN_POT));
      setpscore (pl, mynum);
    }
  }
  else {         /* not a special object */ 
    bprintf("You keep it, thanks.\n");
    return;
  }
break;
}

case MOB_THYRANNEN_BROTHER2: {
  if (ob == OBJ_THYRANNEN_POT ||
      ob == OBJ_THYRANNEN_GUANO ||
      ob == OBJ_THYRANNEN_GOLD ||
      ob == OBJ_THYRANNEN_IRON) {
    i = 0;
    if( iscarrby( OBJ_THYRANNEN_POT, p+max_players ) ) i++;
    if( iscarrby( OBJ_THYRANNEN_GUANO, p+max_players) ) i++;
    if( iscarrby( OBJ_THYRANNEN_GOLD, p+max_players) ) i++;
    if( iscarrby( OBJ_THYRANNEN_IRON, p+max_players) ) i++;
    
    if (i  < 3)
      bprintf("The old alchemist thanks you.\n");
    else {                                     /* he has everhthing he needs */
      setobjstate (OBJ_THYRANNEN_CAULDRON, 1);
      destroy (OBJ_THYRANNEN_POT);
      destroy (OBJ_THYRANNEN_GUANO);
      destroy (OBJ_THYRANNEN_GOLD);
      destroy (OBJ_THYRANNEN_IRON);
      setoloc (OBJ_THYRANNEN_CHARM, oloc(OBJ_THYRANNEN_CAULDRON), IN_ROOM);
      send_msg (sendloc(pl), 0, LVL_MIN, LVL_MAX, pl, NOBODY,
		"\001p%s\003 gently takes each petal from the flower, and "
		"puts them in the\ncauldron.  Next he drops in the iron ore, "
		"then the gold ore, and finally the\nbat guano.  He utters "
		"some incantations, and suddenly the water begins to\nboil.  "
		"The alchemist repeats the chant, over and over, louder and "
		"louder,\nuntil your ears ring with his chants... Then he "
		"stops, seconds pass, then\nwith a loud crash the cauldron "
		"cracks!  It's boiling contents drain onto the\nground, and "
		"the old alchemist drops to the ground in exhaustion.\n",
		pname(pl));
      bprintf ("The old man tells you, \"Now take the charm, and defeat "
               "draknor!\"\n");
      setpscore (pl, mynum);
    }
  }
  else {
    bprintf("No thanks, you keep it.\n");
    return;
  }
break;
}
#endif


default:
	break; 
}
#ifdef LOCMIN_VALLEY
  if (ob == OBJ_VALLEY_ROSE && psex (mynum) != psex (pl)) {
    bprintf ("You give %s the %s.\n", him_or_her (pl), oname (ob));
    setpscore (mynum, pscore (mynum) + 60);
    setpscore (pl, pscore (pl) + 50);
    sendf(pl, "%s gives you the %s.\n", see_name (pl, mynum), oname(ob));
    setoloc (ob, pl, CARRIED_BY);
    if (++odamage (ob) >= 2) {
      sendl(ploc(pl), "The %s turns to dust.\n", oname (ob));
      destroy (ob);
    }
    return;
  }
#endif

#ifdef LOCMIN_CASTLE
  if (ob == OBJ_CASTLE_RUNESWORD && plev(mynum) < LVL_WIZARD) {
    bprintf ("The Runesword does not wish to be given away.\n");
    return;
  }
#endif