⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interp.c

📁 MUD服务器程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

#ifdef DEBUGBREAK
void do_debugbreak( CHAR_DATA *ch, char *argument )
{
   DebugBreak();
}
#endif

bool	check_social	args( ( CHAR_DATA *ch, char *command,
			    char *argument ) );
bool    MP_Commands     args( ( CHAR_DATA *ch ) );

/*
 * Command logging types.
 */
#define LOG_NORMAL	0
#define LOG_ALWAYS	1
#define LOG_NEVER	2

/*
 * God Levels
 */
#define L_GOD		MAX_LEVEL
#define L_SUP		L_GOD - 1
#define L_DEI		L_SUP - 1
#define L_ANG		L_DEI - 1
#define L_HER		L_ANG - 1


/*
 * Log-all switch.
 */
bool				fLogAll		= FALSE;



/*
 * Command table.
 */
const	struct	cmd_type	cmd_table	[] =
{
    /*
     * Common movement commands.
     */
    { "north",		do_north,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "east",		do_east,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "south",		do_south,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "west",		do_west,	POS_STANDING,	 0,  LOG_NORMAL },
    { "up",		do_up,		POS_STANDING,	 0,  LOG_NORMAL },
    { "down",		do_down,	POS_STANDING,	 0,  LOG_NORMAL },

    /*
     * Common other commands.
     * Placed here so one and two letter abbreviations work.
     */
    { "buy",		do_buy,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "cast",		do_cast,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "exits",		do_exits,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "get",		do_get,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "inventory",	do_inventory,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "kill",		do_kill,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "look",		do_look,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "order",		do_order,	POS_RESTING,	 0,  LOG_ALWAYS	},
    { "rest",		do_rest,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "sleep",		do_sleep,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "stand",		do_stand,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "tell",		do_tell,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "wield",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "wizhelp",	do_wizhelp,	POS_DEAD,    L_HER,  LOG_NORMAL	},

    /*
     * Informational commands.
     */
    { "areas",		do_areas,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "bug",		do_bug,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "commands",	do_commands,	POS_DEAD,	 0,  LOG_NORMAL },
    { "compare",	do_compare,	POS_RESTING,	 0,  LOG_NORMAL },
    { "consider",	do_consider,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "credits",	do_credits,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "equipment",	do_equipment,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "examine",	do_examine,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "help",		do_help,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "idea",		do_idea,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "report",		do_report,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "pagelength",     do_pagelen,     POS_DEAD,        0,  LOG_NORMAL },
    { "score",		do_score,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "slist",          do_slist,       POS_DEAD,        0,  LOG_NORMAL },
    { "socials",	do_socials,	POS_DEAD,	 0,  LOG_NORMAL },
    { "time",		do_time,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "typo",		do_typo,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "weather",	do_weather,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "who",		do_who,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "wizlist",        do_wizlist,     POS_DEAD,        0,  LOG_NORMAL },

    /*
     * Configuration commands.
     */
    { "auto",           do_auto,        POS_DEAD,        0,  LOG_NORMAL },
    { "autoexit",       do_autoexit,    POS_DEAD,        0,  LOG_NORMAL },
    { "autoloot",       do_autoloot,    POS_DEAD,        0,  LOG_NORMAL },
    { "autosac",        do_autosac,     POS_DEAD,        0,  LOG_NORMAL },
    { "blank",          do_blank,       POS_DEAD,        0,  LOG_NORMAL },
    { "brief",          do_brief,       POS_DEAD,        0,  LOG_NORMAL },
    { "channels",	do_channels,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "combine",        do_combine,     POS_DEAD,        0,  LOG_NORMAL },
    { "config",		do_config,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "description",	do_description,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "password",	do_password,	POS_DEAD,	 0,  LOG_NEVER	},
    { "prompt",         do_prompt,      POS_DEAD,        0,  LOG_NORMAL },
    { "title",		do_title,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "wimpy",		do_wimpy,	POS_DEAD,	 0,  LOG_NORMAL	},

    /*
     * Communication commands.
     */
    { "answer",		do_answer,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "auction",	do_auction,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "chat",		do_chat,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { ".",		do_chat,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "emote",		do_emote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { ",",		do_emote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "gtell",		do_gtell,	POS_DEAD,	 0,  LOG_NORMAL	},
    { ";",		do_gtell,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "music",		do_music,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "note",		do_note,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "pose",		do_pose,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "question",	do_question,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "reply",		do_reply,	POS_RESTING,	 0,  LOG_NORMAL },
    { "say",		do_say,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "'",		do_say,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "shout",		do_shout,	POS_RESTING,	 3,  LOG_NORMAL	},
    { "yell",		do_yell,	POS_RESTING,	 0,  LOG_NORMAL	},

    /*
     * Object manipulation commands.
     */
    { "brandish",	do_brandish,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "close",		do_close,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "drink",		do_drink,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "drop",		do_drop,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "eat",		do_eat,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "fill",		do_fill,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "give",		do_give,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "hold",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "list",		do_list,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "lock",		do_lock,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "open",		do_open,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "pick",		do_pick,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "put",		do_put,		POS_RESTING,	 0,  LOG_NORMAL },
    { "quaff",		do_quaff,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "recite",		do_recite,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "remove",		do_remove,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "sell",		do_sell,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "take",		do_get,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "sacrifice",	do_sacrifice,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "unlock",		do_unlock,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "value",		do_value,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "wear",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "zap",		do_zap,		POS_RESTING,	 0,  LOG_NORMAL	},

    /*
     * Combat commands.
     */
    { "backstab",	do_backstab,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "bs",		do_backstab,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "disarm",		do_disarm,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "flee",		do_flee,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "kick",		do_kick,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "murde",		do_murde,	POS_FIGHTING,	 5,  LOG_NORMAL	},
    { "murder",		do_murder,	POS_FIGHTING,	 5,  LOG_ALWAYS	},
    { "rescue",		do_rescue,	POS_FIGHTING,	 0,  LOG_NORMAL	},

    /*
     * Miscellaneous commands.
     */
    { "follow",		do_follow,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "group",		do_group,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "hide",		do_hide,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "practice",	do_practice,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "qui",		do_qui,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "quit",		do_quit,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "recall",		do_recall,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "/",		do_recall,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "rent",		do_rent,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "save",		do_save,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "sleep",		do_sleep,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "sneak",		do_sneak,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "spells",         do_spells,      POS_SLEEPING,    0,  LOG_NORMAL },
    { "split",		do_split,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "steal",		do_steal,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "train",		do_train,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "visible",	do_visible,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "wake",		do_wake,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "where",		do_where,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "identify", do_identify, POS_STANDING,  0,  LOG_NORMAL   }, // @@@ ###



    /*
     * Immortal commands.
     */
    { "advance",	do_advance,	POS_DEAD,    L_GOD,  LOG_ALWAYS	},
    { "trust",		do_trust,	POS_DEAD,    L_GOD,  LOG_ALWAYS },

    { "allow",		do_allow,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "ban",		do_ban,		POS_DEAD,    L_SUP,  LOG_ALWAYS	},
#ifdef DEBUGBREAK
    { "debugbreak",	do_debugbreak,     POS_DEAD,    L_ANG,  LOG_ALWAYS	}, // @@@
#endif
    { "deny",		do_deny,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "disconnect",	do_disconnect,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "freeze",		do_freeze,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "reboo",		do_reboo,	POS_DEAD,    L_SUP,  LOG_NORMAL	},
    { "reboot",		do_reboot,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "shutdow",	do_shutdow,	POS_DEAD,    L_SUP,  LOG_NORMAL	},
    { "shutdown",	do_shutdown,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "users",		do_users,	POS_DEAD,    L_SUP,  LOG_NORMAL	},
    { "wizify", 	do_wizify,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},
    { "wizlock",	do_wizlock,	POS_DEAD,    L_SUP,  LOG_ALWAYS	},

    { "force",		do_force,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "log",		do_log,		POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "mload",		do_mload,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "mset",		do_mset,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "noemote",	do_noemote,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "notell",		do_notell,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "oload",		do_oload,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "orphans",	do_orphans,     POS_DEAD,    L_ANG,  LOG_NORMAL	}, // @@@
    { "oset",		do_oset,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "owhere",		do_owhere,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "pardon",		do_pardon,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "peace",		do_peace,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "purge",		do_purge,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "restore",	do_restore,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "rset",		do_rset,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "silence",	do_silence,	POS_DEAD,    L_DEI,  LOG_NORMAL },
    { "shoplist",	do_shoplist,    POS_DEAD,    L_ANG,  LOG_NORMAL	}, // @@@
    { "sla",		do_sla,		POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "slay",		do_slay,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "snoop",		do_snoop,	POS_DEAD,    L_DEI,  LOG_NORMAL	},
    { "sset",		do_sset,	POS_DEAD,    L_DEI,  LOG_ALWAYS },
    { "transfer",	do_transfer,	POS_DEAD,    L_DEI,  LOG_ALWAYS	},
    { "mpstat",         do_mpstat,      POS_DEAD,    L_DEI,  LOG_NORMAL },

    { "at",		do_at,		POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "bamfin",		do_bamfin,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "bamfout",	do_bamfout,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "echo",		do_echo,	POS_DEAD,    L_ANG,  LOG_ALWAYS	},
    { "goto",		do_goto,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "holylight",	do_holylight,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "invis",		do_invis,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "memory",		do_memory,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "mfind",		do_mfind,	POS_DEAD,    L_ANG,  LOG_NORMAL },
    { "mstat",		do_mstat,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "mwhere",		do_mwhere,	POS_DEAD,    L_ANG,  LOG_NORMAL },
    { "ofind",		do_ofind,	POS_DEAD,    L_ANG,  LOG_NORMAL },
    { "ostat",		do_ostat,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "recho",		do_recho,	POS_DEAD,    L_ANG,  LOG_ALWAYS	},
    { "return",		do_return,	POS_DEAD,    L_HER,  LOG_NORMAL	},
    { "rstat",		do_rstat,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { "slookup",	do_slookup,	POS_DEAD,    L_ANG,  LOG_NORMAL },
    { "switch",		do_switch,	POS_DEAD,    L_ANG,  LOG_ALWAYS	},

    { "immtalk",	do_immtalk,	POS_DEAD,    L_ANG,  LOG_NORMAL	},
    { ":",		do_immtalk,	POS_DEAD,    L_ANG,  LOG_NORMAL	},

    /*
     * MOBprogram commands.
     */
    { "mpasound",       do_mpasound,    POS_DEAD,       41,  LOG_NORMAL },
    { "mpjunk",         do_mpjunk,      POS_DEAD,       41,  LOG_NORMAL },
    { "mpecho",         do_mpecho,      POS_DEAD,       41,  LOG_NORMAL },
    { "mpechoat",       do_mpechoat,    POS_DEAD,       41,  LOG_NORMAL },
    { "mpechoaround",   do_mpechoaround,POS_DEAD,       41,  LOG_NORMAL },
    { "mpkill",         do_mpkill,	POS_DEAD,       41,  LOG_NORMAL },
    { "mpmload",        do_mpmload,	POS_DEAD,       41,  LOG_NORMAL },
    { "mpoload",        do_mpoload,	POS_DEAD,       41,  LOG_NORMAL },
    { "mppurge",        do_mppurge,	POS_DEAD,       41,  LOG_NORMAL },
    { "mpgoto",         do_mpgoto,	POS_DEAD,       41,  LOG_NORMAL },
    { "mpat",           do_mpat,	POS_DEAD,       41,  LOG_NORMAL },
    { "mptransfer",     do_mptransfer,	POS_DEAD,       41,  LOG_NORMAL },
    { "mpforce",        do_mpforce,	POS_DEAD,       41,  LOG_NORMAL },

    /*
     * End of list.
     */
    { "",		0,		POS_DEAD,	 0,  LOG_NORMAL	}
};



/*
 * The social table.
 * Add new socials here.
 * Alphabetical order is not required.
 */

/* New socials contributed by Katrina and Binky */
const	struct	social_type	social_table [ ] =
{
    {
	"accuse",
	"Accuse whom?",
	"$n is in an accusing mood.",
	"You look accusingly at $M.",
	"$n looks accusingly at $N.",
	"$n looks accusingly at you.",
	"You accuse yourself.",
	"$n seems to have a bad conscience."
    },

    {
	"ack",
	"You gasp and say 'ACK!' at your mistake.",
	"$n ACKS at $s big mistake.",
	"You ACK $M.",
	"$n ACKS $N.",
	"$n ACKS you.",
	"You ACK yourself.",
	"$n ACKS $mself.  Must be a bad day."
    },

    {
	"addict",
	"You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'",
	"$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'",
	"You tell $M that you are addicted to $S love.",
	"$n tells $N that $e is addicted to $S love.",
	"$n tells you that $e is addicted to your love.",
	"You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'",
	"$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'",
    },
   
    {
	"afk",
	"You tell everyone in the room that you'll be AFK.",
	"$n announces, 'I'm going AFK'.",
	"You tell $M that you'll be AFK.",
	"$n tells $N, 'I'm going AFK'.",
	"$n announces to you, 'I'm going AFK'.",
	"Why tell yourself?  You already know you ninny!",
	"$n is mumbling to $mself again.  Something about going AFK."
    },
 
    {
	"agree",
	"You seem to be in an agreeable mood.",
	"$n seems to agree.",
	"You agree with $M.",
	"$n agrees with $N.",
	"$n agrees with you.",
	"Well I hope you would agree with yourself!",
	"$n agrees with $mself, of course."
    },
    
    {
	"airguitar",
	"You sizzle the air with your BITCHIN' guitar playing!",
	"$n air-guitars like Jimi Hendrix!",
	"You sizzle the air with your BITCHIN' guitar playing!",
	"$n air-guitars like Jimi Hendrix!",
	"$n air-guitars like Jimi Hendrix, just for you!",
	"You forget all else as you sizzle the air with your BITCHIN' guitar playing!",
	"$n forgets all else as $e air-guitars like Jimi Hendrix."
    },

//    {
//	"apologize",
//	"You apologize for your behavior.",
//	"$n apologizes for $s rude behavior.",
//	"You apologize to $M.",
//	"$n apologizes to $N.",
//	"$n apologizes to you.",
//	"You apologize to yourself.",
//	"$n apologizes to $mself.  Hmmmm."
//    },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -