diff -c -r --new-file ds2.0r25/lib/cmds/common/help.c ds2.0r27/lib/cmds/common/help.c *** ds2.0r25/lib/cmds/common/help.c Sat Mar 11 11:13:28 2006 --- ds2.0r27/lib/cmds/common/help.c Wed Jul 5 00:01:03 2006 *************** *** 16,28 **** mixed cmd(string arg) { object who = previous_object(); int array screen = (who->GetScreen() || ({ 80, 24 })); ! string help; ! if( !arg || arg == "" || arg == "help") { help = HELP_D->GetHelp("help"); write(help); return 1; } if( arg == "index" || HELP_D->GetTopics(arg) ) { if( arg == "index" ) { HelpMenu(); --- 16,35 ---- mixed cmd(string arg) { object who = previous_object(); int array screen = (who->GetScreen() || ({ 80, 24 })); ! string help = ""; ! if( arg == "help") { help = HELP_D->GetHelp("help"); write(help); return 1; } + if( !arg || arg == "") { + if(creatorp(this_player())) help = read_file("/doc/help/creators/creator_general"); + else help = read_file("/doc/help/players/player_general"); + if(!sizeof(help)) help = HELP_D->GetHelp("help"); + write(help); + return 1; + } if( arg == "index" || HELP_D->GetTopics(arg) ) { if( arg == "index" ) { HelpMenu(); diff -c -r --new-file ds2.0r25/lib/cmds/creators/margins.c ds2.0r27/lib/cmds/creators/margins.c *** ds2.0r25/lib/cmds/creators/margins.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/cmds/creators/margins.c Wed Jul 5 00:01:03 2006 *************** *** 0 **** --- 1,19 ---- + #include + + inherit LIB_DAEMON; + + mixed cmd(string str) { + return @ENDTEXT + |---------------------------------------------------------------|-------------| + ENDTEXT; + } + + void help() { + write("Syntax: margins\n"); + write(@EndText + This simple command prints a line to help creators when writing + descriptions. It gives a visual indicator of when to stop on + one line and continue on the next. + EndText + ); + } diff -c -r --new-file ds2.0r25/lib/cmds/creators/move.c ds2.0r27/lib/cmds/creators/move.c *** ds2.0r25/lib/cmds/creators/move.c Wed Apr 5 19:33:16 2006 --- ds2.0r27/lib/cmds/creators/move.c Wed Dec 31 19:00:00 1969 *************** *** 1,55 **** - /* /cmds/creators/move.c - * From the Dead Souls V Object Library - * Moves object from one place to another - * created by Descartes of Borg 961008 - * Version: @(#) move.c 1.2@(#) - * Last modified: 96/10/08 - */ - - #include - #include - - inherit LIB_DAEMON; - - mixed cmd(string args) { - object what, destination; - string a, b; - mixed res; - - if( sscanf(args, "%s into %s", a, b) != 2 && - sscanf(args, "%s to %s", a, b) != 2 ) { - return "Syntax: \n\n"; - } - what = to_object(a); - destination = to_object(b); - if( !what ) { - return "Unable to find " + a + "."; - } - if( !destination ) { - return "Unable to find " + b + "."; - } - if( living(what) && living(destination) ) { - return "None of that nonsense."; - } - res = what->eventMove(destination); - if( !res ) { - return "Failed to move " + identify(what) + " into " + - identify(destination) + "."; - } - else if( res != 1 ) { - return res; - } - previous_object()->eventPrint("Moved " + identify(what) + " into " + - identify(destination) + ".", MSG_SYSTEM); - if( living(what) ) { - what->eventDescribeEnvironment(); - } - return 1; - } - - string GetHelp() { - return ("Syntax: \n\n" - "Allows you to move the object you name into the container " - "you name.\n\n" - "See also: trans, expel, goto, return"); - } --- 0 ---- diff -c -r --new-file ds2.0r25/lib/cmds/creators/polyglottize.c ds2.0r27/lib/cmds/creators/polyglottize.c *** ds2.0r25/lib/cmds/creators/polyglottize.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/cmds/creators/polyglottize.c Wed Jul 5 00:01:03 2006 *************** *** 0 **** --- 1,41 ---- + #include + #include + + inherit LIB_DAEMON; + + mixed cmd(string str) { + object target; + + if(!str || str == "") str = "me"; + + if(str == "me") str = this_player()->GetKeyName(); + if(!target = present(str, environment(this_player()))){ + write("They're not here."); + return 1; + } + if(!living(target)) { + write("That's not a living thing."); + return 1; + } + if(creatorp(target) && !archp(this_player()) && + target != this_player()){ + write("That's impolite."); + tell_player(target,capitalize(this_player()->GetKeyName())+ + " just tried to polyglottize you."); + return 1; + } + + target->SetPolyglot(1); + if(target == this_player()) str = "yourself"; + else str = capitalize(str); + write("You polyglottize "+str+"."); + if(target != this_player()) + tell_object(target, capitalize(this_player()->GetKeyName())+" polyglottizes you."); + return 1; + } + + void help() { + message("help", "Syntax: polyglottize \n\n" + "Make the target able to understand all languages.\n\n", + this_player()); + } diff -c -r --new-file ds2.0r25/lib/cmds/creators/transfer.c ds2.0r27/lib/cmds/creators/transfer.c *** ds2.0r25/lib/cmds/creators/transfer.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/cmds/creators/transfer.c Wed Jul 5 00:01:03 2006 *************** *** 0 **** --- 1,59 ---- + /* /cmds/creators/transfer.c + * From the Dead Souls V Object Library + * Moves object from one place to another + * created by Descartes of Borg 961008 + * Version: @(#) transfer.c 1.2@(#) + * Last modified: 96/10/08 + */ + + #include + #include + + inherit LIB_DAEMON; + + mixed cmd(string args) { + object what, destination; + string a, b; + mixed res; + + if(!args || args == ""){ + return "Syntax: \n\n"; + } + + if( sscanf(args, "%s into %s", a, b) != 2 && + sscanf(args, "%s to %s", a, b) != 2 ) { + return "Syntax: \n\n"; + } + what = to_object(a); + destination = to_object(b); + if( !what ) { + return "Unable to find " + a + "."; + } + if( !destination ) { + return "Unable to find " + b + "."; + } + if( living(what) && living(destination) ) { + return "None of that nonsense."; + } + res = what->eventMove(destination); + if( !res ) { + return "Failed to transfer " + identify(what) + " into " + + identify(destination) + "."; + } + else if( res != 1 ) { + return res; + } + previous_object()->eventPrint("Transferred " + identify(what) + " into " + + identify(destination) + ".", MSG_SYSTEM); + if( living(what) ) { + what->eventDescribeEnvironment(); + } + return 1; + } + + string GetHelp() { + return ("Syntax: \n\n" + "Allows you to transfer the object you name into the container " + "you name.\n\n" + "See also: trans, expel, goto, return"); + } diff -c -r --new-file ds2.0r25/lib/cmds/players/env.c ds2.0r27/lib/cmds/players/env.c *** ds2.0r25/lib/cmds/players/env.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/cmds/players/env.c Wed Jul 5 00:01:03 2006 *************** *** 0 **** --- 1,19 ---- + #include + + inherit LIB_DAEMON; + + mixed cmd(string args) { + write("Screen: \t\t"+identify(this_player()->GetScreen())); + write("Terminal: \t\t"+this_player()->GetTerminal()); + write("Brief mode: \t\t"+ ( (this_player()->GetBriefMode()) ? "on" : "off" )); + //write("PlayerKill mode: \t"+ ( (this_player()->GetPK()) ? "on" : "off" )); + if(creatorp(this_player())) + write("Debug mode: \t\t"+ ( (this_player()->GetProperty("debug")) ? "on" : "off" )); + return 1; + } + + void help() { + message("help", "Syntax: \n\n" + "Displays your basic interface and play settings. " + + "See also: brief, terminal, screen", this_player()); + } diff -c -r --new-file ds2.0r25/lib/cmds/players/language.c ds2.0r27/lib/cmds/players/language.c *** ds2.0r25/lib/cmds/players/language.c Wed Apr 5 19:33:16 2006 --- ds2.0r27/lib/cmds/players/language.c Wed Jul 5 00:01:03 2006 *************** *** 11,18 **** } write("You speak:"); ! foreach(string key, int val in FluencyMap){ ! write(capitalize(key)+" with "+val+"% proficiency."); } return 1; --- 11,25 ---- } write("You speak:"); ! ! if(this_player()->GetPolyglot()){ ! write("All languages with 100% proficiency."); ! } ! ! else { ! foreach(string key, int val in FluencyMap){ ! write(capitalize(key)+" with "+val+"% proficiency."); ! } } return 1; diff -c -r --new-file ds2.0r25/lib/cmds/players/screen.c ds2.0r27/lib/cmds/players/screen.c *** ds2.0r25/lib/cmds/players/screen.c Mon Nov 7 13:28:39 2005 --- ds2.0r27/lib/cmds/players/screen.c Wed Jul 5 00:01:03 2006 *************** *** 11,21 **** mixed cmd(string args) { int *screen; int h, w; if( args == "" || !args ) ! return "You need to specify both width and height."; if( sscanf(args, "%d %d", w, h) != 2 ) ! return "You need to specify both width and height."; this_player()->SetScreen(w, h); message("system", "Screen set to " + w + " by " + h + ".", this_player()); return 1; --- 11,24 ---- mixed cmd(string args) { int *screen; int h, w; + string chide = "You need to specify both width and height.\n"; + string ret = "Your current settings are: "+ this_player()->GetScreen()[0]; + ret += " "+ this_player()->GetScreen()[1]; if( args == "" || !args ) ! return chide + ret; if( sscanf(args, "%d %d", w, h) != 2 ) ! return chide + ret; this_player()->SetScreen(w, h); message("system", "Screen set to " + w + " by " + h + ".", this_player()); return 1; diff -c -r --new-file ds2.0r25/lib/cmds/players/who.c ds2.0r27/lib/cmds/players/who.c *** ds2.0r25/lib/cmds/players/who.c Wed Feb 22 15:29:49 2006 --- ds2.0r27/lib/cmds/players/who.c Wed Jul 5 00:01:03 2006 *************** *** 6,12 **** #include inherit LIB_DAEMON; - int elderp(object foo); #define SEP repeat_string("*=",39)+"*\n"; --- 6,11 ---- *************** *** 23,30 **** if(!obs[i]->GetInvis()) { if(archp(obs[i])) tmp+="[%^BLUE%^ARCH%^RESET%^]"; else if(creatorp(obs[i]) ) tmp+="[%^CYAN%^WIZ%^RESET%^]"; else tmp+=sprintf("[%d]", obs[i]->GetLevel() ); ! if(elderp(obs[i])) tmp+=" [%^GREEN%^ELDER%^RESET%^]"; if(sizeof(obs[i]->GetShort()) < 50) { tmp+=sprintf(" %s", obs[i]->GetShort()); } --- 22,32 ---- if(!obs[i]->GetInvis()) { if(archp(obs[i])) tmp+="[%^BLUE%^ARCH%^RESET%^]"; else if(creatorp(obs[i]) ) tmp+="[%^CYAN%^WIZ%^RESET%^]"; + else if(avatarp(obs[i]) ) tmp+="[%^GREEN%^AVATAR%^RESET%^]"; + else if(high_mortalp(obs[i]) ) tmp+="[%^GREEN%^HIGH MORTAL%^RESET%^]"; else tmp+=sprintf("[%d]", obs[i]->GetLevel() ); ! if(elderp(obs[i])) tmp+=" [%^YELLOW%^ELDER%^RESET%^]"; ! if(ambassadorp(obs[i])) tmp+=" [%^YELLOW%^AMBASSADOR%^RESET%^]"; if(sizeof(obs[i]->GetShort()) < 50) { tmp+=sprintf(" %s", obs[i]->GetShort()); } *************** *** 54,61 **** return 1; } - int elderp(object ob){ - string str; - str=ob->GetKeyName(); - return member_group(str, PRIV_ELDER); - } --- 56,58 ---- diff -c -r --new-file ds2.0r25/lib/daemon/banish.c ds2.0r27/lib/daemon/banish.c *** ds2.0r25/lib/daemon/banish.c Wed Apr 12 23:47:49 2006 --- ds2.0r27/lib/daemon/banish.c Wed Jul 5 00:00:58 2006 *************** *** 156,161 **** --- 156,162 ---- } void banish_name(string str) { + if(!valid_access(previous_object())) return; unguarded( (: log_file, "banish", (string)this_player()->GetName() + " banished " + str + "." :) ); __Names = distinct_array(__Names + ({ lower_case(str) })); diff -c -r --new-file ds2.0r25/lib/daemon/help.c ds2.0r27/lib/daemon/help.c *** ds2.0r25/lib/daemon/help.c Mon Jan 23 09:03:35 2006 --- ds2.0r27/lib/daemon/help.c Wed Jul 5 00:00:58 2006 *************** *** 438,445 **** help = "Index: %^GREEN%^" + index + "%^RESET%^\n" + "Topic: %^GREEN%^" + topic + "%^RESET%^\n\n" + help; if( file_exists(DIR_RACE_HELP + "/" + topic) ) ! help += read_file(DIR_RACE_HELP + "/" + topic); ! return help; } Error = "No such race exists."; return 0; --- 438,445 ---- help = "Index: %^GREEN%^" + index + "%^RESET%^\n" + "Topic: %^GREEN%^" + topic + "%^RESET%^\n\n" + help; if( file_exists(DIR_RACE_HELP + "/" + topic) ) ! //help += read_file(DIR_RACE_HELP + "/" + topic); ! return help; } Error = "No such race exists."; return 0; diff -c -r --new-file ds2.0r25/lib/daemon/intermud.c ds2.0r27/lib/daemon/intermud.c *** ds2.0r25/lib/daemon/intermud.c Wed Apr 12 23:47:49 2006 --- ds2.0r27/lib/daemon/intermud.c Wed Jul 5 00:00:58 2006 *************** *** 11,16 **** --- 11,17 ---- #else #include + #include #include #include #include *************** *** 31,37 **** Password = 0; Tries = 0; Banned = ([]); - Nameservers = ({ ({ "*yatmim", "149.152.218.102 23" }) }); MudList = new(class list); ChannelList = new(class list); MudList->ID = -1; --- 32,37 ---- *************** *** 40,45 **** --- 40,46 ---- ChannelList->List = ([]); if( file_size( SAVE_INTERMUD __SAVE_EXTENSION__ ) > 0 ) unguarded( (: restore_object, SAVE_INTERMUD, 1 :) ); + Nameservers = ({ ({ "*yatmim", "149.152.218.102 23" }) }); SetNoClean(1); tn("INTERMUD_D reloaded."); SetDestructOnClose(1); *************** *** 73,78 **** --- 74,93 ---- (mapping)SERVICES_D->GetServices(), ([]) }) ), "red");; } + void eventClearVars(){ + if( !((int)master()->valid_apply(({ PRIV_ASSIST, INTERMUD_D }))) ) + error("Illegal attempt to reset intermud: "+get_stack()+" "+identify(previous_object(-1))); + Connected = 0; + Tries = 0; + MudList = new(class list); + ChannelList = new(class list); + MudList->ID = -1; + MudList->List = ([]); + ChannelList->ID = -1; + ChannelList->List = ([]); + save_object(SAVE_INTERMUD); + } + static void eventRead(mixed *packet) { mixed val; string cle; *************** *** 164,169 **** --- 179,185 ---- break; case "chanlist-reply": // if( packet[6] == ChannelList->ID ) return; + tn("chanlist reply: "+identify(packet), "blue"); if( packet[2] != Nameservers[0][0] ) return; ChannelList->ID = packet[6]; foreach(cle, val in packet[7]) { diff -c -r --new-file ds2.0r25/lib/daemon/services/who.c ds2.0r27/lib/daemon/services/who.c *** ds2.0r25/lib/daemon/services/who.c Mon May 22 11:34:50 2006 --- ds2.0r27/lib/daemon/services/who.c Wed Jul 5 00:01:03 2006 *************** *** 45,51 **** void eventSendWhoRequest(string mud) { string who; ! who = (string)this_player(1)->GetName(); INTERMUD_D->eventWrite(({ "who-req", 5, mud_name(), who, mud, 0 })); tn("eventSendWhoRequest: "+identify( ({ "who-req", 5, mud_name(), who, mud, 0 })), "blue"); } --- 45,51 ---- void eventSendWhoRequest(string mud) { string who; ! who = (string)this_player(1)->GetKeyName(); INTERMUD_D->eventWrite(({ "who-req", 5, mud_name(), who, mud, 0 })); tn("eventSendWhoRequest: "+identify( ({ "who-req", 5, mud_name(), who, mud, 0 })), "blue"); } diff -c -r --new-file ds2.0r25/lib/doc/CREDITS ds2.0r27/lib/doc/CREDITS *** ds2.0r25/lib/doc/CREDITS Mon May 15 11:27:29 2006 --- ds2.0r27/lib/doc/CREDITS Wed Jul 5 00:00:58 2006 *************** *** 3,20 **** Sine qua non: Descartes, the legion of MudOS developers, and all those coders who toiled at Nightmare, and Lars Pensjö. Direct conributors: Haderach and his clever code and inspiration, Duuk and his willingness to let me poke through his lib and filch code. Great thanks to Marajin for his direct and substantial contribution to the Windows port. Thanks also to the following for code donation, support, and/or contribution: Tim@TimMUD, Manchi, ! Brodbane, Ashon, Shadyman, Jonez, Cecil. Appreciation of: Jayren, Kaylus, Arianrhod, Nosmo, Pyro, Abby, Balmung, Aten, Metiscus, Garfield, Javelin, Alensin, Daelas, ! and Detah for their thoughtful comments and suggestions. Also: Xyzzy He Is Cool --- 3,23 ---- Sine qua non: Descartes, the legion of MudOS developers, and all those coders who toiled at Nightmare, and Lars Pensjö. + Marius for his kind permission to bundle MudOS. Direct conributors: Haderach and his clever code and inspiration, Duuk and his willingness to let me poke through his lib and filch code. Great thanks to Marajin for his direct and substantial contribution to the Windows port. + Much gratitude to Saquivor, for whom a town street is + now named, for getting the Windows socket code working. Thanks also to the following for code donation, support, and/or contribution: Tim@TimMUD, Manchi, ! Brodbane, Ashon, Shadyman, Jonez, Cecil, Daelas. Appreciation of: Jayren, Kaylus, Arianrhod, Nosmo, Pyro, Abby, Balmung, Aten, Metiscus, Garfield, Javelin, Alensin, Daelas, ! Zeus, Dastuun, Detah, and Nulvect for their thoughtful comments and suggestions. Also: Xyzzy He Is Cool diff -c -r --new-file ds2.0r25/lib/doc/README ds2.0r27/lib/doc/README *** ds2.0r25/lib/doc/README Mon Jan 23 09:17:12 2006 --- ds2.0r27/lib/doc/README Wed Jul 5 00:00:58 2006 *************** *** 6,21 **** safe first, and then restore it after you upgrade. Alternately you may just edit the new mudos.cfg to say what the old one said. ! GENERAL FAQ: http://dead-souls.sourceforge.net/ds-faq.html ! ADMIN FAQ: http://dead-souls.sourceforge.net/ds-admin-faq.html ! ED TUTORIAL: http://dead-souls.sourceforge.net/editor.html ! NEW CREATION SYSTEM: http://dead-souls.sourceforge.net/example.html ! ! The Frontiers LPC Foundation is pleased to present the ! re-release of Dead Souls 2. Please read /doc/SUPPORT for details on the supportability of this software. Note that the Frontiers LPC Foundation does not take --- 6,18 ---- safe first, and then restore it after you upgrade. Alternately you may just edit the new mudos.cfg to say what the old one said. ! GENERAL FAQ: http://dead-souls.net/ds-faq.html ! ADMIN FAQ: http://dead-souls.net/ds-admin-faq.html ! ED TUTORIAL: http://dead-souls.net/editor.html ! NEW CREATION SYSTEM: http://dead-souls.net/example.html Please read /doc/SUPPORT for details on the supportability of this software. Note that the Frontiers LPC Foundation does not take *************** *** 30,49 **** This mudlib is based on that old warhorse. It is entirely free from those copyright problems, and can be shared. ! We felt that too many substandard libs were starting to ! pop up, and that there was a need to bring back some of the old ! LPC magic. In accordance with this wish to cater to the elite, we have ! disabled some intermud channels by default. To enable them, all you ! need to do is add them to yourself with these commands: ! call me->AddChannel("intergossip") ! call me->AddChannel("intercre") ! ! If you want to contribute to the Dead Souls Lib Resurrection ! project, please visit Frontiers MUD and leave some mudmail for ! Cratylus. You can also request to sign up as a lib developer at ! http://sourceforge.net/projects/dead-souls/ ! ! The latest available files will be at http://sourceforge.net/project/showfiles.php?group_id=148388 so check often. Please review /doc/old/README for more historical background. --- 27,34 ---- This mudlib is based on that old warhorse. It is entirely free from those copyright problems, and can be shared. ! The latest files will be at ! http://sourceforge.net/project/showfiles.php?group_id=148388 Please review /doc/old/README for more historical background. diff -c -r --new-file ds2.0r25/lib/doc/RELEASE_NOTES ds2.0r27/lib/doc/RELEASE_NOTES *** ds2.0r25/lib/doc/RELEASE_NOTES Tue Jun 6 21:25:10 2006 --- ds2.0r27/lib/doc/RELEASE_NOTES Wed Jul 5 00:52:42 2006 *************** *** 1,3 **** --- 1,60 ---- + ---- 2.0r27 --- + - Fixed currency problem in dying NPC's. + - Added commands: env, polyglottize + - Fixed "about" verb. + - Tweaked snoop daemon and snoop objects. + - Added pay-for-lessons feature in language teachers. + - Fixed bug in LIB_EXITS that hosed various things, + including wandering NPC's. + - mv command no longer overwrites an existing destination file. + - Fixed campus rooms with hosed CanReceive()'s that horked logins. + - Turned "move" command into "transfer", to address a conflict with + the "move" verb. - Fixed bug in admintool that prevented assistant admins from + using it. + - Fixed bug in eval that prevented assistant admins from using it. + - i3router: dynamic channel data is now persistent (newly created + channels won't disappear when the router resets). + - i3router: fixed a bug in chanlist-reply that stopped the + channel list being sent to LPUni lib muds. + - Modified install process to handle compiling on Wolfpaw servers. + - Added code example domain that was donated by Daelas @ Moraelinost. + - Added new podium, conference room, and margins command that were + donated by Daelas @ Moraelinost. + - i3router: correct password is now honored. + - Fixed help daemon bug that displayed race help twice. + - QCS: creating an enter no longer wipes exits from an existing + target room. + - Fixed bug in rescue login (Thanks, Nulvect). + - Fixed bug in tell command that mishandled mud name ambiguity. + - Fixed bug in CHAT_D that failed to return remote channel listeners. + - i3router: fixed bug that incorrectly rejected targeted emotes. + - Killing a creature super-ultra-extremely fast no longer + generates multiple corpses. + - QCS: Fixed some money problems with both how much things cost and + how much money they have. + - Modified encumbrance to be rather less cumbersome. + - Mailer default behavior now is to notify you when you receive new + mail. Already created characters do not have this default. + - Fixed opacity problem in worn storage. + - Fixed message board in arch room. + + ---- 2.0r26 --- + - Plugged some serious security holes ( http://dead-souls.net/news.html#16jun06 ) + - Cleaned up some unnecessary call_outs in lib objects. + - Added LIB_PULL. + - Added Virtual Campus domain. + - Fixed qcs problem that screwed LIB_DUMMY. + - Fixed local channel emote problem in RESTRICTED_INTERMUD mode. + - Added sefun: alpha_crypt. + - Added conference room east of the Adventurer's Hall. + - admintool no longer lets you remove the last + currency. + - COMPAT BUSTER: UNIX version now uses MD5 crypt, like the Windows + version. Character files created prior to using this driver + will not work with this driver. + - rwho no longer cares if the issuer of the + command is invisible. + ---- 2.0r25 --- - r24 had some unfortunate licensing problems attached. r25 includes a Win32 native binary that does not depend diff -c -r --new-file ds2.0r25/lib/doc/SUPPORT ds2.0r27/lib/doc/SUPPORT *** ds2.0r25/lib/doc/SUPPORT Mon Jan 23 09:17:12 2006 --- ds2.0r27/lib/doc/SUPPORT Wed Jul 5 00:00:58 2006 *************** *** 12,18 **** For your convenience, a telnet room has been added to your mud that can help you connect to Frontiers, so that you may ask for help if you run into trouble. Just enter the telnet room ! west of the wizard hall, and type: connect You may ask questions of creators there, but don't be offended if they are more interested in building --- 12,18 ---- For your convenience, a telnet room has been added to your mud that can help you connect to Frontiers, so that you may ask for help if you run into trouble. Just enter the telnet room ! west and north of the wizard hall, and type: connect You may ask questions of creators there, but don't be offended if they are more interested in building diff -c -r --new-file ds2.0r25/lib/doc/faq/admin ds2.0r27/lib/doc/faq/admin *** ds2.0r25/lib/doc/faq/admin Sat Mar 11 11:22:47 2006 --- ds2.0r27/lib/doc/faq/admin Wed Jul 5 00:01:03 2006 *************** *** 420,426 **** %^GREEN%^*** I found a bug. For real. Can you please fix it?***%^RESET%^ ! Email me: @users.sourceforge.net Please include a detailed description of the bug, and the exact error text and commands that produced it. A log file or --- 420,426 ---- %^GREEN%^*** I found a bug. For real. Can you please fix it?***%^RESET%^ ! Email me: @comcast.net Please include a detailed description of the bug, and the exact error text and commands that produced it. A log file or diff -c -r --new-file ds2.0r25/lib/doc/faq/general ds2.0r27/lib/doc/faq/general *** ds2.0r25/lib/doc/faq/general Sat Mar 11 11:22:47 2006 --- ds2.0r27/lib/doc/faq/general Wed Jul 5 00:01:03 2006 *************** *** 159,165 **** %^GREEN%^ How do I get started? %^RESET%^ ! Download the latest version from http://dead-souls.sourceforge.net/ or http://www.mudmagic.com/codes/download/lpc/mudos/dead_souls and install it. There are versions available for Windows and for Unix. The main difference between the two is the driver. The Windows driver is a Windows --- 159,165 ---- %^GREEN%^ How do I get started? %^RESET%^ ! Download the latest version from http://dead-souls.net/ or http://www.mudmagic.com/codes/download/lpc/mudos/dead_souls and install it. There are versions available for Windows and for Unix. The main difference between the two is the driver. The Windows driver is a Windows diff -c -r --new-file ds2.0r25/lib/doc/guide/chapter05 ds2.0r27/lib/doc/guide/chapter05 *** ds2.0r25/lib/doc/guide/chapter05 Thu Jun 1 23:22:23 2006 --- ds2.0r27/lib/doc/guide/chapter05 Wed Jul 5 00:01:03 2006 *************** *** 1,346 **** ! chapter 5 "Understanding the Lib" ! One of the most common questions I get goes something ! like this: "I'd like to change combat so that it is ! turns-based, with actions. How would I do this?" Another ! example might be "I'm setting up a farming system, with ! livestock and stuff. What should I look at?" ! ! To me, the questions are the same. Translated into ! my language, this is the meaning: "I have great ideas that ! require advanced knowledge of the lib to implement. How do I do it?" ! ! I'm usually at a loss when I get one of these, because ! I want to set people straight, but I don't want to hurt ! their feelings, either. In the FAQ's, my response is ! something along the lines of: ! ! "If there's anything in the Creator's Manual you don't ! understand, you aren't ready to try this." ! ! I hate to say that, because I think it's probably discouraging ! to hear. After all, whatever the project, it is very likely ! doable. You can make an LP mud do pretty much anything ! you want...that's the beauty of the flexibility of LPC. ! However, as they say, with great power comes great responsibility, ! and in this case, it is your responsibility to understand the ! lib, if you want to make major changes to it. Let's take the ! example of farming. ! ! Section I: Verbs ! ---------------- ! ! It is critical to understand how verbs work in order to ! do anything in Dead Souls of an advanced nature. Verbs are ! basically commands that do something to your environment, ! something in your environment, your "body", or something ! in your inventory. ! ! For example, "who" is not a verb. It's a standard command, ! which doesn't act on any cloned items. All it does is communicate ! with the lib to query the list of users logged on, and displays ! it to you in a particular manner. ! ! Then there's something like "zap". That *is* a verb, and ! it takes cloned items as arguments. When you "zap orc" this ! has a special meaning to the parsing system. The parser is the ! part of the game driver that tries to interpret your input ! and attempts to do something useful with it. When the parser ! catches a verb at the beginning of your input, it gets to ! work on figuring out how the rest of the words in the input ! relate to that verb. ! ! This is done through "rules". You can take a look ! at /verbs/creators/zap.c for the specific rules in this case. ! If the word or words (for example "first orc", "orcs", "an orc") ! match one or more objects in the room, the parser then ! sends the arguments to the verb object. The verb object is ! the loaded code from /verbs/creators/zap.c in this case. ! ! Depending on how the verb is coded, your command line will ! succeed or fail. ! ! For your new farming system, you're going to need some new ! verbs, so the first thing you need to do is understand verbs. ! You're going to have to build new verbs like "plow", and "plant", ! and "harvest". Therefore, you'll need to go over the verb ! tutorial, which is at http://dead-souls.net/verbs.html ! ! ! Section II: Lib Event Objects ! ----------------------------- ! ! In the verb tutorial, you read that when a verb acts on ! an object, the parser requires that the object have a function ! that handles that verb. If a chair object lacks a function ! like direct_sit() or something similar, the parser will assume ! your sit verb doesn't apply to chairs, and the command line ! will fail with something like "You can't sit on the chair". ! ! It would be incredibly tedious to have to code a sit verb ! handler in every piece of furniture you create. Similarly, ! your farmer's field plow *could* have a plow verb handler ! coded in it, but it is much better to create a lib object that ! your plow will inherit. That way, other objects can inherit ! that functionality without having to reinvent the wheel, and ! plowing in general will be a uniform experience across the mud. ! ! For example, one of the first systems I made when ! I started my lib obsession was the inheritable flashlight ! system. The original Dead Souls lib had regular old torches ! you'd light with a match, but it seemed to me that not every ! Dead Souls mud would be Sword & Sandals style, and a modern ! illumination system should be available. So I set about ! making a "turn" verb, so that once I had flashlights, ! you could "turn on the flashlight". ! ! I then created the lib object /lib/events/turn.c (when ! referring to lib objects, I often use the macro name. In ! this case, if I'd said LIB_TURN, it would be the same thing ! as saying /lib/events/turn.c). The lib object doesn't really ! *do* much of anything. That object isn't really where you ! need to be checking for validity of commands. What that ! object does, almost *all* it does, is to have functions that ! correspond to the verb "turn". That's it. It's kind of like ! a socket for a plug. The verb is the plug and you're trying ! to use it on something. If that something has a socket ! that fits your plug, then it'll work. ! ! Lib event objects come in different flavors, and some ! really do perform a bunch of thinking. But for the most part, ! for simple verbs, all you need is a lib event object that ! says "yes, I understand that verb". ! ! LIB_TURN is inherited by LIB_FLASHLIGHT. That means ! that when you clone an object that inherits LIB_FLASHLIGHT, ! it contains all the functions of /lib/flashlight.c plus ! all the functions that LIB_FLASHLIGHT inherits from LIB_TURN. ! ! Because your flashlight inherits LIB_FLASHLIGHT, ! which inherits LIB_TURN, when you issue the command line ! "turn on flashlight", the parser checks with the ! flashlight to see if it knows what you're talking about, ! and gets a "yes, I know that verb" response. At that point ! the parser says "fine, here's the rest of what this ! player thinks he can do with you and the turn verb" and now ! it's up to LIB_FLASHLIGHT to figure out whether it has ! enough batteries, of the right kind, with sufficient ! charge, and so on. ! ! For your new farming system, you'll need to implement ! a similar scheme. Your "plow" and "hoe" verbs will need ! lib event objects that can be inherited by the cloned ! objects you want to plow and hoe with. ! ! In this case, LIB_FLASHLIGHT and the turn verb ! aren't the best models for your new plowing system. This ! is because your plow is something you plow *with*, ! as opposed to something that *is plowed*. ! ! To see how a plowing system might be implemented, ! take a look at the "dig" verb, LIB_DIGGING, and ! LIB_DIG_WITH. This is what a shovel would use, so ! that you can "dig in sand with the shovel". After ! studying the dig system, and lots of trial and error, ! you will hopefully eventually come up with a ! plow system that will let you "plow field with plow", ! for example. ! ! ! Section III: Daemons ! -------------------- ! ! So, now you've created a plow verb, and a plow lib ! event object, it works, and now you're happily plowing ! along. Let's say that the rooms field1.c and field2.c ! are plowable rooms. Presumably, you don't want people ! to be able to plow here all the time. The fields need ! time to do their thing, and constant plowing would ! slow down the growth of your tender young corn stalks. ! ! Normally, you might deal with this by having ! a local variable in the room, so that "harvest time is ! 50 hours, unless someone plows again, which ! makes it take longer", this sort of thing. Let's call ! that variable PlowedTimes. ! ! But, oh noes! The mud rebooted! Now all the rooms ! have reset, and the planting and plowing variables ! have reset! ! You might avoid this problem by just not rebooting, ! but even if you manage never ever to reboot your mud, ! the mud periodically does resets of unused objects, ! retiring them from memory and resetting their values ! to zero. ! You might avoid *that* problem by setting your ! fields to be "NoClean", to avoid resets, but this is ! very inelegant. Rather than ensuring the integrity ! of your game data, you're just crossing your fingers ! and hoping it doesn't go away. ! ! The solution is to use a daemon. A daemon is an ! object loaded into memory that acts like an arbiter ! of information. For example, STARGATE_D keeps track ! of where stargates are, and which gates are in ! what state, and which gates are connected to each ! other. It is important to have one location where ! this data can be accessed, because a new gate must ! be able to know what other valid gates there are, and ! it must be able to know what gates are idle and ! therefore accessible. STARGATE_D is a central ! repository of this data, and serves as a mediator ! for connection requests, keeping things working right. ! ! In this case, the daemon's job would be to ! keep track of which fields have been plowed, how ! many times, and how long it'll take to get to harvest ! time. Dead Souls daemons typically use object ! persistence files ( http://dead-souls.sourceforge.net/ds-admin-faq.html#80 ) ! to avoid losing information during object reloads or ! mud reboots. A FARMING_D is exactly what you need to ! keep track of and manage this kind of data. ! Section IV: Skills ------------------ ! To what extent should people be able to plow? How ! well should they do it? If you care enough about farming ! to have come this far, you've probably got ideas about ! what good plowing is and what criteria a player should ! have for extracting the most from their land. ! ! This is where skills can play an important role. ! What you have to understand about skills is that they ! are simply variables in a player's body. Skills don't ! have to be gained by joining a class, guild, or being ! member of a race. Adding a skill to a player is as ! simple as having an object do something like this: ! ! this_player()->SetSkill("scuba diving",1); ! ! And if just strapping on a scuba tank does it, then ! now that player has that skill. ! ! Now, *normally* players are granted skills through ! something more sensible than just picking up an object. ! It makes more sense to have skills granted when a ! player is taught something by an npc, or joins a guild, ! or whatever, which is why traditionally that's how ! it has worked. ! ! So let's say you have a Farmer's Guild, then. When ! you show up and sign the registry, some npc pops out, ! "teaches" you the farming skills you need (by simply ! adding the skills "farming" and "plowing" and "sowing" ! to the player) and now you have the skills. If you ! want, you can even create a Farmer class, like Fighters, ! but that's up to you and not in the scope of this chapter. ! ! This plowing skill is totally useless right ! now. It does nothing at all, because you haven't yet ! coded anything that makes use of it. This is the key ! concept of the skills system that you must understand. ! ! Just giving a player a skill does not mean that ! it has any use. For a skill to be useful, there ! must be lib verbs and/or objects that evaluate the ! skill and perform calculations based on it. ! ! It is therefore time to add these skill checks to the ! objects that need them. For example, suppose our ! farmer's plowing skill is at level 5. This doesn't ! mean he's a level 5 player necessarily, just that ! at plowing, his skill level is 5. ! You might have a function in your /verbs/items/plow.c ! verb that checks that skill, and determines how long ! the field will take to grow based on it. Perhaps ! for a level 5 plower, the field will be ready for ! harvest in 45 hours. Perhaps for a level 10 plower, ! it would be 35. You might have either the plow verb ! or the plow lib event object do something like: ! ! int PlowFunction(string field){ ! int skill_level = this_player()->GetSkillLevel("plowing"); ! ! if(skill_level) skill_level *= 2; ! else skill_level = 1; ! FARMING_D->eventModHarvestTime(field, skill_level); ! return 1; ! } ! ! It's a silly example, but you get the idea. The ! "plowing" skill is valuable because the lib uses it ! in some way to modify events the player performs. If ! the lib doesn't know about it, the skill has no value. ! ! In the case of, for example, "blade attack", the ! lib checks for this if you're wielding a sword and ! you're in combat. Based on how good you are at blade ! attack, combat.c will modify how much damage you ! inflict when you hit your opponent. ! ! ! Section V: Special Abilities ! ---------------------------- ! ! Perhaps "plant" and "sow" are verbs that should ! only be available to players with the skills "planting" ! and "sowing". ! Or, if farming isn't your thing and you want to ! enhance combat, you might want Fighters who are members ! of the Viking Guild to have a special ability called ! "massacre" that can do extra special damage. ! ! This is best done by simply creating the sow, ! plant, and/or massacre verbs, then coding the verbs to ! work only for those people you designate. If the player ! isn't a Fighter and a Viking, perhaps the massacre ! verb would return something like "You have no idea ! how to do that." and do no more. ! ! You are, of course, free to implement a Special ! Abilities System along the lines of the existing Dead ! Souls spell system. I encourage you to do so, if ! you're so inclined, and to share that code with me, ! if it works. But it isn't necessary. The existing ! verb system is plenty sophisticated enough to ! handle such special events. ! ! ! Section IV: Summary ! ------------------- ! ! At this point in my lib coder development, I have ! a hard time distinguishing what is easy and what is ! hard for new people. I have been surprised by people ! who take a long time to grasp simple concepts. I have ! been surprised by people who grasp complex concepts ! so quickly that I can't answer their questions. ! ! Where you stand in that continuum I can't say. ! What I can say is that if this chapter seems like it ! went mostly over your head, you shouldn't worry too ! much about it. It took me years of coding experience ! and months of obsessed lib analysis to reach my ! current level of understanding. You should not expect ! yourself to grok everything in this guidebook the ! first time around. ! ! As suggested in the previous chapters, it's best ! to start small, slow, and steady. As you build simple ! things, more complex things will make more sense, and ! you'll eventually reach the level of technical ! expertise you need. ! ! This chapter was not written to make you feel ! overwhelmed by what you don't know. It was written so ! that you understand what you're asking when you ! say "How do I revamp bodies and limbs so they have ! knees and elbows you can poke people with?" ! ! Once you understand the lib, it really really isn't ! that hard to do. But if you are a beginner, don't ! set yourself up for failure by taking a leap at a ! project you don't have the experience to tackle. --- 1,111 ---- ! chapter 5 "Guilds, Classes, and Clans" ! Section I: Classes ! ------------------ ! ! I suspect you are already quite familiar with ! the concept of classes. Some people even have very ! strong feelings about classes, specifically, they ! hate them. ! ! Dead Souls 1 came with a class system, and ! I decided to keep it because it sort of worked, and ! many people are familiar with classes and want to ! have them on their mud. ! ! However, you don't have to use them. ! ! That's right. Using classes is not required. You ! can very easily make your Dead Souls mud completely ! devoid of classes, if that's what you want. ! ! The reason for this is that in Dead Souls, the only ! thing a class does is confer on a player a class title, ! like "Fighter", and load her up with skill settings appropriate ! to that class. That's it. Classes do nothing more. ! ! If you want player X to have all the skills of a ! fighter and all the skills of a mage, just make it so. ! They don't need to have class to have skills. Add ! "kite flying" while you're at it. It doesn't matter. ! Dead Souls operates on a skill system. The class system ! is incidental to it and can be dispensed with entirely. ! ! On the other hand, for those folks who appreciate ! the role play and tactical elements involved in using ! classes, Dead Souls provides you the ability to use ! the existing stock classes, and permits you to create ! your own. The files in /secure/cfg/classes describe them. ! See http://dead-souls.net/ds-creator-faq.html#2.46 ! for the exact syntax of these files. ! ! You'll notice that there is a field for "how important" ! a skill is. What this modifier does is determine how ! quickly your player's skill levels rise when her player ! level rises. A fighter's magical ability does not increase ! much when she is promoted a player level, but a mage's ! magical ability certainly does. ! ! For those who find classes distasteful, this kind ! of "skill hobbling" is just the reason they hate classes: ! they feel they are too restrictive. If you are such ! an admin, just dont use classes, and whenever you award ! a skill to a player, set the "how important" number ! (techninally known as the "skill class" but that's a very ! confusing term) to the same for everyone. ! ! Incidentally, you don't *need* player levels either. ! I will leave it as an exercise for the reader to imagine ! a scheme where players do not have advancement levels. ! ! DS1 allowed players to join more than one class. ! Unfortunately, the system was buggy enough and stripped ! of classes so that it was both meaningless and a bit ! of a problem. Multi-classing is by default not permitted ! on DS2, but it's easy enough to implement on your own. ! Review the header data in the class files to see the ! syntax. ! ! However, since multiclassing isn't something I ! am interested in working on right now, I will not be ! assisting anyone in getting that to work. ! Section II: Guilds ------------------ ! The concept of "guilds" carries some baggage for me. I ! learned about mudding by playing on Darker Realms, an LP ! mud where a "guild" was effectively a class. There was ! the mage's guild, the barbarian guild, etc. There were ! also guilds that blurred the distinction between class ! and race, like shapeshifters, cyborg, and dragon. ! ! When I ran into the Dead Souls 1 conception of guilds, ! then, I was pretty confused. In DS1, a guild was ! kind of a player-run club. There was a guild object ! that made some sort of determination about who ! was in or out, who was the boss, etc. My presumption is ! that in later iterations of Nightmare V, these guilds ! were fleshed out and worked properly. I presume this ! because in DS1 they didn't, and they seemed to make some ! assumptions about the lib that were not correct. ! ! I decided to change this for DS2, and the way it now ! works is that guilds are neither classes nor player-run ! clubs. The plan is to have guilds be not-necessarily-class- ! based affiliations a player can have with balanced ! advantages and disadvantages. As of DS2.0 there is no ! working sample of this, but that's the plan for post ! 2.1 development. ! ! ! Section III: Clans ! ------------------ ! ! Clans serve the purpose that DS1 guilds did. They are ! player-run affiliations, managed by clan objects that ! confer identity and status. As of DS2.0 there is no working ! sample of this, but that's the plan for post 2.1 development. ! diff -c -r --new-file ds2.0r25/lib/doc/guide/chapter06 ds2.0r27/lib/doc/guide/chapter06 *** ds2.0r25/lib/doc/guide/chapter06 Mon May 22 11:34:50 2006 --- ds2.0r27/lib/doc/guide/chapter06 Wed Jul 5 00:01:03 2006 *************** *** 1,111 **** ! chapter 6 "Guilds, Classes, and Clans" ! ! Section I: Classes ! ------------------ ! ! I suspect you are already quite familiar with ! the concept of classes. Some people even have very ! strong feelings about classes, specifically, they ! hate them. ! ! Dead Souls 1 came with a class system, and ! I decided to keep it because it sort of worked, and ! many people are familiar with classes and want to ! have them on their mud. ! ! However, you don't have to use them. ! ! That's right. Using classes is not required. You ! can very easily make your Dead Souls mud completely ! devoid of classes, if that's what you want. ! ! The reason for this is that in Dead Souls, the only ! thing a class does is confer on a player a class title, ! like "Fighter", and load her up with skill settings appropriate ! to that class. That's it. Classes do nothing more. ! ! If you want player X to have all the skills of a ! fighter and all the skills of a mage, just make it so. ! They don't need to have class to have skills. Add ! "kite flying" while you're at it. It doesn't matter. ! Dead Souls operates on a skill system. The class system ! is incidental to it and can be dispensed with entirely. ! ! On the other hand, for those folks who appreciate ! the role play and tactical elements involved in using ! classes, Dead Souls provides you the ability to use ! the existing stock classes, and permits you to create ! your own. The files in /secure/cfg/classes describe them. ! See http://dead-souls.sourceforge.net/ds-creator-faq.html#2.46 ! for the exact syntax of these files. ! ! You'll notice that there is a field for "how important" ! a skill is. What this modifier does is determine how ! quickly your player's skill levels rise when her player ! level rises. A fighter's magical ability does not increase ! much when she is promoted a player level, but a mage's ! magical ability certainly does. ! ! For those who find classes distasteful, this kind ! of "skill hobbling" is just the reason they hate classes: ! they feel they are too restrictive. If you are such ! an admin, just dont use classes, and whenever you award ! a skill to a player, set the "how important" number ! (techninally known as the "skill class" but that's a very ! confusing term) to the same for everyone. ! ! Incidentally, you don't *need* player levels either. ! I will leave it as an exercise for the reader to imagine ! a scheme where players do not have advancement levels. ! ! DS1 allowed players to join more than one class. ! Unfortunately, the system was buggy enough and stripped ! of classes so that it was both meaningless and a bit ! of a problem. Multi-classing is by default not permitted ! on DS2, but it's easy enough to implement on your own. ! Review the header data in the class files to see the ! syntax. ! ! However, since multiclassing isn't something I ! am interested in working on right now, I will not be ! assisting anyone in getting that to work. ! ! ! Section II: Guilds ! ------------------ ! ! The concept of "guilds" carries some baggage for me. I ! learned about mudding by playing on Darker Realms, an LP ! mud where a "guild" was effectively a class. There was ! the mage's guild, the barbarian guild, etc. There were ! also guilds that blurred the distinction between class ! and race, like shapeshifters, cyborg, and dragon. ! ! When I ran into the Dead Souls 1 conception of guilds, ! then, I was pretty confused. In DS1, a guild was ! kind of a player-run club. There was a guild object ! that made some sort of determination about who ! was in or out, who was the boss, etc. My presumption is ! that in later iterations of Nightmare V, these guilds ! were fleshed out and worked properly. I presume this ! because in DS1 they didn't, and they seemed to make some ! assumptions about the lib that were not correct. ! ! I decided to change this for DS2, and the way it now ! works is that guilds are neither classes nor player-run ! clubs. The plan is to have guilds be not-necessarily-class- ! based affiliations a player can have with balanced ! advantages and disadvantages. As of DS2.0 there is no ! working sample of this, but that's the plan for post ! 2.1 development. ! ! ! Section III: Clans ! ------------------ ! ! Clans serve the purpose that DS1 guilds did. They are ! player-run affiliations, managed by clan objects that ! confer identity and status. As of DS2.0 there is no working ! sample of this, but that's the plan for post 2.1 development. --- 1,50 ---- ! chapter 6 "Privacy" + One of the most powerful and most easily abused tools + in your administrative arsenal is the snoop command. When + you "snoop ", you get to see everything they + say and do. + Players usually find this intrusive and objectionable, + and it is ethically shaky to do this without their + knowledge and consent. The only circumstances under which + snooping is unambiguously ethical are: + + * Snooping one of your own test characters. + + * Snooping a player (with their consent) for the purposes of + troubleshooting a bug. + + * Snooping a user (without their consent) to investigate + a legitimate suspicion of malfeasance. + + Secretly snooping people for your personal amusement is + just flat wrong. + + By default, only admins can snoop. Admins are players who + are members of one or both of the groups SECURE and ASSIST. + + An assistant admin *cannot* snoop a full admin. However, + assistant admins have read access to the snoop log directory, + so if global monitoring is enabled, they can read the + contents of a full admin's monitor log. + + The new SNOOP_D system allows for the simultaneous + snooping of multiple people, and allows multiple people to + snoop the same person. It also permits you to enable + monitoring of users without having to snoop, by using the + monitor command to log i/o to /secure/log/adm. + + The GLOBAL_MONITOR parameter in config.h will take one of three + arguments. 0 = monitor nobody. 1 = monitor everyone. 2 = monitor + everyone except admins. After changing it, reboot the mud + to make sure the change takes effect. + + This functionality isn't here for your entertainment. In + fact, I had to think long and hard before sharing my snoop + code with you and putting it in the general lib distribution. + + In the end, though, I believe that the benefits outweigh + the risk of abuse. As an admin, you have the right to know + what's going on in your mud, and as a lib coder, it isn't + my business to interfere with that. diff -c -r --new-file ds2.0r25/lib/doc/guide/chapter08 ds2.0r27/lib/doc/guide/chapter08 *** ds2.0r25/lib/doc/guide/chapter08 Mon May 22 11:34:50 2006 --- ds2.0r27/lib/doc/guide/chapter08 Wed Jul 5 00:01:03 2006 *************** *** 1,50 **** ! chapter 8 "Privacy" ! One of the most powerful and most easily abused tools ! in your administrative arsenal is the snoop command. When ! you "snoop ", you get to see everything they ! say and do. ! Players usually find this intrusive and objectionable, ! and it is ethically shaky to do this without their ! knowledge and consent. The only circumstances under which ! snooping is unambiguously ethical are: ! ! * Snooping one of your own test characters. ! ! * Snooping a player (with their consent) for the purposes of ! troubleshooting a bug. ! ! * Snooping a user (without their consent) to investigate ! a legitimate suspicion of malfeasance. ! ! Secretly snooping people for your personal amusement is ! just flat wrong. ! ! By default, only admins can snoop. Admins are players who ! are members of one or both of the groups SECURE and ASSIST. ! ! An assistant admin *cannot* snoop a full admin. However, ! assistant admins have read access to the snoop log directory, ! so if global monitoring is enabled, they can read the ! contents of a full admin's monitor log. ! ! The new SNOOP_D system allows for the simultaneous ! snooping of multiple people, and allows multiple people to ! snoop the same person. It also permits you to enable ! monitoring of users without having to snoop, by using the ! monitor command to log i/o to /secure/log/adm. ! ! The GLOBAL_MONITOR parameter in config.h will take one of three ! arguments. 0 = monitor nobody. 1 = monitor everyone. 2 = monitor ! everyone except admins. After changing it, reboot the mud ! to make sure the change takes effect. ! ! This functionality isn't here for your entertainment. In ! fact, I had to think long and hard before sharing my snoop ! code with you and putting it in the general lib distribution. ! ! In the end, though, I believe that the benefits outweigh ! the risk of abuse. As an admin, you have the right to know ! what's going on in your lib, and as a lib coder, it isn't ! my business to interfere with that. --- 1,346 ---- ! chapter 8 "Understanding the Lib" ! One of the most common questions I get goes something ! like this: "I'd like to change combat so that it is ! turns-based, with actions. How would I do this?" Another ! example might be "I'm setting up a farming system, with ! livestock and stuff. What should I look at?" ! ! To me, the questions are the same. Translated into ! my language, this is the meaning: "I have great ideas that ! require advanced knowledge of the lib to implement. How do I do it?" ! ! I'm usually at a loss when I get one of these, because ! I want to set people straight, but I don't want to hurt ! their feelings, either. In the FAQ's, my response is ! something along the lines of: ! ! "If there's anything in the Creator's Manual you don't ! understand, you aren't ready to try this." ! ! I hate to say that, because I think it's probably discouraging ! to hear. After all, whatever the project, it is very likely ! doable. You can make an LP mud do pretty much anything ! you want...that's the beauty of the flexibility of LPC. ! However, as they say, with great power comes great responsibility, ! and in this case, it is your responsibility to understand the ! lib, if you want to make major changes to it. Let's take the ! example of farming. ! ! Section I: Verbs ! ---------------- ! ! It is critical to understand how verbs work in order to ! do anything in Dead Souls of an advanced nature. Verbs are ! basically commands that do something to your environment, ! something in your environment, your "body", or something ! in your inventory. ! ! For example, "who" is not a verb. It's a standard command, ! which doesn't act on any cloned items. All it does is communicate ! with the lib to query the list of users logged on, and displays ! it to you in a particular manner. ! ! Then there's something like "zap". That *is* a verb, and ! it takes cloned items as arguments. When you "zap orc" this ! has a special meaning to the parsing system. The parser is the ! part of the game driver that tries to interpret your input ! and attempts to do something useful with it. When the parser ! catches a verb at the beginning of your input, it gets to ! work on figuring out how the rest of the words in the input ! relate to that verb. ! ! This is done through "rules". You can take a look ! at /verbs/creators/zap.c for the specific rules in this case. ! If the word or words (for example "first orc", "orcs", "an orc") ! match one or more objects in the room, the parser then ! sends the arguments to the verb object. The verb object is ! the loaded code from /verbs/creators/zap.c in this case. ! ! Depending on how the verb is coded, your command line will ! succeed or fail. ! ! For your new farming system, you're going to need some new ! verbs, so the first thing you need to do is understand verbs. ! You're going to have to build new verbs like "plow", and "plant", ! and "harvest". Therefore, you'll need to go over the verb ! tutorial, which is at http://dead-souls.net/verbs.html ! ! ! Section II: Lib Event Objects ! ----------------------------- ! ! In the verb tutorial, you read that when a verb acts on ! an object, the parser requires that the object have a function ! that handles that verb. If a chair object lacks a function ! like direct_sit() or something similar, the parser will assume ! your sit verb doesn't apply to chairs, and the command line ! will fail with something like "You can't sit on the chair". ! ! It would be incredibly tedious to have to code a sit verb ! handler in every piece of furniture you create. Similarly, ! your farmer's field plow *could* have a plow verb handler ! coded in it, but it is much better to create a lib object that ! your plow will inherit. That way, other objects can inherit ! that functionality without having to reinvent the wheel, and ! plowing in general will be a uniform experience across the mud. ! ! For example, one of the first systems I made when ! I started my lib obsession was the inheritable flashlight ! system. The original Dead Souls lib had regular old torches ! you'd light with a match, but it seemed to me that not every ! Dead Souls mud would be Sword & Sandals style, and a modern ! illumination system should be available. So I set about ! making a "turn" verb, so that once I had flashlights, ! you could "turn on the flashlight". ! ! I then created the lib object /lib/events/turn.c (when ! referring to lib objects, I often use the macro name. In ! this case, if I'd said LIB_TURN, it would be the same thing ! as saying /lib/events/turn.c). The lib object doesn't really ! *do* much of anything. That object isn't really where you ! need to be checking for validity of commands. What that ! object does, almost *all* it does, is to have functions that ! correspond to the verb "turn". That's it. It's kind of like ! a socket for a plug. The verb is the plug and you're trying ! to use it on something. If that something has a socket ! that fits your plug, then it'll work. ! ! Lib event objects come in different flavors, and some ! really do perform a bunch of thinking. But for the most part, ! for simple verbs, all you need is a lib event object that ! says "yes, I understand that verb". ! ! LIB_TURN is inherited by LIB_FLASHLIGHT. That means ! that when you clone an object that inherits LIB_FLASHLIGHT, ! it contains all the functions of /lib/flashlight.c plus ! all the functions that LIB_FLASHLIGHT inherits from LIB_TURN. ! ! Because your flashlight inherits LIB_FLASHLIGHT, ! which inherits LIB_TURN, when you issue the command line ! "turn on flashlight", the parser checks with the ! flashlight to see if it knows what you're talking about, ! and gets a "yes, I know that verb" response. At that point ! the parser says "fine, here's the rest of what this ! player thinks he can do with you and the turn verb" and now ! it's up to LIB_FLASHLIGHT to figure out whether it has ! enough batteries, of the right kind, with sufficient ! charge, and so on. ! ! For your new farming system, you'll need to implement ! a similar scheme. Your "plow" and "hoe" verbs will need ! lib event objects that can be inherited by the cloned ! objects you want to plow and hoe with. ! ! In this case, LIB_FLASHLIGHT and the turn verb ! aren't the best models for your new plowing system. This ! is because your plow is something you plow *with*, ! as opposed to something that *is plowed*. ! ! To see how a plowing system might be implemented, ! take a look at the "dig" verb, LIB_DIGGING, and ! LIB_DIG_WITH. This is what a shovel would use, so ! that you can "dig in sand with the shovel". After ! studying the dig system, and lots of trial and error, ! you will hopefully eventually come up with a ! plow system that will let you "plow field with plow", ! for example. ! ! ! Section III: Daemons ! -------------------- ! ! So, now you've created a plow verb, and a plow lib ! event object, it works, and now you're happily plowing ! along. Let's say that the rooms field1.c and field2.c ! are plowable rooms. Presumably, you don't want people ! to be able to plow here all the time. The fields need ! time to do their thing, and constant plowing would ! slow down the growth of your tender young corn stalks. ! ! Normally, you might deal with this by having ! a local variable in the room, so that "harvest time is ! 50 hours, unless someone plows again, which ! makes it take longer", this sort of thing. Let's call ! that variable PlowedTimes. ! ! But, oh noes! The mud rebooted! Now all the rooms ! have reset, and the planting and plowing variables ! have reset! ! You might avoid this problem by just not rebooting, ! but even if you manage never ever to reboot your mud, ! the mud periodically does resets of unused objects, ! retiring them from memory and resetting their values ! to zero. ! You might avoid *that* problem by setting your ! fields to be "NoClean", to avoid resets, but this is ! very inelegant. Rather than ensuring the integrity ! of your game data, you're just crossing your fingers ! and hoping it doesn't go away. ! ! The solution is to use a daemon. A daemon is an ! object loaded into memory that acts like an arbiter ! of information. For example, STARGATE_D keeps track ! of where stargates are, and which gates are in ! what state, and which gates are connected to each ! other. It is important to have one location where ! this data can be accessed, because a new gate must ! be able to know what other valid gates there are, and ! it must be able to know what gates are idle and ! therefore accessible. STARGATE_D is a central ! repository of this data, and serves as a mediator ! for connection requests, keeping things working right. ! ! In this case, the daemon's job would be to ! keep track of which fields have been plowed, how ! many times, and how long it'll take to get to harvest ! time. Dead Souls daemons typically use object ! persistence files ( http://dead-souls.net/ds-admin-faq.html#80 ) ! to avoid losing information during object reloads or ! mud reboots. A FARMING_D is exactly what you need to ! keep track of and manage this kind of data. ! ! ! Section IV: Skills ! ------------------ ! ! To what extent should people be able to plow? How ! well should they do it? If you care enough about farming ! to have come this far, you've probably got ideas about ! what good plowing is and what criteria a player should ! have for extracting the most from their land. ! ! This is where skills can play an important role. ! What you have to understand about skills is that they ! are simply variables in a player's body. Skills don't ! have to be gained by joining a class, guild, or being ! member of a race. Adding a skill to a player is as ! simple as having an object do something like this: ! ! this_player()->SetSkill("scuba diving",1); ! ! And if just strapping on a scuba tank does it, then ! now that player has that skill. ! ! Now, *normally* players are granted skills through ! something more sensible than just picking up an object. ! It makes more sense to have skills granted when a ! player is taught something by an npc, or joins a guild, ! or whatever, which is why traditionally that's how ! it has worked. ! ! So let's say you have a Farmer's Guild, then. When ! you show up and sign the registry, some npc pops out, ! "teaches" you the farming skills you need (by simply ! adding the skills "farming" and "plowing" and "sowing" ! to the player) and now you have the skills. If you ! want, you can even create a Farmer class, like Fighters, ! but that's up to you and not in the scope of this chapter. ! ! This plowing skill is totally useless right ! now. It does nothing at all, because you haven't yet ! coded anything that makes use of it. This is the key ! concept of the skills system that you must understand. ! ! Just giving a player a skill does not mean that ! it has any use. For a skill to be useful, there ! must be lib verbs and/or objects that evaluate the ! skill and perform calculations based on it. ! ! It is therefore time to add these skill checks to the ! objects that need them. For example, suppose our ! farmer's plowing skill is at level 5. This doesn't ! mean he's a level 5 player necessarily, just that ! at plowing, his skill level is 5. ! You might have a function in your /verbs/items/plow.c ! verb that checks that skill, and determines how long ! the field will take to grow based on it. Perhaps ! for a level 5 plower, the field will be ready for ! harvest in 45 hours. Perhaps for a level 10 plower, ! it would be 35. You might have either the plow verb ! or the plow lib event object do something like: ! ! int PlowFunction(string field){ ! int skill_level = this_player()->GetSkillLevel("plowing"); ! ! if(skill_level) skill_level *= 2; ! else skill_level = 1; ! FARMING_D->eventModHarvestTime(field, skill_level); ! return 1; ! } ! ! It's a silly example, but you get the idea. The ! "plowing" skill is valuable because the lib uses it ! in some way to modify events the player performs. If ! the lib doesn't know about it, the skill has no value. ! ! In the case of, for example, "blade attack", the ! lib checks for this if you're wielding a sword and ! you're in combat. Based on how good you are at blade ! attack, combat.c will modify how much damage you ! inflict when you hit your opponent. ! ! ! Section V: Special Abilities ! ---------------------------- ! ! Perhaps "plant" and "sow" are verbs that should ! only be available to players with the skills "planting" ! and "sowing". ! Or, if farming isn't your thing and you want to ! enhance combat, you might want Fighters who are members ! of the Viking Guild to have a special ability called ! "massacre" that can do extra special damage. ! ! This is best done by simply creating the sow, ! plant, and/or massacre verbs, then coding the verbs to ! work only for those people you designate. If the player ! isn't a Fighter and a Viking, perhaps the massacre ! verb would return something like "You have no idea ! how to do that." and do no more. ! ! You are, of course, free to implement a Special ! Abilities System along the lines of the existing Dead ! Souls spell system. I encourage you to do so, if ! you're so inclined, and to share that code with me, ! if it works. But it isn't necessary. The existing ! verb system is plenty sophisticated enough to ! handle such special events. ! ! ! Section IV: Summary ! ------------------- ! ! At this point in my lib coder development, I have ! a hard time distinguishing what is easy and what is ! hard for new people. I have been surprised by people ! who take a long time to grasp simple concepts. I have ! been surprised by people who grasp complex concepts ! so quickly that I can't answer their questions. ! ! Where you stand in that continuum I can't say. ! What I can say is that if this chapter seems like it ! went mostly over your head, you shouldn't worry too ! much about it. It took me years of coding experience ! and months of obsessed lib analysis to reach my ! current level of understanding. You should not expect ! yourself to grok everything in this guidebook the ! first time around. ! ! As suggested in the previous chapters, it's best ! to start small, slow, and steady. As you build simple ! things, more complex things will make more sense, and ! you'll eventually reach the level of technical ! expertise you need. ! ! This chapter was not written to make you feel ! overwhelmed by what you don't know. It was written so ! that you understand what you're asking when you ! say "How do I revamp bodies and limbs so they have ! knees and elbows you can poke people with?" ! ! Once you understand the lib, it really really isn't ! that hard to do. But if you are a beginner, don't ! set yourself up for failure by taking a leap at a ! project you don't have the experience to tackle. diff -c -r --new-file ds2.0r25/lib/doc/hbook/chapter04 ds2.0r27/lib/doc/hbook/chapter04 *** ds2.0r25/lib/doc/hbook/chapter04 Sat Mar 11 11:14:53 2006 --- ds2.0r27/lib/doc/hbook/chapter04 Wed Jul 5 00:01:03 2006 *************** *** 23,31 **** friends to tackle the orcs together, or raise your level to the point where you're tough enough to take them on. ! To raise your level, wander around in the newbie mansion. There's ! lots of loot there you can sell at Otik's shop, and with the cash you ! can then get some proper weaponry and armor. Silver is heavy, so don't try to carry all your money around all the time. Request an account from Zoe the banker and keep your money there until you really need it. --- 23,34 ---- friends to tackle the orcs together, or raise your level to the point where you're tough enough to take them on. ! To raise your level, wander around in the newbie mansion, which ! is south of the village church. ! ! There's lots of loot there you can sell at Otik's shop, and with the ! cash you can then get some proper weaponry and armor. ! Silver is heavy, so don't try to carry all your money around all the time. Request an account from Zoe the banker and keep your money there until you really need it. *************** *** 34,40 **** finding the secret room will give you experience and quest points too. (hint, there might be more than one secret room) ! Once you have enough experience and/and or points, go to Dirk in the adventurers hall and "%^GREEN%^ask dirk to advance%^RESET%^". Make sure you learn some spells from Herkimer, because if you --- 37,43 ---- finding the secret room will give you experience and quest points too. (hint, there might be more than one secret room) ! Once you have enough experience and/or points, go to Dirk in the adventurers hall and "%^GREEN%^ask dirk to advance%^RESET%^". Make sure you learn some spells from Herkimer, because if you diff -c -r --new-file ds2.0r25/lib/doc/help/creators/admin ds2.0r27/lib/doc/help/creators/admin *** ds2.0r25/lib/doc/help/creators/admin Fri May 12 21:13:22 2006 --- ds2.0r27/lib/doc/help/creators/admin Wed Jul 5 00:01:10 2006 *************** *** 10,18 **** Your most valuable tools will be the Dead Souls FAQs: ! http://dead-souls.sourceforge.net/ds-admin-faq.html ! http://dead-souls.sourceforge.net/ds-creator-faq.html Almost everything else will flow from your familiarity and understanding of the information there. --- 10,18 ---- Your most valuable tools will be the Dead Souls FAQs: ! http://dead-souls.net/ds-admin-faq.html ! http://dead-souls.net/ds-creator-faq.html Almost everything else will flow from your familiarity and understanding of the information there. diff -c -r --new-file ds2.0r25/lib/doc/help/creators/creation ds2.0r27/lib/doc/help/creators/creation *** ds2.0r25/lib/doc/help/creators/creation Mon Jan 23 09:17:12 2006 --- ds2.0r27/lib/doc/help/creators/creation Wed Jul 5 00:01:10 2006 *************** *** 16,21 **** In the meantime, take a look below at the commands in actual use, with a few added comments: ! http://dead-souls.sourceforge.net/example.html --- 16,21 ---- In the meantime, take a look below at the commands in actual use, with a few added comments: ! http://dead-souls.net/example.html diff -c -r --new-file ds2.0r25/lib/doc/help/creators/creator_general ds2.0r27/lib/doc/help/creators/creator_general *** ds2.0r25/lib/doc/help/creators/creator_general Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/doc/help/creators/creator_general Wed Jul 5 00:01:10 2006 *************** *** 0 **** --- 1,21 ---- + Common Creator commands: + + File commands: + ------------- + cp - copy a file + mv - move or rename a file + cd - change your working directory + ls - list the contents of your directory + ed - edit a file (WARNING: if you get stuck, type a + single period on a blank line, then Q, then enter) + rm - delete a file + more - page through the contents of a file + cat - display the entire contents of a file + update - load a file into memory + + Creation commands (used on objects, not files): + ------------- + create, modify, reload, delete, add, copy + + For more information on a command, type: help + See also: help help diff -c -r --new-file ds2.0r25/lib/doc/help/players/alias ds2.0r27/lib/doc/help/players/alias *** ds2.0r25/lib/doc/help/players/alias Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/doc/help/players/alias Wed Jul 5 00:01:10 2006 *************** *** 0 **** --- 1,28 ---- + Syntax: alias + alias $* + + This command lets you substitute a short command for a long one. + For example, rather than type out "get all from corpse" you + can create this alias: + + %^GREEN%^alias gc get all from corpse%^RESET%^ + + And all you need do is type "gc" to get the same effect. + You can also use a wildcard, like this: + + %^GREEN%^alias gc get all from $* corpse%^RESET%^ + + So that typing: %^GREEN%^gc first%^RESET%^ + Expands out to: %^GREEN%^get all from first corpse%^RESET%^ + + The wildcard is also helpful for channel aliases: + + %^GREEN%^alias ige intergossipemote $*%^RESET%^ + + To see your aliases, type: %^GREEN%^alias%^RESET%^ + + To remove an alias, type alias plus the alias, like so: + + %^GREEN%^alias gc%^RESET%^ + + diff -c -r --new-file ds2.0r25/lib/doc/help/players/channels ds2.0r27/lib/doc/help/players/channels *** ds2.0r25/lib/doc/help/players/channels Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/doc/help/players/channels Wed Jul 5 00:01:10 2006 *************** *** 0 **** --- 1,55 ---- + Channels are an out-of-character (OOC) means for users + to communicate with each other. You may hear the terms + "channel" and "line" used interchangeably. + + There are two main types of channels: local and intermud. + The default Dead Souls distribution uses these channels as + local: + + cre - only creators hear this + gossip - general offtopic stuff + newbie - everyone can hear this unless they turn it off + thief - channel for the thief class + fighter - channel for the fighter class + error - system errors + death - death announcements + mage - channel for the thief class + priest - channel for the thief class + explorer - channel for the thief class + admin - only admins hear this + + The following are intermud channels: + + ds - Dead Souls mud code talk + ds_test - testing testing 1, 2, 3, etc + intergossip - general offtopic stuff + lpuni - LPUniversity discussion + intercre - general technical chatter + + + By default, players do not have access to intermud channels. + Mud admins are asked to maintain some level of adherence to + the channel topics from their users. Muds that violate the + router admin's interpretation of "on-topic" will be asked + politely, if possible, to conform to the channel standards. + + Continued violations subject the offending mud to potential + banning. + + Hate speech is not tolerated, and flaming is frowned + upon, though each mud is expected to police itself and + enforce these standards on their own. + + If you don't like these rules, use a router other than the default. + + For local channels of course, none of this applies. Whatever + local rules are in place, that's what must be obeyed. + + Some tips: + --------- + To turn on/off a channel, type its name by itself, like this: newbie + + To know who is listening to a channel: list newbie + + To see a brief history of channel messages: hist newbie + diff -c -r --new-file ds2.0r25/lib/doc/help/players/player_general ds2.0r27/lib/doc/help/players/player_general *** ds2.0r25/lib/doc/help/players/player_general Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/doc/help/players/player_general Wed Jul 5 00:01:10 2006 *************** *** 0 **** --- 1,23 ---- + Basic player commands: + + look - get a view of your environment + inventory - take stock of your possessions + stat - your health and statistics + score - your overall ranking and information + + Dealing with objects: + -------------------- + look at, look in + get, drop, put, give + open, close + read + wield, unwield, wear, remove + + Moving around: + ------------- + n, s, e, w, ne, nw, se, sw, u, d + enter, go out, climb up, climb down, jump down + crawl, fly + + See also: help help + diff -c -r --new-file ds2.0r25/lib/domains/Ylsrim/room/bazaar.c ds2.0r27/lib/domains/Ylsrim/room/bazaar.c *** ds2.0r25/lib/domains/Ylsrim/room/bazaar.c Wed Dec 7 13:59:22 2005 --- ds2.0r27/lib/domains/Ylsrim/room/bazaar.c Wed Jul 5 00:01:11 2006 *************** *** 20,26 **** // the is the amount of light the street lamps make at night SetAmbientLight(30); // the obvious exits tell people how to leave the room - SetObviousExits("n, s, enter armory, enter weaponry"); // set the sounds people hear SetListen("Vendors are begging you to come look at their goods."); // set the short description... should not be capitalized --- 20,25 ---- diff -c -r --new-file ds2.0r25/lib/domains/Ylsrim/room/kaliid4.c ds2.0r27/lib/domains/Ylsrim/room/kaliid4.c *** ds2.0r25/lib/domains/Ylsrim/room/kaliid4.c Wed Dec 7 13:59:22 2005 --- ds2.0r27/lib/domains/Ylsrim/room/kaliid4.c Wed Jul 5 00:01:11 2006 *************** *** 14,24 **** SetClimate("arid"); SetAmbientLight(30); SetShort("Kaliid Road north of the bazaar"); ! SetLong("Kaliid Road stretches as far as you can see east and west " ! "across Ylsrim. South, Kaliid opens up into the central " ! "bazaar where vendors sell goods day and night. " ! "on the opposite side of the road is the entrance to " ! "the local adventurers' hall. North of here is a new town."); AddItem("hall", "A small building which serves as the focal point for " "the adventuring activities for which Ylsrim's support " "is widely known.", ({ "adventurer", "adventurers" })); --- 14,25 ---- SetClimate("arid"); SetAmbientLight(30); SetShort("Kaliid Road north of the bazaar"); ! SetLong("Kaliid Road stretches as far as you can see east and west across Ylsrim. South, Kaliid opens up into the central bazaar where vendors sell goods day and night. on the opposite side of the road is the entrance to the local adventurers' hall."); ! SetExits( ([ ! "east" : "/domains/Ylsrim/room/kaliid3", ! "south" : "/domains/Ylsrim/room/bazaar", ! "west" : "/domains/Ylsrim/room/kaliid5", ! ]) ); AddItem("hall", "A small building which serves as the focal point for " "the adventuring activities for which Ylsrim's support " "is widely known.", ({ "adventurer", "adventurers" })); *************** *** 29,43 **** AddItem("vendor", "There are many vendors wandering about the bazaar."); AddItem("town", "A new town, north of here."); AddItem("road", "The main street for Ylsrim.", ({ "kaliid" })); - SetObviousExits("e, w, n, s, enter hall"); - SetExits( ([ "east" : "/domains/Ylsrim/room/"+ "kaliid3", - "west" : "/domains/Ylsrim/room/"+ "kaliid5", - "north" : "/domains/town/room/south_road2", - "south" : "/domains/Ylsrim/room/"+ "bazaar" ]) ); SetEnters( ([ "hall" : "/domains/Ylsrim/room/"+ "adv_hall" ])); } void init(){ ::init(); } - --- 30,38 ---- diff -c -r --new-file ds2.0r25/lib/domains/Ylsrim/room/vote_hall.c ds2.0r27/lib/domains/Ylsrim/room/vote_hall.c *** ds2.0r25/lib/domains/Ylsrim/room/vote_hall.c Mon Nov 7 13:29:44 2005 --- ds2.0r27/lib/domains/Ylsrim/room/vote_hall.c Wed Jul 5 00:01:11 2006 *************** *** 20,28 **** SetProperties( ([ "no kill" : 1, "no attack" : 1, "no steal" : 1, "no magic" : 1, "light" : 3, "no bump" : 1, "no teleport" : 1 ]) ); SetShort("voting hall"); ! SetLong("You are in the voting hall of Dead Souls. This is where " ! "people come to nominate candidates for class leader and to " ! "cast their vote. There is a list posted on the wall here."); SetItems( ([ "list" : "This is the list of candidates." ]) ); SetRead( "list", (: ReadList :) ); SetObviousExits("d"); --- 20,26 ---- SetProperties( ([ "no kill" : 1, "no attack" : 1, "no steal" : 1, "no magic" : 1, "light" : 3, "no bump" : 1, "no teleport" : 1 ]) ); SetShort("voting hall"); ! SetLong("You are in the voting hall of Ylsrim. This is where people come to nominate candidates for class leader and to cast their vote. There is a list posted on the wall here."); SetItems( ([ "list" : "This is the list of candidates." ]) ); SetRead( "list", (: ReadList :) ); SetObviousExits("d"); diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/README ds2.0r27/lib/domains/campus/adm/README *** ds2.0r25/lib/domains/campus/adm/README Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/README Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,14 ---- + /domains/campus/adm + The Administrative Directory for campus + + This directory contains all files necessary for domain + administration. The following files are required for any standard + domain, but not for secondary domains or realms: + + void.c - The place people go when their environment is destructed + freezer.c - The place people go when they go net-dead + cache.c - The place hidden items go to hide + + The access object is used in any realm or domain which is giving out + access which is nonstandard. This is traditionally handled through + the 'grant' command. diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/access.c ds2.0r27/lib/domains/campus/adm/access.c *** ds2.0r25/lib/domains/campus/adm/access.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/access.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,9 ---- + /* /domains/campus/adm/access.c + * From the Nightmare V Object Library + * the access object for the campus domain + * created by Descartes of Borg 960302 + */ + + #include + + inherit LIB_ACCESS; diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/cache.c ds2.0r27/lib/domains/campus/adm/cache.c *** ds2.0r25/lib/domains/campus/adm/cache.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/cache.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,17 ---- + /* /domains/campus/adm/cache.c + * from the Nightmare V Object Library + * room where hidden objects are stored + * created by Descartes of Borg 960302 + */ + + #include + #include + + inherit LIB_ROOM; + + void create() { + room::create(); + SetShort( "The cache"); + SetLong( "Things are hidden here."); + SetProperties( ([ "storage room" : 1, "logout" : ROOM_START ]) ); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/death.txt ds2.0r27/lib/domains/campus/adm/death.txt *** ds2.0r25/lib/domains/campus/adm/death.txt Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/death.txt Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,21 ---- + + + NONONONO...... MNO! ......................... MN N! . + NONONON.... NOONNOO! MMMMMMMMMMPPPOII! NNNO!!!! . + NONONONO... O! NNO! MMMMMMMMMMMMMPPPOOOII!! NO! ... + NONONONONO........ MMMMMOOOOOOPPPPPPPPOOOOMII! ... + NONONONONON....... MMMMM.. OPPMMP .,OMI! .... + NONONONONONO...... MMMM:: o ,OPMP, o ::I!! ... + NONONONONONONONO.... NNM:::.,,OOPM!P,.::::!! .... + NONONONONONONONON.. MMNNNNNOOOOP NNIIPPO!!O! ..... + NONONONONONONONON...... MMMONNMMNNNIIIOO! ......... + NONONONONONONO.......... MOM!!!!!!!!!III ............. + NONONONON...... NNN.MNO! . O!!!!!!!!!O . OONO NO! ....... + NONONONONO.... MNNNNNO! ...OOOOOOOOOOO . MMNNON! ....... + NNNOOO!!! ...... MNNNNO! .. PPPPPPPPP .. MMNON! ..... + ...... OO! ................. ON! ....... + + YOU ARE DEAD! + + You are in formless void without substance and outside time. + diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/freezer.c ds2.0r27/lib/domains/campus/adm/freezer.c *** ds2.0r25/lib/domains/campus/adm/freezer.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/freezer.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,37 ---- + #include + #include + #include + + inherit LIB_ROOM; + + static private object *Old; + + void create() { + room::create(); + SetNoClean(1); + SetProperties(([ "login" : ROOM_START ])); + SetShort( "The freezer"); + SetLong( "The local freezer. Go down to leave."); + SetObviousExits("d"); + SetExits( ([ "down" : ROOM_START ]) ); + Old = ({}); + call_out("clean_room", MAX_NET_DEAD_TIME); + SetNoModify(1); + } + + static void clean_room() { + object *clean_me; + object ob; + + foreach(ob in filter(all_inventory(), (: !living($1) :))) + ob->eventDestruct(); + if( !sizeof(filter(all_inventory(), (: living :))) ) { + Old = ({}); + call_out((: clean_room :), MAX_NET_DEAD_TIME); + return; + } + clean_me = (all_inventory() & Old); + Old = all_inventory() - clean_me; + foreach(ob in clean_me) ob->eventDestruct(); + call_out((: clean_room :), MAX_NET_DEAD_TIME); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/furnace.c ds2.0r27/lib/domains/campus/adm/furnace.c *** ds2.0r25/lib/domains/campus/adm/furnace.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/furnace.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,36 ---- + #include + #include + + inherit LIB_ROOM; + + void create() { + room::create(); + SetAmbientLight(30); + SetShort("the furnace"); + SetLong("The furnace. Things that arrive here are "+ + "incinerated. You probably shouldn't be here. Go down to get out."); + SetProperties(([ + "no attack" : 1, + ])); + SetExits( ([ "down" : ROOM_START ]) ); + call_out((: reload_room :), 600, load_object(base_name(this_object()))); + set_heart_beat(1); + SetNoModify(1); + } + int CanReceive(object ob){ + if(interactive(ob)){ + tell_object(ob, "You fail to enter the furnace."); + return 0; + } + return 1; + } + void init(){ + ::init(); + } + void heart_beat(){ + if(sizeof(all_inventory(this_object()))){ + foreach(object ob in deep_inventory(this_object())){ + ob->eventDestruct(); + } + } + } diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/pod.c ds2.0r27/lib/domains/campus/adm/pod.c *** ds2.0r25/lib/domains/campus/adm/pod.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/pod.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/campus/adm/void.c + * from the Nightmare V Object Library + * place where people go when their environments accidentally are + * destructed + * created by Descartes of Borg 960302 + */ + + #include + #include + + inherit LIB_ROOM; + + void create() { + room::create(); + SetShort("the incept pod"); + SetLong("The incept pod. Some objects come here to be created "+ + "and identified. Go down to get out."); + SetExits( ([ "down" : ROOM_START ]) ); + } + int CanReceive(object ob){ + if(!interactive(ob)){ + ob->eventDestruct(); + return 1; + } + ob->eventMove(ROOM_VOID); + return 1; + } diff -c -r --new-file ds2.0r25/lib/domains/campus/adm/void.c ds2.0r27/lib/domains/campus/adm/void.c *** ds2.0r25/lib/domains/campus/adm/void.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/adm/void.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,16 ---- + #include + #include + + inherit LIB_ROOM; + + void create() { + room::create(); + SetAmbientLight(30); + SetShort("the void"); + SetLong("The void. Go down to get out."); + SetExits( ([ "down" : ROOM_START ]) ); + SetNoModify(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/badge.c ds2.0r27/lib/domains/campus/armor/badge.c *** ds2.0r25/lib/domains/campus/armor/badge.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/badge.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,50 ---- + #include + #include + #include + inherit LIB_ARMOR; + + static void create(){ + armor::create(); + SetKeyName("visitor's pass"); + SetId(({"testchar badge","badge","pass","visitor's pass"})); + SetShort("a test character Visitor's Pass"); + SetLong("This clip-on plastic badge grants the wearer access to "+ + "some areas typically restricted to creator staff only. Abuse of this "+ + "pass is grounds for disciplinary action. A small scribble "+ + "at the bottom of the pass reads: click heels"); + SetMass(10); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_AMULET); + SetRetainOnDeath(1); + SetRestrictLimbs( ({ "torso" }) ); + } + void init(){ + ::init(); + add_action("nplh","click"); + add_action("post_it","post"); + } + int nplh(string str){ + if(str=="heels"){ + if(present(this_object()->GetKeyName(),this_player() ) ){ + write("There's no place like home!\n"+ + "You are transported by an awesome whirlwind somewhere "+ + "else...\n"); + this_player()->eventMoveLiving("/domains/campus/room/start"); + return 1; + } + write("You click your heels together...but feel "+ + "as though you're missing something.\n"); + return 1; + } + } + int post_it(string str){ + if(present("chalkboard",environment(this_player())) && !creatorp(this_player()) ){ + write("As a visitor, you are not allowed to post on creator boards."); + return 1; + } + } + string GetAffectLong(object ob) { + if(!ob || !living(ob)) return 0; + return ob->GetName() + " is an authorized Test Character."; + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/bdu.c ds2.0r27/lib/domains/campus/armor/bdu.c *** ds2.0r25/lib/domains/campus/armor/bdu.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/bdu.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,18 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("battle dress uniform"); + SetId(({"uniform","bdu","bdu's","fatigues"})); + SetAdjectives(({"camouflage","battle","dress","combat"})); + SetShort("a battle dress uniform"); + SetLong("This uniform consists of a camouflage blouse and "+ + "pants. It is green with mottled brown and black camouflage patterns, "+ + "and probably provides excellent concealment in a wooded environment."); + SetMass(10); + SetDollarCost(100); + SetDamagePoints(100); + SetArmorType(A_BODY_ARMOR); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/bluedress.c ds2.0r27/lib/domains/campus/armor/bluedress.c *** ds2.0r25/lib/domains/campus/armor/bluedress.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/bluedress.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,18 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("blue dress"); + SetId(({"dress","outfit","costume"})); + SetAdjectives(({"blue","cotton","lovely","light"})); + SetShort("a lovely blue dress"); + SetLong("This is a lovely little blue dress of simple, "+ + "efficient design, yet obviously comfortable and practical. The hem is at "+ + "the knees, and the fabric feels soft and light yet strong, like some sort of cotton."); + SetMass(10); + SetDollarCost(100); + SetDamagePoints(100); + SetArmorType(A_BODY_ARMOR); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/chainmail.c ds2.0r27/lib/domains/campus/armor/chainmail.c *** ds2.0r25/lib/domains/campus/armor/chainmail.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/chainmail.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,18 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("chainmail shirt"); + SetId(({"armor","chainmail armor","chain mail armor","shirt","chainmail shirt","chainmail","chain mail shirt"})); + SetShort("a sturdy-looking chainmail shirt"); + SetLong("This is a shirt made of metal rings fashioned together as armor. "); + SetMass(75); + SetDollarCost(100); + SetDamagePoints(100); + SetProtection(BLUNT,4); + SetProtection(BLADE,25); + SetProtection(KNIFE,25); + SetArmorType(A_BODY_ARMOR); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/collar.c ds2.0r27/lib/domains/campus/armor/collar.c *** ds2.0r25/lib/domains/campus/armor/collar.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/collar.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,23 ---- + #include + #include + #include + inherit LIB_ARMOR; + inherit "/lib/std/bane"; + + static void create(){ + armor::create(); + bane::create(); + SetKeyName("collar"); + SetId(({"repellent_collar","bane"})); + SetAdjectives( ({"repellent","odd","plastic","white"}) ); + SetShort("a plastic collar"); + SetLong("This is a simple collar made of a soft white plastic. It "+ + "seems to be coated with a fine, clear resin. There is something "+ + "written on the collar."); + SetRead("Disease and parasite repellent collar, test character use only."); + SetMass(1); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_AMULET); + SetBane(({"all"})); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/dress.c ds2.0r27/lib/domains/campus/armor/dress.c *** ds2.0r25/lib/domains/campus/armor/dress.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/dress.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,18 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("pink dress"); + SetId(({"dress","outfit","costume"})); + SetAdjectives(({"pink","cotton","lovely","light"})); + SetShort("a lovely pink dress"); + SetLong("This is a lovely little pink dress of simple, "+ + "efficient design, yet obviously comfortable and practical. The hem is at "+ + "the knees, and the fabric feels soft and light yet strong, like some sort of cotton."); + SetMass(10); + SetDollarCost(100); + SetDamagePoints(100); + SetArmorType(A_BODY_ARMOR); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/foodsmock.c ds2.0r27/lib/domains/campus/armor/foodsmock.c *** ds2.0r25/lib/domains/campus/armor/foodsmock.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/foodsmock.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,18 ---- + #include + #include + #include + inherit LIB_ARMOR; + + static void create(){ + armor::create(); + SetKeyName("uniform"); + SetAdjectives( ({"food workers"}) ); + SetId( ({"overalls", "smock"}) ); + SetShort("a food worker's uniform"); + SetLong("This is a set of overalls used by food workers to keep their bodies and the food at a healthy distance."); + SetMass(50); + SetArmorType(A_BODY_ARMOR); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/glove.c ds2.0r27/lib/domains/campus/armor/glove.c *** ds2.0r25/lib/domains/campus/armor/glove.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/glove.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,32 ---- + /* /domains/Examples/armor/glove.c + * from the Nightmare IV LPC Library + * an example glove + * created by Descartes of Borg 950408 + */ + + #include + #include + #include + #include + + inherit LIB_ARMOR; + + static void create() { + armor::create(); + SetKeyName("red glove"); + SetId( ({ "glove", "red glove" }) ); + SetAdjectives( ({ "red" }) ); + SetShort("a red glove"); + SetLong("A red glove with five fingers."); + SetDamagePoints(75); + SetVendorType(VT_ARMOR); + SetMass(50); + SetValue(20); + SetArmorType(A_GLOVE); + SetProtection(BLUNT, 1); + SetProtection(BLADE, 1); + SetProtection(KNIFE, 2); + SetProtection(HEAT, 3); + SetProtection(COLD, 7); + SetFingers(5); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/handbag.c ds2.0r27/lib/domains/campus/armor/handbag.c *** ds2.0r25/lib/domains/campus/armor/handbag.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/handbag.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,26 ---- + + #include + + #include + #include + inherit LIB_STORAGE; + inherit LIB_ARMOR; + + + static void create() { + ::create(); + SetKeyName("backpack"); + SetId(({"bookbag","bag","pack"})); + SetAdjectives(({"leather","soft","brown"})); + SetShort("a soft, brown leather backpack"); + SetLong("This is a medium-sized backpack made of soft brown leather. "+ + "It seems suitable for carrying books around, for the busy college student. "+ + "It features wide, comfortable straps for convenient wear."); + SetMass(100); + SetDollarCost(30); + SetCanClose(1); + SetClosed(1); + SetMaxCarry(500); + SetDamagePoints(100); + SetArmorType(A_CLOAK); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/helmet.c ds2.0r27/lib/domains/campus/armor/helmet.c *** ds2.0r25/lib/domains/campus/armor/helmet.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/helmet.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,21 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("kevlar helmet"); + SetId(({"helmet","cover","kevlar"})); + SetAdjectives(({"kevlar","battle","hard"})); + SetShort("a camouflaged kevlar helmet"); + SetLong("This is a military helmet made of a a very tough "+ + "polymer fiber that provides excellent ballistic protection. It bears a "+ + "mottled camouflage design to aid in woodland concealment."); + SetMass(50); + SetDollarCost(500); + SetDamagePoints(100); + SetArmorType(A_HELMET); + SetProtection(BLUNT, 20); + SetProtection(BLADE, 20); + SetProtection(KNIFE, 20); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/jeans.c ds2.0r27/lib/domains/campus/armor/jeans.c *** ds2.0r25/lib/domains/campus/armor/jeans.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/jeans.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,19 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("blue jeans"); + SetId(({"jeans","pants","blue jeans","bluejeans","denim"})); + SetAdjectives(({"blue","denim","comfortable","broken in","broken-in"})); + SetShort("a pair of blue jeans"); + SetLong("A comfortable pair of denim blue jeans."); + SetMass(5); + SetDollarCost(1); + SetDamagePoints(1); + SetProtection(BLUNT,1); + SetProtection(BLADE,1); + SetProtection(KNIFE,1); + SetArmorType(A_PANTS); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/necklace.c ds2.0r27/lib/domains/campus/armor/necklace.c *** ds2.0r25/lib/domains/campus/armor/necklace.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/necklace.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,17 ---- + #include + #include + #include + inherit LIB_ARMOR; + + static void create(){ + armor::create(); + SetKeyName("gold necklace"); + SetId(({"necklace"})); + SetAdjectives( ({"gold","beautiful"}) ); + SetShort("a gold necklace"); + SetLong("This is a simple and beautiful gold necklace."); + SetMass(1); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_COLLAR); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/newbie_cap.c ds2.0r27/lib/domains/campus/armor/newbie_cap.c *** ds2.0r25/lib/domains/campus/armor/newbie_cap.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/newbie_cap.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,39 ---- + #include + #include + #include + inherit LIB_ARMOR; + //inherit "/lib/events/read"; + + string eventReadBill(){ + return "The front of the cap reads: \"Kiss me, I'm a newbie!\""; + } + static void create(){ + armor::create(); + SetKeyName("baseball cap"); + SetId(({"cap","hat"})); + SetAdjectives(({"baseball"})); + SetShort("a baseball cap"); + SetLong("This baseball cap looks pretty normal, except "+ + "the trim is fine corinthian leather and the bill "+ + "is plated in what appears to be pure mithril. There is some "+ + "writing on the front of the cap."); + SetMass(50); + SetDollarCost(100); + SetDamagePoints(20); + SetArmorType(A_HELMET); + SetProtection(BLUNT, 20); + SetProtection(BLADE, 20); + SetProtection(KNIFE, 20); + SetItems( ([ + ({"brim","bill","front"}) : "For some reason the front of this cap "+ + "is plated with a fine layer of mithril...one of the strongest "+ + "and most expensive substances known to man.", + ({"writing","letters"}): "Something is written on the front of the "+ + "cap. Perhaps you could \"read writing on cap\"", + ]) ); + + SetRead( ([ + ({"front","writing","letters"}) : "The front of the cap reads: \"Kiss me, I'm a newbie!\"", + ]) ); + SetDefaultRead("default", "The front of the cap reads: \"Kiss me, I'm a newbie!\""); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/pillbox_hat.c ds2.0r27/lib/domains/campus/armor/pillbox_hat.c *** ds2.0r25/lib/domains/campus/armor/pillbox_hat.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/pillbox_hat.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,21 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("pillbox hat"); + SetId(({"hat"})); + SetAdjectives(({"pillbox"})); + SetShort("a light blue pillbox hat"); + SetLong("A cute little pillbox hat, light blue in "+ + "color. The inside appears to be lined with leopard "+ + "skin. Looks uncomfortable."); + SetMass(50); + SetDollarCost(50); + SetDamagePoints(10); + SetArmorType(A_HELMET); + SetProtection(BLUNT, 2); + SetProtection(BLADE, 2); + SetProtection(KNIFE, 2); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/ring.c ds2.0r27/lib/domains/campus/armor/ring.c *** ds2.0r25/lib/domains/campus/armor/ring.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/ring.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,21 ---- + #include + #include + #include + inherit LIB_ARMOR; + + static void create(){ + armor::create(); + SetKeyName("gold_ring"); + SetId(({"ring","gold ring"})); + SetAdjectives( ({"beautiful"}) ); + SetShort("a beautiful gold ring"); + SetLong("This is a simple but beautiful ring made of "+ + "gold, suitable for wearing on one's finger."); + SetMass(1); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_RING); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/ring1.c ds2.0r27/lib/domains/campus/armor/ring1.c *** ds2.0r25/lib/domains/campus/armor/ring1.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/ring1.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,26 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("silver_ring"); + SetId(({"ring","silver ring"})); + SetAdjectives( ({"beautiful"}) ); + SetShort("a beautiful silver ring"); + SetLong("This is a simple but beautiful ring made of "+ + "silver, suitable for wearing on one's finger. The ring bears an inscription."); + SetMass(1); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_RING); + SetItems(([ + ({"script","words","inscription","writing"}) : "Words engraved on the ring in a highly "+ + "stylized script." + ]) ); + SetRead(({"script","words","inscription","writing"}), "\"etaoin shrdlu\"" ); + + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/robe.c ds2.0r27/lib/domains/campus/armor/robe.c *** ds2.0r25/lib/domains/campus/armor/robe.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/robe.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,19 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("wizard's robe"); + SetId(({"robe","cloak","duster"})); + SetAdjectives(({"wizard","wizard's","soft"})); + SetShort("a robe"); + SetLong("This is a large, comfortable-looking robe, like a wizard might wear. "); + SetMass(75); + SetDollarCost(100); + SetDamagePoints(100); + SetProtection(BLUNT,100); + SetProtection(BLADE,100); + SetProtection(KNIFE,100); + SetArmorType(A_CLOAK); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/shield.c ds2.0r27/lib/domains/campus/armor/shield.c *** ds2.0r25/lib/domains/campus/armor/shield.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/shield.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,31 ---- + /* /domains/Examples/armor/shield.c + * from the Nightmare IV LPC Library + * an example shield + * created by Lassondra@Nightmare + */ + + #include + #include + #include + #include + + inherit LIB_ARMOR; + + static void create() { + armor::create(); + SetKeyName("large shield"); + SetId( ({ "shield" }) ); + SetAdjectives( ({ "wood", "wooden","large" }) ); + SetShort("a large wooden shield"); + SetLong("A large, heavy shield made of strong wood banded with iron."); + SetDamagePoints(75); + SetVendorType(VT_ARMOR); + SetMass(100); + SetDollarCost(150); + SetArmorType(A_SHIELD); + SetProtection(BLUNT, 10); + SetProtection(BLADE, 10); + SetProtection(KNIFE, 10); + //SetRestrictLimbs( ({"left hand"}) ); + } + diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/shirt.c ds2.0r27/lib/domains/campus/armor/shirt.c *** ds2.0r25/lib/domains/campus/armor/shirt.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/shirt.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,19 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("a white t-shirt"); + SetId(({"shirt","tshirt","t-shirt","t shirt"})); + SetAdjectives(({"white"})); + SetShort("a white t-shirt"); + SetLong("An ordinary white t-shirt."); + SetMass(5); + SetDollarCost(1); + SetDamagePoints(1); + SetProtection(BLUNT,1); + SetProtection(BLADE,1); + SetProtection(KNIFE,1); + SetArmorType(A_SHIRT); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/silverring.c ds2.0r27/lib/domains/campus/armor/silverring.c *** ds2.0r25/lib/domains/campus/armor/silverring.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/silverring.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,26 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("silver_ring"); + SetId(({"ring","silver ring"})); + SetAdjectives( ({"beautiful"}) ); + SetShort("a beautiful silver ring"); + SetLong("This is a simple but beautiful ring made of "+ + "silver, suitable for wearing on one's finger. The ring bears an inscription."); + SetMass(1); + SetDollarCost(5000); + SetDamagePoints(100); + SetArmorType(A_RING); + SetItems(([ + ({"script","words","inscription","writing"}) : "Words engraved on the ring in a highly "+ + "stylized script." + ]) ); + SetRead(({"script","words","inscription","writing"}), "\"etaoin shrdlu\"" ); + + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/tshirt.c ds2.0r27/lib/domains/campus/armor/tshirt.c *** ds2.0r25/lib/domains/campus/armor/tshirt.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/tshirt.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,19 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("a Def Leppard shirt"); + SetId(({"shirt"})); + SetAdjectives(({"Def Leppard", "def leppard", "stupid", "black"})); + SetShort("a Def Leppard shirt"); + SetLong("A stupid-looking black shirt with a ridiculous band logo on it."); + SetMass(5); + SetDollarCost(1); + SetDamagePoints(1); + SetProtection(BLUNT,1); + SetProtection(BLADE,1); + SetProtection(KNIFE,1); + SetArmorType(A_SHIRT); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/vest.c ds2.0r27/lib/domains/campus/armor/vest.c *** ds2.0r25/lib/domains/campus/armor/vest.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/vest.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,19 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("paisley vest"); + SetId(({"vest"})); + SetAdjectives(({"paisley","colorful","hippie","hippy","psychedelic"})); + SetShort("a colorful, paisley vest"); + SetLong("A stupid-looking hippie vest with psychedelic paisley patterns on it."); + SetMass(5); + SetDollarCost(1); + SetDamagePoints(1); + SetProtection(BLUNT,1); + SetProtection(BLADE,1); + SetProtection(KNIFE,1); + SetArmorType(A_VEST); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/wglove_l.c ds2.0r27/lib/domains/campus/armor/wglove_l.c *** ds2.0r25/lib/domains/campus/armor/wglove_l.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/wglove_l.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,36 ---- + /* /domains/Examples/armor/glove.c + * from the Nightmare IV LPC Library + * an example glove + * created by Descartes of Borg 950408 + */ + + #include + #include + #include + #include + + inherit LIB_ARMOR; + + static void create() { + armor::create(); + SetKeyName("white glove"); + SetId( ({ "glove" }) ); + SetAdjectives( ({ "left", "white" ,"simple","elegant"}) ); + SetShort("a white glove"); + SetLong("A simple, yet elegant white glove with five fingers for the left hand."); + SetDamagePoints(75); + SetVendorType(VT_ARMOR); + SetMass(10); + SetDollarCost(10); + SetArmorType(A_GLOVE); + SetRestrictLimbs( ({"left hand"}) ); + SetProtection(BLUNT, 1); + SetProtection(BLADE, 1); + SetProtection(KNIFE, 2); + SetProtection(HEAT, 3); + SetProtection(COLD, 7); + SetFingers(5); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/wglove_r.c ds2.0r27/lib/domains/campus/armor/wglove_r.c *** ds2.0r25/lib/domains/campus/armor/wglove_r.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/wglove_r.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,36 ---- + /* /domains/Examples/armor/glove.c + * from the Nightmare IV LPC Library + * an example glove + * created by Descartes of Borg 950408 + */ + + #include + #include + #include + #include + + inherit LIB_ARMOR; + + static void create() { + armor::create(); + SetKeyName("white glove"); + SetId( ({ "glove" }) ); + SetAdjectives( ({ "right", "white" ,"simple","elegant"}) ); + SetShort("a white glove"); + SetLong("A simple, yet elegant white glove with five fingers for the right hand."); + SetDamagePoints(75); + SetVendorType(VT_ARMOR); + SetMass(10); + SetDollarCost(10); + SetArmorType(A_GLOVE); + SetRestrictLimbs( ({"right hand"}) ); + SetProtection(BLUNT, 1); + SetProtection(BLADE, 1); + SetProtection(KNIFE, 2); + SetProtection(HEAT, 3); + SetProtection(COLD, 7); + SetFingers(5); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/armor/wizard_hat.c ds2.0r27/lib/domains/campus/armor/wizard_hat.c *** ds2.0r25/lib/domains/campus/armor/wizard_hat.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/armor/wizard_hat.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,21 ---- + #include + #include + #include + inherit LIB_ARMOR; + static void create(){ + armor::create(); + SetKeyName("wizard hat"); + SetId(({"hat","headgear"})); + SetAdjectives(({"wizard","wizard's"})); + SetShort("a wizard's hat"); + SetLong("This is a large, floppy hat with a wide brim all "+ + "around it, and a conical center. It is dark blue in color, "+ + "and is decorated with pictures of yellow moons and stars."); + SetMass(50); + SetDollarCost(500); + SetDamagePoints(100); + SetArmorType(A_HELMET); + SetProtection(BLUNT, 20); + SetProtection(BLADE, 20); + SetProtection(KNIFE, 20); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/blue_door.c ds2.0r27/lib/domains/campus/doors/blue_door.c *** ds2.0r25/lib/domains/campus/doors/blue_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/blue_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("blue room", ([ "id" : ({"blue door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetSide("south", ([ "id" : ({"blue door","door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/blue_door2.c ds2.0r27/lib/domains/campus/doors/blue_door2.c *** ds2.0r25/lib/domains/campus/doors/blue_door2.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/blue_door2.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("blue room", ([ "id" : ({"blue door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetSide("east", ([ "id" : ({"blue door","door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/blue_door3.c ds2.0r27/lib/domains/campus/doors/blue_door3.c *** ds2.0r25/lib/domains/campus/doors/blue_door3.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/blue_door3.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + static void create() { + door::create(); + SetSide("blue room", ([ "id" : ({"blue door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetSide("west", ([ "id" : ({"blue door","door"}), + "short" : "a blue door", + "long" : "This is a blue door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } + diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/grate.c ds2.0r27/lib/domains/campus/doors/grate.c *** ds2.0r25/lib/domains/campus/doors/grate.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/grate.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,33 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + //inherit "/lib/events/close"; + + static void create() { + door::create(); + SetSide("down", ([ "id" : ({"grate","metal grate","sewer","sewer grate","rainwater grate","water grate"}), + "short" : "a drainage grate", + "long" : "This is a standard grate "+ + "for draining excess water from the road into the sewer system below.", + //Though "+ + //"it is man-sized and apparently can be opened, there is no visible way "+ + //"of opening it from up here.", + "lockable" : 0 ]) ); + SetSide("up", ([ "id" : ({"grate","metal grate","sewer","sewer grate","rainwater grate","water grate"}), + "short" : "a drainage grate", + "long" : "This is a standard drainage grate. You can see "+ + "light through it, and hear the sounds of the village above.", + "lockable" : 0 ]) ); + SetClosed(1); + } + //int CanOpen(object ob){ + //if(base_name(environment(ob)) == "/domains/campus/room/sewer2") return 1; + //else return 0; + //} + diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/green_door.c ds2.0r27/lib/domains/campus/doors/green_door.c *** ds2.0r25/lib/domains/campus/doors/green_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/green_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("green room", ([ "id" : ({"green door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetSide("south", ([ "id" : ({"green door","door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/green_door2.c ds2.0r27/lib/domains/campus/doors/green_door2.c *** ds2.0r25/lib/domains/campus/doors/green_door2.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/green_door2.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("green room", ([ "id" : ({"green door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetSide("east", ([ "id" : ({"green door","door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/green_door3.c ds2.0r27/lib/domains/campus/doors/green_door3.c *** ds2.0r25/lib/domains/campus/doors/green_door3.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/green_door3.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("green room", ([ "id" : ({"green door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetSide("west", ([ "id" : ({"green door","door"}), + "short" : "a green door", + "long" : "This is a green door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/plain_door.c ds2.0r27/lib/domains/campus/doors/plain_door.c *** ds2.0r25/lib/domains/campus/doors/plain_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/plain_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,22 ---- + #include + + inherit LIB_DOOR; + + static void create() { + door::create(); + + SetSide("south", (["id" : ({ "door", "plain wooden door", "wooden door" }), + "short" : "a door leading south", + "long" : "This is a plain wooden door.", + "lockable" : 0 ]) ); + SetSide("north", (["id" : ({ "door", "plain wooden door", "wooden door" }), + "short" : "a door leading north", + "long" : "This is a plain wooden door.", + "lockable" : 0 ]) ); + + SetClosed(1); + SetLocked(0); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/plain_door.test ds2.0r27/lib/domains/campus/doors/plain_door.test *** ds2.0r25/lib/domains/campus/doors/plain_door.test Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/plain_door.test Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,22 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + static void create() { + door::create(); + SetSide("north", ([ "id" : "south door", + "short" : "a door leading north", + "long" : "This is a plain wooden door.", + "lockable" : 0 ]) ); + SetSide("south", ([ "id" : "north door", + "short" : "a door leading south", + "long" : "This is a plain wooden door.", + "lockable" : 0 ]) ); + SetClosed(1); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/prob_door.c ds2.0r27/lib/domains/campus/doors/prob_door.c *** ds2.0r25/lib/domains/campus/doors/prob_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/prob_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,25 ---- + #include + + inherit LIB_DOOR; + + static void create() { + door::create(); + + SetSide("south", (["id" : ({ "door leading south", "door", "south door" }), + "short" : "a door leading south", + "long" : "This is the north side of a door leading south.", + "lockable" : 1 ]) ); + SetKeys("south", ({"prob_door_key"}) ); + + SetSide("north", (["id" : ({ "door leading north", "door", "north door" }), + "short" : "a door leading north", + "long" : "This is the south side of a door leading north.", + "lockable" : 1 ]) ); + SetKeys("north", ({"prob_door_key"}) ); + + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/red_door.c ds2.0r27/lib/domains/campus/doors/red_door.c *** ds2.0r25/lib/domains/campus/doors/red_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/red_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("red room", ([ "id" : ({"red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetSide("south", ([ "id" : ({"door","red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/red_door2.c ds2.0r27/lib/domains/campus/doors/red_door2.c *** ds2.0r25/lib/domains/campus/doors/red_door2.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/red_door2.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("red room", ([ "id" : ({"red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetSide("east", ([ "id" : ({"door","red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/red_door3.c ds2.0r27/lib/domains/campus/doors/red_door3.c *** ds2.0r25/lib/domains/campus/doors/red_door3.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/red_door3.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,27 ---- + /* /domains/Examples/etc/door.c + * from the Nightmare IV LPC Library + * an example door object connecting doorroom1.c and doorroom2.c + * created by Descartes of Borg 950411 + */ + + #include + + inherit LIB_DOOR; + + + static void create() { + door::create(); + SetSide("red room", ([ "id" : ({"red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetSide("west", ([ "id" : ({"door","red door"}), + "short" : "a red door", + "long" : "This is a red door.", + "lockable" : 1 ]) ); + SetClosed(1); + SetLocked(1); + } + void init(){ + ::init(); + } diff -c -r --new-file ds2.0r25/lib/domains/campus/doors/steel_door.c ds2.0r27/lib/domains/campus/doors/steel_door.c *** ds2.0r25/lib/domains/campus/doors/steel_door.c Wed Dec 31 19:00:00 1969 --- ds2.0r27/lib/domains/campus/doors/steel_door.c Wed Jul 5 00:01:11 2006 *************** *** 0 **** --- 1,22 ---- + /* /d