// $Id: classes.cc,v 1.4.2.4 2000/03/18 00:46:31 justin Exp $ // $Revision: 1.4.2.4 $ $Author: justin $ $Date: 2000/03/18 00:46:31 $ // //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 // ///******************** classes.cc *****************************/// #include "classes.h" #include "misc.h" #include "misc2.h" #include "room.h" #include "const.h" #include "commands.h" //for wear_eq_effects... #include "battle.h" #include <PtrArray.h> #include "command5.h" #include "command4.h" #include "BuildInfo.h" #include <getopt.h> void CmdLineInfo::init(int argc, char** argv) { //first, init values to defaults int lvl = (ERROR | DIS | WRN | LSEC); // This code ripped off from the man page for getopt. --BEN int c; //int digit_optind = 0; while (1) { //int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"help", 0, 0, 0}, {"log_level", 1, 0, 0}, {"port", 1, 0, 0}, {"usage", 0, 0, 0}, {"version", 0, 0, 0}, {"summon", 0, 0, 0}, {"teeport", 0, 0, 0}, {0, 0, 0, 0} }; // If it needs an argument, put a : after it. The letter is the one // letter arg that will select the option. For example, -h and --help // will do the same thing (and take no arguments) c = getopt_long (argc, argv, "hl:p:uvts", long_options, &option_index); if (c == -1) break; if (c == 0) { // Then we were passed a long argument (ie --foo). So, we'll just // grab the first character. Have to make sure that is unique... c = long_options[option_index].name[0]; //grab first char //printf ("option %s", long_options[option_index].name); //if (optarg) // printf (" with arg %s", optarg); //printf ("\n"); } switch (c) { case 'p': config.port = atoi(optarg); cout << "Using " << config.port << " for the well known server port.\n"; break; case 'l': { lvl = atoi(optarg); cout << "Setting logging level to: " << lvl << endl; break; } case 'v': { cout << "ScryMUD version: " << BuildInfo::getVersion() << " built on: " << BuildInfo::getBuildDate() << "\nby: " << BuildInfo::getBuilder() << " on machine: " << BuildInfo::getBuildMachine() << endl; do_shutdown = TRUE; exit(0); break; } case 'h': case 'u': { cout << "ScryMUD Usage: -l --log_level bitfield (add up the integer values listed below) DIS = 1, //disasters ERR = 2, //errors WRN = 4, //warnings INF = 8, //info TRC = 16, //function trace DBG = 32, //debug SEC = 64, // log security violations DB = 128, // READ or WRITE to NVDS XMT = 256, // Server to client comm. INP = 512, // Input from clients. SCRIPT = 1024, //Scripting specific PARSE = 2048, //PARSE specific DBG2 = 4096, //More verbose than debug. ALL = 65535 = ~(0) // all -p --port Specify server port -v --version Print out build/version information. -h --help Print this message. -u --usage Print this message.\n\n"; do_shutdown = TRUE; exit(0); break; } default: printf ("?? getopt returned character code 0%o ??\n", c); }//switch }//while TRUE,read all cmd-line arguments mudlog.setLevel(lvl); if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) { printf ("%s ", argv[optind++]); } printf ("\n"); } }//CmdLineInfo constructor /** Static method */ String HegemonMarkup::makeSafeForHegTag(const char* str) { int len = strlen(str); char c; String retval(len + 50); for (int i = 0; i<len; i++) { c = str[i]; if (c == '>') { retval += ">>"; } else { retval += c; } }//for return retval; }//convertToHeg int stat_spell_cell::_cnt = 0; String stat_spell_cell::toString() const { String retval(100); Sprintf(retval, "stat_spell: %i bonus_duration: %i", stat_spell, bonus_duration); return retval; } int PathCell::_cnt = 0; PathCell::PathCell(String& description, String& direction_to_next, int is_dest) { _cnt++; desc = description; dir_to_next = direction_to_next; is_destination = is_dest; } PathCell::PathCell() { _cnt++; dir_to_next = "NOWHERE"; is_destination = 0; desc = "GENERIC_DESC"; i_th_dir = 1; }//constructor void PathCell::Clear() { desc.Clear(); dir_to_next.Clear(); is_destination = i_th_dir = 0; } void PathCell::Read(ifstream& da_file) { char tmp[81]; desc.Termed_Read(da_file); //description // mudlog << "PathCell: got desc: -:" << desc << ":-" << endl; da_file >> is_destination >> i_th_dir >> dir_to_next; // mudlog << "Is_dest: " << is_destination << " i_th: " << i_th_dir // << " dir: " << dir_to_next << endl; da_file.getline(tmp, 80); // mudlog << "Junk: -:" << tmp << ":-" << endl; }//Read void PathCell::Write(ofstream& da_file) { parse_for_max_80(desc); da_file << desc << "\n~\n"; da_file << is_destination << " " << i_th_dir << " " << dir_to_next << " is_dest, i_th, dir, End of PathCell..\n"; }//Write void PathCell::setIsDest(int i) { if (i) is_destination = 1; else is_destination = 0; } int PathCell::isDest() { return is_destination; } void PathCell::stat(int veh_num, int path_cell_num, critter& pc) { String buf(1000); if (pc.isPc()) { if (pc.isUsingClient()) { Sprintf(buf, "<PSTAT %i %i>", veh_num, path_cell_num); pc.show(buf); pc.show(" <PSTAT_LD>"); pc.show(desc); pc.show("</STAT> "); Sprintf(buf, "<PATH_DIR %i %S> ", i_th_dir, &dir_to_next); pc.show(buf); Sprintf(buf, "<PATH_IS_DEST %i> ", is_destination); pc.show(buf); } Sprintf(buf, "Path Cell [%i] for vehicle [%i]. Desc:\n", path_cell_num, veh_num); pc.show(buf); pc.show(desc); Sprintf(buf, "Direction: i_th: %i dir: %S\n", i_th_dir, &dir_to_next); pc.show(buf); if (is_destination) { pc.show("It IS a DESTINATION.\n"); } else { pc.show("It is NOT a destination.\n"); } }//if it's a pc }//stat