/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: obj_cmds.cc,v 1.2 1999/06/05 23:29:14 greear Exp $
// $Revision: 1.2 $  $Author: greear $ $Date: 1999/06/05 23:29:14 $

//
//ScryMUD Server Code
//Copyright (C) 1998  Ben Greear
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// To contact the Author, Ben Greear:  greear@cyberhighway.net, (preferred)
//                                     greearb@agcs.com
//


// obj_cmds.cc, commands that objects 'do' to others.  Used in room scripts
//            primarily.

#include "misc.h"
#include "misc2.h"
#include "rm_cmds.h"



/* Only works for those in the current room!! */
int object::tell(int i, const String* name, String& msg, room& rm) {
   critter* crit_ptr = rm.haveCritNamed(i, name, ~0);

   if (crit_ptr) {
      return do_tell(msg, *crit_ptr);
   }//if
   return -1;
}//tell


int object::do_tell(const char* msg, critter& targ) {

   String buf(200);

   String tag;
   String untag;

   if (targ.isUsingClient()) {
      tag = "<TELL>";
      untag = "</TELL>";
   }
   else if (targ.isUsingColor()) {
      tag = *(targ.getTellColor());
      untag = *(targ.getDefaultColor());
   }

   Sprintf(buf, "%S%s\n%S",
           &tag, msg, &untag);
   show(buf, targ);

   return 0;
}//do_tell


int object::com_recho(const String* msg, room& rm) {
   return rm.com_recho(msg);
}
   

int object::com_zecho(const String* msg, room& rm) {
   return rm.com_zecho(msg);
}


int object::wizchat(const char* message, room& rm) {
   Cell<critter*> cell(pc_list);
   critter* crit_ptr;
   String buf(200);
   String msg(message);

   String tag;
   String untag;

   while ((crit_ptr = cell.next())) {
      if (crit_ptr->getMode() == MODE_LOGGING_IN){
         continue;
      }
      if (crit_ptr->isWizchat()) { //if channel wizchat
         if (crit_ptr->isUsingClient()) {
            tag = "<GOSSIP>";
            untag = "</GOSSIP>";
         }
         else if (crit_ptr->isUsingColor()) {
            tag = *(crit_ptr->getGossipColor());
            untag = *(crit_ptr->getDefaultColor());
         }
         else {
            tag = "";
            untag = "";
         }

         Sprintf(buf, "%S\n[OBJ in RM %i] wizchats, '%S'\n%S", 
                       &tag, rm.getIdNum(), &msg, &untag);
         crit_ptr->show(buf); 
      }//if
   }//while
   return 0;
}//wizchat


/**  Move all in room out some door.  Does no checks, just puts em
 * through the door, even if it's closed??!!
 */
int object::move_all(int i_th, const String* dir, room& rm) {
   return rm.move_all(i_th, dir);
}


/**  Move all objects in room out some door.  Does no checks, just puts em
 * through the door, even if it's closed??!!
 */
int object::omove_all(int i_th, const String* dir, room& rm) {
   return rm.omove_all(i_th, dir);
}


int object::move(int i_th, const String* pc, int j_th, const String* dir, room& rm) {
   return rm.move(i_th, pc, j_th, dir);
}


int object::omove(int i_th, const String* obj, int j_th, const String* dir, room& rm) {
   return rm.omove(i_th, obj, j_th, dir);
}


/** Echo message into the room in this direction */
int object::neighbor_echo(int i_th, const String* dir, const String& buf, room& rm) {
   return rm.neighbor_echo(i_th, dir, buf);
}


int object::obj_pause(int ticks) {
   pause += ticks;

   if (pause < 0)
      pause = 0;

   return 0;
}