# # Patch name: iclog # Patch version: 177p39 # Author's name: Javelin # Author's email: dunemush@pennmush.org # Version of PennMUSH: 1.7.7p39 # Date patch made: 10/13/2004 # Author is willing to support (yes/no): yes, mostly # Patch format: context diff # # # This is a contributed PennMUSH patch. Its use is subject to the # same restrictions found in PennMUSH's hdrs/copyrite.h file. # # No warranty is given for this patch. It is not necessarily going # to work on your system, with any version of PennMUSH other than # the one above, etc. # # If the author given above was willing to support the patch, you # should write to the author if you have any questions or problems. Do # *NOT* send email messages to Javelin or any PennMUSH mailing list about # this patch! # # Below this line is the author's description of the patch, # followed by the patch itself. If the patch is in context diff # format, you'll probably apply it by typing: patch < patchfile # in your top-level MUSH directory, unless instructed otherwise # below. # # This patch adds server-side logging of IC actions. It adds # an IC_LOGGING macro to options.h that must be defined to enable # the system. You then get two flags: # LOGGING - set on a room or thing, causes all audible speech inside # that container to be logging to the iclog file. When this flag is # toggled, contents of the container are informed. Objects entering # logging rooms are also notified on entry. # OOC_ROOM - set on a room, prevents the LOGGING flag from being set. # The iclog file is defined in mush.cnf with the ic_log directive, # and defaults to log/ic.log # Basically, you want a softcode command to let players turn the # logging flag on and off to log their RP, and a script to let you # parse the ic.log to extract RP by sessions. Both of these # can be found in the iclog-1.0.tar.gz file at # http://download.pennmush.org/Accessories # Index: 1_7_7.1221/game/mushcnf.dst *** 1_7_7.1221/game/mushcnf.dst Sat, 09 Oct 2004 15:15:15 -0500 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.34 600) --- iclog_1_7_7.1(w)/game/mushcnf.dst Wed, 13 Oct 2004 10:26:10 -0500 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1.1.1.1.34 600) *************** *** 494,499 **** --- 494,502 ---- # Filename to log commands by SUSPECT players to command_log log/command.log + # Filename to log IC actions to, if IC_LOGGING is defined. + ic_log log/ic.log + # log all commands. Makes big, big command.log files. Use only for # debugging, generally. log_commands no Index: 1_7_7.1221/src/SWITCHES *** 1_7_7.1221/src/SWITCHES Thu, 15 Jul 2004 14:45:40 -0500 dunemush (pennmush/b/22_SWITCHES 1.12.1.3.1.16 600) --- iclog_1_7_7.1(w)/src/SWITCHES Wed, 13 Oct 2004 10:27:12 -0500 dunemush (pennmush/b/22_SWITCHES 1.12.1.3.1.16 600) *************** *** 55,60 **** --- 55,61 ---- HEADER HERE HIDE + IC IGNORE ILIST INSIDE Index: 1_7_7.1221/src/speech.c *** 1_7_7.1221/src/speech.c Sat, 17 Jul 2004 20:22:09 -0500 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.3.1.1.5.1.1.1.6.1.1.1.7.1.1 660) --- iclog_1_7_7.1(w)/src/speech.c Wed, 13 Oct 2004 10:32:25 -0500 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.8.1.1.1.1.1.1.1.10.1.2.1.13.2.4.1.1.3.1.1.5.1.1.1.6.1.1.1.7.1.1 660) *************** *** 164,169 **** --- 164,173 ---- notify_except(Contents(loc), player, tprintf(T("%s says, \"%s\""), spname(player), tbuf1), NA_INTER_HEAR); + #ifdef IC_LOGGING + if (Logging(loc)) + do_log(LT_IC, player, loc, "%s says, \"%s\"", spname(player), tbuf1); + #endif } /** The oemit(/list) command. *************** *** 265,270 **** --- 269,278 ---- notify_anything_loc(orator, na_exceptN, pass, ns_esnotify, na_flags, message, locs[i]); do_audible_stuff(pass[1], &pass[2], pass[0], message); + #ifdef IC_LOGGING + if (Logging(pass[1])) + do_log(LT_IC, orator, pass[1], "%s", message); + #endif } } *************** *** 539,544 **** --- 547,557 ---- else notify_except(Contents(loc), NOTHING, tprintf("%s%s", spname(player), tbuf1), NA_INTER_HEAR); + #ifdef IC_LOGGING + if (Logging(loc)) + do_log(LT_IC, player, loc, "%s%s%s", spname(player), + !space ? " " : "", tbuf1); + #endif } /** The *wall commands. *************** *** 1158,1163 **** --- 1171,1180 ---- if (flags & PEMIT_SPOOF) na_flags |= NA_SPOOF; notify_anything(player, na_loc, &loc, ns_esnotify, na_flags, tbuf1); + #ifdef IC_LOGGING + if (Logging(loc)) + do_log(LT_IC, player, loc, "%s", tbuf1); + #endif do_audible_stuff(loc, NULL, 0, tbuf1); } *************** *** 1196,1201 **** --- 1213,1222 ---- na_flags |= NA_SPOOF; notify_anything_loc(player, na_loc, &room, ns_esnotify, na_flags, msg, room); + #ifdef IC_LOGGING + if (Logging(room)) + do_log(LT_IC, player, room, "%s", msg); + #endif do_audible_stuff(room, NULL, 0, msg); } } *************** *** 1266,1271 **** --- 1287,1296 ---- if (flags & PEMIT_SPOOF) na_flags |= NA_SPOOF; notify_anything(player, na_loc, &room, ns_esnotify, na_flags, tbuf1); + #ifdef IC_LOGGING + if (Logging(room)) + do_log(LT_IC, player, room, "%s", tbuf1); + #endif } } Index: 1_7_7.1221/src/move.c *** 1_7_7.1221/src/move.c Sun, 08 Aug 2004 21:26:04 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1.1.2.1.1.1.1.1.33 660) --- iclog_1_7_7.1(w)/src/move.c Wed, 13 Oct 2004 10:05:03 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1.1.1.1.2.1.1.1.1.1.33 660) *************** *** 117,122 **** --- 117,128 ---- "AZENTER", where, NA_INTER_SEE); did_it_interact(what, where, "ENTER", NULL, "OENTER", T("has arrived."), "AENTER", where, NA_INTER_PRESENCE); + #ifdef IC_LOGGING + if (Logging(old)) + do_log(LT_IC, what, old, "%s has left.", Name(what)); + if (Logging(where)) + do_log(LT_IC, what, where, "%s has arrived.", Name(what)); + #endif } else { /* non-listeners only trigger the actions not the messages */ did_it(what, old, NULL, NULL, NULL, NULL, "ALEAVE", old); *************** *** 243,248 **** --- 249,259 ---- /* autolook */ look_room(player, loc, LOOK_AUTO); + #ifdef IC_LOGGING + if (Logging(loc)) + notify(player, + "[LOGGING] The room is currently logging. Use +log/off to turn off logging."); + #endif deep--; } Index: 1_7_7.1221/src/log.c *** 1_7_7.1221/src/log.c Tue, 08 Jun 2004 12:15:45 -0500 dunemush (pennmush/c/5_log.c 1.10.1.2.2.4.1.1.2.2.1.22 660) --- iclog_1_7_7.1(w)/src/log.c Wed, 13 Oct 2004 10:31:44 -0500 dunemush (pennmush/c/5_log.c 1.10.1.2.2.4.1.1.2.2.1.22 660) *************** *** 47,52 **** --- 47,56 ---- FILE *wizlog_fp; /**< Wizard log */ FILE *tracelog_fp; /**< Trace log */ FILE *cmdlog_fp; /**< Command log */ + #ifdef IC_LOGGING + FILE *iclog_fp; + #endif + static char * *************** *** 119,124 **** --- 123,131 ---- start_log(&wizlog_fp, WIZLOG); start_log(&tracelog_fp, TRACELOG); start_log(&cmdlog_fp, CMDLOG); + #ifdef IC_LOGGING + start_log(&iclog_fp, ICLOG); + #endif } /** Redirect stderr to a error log file. *************** *** 212,217 **** --- 219,230 ---- start_log(&cmdlog_fp, CMDLOG); f = cmdlog_fp; break; + #ifdef IC_LOGGING + case LT_IC: + start_log(&iclog_fp, ICLOG); + f = iclog_fp; + break; + #endif case LT_WIZ: start_log(&wizlog_fp, WIZLOG); f = wizlog_fp; *************** *** 309,314 **** --- 322,332 ---- Name(Owner(Location(player))) : T("bad object"), tbuf1); } break; + #ifdef IC_LOGGING + case LT_IC: + do_rawlog(LT_IC, "[%d/%d/%ld] %s", player, object, (long int) mudtime, tbuf1); + break; + #endif default: do_rawlog(LT_ERR, "ERR: %s", tbuf1); } *************** *** 344,349 **** --- 362,371 ---- case LT_WIZ: lname = "wizard"; break; + #ifdef IC_LOGGING + lname = "ic"; + break; + #endif default: lname = "unspecified"; } *************** *** 359,364 **** --- 381,394 ---- start_log(&connlog_fp, CONNLOG); do_log(LT_ERR, player, NOTHING, T("Connect log wiped.")); break; + #ifdef IC_LOGGING + case LT_IC: + end_log(ICLOG); + unlink(ICLOG); + start_log(&iclog_fp, ICLOG); + do_log(LT_ERR, player, NOTHING, T("IC log wiped.")); + break; + #endif case LT_CHECK: end_log(CHECKLOG); unlink(CHECKLOG); Index: 1_7_7.1221/src/flags.c *** 1_7_7.1221/src/flags.c Thu, 02 Sep 2004 11:04:56 -0500 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.3.1.2.1.1.1.1.1.1.1.1.1.3.1.9.1.2.2.1.1.2.1.56.1.12.1.1.1.29.1.2 660) --- iclog_1_7_7.1(w)/src/flags.c Wed, 13 Oct 2004 10:30:33 -0500 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.3.1.2.1.1.1.1.1.1.1.1.1.3.1.9.1.2.2.1.1.2.1.56.1.12.1.1.1.29.1.2 660) *************** *** 1468,1473 **** --- 1468,1480 ---- return; } + #ifdef IC_LOGGING + if (is_flag(f,"LOGGING") && IS(thing, TYPE_ROOM, "OOC_ROOM")) { + notify(player, "You can't make OOC rooms log."); + return; + } + #endif + if (!can_set_flag(player, thing, f, negate)) { notify(player, T("Permission denied.")); return; *************** *** 1528,1533 **** --- 1535,1549 ---- break; } } + + #ifdef IC_LOGGING + if (is_flag(f, "LOGGING")) { + sprintf(tbuf1, "[LOGGING] Room '%s' is no longer being logged.", + Name(thing)); + notify_except(Contents(thing), NOTHING, tbuf1, 0); + } + #endif + if (is_flag(f, "QUIET") || (!AreQuiet(player, thing))) { tp = tbuf1; safe_str(Name(thing), tbuf1, &tp); *************** *** 1590,1595 **** --- 1606,1619 ---- break; } } + + #ifdef IC_LOGGING + if (is_flag(f, "LOGGING")) { + sprintf(tbuf1, "[LOGGING] Room '%s' is now being logged.", Name(thing)); + notify_except(Contents(thing), NOTHING, tbuf1, 0); + } + #endif + if (is_flag(f, "QUIET") || (!AreQuiet(player, thing))) { tp = tbuf1; safe_str(Name(thing), tbuf1, &tp); Index: 1_7_7.1221/src/conf.c *** 1_7_7.1221/src/conf.c Thu, 02 Sep 2004 11:04:56 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3.1.2.1.15.1.1.1.1.1.1.1.41 660) --- iclog_1_7_7.1(w)/src/conf.c Wed, 13 Oct 2004 10:28:02 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3.1.2.1.15.1.1.1.1.1.1.1.41 660) *************** *** 362,367 **** --- 362,372 ---- {"wizard_log", cf_str, options.wizard_log, sizeof options.wizard_log, 0, "log"} , + #ifdef IC_LOGGING + {"ic_log", cf_str, options.ic_log, sizeof options.ic_log, 0, + "log"} + , + #endif {"checkpt_log", cf_str, options.checkpt_log, sizeof options.checkpt_log, 0, "log"} , *************** *** 1075,1080 **** --- 1080,1088 ---- strcpy(options.command_log, ""); strcpy(options.trace_log, ""); strcpy(options.wizard_log, ""); + #ifdef IC_LOGGING + strcpy(options.ic_log, ""); + #endif strcpy(options.checkpt_log, ""); options.log_commands = 0; options.log_forces = 1; Index: 1_7_7.1221/src/command.c *** 1_7_7.1221/src/command.c Sat, 09 Oct 2004 15:54:54 -0500 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.3.74 660) --- iclog_1_7_7.1(w)/src/command.c Wed, 13 Oct 2004 10:16:09 -0500 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.3.74 660) *************** *** 148,153 **** --- 148,157 ---- {"@HOOK", "AFTER BEFORE IGNORE OVERRIDE", cmd_hook, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS, "WIZARD", 0}, + #ifdef IC_LOGGING + {"@ICLOG", NULL, cmd_iclog, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, + "WIZARD", 0}, + #endif {"@KICK", NULL, cmd_kick, CMD_T_ANY, "WIZARD", 0}, {"@LEMIT", "NOEVAL SILENT SPOOF", cmd_lemit, *************** *** 160,169 **** --- 164,180 ---- CMD_T_ANY, 0, 0}, {"@LOCK", NULL, cmd_lock, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_SWITCHES | CMD_T_NOGAGGED, 0, 0}, + #ifdef IC_LOGGING + {"@LOG", "CHECK CMD CONN ERR TRACE WIZ IC", cmd_log, + CMD_T_ANY | CMD_T_NOGAGGED, "WIZARD", 0}, + {"@LOGWIPE", "CHECK CMD CONN ERR TRACE WIZ IC", cmd_logwipe, + CMD_T_ANY | CMD_T_NOGAGGED | CMD_T_GOD, 0, 0}, + #else {"@LOG", "CHECK CMD CONN ERR TRACE WIZ", cmd_log, CMD_T_ANY | CMD_T_NOGAGGED, "WIZARD", 0}, {"@LOGWIPE", "CHECK CMD CONN ERR TRACE WIZ", cmd_logwipe, CMD_T_ANY | CMD_T_NOGAGGED | CMD_T_GOD, 0, 0}, + #endif {"@LSET", NULL, cmd_lset, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0}, {"@MAIL", Index: 1_7_7.1221/src/cmds.c *** 1_7_7.1221/src/cmds.c Sat, 09 Oct 2004 15:42:59 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2.1.1.1.3.1.8.1.1.2.2.2.20.1.3.1.7.1.2.1.20.1.2 660) --- iclog_1_7_7.1(w)/src/cmds.c Wed, 13 Oct 2004 10:18:01 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2.1.1.1.3.1.8.1.1.2.2.2.20.1.3.1.7.1.2.1.20.1.2 660) *************** *** 457,462 **** --- 457,470 ---- do_lock(player, arg_left, arg_right, Basic_Lock); } + #ifdef IC_LOGGING + COMMAND(cmd_iclog) { + dbref loc = parse_dbref(arg_left); + if (GoodObject(loc) && Logging(loc)) + do_log(LT_IC,player,parse_dbref(arg_left),"%s",arg_right); + } + #endif + COMMAND (cmd_log) { if (SW_ISSET(sw, SWITCH_CHECK)) do_writelog(player, arg_left, LT_CHECK); *************** *** 470,475 **** --- 478,487 ---- do_writelog(player, arg_left, LT_TRACE); else if (SW_ISSET(sw, SWITCH_WIZ)) do_writelog(player, arg_left, LT_WIZ); + #ifdef IC_LOGGING + else if (SW_ISSET(sw, SWITCH_IC)) + do_writelog(player, arg_left, LT_IC); + #endif else do_writelog(player, arg_left, LT_CMD); } *************** *** 485,490 **** --- 497,506 ---- do_logwipe(player, LT_TRACE, arg_left); else if (SW_ISSET(sw, SWITCH_WIZ)) do_logwipe(player, LT_WIZ, arg_left); + #ifdef IC_LOGGING + else if (SW_ISSET(sw, SWITCH_IC)) + do_logwipe(player, LT_IC, arg_left); + #endif else do_logwipe(player, LT_ERR, arg_left); } Index: 1_7_7.1221/hdrs/externs.h *** 1_7_7.1221/hdrs/externs.h Thu, 02 Sep 2004 11:04:56 -0500 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2.1.1.1.1.1.2.1.6.1.3.1.4.3.1.1.1.1.18.1.8.1.1.1.32.1.1 660) --- iclog_1_7_7.1(w)/hdrs/externs.h Wed, 13 Oct 2004 10:20:51 -0500 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8.2.1.1.2.1.1.1.1.1.2.1.6.1.3.1.4.3.1.1.1.1.18.1.8.1.1.1.32.1.1 660) *************** *** 86,91 **** --- 86,94 ---- extern FILE *wizlog_fp; extern FILE *tracelog_fp; extern FILE *cmdlog_fp; + #ifdef IC_LOGGING + extern FILE *iclog_fp; + #endif extern int restarting; #ifdef SUN_OS extern int f_close(FILE * file); Index: 1_7_7.1221/hdrs/dbdefs.h *** 1_7_7.1221/hdrs/dbdefs.h Tue, 29 Jun 2004 19:11:29 -0500 dunemush (pennmush/d/18_dbdefs.h 1.1.1.1.1.1.1.1.1.1.1.2.2.2.1.1.1.1.1.1.2.1.1.22.1.6.1.13 660) --- iclog_1_7_7.1(w)/hdrs/dbdefs.h Wed, 13 Oct 2004 10:29:25 -0500 dunemush (pennmush/d/18_dbdefs.h 1.1.1.1.1.1.1.1.1.1.1.2.2.2.1.1.1.1.1.1.2.1.1.22.1.6.1.13 660) *************** *** 202,207 **** --- 202,213 ---- #define Inheritable(x) (IsPlayer(x) || Inherit(x) || \ Inherit(Owner(x)) || Wizard(x)) + #ifdef IC_LOGGING + #define OocRoom(x) (IS(x, TYPE_ROOM, "OOC_ROOM")) + #define Logging(x) (!OocRoom(x) && has_flag_by_name(x,"LOGGING",TYPE_ROOM|TYPE_THING)) + #endif + + #define NoWarnable(x) (NoWarn(x) || NoWarn(Owner(x))) /* Ancestor_Parent() - returns appropriate ancestor object */ Index: 1_7_7.1221/hdrs/conf.h *** 1_7_7.1221/hdrs/conf.h Fri, 06 Aug 2004 09:38:25 -0500 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.4.1.20.1.24 660) --- iclog_1_7_7.1(w)/hdrs/conf.h Wed, 13 Oct 2004 10:24:00 -0500 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.4.1.20.1.24 660) *************** *** 260,265 **** --- 260,268 ---- char command_log[256]; /**< File to log suspect commands */ char trace_log[256]; /**< File to log trace data */ char checkpt_log[256]; /**< File to log checkpoint data */ + #ifdef IC_LOGGING + char ic_log[256]; + #endif #ifdef HAS_MYSQL char sql_platform[256]; /**< Type of SQL server, or "disabled" */ char sql_host[256]; /**< Hostname of sql server */ *************** *** 422,427 **** --- 425,433 ---- #define ERRLOG (options.error_log) #define CONNLOG (options.connect_log) #define WIZLOG (options.wizard_log) + #ifdef IC_LOGGING + #define ICLOG (options.ic_log) + #endif #define CMDLOG (options.command_log) #define TRACELOG (options.trace_log) #define CHECKLOG (options.checkpt_log) Index: 1_7_7.1221/options.h.dist *** 1_7_7.1221/options.h.dist Thu, 06 May 2004 00:31:00 -0500 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.3.1.6.1.2.2.3.1.1.1.13 600) --- iclog_1_7_7.1(w)/options.h.dist Wed, 13 Oct 2004 10:22:52 -0500 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.3.1.6.1.2.2.3.1.1.1.13 600) *************** *** 116,120 **** --- 116,126 ---- * Example: #define MAILER "/full/path/to/other/mailer" /* #define MAILER /* */ + /* + * Define the following to enable the IC logging system, including + * the log/ic.log file, and the OOC_ROOM and LOGGING flags + */ + /* #define IC_LOGGING /* */ + #endif Index: 1_7_7.1221/hdrs/log.h *** 1_7_7.1221/hdrs/log.h Thu, 20 May 2004 11:40:40 -0500 dunemush (pennmush/f/21_log.h 1.6 660) --- iclog_1_7_7.1(w)/hdrs/log.h Wed, 13 Oct 2004 10:20:01 -0500 dunemush (pennmush/f/21_log.h 1.6 660) *************** *** 10,15 **** --- 10,18 ---- #define LT_RPAGE 5 /* Obsolete */ #define LT_CHECK 6 #define LT_HUH 7 + #ifdef IC_LOGGING + #define LT_IC 8 + #endif /* From log.c */ extern void start_all_logs(void); Index: 1_7_7.1221/src/flaglocal.dst *** 1_7_7.1221/src/flaglocal.dst Thu, 10 Jun 2004 14:35:55 -0500 dunemush (pennmush/g/27_flaglocal. 1.6 660) --- iclog_1_7_7.1(w)/src/flaglocal.dst Wed, 13 Oct 2004 10:10:39 -0500 dunemush (pennmush/g/27_flaglocal. 1.6 660) *************** *** 36,39 **** --- 36,43 ---- if (strcmp(flags->name, "FLAG") == 0) add_flag("BIG", 'B', TYPE_PLAYER | TYPE_THING, F_ANY, F_ANY); #endif + #ifdef IC_LOGGING + add_flag("LOGGING",'l',TYPE_THING|TYPE_ROOM, F_ROYAL, F_ROYAL); + add_flag("OOC_ROOM", 'O', TYPE_ROOM, F_ROYAL,F_ROYAL); + #endif }